Skip to content

Instantly share code, notes, and snippets.

@1wheel
Last active May 21, 2019 05:23
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save 1wheel/5d6990abfff925e6a37e0557f1de18e5 to your computer and use it in GitHub Desktop.
Save 1wheel/5d6990abfff925e6a37e0557f1de18e5 to your computer and use it in GitHub Desktop.
contour-hack
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.d3 = global.d3 || {})));
}(this, (function (exports) { 'use strict';
var version = "4.7.3";
var ascending = function(a, b) {
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
};
var bisector = function(compare) {
if (compare.length === 1) compare = ascendingComparator(compare);
return {
left: function(a, x, lo, hi) {
if (lo == null) lo = 0;
if (hi == null) hi = a.length;
while (lo < hi) {
var mid = lo + hi >>> 1;
if (compare(a[mid], x) < 0) lo = mid + 1;
else hi = mid;
}
return lo;
},
right: function(a, x, lo, hi) {
if (lo == null) lo = 0;
if (hi == null) hi = a.length;
while (lo < hi) {
var mid = lo + hi >>> 1;
if (compare(a[mid], x) > 0) hi = mid;
else lo = mid + 1;
}
return lo;
}
};
};
function ascendingComparator(f) {
return function(d, x) {
return ascending(f(d), x);
};
}
var ascendingBisect = bisector(ascending);
var bisectRight = ascendingBisect.right;
var bisectLeft = ascendingBisect.left;
var pairs = function(array, f) {
if (f == null) f = pair;
var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
while (i < n) pairs[i] = f(p, p = array[++i]);
return pairs;
};
function pair(a, b) {
return [a, b];
}
var cross = function(a, b, f) {
var na = a.length, nb = b.length, c = new Array(na * nb), ia, ib, ic, va;
if (f == null) f = pair;
for (ia = ic = 0; ia < na; ++ia) for (va = a[ia], ib = 0; ib < nb; ++ib, ++ic) c[ic] = f(va, b[ib]);
return c;
};
var descending = function(a, b) {
return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
};
var number = function(x) {
return x === null ? NaN : +x;
};
var variance = function(array, f) {
var n = array.length,
m = 0,
a,
d,
s = 0,
i = -1,
j = 0;
if (f == null) {
while (++i < n) {
if (!isNaN(a = number(array[i]))) {
d = a - m;
m += d / ++j;
s += d * (a - m);
}
}
}
else {
while (++i < n) {
if (!isNaN(a = number(f(array[i], i, array)))) {
d = a - m;
m += d / ++j;
s += d * (a - m);
}
}
}
if (j > 1) return s / (j - 1);
};
var deviation = function(array, f) {
var v = variance(array, f);
return v ? Math.sqrt(v) : v;
};
var extent = function(array, f) {
var i = -1,
n = array.length,
a,
b,
c;
if (f == null) {
while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
while (++i < n) if ((b = array[i]) != null) {
if (a > b) a = b;
if (c < b) c = b;
}
}
else {
while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }
while (++i < n) if ((b = f(array[i], i, array)) != null) {
if (a > b) a = b;
if (c < b) c = b;
}
}
return [a, c];
};
var array = Array.prototype;
var slice = array.slice;
var map = array.map;
var constant = function(x) {
return function() {
return x;
};
};
var identity = function(x) {
return x;
};
var range = function(start, stop, step) {
start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
var i = -1,
n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
range = new Array(n);
while (++i < n) {
range[i] = start + i * step;
}
return range;
};
var e10 = Math.sqrt(50);
var e5 = Math.sqrt(10);
var e2 = Math.sqrt(2);
var ticks = function(start, stop, count) {
var step = tickStep(start, stop, count);
return range(
Math.ceil(start / step) * step,
Math.floor(stop / step) * step + step / 2, // inclusive
step
);
};
function tickStep(start, stop, count) {
var step0 = Math.abs(stop - start) / Math.max(0, count),
step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
error = step0 / step1;
if (error >= e10) step1 *= 10;
else if (error >= e5) step1 *= 5;
else if (error >= e2) step1 *= 2;
return stop < start ? -step1 : step1;
}
var thresholdSturges = function(values) {
return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
};
var histogram = function() {
var value = identity,
domain = extent,
threshold = thresholdSturges;
function histogram(data) {
var i,
n = data.length,
x,
values = new Array(n);
for (i = 0; i < n; ++i) {
values[i] = value(data[i], i, data);
}
var xz = domain(values),
x0 = xz[0],
x1 = xz[1],
tz = threshold(values, x0, x1);
// Convert number of thresholds into uniform thresholds.
if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);
// Remove any thresholds outside the domain.
var m = tz.length;
while (tz[0] <= x0) tz.shift(), --m;
while (tz[m - 1] >= x1) tz.pop(), --m;
var bins = new Array(m + 1),
bin;
// Initialize bins.
for (i = 0; i <= m; ++i) {
bin = bins[i] = [];
bin.x0 = i > 0 ? tz[i - 1] : x0;
bin.x1 = i < m ? tz[i] : x1;
}
// Assign data to bins by value, ignoring any outside the domain.
for (i = 0; i < n; ++i) {
x = values[i];
if (x0 <= x && x <= x1) {
bins[bisectRight(tz, x, 0, m)].push(data[i]);
}
}
return bins;
}
histogram.value = function(_) {
return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
};
histogram.domain = function(_) {
return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
};
histogram.thresholds = function(_) {
return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;
};
return histogram;
};
var threshold = function(array, p, f) {
if (f == null) f = number;
if (!(n = array.length)) return;
if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);
if (p >= 1) return +f(array[n - 1], n - 1, array);
var n,
h = (n - 1) * p,
i = Math.floor(h),
a = +f(array[i], i, array),
b = +f(array[i + 1], i + 1, array);
return a + (b - a) * (h - i);
};
var freedmanDiaconis = function(values, min, max) {
values = map.call(values, number).sort(ascending);
return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
};
var scott = function(values, min, max) {
return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
};
var max = function(array, f) {
var i = -1,
n = array.length,
a,
b;
if (f == null) {
while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
while (++i < n) if ((b = array[i]) != null && b > a) a = b;
}
else {
while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;
}
return a;
};
var mean = function(array, f) {
var s = 0,
n = array.length,
a,
i = -1,
j = n;
if (f == null) {
while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;
}
else {
while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;
}
if (j) return s / j;
};
var median = function(array, f) {
var numbers = [],
n = array.length,
a,
i = -1;
if (f == null) {
while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);
}
else {
while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);
}
return threshold(numbers.sort(ascending), 0.5);
};
var merge = function(arrays) {
var n = arrays.length,
m,
i = -1,
j = 0,
merged,
array;
while (++i < n) j += arrays[i].length;
merged = new Array(j);
while (--n >= 0) {
array = arrays[n];
m = array.length;
while (--m >= 0) {
merged[--j] = array[m];
}
}
return merged;
};
var min = function(array, f) {
var i = -1,
n = array.length,
a,
b;
if (f == null) {
while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
while (++i < n) if ((b = array[i]) != null && a > b) a = b;
}
else {
while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;
}
return a;
};
var permute = function(array, indexes) {
var i = indexes.length, permutes = new Array(i);
while (i--) permutes[i] = array[indexes[i]];
return permutes;
};
var scan = function(array, compare) {
if (!(n = array.length)) return;
var i = 0,
n,
j = 0,
xi,
xj = array[j];
if (!compare) compare = ascending;
while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;
if (compare(xj, xj) === 0) return j;
};
var shuffle = function(array, i0, i1) {
var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
t,
i;
while (m) {
i = Math.random() * m-- | 0;
t = array[m + i0];
array[m + i0] = array[i + i0];
array[i + i0] = t;
}
return array;
};
var sum = function(array, f) {
var s = 0,
n = array.length,
a,
i = -1;
if (f == null) {
while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.
}
else {
while (++i < n) if (a = +f(array[i], i, array)) s += a;
}
return s;
};
var transpose = function(matrix) {
if (!(n = matrix.length)) return [];
for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
row[j] = matrix[j][i];
}
}
return transpose;
};
function length(d) {
return d.length;
}
var zip = function() {
return transpose(arguments);
};
var slice$1 = Array.prototype.slice;
var identity$1 = function(x) {
return x;
};
var top = 1;
var right = 2;
var bottom = 3;
var left = 4;
var epsilon = 1e-6;
function translateX(x) {
return "translate(" + x + ",0)";
}
function translateY(y) {
return "translate(0," + y + ")";
}
function center(scale) {
var offset = scale.bandwidth() / 2;
if (scale.round()) offset = Math.round(offset);
return function(d) {
return scale(d) + offset;
};
}
function entering() {
return !this.__axis;
}
function axis(orient, scale) {
var tickArguments = [],
tickValues = null,
tickFormat = null,
tickSizeInner = 6,
tickSizeOuter = 6,
tickPadding = 3,
k = orient === top || orient === left ? -1 : 1,
x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x"),
transform = orient === top || orient === bottom ? translateX : translateY;
function axis(context) {
var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,
spacing = Math.max(tickSizeInner, 0) + tickPadding,
range = scale.range(),
range0 = range[0] + 0.5,
range1 = range[range.length - 1] + 0.5,
position = (scale.bandwidth ? center : identity$1)(scale.copy()),
selection = context.selection ? context.selection() : context,
path = selection.selectAll(".domain").data([null]),
tick = selection.selectAll(".tick").data(values, scale).order(),
tickExit = tick.exit(),
tickEnter = tick.enter().append("g").attr("class", "tick"),
line = tick.select("line"),
text = tick.select("text");
path = path.merge(path.enter().insert("path", ".tick")
.attr("class", "domain")
.attr("stroke", "#000"));
tick = tick.merge(tickEnter);
line = line.merge(tickEnter.append("line")
.attr("stroke", "#000")
.attr(x + "2", k * tickSizeInner)
.attr(y + "1", 0.5)
.attr(y + "2", 0.5));
text = text.merge(tickEnter.append("text")
.attr("fill", "#000")
.attr(x, k * spacing)
.attr(y, 0.5)
.attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
if (context !== selection) {
path = path.transition(context);
tick = tick.transition(context);
line = line.transition(context);
text = text.transition(context);
tickExit = tickExit.transition(context)
.attr("opacity", epsilon)
.attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });
tickEnter
.attr("opacity", epsilon)
.attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });
}
tickExit.remove();
path
.attr("d", orient === left || orient == right
? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter
: "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter);
tick
.attr("opacity", 1)
.attr("transform", function(d) { return transform(position(d)); });
line
.attr(x + "2", k * tickSizeInner);
text
.attr(x, k * spacing)
.text(format);
selection.filter(entering)
.attr("fill", "none")
.attr("font-size", 10)
.attr("font-family", "sans-serif")
.attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
selection
.each(function() { this.__axis = position; });
}
axis.scale = function(_) {
return arguments.length ? (scale = _, axis) : scale;
};
axis.ticks = function() {
return tickArguments = slice$1.call(arguments), axis;
};
axis.tickArguments = function(_) {
return arguments.length ? (tickArguments = _ == null ? [] : slice$1.call(_), axis) : tickArguments.slice();
};
axis.tickValues = function(_) {
return arguments.length ? (tickValues = _ == null ? null : slice$1.call(_), axis) : tickValues && tickValues.slice();
};
axis.tickFormat = function(_) {
return arguments.length ? (tickFormat = _, axis) : tickFormat;
};
axis.tickSize = function(_) {
return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
};
axis.tickSizeInner = function(_) {
return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
};
axis.tickSizeOuter = function(_) {
return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
};
axis.tickPadding = function(_) {
return arguments.length ? (tickPadding = +_, axis) : tickPadding;
};
return axis;
}
function axisTop(scale) {
return axis(top, scale);
}
function axisRight(scale) {
return axis(right, scale);
}
function axisBottom(scale) {
return axis(bottom, scale);
}
function axisLeft(scale) {
return axis(left, scale);
}
var noop = {value: function() {}};
function dispatch() {
for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
_[t] = [];
}
return new Dispatch(_);
}
function Dispatch(_) {
this._ = _;
}
function parseTypenames(typenames, types) {
return typenames.trim().split(/^|\s+/).map(function(t) {
var name = "", i = t.indexOf(".");
if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
return {type: t, name: name};
});
}
Dispatch.prototype = dispatch.prototype = {
constructor: Dispatch,
on: function(typename, callback) {
var _ = this._,
T = parseTypenames(typename + "", _),
t,
i = -1,
n = T.length;
// If no callback was specified, return the callback of the given type and name.
if (arguments.length < 2) {
while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
return;
}
// If a type was specified, set the callback for the given type and name.
// Otherwise, if a null callback was specified, remove callbacks of the given name.
if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
while (++i < n) {
if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
}
return this;
},
copy: function() {
var copy = {}, _ = this._;
for (var t in _) copy[t] = _[t].slice();
return new Dispatch(copy);
},
call: function(type, that) {
if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
},
apply: function(type, that, args) {
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
}
};
function get(type, name) {
for (var i = 0, n = type.length, c; i < n; ++i) {
if ((c = type[i]).name === name) {
return c.value;
}
}
}
function set(type, name, callback) {
for (var i = 0, n = type.length; i < n; ++i) {
if (type[i].name === name) {
type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
break;
}
}
if (callback != null) type.push({name: name, value: callback});
return type;
}
var xhtml = "http://www.w3.org/1999/xhtml";
var namespaces = {
svg: "http://www.w3.org/2000/svg",
xhtml: xhtml,
xlink: "http://www.w3.org/1999/xlink",
xml: "http://www.w3.org/XML/1998/namespace",
xmlns: "http://www.w3.org/2000/xmlns/"
};
var namespace = function(name) {
var prefix = name += "", i = prefix.indexOf(":");
if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
};
function creatorInherit(name) {
return function() {
var document = this.ownerDocument,
uri = this.namespaceURI;
return uri === xhtml && document.documentElement.namespaceURI === xhtml
? document.createElement(name)
: document.createElementNS(uri, name);
};
}
function creatorFixed(fullname) {
return function() {
return this.ownerDocument.createElementNS(fullname.space, fullname.local);
};
}
var creator = function(name) {
var fullname = namespace(name);
return (fullname.local
? creatorFixed
: creatorInherit)(fullname);
};
var nextId = 0;
function local$1() {
return new Local;
}
function Local() {
this._ = "@" + (++nextId).toString(36);
}
Local.prototype = local$1.prototype = {
constructor: Local,
get: function(node) {
var id = this._;
while (!(id in node)) if (!(node = node.parentNode)) return;
return node[id];
},
set: function(node, value) {
return node[this._] = value;
},
remove: function(node) {
return this._ in node && delete node[this._];
},
toString: function() {
return this._;
}
};
var matcher = function(selector) {
return function() {
return this.matches(selector);
};
};
if (typeof document !== "undefined") {
var element = document.documentElement;
if (!element.matches) {
var vendorMatches = element.webkitMatchesSelector
|| element.msMatchesSelector
|| element.mozMatchesSelector
|| element.oMatchesSelector;
matcher = function(selector) {
return function() {
return vendorMatches.call(this, selector);
};
};
}
}
var matcher$1 = matcher;
var filterEvents = {};
exports.event = null;
if (typeof document !== "undefined") {
var element$1 = document.documentElement;
if (!("onmouseenter" in element$1)) {
filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
}
}
function filterContextListener(listener, index, group) {
listener = contextListener(listener, index, group);
return function(event) {
var related = event.relatedTarget;
if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
listener.call(this, event);
}
};
}
function contextListener(listener, index, group) {
return function(event1) {
var event0 = exports.event; // Events can be reentrant (e.g., focus).
exports.event = event1;
try {
listener.call(this, this.__data__, index, group);
} finally {
exports.event = event0;
}
};
}
function parseTypenames$1(typenames) {
return typenames.trim().split(/^|\s+/).map(function(t) {
var name = "", i = t.indexOf(".");
if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
return {type: t, name: name};
});
}
function onRemove(typename) {
return function() {
var on = this.__on;
if (!on) return;
for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
this.removeEventListener(o.type, o.listener, o.capture);
} else {
on[++i] = o;
}
}
if (++i) on.length = i;
else delete this.__on;
};
}
function onAdd(typename, value, capture) {
var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
return function(d, i, group) {
var on = this.__on, o, listener = wrap(value, i, group);
if (on) for (var j = 0, m = on.length; j < m; ++j) {
if ((o = on[j]).type === typename.type && o.name === typename.name) {
this.removeEventListener(o.type, o.listener, o.capture);
this.addEventListener(o.type, o.listener = listener, o.capture = capture);
o.value = value;
return;
}
}
this.addEventListener(typename.type, listener, capture);
o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
if (!on) this.__on = [o];
else on.push(o);
};
}
var selection_on = function(typename, value, capture) {
var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
if (arguments.length < 2) {
var on = this.node().__on;
if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
for (i = 0, o = on[j]; i < n; ++i) {
if ((t = typenames[i]).type === o.type && t.name === o.name) {
return o.value;
}
}
}
return;
}
on = value ? onAdd : onRemove;
if (capture == null) capture = false;
for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
return this;
};
function customEvent(event1, listener, that, args) {
var event0 = exports.event;
event1.sourceEvent = exports.event;
exports.event = event1;
try {
return listener.apply(that, args);
} finally {
exports.event = event0;
}
}
var sourceEvent = function() {
var current = exports.event, source;
while (source = current.sourceEvent) current = source;
return current;
};
var point = function(node, event) {
var svg = node.ownerSVGElement || node;
if (svg.createSVGPoint) {
var point = svg.createSVGPoint();
point.x = event.clientX, point.y = event.clientY;
point = point.matrixTransform(node.getScreenCTM().inverse());
return [point.x, point.y];
}
var rect = node.getBoundingClientRect();
return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
};
var mouse = function(node) {
var event = sourceEvent();
if (event.changedTouches) event = event.changedTouches[0];
return point(node, event);
};
function none() {}
var selector = function(selector) {
return selector == null ? none : function() {
return this.querySelector(selector);
};
};
var selection_select = function(select) {
if (typeof select !== "function") select = selector(select);
for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
if ("__data__" in node) subnode.__data__ = node.__data__;
subgroup[i] = subnode;
}
}
}
return new Selection(subgroups, this._parents);
};
function empty$1() {
return [];
}
var selectorAll = function(selector) {
return selector == null ? empty$1 : function() {
return this.querySelectorAll(selector);
};
};
var selection_selectAll = function(select) {
if (typeof select !== "function") select = selectorAll(select);
for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
if (node = group[i]) {
subgroups.push(select.call(node, node.__data__, i, group));
parents.push(node);
}
}
}
return new Selection(subgroups, parents);
};
var selection_filter = function(match) {
if (typeof match !== "function") match = matcher$1(match);
for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
subgroup.push(node);
}
}
}
return new Selection(subgroups, this._parents);
};
var sparse = function(update) {
return new Array(update.length);
};
var selection_enter = function() {
return new Selection(this._enter || this._groups.map(sparse), this._parents);
};
function EnterNode(parent, datum) {
this.ownerDocument = parent.ownerDocument;
this.namespaceURI = parent.namespaceURI;
this._next = null;
this._parent = parent;
this.__data__ = datum;
}
EnterNode.prototype = {
constructor: EnterNode,
appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
querySelector: function(selector) { return this._parent.querySelector(selector); },
querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
};
var constant$1 = function(x) {
return function() {
return x;
};
};
var keyPrefix = "$"; // Protect against keys like “__proto__”.
function bindIndex(parent, group, enter, update, exit, data) {
var i = 0,
node,
groupLength = group.length,
dataLength = data.length;
// Put any non-null nodes that fit into update.
// Put any null nodes into enter.
// Put any remaining data into enter.
for (; i < dataLength; ++i) {
if (node = group[i]) {
node.__data__ = data[i];
update[i] = node;
} else {
enter[i] = new EnterNode(parent, data[i]);
}
}
// Put any non-null nodes that don’t fit into exit.
for (; i < groupLength; ++i) {
if (node = group[i]) {
exit[i] = node;
}
}
}
function bindKey(parent, group, enter, update, exit, data, key) {
var i,
node,
nodeByKeyValue = {},
groupLength = group.length,
dataLength = data.length,
keyValues = new Array(groupLength),
keyValue;
// Compute the key for each node.
// If multiple nodes have the same key, the duplicates are added to exit.
for (i = 0; i < groupLength; ++i) {
if (node = group[i]) {
keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
if (keyValue in nodeByKeyValue) {
exit[i] = node;
} else {
nodeByKeyValue[keyValue] = node;
}
}
}
// Compute the key for each datum.
// If there a node associated with this key, join and add it to update.
// If there is not (or the key is a duplicate), add it to enter.
for (i = 0; i < dataLength; ++i) {
keyValue = keyPrefix + key.call(parent, data[i], i, data);
if (node = nodeByKeyValue[keyValue]) {
update[i] = node;
node.__data__ = data[i];
nodeByKeyValue[keyValue] = null;
} else {
enter[i] = new EnterNode(parent, data[i]);
}
}
// Add any remaining nodes that were not bound to data to exit.
for (i = 0; i < groupLength; ++i) {
if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
exit[i] = node;
}
}
}
var selection_data = function(value, key) {
if (!value) {
data = new Array(this.size()), j = -1;
this.each(function(d) { data[++j] = d; });
return data;
}
var bind = key ? bindKey : bindIndex,
parents = this._parents,
groups = this._groups;
if (typeof value !== "function") value = constant$1(value);
for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
var parent = parents[j],
group = groups[j],
groupLength = group.length,
data = value.call(parent, parent && parent.__data__, j, parents),
dataLength = data.length,
enterGroup = enter[j] = new Array(dataLength),
updateGroup = update[j] = new Array(dataLength),
exitGroup = exit[j] = new Array(groupLength);
bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
// Now connect the enter nodes to their following update node, such that
// appendChild can insert the materialized enter node before this node,
// rather than at the end of the parent node.
for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
if (previous = enterGroup[i0]) {
if (i0 >= i1) i1 = i0 + 1;
while (!(next = updateGroup[i1]) && ++i1 < dataLength);
previous._next = next || null;
}
}
}
update = new Selection(update, parents);
update._enter = enter;
update._exit = exit;
return update;
};
var selection_exit = function() {
return new Selection(this._exit || this._groups.map(sparse), this._parents);
};
var selection_merge = function(selection) {
for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
if (node = group0[i] || group1[i]) {
merge[i] = node;
}
}
}
for (; j < m0; ++j) {
merges[j] = groups0[j];
}
return new Selection(merges, this._parents);
};
var selection_order = function() {
for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
if (node = group[i]) {
if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
next = node;
}
}
}
return this;
};
var selection_sort = function(compare) {
if (!compare) compare = ascending$1;
function compareNode(a, b) {
return a && b ? compare(a.__data__, b.__data__) : !a - !b;
}
for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
if (node = group[i]) {
sortgroup[i] = node;
}
}
sortgroup.sort(compareNode);
}
return new Selection(sortgroups, this._parents).order();
};
function ascending$1(a, b) {
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
}
var selection_call = function() {
var callback = arguments[0];
arguments[0] = this;
callback.apply(null, arguments);
return this;
};
var selection_nodes = function() {
var nodes = new Array(this.size()), i = -1;
this.each(function() { nodes[++i] = this; });
return nodes;
};
var selection_node = function() {
for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
var node = group[i];
if (node) return node;
}
}
return null;
};
var selection_size = function() {
var size = 0;
this.each(function() { ++size; });
return size;
};
var selection_empty = function() {
return !this.node();
};
var selection_each = function(callback) {
for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
if (node = group[i]) callback.call(node, node.__data__, i, group);
}
}
return this;
};
function attrRemove(name) {
return function() {
this.removeAttribute(name);
};
}
function attrRemoveNS(fullname) {
return function() {
this.removeAttributeNS(fullname.space, fullname.local);
};
}
function attrConstant(name, value) {
return function() {
this.setAttribute(name, value);
};
}
function attrConstantNS(fullname, value) {
return function() {
this.setAttributeNS(fullname.space, fullname.local, value);
};
}
function attrFunction(name, value) {
return function() {
var v = value.apply(this, arguments);
if (v == null) this.removeAttribute(name);
else this.setAttribute(name, v);
};
}
function attrFunctionNS(fullname, value) {
return function() {
var v = value.apply(this, arguments);
if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
else this.setAttributeNS(fullname.space, fullname.local, v);
};
}
var selection_attr = function(name, value) {
var fullname = namespace(name);
if (arguments.length < 2) {
var node = this.node();
return fullname.local
? node.getAttributeNS(fullname.space, fullname.local)
: node.getAttribute(fullname);
}
return this.each((value == null
? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
? (fullname.local ? attrFunctionNS : attrFunction)
: (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
};
var window$1 = function(node) {
return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
|| (node.document && node) // node is a Window
|| node.defaultView; // node is a Document
};
function styleRemove(name) {
return function() {
this.style.removeProperty(name);
};
}
function styleConstant(name, value, priority) {
return function() {
this.style.setProperty(name, value, priority);
};
}
function styleFunction(name, value, priority) {
return function() {
var v = value.apply(this, arguments);
if (v == null) this.style.removeProperty(name);
else this.style.setProperty(name, v, priority);
};
}
var selection_style = function(name, value, priority) {
var node;
return arguments.length > 1
? this.each((value == null
? styleRemove : typeof value === "function"
? styleFunction
: styleConstant)(name, value, priority == null ? "" : priority))
: window$1(node = this.node())
.getComputedStyle(node, null)
.getPropertyValue(name);
};
function propertyRemove(name) {
return function() {
delete this[name];
};
}
function propertyConstant(name, value) {
return function() {
this[name] = value;
};
}
function propertyFunction(name, value) {
return function() {
var v = value.apply(this, arguments);
if (v == null) delete this[name];
else this[name] = v;
};
}
var selection_property = function(name, value) {
return arguments.length > 1
? this.each((value == null
? propertyRemove : typeof value === "function"
? propertyFunction
: propertyConstant)(name, value))
: this.node()[name];
};
function classArray(string) {
return string.trim().split(/^|\s+/);
}
function classList(node) {
return node.classList || new ClassList(node);
}
function ClassList(node) {
this._node = node;
this._names = classArray(node.getAttribute("class") || "");
}
ClassList.prototype = {
add: function(name) {
var i = this._names.indexOf(name);
if (i < 0) {
this._names.push(name);
this._node.setAttribute("class", this._names.join(" "));
}
},
remove: function(name) {
var i = this._names.indexOf(name);
if (i >= 0) {
this._names.splice(i, 1);
this._node.setAttribute("class", this._names.join(" "));
}
},
contains: function(name) {
return this._names.indexOf(name) >= 0;
}
};
function classedAdd(node, names) {
var list = classList(node), i = -1, n = names.length;
while (++i < n) list.add(names[i]);
}
function classedRemove(node, names) {
var list = classList(node), i = -1, n = names.length;
while (++i < n) list.remove(names[i]);
}
function classedTrue(names) {
return function() {
classedAdd(this, names);
};
}
function classedFalse(names) {
return function() {
classedRemove(this, names);
};
}
function classedFunction(names, value) {
return function() {
(value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
};
}
var selection_classed = function(name, value) {
var names = classArray(name + "");
if (arguments.length < 2) {
var list = classList(this.node()), i = -1, n = names.length;
while (++i < n) if (!list.contains(names[i])) return false;
return true;
}
return this.each((typeof value === "function"
? classedFunction : value
? classedTrue
: classedFalse)(names, value));
};
function textRemove() {
this.textContent = "";
}
function textConstant(value) {
return function() {
this.textContent = value;
};
}
function textFunction(value) {
return function() {
var v = value.apply(this, arguments);
this.textContent = v == null ? "" : v;
};
}
var selection_text = function(value) {
return arguments.length
? this.each(value == null
? textRemove : (typeof value === "function"
? textFunction
: textConstant)(value))
: this.node().textContent;
};
function htmlRemove() {
this.innerHTML = "";
}
function htmlConstant(value) {
return function() {
this.innerHTML = value;
};
}
function htmlFunction(value) {
return function() {
var v = value.apply(this, arguments);
this.innerHTML = v == null ? "" : v;
};
}
var selection_html = function(value) {
return arguments.length
? this.each(value == null
? htmlRemove : (typeof value === "function"
? htmlFunction
: htmlConstant)(value))
: this.node().innerHTML;
};
function raise() {
if (this.nextSibling) this.parentNode.appendChild(this);
}
var selection_raise = function() {
return this.each(raise);
};
function lower() {
if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
}
var selection_lower = function() {
return this.each(lower);
};
var selection_append = function(name) {
var create = typeof name === "function" ? name : creator(name);
return this.select(function() {
return this.appendChild(create.apply(this, arguments));
});
};
function constantNull() {
return null;
}
var selection_insert = function(name, before) {
var create = typeof name === "function" ? name : creator(name),
select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
return this.select(function() {
return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
});
};
function remove() {
var parent = this.parentNode;
if (parent) parent.removeChild(this);
}
var selection_remove = function() {
return this.each(remove);
};
var selection_datum = function(value) {
return arguments.length
? this.property("__data__", value)
: this.node().__data__;
};
function dispatchEvent(node, type, params) {
var window = window$1(node),
event = window.CustomEvent;
if (event) {
event = new event(type, params);
} else {
event = window.document.createEvent("Event");
if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
else event.initEvent(type, false, false);
}
node.dispatchEvent(event);
}
function dispatchConstant(type, params) {
return function() {
return dispatchEvent(this, type, params);
};
}
function dispatchFunction(type, params) {
return function() {
return dispatchEvent(this, type, params.apply(this, arguments));
};
}
var selection_dispatch = function(type, params) {
return this.each((typeof params === "function"
? dispatchFunction
: dispatchConstant)(type, params));
};
var root = [null];
function Selection(groups, parents) {
this._groups = groups;
this._parents = parents;
}
function selection() {
return new Selection([[document.documentElement]], root);
}
Selection.prototype = selection.prototype = {
constructor: Selection,
select: selection_select,
selectAll: selection_selectAll,
filter: selection_filter,
data: selection_data,
enter: selection_enter,
exit: selection_exit,
merge: selection_merge,
order: selection_order,
sort: selection_sort,
call: selection_call,
nodes: selection_nodes,
node: selection_node,
size: selection_size,
empty: selection_empty,
each: selection_each,
attr: selection_attr,
style: selection_style,
property: selection_property,
classed: selection_classed,
text: selection_text,
html: selection_html,
raise: selection_raise,
lower: selection_lower,
append: selection_append,
insert: selection_insert,
remove: selection_remove,
datum: selection_datum,
on: selection_on,
dispatch: selection_dispatch
};
var select = function(selector) {
return typeof selector === "string"
? new Selection([[document.querySelector(selector)]], [document.documentElement])
: new Selection([[selector]], root);
};
var selectAll = function(selector) {
return typeof selector === "string"
? new Selection([document.querySelectorAll(selector)], [document.documentElement])
: new Selection([selector == null ? [] : selector], root);
};
var touch = function(node, touches, identifier) {
if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
if ((touch = touches[i]).identifier === identifier) {
return point(node, touch);
}
}
return null;
};
var touches = function(node, touches) {
if (touches == null) touches = sourceEvent().touches;
for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
points[i] = point(node, touches[i]);
}
return points;
};
function nopropagation() {
exports.event.stopImmediatePropagation();
}
var noevent = function() {
exports.event.preventDefault();
exports.event.stopImmediatePropagation();
};
var dragDisable = function(view) {
var root = view.document.documentElement,
selection$$1 = select(view).on("dragstart.drag", noevent, true);
if ("onselectstart" in root) {
selection$$1.on("selectstart.drag", noevent, true);
} else {
root.__noselect = root.style.MozUserSelect;
root.style.MozUserSelect = "none";
}
};
function yesdrag(view, noclick) {
var root = view.document.documentElement,
selection$$1 = select(view).on("dragstart.drag", null);
if (noclick) {
selection$$1.on("click.drag", noevent, true);
setTimeout(function() { selection$$1.on("click.drag", null); }, 0);
}
if ("onselectstart" in root) {
selection$$1.on("selectstart.drag", null);
} else {
root.style.MozUserSelect = root.__noselect;
delete root.__noselect;
}
}
var constant$2 = function(x) {
return function() {
return x;
};
};
function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
this.target = target;
this.type = type;
this.subject = subject;
this.identifier = id;
this.active = active;
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
this._ = dispatch;
}
DragEvent.prototype.on = function() {
var value = this._.on.apply(this._, arguments);
return value === this._ ? this : value;
};
// Ignore right-click, since that should open the context menu.
function defaultFilter$1() {
return !exports.event.button;
}
function defaultContainer() {
return this.parentNode;
}
function defaultSubject(d) {
return d == null ? {x: exports.event.x, y: exports.event.y} : d;
}
var drag = function() {
var filter = defaultFilter$1,
container = defaultContainer,
subject = defaultSubject,
gestures = {},
listeners = dispatch("start", "drag", "end"),
active = 0,
mousemoving,
touchending;
function drag(selection$$1) {
selection$$1
.on("mousedown.drag", mousedowned)
.on("touchstart.drag", touchstarted)
.on("touchmove.drag", touchmoved)
.on("touchend.drag touchcancel.drag", touchended)
.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
}
function mousedowned() {
if (touchending || !filter.apply(this, arguments)) return;
var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
if (!gesture) return;
select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
dragDisable(exports.event.view);
nopropagation();
mousemoving = false;
gesture("start");
}
function mousemoved() {
noevent();
mousemoving = true;
gestures.mouse("drag");
}
function mouseupped() {
select(exports.event.view).on("mousemove.drag mouseup.drag", null);
yesdrag(exports.event.view, mousemoving);
noevent();
gestures.mouse("end");
}
function touchstarted() {
if (!filter.apply(this, arguments)) return;
var touches$$1 = exports.event.changedTouches,
c = container.apply(this, arguments),
n = touches$$1.length, i, gesture;
for (i = 0; i < n; ++i) {
if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {
nopropagation();
gesture("start");
}
}
}
function touchmoved() {
var touches$$1 = exports.event.changedTouches,
n = touches$$1.length, i, gesture;
for (i = 0; i < n; ++i) {
if (gesture = gestures[touches$$1[i].identifier]) {
noevent();
gesture("drag");
}
}
}
function touchended() {
var touches$$1 = exports.event.changedTouches,
n = touches$$1.length, i, gesture;
if (touchending) clearTimeout(touchending);
touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
for (i = 0; i < n; ++i) {
if (gesture = gestures[touches$$1[i].identifier]) {
nopropagation();
gesture("end");
}
}
}
function beforestart(id, container, point, that, args) {
var p = point(container, id), s, dx, dy,
sublisteners = listeners.copy();
if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;
dx = s.x - p[0] || 0;
dy = s.y - p[1] || 0;
return true;
})) return;
return function gesture(type) {
var p0 = p, n;
switch (type) {
case "start": gestures[id] = gesture, n = active++; break;
case "end": delete gestures[id], --active; // nobreak
case "drag": p = point(container, id), n = active; break;
}
customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
};
}
drag.filter = function(_) {
return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter;
};
drag.container = function(_) {
return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container;
};
drag.subject = function(_) {
return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject;
};
drag.on = function() {
var value = listeners.on.apply(listeners, arguments);
return value === listeners ? drag : value;
};
return drag;
};
var define = function(constructor, factory, prototype) {
constructor.prototype = factory.prototype = prototype;
prototype.constructor = constructor;
};
function extend(parent, definition) {
var prototype = Object.create(parent.prototype);
for (var key in definition) prototype[key] = definition[key];
return prototype;
}
function Color() {}
var darker = 0.7;
var brighter = 1 / darker;
var reI = "\\s*([+-]?\\d+)\\s*";
var reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*";
var reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*";
var reHex3 = /^#([0-9a-f]{3})$/;
var reHex6 = /^#([0-9a-f]{6})$/;
var reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$");
var reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$");
var reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$");
var reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$");
var reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$");
var reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
var named = {
aliceblue: 0xf0f8ff,
antiquewhite: 0xfaebd7,
aqua: 0x00ffff,
aquamarine: 0x7fffd4,
azure: 0xf0ffff,
beige: 0xf5f5dc,
bisque: 0xffe4c4,
black: 0x000000,
blanchedalmond: 0xffebcd,
blue: 0x0000ff,
blueviolet: 0x8a2be2,
brown: 0xa52a2a,
burlywood: 0xdeb887,
cadetblue: 0x5f9ea0,
chartreuse: 0x7fff00,
chocolate: 0xd2691e,
coral: 0xff7f50,
cornflowerblue: 0x6495ed,
cornsilk: 0xfff8dc,
crimson: 0xdc143c,
cyan: 0x00ffff,
darkblue: 0x00008b,
darkcyan: 0x008b8b,
darkgoldenrod: 0xb8860b,
darkgray: 0xa9a9a9,
darkgreen: 0x006400,
darkgrey: 0xa9a9a9,
darkkhaki: 0xbdb76b,
darkmagenta: 0x8b008b,
darkolivegreen: 0x556b2f,
darkorange: 0xff8c00,
darkorchid: 0x9932cc,
darkred: 0x8b0000,
darksalmon: 0xe9967a,
darkseagreen: 0x8fbc8f,
darkslateblue: 0x483d8b,
darkslategray: 0x2f4f4f,
darkslategrey: 0x2f4f4f,
darkturquoise: 0x00ced1,
darkviolet: 0x9400d3,
deeppink: 0xff1493,
deepskyblue: 0x00bfff,
dimgray: 0x696969,
dimgrey: 0x696969,
dodgerblue: 0x1e90ff,
firebrick: 0xb22222,
floralwhite: 0xfffaf0,
forestgreen: 0x228b22,
fuchsia: 0xff00ff,
gainsboro: 0xdcdcdc,
ghostwhite: 0xf8f8ff,
gold: 0xffd700,
goldenrod: 0xdaa520,
gray: 0x808080,
green: 0x008000,
greenyellow: 0xadff2f,
grey: 0x808080,
honeydew: 0xf0fff0,
hotpink: 0xff69b4,
indianred: 0xcd5c5c,
indigo: 0x4b0082,
ivory: 0xfffff0,
khaki: 0xf0e68c,
lavender: 0xe6e6fa,
lavenderblush: 0xfff0f5,
lawngreen: 0x7cfc00,
lemonchiffon: 0xfffacd,
lightblue: 0xadd8e6,
lightcoral: 0xf08080,
lightcyan: 0xe0ffff,
lightgoldenrodyellow: 0xfafad2,
lightgray: 0xd3d3d3,
lightgreen: 0x90ee90,
lightgrey: 0xd3d3d3,
lightpink: 0xffb6c1,
lightsalmon: 0xffa07a,
lightseagreen: 0x20b2aa,
lightskyblue: 0x87cefa,
lightslategray: 0x778899,
lightslategrey: 0x778899,
lightsteelblue: 0xb0c4de,
lightyellow: 0xffffe0,
lime: 0x00ff00,
limegreen: 0x32cd32,
linen: 0xfaf0e6,
magenta: 0xff00ff,
maroon: 0x800000,
mediumaquamarine: 0x66cdaa,
mediumblue: 0x0000cd,
mediumorchid: 0xba55d3,
mediumpurple: 0x9370db,
mediumseagreen: 0x3cb371,
mediumslateblue: 0x7b68ee,
mediumspringgreen: 0x00fa9a,
mediumturquoise: 0x48d1cc,
mediumvioletred: 0xc71585,
midnightblue: 0x191970,
mintcream: 0xf5fffa,
mistyrose: 0xffe4e1,
moccasin: 0xffe4b5,
navajowhite: 0xffdead,
navy: 0x000080,
oldlace: 0xfdf5e6,
olive: 0x808000,
olivedrab: 0x6b8e23,
orange: 0xffa500,
orangered: 0xff4500,
orchid: 0xda70d6,
palegoldenrod: 0xeee8aa,
palegreen: 0x98fb98,
paleturquoise: 0xafeeee,
palevioletred: 0xdb7093,
papayawhip: 0xffefd5,
peachpuff: 0xffdab9,
peru: 0xcd853f,
pink: 0xffc0cb,
plum: 0xdda0dd,
powderblue: 0xb0e0e6,
purple: 0x800080,
rebeccapurple: 0x663399,
red: 0xff0000,
rosybrown: 0xbc8f8f,
royalblue: 0x4169e1,
saddlebrown: 0x8b4513,
salmon: 0xfa8072,
sandybrown: 0xf4a460,
seagreen: 0x2e8b57,
seashell: 0xfff5ee,
sienna: 0xa0522d,
silver: 0xc0c0c0,
skyblue: 0x87ceeb,
slateblue: 0x6a5acd,
slategray: 0x708090,
slategrey: 0x708090,
snow: 0xfffafa,
springgreen: 0x00ff7f,
steelblue: 0x4682b4,
tan: 0xd2b48c,
teal: 0x008080,
thistle: 0xd8bfd8,
tomato: 0xff6347,
turquoise: 0x40e0d0,
violet: 0xee82ee,
wheat: 0xf5deb3,
white: 0xffffff,
whitesmoke: 0xf5f5f5,
yellow: 0xffff00,
yellowgreen: 0x9acd32
};
define(Color, color, {
displayable: function() {
return this.rgb().displayable();
},
toString: function() {
return this.rgb() + "";
}
});
function color(format) {
var m;
format = (format + "").trim().toLowerCase();
return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
: (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
: (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
: (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
: (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
: (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
: (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
: (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
: named.hasOwnProperty(format) ? rgbn(named[format])
: format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
: null;
}
function rgbn(n) {
return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
}
function rgba(r, g, b, a) {
if (a <= 0) r = g = b = NaN;
return new Rgb(r, g, b, a);
}
function rgbConvert(o) {
if (!(o instanceof Color)) o = color(o);
if (!o) return new Rgb;
o = o.rgb();
return new Rgb(o.r, o.g, o.b, o.opacity);
}
function rgb(r, g, b, opacity) {
return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
}
function Rgb(r, g, b, opacity) {
this.r = +r;
this.g = +g;
this.b = +b;
this.opacity = +opacity;
}
define(Rgb, rgb, extend(Color, {
brighter: function(k) {
k = k == null ? brighter : Math.pow(brighter, k);
return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
},
darker: function(k) {
k = k == null ? darker : Math.pow(darker, k);
return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
},
rgb: function() {
return this;
},
displayable: function() {
return (0 <= this.r && this.r <= 255)
&& (0 <= this.g && this.g <= 255)
&& (0 <= this.b && this.b <= 255)
&& (0 <= this.opacity && this.opacity <= 1);
},
toString: function() {
var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
return (a === 1 ? "rgb(" : "rgba(")
+ Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
+ Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
+ Math.max(0, Math.min(255, Math.round(this.b) || 0))
+ (a === 1 ? ")" : ", " + a + ")");
}
}));
function hsla(h, s, l, a) {
if (a <= 0) h = s = l = NaN;
else if (l <= 0 || l >= 1) h = s = NaN;
else if (s <= 0) h = NaN;
return new Hsl(h, s, l, a);
}
function hslConvert(o) {
if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
if (!(o instanceof Color)) o = color(o);
if (!o) return new Hsl;
if (o instanceof Hsl) return o;
o = o.rgb();
var r = o.r / 255,
g = o.g / 255,
b = o.b / 255,
min = Math.min(r, g, b),
max = Math.max(r, g, b),
h = NaN,
s = max - min,
l = (max + min) / 2;
if (s) {
if (r === max) h = (g - b) / s + (g < b) * 6;
else if (g === max) h = (b - r) / s + 2;
else h = (r - g) / s + 4;
s /= l < 0.5 ? max + min : 2 - max - min;
h *= 60;
} else {
s = l > 0 && l < 1 ? 0 : h;
}
return new Hsl(h, s, l, o.opacity);
}
function hsl(h, s, l, opacity) {
return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
}
function Hsl(h, s, l, opacity) {
this.h = +h;
this.s = +s;
this.l = +l;
this.opacity = +opacity;
}
define(Hsl, hsl, extend(Color, {
brighter: function(k) {
k = k == null ? brighter : Math.pow(brighter, k);
return new Hsl(this.h, this.s, this.l * k, this.opacity);
},
darker: function(k) {
k = k == null ? darker : Math.pow(darker, k);
return new Hsl(this.h, this.s, this.l * k, this.opacity);
},
rgb: function() {
var h = this.h % 360 + (this.h < 0) * 360,
s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
l = this.l,
m2 = l + (l < 0.5 ? l : 1 - l) * s,
m1 = 2 * l - m2;
return new Rgb(
hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
hsl2rgb(h, m1, m2),
hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
this.opacity
);
},
displayable: function() {
return (0 <= this.s && this.s <= 1 || isNaN(this.s))
&& (0 <= this.l && this.l <= 1)
&& (0 <= this.opacity && this.opacity <= 1);
}
}));
/* From FvD 13.37, CSS Color Module Level 3 */
function hsl2rgb(h, m1, m2) {
return (h < 60 ? m1 + (m2 - m1) * h / 60
: h < 180 ? m2
: h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
: m1) * 255;
}
var deg2rad = Math.PI / 180;
var rad2deg = 180 / Math.PI;
var Kn = 18;
var Xn = 0.950470;
var Yn = 1;
var Zn = 1.088830;
var t0 = 4 / 29;
var t1 = 6 / 29;
var t2 = 3 * t1 * t1;
var t3 = t1 * t1 * t1;
function labConvert(o) {
if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
if (o instanceof Hcl) {
var h = o.h * deg2rad;
return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
}
if (!(o instanceof Rgb)) o = rgbConvert(o);
var b = rgb2xyz(o.r),
a = rgb2xyz(o.g),
l = rgb2xyz(o.b),
x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),
y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),
z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);
return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
}
function lab(l, a, b, opacity) {
return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
}
function Lab(l, a, b, opacity) {
this.l = +l;
this.a = +a;
this.b = +b;
this.opacity = +opacity;
}
define(Lab, lab, extend(Color, {
brighter: function(k) {
return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
},
darker: function(k) {
return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
},
rgb: function() {
var y = (this.l + 16) / 116,
x = isNaN(this.a) ? y : y + this.a / 500,
z = isNaN(this.b) ? y : y - this.b / 200;
y = Yn * lab2xyz(y);
x = Xn * lab2xyz(x);
z = Zn * lab2xyz(z);
return new Rgb(
xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB
xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),
xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),
this.opacity
);
}
}));
function xyz2lab(t) {
return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
}
function lab2xyz(t) {
return t > t1 ? t * t * t : t2 * (t - t0);
}
function xyz2rgb(x) {
return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
}
function rgb2xyz(x) {
return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
}
function hclConvert(o) {
if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
if (!(o instanceof Lab)) o = labConvert(o);
var h = Math.atan2(o.b, o.a) * rad2deg;
return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
}
function hcl(h, c, l, opacity) {
return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
}
function Hcl(h, c, l, opacity) {
this.h = +h;
this.c = +c;
this.l = +l;
this.opacity = +opacity;
}
define(Hcl, hcl, extend(Color, {
brighter: function(k) {
return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);
},
darker: function(k) {
return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);
},
rgb: function() {
return labConvert(this).rgb();
}
}));
var A = -0.14861;
var B = +1.78277;
var C = -0.29227;
var D = -0.90649;
var E = +1.97294;
var ED = E * D;
var EB = E * B;
var BC_DA = B * C - D * A;
function cubehelixConvert(o) {
if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
if (!(o instanceof Rgb)) o = rgbConvert(o);
var r = o.r / 255,
g = o.g / 255,
b = o.b / 255,
l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
bl = b - l,
k = (E * (g - l) - C * bl) / D,
s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
}
function cubehelix(h, s, l, opacity) {
return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
}
function Cubehelix(h, s, l, opacity) {
this.h = +h;
this.s = +s;
this.l = +l;
this.opacity = +opacity;
}
define(Cubehelix, cubehelix, extend(Color, {
brighter: function(k) {
k = k == null ? brighter : Math.pow(brighter, k);
return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
},
darker: function(k) {
k = k == null ? darker : Math.pow(darker, k);
return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
},
rgb: function() {
var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
l = +this.l,
a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
cosh = Math.cos(h),
sinh = Math.sin(h);
return new Rgb(
255 * (l + a * (A * cosh + B * sinh)),
255 * (l + a * (C * cosh + D * sinh)),
255 * (l + a * (E * cosh)),
this.opacity
);
}
}));
function basis(t1, v0, v1, v2, v3) {
var t2 = t1 * t1, t3 = t2 * t1;
return ((1 - 3 * t1 + 3 * t2 - t3) * v0
+ (4 - 6 * t2 + 3 * t3) * v1
+ (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
+ t3 * v3) / 6;
}
var basis$1 = function(values) {
var n = values.length - 1;
return function(t) {
var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
v1 = values[i],
v2 = values[i + 1],
v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
return basis((t - i / n) * n, v0, v1, v2, v3);
};
};
var basisClosed = function(values) {
var n = values.length;
return function(t) {
var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
v0 = values[(i + n - 1) % n],
v1 = values[i % n],
v2 = values[(i + 1) % n],
v3 = values[(i + 2) % n];
return basis((t - i / n) * n, v0, v1, v2, v3);
};
};
var constant$3 = function(x) {
return function() {
return x;
};
};
function linear(a, d) {
return function(t) {
return a + t * d;
};
}
function exponential(a, b, y) {
return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
return Math.pow(a + t * b, y);
};
}
function hue(a, b) {
var d = b - a;
return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
}
function gamma(y) {
return (y = +y) === 1 ? nogamma : function(a, b) {
return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);
};
}
function nogamma(a, b) {
var d = b - a;
return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);
}
var interpolateRgb = ((function rgbGamma(y) {
var color$$1 = gamma(y);
function rgb$$1(start, end) {
var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),
g = color$$1(start.g, end.g),
b = color$$1(start.b, end.b),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.r = r(t);
start.g = g(t);
start.b = b(t);
start.opacity = opacity(t);
return start + "";
};
}
rgb$$1.gamma = rgbGamma;
return rgb$$1;
}))(1);
function rgbSpline(spline) {
return function(colors) {
var n = colors.length,
r = new Array(n),
g = new Array(n),
b = new Array(n),
i, color$$1;
for (i = 0; i < n; ++i) {
color$$1 = rgb(colors[i]);
r[i] = color$$1.r || 0;
g[i] = color$$1.g || 0;
b[i] = color$$1.b || 0;
}
r = spline(r);
g = spline(g);
b = spline(b);
color$$1.opacity = 1;
return function(t) {
color$$1.r = r(t);
color$$1.g = g(t);
color$$1.b = b(t);
return color$$1 + "";
};
};
}
var rgbBasis = rgbSpline(basis$1);
var rgbBasisClosed = rgbSpline(basisClosed);
var array$1 = function(a, b) {
var nb = b ? b.length : 0,
na = a ? Math.min(nb, a.length) : 0,
x = new Array(nb),
c = new Array(nb),
i;
for (i = 0; i < na; ++i) x[i] = interpolateValue(a[i], b[i]);
for (; i < nb; ++i) c[i] = b[i];
return function(t) {
for (i = 0; i < na; ++i) c[i] = x[i](t);
return c;
};
};
var date = function(a, b) {
var d = new Date;
return a = +a, b -= a, function(t) {
return d.setTime(a + b * t), d;
};
};
var reinterpolate = function(a, b) {
return a = +a, b -= a, function(t) {
return a + b * t;
};
};
var object = function(a, b) {
var i = {},
c = {},
k;
if (a === null || typeof a !== "object") a = {};
if (b === null || typeof b !== "object") b = {};
for (k in b) {
if (k in a) {
i[k] = interpolateValue(a[k], b[k]);
} else {
c[k] = b[k];
}
}
return function(t) {
for (k in i) c[k] = i[k](t);
return c;
};
};
var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
var reB = new RegExp(reA.source, "g");
function zero(b) {
return function() {
return b;
};
}
function one(b) {
return function(t) {
return b(t) + "";
};
}
var interpolateString = function(a, b) {
var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
am, // current match in a
bm, // current match in b
bs, // string preceding current number in b, if any
i = -1, // index in s
s = [], // string constants and placeholders
q = []; // number interpolators
// Coerce inputs to strings.
a = a + "", b = b + "";
// Interpolate pairs of numbers in a & b.
while ((am = reA.exec(a))
&& (bm = reB.exec(b))) {
if ((bs = bm.index) > bi) { // a string precedes the next number in b
bs = b.slice(bi, bs);
if (s[i]) s[i] += bs; // coalesce with previous string
else s[++i] = bs;
}
if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
if (s[i]) s[i] += bm; // coalesce with previous string
else s[++i] = bm;
} else { // interpolate non-matching numbers
s[++i] = null;
q.push({i: i, x: reinterpolate(am, bm)});
}
bi = reB.lastIndex;
}
// Add remains of b.
if (bi < b.length) {
bs = b.slice(bi);
if (s[i]) s[i] += bs; // coalesce with previous string
else s[++i] = bs;
}
// Special optimization for only a single match.
// Otherwise, interpolate each of the numbers and rejoin the string.
return s.length < 2 ? (q[0]
? one(q[0].x)
: zero(b))
: (b = q.length, function(t) {
for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
return s.join("");
});
};
var interpolateValue = function(a, b) {
var t = typeof b, c;
return b == null || t === "boolean" ? constant$3(b)
: (t === "number" ? reinterpolate
: t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)
: b instanceof color ? interpolateRgb
: b instanceof Date ? date
: Array.isArray(b) ? array$1
: isNaN(b) ? object
: reinterpolate)(a, b);
};
var interpolateRound = function(a, b) {
return a = +a, b -= a, function(t) {
return Math.round(a + b * t);
};
};
var degrees = 180 / Math.PI;
var identity$2 = {
translateX: 0,
translateY: 0,
rotate: 0,
skewX: 0,
scaleX: 1,
scaleY: 1
};
var decompose = function(a, b, c, d, e, f) {
var scaleX, scaleY, skewX;
if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
return {
translateX: e,
translateY: f,
rotate: Math.atan2(b, a) * degrees,
skewX: Math.atan(skewX) * degrees,
scaleX: scaleX,
scaleY: scaleY
};
};
var cssNode;
var cssRoot;
var cssView;
var svgNode;
function parseCss(value) {
if (value === "none") return identity$2;
if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
cssNode.style.transform = value;
value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
cssRoot.removeChild(cssNode);
value = value.slice(7, -1).split(",");
return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
}
function parseSvg(value) {
if (value == null) return identity$2;
if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
svgNode.setAttribute("transform", value);
if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
value = value.matrix;
return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
}
function interpolateTransform(parse, pxComma, pxParen, degParen) {
function pop(s) {
return s.length ? s.pop() + " " : "";
}
function translate(xa, ya, xb, yb, s, q) {
if (xa !== xb || ya !== yb) {
var i = s.push("translate(", null, pxComma, null, pxParen);
q.push({i: i - 4, x: reinterpolate(xa, xb)}, {i: i - 2, x: reinterpolate(ya, yb)});
} else if (xb || yb) {
s.push("translate(" + xb + pxComma + yb + pxParen);
}
}
function rotate(a, b, s, q) {
if (a !== b) {
if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: reinterpolate(a, b)});
} else if (b) {
s.push(pop(s) + "rotate(" + b + degParen);
}
}
function skewX(a, b, s, q) {
if (a !== b) {
q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: reinterpolate(a, b)});
} else if (b) {
s.push(pop(s) + "skewX(" + b + degParen);
}
}
function scale(xa, ya, xb, yb, s, q) {
if (xa !== xb || ya !== yb) {
var i = s.push(pop(s) + "scale(", null, ",", null, ")");
q.push({i: i - 4, x: reinterpolate(xa, xb)}, {i: i - 2, x: reinterpolate(ya, yb)});
} else if (xb !== 1 || yb !== 1) {
s.push(pop(s) + "scale(" + xb + "," + yb + ")");
}
}
return function(a, b) {
var s = [], // string constants and placeholders
q = []; // number interpolators
a = parse(a), b = parse(b);
translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
rotate(a.rotate, b.rotate, s, q);
skewX(a.skewX, b.skewX, s, q);
scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
a = b = null; // gc
return function(t) {
var i = -1, n = q.length, o;
while (++i < n) s[(o = q[i]).i] = o.x(t);
return s.join("");
};
};
}
var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
var rho = Math.SQRT2;
var rho2 = 2;
var rho4 = 4;
var epsilon2 = 1e-12;
function cosh(x) {
return ((x = Math.exp(x)) + 1 / x) / 2;
}
function sinh(x) {
return ((x = Math.exp(x)) - 1 / x) / 2;
}
function tanh(x) {
return ((x = Math.exp(2 * x)) - 1) / (x + 1);
}
// p0 = [ux0, uy0, w0]
// p1 = [ux1, uy1, w1]
var interpolateZoom = function(p0, p1) {
var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
dx = ux1 - ux0,
dy = uy1 - uy0,
d2 = dx * dx + dy * dy,
i,
S;
// Special case for u0 ≅ u1.
if (d2 < epsilon2) {
S = Math.log(w1 / w0) / rho;
i = function(t) {
return [
ux0 + t * dx,
uy0 + t * dy,
w0 * Math.exp(rho * t * S)
];
};
}
// General case.
else {
var d1 = Math.sqrt(d2),
b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
S = (r1 - r0) / rho;
i = function(t) {
var s = t * S,
coshr0 = cosh(r0),
u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
return [
ux0 + u * dx,
uy0 + u * dy,
w0 * coshr0 / cosh(rho * s + r0)
];
};
}
i.duration = S * 1000;
return i;
};
function hsl$1(hue$$1) {
return function(start, end) {
var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),
s = nogamma(start.s, end.s),
l = nogamma(start.l, end.l),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.h = h(t);
start.s = s(t);
start.l = l(t);
start.opacity = opacity(t);
return start + "";
};
}
}
var hsl$2 = hsl$1(hue);
var hslLong = hsl$1(nogamma);
function lab$1(start, end) {
var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
a = nogamma(start.a, end.a),
b = nogamma(start.b, end.b),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.l = l(t);
start.a = a(t);
start.b = b(t);
start.opacity = opacity(t);
return start + "";
};
}
function hcl$1(hue$$1) {
return function(start, end) {
var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),
c = nogamma(start.c, end.c),
l = nogamma(start.l, end.l),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.h = h(t);
start.c = c(t);
start.l = l(t);
start.opacity = opacity(t);
return start + "";
};
}
}
var hcl$2 = hcl$1(hue);
var hclLong = hcl$1(nogamma);
function cubehelix$1(hue$$1) {
return (function cubehelixGamma(y) {
y = +y;
function cubehelix$$1(start, end) {
var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),
s = nogamma(start.s, end.s),
l = nogamma(start.l, end.l),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.h = h(t);
start.s = s(t);
start.l = l(Math.pow(t, y));
start.opacity = opacity(t);
return start + "";
};
}
cubehelix$$1.gamma = cubehelixGamma;
return cubehelix$$1;
})(1);
}
var cubehelix$2 = cubehelix$1(hue);
var cubehelixLong = cubehelix$1(nogamma);
var quantize = function(interpolator, n) {
var samples = new Array(n);
for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
return samples;
};
var frame = 0;
var timeout = 0;
var interval = 0;
var pokeDelay = 1000;
var taskHead;
var taskTail;
var clockLast = 0;
var clockNow = 0;
var clockSkew = 0;
var clock = typeof performance === "object" && performance.now ? performance : Date;
var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); };
function now() {
return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
}
function clearNow() {
clockNow = 0;
}
function Timer() {
this._call =
this._time =
this._next = null;
}
Timer.prototype = timer.prototype = {
constructor: Timer,
restart: function(callback, delay, time) {
if (typeof callback !== "function") throw new TypeError("callback is not a function");
time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
if (!this._next && taskTail !== this) {
if (taskTail) taskTail._next = this;
else taskHead = this;
taskTail = this;
}
this._call = callback;
this._time = time;
sleep();
},
stop: function() {
if (this._call) {
this._call = null;
this._time = Infinity;
sleep();
}
}
};
function timer(callback, delay, time) {
var t = new Timer;
t.restart(callback, delay, time);
return t;
}
function timerFlush() {
now(); // Get the current time, if not already set.
++frame; // Pretend we’ve set an alarm, if we haven’t already.
var t = taskHead, e;
while (t) {
if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
t = t._next;
}
--frame;
}
function wake() {
clockNow = (clockLast = clock.now()) + clockSkew;
frame = timeout = 0;
try {
timerFlush();
} finally {
frame = 0;
nap();
clockNow = 0;
}
}
function poke() {
var now = clock.now(), delay = now - clockLast;
if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
}
function nap() {
var t0, t1 = taskHead, t2, time = Infinity;
while (t1) {
if (t1._call) {
if (time > t1._time) time = t1._time;
t0 = t1, t1 = t1._next;
} else {
t2 = t1._next, t1._next = null;
t1 = t0 ? t0._next = t2 : taskHead = t2;
}
}
taskTail = t0;
sleep(time);
}
function sleep(time) {
if (frame) return; // Soonest alarm already set, or will be.
if (timeout) timeout = clearTimeout(timeout);
var delay = time - clockNow;
if (delay > 24) {
if (time < Infinity) timeout = setTimeout(wake, delay);
if (interval) interval = clearInterval(interval);
} else {
if (!interval) clockLast = clockNow, interval = setInterval(poke, pokeDelay);
frame = 1, setFrame(wake);
}
}
var timeout$1 = function(callback, delay, time) {
var t = new Timer;
delay = delay == null ? 0 : +delay;
t.restart(function(elapsed) {
t.stop();
callback(elapsed + delay);
}, delay, time);
return t;
};
var interval$1 = function(callback, delay, time) {
var t = new Timer, total = delay;
if (delay == null) return t.restart(callback, delay, time), t;
delay = +delay, time = time == null ? now() : +time;
t.restart(function tick(elapsed) {
elapsed += total;
t.restart(tick, total += delay, time);
callback(elapsed);
}, delay, time);
return t;
};
var emptyOn = dispatch("start", "end", "interrupt");
var emptyTween = [];
var CREATED = 0;
var SCHEDULED = 1;
var STARTING = 2;
var STARTED = 3;
var RUNNING = 4;
var ENDING = 5;
var ENDED = 6;
var schedule = function(node, name, id, index, group, timing) {
var schedules = node.__transition;
if (!schedules) node.__transition = {};
else if (id in schedules) return;
create(node, id, {
name: name,
index: index, // For context during callback.
group: group, // For context during callback.
on: emptyOn,
tween: emptyTween,
time: timing.time,
delay: timing.delay,
duration: timing.duration,
ease: timing.ease,
timer: null,
state: CREATED
});
};
function init(node, id) {
var schedule = node.__transition;
if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late");
return schedule;
}
function set$1(node, id) {
var schedule = node.__transition;
if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late");
return schedule;
}
function get$1(node, id) {
var schedule = node.__transition;
if (!schedule || !(schedule = schedule[id])) throw new Error("too late");
return schedule;
}
function create(node, id, self) {
var schedules = node.__transition,
tween;
// Initialize the self timer when the transition is created.
// Note the actual delay is not known until the first callback!
schedules[id] = self;
self.timer = timer(schedule, 0, self.time);
function schedule(elapsed) {
self.state = SCHEDULED;
self.timer.restart(start, self.delay, self.time);
// If the elapsed delay is less than our first sleep, start immediately.
if (self.delay <= elapsed) start(elapsed - self.delay);
}
function start(elapsed) {
var i, j, n, o;
// If the state is not SCHEDULED, then we previously errored on start.
if (self.state !== SCHEDULED) return stop();
for (i in schedules) {
o = schedules[i];
if (o.name !== self.name) continue;
// While this element already has a starting transition during this frame,
// defer starting an interrupting transition until that transition has a
// chance to tick (and possibly end); see d3/d3-transition#54!
if (o.state === STARTED) return timeout$1(start);
// Interrupt the active transition, if any.
// Dispatch the interrupt event.
if (o.state === RUNNING) {
o.state = ENDED;
o.timer.stop();
o.on.call("interrupt", node, node.__data__, o.index, o.group);
delete schedules[i];
}
// Cancel any pre-empted transitions. No interrupt event is dispatched
// because the cancelled transitions never started. Note that this also
// removes this transition from the pending list!
else if (+i < id) {
o.state = ENDED;
o.timer.stop();
delete schedules[i];
}
}
// Defer the first tick to end of the current frame; see d3/d3#1576.
// Note the transition may be canceled after start and before the first tick!
// Note this must be scheduled before the start event; see d3/d3-transition#16!
// Assuming this is successful, subsequent callbacks go straight to tick.
timeout$1(function() {
if (self.state === STARTED) {
self.state = RUNNING;
self.timer.restart(tick, self.delay, self.time);
tick(elapsed);
}
});
// Dispatch the start event.
// Note this must be done before the tween are initialized.
self.state = STARTING;
self.on.call("start", node, node.__data__, self.index, self.group);
if (self.state !== STARTING) return; // interrupted
self.state = STARTED;
// Initialize the tween, deleting null tween.
tween = new Array(n = self.tween.length);
for (i = 0, j = -1; i < n; ++i) {
if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
tween[++j] = o;
}
}
tween.length = j + 1;
}
function tick(elapsed) {
var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
i = -1,
n = tween.length;
while (++i < n) {
tween[i].call(null, t);
}
// Dispatch the end event.
if (self.state === ENDING) {
self.on.call("end", node, node.__data__, self.index, self.group);
stop();
}
}
function stop() {
self.state = ENDED;
self.timer.stop();
delete schedules[id];
for (var i in schedules) return; // eslint-disable-line no-unused-vars
delete node.__transition;
}
}
var interrupt = function(node, name) {
var schedules = node.__transition,
schedule,
active,
empty = true,
i;
if (!schedules) return;
name = name == null ? null : name + "";
for (i in schedules) {
if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
active = schedule.state > STARTING && schedule.state < ENDING;
schedule.state = ENDED;
schedule.timer.stop();
if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
delete schedules[i];
}
if (empty) delete node.__transition;
};
var selection_interrupt = function(name) {
return this.each(function() {
interrupt(this, name);
});
};
function tweenRemove(id, name) {
var tween0, tween1;
return function() {
var schedule = set$1(this, id),
tween = schedule.tween;
// If this node shared tween with the previous node,
// just assign the updated shared tween and we’re done!
// Otherwise, copy-on-write.
if (tween !== tween0) {
tween1 = tween0 = tween;
for (var i = 0, n = tween1.length; i < n; ++i) {
if (tween1[i].name === name) {
tween1 = tween1.slice();
tween1.splice(i, 1);
break;
}
}
}
schedule.tween = tween1;
};
}
function tweenFunction(id, name, value) {
var tween0, tween1;
if (typeof value !== "function") throw new Error;
return function() {
var schedule = set$1(this, id),
tween = schedule.tween;
// If this node shared tween with the previous node,
// just assign the updated shared tween and we’re done!
// Otherwise, copy-on-write.
if (tween !== tween0) {
tween1 = (tween0 = tween).slice();
for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
if (tween1[i].name === name) {
tween1[i] = t;
break;
}
}
if (i === n) tween1.push(t);
}
schedule.tween = tween1;
};
}
var transition_tween = function(name, value) {
var id = this._id;
name += "";
if (arguments.length < 2) {
var tween = get$1(this.node(), id).tween;
for (var i = 0, n = tween.length, t; i < n; ++i) {
if ((t = tween[i]).name === name) {
return t.value;
}
}
return null;
}
return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
};
function tweenValue(transition, name, value) {
var id = transition._id;
transition.each(function() {
var schedule = set$1(this, id);
(schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
});
return function(node) {
return get$1(node, id).value[name];
};
}
var interpolate$$1 = function(a, b) {
var c;
return (typeof b === "number" ? reinterpolate
: b instanceof color ? interpolateRgb
: (c = color(b)) ? (b = c, interpolateRgb)
: interpolateString)(a, b);
};
function attrRemove$1(name) {
return function() {
this.removeAttribute(name);
};
}
function attrRemoveNS$1(fullname) {
return function() {
this.removeAttributeNS(fullname.space, fullname.local);
};
}
function attrConstant$1(name, interpolate$$1, value1) {
var value00,
interpolate0;
return function() {
var value0 = this.getAttribute(name);
return value0 === value1 ? null
: value0 === value00 ? interpolate0
: interpolate0 = interpolate$$1(value00 = value0, value1);
};
}
function attrConstantNS$1(fullname, interpolate$$1, value1) {
var value00,
interpolate0;
return function() {
var value0 = this.getAttributeNS(fullname.space, fullname.local);
return value0 === value1 ? null
: value0 === value00 ? interpolate0
: interpolate0 = interpolate$$1(value00 = value0, value1);
};
}
function attrFunction$1(name, interpolate$$1, value) {
var value00,
value10,
interpolate0;
return function() {
var value0, value1 = value(this);
if (value1 == null) return void this.removeAttribute(name);
value0 = this.getAttribute(name);
return value0 === value1 ? null
: value0 === value00 && value1 === value10 ? interpolate0
: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
};
}
function attrFunctionNS$1(fullname, interpolate$$1, value) {
var value00,
value10,
interpolate0;
return function() {
var value0, value1 = value(this);
if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
value0 = this.getAttributeNS(fullname.space, fullname.local);
return value0 === value1 ? null
: value0 === value00 && value1 === value10 ? interpolate0
: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
};
}
var transition_attr = function(name, value) {
var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$$1;
return this.attrTween(name, typeof value === "function"
? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
: value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
: (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value + ""));
};
function attrTweenNS(fullname, value) {
function tween() {
var node = this, i = value.apply(node, arguments);
return i && function(t) {
node.setAttributeNS(fullname.space, fullname.local, i(t));
};
}
tween._value = value;
return tween;
}
function attrTween(name, value) {
function tween() {
var node = this, i = value.apply(node, arguments);
return i && function(t) {
node.setAttribute(name, i(t));
};
}
tween._value = value;
return tween;
}
var transition_attrTween = function(name, value) {
var key = "attr." + name;
if (arguments.length < 2) return (key = this.tween(key)) && key._value;
if (value == null) return this.tween(key, null);
if (typeof value !== "function") throw new Error;
var fullname = namespace(name);
return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
};
function delayFunction(id, value) {
return function() {
init(this, id).delay = +value.apply(this, arguments);
};
}
function delayConstant(id, value) {
return value = +value, function() {
init(this, id).delay = value;
};
}
var transition_delay = function(value) {
var id = this._id;
return arguments.length
? this.each((typeof value === "function"
? delayFunction
: delayConstant)(id, value))
: get$1(this.node(), id).delay;
};
function durationFunction(id, value) {
return function() {
set$1(this, id).duration = +value.apply(this, arguments);
};
}
function durationConstant(id, value) {
return value = +value, function() {
set$1(this, id).duration = value;
};
}
var transition_duration = function(value) {
var id = this._id;
return arguments.length
? this.each((typeof value === "function"
? durationFunction
: durationConstant)(id, value))
: get$1(this.node(), id).duration;
};
function easeConstant(id, value) {
if (typeof value !== "function") throw new Error;
return function() {
set$1(this, id).ease = value;
};
}
var transition_ease = function(value) {
var id = this._id;
return arguments.length
? this.each(easeConstant(id, value))
: get$1(this.node(), id).ease;
};
var transition_filter = function(match) {
if (typeof match !== "function") match = matcher$1(match);
for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
subgroup.push(node);
}
}
}
return new Transition(subgroups, this._parents, this._name, this._id);
};
var transition_merge = function(transition) {
if (transition._id !== this._id) throw new Error;
for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
if (node = group0[i] || group1[i]) {
merge[i] = node;
}
}
}
for (; j < m0; ++j) {
merges[j] = groups0[j];
}
return new Transition(merges, this._parents, this._name, this._id);
};
function start(name) {
return (name + "").trim().split(/^|\s+/).every(function(t) {
var i = t.indexOf(".");
if (i >= 0) t = t.slice(0, i);
return !t || t === "start";
});
}
function onFunction(id, name, listener) {
var on0, on1, sit = start(name) ? init : set$1;
return function() {
var schedule = sit(this, id),
on = schedule.on;
// If this node shared a dispatch with the previous node,
// just assign the updated shared dispatch and we’re done!
// Otherwise, copy-on-write.
if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
schedule.on = on1;
};
}
var transition_on = function(name, listener) {
var id = this._id;
return arguments.length < 2
? get$1(this.node(), id).on.on(name)
: this.each(onFunction(id, name, listener));
};
function removeFunction(id) {
return function() {
var parent = this.parentNode;
for (var i in this.__transition) if (+i !== id) return;
if (parent) parent.removeChild(this);
};
}
var transition_remove = function() {
return this.on("end.remove", removeFunction(this._id));
};
var transition_select = function(select$$1) {
var name = this._name,
id = this._id;
if (typeof select$$1 !== "function") select$$1 = selector(select$$1);
for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {
if ("__data__" in node) subnode.__data__ = node.__data__;
subgroup[i] = subnode;
schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));
}
}
}
return new Transition(subgroups, this._parents, name, id);
};
var transition_selectAll = function(select$$1) {
var name = this._name,
id = this._id;
if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1);
for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
if (node = group[i]) {
for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
if (child = children[k]) {
schedule(child, name, id, k, children, inherit);
}
}
subgroups.push(children);
parents.push(node);
}
}
}
return new Transition(subgroups, parents, name, id);
};
var Selection$1 = selection.prototype.constructor;
var transition_selection = function() {
return new Selection$1(this._groups, this._parents);
};
function styleRemove$1(name, interpolate$$2) {
var value00,
value10,
interpolate0;
return function() {
var style = window$1(this).getComputedStyle(this, null),
value0 = style.getPropertyValue(name),
value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
return value0 === value1 ? null
: value0 === value00 && value1 === value10 ? interpolate0
: interpolate0 = interpolate$$2(value00 = value0, value10 = value1);
};
}
function styleRemoveEnd(name) {
return function() {
this.style.removeProperty(name);
};
}
function styleConstant$1(name, interpolate$$2, value1) {
var value00,
interpolate0;
return function() {
var value0 = window$1(this).getComputedStyle(this, null).getPropertyValue(name);
return value0 === value1 ? null
: value0 === value00 ? interpolate0
: interpolate0 = interpolate$$2(value00 = value0, value1);
};
}
function styleFunction$1(name, interpolate$$2, value) {
var value00,
value10,
interpolate0;
return function() {
var style = window$1(this).getComputedStyle(this, null),
value0 = style.getPropertyValue(name),
value1 = value(this);
if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
return value0 === value1 ? null
: value0 === value00 && value1 === value10 ? interpolate0
: interpolate0 = interpolate$$2(value00 = value0, value10 = value1);
};
}
var transition_style = function(name, value, priority) {
var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$$1;
return value == null ? this
.styleTween(name, styleRemove$1(name, i))
.on("end.style." + name, styleRemoveEnd(name))
: this.styleTween(name, typeof value === "function"
? styleFunction$1(name, i, tweenValue(this, "style." + name, value))
: styleConstant$1(name, i, value + ""), priority);
};
function styleTween(name, value, priority) {
function tween() {
var node = this, i = value.apply(node, arguments);
return i && function(t) {
node.style.setProperty(name, i(t), priority);
};
}
tween._value = value;
return tween;
}
var transition_styleTween = function(name, value, priority) {
var key = "style." + (name += "");
if (arguments.length < 2) return (key = this.tween(key)) && key._value;
if (value == null) return this.tween(key, null);
if (typeof value !== "function") throw new Error;
return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
};
function textConstant$1(value) {
return function() {
this.textContent = value;
};
}
function textFunction$1(value) {
return function() {
var value1 = value(this);
this.textContent = value1 == null ? "" : value1;
};
}
var transition_text = function(value) {
return this.tween("text", typeof value === "function"
? textFunction$1(tweenValue(this, "text", value))
: textConstant$1(value == null ? "" : value + ""));
};
var transition_transition = function() {
var name = this._name,
id0 = this._id,
id1 = newId();
for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
if (node = group[i]) {
var inherit = get$1(node, id0);
schedule(node, name, id1, i, group, {
time: inherit.time + inherit.delay + inherit.duration,
delay: 0,
duration: inherit.duration,
ease: inherit.ease
});
}
}
}
return new Transition(groups, this._parents, name, id1);
};
var id = 0;
function Transition(groups, parents, name, id) {
this._groups = groups;
this._parents = parents;
this._name = name;
this._id = id;
}
function transition(name) {
return selection().transition(name);
}
function newId() {
return ++id;
}
var selection_prototype = selection.prototype;
Transition.prototype = transition.prototype = {
constructor: Transition,
select: transition_select,
selectAll: transition_selectAll,
filter: transition_filter,
merge: transition_merge,
selection: transition_selection,
transition: transition_transition,
call: selection_prototype.call,
nodes: selection_prototype.nodes,
node: selection_prototype.node,
size: selection_prototype.size,
empty: selection_prototype.empty,
each: selection_prototype.each,
on: transition_on,
attr: transition_attr,
attrTween: transition_attrTween,
style: transition_style,
styleTween: transition_styleTween,
text: transition_text,
remove: transition_remove,
tween: transition_tween,
delay: transition_delay,
duration: transition_duration,
ease: transition_ease
};
function linear$1(t) {
return +t;
}
function quadIn(t) {
return t * t;
}
function quadOut(t) {
return t * (2 - t);
}
function quadInOut(t) {
return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
}
function cubicIn(t) {
return t * t * t;
}
function cubicOut(t) {
return --t * t * t + 1;
}
function cubicInOut(t) {
return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
}
var exponent = 3;
var polyIn = (function custom(e) {
e = +e;
function polyIn(t) {
return Math.pow(t, e);
}
polyIn.exponent = custom;
return polyIn;
})(exponent);
var polyOut = (function custom(e) {
e = +e;
function polyOut(t) {
return 1 - Math.pow(1 - t, e);
}
polyOut.exponent = custom;
return polyOut;
})(exponent);
var polyInOut = (function custom(e) {
e = +e;
function polyInOut(t) {
return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
}
polyInOut.exponent = custom;
return polyInOut;
})(exponent);
var pi = Math.PI;
var halfPi = pi / 2;
function sinIn(t) {
return 1 - Math.cos(t * halfPi);
}
function sinOut(t) {
return Math.sin(t * halfPi);
}
function sinInOut(t) {
return (1 - Math.cos(pi * t)) / 2;
}
function expIn(t) {
return Math.pow(2, 10 * t - 10);
}
function expOut(t) {
return 1 - Math.pow(2, -10 * t);
}
function expInOut(t) {
return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
}
function circleIn(t) {
return 1 - Math.sqrt(1 - t * t);
}
function circleOut(t) {
return Math.sqrt(1 - --t * t);
}
function circleInOut(t) {
return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
}
var b1 = 4 / 11;
var b2 = 6 / 11;
var b3 = 8 / 11;
var b4 = 3 / 4;
var b5 = 9 / 11;
var b6 = 10 / 11;
var b7 = 15 / 16;
var b8 = 21 / 22;
var b9 = 63 / 64;
var b0 = 1 / b1 / b1;
function bounceIn(t) {
return 1 - bounceOut(1 - t);
}
function bounceOut(t) {
return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
}
function bounceInOut(t) {
return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
}
var overshoot = 1.70158;
var backIn = (function custom(s) {
s = +s;
function backIn(t) {
return t * t * ((s + 1) * t - s);
}
backIn.overshoot = custom;
return backIn;
})(overshoot);
var backOut = (function custom(s) {
s = +s;
function backOut(t) {
return --t * t * ((s + 1) * t + s) + 1;
}
backOut.overshoot = custom;
return backOut;
})(overshoot);
var backInOut = (function custom(s) {
s = +s;
function backInOut(t) {
return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
}
backInOut.overshoot = custom;
return backInOut;
})(overshoot);
var tau = 2 * Math.PI;
var amplitude = 1;
var period = 0.3;
var elasticIn = (function custom(a, p) {
var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
function elasticIn(t) {
return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
}
elasticIn.amplitude = function(a) { return custom(a, p * tau); };
elasticIn.period = function(p) { return custom(a, p); };
return elasticIn;
})(amplitude, period);
var elasticOut = (function custom(a, p) {
var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
function elasticOut(t) {
return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
}
elasticOut.amplitude = function(a) { return custom(a, p * tau); };
elasticOut.period = function(p) { return custom(a, p); };
return elasticOut;
})(amplitude, period);
var elasticInOut = (function custom(a, p) {
var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
function elasticInOut(t) {
return ((t = t * 2 - 1) < 0
? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
: 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
}
elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
elasticInOut.period = function(p) { return custom(a, p); };
return elasticInOut;
})(amplitude, period);
var defaultTiming = {
time: null, // Set on use.
delay: 0,
duration: 250,
ease: cubicInOut
};
function inherit(node, id) {
var timing;
while (!(timing = node.__transition) || !(timing = timing[id])) {
if (!(node = node.parentNode)) {
return defaultTiming.time = now(), defaultTiming;
}
}
return timing;
}
var selection_transition = function(name) {
var id,
timing;
if (name instanceof Transition) {
id = name._id, name = name._name;
} else {
id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
}
for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
if (node = group[i]) {
schedule(node, name, id, i, group, timing || inherit(node, id));
}
}
}
return new Transition(groups, this._parents, name, id);
};
selection.prototype.interrupt = selection_interrupt;
selection.prototype.transition = selection_transition;
var root$1 = [null];
var active = function(node, name) {
var schedules = node.__transition,
schedule,
i;
if (schedules) {
name = name == null ? null : name + "";
for (i in schedules) {
if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
return new Transition([[node]], root$1, name, +i);
}
}
}
return null;
};
var constant$4 = function(x) {
return function() {
return x;
};
};
var BrushEvent = function(target, type, selection) {
this.target = target;
this.type = type;
this.selection = selection;
};
function nopropagation$1() {
exports.event.stopImmediatePropagation();
}
var noevent$1 = function() {
exports.event.preventDefault();
exports.event.stopImmediatePropagation();
};
var MODE_DRAG = {name: "drag"};
var MODE_SPACE = {name: "space"};
var MODE_HANDLE = {name: "handle"};
var MODE_CENTER = {name: "center"};
var X = {
name: "x",
handles: ["e", "w"].map(type),
input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
};
var Y = {
name: "y",
handles: ["n", "s"].map(type),
input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
};
var XY = {
name: "xy",
handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type),
input: function(xy) { return xy; },
output: function(xy) { return xy; }
};
var cursors = {
overlay: "crosshair",
selection: "move",
n: "ns-resize",
e: "ew-resize",
s: "ns-resize",
w: "ew-resize",
nw: "nwse-resize",
ne: "nesw-resize",
se: "nwse-resize",
sw: "nesw-resize"
};
var flipX = {
e: "w",
w: "e",
nw: "ne",
ne: "nw",
se: "sw",
sw: "se"
};
var flipY = {
n: "s",
s: "n",
nw: "sw",
ne: "se",
se: "ne",
sw: "nw"
};
var signsX = {
overlay: +1,
selection: +1,
n: null,
e: +1,
s: null,
w: -1,
nw: -1,
ne: +1,
se: +1,
sw: -1
};
var signsY = {
overlay: +1,
selection: +1,
n: -1,
e: null,
s: +1,
w: null,
nw: -1,
ne: -1,
se: +1,
sw: +1
};
function type(t) {
return {type: t};
}
// Ignore right-click, since that should open the context menu.
function defaultFilter() {
return !exports.event.button;
}
function defaultExtent() {
var svg = this.ownerSVGElement || this;
return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
}
// Like d3.local, but with the name “__brush” rather than auto-generated.
function local$$1(node) {
while (!node.__brush) if (!(node = node.parentNode)) return;
return node.__brush;
}
function empty(extent) {
return extent[0][0] === extent[1][0]
|| extent[0][1] === extent[1][1];
}
function brushSelection(node) {
var state = node.__brush;
return state ? state.dim.output(state.selection) : null;
}
function brushX() {
return brush$1(X);
}
function brushY() {
return brush$1(Y);
}
var brush = function() {
return brush$1(XY);
};
function brush$1(dim) {
var extent = defaultExtent,
filter = defaultFilter,
listeners = dispatch(brush, "start", "brush", "end"),
handleSize = 6,
touchending;
function brush(group) {
var overlay = group
.property("__brush", initialize)
.selectAll(".overlay")
.data([type("overlay")]);
overlay.enter().append("rect")
.attr("class", "overlay")
.attr("pointer-events", "all")
.attr("cursor", cursors.overlay)
.merge(overlay)
.each(function() {
var extent = local$$1(this).extent;
select(this)
.attr("x", extent[0][0])
.attr("y", extent[0][1])
.attr("width", extent[1][0] - extent[0][0])
.attr("height", extent[1][1] - extent[0][1]);
});
group.selectAll(".selection")
.data([type("selection")])
.enter().append("rect")
.attr("class", "selection")
.attr("cursor", cursors.selection)
.attr("fill", "#777")
.attr("fill-opacity", 0.3)
.attr("stroke", "#fff")
.attr("shape-rendering", "crispEdges");
var handle = group.selectAll(".handle")
.data(dim.handles, function(d) { return d.type; });
handle.exit().remove();
handle.enter().append("rect")
.attr("class", function(d) { return "handle handle--" + d.type; })
.attr("cursor", function(d) { return cursors[d.type]; });
group
.each(redraw)
.attr("fill", "none")
.attr("pointer-events", "all")
.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
.on("mousedown.brush touchstart.brush", started);
}
brush.move = function(group, selection$$1) {
if (group.selection) {
group
.on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
.on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
.tween("brush", function() {
var that = this,
state = that.__brush,
emit = emitter(that, arguments),
selection0 = state.selection,
selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),
i = interpolateValue(selection0, selection1);
function tween(t) {
state.selection = t === 1 && empty(selection1) ? null : i(t);
redraw.call(that);
emit.brush();
}
return selection0 && selection1 ? tween : tween(1);
});
} else {
group
.each(function() {
var that = this,
args = arguments,
state = that.__brush,
selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent),
emit = emitter(that, args).beforestart();
interrupt(that);
state.selection = selection1 == null || empty(selection1) ? null : selection1;
redraw.call(that);
emit.start().brush().end();
});
}
};
function redraw() {
var group = select(this),
selection$$1 = local$$1(this).selection;
if (selection$$1) {
group.selectAll(".selection")
.style("display", null)
.attr("x", selection$$1[0][0])
.attr("y", selection$$1[0][1])
.attr("width", selection$$1[1][0] - selection$$1[0][0])
.attr("height", selection$$1[1][1] - selection$$1[0][1]);
group.selectAll(".handle")
.style("display", null)
.attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })
.attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })
.attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })
.attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });
}
else {
group.selectAll(".selection,.handle")
.style("display", "none")
.attr("x", null)
.attr("y", null)
.attr("width", null)
.attr("height", null);
}
}
function emitter(that, args) {
return that.__brush.emitter || new Emitter(that, args);
}
function Emitter(that, args) {
this.that = that;
this.args = args;
this.state = that.__brush;
this.active = 0;
}
Emitter.prototype = {
beforestart: function() {
if (++this.active === 1) this.state.emitter = this, this.starting = true;
return this;
},
start: function() {
if (this.starting) this.starting = false, this.emit("start");
return this;
},
brush: function() {
this.emit("brush");
return this;
},
end: function() {
if (--this.active === 0) delete this.state.emitter, this.emit("end");
return this;
},
emit: function(type) {
customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
}
};
function started() {
if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$1(); }
else if (touchending) return;
if (!filter.apply(this, arguments)) return;
var that = this,
type = exports.event.target.__data__.type,
mode = (exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),
signX = dim === Y ? null : signsX[type],
signY = dim === X ? null : signsY[type],
state = local$$1(that),
extent = state.extent,
selection$$1 = state.selection,
W = extent[0][0], w0, w1,
N = extent[0][1], n0, n1,
E = extent[1][0], e0, e1,
S = extent[1][1], s0, s1,
dx,
dy,
moving,
shifting = signX && signY && exports.event.shiftKey,
lockX,
lockY,
point0 = mouse(that),
point = point0,
emit = emitter(that, arguments).beforestart();
if (type === "overlay") {
state.selection = selection$$1 = [
[w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
[e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
];
} else {
w0 = selection$$1[0][0];
n0 = selection$$1[0][1];
e0 = selection$$1[1][0];
s0 = selection$$1[1][1];
}
w1 = w0;
n1 = n0;
e1 = e0;
s1 = s0;
var group = select(that)
.attr("pointer-events", "none");
var overlay = group.selectAll(".overlay")
.attr("cursor", cursors[type]);
if (exports.event.touches) {
group
.on("touchmove.brush", moved, true)
.on("touchend.brush touchcancel.brush", ended, true);
} else {
var view = select(exports.event.view)
.on("keydown.brush", keydowned, true)
.on("keyup.brush", keyupped, true)
.on("mousemove.brush", moved, true)
.on("mouseup.brush", ended, true);
dragDisable(exports.event.view);
}
nopropagation$1();
interrupt(that);
redraw.call(that);
emit.start();
function moved() {
var point1 = mouse(that);
if (shifting && !lockX && !lockY) {
if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
else lockX = true;
}
point = point1;
moving = true;
noevent$1();
move();
}
function move() {
var t;
dx = point[0] - point0[0];
dy = point[1] - point0[1];
switch (mode) {
case MODE_SPACE:
case MODE_DRAG: {
if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
break;
}
case MODE_HANDLE: {
if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
break;
}
case MODE_CENTER: {
if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
break;
}
}
if (e1 < w1) {
signX *= -1;
t = w0, w0 = e0, e0 = t;
t = w1, w1 = e1, e1 = t;
if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
}
if (s1 < n1) {
signY *= -1;
t = n0, n0 = s0, s0 = t;
t = n1, n1 = s1, s1 = t;
if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
}
if (state.selection) selection$$1 = state.selection; // May be set by brush.move!
if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];
if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];
if (selection$$1[0][0] !== w1
|| selection$$1[0][1] !== n1
|| selection$$1[1][0] !== e1
|| selection$$1[1][1] !== s1) {
state.selection = [[w1, n1], [e1, s1]];
redraw.call(that);
emit.brush();
}
}
function ended() {
nopropagation$1();
if (exports.event.touches) {
if (exports.event.touches.length) return;
if (touchending) clearTimeout(touchending);
touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
group.on("touchmove.brush touchend.brush touchcancel.brush", null);
} else {
yesdrag(exports.event.view, moving);
view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
}
group.attr("pointer-events", "all");
overlay.attr("cursor", cursors.overlay);
if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!
if (empty(selection$$1)) state.selection = null, redraw.call(that);
emit.end();
}
function keydowned() {
switch (exports.event.keyCode) {
case 16: { // SHIFT
shifting = signX && signY;
break;
}
case 18: { // ALT
if (mode === MODE_HANDLE) {
if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
mode = MODE_CENTER;
move();
}
break;
}
case 32: { // SPACE; takes priority over ALT
if (mode === MODE_HANDLE || mode === MODE_CENTER) {
if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
mode = MODE_SPACE;
overlay.attr("cursor", cursors.selection);
move();
}
break;
}
default: return;
}
noevent$1();
}
function keyupped() {
switch (exports.event.keyCode) {
case 16: { // SHIFT
if (shifting) {
lockX = lockY = shifting = false;
move();
}
break;
}
case 18: { // ALT
if (mode === MODE_CENTER) {
if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
mode = MODE_HANDLE;
move();
}
break;
}
case 32: { // SPACE
if (mode === MODE_SPACE) {
if (exports.event.altKey) {
if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
mode = MODE_CENTER;
} else {
if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
mode = MODE_HANDLE;
}
overlay.attr("cursor", cursors[type]);
move();
}
break;
}
default: return;
}
noevent$1();
}
}
function initialize() {
var state = this.__brush || {selection: null};
state.extent = extent.apply(this, arguments);
state.dim = dim;
return state;
}
brush.extent = function(_) {
return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
};
brush.filter = function(_) {
return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter;
};
brush.handleSize = function(_) {
return arguments.length ? (handleSize = +_, brush) : handleSize;
};
brush.on = function() {
var value = listeners.on.apply(listeners, arguments);
return value === listeners ? brush : value;
};
return brush;
}
var cos = Math.cos;
var sin = Math.sin;
var pi$1 = Math.PI;
var halfPi$1 = pi$1 / 2;
var tau$1 = pi$1 * 2;
var max$1 = Math.max;
function compareValue(compare) {
return function(a, b) {
return compare(
a.source.value + a.target.value,
b.source.value + b.target.value
);
};
}
var chord = function() {
var padAngle = 0,
sortGroups = null,
sortSubgroups = null,
sortChords = null;
function chord(matrix) {
var n = matrix.length,
groupSums = [],
groupIndex = range(n),
subgroupIndex = [],
chords = [],
groups = chords.groups = new Array(n),
subgroups = new Array(n * n),
k,
x,
x0,
dx,
i,
j;
// Compute the sum.
k = 0, i = -1; while (++i < n) {
x = 0, j = -1; while (++j < n) {
x += matrix[i][j];
}
groupSums.push(x);
subgroupIndex.push(range(n));
k += x;
}
// Sort groups…
if (sortGroups) groupIndex.sort(function(a, b) {
return sortGroups(groupSums[a], groupSums[b]);
});
// Sort subgroups…
if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
d.sort(function(a, b) {
return sortSubgroups(matrix[i][a], matrix[i][b]);
});
});
// Convert the sum to scaling factor for [0, 2pi].
// TODO Allow start and end angle to be specified?
// TODO Allow padding to be specified as percentage?
k = max$1(0, tau$1 - padAngle * n) / k;
dx = k ? padAngle : tau$1 / n;
// Compute the start and end angle for each group and subgroup.
// Note: Opera has a bug reordering object literal properties!
x = 0, i = -1; while (++i < n) {
x0 = x, j = -1; while (++j < n) {
var di = groupIndex[i],
dj = subgroupIndex[di][j],
v = matrix[di][dj],
a0 = x,
a1 = x += v * k;
subgroups[dj * n + di] = {
index: di,
subindex: dj,
startAngle: a0,
endAngle: a1,
value: v
};
}
groups[di] = {
index: di,
startAngle: x0,
endAngle: x,
value: groupSums[di]
};
x += dx;
}
// Generate chords for each (non-empty) subgroup-subgroup link.
i = -1; while (++i < n) {
j = i - 1; while (++j < n) {
var source = subgroups[j * n + i],
target = subgroups[i * n + j];
if (source.value || target.value) {
chords.push(source.value < target.value
? {source: target, target: source}
: {source: source, target: target});
}
}
}
return sortChords ? chords.sort(sortChords) : chords;
}
chord.padAngle = function(_) {
return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;
};
chord.sortGroups = function(_) {
return arguments.length ? (sortGroups = _, chord) : sortGroups;
};
chord.sortSubgroups = function(_) {
return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
};
chord.sortChords = function(_) {
return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
};
return chord;
};
var slice$2 = Array.prototype.slice;
var constant$5 = function(x) {
return function() {
return x;
};
};
var pi$2 = Math.PI;
var tau$2 = 2 * pi$2;
var epsilon$1 = 1e-6;
var tauEpsilon = tau$2 - epsilon$1;
function Path() {
this._x0 = this._y0 = // start of current subpath
this._x1 = this._y1 = null; // end of current subpath
this._ = "";
}
function path() {
return new Path;
}
Path.prototype = path.prototype = {
constructor: Path,
moveTo: function(x, y) {
this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);
},
closePath: function() {
if (this._x1 !== null) {
this._x1 = this._x0, this._y1 = this._y0;
this._ += "Z";
}
},
lineTo: function(x, y) {
this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);
},
quadraticCurveTo: function(x1, y1, x, y) {
this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
},
bezierCurveTo: function(x1, y1, x2, y2, x, y) {
this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
},
arcTo: function(x1, y1, x2, y2, r) {
x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
var x0 = this._x1,
y0 = this._y1,
x21 = x2 - x1,
y21 = y2 - y1,
x01 = x0 - x1,
y01 = y0 - y1,
l01_2 = x01 * x01 + y01 * y01;
// Is the radius negative? Error.
if (r < 0) throw new Error("negative radius: " + r);
// Is this path empty? Move to (x1,y1).
if (this._x1 === null) {
this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
}
// Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
else if (!(l01_2 > epsilon$1)) {}
// Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
// Equivalently, is (x1,y1) coincident with (x2,y2)?
// Or, is the radius zero? Line to (x1,y1).
else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {
this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
}
// Otherwise, draw an arc!
else {
var x20 = x2 - x0,
y20 = y2 - y0,
l21_2 = x21 * x21 + y21 * y21,
l20_2 = x20 * x20 + y20 * y20,
l21 = Math.sqrt(l21_2),
l01 = Math.sqrt(l01_2),
l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
t01 = l / l01,
t21 = l / l21;
// If the start tangent is not coincident with (x0,y0), line to.
if (Math.abs(t01 - 1) > epsilon$1) {
this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
}
this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
}
},
arc: function(x, y, r, a0, a1, ccw) {
x = +x, y = +y, r = +r;
var dx = r * Math.cos(a0),
dy = r * Math.sin(a0),
x0 = x + dx,
y0 = y + dy,
cw = 1 ^ ccw,
da = ccw ? a0 - a1 : a1 - a0;
// Is the radius negative? Error.
if (r < 0) throw new Error("negative radius: " + r);
// Is this path empty? Move to (x0,y0).
if (this._x1 === null) {
this._ += "M" + x0 + "," + y0;
}
// Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {
this._ += "L" + x0 + "," + y0;
}
// Is this arc empty? We’re done.
if (!r) return;
// Does the angle go the wrong way? Flip the direction.
if (da < 0) da = da % tau$2 + tau$2;
// Is this a complete circle? Draw two arcs to complete the circle.
if (da > tauEpsilon) {
this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
}
// Is this arc non-empty? Draw an arc!
else if (da > epsilon$1) {
this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
}
},
rect: function(x, y, w, h) {
this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z";
},
toString: function() {
return this._;
}
};
function defaultSource(d) {
return d.source;
}
function defaultTarget(d) {
return d.target;
}
function defaultRadius(d) {
return d.radius;
}
function defaultStartAngle(d) {
return d.startAngle;
}
function defaultEndAngle(d) {
return d.endAngle;
}
var ribbon = function() {
var source = defaultSource,
target = defaultTarget,
radius = defaultRadius,
startAngle = defaultStartAngle,
endAngle = defaultEndAngle,
context = null;
function ribbon() {
var buffer,
argv = slice$2.call(arguments),
s = source.apply(this, argv),
t = target.apply(this, argv),
sr = +radius.apply(this, (argv[0] = s, argv)),
sa0 = startAngle.apply(this, argv) - halfPi$1,
sa1 = endAngle.apply(this, argv) - halfPi$1,
sx0 = sr * cos(sa0),
sy0 = sr * sin(sa0),
tr = +radius.apply(this, (argv[0] = t, argv)),
ta0 = startAngle.apply(this, argv) - halfPi$1,
ta1 = endAngle.apply(this, argv) - halfPi$1;
if (!context) context = buffer = path();
context.moveTo(sx0, sy0);
context.arc(0, 0, sr, sa0, sa1);
if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
context.arc(0, 0, tr, ta0, ta1);
}
context.quadraticCurveTo(0, 0, sx0, sy0);
context.closePath();
if (buffer) return context = null, buffer + "" || null;
}
ribbon.radius = function(_) {
return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius;
};
ribbon.startAngle = function(_) {
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle;
};
ribbon.endAngle = function(_) {
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle;
};
ribbon.source = function(_) {
return arguments.length ? (source = _, ribbon) : source;
};
ribbon.target = function(_) {
return arguments.length ? (target = _, ribbon) : target;
};
ribbon.context = function(_) {
return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
};
return ribbon;
};
var prefix = "$";
function Map() {}
Map.prototype = map$1.prototype = {
constructor: Map,
has: function(key) {
return (prefix + key) in this;
},
get: function(key) {
return this[prefix + key];
},
set: function(key, value) {
this[prefix + key] = value;
return this;
},
remove: function(key) {
var property = prefix + key;
return property in this && delete this[property];
},
clear: function() {
for (var property in this) if (property[0] === prefix) delete this[property];
},
keys: function() {
var keys = [];
for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
return keys;
},
values: function() {
var values = [];
for (var property in this) if (property[0] === prefix) values.push(this[property]);
return values;
},
entries: function() {
var entries = [];
for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
return entries;
},
size: function() {
var size = 0;
for (var property in this) if (property[0] === prefix) ++size;
return size;
},
empty: function() {
for (var property in this) if (property[0] === prefix) return false;
return true;
},
each: function(f) {
for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
}
};
function map$1(object, f) {
var map = new Map;
// Copy constructor.
if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });
// Index array by numeric index or specified key function.
else if (Array.isArray(object)) {
var i = -1,
n = object.length,
o;
if (f == null) while (++i < n) map.set(i, object[i]);
else while (++i < n) map.set(f(o = object[i], i, object), o);
}
// Convert object to map.
else if (object) for (var key in object) map.set(key, object[key]);
return map;
}
var nest = function() {
var keys = [],
sortKeys = [],
sortValues,
rollup,
nest;
function apply(array, depth, createResult, setResult) {
if (depth >= keys.length) return rollup != null
? rollup(array) : (sortValues != null
? array.sort(sortValues)
: array);
var i = -1,
n = array.length,
key = keys[depth++],
keyValue,
value,
valuesByKey = map$1(),
values,
result = createResult();
while (++i < n) {
if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
values.push(value);
} else {
valuesByKey.set(keyValue, [value]);
}
}
valuesByKey.each(function(values, key) {
setResult(result, key, apply(values, depth, createResult, setResult));
});
return result;
}
function entries(map, depth) {
if (++depth > keys.length) return map;
var array, sortKey = sortKeys[depth - 1];
if (rollup != null && depth >= keys.length) array = map.entries();
else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
}
return nest = {
object: function(array) { return apply(array, 0, createObject, setObject); },
map: function(array) { return apply(array, 0, createMap, setMap); },
entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
key: function(d) { keys.push(d); return nest; },
sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
sortValues: function(order) { sortValues = order; return nest; },
rollup: function(f) { rollup = f; return nest; }
};
};
function createObject() {
return {};
}
function setObject(object, key, value) {
object[key] = value;
}
function createMap() {
return map$1();
}
function setMap(map, key, value) {
map.set(key, value);
}
function Set() {}
var proto = map$1.prototype;
Set.prototype = set$2.prototype = {
constructor: Set,
has: proto.has,
add: function(value) {
value += "";
this[prefix + value] = value;
return this;
},
remove: proto.remove,
clear: proto.clear,
values: proto.keys,
size: proto.size,
empty: proto.empty,
each: proto.each
};
function set$2(object, f) {
var set = new Set;
// Copy constructor.
if (object instanceof Set) object.each(function(value) { set.add(value); });
// Otherwise, assume it’s an array.
else if (object) {
var i = -1, n = object.length;
if (f == null) while (++i < n) set.add(object[i]);
else while (++i < n) set.add(f(object[i], i, object));
}
return set;
}
var d3keys = function(map) {
var keys = [];
for (var key in map) keys.push(key);
return keys;
};
var values = function(map) {
var values = [];
for (var key in map) values.push(map[key]);
return values;
};
var entries = function(map) {
var entries = [];
for (var key in map) entries.push({key: key, value: map[key]});
return entries;
};
function objectConverter(columns) {
return new Function("d", "return {" + columns.map(function(name, i) {
return JSON.stringify(name) + ": d[" + i + "]";
}).join(",") + "}");
}
function customConverter(columns, f) {
var object = objectConverter(columns);
return function(row, i) {
return f(object(row), i, columns);
};
}
// Compute unique columns in order of discovery.
function inferColumns(rows) {
var columnSet = Object.create(null),
columns = [];
rows.forEach(function(row) {
for (var column in row) {
if (!(column in columnSet)) {
columns.push(columnSet[column] = column);
}
}
});
return columns;
}
var dsv = function(delimiter) {
var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
delimiterCode = delimiter.charCodeAt(0);
function parse(text, f) {
var convert, columns, rows = parseRows(text, function(row, i) {
if (convert) return convert(row, i - 1);
columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
});
rows.columns = columns;
return rows;
}
function parseRows(text, f) {
var EOL = {}, // sentinel value for end-of-line
EOF = {}, // sentinel value for end-of-file
rows = [], // output rows
N = text.length,
I = 0, // current character index
n = 0, // the current line number
t, // the current token
eol; // is the current token followed by EOL?
function token() {
if (I >= N) return EOF; // special case: end of file
if (eol) return eol = false, EOL; // special case: end of line
// special case: quotes
var j = I, c;
if (text.charCodeAt(j) === 34) {
var i = j;
while (i++ < N) {
if (text.charCodeAt(i) === 34) {
if (text.charCodeAt(i + 1) !== 34) break;
++i;
}
}
I = i + 2;
c = text.charCodeAt(i + 1);
if (c === 13) {
eol = true;
if (text.charCodeAt(i + 2) === 10) ++I;
} else if (c === 10) {
eol = true;
}
return text.slice(j + 1, i).replace(/""/g, "\"");
}
// common case: find next delimiter or newline
while (I < N) {
var k = 1;
c = text.charCodeAt(I++);
if (c === 10) eol = true; // \n
else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n
else if (c !== delimiterCode) continue;
return text.slice(j, I - k);
}
// special case: last token before EOF
return text.slice(j);
}
while ((t = token()) !== EOF) {
var a = [];
while (t !== EOL && t !== EOF) {
a.push(t);
t = token();
}
if (f && (a = f(a, n++)) == null) continue;
rows.push(a);
}
return rows;
}
function format(rows, columns) {
if (columns == null) columns = inferColumns(rows);
return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {
return columns.map(function(column) {
return formatValue(row[column]);
}).join(delimiter);
})).join("\n");
}
function formatRows(rows) {
return rows.map(formatRow).join("\n");
}
function formatRow(row) {
return row.map(formatValue).join(delimiter);
}
function formatValue(text) {
return text == null ? ""
: reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\""
: text;
}
return {
parse: parse,
parseRows: parseRows,
format: format,
formatRows: formatRows
};
};
var csv = dsv(",");
var csvParse = csv.parse;
var csvParseRows = csv.parseRows;
var csvFormat = csv.format;
var csvFormatRows = csv.formatRows;
var tsv = dsv("\t");
var tsvParse = tsv.parse;
var tsvParseRows = tsv.parseRows;
var tsvFormat = tsv.format;
var tsvFormatRows = tsv.formatRows;
var center$1 = function(x, y) {
var nodes;
if (x == null) x = 0;
if (y == null) y = 0;
function force() {
var i,
n = nodes.length,
node,
sx = 0,
sy = 0;
for (i = 0; i < n; ++i) {
node = nodes[i], sx += node.x, sy += node.y;
}
for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
node = nodes[i], node.x -= sx, node.y -= sy;
}
}
force.initialize = function(_) {
nodes = _;
};
force.x = function(_) {
return arguments.length ? (x = +_, force) : x;
};
force.y = function(_) {
return arguments.length ? (y = +_, force) : y;
};
return force;
};
var constant$6 = function(x) {
return function() {
return x;
};
};
var jiggle = function() {
return (Math.random() - 0.5) * 1e-6;
};
var tree_add = function(d) {
var x = +this._x.call(null, d),
y = +this._y.call(null, d);
return add(this.cover(x, y), x, y, d);
};
function add(tree, x, y, d) {
if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
var parent,
node = tree._root,
leaf = {data: d},
x0 = tree._x0,
y0 = tree._y0,
x1 = tree._x1,
y1 = tree._y1,
xm,
ym,
xp,
yp,
right,
bottom,
i,
j;
// If the tree is empty, initialize the root as a leaf.
if (!node) return tree._root = leaf, tree;
// Find the existing leaf for the new point, or add it.
while (node.length) {
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
}
// Is the new point is exactly coincident with the existing point?
xp = +tree._x.call(null, node.data);
yp = +tree._y.call(null, node.data);
if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
// Otherwise, split the leaf node until the old and new point are separated.
do {
parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
} while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
return parent[j] = node, parent[i] = leaf, tree;
}
function addAll(data) {
var d, i, n = data.length,
x,
y,
xz = new Array(n),
yz = new Array(n),
x0 = Infinity,
y0 = Infinity,
x1 = -Infinity,
y1 = -Infinity;
// Compute the points and their extent.
for (i = 0; i < n; ++i) {
if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
xz[i] = x;
yz[i] = y;
if (x < x0) x0 = x;
if (x > x1) x1 = x;
if (y < y0) y0 = y;
if (y > y1) y1 = y;
}
// If there were no (valid) points, inherit the existing extent.
if (x1 < x0) x0 = this._x0, x1 = this._x1;
if (y1 < y0) y0 = this._y0, y1 = this._y1;
// Expand the tree to cover the new points.
this.cover(x0, y0).cover(x1, y1);
// Add the new points.
for (i = 0; i < n; ++i) {
add(this, xz[i], yz[i], data[i]);
}
return this;
}
var tree_cover = function(x, y) {
if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
var x0 = this._x0,
y0 = this._y0,
x1 = this._x1,
y1 = this._y1;
// If the quadtree has no extent, initialize them.
// Integer extent are necessary so that if we later double the extent,
// the existing quadrant boundaries don’t change due to floating point error!
if (isNaN(x0)) {
x1 = (x0 = Math.floor(x)) + 1;
y1 = (y0 = Math.floor(y)) + 1;
}
// Otherwise, double repeatedly to cover.
else if (x0 > x || x > x1 || y0 > y || y > y1) {
var z = x1 - x0,
node = this._root,
parent,
i;
switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {
case 0: {
do parent = new Array(4), parent[i] = node, node = parent;
while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);
break;
}
case 1: {
do parent = new Array(4), parent[i] = node, node = parent;
while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);
break;
}
case 2: {
do parent = new Array(4), parent[i] = node, node = parent;
while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);
break;
}
case 3: {
do parent = new Array(4), parent[i] = node, node = parent;
while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);
break;
}
}
if (this._root && this._root.length) this._root = node;
}
// If the quadtree covers the point already, just return.
else return this;
this._x0 = x0;
this._y0 = y0;
this._x1 = x1;
this._y1 = y1;
return this;
};
var tree_data = function() {
var data = [];
this.visit(function(node) {
if (!node.length) do data.push(node.data); while (node = node.next)
});
return data;
};
var tree_extent = function(_) {
return arguments.length
? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
: isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
};
var Quad = function(node, x0, y0, x1, y1) {
this.node = node;
this.x0 = x0;
this.y0 = y0;
this.x1 = x1;
this.y1 = y1;
};
var tree_find = function(x, y, radius) {
var data,
x0 = this._x0,
y0 = this._y0,
x1,
y1,
x2,
y2,
x3 = this._x1,
y3 = this._y1,
quads = [],
node = this._root,
q,
i;
if (node) quads.push(new Quad(node, x0, y0, x3, y3));
if (radius == null) radius = Infinity;
else {
x0 = x - radius, y0 = y - radius;
x3 = x + radius, y3 = y + radius;
radius *= radius;
}
while (q = quads.pop()) {
// Stop searching if this quadrant can’t contain a closer node.
if (!(node = q.node)
|| (x1 = q.x0) > x3
|| (y1 = q.y0) > y3
|| (x2 = q.x1) < x0
|| (y2 = q.y1) < y0) continue;
// Bisect the current quadrant.
if (node.length) {
var xm = (x1 + x2) / 2,
ym = (y1 + y2) / 2;
quads.push(
new Quad(node[3], xm, ym, x2, y2),
new Quad(node[2], x1, ym, xm, y2),
new Quad(node[1], xm, y1, x2, ym),
new Quad(node[0], x1, y1, xm, ym)
);
// Visit the closest quadrant first.
if (i = (y >= ym) << 1 | (x >= xm)) {
q = quads[quads.length - 1];
quads[quads.length - 1] = quads[quads.length - 1 - i];
quads[quads.length - 1 - i] = q;
}
}
// Visit this point. (Visiting coincident points isn’t necessary!)
else {
var dx = x - +this._x.call(null, node.data),
dy = y - +this._y.call(null, node.data),
d2 = dx * dx + dy * dy;
if (d2 < radius) {
var d = Math.sqrt(radius = d2);
x0 = x - d, y0 = y - d;
x3 = x + d, y3 = y + d;
data = node.data;
}
}
}
return data;
};
var tree_remove = function(d) {
if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
var parent,
node = this._root,
retainer,
previous,
next,
x0 = this._x0,
y0 = this._y0,
x1 = this._x1,
y1 = this._y1,
x,
y,
xm,
ym,
right,
bottom,
i,
j;
// If the tree is empty, initialize the root as a leaf.
if (!node) return this;
// Find the leaf node for the point.
// While descending, also retain the deepest parent with a non-removed sibling.
if (node.length) while (true) {
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
if (!node.length) break;
if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
}
// Find the point to remove.
while (node.data !== d) if (!(previous = node, node = node.next)) return this;
if (next = node.next) delete node.next;
// If there are multiple coincident points, remove just the point.
if (previous) return (next ? previous.next = next : delete previous.next), this;
// If this is the root point, remove it.
if (!parent) return this._root = next, this;
// Remove this leaf.
next ? parent[i] = next : delete parent[i];
// If the parent now contains exactly one leaf, collapse superfluous parents.
if ((node = parent[0] || parent[1] || parent[2] || parent[3])
&& node === (parent[3] || parent[2] || parent[1] || parent[0])
&& !node.length) {
if (retainer) retainer[j] = node;
else this._root = node;
}
return this;
};
function removeAll(data) {
for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
return this;
}
var tree_root = function() {
return this._root;
};
var tree_size = function() {
var size = 0;
this.visit(function(node) {
if (!node.length) do ++size; while (node = node.next)
});
return size;
};
var tree_visit = function(callback) {
var quads = [], q, node = this._root, child, x0, y0, x1, y1;
if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
while (q = quads.pop()) {
if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
}
}
return this;
};
var tree_visitAfter = function(callback) {
var quads = [], next = [], q;
if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
while (q = quads.pop()) {
var node = q.node;
if (node.length) {
var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
}
next.push(q);
}
while (q = next.pop()) {
callback(q.node, q.x0, q.y0, q.x1, q.y1);
}
return this;
};
function defaultX(d) {
return d[0];
}
var tree_x = function(_) {
return arguments.length ? (this._x = _, this) : this._x;
};
function defaultY(d) {
return d[1];
}
var tree_y = function(_) {
return arguments.length ? (this._y = _, this) : this._y;
};
function quadtree(nodes, x, y) {
var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);
return nodes == null ? tree : tree.addAll(nodes);
}
function Quadtree(x, y, x0, y0, x1, y1) {
this._x = x;
this._y = y;
this._x0 = x0;
this._y0 = y0;
this._x1 = x1;
this._y1 = y1;
this._root = undefined;
}
function leaf_copy(leaf) {
var copy = {data: leaf.data}, next = copy;
while (leaf = leaf.next) next = next.next = {data: leaf.data};
return copy;
}
var treeProto = quadtree.prototype = Quadtree.prototype;
treeProto.copy = function() {
var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
node = this._root,
nodes,
child;
if (!node) return copy;
if (!node.length) return copy._root = leaf_copy(node), copy;
nodes = [{source: node, target: copy._root = new Array(4)}];
while (node = nodes.pop()) {
for (var i = 0; i < 4; ++i) {
if (child = node.source[i]) {
if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
else node.target[i] = leaf_copy(child);
}
}
}
return copy;
};
treeProto.add = tree_add;
treeProto.addAll = addAll;
treeProto.cover = tree_cover;
treeProto.data = tree_data;
treeProto.extent = tree_extent;
treeProto.find = tree_find;
treeProto.remove = tree_remove;
treeProto.removeAll = removeAll;
treeProto.root = tree_root;
treeProto.size = tree_size;
treeProto.visit = tree_visit;
treeProto.visitAfter = tree_visitAfter;
treeProto.x = tree_x;
treeProto.y = tree_y;
function x(d) {
return d.x + d.vx;
}
function y(d) {
return d.y + d.vy;
}
var collide = function(radius) {
var nodes,
radii,
strength = 1,
iterations = 1;
if (typeof radius !== "function") radius = constant$6(radius == null ? 1 : +radius);
function force() {
var i, n = nodes.length,
tree,
node,
xi,
yi,
ri,
ri2;
for (var k = 0; k < iterations; ++k) {
tree = quadtree(nodes, x, y).visitAfter(prepare);
for (i = 0; i < n; ++i) {
node = nodes[i];
ri = radii[node.index], ri2 = ri * ri;
xi = node.x + node.vx;
yi = node.y + node.vy;
tree.visit(apply);
}
}
function apply(quad, x0, y0, x1, y1) {
var data = quad.data, rj = quad.r, r = ri + rj;
if (data) {
if (data.index > node.index) {
var x = xi - data.x - data.vx,
y = yi - data.y - data.vy,
l = x * x + y * y;
if (l < r * r) {
if (x === 0) x = jiggle(), l += x * x;
if (y === 0) y = jiggle(), l += y * y;
l = (r - (l = Math.sqrt(l))) / l * strength;
node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
node.vy += (y *= l) * r;
data.vx -= x * (r = 1 - r);
data.vy -= y * r;
}
}
return;
}
return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
}
}
function prepare(quad) {
if (quad.data) return quad.r = radii[quad.data.index];
for (var i = quad.r = 0; i < 4; ++i) {
if (quad[i] && quad[i].r > quad.r) {
quad.r = quad[i].r;
}
}
}
function initialize() {
if (!nodes) return;
var i, n = nodes.length, node;
radii = new Array(n);
for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.iterations = function(_) {
return arguments.length ? (iterations = +_, force) : iterations;
};
force.strength = function(_) {
return arguments.length ? (strength = +_, force) : strength;
};
force.radius = function(_) {
return arguments.length ? (radius = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : radius;
};
return force;
};
function index(d) {
return d.index;
}
function find(nodeById, nodeId) {
var node = nodeById.get(nodeId);
if (!node) throw new Error("missing: " + nodeId);
return node;
}
var link = function(links) {
var id = index,
strength = defaultStrength,
strengths,
distance = constant$6(30),
distances,
nodes,
count,
bias,
iterations = 1;
if (links == null) links = [];
function defaultStrength(link) {
return 1 / Math.min(count[link.source.index], count[link.target.index]);
}
function force(alpha) {
for (var k = 0, n = links.length; k < iterations; ++k) {
for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
link = links[i], source = link.source, target = link.target;
x = target.x + target.vx - source.x - source.vx || jiggle();
y = target.y + target.vy - source.y - source.vy || jiggle();
l = Math.sqrt(x * x + y * y);
l = (l - distances[i]) / l * alpha * strengths[i];
x *= l, y *= l;
target.vx -= x * (b = bias[i]);
target.vy -= y * b;
source.vx += x * (b = 1 - b);
source.vy += y * b;
}
}
}
function initialize() {
if (!nodes) return;
var i,
n = nodes.length,
m = links.length,
nodeById = map$1(nodes, id),
link;
for (i = 0, count = new Array(n); i < m; ++i) {
link = links[i], link.index = i;
if (typeof link.source !== "object") link.source = find(nodeById, link.source);
if (typeof link.target !== "object") link.target = find(nodeById, link.target);
count[link.source.index] = (count[link.source.index] || 0) + 1;
count[link.target.index] = (count[link.target.index] || 0) + 1;
}
for (i = 0, bias = new Array(m); i < m; ++i) {
link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
}
strengths = new Array(m), initializeStrength();
distances = new Array(m), initializeDistance();
}
function initializeStrength() {
if (!nodes) return;
for (var i = 0, n = links.length; i < n; ++i) {
strengths[i] = +strength(links[i], i, links);
}
}
function initializeDistance() {
if (!nodes) return;
for (var i = 0, n = links.length; i < n; ++i) {
distances[i] = +distance(links[i], i, links);
}
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.links = function(_) {
return arguments.length ? (links = _, initialize(), force) : links;
};
force.id = function(_) {
return arguments.length ? (id = _, force) : id;
};
force.iterations = function(_) {
return arguments.length ? (iterations = +_, force) : iterations;
};
force.strength = function(_) {
return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initializeStrength(), force) : strength;
};
force.distance = function(_) {
return arguments.length ? (distance = typeof _ === "function" ? _ : constant$6(+_), initializeDistance(), force) : distance;
};
return force;
};
function x$1(d) {
return d.x;
}
function y$1(d) {
return d.y;
}
var initialRadius = 10;
var initialAngle = Math.PI * (3 - Math.sqrt(5));
var simulation = function(nodes) {
var simulation,
alpha = 1,
alphaMin = 0.001,
alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
alphaTarget = 0,
velocityDecay = 0.6,
forces = map$1(),
stepper = timer(step),
event = dispatch("tick", "end");
if (nodes == null) nodes = [];
function step() {
tick();
event.call("tick", simulation);
if (alpha < alphaMin) {
stepper.stop();
event.call("end", simulation);
}
}
function tick() {
var i, n = nodes.length, node;
alpha += (alphaTarget - alpha) * alphaDecay;
forces.each(function(force) {
force(alpha);
});
for (i = 0; i < n; ++i) {
node = nodes[i];
if (node.fx == null) node.x += node.vx *= velocityDecay;
else node.x = node.fx, node.vx = 0;
if (node.fy == null) node.y += node.vy *= velocityDecay;
else node.y = node.fy, node.vy = 0;
}
}
function initializeNodes() {
for (var i = 0, n = nodes.length, node; i < n; ++i) {
node = nodes[i], node.index = i;
if (isNaN(node.x) || isNaN(node.y)) {
var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
node.x = radius * Math.cos(angle);
node.y = radius * Math.sin(angle);
}
if (isNaN(node.vx) || isNaN(node.vy)) {
node.vx = node.vy = 0;
}
}
}
function initializeForce(force) {
if (force.initialize) force.initialize(nodes);
return force;
}
initializeNodes();
return simulation = {
tick: tick,
restart: function() {
return stepper.restart(step), simulation;
},
stop: function() {
return stepper.stop(), simulation;
},
nodes: function(_) {
return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
},
alpha: function(_) {
return arguments.length ? (alpha = +_, simulation) : alpha;
},
alphaMin: function(_) {
return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
},
alphaDecay: function(_) {
return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
},
alphaTarget: function(_) {
return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
},
velocityDecay: function(_) {
return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
},
force: function(name, _) {
return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
},
find: function(x, y, radius) {
var i = 0,
n = nodes.length,
dx,
dy,
d2,
node,
closest;
if (radius == null) radius = Infinity;
else radius *= radius;
for (i = 0; i < n; ++i) {
node = nodes[i];
dx = x - node.x;
dy = y - node.y;
d2 = dx * dx + dy * dy;
if (d2 < radius) closest = node, radius = d2;
}
return closest;
},
on: function(name, _) {
return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
}
};
};
var manyBody = function() {
var nodes,
node,
alpha,
strength = constant$6(-30),
strengths,
distanceMin2 = 1,
distanceMax2 = Infinity,
theta2 = 0.81;
function force(_) {
var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);
for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
}
function initialize() {
if (!nodes) return;
var i, n = nodes.length, node;
strengths = new Array(n);
for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);
}
function accumulate(quad) {
var strength = 0, q, c, x$$1, y$$1, i;
// For internal nodes, accumulate forces from child quadrants.
if (quad.length) {
for (x$$1 = y$$1 = i = 0; i < 4; ++i) {
if ((q = quad[i]) && (c = q.value)) {
strength += c, x$$1 += c * q.x, y$$1 += c * q.y;
}
}
quad.x = x$$1 / strength;
quad.y = y$$1 / strength;
}
// For leaf nodes, accumulate forces from coincident quadrants.
else {
q = quad;
q.x = q.data.x;
q.y = q.data.y;
do strength += strengths[q.data.index];
while (q = q.next);
}
quad.value = strength;
}
function apply(quad, x1, _, x2) {
if (!quad.value) return true;
var x$$1 = quad.x - node.x,
y$$1 = quad.y - node.y,
w = x2 - x1,
l = x$$1 * x$$1 + y$$1 * y$$1;
// Apply the Barnes-Hut approximation if possible.
// Limit forces for very close nodes; randomize direction if coincident.
if (w * w / theta2 < l) {
if (l < distanceMax2) {
if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
node.vx += x$$1 * quad.value * alpha / l;
node.vy += y$$1 * quad.value * alpha / l;
}
return true;
}
// Otherwise, process points directly.
else if (quad.length || l >= distanceMax2) return;
// Limit forces for very close nodes; randomize direction if coincident.
if (quad.data !== node || quad.next) {
if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
}
do if (quad.data !== node) {
w = strengths[quad.data.index] * alpha / l;
node.vx += x$$1 * w;
node.vy += y$$1 * w;
} while (quad = quad.next);
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.strength = function(_) {
return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength;
};
force.distanceMin = function(_) {
return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
};
force.distanceMax = function(_) {
return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
};
force.theta = function(_) {
return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
};
return force;
};
var x$2 = function(x) {
var strength = constant$6(0.1),
nodes,
strengths,
xz;
if (typeof x !== "function") x = constant$6(x == null ? 0 : +x);
function force(alpha) {
for (var i = 0, n = nodes.length, node; i < n; ++i) {
node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
}
}
function initialize() {
if (!nodes) return;
var i, n = nodes.length;
strengths = new Array(n);
xz = new Array(n);
for (i = 0; i < n; ++i) {
strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
}
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.strength = function(_) {
return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength;
};
force.x = function(_) {
return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : x;
};
return force;
};
var y$2 = function(y) {
var strength = constant$6(0.1),
nodes,
strengths,
yz;
if (typeof y !== "function") y = constant$6(y == null ? 0 : +y);
function force(alpha) {
for (var i = 0, n = nodes.length, node; i < n; ++i) {
node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
}
}
function initialize() {
if (!nodes) return;
var i, n = nodes.length;
strengths = new Array(n);
yz = new Array(n);
for (i = 0; i < n; ++i) {
strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
}
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.strength = function(_) {
return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength;
};
force.y = function(_) {
return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : y;
};
return force;
};
// Computes the decimal coefficient and exponent of the specified number x with
// significant digits p, where x is positive and p is in [1, 21] or undefined.
// For example, formatDecimal(1.23) returns ["123", 0].
var formatDecimal = function(x, p) {
if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
var i, coefficient = x.slice(0, i);
// The string returned by toExponential either has the form \d\.\d+e[-+]\d+
// (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
return [
coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
+x.slice(i + 1)
];
};
var exponent$1 = function(x) {
return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
};
var formatGroup = function(grouping, thousands) {
return function(value, width) {
var i = value.length,
t = [],
j = 0,
g = grouping[0],
length = 0;
while (i > 0 && g > 0) {
if (length + g + 1 > width) g = Math.max(1, width - length);
t.push(value.substring(i -= g, i + g));
if ((length += g + 1) > width) break;
g = grouping[j = (j + 1) % grouping.length];
}
return t.reverse().join(thousands);
};
};
var formatNumerals = function(numerals) {
return function(value) {
return value.replace(/[0-9]/g, function(i) {
return numerals[+i];
});
};
};
var formatDefault = function(x, p) {
x = x.toPrecision(p);
out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {
switch (x[i]) {
case ".": i0 = i1 = i; break;
case "0": if (i0 === 0) i0 = i; i1 = i; break;
case "e": break out;
default: if (i0 > 0) i0 = 0; break;
}
}
return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;
};
var prefixExponent;
var formatPrefixAuto = function(x, p) {
var d = formatDecimal(x, p);
if (!d) return x + "";
var coefficient = d[0],
exponent = d[1],
i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
n = coefficient.length;
return i === n ? coefficient
: i > n ? coefficient + new Array(i - n + 1).join("0")
: i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
: "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
};
var formatRounded = function(x, p) {
var d = formatDecimal(x, p);
if (!d) return x + "";
var coefficient = d[0],
exponent = d[1];
return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
: coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
: coefficient + new Array(exponent - coefficient.length + 2).join("0");
};
var formatTypes = {
"": formatDefault,
"%": function(x, p) { return (x * 100).toFixed(p); },
"b": function(x) { return Math.round(x).toString(2); },
"c": function(x) { return x + ""; },
"d": function(x) { return Math.round(x).toString(10); },
"e": function(x, p) { return x.toExponential(p); },
"f": function(x, p) { return x.toFixed(p); },
"g": function(x, p) { return x.toPrecision(p); },
"o": function(x) { return Math.round(x).toString(8); },
"p": function(x, p) { return formatRounded(x * 100, p); },
"r": formatRounded,
"s": formatPrefixAuto,
"X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
"x": function(x) { return Math.round(x).toString(16); }
};
// [[fill]align][sign][symbol][0][width][,][.precision][type]
var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
function formatSpecifier(specifier) {
return new FormatSpecifier(specifier);
}
formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
function FormatSpecifier(specifier) {
if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
var match,
fill = match[1] || " ",
align = match[2] || ">",
sign = match[3] || "-",
symbol = match[4] || "",
zero = !!match[5],
width = match[6] && +match[6],
comma = !!match[7],
precision = match[8] && +match[8].slice(1),
type = match[9] || "";
// The "n" type is an alias for ",g".
if (type === "n") comma = true, type = "g";
// Map invalid types to the default format.
else if (!formatTypes[type]) type = "";
// If zero fill is specified, padding goes after sign and before digits.
if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
this.fill = fill;
this.align = align;
this.sign = sign;
this.symbol = symbol;
this.zero = zero;
this.width = width;
this.comma = comma;
this.precision = precision;
this.type = type;
}
FormatSpecifier.prototype.toString = function() {
return this.fill
+ this.align
+ this.sign
+ this.symbol
+ (this.zero ? "0" : "")
+ (this.width == null ? "" : Math.max(1, this.width | 0))
+ (this.comma ? "," : "")
+ (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
+ this.type;
};
var identity$3 = function(x) {
return x;
};
var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
var formatLocale = function(locale) {
var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
currency = locale.currency,
decimal = locale.decimal,
numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3;
function newFormat(specifier) {
specifier = formatSpecifier(specifier);
var fill = specifier.fill,
align = specifier.align,
sign = specifier.sign,
symbol = specifier.symbol,
zero = specifier.zero,
width = specifier.width,
comma = specifier.comma,
precision = specifier.precision,
type = specifier.type;
// Compute the prefix and suffix.
// For SI-prefix, the suffix is lazily computed.
var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : "";
// What format function should we use?
// Is this an integer type?
// Can this type generate exponential notation?
var formatType = formatTypes[type],
maybeSuffix = !type || /[defgprs%]/.test(type);
// Set the default precision if not specified,
// or clamp the specified precision to the supported range.
// For significant precision, it must be in [1, 21].
// For fixed precision, it must be in [0, 20].
precision = precision == null ? (type ? 6 : 12)
: /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
: Math.max(0, Math.min(20, precision));
function format(value) {
var valuePrefix = prefix,
valueSuffix = suffix,
i, n, c;
if (type === "c") {
valueSuffix = formatType(value) + valueSuffix;
value = "";
} else {
value = +value;
// Perform the initial formatting.
var valueNegative = value < 0;
value = formatType(Math.abs(value), precision);
// If a negative value rounds to zero during formatting, treat as positive.
if (valueNegative && +value === 0) valueNegative = false;
// Compute the prefix and suffix.
valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : "");
// Break the formatted value into the integer “value” part that can be
// grouped, and fractional or exponential “suffix” part that is not.
if (maybeSuffix) {
i = -1, n = value.length;
while (++i < n) {
if (c = value.charCodeAt(i), 48 > c || c > 57) {
valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
value = value.slice(0, i);
break;
}
}
}
}
// If the fill character is not "0", grouping is applied before padding.
if (comma && !zero) value = group(value, Infinity);
// Compute the padding.
var length = valuePrefix.length + value.length + valueSuffix.length,
padding = length < width ? new Array(width - length + 1).join(fill) : "";
// If the fill character is "0", grouping is applied after padding.
if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
// Reconstruct the final output based on the desired alignment.
switch (align) {
case "<": value = valuePrefix + value + valueSuffix + padding; break;
case "=": value = valuePrefix + padding + value + valueSuffix; break;
case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
default: value = padding + valuePrefix + value + valueSuffix; break;
}
return numerals(value);
}
format.toString = function() {
return specifier + "";
};
return format;
}
function formatPrefix(specifier, value) {
var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
k = Math.pow(10, -e),
prefix = prefixes[8 + e / 3];
return function(value) {
return f(k * value) + prefix;
};
}
return {
format: newFormat,
formatPrefix: formatPrefix
};
};
var locale$1;
defaultLocale({
decimal: ".",
thousands: ",",
grouping: [3],
currency: ["$", ""]
});
function defaultLocale(definition) {
locale$1 = formatLocale(definition);
exports.format = locale$1.format;
exports.formatPrefix = locale$1.formatPrefix;
return locale$1;
}
var precisionFixed = function(step) {
return Math.max(0, -exponent$1(Math.abs(step)));
};
var precisionPrefix = function(step, value) {
return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
};
var precisionRound = function(step, max) {
step = Math.abs(step), max = Math.abs(max) - step;
return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
};
// Adds floating point numbers with twice the normal precision.
// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
// 305–363 (1997).
// Code adapted from GeographicLib by Charles F. F. Karney,
// http://geographiclib.sourceforge.net/
var adder = function() {
return new Adder;
};
function Adder() {
this.reset();
}
Adder.prototype = {
constructor: Adder,
reset: function() {
this.s = // rounded value
this.t = 0; // exact error
},
add: function(y) {
add$1(temp, y, this.t);
add$1(this, temp.s, this.s);
if (this.s) this.t += temp.t;
else this.s = temp.t;
},
valueOf: function() {
return this.s;
}
};
var temp = new Adder;
function add$1(adder, a, b) {
var x = adder.s = a + b,
bv = x - a,
av = x - bv;
adder.t = (a - av) + (b - bv);
}
var epsilon$2 = 1e-6;
var epsilon2$1 = 1e-12;
var pi$3 = Math.PI;
var halfPi$2 = pi$3 / 2;
var quarterPi = pi$3 / 4;
var tau$3 = pi$3 * 2;
var degrees$1 = 180 / pi$3;
var radians = pi$3 / 180;
var abs = Math.abs;
var atan = Math.atan;
var atan2 = Math.atan2;
var cos$1 = Math.cos;
var ceil = Math.ceil;
var exp = Math.exp;
var log = Math.log;
var pow = Math.pow;
var sin$1 = Math.sin;
var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
var sqrt = Math.sqrt;
var tan = Math.tan;
function acos(x) {
return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);
}
function asin(x) {
return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);
}
function haversin(x) {
return (x = sin$1(x / 2)) * x;
}
function noop$1() {}
function streamGeometry(geometry, stream) {
if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
streamGeometryType[geometry.type](geometry, stream);
}
}
var streamObjectType = {
Feature: function(object, stream) {
streamGeometry(object.geometry, stream);
},
FeatureCollection: function(object, stream) {
var features = object.features, i = -1, n = features.length;
while (++i < n) streamGeometry(features[i].geometry, stream);
}
};
var streamGeometryType = {
Sphere: function(object, stream) {
stream.sphere();
},
Point: function(object, stream) {
object = object.coordinates;
stream.point(object[0], object[1], object[2]);
},
MultiPoint: function(object, stream) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
},
LineString: function(object, stream) {
streamLine(object.coordinates, stream, 0);
},
MultiLineString: function(object, stream) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) streamLine(coordinates[i], stream, 0);
},
Polygon: function(object, stream) {
streamPolygon(object.coordinates, stream);
},
MultiPolygon: function(object, stream) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) streamPolygon(coordinates[i], stream);
},
GeometryCollection: function(object, stream) {
var geometries = object.geometries, i = -1, n = geometries.length;
while (++i < n) streamGeometry(geometries[i], stream);
}
};
function streamLine(coordinates, stream, closed) {
var i = -1, n = coordinates.length - closed, coordinate;
stream.lineStart();
while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
stream.lineEnd();
}
function streamPolygon(coordinates, stream) {
var i = -1, n = coordinates.length;
stream.polygonStart();
while (++i < n) streamLine(coordinates[i], stream, 1);
stream.polygonEnd();
}
var geoStream = function(object, stream) {
if (object && streamObjectType.hasOwnProperty(object.type)) {
streamObjectType[object.type](object, stream);
} else {
streamGeometry(object, stream);
}
};
var areaRingSum = adder();
var areaSum = adder();
var lambda00;
var phi00;
var lambda0;
var cosPhi0;
var sinPhi0;
var areaStream = {
point: noop$1,
lineStart: noop$1,
lineEnd: noop$1,
polygonStart: function() {
areaRingSum.reset();
areaStream.lineStart = areaRingStart;
areaStream.lineEnd = areaRingEnd;
},
polygonEnd: function() {
var areaRing = +areaRingSum;
areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);
this.lineStart = this.lineEnd = this.point = noop$1;
},
sphere: function() {
areaSum.add(tau$3);
}
};
function areaRingStart() {
areaStream.point = areaPointFirst;
}
function areaRingEnd() {
areaPoint(lambda00, phi00);
}
function areaPointFirst(lambda, phi) {
areaStream.point = areaPoint;
lambda00 = lambda, phi00 = phi;
lambda *= radians, phi *= radians;
lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
}
function areaPoint(lambda, phi) {
lambda *= radians, phi *= radians;
phi = phi / 2 + quarterPi; // half the angular distance from south pole
// Spherical excess E for a spherical triangle with vertices: south pole,
// previous point, current point. Uses a formula derived from Cagnoli’s
// theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
var dLambda = lambda - lambda0,
sdLambda = dLambda >= 0 ? 1 : -1,
adLambda = sdLambda * dLambda,
cosPhi = cos$1(phi),
sinPhi = sin$1(phi),
k = sinPhi0 * sinPhi,
u = cosPhi0 * cosPhi + k * cos$1(adLambda),
v = k * sdLambda * sin$1(adLambda);
areaRingSum.add(atan2(v, u));
// Advance the previous points.
lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
}
var area = function(object) {
areaSum.reset();
geoStream(object, areaStream);
return areaSum * 2;
};
function spherical(cartesian) {
return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
}
function cartesian(spherical) {
var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
}
function cartesianDot(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}
function cartesianCross(a, b) {
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
}
// TODO return a
function cartesianAddInPlace(a, b) {
a[0] += b[0], a[1] += b[1], a[2] += b[2];
}
function cartesianScale(vector, k) {
return [vector[0] * k, vector[1] * k, vector[2] * k];
}
// TODO return d
function cartesianNormalizeInPlace(d) {
var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
d[0] /= l, d[1] /= l, d[2] /= l;
}
var lambda0$1;
var phi0;
var lambda1;
var phi1;
var lambda2;
var lambda00$1;
var phi00$1;
var p0;
var deltaSum = adder();
var ranges;
var range$1;
var boundsStream = {
point: boundsPoint,
lineStart: boundsLineStart,
lineEnd: boundsLineEnd,
polygonStart: function() {
boundsStream.point = boundsRingPoint;
boundsStream.lineStart = boundsRingStart;
boundsStream.lineEnd = boundsRingEnd;
deltaSum.reset();
areaStream.polygonStart();
},
polygonEnd: function() {
areaStream.polygonEnd();
boundsStream.point = boundsPoint;
boundsStream.lineStart = boundsLineStart;
boundsStream.lineEnd = boundsLineEnd;
if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
else if (deltaSum > epsilon$2) phi1 = 90;
else if (deltaSum < -epsilon$2) phi0 = -90;
range$1[0] = lambda0$1, range$1[1] = lambda1;
}
};
function boundsPoint(lambda, phi) {
ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
if (phi < phi0) phi0 = phi;
if (phi > phi1) phi1 = phi;
}
function linePoint(lambda, phi) {
var p = cartesian([lambda * radians, phi * radians]);
if (p0) {
var normal = cartesianCross(p0, p),
equatorial = [normal[1], -normal[0], 0],
inflection = cartesianCross(equatorial, normal);
cartesianNormalizeInPlace(inflection);
inflection = spherical(inflection);
var delta = lambda - lambda2,
sign$$1 = delta > 0 ? 1 : -1,
lambdai = inflection[0] * degrees$1 * sign$$1,
phii,
antimeridian = abs(delta) > 180;
if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
phii = inflection[1] * degrees$1;
if (phii > phi1) phi1 = phii;
} else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
phii = -inflection[1] * degrees$1;
if (phii < phi0) phi0 = phii;
} else {
if (phi < phi0) phi0 = phi;
if (phi > phi1) phi1 = phi;
}
if (antimeridian) {
if (lambda < lambda2) {
if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
} else {
if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
}
} else {
if (lambda1 >= lambda0$1) {
if (lambda < lambda0$1) lambda0$1 = lambda;
if (lambda > lambda1) lambda1 = lambda;
} else {
if (lambda > lambda2) {
if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
} else {
if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
}
}
}
} else {
ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
}
if (phi < phi0) phi0 = phi;
if (phi > phi1) phi1 = phi;
p0 = p, lambda2 = lambda;
}
function boundsLineStart() {
boundsStream.point = linePoint;
}
function boundsLineEnd() {
range$1[0] = lambda0$1, range$1[1] = lambda1;
boundsStream.point = boundsPoint;
p0 = null;
}
function boundsRingPoint(lambda, phi) {
if (p0) {
var delta = lambda - lambda2;
deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
} else {
lambda00$1 = lambda, phi00$1 = phi;
}
areaStream.point(lambda, phi);
linePoint(lambda, phi);
}
function boundsRingStart() {
areaStream.lineStart();
}
function boundsRingEnd() {
boundsRingPoint(lambda00$1, phi00$1);
areaStream.lineEnd();
if (abs(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180);
range$1[0] = lambda0$1, range$1[1] = lambda1;
p0 = null;
}
// Finds the left-right distance between two longitudes.
// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
// the distance between ±180° to be 360°.
function angle(lambda0, lambda1) {
return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
}
function rangeCompare(a, b) {
return a[0] - b[0];
}
function rangeContains(range, x) {
return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
}
var bounds = function(feature) {
var i, n, a, b, merged, deltaMax, delta;
phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
ranges = [];
geoStream(feature, boundsStream);
// First, sort ranges by their minimum longitudes.
if (n = ranges.length) {
ranges.sort(rangeCompare);
// Then, merge any ranges that overlap.
for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
b = ranges[i];
if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
} else {
merged.push(a = b);
}
}
// Finally, find the largest gap between the merged ranges.
// The final bounding box will be the inverse of this gap.
for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
b = merged[i];
if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
}
}
ranges = range$1 = null;
return lambda0$1 === Infinity || phi0 === Infinity
? [[NaN, NaN], [NaN, NaN]]
: [[lambda0$1, phi0], [lambda1, phi1]];
};
var W0;
var W1;
var X0;
var Y0;
var Z0;
var X1;
var Y1;
var Z1;
var X2;
var Y2;
var Z2;
var lambda00$2;
var phi00$2;
var x0;
var y0;
var z0; // previous point
var centroidStream = {
sphere: noop$1,
point: centroidPoint,
lineStart: centroidLineStart,
lineEnd: centroidLineEnd,
polygonStart: function() {
centroidStream.lineStart = centroidRingStart;
centroidStream.lineEnd = centroidRingEnd;
},
polygonEnd: function() {
centroidStream.lineStart = centroidLineStart;
centroidStream.lineEnd = centroidLineEnd;
}
};
// Arithmetic mean of Cartesian vectors.
function centroidPoint(lambda, phi) {
lambda *= radians, phi *= radians;
var cosPhi = cos$1(phi);
centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
}
function centroidPointCartesian(x, y, z) {
++W0;
X0 += (x - X0) / W0;
Y0 += (y - Y0) / W0;
Z0 += (z - Z0) / W0;
}
function centroidLineStart() {
centroidStream.point = centroidLinePointFirst;
}
function centroidLinePointFirst(lambda, phi) {
lambda *= radians, phi *= radians;
var cosPhi = cos$1(phi);
x0 = cosPhi * cos$1(lambda);
y0 = cosPhi * sin$1(lambda);
z0 = sin$1(phi);
centroidStream.point = centroidLinePoint;
centroidPointCartesian(x0, y0, z0);
}
function centroidLinePoint(lambda, phi) {
lambda *= radians, phi *= radians;
var cosPhi = cos$1(phi),
x = cosPhi * cos$1(lambda),
y = cosPhi * sin$1(lambda),
z = sin$1(phi),
w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
W1 += w;
X1 += w * (x0 + (x0 = x));
Y1 += w * (y0 + (y0 = y));
Z1 += w * (z0 + (z0 = z));
centroidPointCartesian(x0, y0, z0);
}
function centroidLineEnd() {
centroidStream.point = centroidPoint;
}
// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
// J. Applied Mechanics 42, 239 (1975).
function centroidRingStart() {
centroidStream.point = centroidRingPointFirst;
}
function centroidRingEnd() {
centroidRingPoint(lambda00$2, phi00$2);
centroidStream.point = centroidPoint;
}
function centroidRingPointFirst(lambda, phi) {
lambda00$2 = lambda, phi00$2 = phi;
lambda *= radians, phi *= radians;
centroidStream.point = centroidRingPoint;
var cosPhi = cos$1(phi);
x0 = cosPhi * cos$1(lambda);
y0 = cosPhi * sin$1(lambda);
z0 = sin$1(phi);
centroidPointCartesian(x0, y0, z0);
}
function centroidRingPoint(lambda, phi) {
lambda *= radians, phi *= radians;
var cosPhi = cos$1(phi),
x = cosPhi * cos$1(lambda),
y = cosPhi * sin$1(lambda),
z = sin$1(phi),
cx = y0 * z - z0 * y,
cy = z0 * x - x0 * z,
cz = x0 * y - y0 * x,
m = sqrt(cx * cx + cy * cy + cz * cz),
w = asin(m), // line weight = angle
v = m && -w / m; // area weight multiplier
X2 += v * cx;
Y2 += v * cy;
Z2 += v * cz;
W1 += w;
X1 += w * (x0 + (x0 = x));
Y1 += w * (y0 + (y0 = y));
Z1 += w * (z0 + (z0 = z));
centroidPointCartesian(x0, y0, z0);
}
var centroid = function(object) {
W0 = W1 =
X0 = Y0 = Z0 =
X1 = Y1 = Z1 =
X2 = Y2 = Z2 = 0;
geoStream(object, centroidStream);
var x = X2,
y = Y2,
z = Z2,
m = x * x + y * y + z * z;
// If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
if (m < epsilon2$1) {
x = X1, y = Y1, z = Z1;
// If the feature has zero length, fall back to arithmetic mean of point vectors.
if (W1 < epsilon$2) x = X0, y = Y0, z = Z0;
m = x * x + y * y + z * z;
// If the feature still has an undefined ccentroid, then return.
if (m < epsilon2$1) return [NaN, NaN];
}
return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];
};
var constant$7 = function(x) {
return function() {
return x;
};
};
var compose = function(a, b) {
function compose(x, y) {
return x = a(x, y), b(x[0], x[1]);
}
if (a.invert && b.invert) compose.invert = function(x, y) {
return x = b.invert(x, y), x && a.invert(x[0], x[1]);
};
return compose;
};
function rotationIdentity(lambda, phi) {
return [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
}
rotationIdentity.invert = rotationIdentity;
function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
: rotationLambda(deltaLambda))
: (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
: rotationIdentity);
}
function forwardRotationLambda(deltaLambda) {
return function(lambda, phi) {
return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
};
}
function rotationLambda(deltaLambda) {
var rotation = forwardRotationLambda(deltaLambda);
rotation.invert = forwardRotationLambda(-deltaLambda);
return rotation;
}
function rotationPhiGamma(deltaPhi, deltaGamma) {
var cosDeltaPhi = cos$1(deltaPhi),
sinDeltaPhi = sin$1(deltaPhi),
cosDeltaGamma = cos$1(deltaGamma),
sinDeltaGamma = sin$1(deltaGamma);
function rotation(lambda, phi) {
var cosPhi = cos$1(phi),
x = cos$1(lambda) * cosPhi,
y = sin$1(lambda) * cosPhi,
z = sin$1(phi),
k = z * cosDeltaPhi + x * sinDeltaPhi;
return [
atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
asin(k * cosDeltaGamma + y * sinDeltaGamma)
];
}
rotation.invert = function(lambda, phi) {
var cosPhi = cos$1(phi),
x = cos$1(lambda) * cosPhi,
y = sin$1(lambda) * cosPhi,
z = sin$1(phi),
k = z * cosDeltaGamma - y * sinDeltaGamma;
return [
atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
asin(k * cosDeltaPhi - x * sinDeltaPhi)
];
};
return rotation;
}
var rotation = function(rotate) {
rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
function forward(coordinates) {
coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
}
forward.invert = function(coordinates) {
coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
};
return forward;
};
// Generates a circle centered at [0°, 0°], with a given radius and precision.
function circleStream(stream, radius, delta, direction, t0, t1) {
if (!delta) return;
var cosRadius = cos$1(radius),
sinRadius = sin$1(radius),
step = direction * delta;
if (t0 == null) {
t0 = radius + direction * tau$3;
t1 = radius - step / 2;
} else {
t0 = circleRadius(cosRadius, t0);
t1 = circleRadius(cosRadius, t1);
if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3;
}
for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
stream.point(point[0], point[1]);
}
}
// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
function circleRadius(cosRadius, point) {
point = cartesian(point), point[0] -= cosRadius;
cartesianNormalizeInPlace(point);
var radius = acos(-point[1]);
return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;
}
var geoCircle = function() {
var center = constant$7([0, 0]),
radius = constant$7(90),
precision = constant$7(6),
ring,
rotate,
stream = {point: point};
function point(x, y) {
ring.push(x = rotate(x, y));
x[0] *= degrees$1, x[1] *= degrees$1;
}
function circle() {
var c = center.apply(this, arguments),
r = radius.apply(this, arguments) * radians,
p = precision.apply(this, arguments) * radians;
ring = [];
rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
circleStream(stream, r, p, 1);
c = {type: "Polygon", coordinates: [ring]};
ring = rotate = null;
return c;
}
circle.center = function(_) {
return arguments.length ? (center = typeof _ === "function" ? _ : constant$7([+_[0], +_[1]]), circle) : center;
};
circle.radius = function(_) {
return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), circle) : radius;
};
circle.precision = function(_) {
return arguments.length ? (precision = typeof _ === "function" ? _ : constant$7(+_), circle) : precision;
};
return circle;
};
var clipBuffer = function() {
var lines = [],
line;
return {
point: function(x, y) {
line.push([x, y]);
},
lineStart: function() {
lines.push(line = []);
},
lineEnd: noop$1,
rejoin: function() {
if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
},
result: function() {
var result = lines;
lines = [];
line = null;
return result;
}
};
};
var clipLine = function(a, b, x0, y0, x1, y1) {
var ax = a[0],
ay = a[1],
bx = b[0],
by = b[1],
t0 = 0,
t1 = 1,
dx = bx - ax,
dy = by - ay,
r;
r = x0 - ax;
if (!dx && r > 0) return;
r /= dx;
if (dx < 0) {
if (r < t0) return;
if (r < t1) t1 = r;
} else if (dx > 0) {
if (r > t1) return;
if (r > t0) t0 = r;
}
r = x1 - ax;
if (!dx && r < 0) return;
r /= dx;
if (dx < 0) {
if (r > t1) return;
if (r > t0) t0 = r;
} else if (dx > 0) {
if (r < t0) return;
if (r < t1) t1 = r;
}
r = y0 - ay;
if (!dy && r > 0) return;
r /= dy;
if (dy < 0) {
if (r < t0) return;
if (r < t1) t1 = r;
} else if (dy > 0) {
if (r > t1) return;
if (r > t0) t0 = r;
}
r = y1 - ay;
if (!dy && r < 0) return;
r /= dy;
if (dy < 0) {
if (r > t1) return;
if (r > t0) t0 = r;
} else if (dy > 0) {
if (r < t0) return;
if (r < t1) t1 = r;
}
if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
return true;
};
var pointEqual = function(a, b) {
return abs(a[0] - b[0]) < epsilon$2 && abs(a[1] - b[1]) < epsilon$2;
};
function Intersection(point, points, other, entry) {
this.x = point;
this.z = points;
this.o = other; // another intersection
this.e = entry; // is an entry?
this.v = false; // visited
this.n = this.p = null; // next & previous
}
// A generalized polygon clipping algorithm: given a polygon that has been cut
// into its visible line segments, and rejoins the segments by interpolating
// along the clip edge.
var clipPolygon = function(segments, compareIntersection, startInside, interpolate, stream) {
var subject = [],
clip = [],
i,
n;
segments.forEach(function(segment) {
if ((n = segment.length - 1) <= 0) return;
var n, p0 = segment[0], p1 = segment[n], x;
// If the first and last points of a segment are coincident, then treat as a
// closed ring. TODO if all rings are closed, then the winding order of the
// exterior ring should be checked.
if (pointEqual(p0, p1)) {
stream.lineStart();
for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
stream.lineEnd();
return;
}
subject.push(x = new Intersection(p0, segment, null, true));
clip.push(x.o = new Intersection(p0, null, x, false));
subject.push(x = new Intersection(p1, segment, null, false));
clip.push(x.o = new Intersection(p1, null, x, true));
});
if (!subject.length) return;
clip.sort(compareIntersection);
link$1(subject);
link$1(clip);
for (i = 0, n = clip.length; i < n; ++i) {
clip[i].e = startInside = !startInside;
}
var start = subject[0],
points,
point;
while (1) {
// Find first unvisited intersection.
var current = start,
isSubject = true;
while (current.v) if ((current = current.n) === start) return;
points = current.z;
stream.lineStart();
do {
current.v = current.o.v = true;
if (current.e) {
if (isSubject) {
for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
} else {
interpolate(current.x, current.n.x, 1, stream);
}
current = current.n;
} else {
if (isSubject) {
points = current.p.z;
for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
} else {
interpolate(current.x, current.p.x, -1, stream);
}
current = current.p;
}
current = current.o;
points = current.z;
isSubject = !isSubject;
} while (!current.v);
stream.lineEnd();
}
};
function link$1(array) {
if (!(n = array.length)) return;
var n,
i = 0,
a = array[0],
b;
while (++i < n) {
a.n = b = array[i];
b.p = a;
a = b;
}
a.n = b = array[0];
b.p = a;
}
var clipMax = 1e9;
var clipMin = -clipMax;
// TODO Use d3-polygon’s polygonContains here for the ring check?
// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
function clipExtent(x0, y0, x1, y1) {
function visible(x, y) {
return x0 <= x && x <= x1 && y0 <= y && y <= y1;
}
function interpolate(from, to, direction, stream) {
var a = 0, a1 = 0;
if (from == null
|| (a = corner(from, direction)) !== (a1 = corner(to, direction))
|| comparePoint(from, to) < 0 ^ direction > 0) {
do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
while ((a = (a + direction + 4) % 4) !== a1);
} else {
stream.point(to[0], to[1]);
}
}
function corner(p, direction) {
return abs(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3
: abs(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1
: abs(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0
: direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
}
function compareIntersection(a, b) {
return comparePoint(a.x, b.x);
}
function comparePoint(a, b) {
var ca = corner(a, 1),
cb = corner(b, 1);
return ca !== cb ? ca - cb
: ca === 0 ? b[1] - a[1]
: ca === 1 ? a[0] - b[0]
: ca === 2 ? a[1] - b[1]
: b[0] - a[0];
}
return function(stream) {
var activeStream = stream,
bufferStream = clipBuffer(),
segments,
polygon,
ring,
x__, y__, v__, // first point
x_, y_, v_, // previous point
first,
clean;
var clipStream = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: polygonStart,
polygonEnd: polygonEnd
};
function point(x, y) {
if (visible(x, y)) activeStream.point(x, y);
}
function polygonInside() {
var winding = 0;
for (var i = 0, n = polygon.length; i < n; ++i) {
for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
}
}
return winding;
}
// Buffer geometry within a polygon and then clip it en masse.
function polygonStart() {
activeStream = bufferStream, segments = [], polygon = [], clean = true;
}
function polygonEnd() {
var startInside = polygonInside(),
cleanInside = clean && startInside,
visible = (segments = merge(segments)).length;
if (cleanInside || visible) {
stream.polygonStart();
if (cleanInside) {
stream.lineStart();
interpolate(null, null, 1, stream);
stream.lineEnd();
}
if (visible) {
clipPolygon(segments, compareIntersection, startInside, interpolate, stream);
}
stream.polygonEnd();
}
activeStream = stream, segments = polygon = ring = null;
}
function lineStart() {
clipStream.point = linePoint;
if (polygon) polygon.push(ring = []);
first = true;
v_ = false;
x_ = y_ = NaN;
}
// TODO rather than special-case polygons, simply handle them separately.
// Ideally, coincident intersection points should be jittered to avoid
// clipping issues.
function lineEnd() {
if (segments) {
linePoint(x__, y__);
if (v__ && v_) bufferStream.rejoin();
segments.push(bufferStream.result());
}
clipStream.point = point;
if (v_) activeStream.lineEnd();
}
function linePoint(x, y) {
var v = visible(x, y);
if (polygon) ring.push([x, y]);
if (first) {
x__ = x, y__ = y, v__ = v;
first = false;
if (v) {
activeStream.lineStart();
activeStream.point(x, y);
}
} else {
if (v && v_) activeStream.point(x, y);
else {
var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
if (clipLine(a, b, x0, y0, x1, y1)) {
if (!v_) {
activeStream.lineStart();
activeStream.point(a[0], a[1]);
}
activeStream.point(b[0], b[1]);
if (!v) activeStream.lineEnd();
clean = false;
} else if (v) {
activeStream.lineStart();
activeStream.point(x, y);
clean = false;
}
}
}
x_ = x, y_ = y, v_ = v;
}
return clipStream;
};
}
var extent$1 = function() {
var x0 = 0,
y0 = 0,
x1 = 960,
y1 = 500,
cache,
cacheStream,
clip;
return clip = {
stream: function(stream) {
return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);
},
extent: function(_) {
return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
}
};
};
var sum$1 = adder();
var polygonContains = function(polygon, point) {
var lambda = point[0],
phi = point[1],
normal = [sin$1(lambda), -cos$1(lambda), 0],
angle = 0,
winding = 0;
sum$1.reset();
for (var i = 0, n = polygon.length; i < n; ++i) {
if (!(m = (ring = polygon[i]).length)) continue;
var ring,
m,
point0 = ring[m - 1],
lambda0 = point0[0],
phi0 = point0[1] / 2 + quarterPi,
sinPhi0 = sin$1(phi0),
cosPhi0 = cos$1(phi0);
for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
var point1 = ring[j],
lambda1 = point1[0],
phi1 = point1[1] / 2 + quarterPi,
sinPhi1 = sin$1(phi1),
cosPhi1 = cos$1(phi1),
delta = lambda1 - lambda0,
sign$$1 = delta >= 0 ? 1 : -1,
absDelta = sign$$1 * delta,
antimeridian = absDelta > pi$3,
k = sinPhi0 * sinPhi1;
sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
angle += antimeridian ? delta + sign$$1 * tau$3 : delta;
// Are the longitudes either side of the point’s meridian (lambda),
// and are the latitudes smaller than the parallel (phi)?
if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
var arc = cartesianCross(cartesian(point0), cartesian(point1));
cartesianNormalizeInPlace(arc);
var intersection = cartesianCross(normal, arc);
cartesianNormalizeInPlace(intersection);
var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
winding += antimeridian ^ delta >= 0 ? 1 : -1;
}
}
}
}
// First, determine whether the South pole is inside or outside:
//
// It is inside if:
// * the polygon winds around it in a clockwise direction.
// * the polygon does not (cumulatively) wind around it, but has a negative
// (counter-clockwise) area.
//
// Second, count the (signed) number of times a segment crosses a lambda
// from the point to the South pole. If it is zero, then the point is the
// same side as the South pole.
return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
};
var lengthSum = adder();
var lambda0$2;
var sinPhi0$1;
var cosPhi0$1;
var lengthStream = {
sphere: noop$1,
point: noop$1,
lineStart: lengthLineStart,
lineEnd: noop$1,
polygonStart: noop$1,
polygonEnd: noop$1
};
function lengthLineStart() {
lengthStream.point = lengthPointFirst;
lengthStream.lineEnd = lengthLineEnd;
}
function lengthLineEnd() {
lengthStream.point = lengthStream.lineEnd = noop$1;
}
function lengthPointFirst(lambda, phi) {
lambda *= radians, phi *= radians;
lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
lengthStream.point = lengthPoint;
}
function lengthPoint(lambda, phi) {
lambda *= radians, phi *= radians;
var sinPhi = sin$1(phi),
cosPhi = cos$1(phi),
delta = abs(lambda - lambda0$2),
cosDelta = cos$1(delta),
sinDelta = sin$1(delta),
x = cosPhi * sinDelta,
y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
lengthSum.add(atan2(sqrt(x * x + y * y), z));
lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
}
var length$1 = function(object) {
lengthSum.reset();
geoStream(object, lengthStream);
return +lengthSum;
};
var coordinates = [null, null];
var object$1 = {type: "LineString", coordinates: coordinates};
var distance = function(a, b) {
coordinates[0] = a;
coordinates[1] = b;
return length$1(object$1);
};
var containsObjectType = {
Feature: function(object, point) {
return containsGeometry(object.geometry, point);
},
FeatureCollection: function(object, point) {
var features = object.features, i = -1, n = features.length;
while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;
return false;
}
};
var containsGeometryType = {
Sphere: function() {
return true;
},
Point: function(object, point) {
return containsPoint(object.coordinates, point);
},
MultiPoint: function(object, point) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) if (containsPoint(coordinates[i], point)) return true;
return false;
},
LineString: function(object, point) {
return containsLine(object.coordinates, point);
},
MultiLineString: function(object, point) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) if (containsLine(coordinates[i], point)) return true;
return false;
},
Polygon: function(object, point) {
return containsPolygon(object.coordinates, point);
},
MultiPolygon: function(object, point) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) if (containsPolygon(coordinates[i], point)) return true;
return false;
},
GeometryCollection: function(object, point) {
var geometries = object.geometries, i = -1, n = geometries.length;
while (++i < n) if (containsGeometry(geometries[i], point)) return true;
return false;
}
};
function containsGeometry(geometry, point) {
return geometry && containsGeometryType.hasOwnProperty(geometry.type)
? containsGeometryType[geometry.type](geometry, point)
: false;
}
function containsPoint(coordinates, point) {
return distance(coordinates, point) === 0;
}
function containsLine(coordinates, point) {
var ab = distance(coordinates[0], coordinates[1]),
ao = distance(coordinates[0], point),
ob = distance(point, coordinates[1]);
return ao + ob <= ab + epsilon$2;
}
function containsPolygon(coordinates, point) {
return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
}
function ringRadians(ring) {
return ring = ring.map(pointRadians), ring.pop(), ring;
}
function pointRadians(point) {
return [point[0] * radians, point[1] * radians];
}
var contains = function(object, point) {
return (object && containsObjectType.hasOwnProperty(object.type)
? containsObjectType[object.type]
: containsGeometry)(object, point);
};
function graticuleX(y0, y1, dy) {
var y = range(y0, y1 - epsilon$2, dy).concat(y1);
return function(x) { return y.map(function(y) { return [x, y]; }); };
}
function graticuleY(x0, x1, dx) {
var x = range(x0, x1 - epsilon$2, dx).concat(x1);
return function(y) { return x.map(function(x) { return [x, y]; }); };
}
function graticule() {
var x1, x0, X1, X0,
y1, y0, Y1, Y0,
dx = 10, dy = dx, DX = 90, DY = 360,
x, y, X, Y,
precision = 2.5;
function graticule() {
return {type: "MultiLineString", coordinates: lines()};
}
function lines() {
return range(ceil(X0 / DX) * DX, X1, DX).map(X)
.concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
.concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$2; }).map(x))
.concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$2; }).map(y));
}
graticule.lines = function() {
return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
};
graticule.outline = function() {
return {
type: "Polygon",
coordinates: [
X(X0).concat(
Y(Y1).slice(1),
X(X1).reverse().slice(1),
Y(Y0).reverse().slice(1))
]
};
};
graticule.extent = function(_) {
if (!arguments.length) return graticule.extentMinor();
return graticule.extentMajor(_).extentMinor(_);
};
graticule.extentMajor = function(_) {
if (!arguments.length) return [[X0, Y0], [X1, Y1]];
X0 = +_[0][0], X1 = +_[1][0];
Y0 = +_[0][1], Y1 = +_[1][1];
if (X0 > X1) _ = X0, X0 = X1, X1 = _;
if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
return graticule.precision(precision);
};
graticule.extentMinor = function(_) {
if (!arguments.length) return [[x0, y0], [x1, y1]];
x0 = +_[0][0], x1 = +_[1][0];
y0 = +_[0][1], y1 = +_[1][1];
if (x0 > x1) _ = x0, x0 = x1, x1 = _;
if (y0 > y1) _ = y0, y0 = y1, y1 = _;
return graticule.precision(precision);
};
graticule.step = function(_) {
if (!arguments.length) return graticule.stepMinor();
return graticule.stepMajor(_).stepMinor(_);
};
graticule.stepMajor = function(_) {
if (!arguments.length) return [DX, DY];
DX = +_[0], DY = +_[1];
return graticule;
};
graticule.stepMinor = function(_) {
if (!arguments.length) return [dx, dy];
dx = +_[0], dy = +_[1];
return graticule;
};
graticule.precision = function(_) {
if (!arguments.length) return precision;
precision = +_;
x = graticuleX(y0, y1, 90);
y = graticuleY(x0, x1, precision);
X = graticuleX(Y0, Y1, 90);
Y = graticuleY(X0, X1, precision);
return graticule;
};
return graticule
.extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])
.extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);
}
function graticule10() {
return graticule()();
}
var interpolate$1 = function(a, b) {
var x0 = a[0] * radians,
y0 = a[1] * radians,
x1 = b[0] * radians,
y1 = b[1] * radians,
cy0 = cos$1(y0),
sy0 = sin$1(y0),
cy1 = cos$1(y1),
sy1 = sin$1(y1),
kx0 = cy0 * cos$1(x0),
ky0 = cy0 * sin$1(x0),
kx1 = cy1 * cos$1(x1),
ky1 = cy1 * sin$1(x1),
d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
k = sin$1(d);
var interpolate = d ? function(t) {
var B = sin$1(t *= d) / k,
A = sin$1(d - t) / k,
x = A * kx0 + B * kx1,
y = A * ky0 + B * ky1,
z = A * sy0 + B * sy1;
return [
atan2(y, x) * degrees$1,
atan2(z, sqrt(x * x + y * y)) * degrees$1
];
} : function() {
return [x0 * degrees$1, y0 * degrees$1];
};
interpolate.distance = d;
return interpolate;
};
var identity$4 = function(x) {
return x;
};
var areaSum$1 = adder();
var areaRingSum$1 = adder();
var x00;
var y00;
var x0$1;
var y0$1;
var areaStream$1 = {
point: noop$1,
lineStart: noop$1,
lineEnd: noop$1,
polygonStart: function() {
areaStream$1.lineStart = areaRingStart$1;
areaStream$1.lineEnd = areaRingEnd$1;
},
polygonEnd: function() {
areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$1;
areaSum$1.add(abs(areaRingSum$1));
areaRingSum$1.reset();
},
result: function() {
var area = areaSum$1 / 2;
areaSum$1.reset();
return area;
}
};
function areaRingStart$1() {
areaStream$1.point = areaPointFirst$1;
}
function areaPointFirst$1(x, y) {
areaStream$1.point = areaPoint$1;
x00 = x0$1 = x, y00 = y0$1 = y;
}
function areaPoint$1(x, y) {
areaRingSum$1.add(y0$1 * x - x0$1 * y);
x0$1 = x, y0$1 = y;
}
function areaRingEnd$1() {
areaPoint$1(x00, y00);
}
var x0$2 = Infinity;
var y0$2 = x0$2;
var x1 = -x0$2;
var y1 = x1;
var boundsStream$1 = {
point: boundsPoint$1,
lineStart: noop$1,
lineEnd: noop$1,
polygonStart: noop$1,
polygonEnd: noop$1,
result: function() {
var bounds = [[x0$2, y0$2], [x1, y1]];
x1 = y1 = -(y0$2 = x0$2 = Infinity);
return bounds;
}
};
function boundsPoint$1(x, y) {
if (x < x0$2) x0$2 = x;
if (x > x1) x1 = x;
if (y < y0$2) y0$2 = y;
if (y > y1) y1 = y;
}
// TODO Enforce positive area for exterior, negative area for interior?
var X0$1 = 0;
var Y0$1 = 0;
var Z0$1 = 0;
var X1$1 = 0;
var Y1$1 = 0;
var Z1$1 = 0;
var X2$1 = 0;
var Y2$1 = 0;
var Z2$1 = 0;
var x00$1;
var y00$1;
var x0$3;
var y0$3;
var centroidStream$1 = {
point: centroidPoint$1,
lineStart: centroidLineStart$1,
lineEnd: centroidLineEnd$1,
polygonStart: function() {
centroidStream$1.lineStart = centroidRingStart$1;
centroidStream$1.lineEnd = centroidRingEnd$1;
},
polygonEnd: function() {
centroidStream$1.point = centroidPoint$1;
centroidStream$1.lineStart = centroidLineStart$1;
centroidStream$1.lineEnd = centroidLineEnd$1;
},
result: function() {
var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
: Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
: Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
: [NaN, NaN];
X0$1 = Y0$1 = Z0$1 =
X1$1 = Y1$1 = Z1$1 =
X2$1 = Y2$1 = Z2$1 = 0;
return centroid;
}
};
function centroidPoint$1(x, y) {
X0$1 += x;
Y0$1 += y;
++Z0$1;
}
function centroidLineStart$1() {
centroidStream$1.point = centroidPointFirstLine;
}
function centroidPointFirstLine(x, y) {
centroidStream$1.point = centroidPointLine;
centroidPoint$1(x0$3 = x, y0$3 = y);
}
function centroidPointLine(x, y) {
var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);
X1$1 += z * (x0$3 + x) / 2;
Y1$1 += z * (y0$3 + y) / 2;
Z1$1 += z;
centroidPoint$1(x0$3 = x, y0$3 = y);
}
function centroidLineEnd$1() {
centroidStream$1.point = centroidPoint$1;
}
function centroidRingStart$1() {
centroidStream$1.point = centroidPointFirstRing;
}
function centroidRingEnd$1() {
centroidPointRing(x00$1, y00$1);
}
function centroidPointFirstRing(x, y) {
centroidStream$1.point = centroidPointRing;
centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
}
function centroidPointRing(x, y) {
var dx = x - x0$3,
dy = y - y0$3,
z = sqrt(dx * dx + dy * dy);
X1$1 += z * (x0$3 + x) / 2;
Y1$1 += z * (y0$3 + y) / 2;
Z1$1 += z;
z = y0$3 * x - x0$3 * y;
X2$1 += z * (x0$3 + x);
Y2$1 += z * (y0$3 + y);
Z2$1 += z * 3;
centroidPoint$1(x0$3 = x, y0$3 = y);
}
function PathContext(context) {
this._context = context;
}
PathContext.prototype = {
_radius: 4.5,
pointRadius: function(_) {
return this._radius = _, this;
},
polygonStart: function() {
this._line = 0;
},
polygonEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._point = 0;
},
lineEnd: function() {
if (this._line === 0) this._context.closePath();
this._point = NaN;
},
point: function(x, y) {
switch (this._point) {
case 0: {
this._context.moveTo(x, y);
this._point = 1;
break;
}
case 1: {
this._context.lineTo(x, y);
break;
}
default: {
this._context.moveTo(x + this._radius, y);
this._context.arc(x, y, this._radius, 0, tau$3);
break;
}
}
},
result: noop$1
};
var lengthSum$1 = adder();
var lengthRing;
var x00$2;
var y00$2;
var x0$4;
var y0$4;
var lengthStream$1 = {
point: noop$1,
lineStart: function() {
lengthStream$1.point = lengthPointFirst$1;
},
lineEnd: function() {
if (lengthRing) lengthPoint$1(x00$2, y00$2);
lengthStream$1.point = noop$1;
},
polygonStart: function() {
lengthRing = true;
},
polygonEnd: function() {
lengthRing = null;
},
result: function() {
var length = +lengthSum$1;
lengthSum$1.reset();
return length;
}
};
function lengthPointFirst$1(x, y) {
lengthStream$1.point = lengthPoint$1;
x00$2 = x0$4 = x, y00$2 = y0$4 = y;
}
function lengthPoint$1(x, y) {
x0$4 -= x, y0$4 -= y;
lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
x0$4 = x, y0$4 = y;
}
function PathString() {
this._string = [];
}
PathString.prototype = {
_circle: circle(4.5),
pointRadius: function(_) {
return this._circle = circle(_), this;
},
polygonStart: function() {
this._line = 0;
},
polygonEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._point = 0;
},
lineEnd: function() {
if (this._line === 0) this._string.push("Z");
this._point = NaN;
},
point: function(x, y) {
switch (this._point) {
case 0: {
this._string.push("M", x, ",", y);
this._point = 1;
break;
}
case 1: {
this._string.push("L", x, ",", y);
break;
}
default: {
this._string.push("M", x, ",", y, this._circle);
break;
}
}
},
result: function() {
if (this._string.length) {
var result = this._string.join("");
this._string = [];
return result;
}
}
};
function circle(radius) {
return "m0," + radius
+ "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
+ "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
+ "z";
}
var index$1 = function(projection, context) {
var pointRadius = 4.5,
projectionStream,
contextStream;
function path(object) {
if (object) {
if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
geoStream(object, projectionStream(contextStream));
}
return contextStream.result();
}
path.area = function(object) {
geoStream(object, projectionStream(areaStream$1));
return areaStream$1.result();
};
path.measure = function(object) {
geoStream(object, projectionStream(lengthStream$1));
return lengthStream$1.result();
};
path.bounds = function(object) {
geoStream(object, projectionStream(boundsStream$1));
return boundsStream$1.result();
};
path.centroid = function(object) {
geoStream(object, projectionStream(centroidStream$1));
return centroidStream$1.result();
};
path.projection = function(_) {
return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;
};
path.context = function(_) {
if (!arguments.length) return context;
contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
return path;
};
path.pointRadius = function(_) {
if (!arguments.length) return pointRadius;
pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
return path;
};
return path.projection(projection).context(context);
};
var clip = function(pointVisible, clipLine, interpolate, start) {
return function(rotate, sink) {
var line = clipLine(sink),
rotatedStart = rotate.invert(start[0], start[1]),
ringBuffer = clipBuffer(),
ringSink = clipLine(ringBuffer),
polygonStarted = false,
polygon,
segments,
ring;
var clip = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: function() {
clip.point = pointRing;
clip.lineStart = ringStart;
clip.lineEnd = ringEnd;
segments = [];
polygon = [];
},
polygonEnd: function() {
clip.point = point;
clip.lineStart = lineStart;
clip.lineEnd = lineEnd;
segments = merge(segments);
var startInside = polygonContains(polygon, rotatedStart);
if (segments.length) {
if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
clipPolygon(segments, compareIntersection, startInside, interpolate, sink);
} else if (startInside) {
if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
sink.lineStart();
interpolate(null, null, 1, sink);
sink.lineEnd();
}
if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
segments = polygon = null;
},
sphere: function() {
sink.polygonStart();
sink.lineStart();
interpolate(null, null, 1, sink);
sink.lineEnd();
sink.polygonEnd();
}
};
function point(lambda, phi) {
var point = rotate(lambda, phi);
if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);
}
function pointLine(lambda, phi) {
var point = rotate(lambda, phi);
line.point(point[0], point[1]);
}
function lineStart() {
clip.point = pointLine;
line.lineStart();
}
function lineEnd() {
clip.point = point;
line.lineEnd();
}
function pointRing(lambda, phi) {
ring.push([lambda, phi]);
var point = rotate(lambda, phi);
ringSink.point(point[0], point[1]);
}
function ringStart() {
ringSink.lineStart();
ring = [];
}
function ringEnd() {
pointRing(ring[0][0], ring[0][1]);
ringSink.lineEnd();
var clean = ringSink.clean(),
ringSegments = ringBuffer.result(),
i, n = ringSegments.length, m,
segment,
point;
ring.pop();
polygon.push(ring);
ring = null;
if (!n) return;
// No intersections.
if (clean & 1) {
segment = ringSegments[0];
if ((m = segment.length - 1) > 0) {
if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
sink.lineStart();
for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
sink.lineEnd();
}
return;
}
// Rejoin connected segments.
// TODO reuse ringBuffer.rejoin()?
if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
segments.push(ringSegments.filter(validSegment));
}
return clip;
};
};
function validSegment(segment) {
return segment.length > 1;
}
// Intersections are sorted along the clip edge. For both antimeridian cutting
// and circle clipping, the same comparison is used.
function compareIntersection(a, b) {
return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])
- ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);
}
var clipAntimeridian = clip(
function() { return true; },
clipAntimeridianLine,
clipAntimeridianInterpolate,
[-pi$3, -halfPi$2]
);
// Takes a line and cuts into visible segments. Return values: 0 - there were
// intersections or the line was empty; 1 - no intersections; 2 - there were
// intersections, and the first and last segments should be rejoined.
function clipAntimeridianLine(stream) {
var lambda0 = NaN,
phi0 = NaN,
sign0 = NaN,
clean; // no intersections
return {
lineStart: function() {
stream.lineStart();
clean = 1;
},
point: function(lambda1, phi1) {
var sign1 = lambda1 > 0 ? pi$3 : -pi$3,
delta = abs(lambda1 - lambda0);
if (abs(delta - pi$3) < epsilon$2) { // line crosses a pole
stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);
stream.point(sign0, phi0);
stream.lineEnd();
stream.lineStart();
stream.point(sign1, phi0);
stream.point(lambda1, phi0);
clean = 0;
} else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian
if (abs(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies
if (abs(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2;
phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
stream.point(sign0, phi0);
stream.lineEnd();
stream.lineStart();
stream.point(sign1, phi0);
clean = 0;
}
stream.point(lambda0 = lambda1, phi0 = phi1);
sign0 = sign1;
},
lineEnd: function() {
stream.lineEnd();
lambda0 = phi0 = NaN;
},
clean: function() {
return 2 - clean; // if intersections, rejoin first and last segments
}
};
}
function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
var cosPhi0,
cosPhi1,
sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
return abs(sinLambda0Lambda1) > epsilon$2
? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
- sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
/ (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
: (phi0 + phi1) / 2;
}
function clipAntimeridianInterpolate(from, to, direction, stream) {
var phi;
if (from == null) {
phi = direction * halfPi$2;
stream.point(-pi$3, phi);
stream.point(0, phi);
stream.point(pi$3, phi);
stream.point(pi$3, 0);
stream.point(pi$3, -phi);
stream.point(0, -phi);
stream.point(-pi$3, -phi);
stream.point(-pi$3, 0);
stream.point(-pi$3, phi);
} else if (abs(from[0] - to[0]) > epsilon$2) {
var lambda = from[0] < to[0] ? pi$3 : -pi$3;
phi = direction * lambda / 2;
stream.point(-lambda, phi);
stream.point(0, phi);
stream.point(lambda, phi);
} else {
stream.point(to[0], to[1]);
}
}
var clipCircle = function(radius, delta) {
var cr = cos$1(radius),
smallRadius = cr > 0,
notHemisphere = abs(cr) > epsilon$2; // TODO optimise for this common case
function interpolate(from, to, direction, stream) {
circleStream(stream, radius, delta, direction, from, to);
}
function visible(lambda, phi) {
return cos$1(lambda) * cos$1(phi) > cr;
}
// Takes a line and cuts into visible segments. Return values used for polygon
// clipping: 0 - there were intersections or the line was empty; 1 - no
// intersections 2 - there were intersections, and the first and last segments
// should be rejoined.
function clipLine(stream) {
var point0, // previous point
c0, // code for previous point
v0, // visibility of previous point
v00, // visibility of first point
clean; // no intersections
return {
lineStart: function() {
v00 = v0 = false;
clean = 1;
},
point: function(lambda, phi) {
var point1 = [lambda, phi],
point2,
v = visible(lambda, phi),
c = smallRadius
? v ? 0 : code(lambda, phi)
: v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;
if (!point0 && (v00 = v0 = v)) stream.lineStart();
// Handle degeneracies.
// TODO ignore if not clipping polygons.
if (v !== v0) {
point2 = intersect(point0, point1);
if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
point1[0] += epsilon$2;
point1[1] += epsilon$2;
v = visible(point1[0], point1[1]);
}
}
if (v !== v0) {
clean = 0;
if (v) {
// outside going in
stream.lineStart();
point2 = intersect(point1, point0);
stream.point(point2[0], point2[1]);
} else {
// inside going out
point2 = intersect(point0, point1);
stream.point(point2[0], point2[1]);
stream.lineEnd();
}
point0 = point2;
} else if (notHemisphere && point0 && smallRadius ^ v) {
var t;
// If the codes for two points are different, or are both zero,
// and there this segment intersects with the small circle.
if (!(c & c0) && (t = intersect(point1, point0, true))) {
clean = 0;
if (smallRadius) {
stream.lineStart();
stream.point(t[0][0], t[0][1]);
stream.point(t[1][0], t[1][1]);
stream.lineEnd();
} else {
stream.point(t[1][0], t[1][1]);
stream.lineEnd();
stream.lineStart();
stream.point(t[0][0], t[0][1]);
}
}
}
if (v && (!point0 || !pointEqual(point0, point1))) {
stream.point(point1[0], point1[1]);
}
point0 = point1, v0 = v, c0 = c;
},
lineEnd: function() {
if (v0) stream.lineEnd();
point0 = null;
},
// Rejoin first and last segments if there were intersections and the first
// and last points were visible.
clean: function() {
return clean | ((v00 && v0) << 1);
}
};
}
// Intersects the great circle between a and b with the clip circle.
function intersect(a, b, two) {
var pa = cartesian(a),
pb = cartesian(b);
// We have two planes, n1.p = d1 and n2.p = d2.
// Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
var n1 = [1, 0, 0], // normal
n2 = cartesianCross(pa, pb),
n2n2 = cartesianDot(n2, n2),
n1n2 = n2[0], // cartesianDot(n1, n2),
determinant = n2n2 - n1n2 * n1n2;
// Two polar points.
if (!determinant) return !two && a;
var c1 = cr * n2n2 / determinant,
c2 = -cr * n1n2 / determinant,
n1xn2 = cartesianCross(n1, n2),
A = cartesianScale(n1, c1),
B = cartesianScale(n2, c2);
cartesianAddInPlace(A, B);
// Solve |p(t)|^2 = 1.
var u = n1xn2,
w = cartesianDot(A, u),
uu = cartesianDot(u, u),
t2 = w * w - uu * (cartesianDot(A, A) - 1);
if (t2 < 0) return;
var t = sqrt(t2),
q = cartesianScale(u, (-w - t) / uu);
cartesianAddInPlace(q, A);
q = spherical(q);
if (!two) return q;
// Two intersection points.
var lambda0 = a[0],
lambda1 = b[0],
phi0 = a[1],
phi1 = b[1],
z;
if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
var delta = lambda1 - lambda0,
polar = abs(delta - pi$3) < epsilon$2,
meridian = polar || delta < epsilon$2;
if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
// Check that the first point is between a and b.
if (meridian
? polar
? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)
: phi0 <= q[1] && q[1] <= phi1
: delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
var q1 = cartesianScale(u, (-w + t) / uu);
cartesianAddInPlace(q1, A);
return [q, spherical(q1)];
}
}
// Generates a 4-bit vector representing the location of a point relative to
// the small circle's bounding box.
function code(lambda, phi) {
var r = smallRadius ? radius : pi$3 - radius,
code = 0;
if (lambda < -r) code |= 1; // left
else if (lambda > r) code |= 2; // right
if (phi < -r) code |= 4; // below
else if (phi > r) code |= 8; // above
return code;
}
return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);
};
var transform = function(methods) {
return {
stream: transformer(methods)
};
};
function transformer(methods) {
return function(stream) {
var s = new TransformStream;
for (var key in methods) s[key] = methods[key];
s.stream = stream;
return s;
};
}
function TransformStream() {}
TransformStream.prototype = {
constructor: TransformStream,
point: function(x, y) { this.stream.point(x, y); },
sphere: function() { this.stream.sphere(); },
lineStart: function() { this.stream.lineStart(); },
lineEnd: function() { this.stream.lineEnd(); },
polygonStart: function() { this.stream.polygonStart(); },
polygonEnd: function() { this.stream.polygonEnd(); }
};
function fitExtent(projection, extent, object) {
var w = extent[1][0] - extent[0][0],
h = extent[1][1] - extent[0][1],
clip = projection.clipExtent && projection.clipExtent();
projection
.scale(150)
.translate([0, 0]);
if (clip != null) projection.clipExtent(null);
geoStream(object, projection.stream(boundsStream$1));
var b = boundsStream$1.result(),
k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
if (clip != null) projection.clipExtent(clip);
return projection
.scale(k * 150)
.translate([x, y]);
}
function fitSize(projection, size, object) {
return fitExtent(projection, [[0, 0], size], object);
}
var maxDepth = 16;
var cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
var resample = function(project, delta2) {
return +delta2 ? resample$1(project, delta2) : resampleNone(project);
};
function resampleNone(project) {
return transformer({
point: function(x, y) {
x = project(x, y);
this.stream.point(x[0], x[1]);
}
});
}
function resample$1(project, delta2) {
function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
var dx = x1 - x0,
dy = y1 - y0,
d2 = dx * dx + dy * dy;
if (d2 > 4 * delta2 && depth--) {
var a = a0 + a1,
b = b0 + b1,
c = c0 + c1,
m = sqrt(a * a + b * b + c * c),
phi2 = asin(c /= m),
lambda2 = abs(abs(c) - 1) < epsilon$2 || abs(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),
p = project(lambda2, phi2),
x2 = p[0],
y2 = p[1],
dx2 = x2 - x0,
dy2 = y2 - y0,
dz = dy * dx2 - dx * dy2;
if (dz * dz / d2 > delta2 // perpendicular projected distance
|| abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
|| a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
stream.point(x2, y2);
resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
}
}
}
return function(stream) {
var lambda00, x00, y00, a00, b00, c00, // first point
lambda0, x0, y0, a0, b0, c0; // previous point
var resampleStream = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
};
function point(x, y) {
x = project(x, y);
stream.point(x[0], x[1]);
}
function lineStart() {
x0 = NaN;
resampleStream.point = linePoint;
stream.lineStart();
}
function linePoint(lambda, phi) {
var c = cartesian([lambda, phi]), p = project(lambda, phi);
resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
stream.point(x0, y0);
}
function lineEnd() {
resampleStream.point = point;
stream.lineEnd();
}
function ringStart() {
lineStart();
resampleStream.point = ringPoint;
resampleStream.lineEnd = ringEnd;
}
function ringPoint(lambda, phi) {
linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
resampleStream.point = linePoint;
}
function ringEnd() {
resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
resampleStream.lineEnd = lineEnd;
lineEnd();
}
return resampleStream;
};
}
var transformRadians = transformer({
point: function(x, y) {
this.stream.point(x * radians, y * radians);
}
});
function projection(project) {
return projectionMutator(function() { return project; })();
}
function projectionMutator(projectAt) {
var project,
k = 150, // scale
x = 480, y = 250, // translate
dx, dy, lambda = 0, phi = 0, // center
deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate
theta = null, preclip = clipAntimeridian, // clip angle
x0 = null, y0, x1, y1, postclip = identity$4, // clip extent
delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision
cache,
cacheStream;
function projection(point) {
point = projectRotate(point[0] * radians, point[1] * radians);
return [point[0] * k + dx, dy - point[1] * k];
}
function invert(point) {
point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);
return point && [point[0] * degrees$1, point[1] * degrees$1];
}
function projectTransform(x, y) {
return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];
}
projection.stream = function(stream) {
return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));
};
projection.clipAngle = function(_) {
return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
};
projection.clipExtent = function(_) {
return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
};
projection.scale = function(_) {
return arguments.length ? (k = +_, recenter()) : k;
};
projection.translate = function(_) {
return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
};
projection.center = function(_) {
return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
};
projection.rotate = function(_) {
return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
};
projection.precision = function(_) {
return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);
};
projection.fitExtent = function(extent, object) {
return fitExtent(projection, extent, object);
};
projection.fitSize = function(size, object) {
return fitSize(projection, size, object);
};
function recenter() {
projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);
var center = project(lambda, phi);
dx = x - center[0] * k;
dy = y + center[1] * k;
return reset();
}
function reset() {
cache = cacheStream = null;
return projection;
}
return function() {
project = projectAt.apply(this, arguments);
projection.invert = project.invert && invert;
return recenter();
};
}
function conicProjection(projectAt) {
var phi0 = 0,
phi1 = pi$3 / 3,
m = projectionMutator(projectAt),
p = m(phi0, phi1);
p.parallels = function(_) {
return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
};
return p;
}
function cylindricalEqualAreaRaw(phi0) {
var cosPhi0 = cos$1(phi0);
function forward(lambda, phi) {
return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
}
forward.invert = function(x, y) {
return [x / cosPhi0, asin(y * cosPhi0)];
};
return forward;
}
function conicEqualAreaRaw(y0, y1) {
var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
// Are the parallels symmetrical around the Equator?
if (abs(n) < epsilon$2) return cylindricalEqualAreaRaw(y0);
var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
function project(x, y) {
var r = sqrt(c - 2 * n * sin$1(y)) / n;
return [r * sin$1(x *= n), r0 - r * cos$1(x)];
}
project.invert = function(x, y) {
var r0y = r0 - y;
return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
};
return project;
}
var conicEqualArea = function() {
return conicProjection(conicEqualAreaRaw)
.scale(155.424)
.center([0, 33.6442]);
};
var albers = function() {
return conicEqualArea()
.parallels([29.5, 45.5])
.scale(1070)
.translate([480, 250])
.rotate([96, 0])
.center([-0.6, 38.7]);
};
// The projections must have mutually exclusive clip regions on the sphere,
// as this will avoid emitting interleaving lines and polygons.
function multiplex(streams) {
var n = streams.length;
return {
point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
};
}
// A composite projection for the United States, configured by default for
// 960×500. The projection also works quite well at 960×600 if you change the
// scale to 1285 and adjust the translate accordingly. The set of standard
// parallels for each region comes from USGS, which is published here:
// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
var albersUsa = function() {
var cache,
cacheStream,
lower48 = albers(), lower48Point,
alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
point, pointStream = {point: function(x, y) { point = [x, y]; }};
function albersUsa(coordinates) {
var x = coordinates[0], y = coordinates[1];
return point = null,
(lower48Point.point(x, y), point)
|| (alaskaPoint.point(x, y), point)
|| (hawaiiPoint.point(x, y), point);
}
albersUsa.invert = function(coordinates) {
var k = lower48.scale(),
t = lower48.translate(),
x = (coordinates[0] - t[0]) / k,
y = (coordinates[1] - t[1]) / k;
return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
: y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
: lower48).invert(coordinates);
};
albersUsa.stream = function(stream) {
return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
};
albersUsa.precision = function(_) {
if (!arguments.length) return lower48.precision();
lower48.precision(_), alaska.precision(_), hawaii.precision(_);
return reset();
};
albersUsa.scale = function(_) {
if (!arguments.length) return lower48.scale();
lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
return albersUsa.translate(lower48.translate());
};
albersUsa.translate = function(_) {
if (!arguments.length) return lower48.translate();
var k = lower48.scale(), x = +_[0], y = +_[1];
lower48Point = lower48
.translate(_)
.clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
.stream(pointStream);
alaskaPoint = alaska
.translate([x - 0.307 * k, y + 0.201 * k])
.clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
.stream(pointStream);
hawaiiPoint = hawaii
.translate([x - 0.205 * k, y + 0.212 * k])
.clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
.stream(pointStream);
return reset();
};
albersUsa.fitExtent = function(extent, object) {
return fitExtent(albersUsa, extent, object);
};
albersUsa.fitSize = function(size, object) {
return fitSize(albersUsa, size, object);
};
function reset() {
cache = cacheStream = null;
return albersUsa;
}
return albersUsa.scale(1070);
};
function azimuthalRaw(scale) {
return function(x, y) {
var cx = cos$1(x),
cy = cos$1(y),
k = scale(cx * cy);
return [
k * cy * sin$1(x),
k * sin$1(y)
];
}
}
function azimuthalInvert(angle) {
return function(x, y) {
var z = sqrt(x * x + y * y),
c = angle(z),
sc = sin$1(c),
cc = cos$1(c);
return [
atan2(x * sc, z * cc),
asin(z && y * sc / z)
];
}
}
var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
return sqrt(2 / (1 + cxcy));
});
azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
return 2 * asin(z / 2);
});
var azimuthalEqualArea = function() {
return projection(azimuthalEqualAreaRaw)
.scale(124.75)
.clipAngle(180 - 1e-3);
};
var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
return (c = acos(c)) && c / sin$1(c);
});
azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
return z;
});
var azimuthalEquidistant = function() {
return projection(azimuthalEquidistantRaw)
.scale(79.4188)
.clipAngle(180 - 1e-3);
};
function mercatorRaw(lambda, phi) {
return [lambda, log(tan((halfPi$2 + phi) / 2))];
}
mercatorRaw.invert = function(x, y) {
return [x, 2 * atan(exp(y)) - halfPi$2];
};
var mercator = function() {
return mercatorProjection(mercatorRaw)
.scale(961 / tau$3);
};
function mercatorProjection(project) {
var m = projection(project),
center = m.center,
scale = m.scale,
translate = m.translate,
clipExtent = m.clipExtent,
x0 = null, y0, x1, y1; // clip extent
m.scale = function(_) {
return arguments.length ? (scale(_), reclip()) : scale();
};
m.translate = function(_) {
return arguments.length ? (translate(_), reclip()) : translate();
};
m.center = function(_) {
return arguments.length ? (center(_), reclip()) : center();
};
m.clipExtent = function(_) {
return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];
};
function reclip() {
var k = pi$3 * scale(),
t = m(rotation(m.rotate()).invert([0, 0]));
return clipExtent(x0 == null
? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
: [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
}
return reclip();
}
function tany(y) {
return tan((halfPi$2 + y) / 2);
}
function conicConformalRaw(y0, y1) {
var cy0 = cos$1(y0),
n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),
f = cy0 * pow(tany(y0), n) / n;
if (!n) return mercatorRaw;
function project(x, y) {
if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; }
else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; }
var r = f / pow(tany(y), n);
return [r * sin$1(n * x), f - r * cos$1(n * x)];
}
project.invert = function(x, y) {
var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);
return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];
};
return project;
}
var conicConformal = function() {
return conicProjection(conicConformalRaw)
.scale(109.5)
.parallels([30, 30]);
};
function equirectangularRaw(lambda, phi) {
return [lambda, phi];
}
equirectangularRaw.invert = equirectangularRaw;
var geoEquirectangular = function() {
return projection(equirectangularRaw)
.scale(152.63);
};
function conicEquidistantRaw(y0, y1) {
var cy0 = cos$1(y0),
n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
g = cy0 / n + y0;
if (abs(n) < epsilon$2) return equirectangularRaw;
function project(x, y) {
var gy = g - y, nx = n * x;
return [gy * sin$1(nx), g - gy * cos$1(nx)];
}
project.invert = function(x, y) {
var gy = g - y;
return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];
};
return project;
}
var conicEquidistant = function() {
return conicProjection(conicEquidistantRaw)
.scale(131.154)
.center([0, 13.9389]);
};
function gnomonicRaw(x, y) {
var cy = cos$1(y), k = cos$1(x) * cy;
return [cy * sin$1(x) / k, sin$1(y) / k];
}
gnomonicRaw.invert = azimuthalInvert(atan);
var gnomonic = function() {
return projection(gnomonicRaw)
.scale(144.049)
.clipAngle(60);
};
function scaleTranslate(kx, ky, tx, ty) {
return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({
point: function(x, y) {
this.stream.point(x * kx + tx, y * ky + ty);
}
});
}
var identity$5 = function() {
var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
x0 = null, y0, x1, y1, clip = identity$4, // clip extent
cache,
cacheStream,
projection;
function reset() {
cache = cacheStream = null;
return projection;
}
return projection = {
stream: function(stream) {
return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
},
clipExtent: function(_) {
return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
},
scale: function(_) {
return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;
},
translate: function(_) {
return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
},
reflectX: function(_) {
return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
},
reflectY: function(_) {
return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
},
fitExtent: function(extent, object) {
return fitExtent(projection, extent, object);
},
fitSize: function(size, object) {
return fitSize(projection, size, object);
}
};
};
function orthographicRaw(x, y) {
return [cos$1(y) * sin$1(x), sin$1(y)];
}
orthographicRaw.invert = azimuthalInvert(asin);
var geoOrthographic = function() {
return projection(orthographicRaw)
.scale(249.5)
.clipAngle(90 + epsilon$2);
};
function stereographicRaw(x, y) {
var cy = cos$1(y), k = 1 + cos$1(x) * cy;
return [cy * sin$1(x) / k, sin$1(y) / k];
}
stereographicRaw.invert = azimuthalInvert(function(z) {
return 2 * atan(z);
});
var stereographic = function() {
return projection(stereographicRaw)
.scale(250)
.clipAngle(142);
};
function transverseMercatorRaw(lambda, phi) {
return [log(tan((halfPi$2 + phi) / 2)), -lambda];
}
transverseMercatorRaw.invert = function(x, y) {
return [-y, 2 * atan(exp(x)) - halfPi$2];
};
var transverseMercator = function() {
var m = mercatorProjection(transverseMercatorRaw),
center = m.center,
rotate = m.rotate;
m.center = function(_) {
return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
};
m.rotate = function(_) {
return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
};
return rotate([0, 0, 90])
.scale(159.155);
};
function defaultSeparation(a, b) {
return a.parent === b.parent ? 1 : 2;
}
function meanX(children) {
return children.reduce(meanXReduce, 0) / children.length;
}
function meanXReduce(x, c) {
return x + c.x;
}
function maxY(children) {
return 1 + children.reduce(maxYReduce, 0);
}
function maxYReduce(y, c) {
return Math.max(y, c.y);
}
function leafLeft(node) {
var children;
while (children = node.children) node = children[0];
return node;
}
function leafRight(node) {
var children;
while (children = node.children) node = children[children.length - 1];
return node;
}
var cluster = function() {
var separation = defaultSeparation,
dx = 1,
dy = 1,
nodeSize = false;
function cluster(root) {
var previousNode,
x = 0;
// First walk, computing the initial x & y values.
root.eachAfter(function(node) {
var children = node.children;
if (children) {
node.x = meanX(children);
node.y = maxY(children);
} else {
node.x = previousNode ? x += separation(node, previousNode) : 0;
node.y = 0;
previousNode = node;
}
});
var left = leafLeft(root),
right = leafRight(root),
x0 = left.x - separation(left, right) / 2,
x1 = right.x + separation(right, left) / 2;
// Second walk, normalizing x & y to the desired size.
return root.eachAfter(nodeSize ? function(node) {
node.x = (node.x - root.x) * dx;
node.y = (root.y - node.y) * dy;
} : function(node) {
node.x = (node.x - x0) / (x1 - x0) * dx;
node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
});
}
cluster.separation = function(x) {
return arguments.length ? (separation = x, cluster) : separation;
};
cluster.size = function(x) {
return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
};
cluster.nodeSize = function(x) {
return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
};
return cluster;
};
function count(node) {
var sum = 0,
children = node.children,
i = children && children.length;
if (!i) sum = 1;
else while (--i >= 0) sum += children[i].value;
node.value = sum;
}
var node_count = function() {
return this.eachAfter(count);
};
var node_each = function(callback) {
var node = this, current, next = [node], children, i, n;
do {
current = next.reverse(), next = [];
while (node = current.pop()) {
callback(node), children = node.children;
if (children) for (i = 0, n = children.length; i < n; ++i) {
next.push(children[i]);
}
}
} while (next.length);
return this;
};
var node_eachBefore = function(callback) {
var node = this, nodes = [node], children, i;
while (node = nodes.pop()) {
callback(node), children = node.children;
if (children) for (i = children.length - 1; i >= 0; --i) {
nodes.push(children[i]);
}
}
return this;
};
var node_eachAfter = function(callback) {
var node = this, nodes = [node], next = [], children, i, n;
while (node = nodes.pop()) {
next.push(node), children = node.children;
if (children) for (i = 0, n = children.length; i < n; ++i) {
nodes.push(children[i]);
}
}
while (node = next.pop()) {
callback(node);
}
return this;
};
var node_sum = function(value) {
return this.eachAfter(function(node) {
var sum = +value(node.data) || 0,
children = node.children,
i = children && children.length;
while (--i >= 0) sum += children[i].value;
node.value = sum;
});
};
var node_sort = function(compare) {
return this.eachBefore(function(node) {
if (node.children) {
node.children.sort(compare);
}
});
};
var node_path = function(end) {
var start = this,
ancestor = leastCommonAncestor(start, end),
nodes = [start];
while (start !== ancestor) {
start = start.parent;
nodes.push(start);
}
var k = nodes.length;
while (end !== ancestor) {
nodes.splice(k, 0, end);
end = end.parent;
}
return nodes;
};
function leastCommonAncestor(a, b) {
if (a === b) return a;
var aNodes = a.ancestors(),
bNodes = b.ancestors(),
c = null;
a = aNodes.pop();
b = bNodes.pop();
while (a === b) {
c = a;
a = aNodes.pop();
b = bNodes.pop();
}
return c;
}
var node_ancestors = function() {
var node = this, nodes = [node];
while (node = node.parent) {
nodes.push(node);
}
return nodes;
};
var node_descendants = function() {
var nodes = [];
this.each(function(node) {
nodes.push(node);
});
return nodes;
};
var node_leaves = function() {
var leaves = [];
this.eachBefore(function(node) {
if (!node.children) {
leaves.push(node);
}
});
return leaves;
};
var node_links = function() {
var root = this, links = [];
root.each(function(node) {
if (node !== root) { // Don’t include the root’s parent, if any.
links.push({source: node.parent, target: node});
}
});
return links;
};
function hierarchy(data, children) {
var root = new Node(data),
valued = +data.value && (root.value = data.value),
node,
nodes = [root],
child,
childs,
i,
n;
if (children == null) children = defaultChildren;
while (node = nodes.pop()) {
if (valued) node.value = +node.data.value;
if ((childs = children(node.data)) && (n = childs.length)) {
node.children = new Array(n);
for (i = n - 1; i >= 0; --i) {
nodes.push(child = node.children[i] = new Node(childs[i]));
child.parent = node;
child.depth = node.depth + 1;
}
}
}
return root.eachBefore(computeHeight);
}
function node_copy() {
return hierarchy(this).eachBefore(copyData);
}
function defaultChildren(d) {
return d.children;
}
function copyData(node) {
node.data = node.data.data;
}
function computeHeight(node) {
var height = 0;
do node.height = height;
while ((node = node.parent) && (node.height < ++height));
}
function Node(data) {
this.data = data;
this.depth =
this.height = 0;
this.parent = null;
}
Node.prototype = hierarchy.prototype = {
constructor: Node,
count: node_count,
each: node_each,
eachAfter: node_eachAfter,
eachBefore: node_eachBefore,
sum: node_sum,
sort: node_sort,
path: node_path,
ancestors: node_ancestors,
descendants: node_descendants,
leaves: node_leaves,
links: node_links,
copy: node_copy
};
function Node$2(value) {
this._ = value;
this.next = null;
}
var shuffle$1 = function(array) {
var i,
n = (array = array.slice()).length,
head = null,
node = head;
while (n) {
var next = new Node$2(array[n - 1]);
if (node) node = node.next = next;
else node = head = next;
array[i] = array[--n];
}
return {
head: head,
tail: node
};
};
var enclose = function(circles) {
return encloseN(shuffle$1(circles), []);
};
function encloses(a, b) {
var dx = b.x - a.x,
dy = b.y - a.y,
dr = a.r - b.r;
return dr * dr + 1e-6 > dx * dx + dy * dy;
}
// Returns the smallest circle that contains circles L and intersects circles B.
function encloseN(L, B) {
var circle,
l0 = null,
l1 = L.head,
l2,
p1;
switch (B.length) {
case 1: circle = enclose1(B[0]); break;
case 2: circle = enclose2(B[0], B[1]); break;
case 3: circle = enclose3(B[0], B[1], B[2]); break;
}
while (l1) {
p1 = l1._, l2 = l1.next;
if (!circle || !encloses(circle, p1)) {
// Temporarily truncate L before l1.
if (l0) L.tail = l0, l0.next = null;
else L.head = L.tail = null;
B.push(p1);
circle = encloseN(L, B); // Note: reorders L!
B.pop();
// Move l1 to the front of L and reconnect the truncated list L.
if (L.head) l1.next = L.head, L.head = l1;
else l1.next = null, L.head = L.tail = l1;
l0 = L.tail, l0.next = l2;
} else {
l0 = l1;
}
l1 = l2;
}
L.tail = l0;
return circle;
}
function enclose1(a) {
return {
x: a.x,
y: a.y,
r: a.r
};
}
function enclose2(a, b) {
var x1 = a.x, y1 = a.y, r1 = a.r,
x2 = b.x, y2 = b.y, r2 = b.r,
x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
l = Math.sqrt(x21 * x21 + y21 * y21);
return {
x: (x1 + x2 + x21 / l * r21) / 2,
y: (y1 + y2 + y21 / l * r21) / 2,
r: (l + r1 + r2) / 2
};
}
function enclose3(a, b, c) {
var x1 = a.x, y1 = a.y, r1 = a.r,
x2 = b.x, y2 = b.y, r2 = b.r,
x3 = c.x, y3 = c.y, r3 = c.r,
a2 = 2 * (x1 - x2),
b2 = 2 * (y1 - y2),
c2 = 2 * (r2 - r1),
d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,
a3 = 2 * (x1 - x3),
b3 = 2 * (y1 - y3),
c3 = 2 * (r3 - r1),
d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,
ab = a3 * b2 - a2 * b3,
xa = (b2 * d3 - b3 * d2) / ab - x1,
xb = (b3 * c2 - b2 * c3) / ab,
ya = (a3 * d2 - a2 * d3) / ab - y1,
yb = (a2 * c3 - a3 * c2) / ab,
A = xb * xb + yb * yb - 1,
B = 2 * (xa * xb + ya * yb + r1),
C = xa * xa + ya * ya - r1 * r1,
r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);
return {
x: xa + xb * r + x1,
y: ya + yb * r + y1,
r: r
};
}
function place(a, b, c) {
var ax = a.x,
ay = a.y,
da = b.r + c.r,
db = a.r + c.r,
dx = b.x - ax,
dy = b.y - ay,
dc = dx * dx + dy * dy;
if (dc) {
var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),
y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
c.x = ax + x * dx + y * dy;
c.y = ay + x * dy - y * dx;
} else {
c.x = ax + db;
c.y = ay;
}
}
function intersects(a, b) {
var dx = b.x - a.x,
dy = b.y - a.y,
dr = a.r + b.r;
return dr * dr - 1e-6 > dx * dx + dy * dy;
}
function distance2(node, x, y) {
var a = node._,
b = node.next._,
ab = a.r + b.r,
dx = (a.x * b.r + b.x * a.r) / ab - x,
dy = (a.y * b.r + b.y * a.r) / ab - y;
return dx * dx + dy * dy;
}
function Node$1(circle) {
this._ = circle;
this.next = null;
this.previous = null;
}
function packEnclose(circles) {
if (!(n = circles.length)) return 0;
var a, b, c, n;
// Place the first circle.
a = circles[0], a.x = 0, a.y = 0;
if (!(n > 1)) return a.r;
// Place the second circle.
b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
if (!(n > 2)) return a.r + b.r;
// Place the third circle.
place(b, a, c = circles[2]);
// Initialize the weighted centroid.
var aa = a.r * a.r,
ba = b.r * b.r,
ca = c.r * c.r,
oa = aa + ba + ca,
ox = aa * a.x + ba * b.x + ca * c.x,
oy = aa * a.y + ba * b.y + ca * c.y,
cx, cy, i, j, k, sj, sk;
// Initialize the front-chain using the first three circles a, b and c.
a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
a.next = c.previous = b;
b.next = a.previous = c;
c.next = b.previous = a;
// Attempt to place each remaining circle…
pack: for (i = 3; i < n; ++i) {
place(a._, b._, c = circles[i]), c = new Node$1(c);
// Find the closest intersecting circle on the front-chain, if any.
// “Closeness” is determined by linear distance along the front-chain.
// “Ahead” or “behind” is likewise determined by linear distance.
j = b.next, k = a.previous, sj = b._.r, sk = a._.r;
do {
if (sj <= sk) {
if (intersects(j._, c._)) {
b = j, a.next = b, b.previous = a, --i;
continue pack;
}
sj += j._.r, j = j.next;
} else {
if (intersects(k._, c._)) {
a = k, a.next = b, b.previous = a, --i;
continue pack;
}
sk += k._.r, k = k.previous;
}
} while (j !== k.next);
// Success! Insert the new circle c between a and b.
c.previous = a, c.next = b, a.next = b.previous = b = c;
// Update the weighted centroid.
oa += ca = c._.r * c._.r;
ox += ca * c._.x;
oy += ca * c._.y;
// Compute the new closest circle pair to the centroid.
aa = distance2(a, cx = ox / oa, cy = oy / oa);
while ((c = c.next) !== b) {
if ((ca = distance2(c, cx, cy)) < aa) {
a = c, aa = ca;
}
}
b = a.next;
}
// Compute the enclosing circle of the front chain.
a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
// Translate the circles to put the enclosing circle around the origin.
for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
return c.r;
}
var siblings = function(circles) {
packEnclose(circles);
return circles;
};
function optional(f) {
return f == null ? null : required(f);
}
function required(f) {
if (typeof f !== "function") throw new Error;
return f;
}
function constantZero() {
return 0;
}
var constant$8 = function(x) {
return function() {
return x;
};
};
function defaultRadius$1(d) {
return Math.sqrt(d.value);
}
var index$2 = function() {
var radius = null,
dx = 1,
dy = 1,
padding = constantZero;
function pack(root) {
root.x = dx / 2, root.y = dy / 2;
if (radius) {
root.eachBefore(radiusLeaf(radius))
.eachAfter(packChildren(padding, 0.5))
.eachBefore(translateChild(1));
} else {
root.eachBefore(radiusLeaf(defaultRadius$1))
.eachAfter(packChildren(constantZero, 1))
.eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
.eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
}
return root;
}
pack.radius = function(x) {
return arguments.length ? (radius = optional(x), pack) : radius;
};
pack.size = function(x) {
return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
};
pack.padding = function(x) {
return arguments.length ? (padding = typeof x === "function" ? x : constant$8(+x), pack) : padding;
};
return pack;
};
function radiusLeaf(radius) {
return function(node) {
if (!node.children) {
node.r = Math.max(0, +radius(node) || 0);
}
};
}
function packChildren(padding, k) {
return function(node) {
if (children = node.children) {
var children,
i,
n = children.length,
r = padding(node) * k || 0,
e;
if (r) for (i = 0; i < n; ++i) children[i].r += r;
e = packEnclose(children);
if (r) for (i = 0; i < n; ++i) children[i].r -= r;
node.r = e + r;
}
};
}
function translateChild(k) {
return function(node) {
var parent = node.parent;
node.r *= k;
if (parent) {
node.x = parent.x + k * node.x;
node.y = parent.y + k * node.y;
}
};
}
var roundNode = function(node) {
node.x0 = Math.round(node.x0);
node.y0 = Math.round(node.y0);
node.x1 = Math.round(node.x1);
node.y1 = Math.round(node.y1);
};
var treemapDice = function(parent, x0, y0, x1, y1) {
var nodes = parent.children,
node,
i = -1,
n = nodes.length,
k = parent.value && (x1 - x0) / parent.value;
while (++i < n) {
node = nodes[i], node.y0 = y0, node.y1 = y1;
node.x0 = x0, node.x1 = x0 += node.value * k;
}
};
var partition = function() {
var dx = 1,
dy = 1,
padding = 0,
round = false;
function partition(root) {
var n = root.height + 1;
root.x0 =
root.y0 = padding;
root.x1 = dx;
root.y1 = dy / n;
root.eachBefore(positionNode(dy, n));
if (round) root.eachBefore(roundNode);
return root;
}
function positionNode(dy, n) {
return function(node) {
if (node.children) {
treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
}
var x0 = node.x0,
y0 = node.y0,
x1 = node.x1 - padding,
y1 = node.y1 - padding;
if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
node.x0 = x0;
node.y0 = y0;
node.x1 = x1;
node.y1 = y1;
};
}
partition.round = function(x) {
return arguments.length ? (round = !!x, partition) : round;
};
partition.size = function(x) {
return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
};
partition.padding = function(x) {
return arguments.length ? (padding = +x, partition) : padding;
};
return partition;
};
var keyPrefix$1 = "$";
var preroot = {depth: -1};
var ambiguous = {};
function defaultId(d) {
return d.id;
}
function defaultParentId(d) {
return d.parentId;
}
var stratify = function() {
var id = defaultId,
parentId = defaultParentId;
function stratify(data) {
var d,
i,
n = data.length,
root,
parent,
node,
nodes = new Array(n),
nodeId,
nodeKey,
nodeByKey = {};
for (i = 0; i < n; ++i) {
d = data[i], node = nodes[i] = new Node(d);
if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
nodeKey = keyPrefix$1 + (node.id = nodeId);
nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
}
}
for (i = 0; i < n; ++i) {
node = nodes[i], nodeId = parentId(data[i], i, data);
if (nodeId == null || !(nodeId += "")) {
if (root) throw new Error("multiple roots");
root = node;
} else {
parent = nodeByKey[keyPrefix$1 + nodeId];
if (!parent) throw new Error("missing: " + nodeId);
if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
if (parent.children) parent.children.push(node);
else parent.children = [node];
node.parent = parent;
}
}
if (!root) throw new Error("no root");
root.parent = preroot;
root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
root.parent = null;
if (n > 0) throw new Error("cycle");
return root;
}
stratify.id = function(x) {
return arguments.length ? (id = required(x), stratify) : id;
};
stratify.parentId = function(x) {
return arguments.length ? (parentId = required(x), stratify) : parentId;
};
return stratify;
};
function defaultSeparation$1(a, b) {
return a.parent === b.parent ? 1 : 2;
}
// function radialSeparation(a, b) {
// return (a.parent === b.parent ? 1 : 2) / a.depth;
// }
// This function is used to traverse the left contour of a subtree (or
// subforest). It returns the successor of v on this contour. This successor is
// either given by the leftmost child of v or by the thread of v. The function
// returns null if and only if v is on the highest level of its subtree.
function nextLeft(v) {
var children = v.children;
return children ? children[0] : v.t;
}
// This function works analogously to nextLeft.
function nextRight(v) {
var children = v.children;
return children ? children[children.length - 1] : v.t;
}
// Shifts the current subtree rooted at w+. This is done by increasing
// prelim(w+) and mod(w+) by shift.
function moveSubtree(wm, wp, shift) {
var change = shift / (wp.i - wm.i);
wp.c -= change;
wp.s += shift;
wm.c += change;
wp.z += shift;
wp.m += shift;
}
// All other shifts, applied to the smaller subtrees between w- and w+, are
// performed by this function. To prepare the shifts, we have to adjust
// change(w+), shift(w+), and change(w-).
function executeShifts(v) {
var shift = 0,
change = 0,
children = v.children,
i = children.length,
w;
while (--i >= 0) {
w = children[i];
w.z += shift;
w.m += shift;
shift += w.s + (change += w.c);
}
}
// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
// returns the specified (default) ancestor.
function nextAncestor(vim, v, ancestor) {
return vim.a.parent === v.parent ? vim.a : ancestor;
}
function TreeNode(node, i) {
this._ = node;
this.parent = null;
this.children = null;
this.A = null; // default ancestor
this.a = this; // ancestor
this.z = 0; // prelim
this.m = 0; // mod
this.c = 0; // change
this.s = 0; // shift
this.t = null; // thread
this.i = i; // number
}
TreeNode.prototype = Object.create(Node.prototype);
function treeRoot(root) {
var tree = new TreeNode(root, 0),
node,
nodes = [tree],
child,
children,
i,
n;
while (node = nodes.pop()) {
if (children = node._.children) {
node.children = new Array(n = children.length);
for (i = n - 1; i >= 0; --i) {
nodes.push(child = node.children[i] = new TreeNode(children[i], i));
child.parent = node;
}
}
}
(tree.parent = new TreeNode(null, 0)).children = [tree];
return tree;
}
// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
var tree = function() {
var separation = defaultSeparation$1,
dx = 1,
dy = 1,
nodeSize = null;
function tree(root) {
var t = treeRoot(root);
// Compute the layout using Buchheim et al.’s algorithm.
t.eachAfter(firstWalk), t.parent.m = -t.z;
t.eachBefore(secondWalk);
// If a fixed node size is specified, scale x and y.
if (nodeSize) root.eachBefore(sizeNode);
// If a fixed tree size is specified, scale x and y based on the extent.
// Compute the left-most, right-most, and depth-most nodes for extents.
else {
var left = root,
right = root,
bottom = root;
root.eachBefore(function(node) {
if (node.x < left.x) left = node;
if (node.x > right.x) right = node;
if (node.depth > bottom.depth) bottom = node;
});
var s = left === right ? 1 : separation(left, right) / 2,
tx = s - left.x,
kx = dx / (right.x + s + tx),
ky = dy / (bottom.depth || 1);
root.eachBefore(function(node) {
node.x = (node.x + tx) * kx;
node.y = node.depth * ky;
});
}
return root;
}
// Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
// applied recursively to the children of v, as well as the function
// APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
// node v is placed to the midpoint of its outermost children.
function firstWalk(v) {
var children = v.children,
siblings = v.parent.children,
w = v.i ? siblings[v.i - 1] : null;
if (children) {
executeShifts(v);
var midpoint = (children[0].z + children[children.length - 1].z) / 2;
if (w) {
v.z = w.z + separation(v._, w._);
v.m = v.z - midpoint;
} else {
v.z = midpoint;
}
} else if (w) {
v.z = w.z + separation(v._, w._);
}
v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
}
// Computes all real x-coordinates by summing up the modifiers recursively.
function secondWalk(v) {
v._.x = v.z + v.parent.m;
v.m += v.parent.m;
}
// The core of the algorithm. Here, a new subtree is combined with the
// previous subtrees. Threads are used to traverse the inside and outside
// contours of the left and right subtree up to the highest common level. The
// vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
// superscript o means outside and i means inside, the subscript - means left
// subtree and + means right subtree. For summing up the modifiers along the
// contour, we use respective variables si+, si-, so-, and so+. Whenever two
// nodes of the inside contours conflict, we compute the left one of the
// greatest uncommon ancestors using the function ANCESTOR and call MOVE
// SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
// Finally, we add a new thread (if necessary).
function apportion(v, w, ancestor) {
if (w) {
var vip = v,
vop = v,
vim = w,
vom = vip.parent.children[0],
sip = vip.m,
sop = vop.m,
sim = vim.m,
som = vom.m,
shift;
while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
vom = nextLeft(vom);
vop = nextRight(vop);
vop.a = v;
shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
if (shift > 0) {
moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
sip += shift;
sop += shift;
}
sim += vim.m;
sip += vip.m;
som += vom.m;
sop += vop.m;
}
if (vim && !nextRight(vop)) {
vop.t = vim;
vop.m += sim - sop;
}
if (vip && !nextLeft(vom)) {
vom.t = vip;
vom.m += sip - som;
ancestor = v;
}
}
return ancestor;
}
function sizeNode(node) {
node.x *= dx;
node.y = node.depth * dy;
}
tree.separation = function(x) {
return arguments.length ? (separation = x, tree) : separation;
};
tree.size = function(x) {
return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
};
tree.nodeSize = function(x) {
return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
};
return tree;
};
var treemapSlice = function(parent, x0, y0, x1, y1) {
var nodes = parent.children,
node,
i = -1,
n = nodes.length,
k = parent.value && (y1 - y0) / parent.value;
while (++i < n) {
node = nodes[i], node.x0 = x0, node.x1 = x1;
node.y0 = y0, node.y1 = y0 += node.value * k;
}
};
var phi = (1 + Math.sqrt(5)) / 2;
function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
var rows = [],
nodes = parent.children,
row,
nodeValue,
i0 = 0,
i1 = 0,
n = nodes.length,
dx, dy,
value = parent.value,
sumValue,
minValue,
maxValue,
newRatio,
minRatio,
alpha,
beta;
while (i0 < n) {
dx = x1 - x0, dy = y1 - y0;
// Find the next non-empty node.
do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);
minValue = maxValue = sumValue;
alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
beta = sumValue * sumValue * alpha;
minRatio = Math.max(maxValue / beta, beta / minValue);
// Keep adding nodes while the aspect ratio maintains or improves.
for (; i1 < n; ++i1) {
sumValue += nodeValue = nodes[i1].value;
if (nodeValue < minValue) minValue = nodeValue;
if (nodeValue > maxValue) maxValue = nodeValue;
beta = sumValue * sumValue * alpha;
newRatio = Math.max(maxValue / beta, beta / minValue);
if (newRatio > minRatio) { sumValue -= nodeValue; break; }
minRatio = newRatio;
}
// Position and record the row orientation.
rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
value -= sumValue, i0 = i1;
}
return rows;
}
var squarify = ((function custom(ratio) {
function squarify(parent, x0, y0, x1, y1) {
squarifyRatio(ratio, parent, x0, y0, x1, y1);
}
squarify.ratio = function(x) {
return custom((x = +x) > 1 ? x : 1);
};
return squarify;
}))(phi);
var index$3 = function() {
var tile = squarify,
round = false,
dx = 1,
dy = 1,
paddingStack = [0],
paddingInner = constantZero,
paddingTop = constantZero,
paddingRight = constantZero,
paddingBottom = constantZero,
paddingLeft = constantZero;
function treemap(root) {
root.x0 =
root.y0 = 0;
root.x1 = dx;
root.y1 = dy;
root.eachBefore(positionNode);
paddingStack = [0];
if (round) root.eachBefore(roundNode);
return root;
}
function positionNode(node) {
var p = paddingStack[node.depth],
x0 = node.x0 + p,
y0 = node.y0 + p,
x1 = node.x1 - p,
y1 = node.y1 - p;
if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
node.x0 = x0;
node.y0 = y0;
node.x1 = x1;
node.y1 = y1;
if (node.children) {
p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
x0 += paddingLeft(node) - p;
y0 += paddingTop(node) - p;
x1 -= paddingRight(node) - p;
y1 -= paddingBottom(node) - p;
if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
tile(node, x0, y0, x1, y1);
}
}
treemap.round = function(x) {
return arguments.length ? (round = !!x, treemap) : round;
};
treemap.size = function(x) {
return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
};
treemap.tile = function(x) {
return arguments.length ? (tile = required(x), treemap) : tile;
};
treemap.padding = function(x) {
return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
};
treemap.paddingInner = function(x) {
return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$8(+x), treemap) : paddingInner;
};
treemap.paddingOuter = function(x) {
return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
};
treemap.paddingTop = function(x) {
return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$8(+x), treemap) : paddingTop;
};
treemap.paddingRight = function(x) {
return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$8(+x), treemap) : paddingRight;
};
treemap.paddingBottom = function(x) {
return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$8(+x), treemap) : paddingBottom;
};
treemap.paddingLeft = function(x) {
return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$8(+x), treemap) : paddingLeft;
};
return treemap;
};
var binary = function(parent, x0, y0, x1, y1) {
var nodes = parent.children,
i, n = nodes.length,
sum, sums = new Array(n + 1);
for (sums[0] = sum = i = 0; i < n; ++i) {
sums[i + 1] = sum += nodes[i].value;
}
partition(0, n, parent.value, x0, y0, x1, y1);
function partition(i, j, value, x0, y0, x1, y1) {
if (i >= j - 1) {
var node = nodes[i];
node.x0 = x0, node.y0 = y0;
node.x1 = x1, node.y1 = y1;
return;
}
var valueOffset = sums[i],
valueTarget = (value / 2) + valueOffset,
k = i + 1,
hi = j - 1;
while (k < hi) {
var mid = k + hi >>> 1;
if (sums[mid] < valueTarget) k = mid + 1;
else hi = mid;
}
if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;
var valueLeft = sums[k] - valueOffset,
valueRight = value - valueLeft;
if ((x1 - x0) > (y1 - y0)) {
var xk = (x0 * valueRight + x1 * valueLeft) / value;
partition(i, k, valueLeft, x0, y0, xk, y1);
partition(k, j, valueRight, xk, y0, x1, y1);
} else {
var yk = (y0 * valueRight + y1 * valueLeft) / value;
partition(i, k, valueLeft, x0, y0, x1, yk);
partition(k, j, valueRight, x0, yk, x1, y1);
}
}
};
var sliceDice = function(parent, x0, y0, x1, y1) {
(parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
};
var resquarify = ((function custom(ratio) {
function resquarify(parent, x0, y0, x1, y1) {
if ((rows = parent._squarify) && (rows.ratio === ratio)) {
var rows,
row,
nodes,
i,
j = -1,
n,
m = rows.length,
value = parent.value;
while (++j < m) {
row = rows[j], nodes = row.children;
for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
value -= row.value;
}
} else {
parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
rows.ratio = ratio;
}
}
resquarify.ratio = function(x) {
return custom((x = +x) > 1 ? x : 1);
};
return resquarify;
}))(phi);
var area$1 = function(polygon) {
var i = -1,
n = polygon.length,
a,
b = polygon[n - 1],
area = 0;
while (++i < n) {
a = b;
b = polygon[i];
area += a[1] * b[0] - a[0] * b[1];
}
return area / 2;
};
var centroid$1 = function(polygon) {
var i = -1,
n = polygon.length,
x = 0,
y = 0,
a,
b = polygon[n - 1],
c,
k = 0;
while (++i < n) {
a = b;
b = polygon[i];
k += c = a[0] * b[1] - b[0] * a[1];
x += (a[0] + b[0]) * c;
y += (a[1] + b[1]) * c;
}
return k *= 3, [x / k, y / k];
};
// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
// the 3D cross product in a quadrant I Cartesian coordinate system (+x is
// right, +y is up). Returns a positive value if ABC is counter-clockwise,
// negative if clockwise, and zero if the points are collinear.
var cross$1 = function(a, b, c) {
return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
};
function lexicographicOrder(a, b) {
return a[0] - b[0] || a[1] - b[1];
}
// Computes the upper convex hull per the monotone chain algorithm.
// Assumes points.length >= 3, is sorted by x, unique in y.
// Returns an array of indices into points in left-to-right order.
function computeUpperHullIndexes(points) {
var n = points.length,
indexes = [0, 1],
size = 2;
for (var i = 2; i < n; ++i) {
while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
indexes[size++] = i;
}
return indexes.slice(0, size); // remove popped points
}
var hull = function(points) {
if ((n = points.length) < 3) return null;
var i,
n,
sortedPoints = new Array(n),
flippedPoints = new Array(n);
for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
sortedPoints.sort(lexicographicOrder);
for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
var upperIndexes = computeUpperHullIndexes(sortedPoints),
lowerIndexes = computeUpperHullIndexes(flippedPoints);
// Construct the hull polygon, removing possible duplicate endpoints.
var skipLeft = lowerIndexes[0] === upperIndexes[0],
skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
hull = [];
// Add upper hull in right-to-l order.
// Then add lower hull in left-to-right order.
for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
return hull;
};
var contains$1 = function(polygon, point) {
var n = polygon.length,
p = polygon[n - 1],
x = point[0], y = point[1],
x0 = p[0], y0 = p[1],
x1, y1,
inside = false;
for (var i = 0; i < n; ++i) {
p = polygon[i], x1 = p[0], y1 = p[1];
if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
x0 = x1, y0 = y1;
}
return inside;
};
var length$2 = function(polygon) {
var i = -1,
n = polygon.length,
b = polygon[n - 1],
xa,
ya,
xb = b[0],
yb = b[1],
perimeter = 0;
while (++i < n) {
xa = xb;
ya = yb;
b = polygon[i];
xb = b[0];
yb = b[1];
xa -= xb;
ya -= yb;
perimeter += Math.sqrt(xa * xa + ya * ya);
}
return perimeter;
};
var slice$3 = [].slice;
var noabort = {};
function Queue(size) {
if (!(size >= 1)) throw new Error;
this._size = size;
this._call =
this._error = null;
this._tasks = [];
this._data = [];
this._waiting =
this._active =
this._ended =
this._start = 0; // inside a synchronous task callback?
}
Queue.prototype = queue.prototype = {
constructor: Queue,
defer: function(callback) {
if (typeof callback !== "function" || this._call) throw new Error;
if (this._error != null) return this;
var t = slice$3.call(arguments, 1);
t.push(callback);
++this._waiting, this._tasks.push(t);
poke$1(this);
return this;
},
abort: function() {
if (this._error == null) abort(this, new Error("abort"));
return this;
},
await: function(callback) {
if (typeof callback !== "function" || this._call) throw new Error;
this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
maybeNotify(this);
return this;
},
awaitAll: function(callback) {
if (typeof callback !== "function" || this._call) throw new Error;
this._call = callback;
maybeNotify(this);
return this;
}
};
function poke$1(q) {
if (!q._start) {
try { start$1(q); } // let the current task complete
catch (e) {
if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously
else if (!q._data) throw e; // await callback errored synchronously
}
}
}
function start$1(q) {
while (q._start = q._waiting && q._active < q._size) {
var i = q._ended + q._active,
t = q._tasks[i],
j = t.length - 1,
c = t[j];
t[j] = end(q, i);
--q._waiting, ++q._active;
t = c.apply(null, t);
if (!q._tasks[i]) continue; // task finished synchronously
q._tasks[i] = t || noabort;
}
}
function end(q, i) {
return function(e, r) {
if (!q._tasks[i]) return; // ignore multiple callbacks
--q._active, ++q._ended;
q._tasks[i] = null;
if (q._error != null) return; // ignore secondary errors
if (e != null) {
abort(q, e);
} else {
q._data[i] = r;
if (q._waiting) poke$1(q);
else maybeNotify(q);
}
};
}
function abort(q, e) {
var i = q._tasks.length, t;
q._error = e; // ignore active callbacks
q._data = undefined; // allow gc
q._waiting = NaN; // prevent starting
while (--i >= 0) {
if (t = q._tasks[i]) {
q._tasks[i] = null;
if (t.abort) {
try { t.abort(); }
catch (e) { /* ignore */ }
}
}
}
q._active = NaN; // allow notification
maybeNotify(q);
}
function maybeNotify(q) {
if (!q._active && q._call) {
var d = q._data;
q._data = undefined; // allow gc
q._call(q._error, d);
}
}
function queue(concurrency) {
return new Queue(arguments.length ? +concurrency : Infinity);
}
var uniform = function(min, max) {
min = min == null ? 0 : +min;
max = max == null ? 1 : +max;
if (arguments.length === 1) max = min, min = 0;
else max -= min;
return function() {
return Math.random() * max + min;
};
};
var normal = function(mu, sigma) {
var x, r;
mu = mu == null ? 0 : +mu;
sigma = sigma == null ? 1 : +sigma;
return function() {
var y;
// If available, use the second previously-generated uniform random.
if (x != null) y = x, x = null;
// Otherwise, generate a new x and y.
else do {
x = Math.random() * 2 - 1;
y = Math.random() * 2 - 1;
r = x * x + y * y;
} while (!r || r > 1);
return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
};
};
var logNormal = function() {
var randomNormal = normal.apply(this, arguments);
return function() {
return Math.exp(randomNormal());
};
};
var irwinHall = function(n) {
return function() {
for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();
return sum;
};
};
var bates = function(n) {
var randomIrwinHall = irwinHall(n);
return function() {
return randomIrwinHall() / n;
};
};
var exponential$1 = function(lambda) {
return function() {
return -Math.log(1 - Math.random()) / lambda;
};
};
var request = function(url, callback) {
var request,
event = dispatch("beforesend", "progress", "load", "error"),
mimeType,
headers = map$1(),
xhr = new XMLHttpRequest,
user = null,
password = null,
response,
responseType,
timeout = 0;
// If IE does not support CORS, use XDomainRequest.
if (typeof XDomainRequest !== "undefined"
&& !("withCredentials" in xhr)
&& /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest;
"onload" in xhr
? xhr.onload = xhr.onerror = xhr.ontimeout = respond
: xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };
function respond(o) {
var status = xhr.status, result;
if (!status && hasResponse(xhr)
|| status >= 200 && status < 300
|| status === 304) {
if (response) {
try {
result = response.call(request, xhr);
} catch (e) {
event.call("error", request, e);
return;
}
} else {
result = xhr;
}
event.call("load", request, result);
} else {
event.call("error", request, o);
}
}
xhr.onprogress = function(e) {
event.call("progress", request, e);
};
request = {
header: function(name, value) {
name = (name + "").toLowerCase();
if (arguments.length < 2) return headers.get(name);
if (value == null) headers.remove(name);
else headers.set(name, value + "");
return request;
},
// If mimeType is non-null and no Accept header is set, a default is used.
mimeType: function(value) {
if (!arguments.length) return mimeType;
mimeType = value == null ? null : value + "";
return request;
},
// Specifies what type the response value should take;
// for instance, arraybuffer, blob, document, or text.
responseType: function(value) {
if (!arguments.length) return responseType;
responseType = value;
return request;
},
timeout: function(value) {
if (!arguments.length) return timeout;
timeout = +value;
return request;
},
user: function(value) {
return arguments.length < 1 ? user : (user = value == null ? null : value + "", request);
},
password: function(value) {
return arguments.length < 1 ? password : (password = value == null ? null : value + "", request);
},
// Specify how to convert the response content to a specific type;
// changes the callback value on "load" events.
response: function(value) {
response = value;
return request;
},
// Alias for send("GET", …).
get: function(data, callback) {
return request.send("GET", data, callback);
},
// Alias for send("POST", …).
post: function(data, callback) {
return request.send("POST", data, callback);
},
// If callback is non-null, it will be used for error and load events.
send: function(method, data, callback) {
xhr.open(method, url, true, user, password);
if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*");
if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });
if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);
if (responseType != null) xhr.responseType = responseType;
if (timeout > 0) xhr.timeout = timeout;
if (callback == null && typeof data === "function") callback = data, data = null;
if (callback != null && callback.length === 1) callback = fixCallback(callback);
if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); });
event.call("beforesend", request, xhr);
xhr.send(data == null ? null : data);
return request;
},
abort: function() {
xhr.abort();
return request;
},
on: function() {
var value = event.on.apply(event, arguments);
return value === event ? request : value;
}
};
if (callback != null) {
if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
return request.get(callback);
}
return request;
};
function fixCallback(callback) {
return function(error, xhr) {
callback(error == null ? xhr : null);
};
}
function hasResponse(xhr) {
var type = xhr.responseType;
return type && type !== "text"
? xhr.response // null on error
: xhr.responseText; // "" on error
}
var type$1 = function(defaultMimeType, response) {
return function(url, callback) {
var r = request(url).mimeType(defaultMimeType).response(response);
if (callback != null) {
if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
return r.get(callback);
}
return r;
};
};
var html = type$1("text/html", function(xhr) {
return document.createRange().createContextualFragment(xhr.responseText);
});
var json = type$1("application/json", function(xhr) {
return JSON.parse(xhr.responseText);
});
var text = type$1("text/plain", function(xhr) {
return xhr.responseText;
});
var xml = type$1("application/xml", function(xhr) {
var xml = xhr.responseXML;
if (!xml) throw new Error("parse error");
return xml;
});
var dsv$1 = function(defaultMimeType, parse) {
return function(url, row, callback) {
if (arguments.length < 3) callback = row, row = null;
var r = request(url).mimeType(defaultMimeType);
r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };
r.row(row);
return callback ? r.get(callback) : r;
};
};
function responseOf(parse, row) {
return function(request$$1) {
return parse(request$$1.responseText, row);
};
}
var csv$1 = dsv$1("text/csv", csvParse);
var tsv$1 = dsv$1("text/tab-separated-values", tsvParse);
var array$2 = Array.prototype;
var map$3 = array$2.map;
var slice$4 = array$2.slice;
var implicit = {name: "implicit"};
function ordinal(range) {
var index = map$1(),
domain = [],
unknown = implicit;
range = range == null ? [] : slice$4.call(range);
function scale(d) {
var key = d + "", i = index.get(key);
if (!i) {
if (unknown !== implicit) return unknown;
index.set(key, i = domain.push(d));
}
return range[(i - 1) % range.length];
}
scale.domain = function(_) {
if (!arguments.length) return domain.slice();
domain = [], index = map$1();
var i = -1, n = _.length, d, key;
while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
return scale;
};
scale.range = function(_) {
return arguments.length ? (range = slice$4.call(_), scale) : range.slice();
};
scale.unknown = function(_) {
return arguments.length ? (unknown = _, scale) : unknown;
};
scale.copy = function() {
return ordinal()
.domain(domain)
.range(range)
.unknown(unknown);
};
return scale;
}
function band() {
var scale = ordinal().unknown(undefined),
domain = scale.domain,
ordinalRange = scale.range,
range$$1 = [0, 1],
step,
bandwidth,
round = false,
paddingInner = 0,
paddingOuter = 0,
align = 0.5;
delete scale.unknown;
function rescale() {
var n = domain().length,
reverse = range$$1[1] < range$$1[0],
start = range$$1[reverse - 0],
stop = range$$1[1 - reverse];
step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
if (round) step = Math.floor(step);
start += (stop - start - step * (n - paddingInner)) * align;
bandwidth = step * (1 - paddingInner);
if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
var values = range(n).map(function(i) { return start + step * i; });
return ordinalRange(reverse ? values.reverse() : values);
}
scale.domain = function(_) {
return arguments.length ? (domain(_), rescale()) : domain();
};
scale.range = function(_) {
return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
};
scale.rangeRound = function(_) {
return range$$1 = [+_[0], +_[1]], round = true, rescale();
};
scale.bandwidth = function() {
return bandwidth;
};
scale.step = function() {
return step;
};
scale.round = function(_) {
return arguments.length ? (round = !!_, rescale()) : round;
};
scale.padding = function(_) {
return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
};
scale.paddingInner = function(_) {
return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
};
scale.paddingOuter = function(_) {
return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
};
scale.align = function(_) {
return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
};
scale.copy = function() {
return band()
.domain(domain())
.range(range$$1)
.round(round)
.paddingInner(paddingInner)
.paddingOuter(paddingOuter)
.align(align);
};
return rescale();
}
function pointish(scale) {
var copy = scale.copy;
scale.padding = scale.paddingOuter;
delete scale.paddingInner;
delete scale.paddingOuter;
scale.copy = function() {
return pointish(copy());
};
return scale;
}
function point$1() {
return pointish(band().paddingInner(1));
}
var constant$9 = function(x) {
return function() {
return x;
};
};
var number$1 = function(x) {
return +x;
};
var unit = [0, 1];
function deinterpolateLinear(a, b) {
return (b -= (a = +a))
? function(x) { return (x - a) / b; }
: constant$9(b);
}
function deinterpolateClamp(deinterpolate) {
return function(a, b) {
var d = deinterpolate(a = +a, b = +b);
return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
};
}
function reinterpolateClamp(reinterpolate) {
return function(a, b) {
var r = reinterpolate(a = +a, b = +b);
return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
};
}
function bimap(domain, range$$1, deinterpolate, reinterpolate) {
var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
return function(x) { return r0(d0(x)); };
}
function polymap(domain, range$$1, deinterpolate, reinterpolate) {
var j = Math.min(domain.length, range$$1.length) - 1,
d = new Array(j),
r = new Array(j),
i = -1;
// Reverse descending domains.
if (domain[j] < domain[0]) {
domain = domain.slice().reverse();
range$$1 = range$$1.slice().reverse();
}
while (++i < j) {
d[i] = deinterpolate(domain[i], domain[i + 1]);
r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
}
return function(x) {
var i = bisectRight(domain, x, 1, j) - 1;
return r[i](d[i](x));
};
}
function copy(source, target) {
return target
.domain(source.domain())
.range(source.range())
.interpolate(source.interpolate())
.clamp(source.clamp());
}
// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
function continuous(deinterpolate, reinterpolate) {
var domain = unit,
range$$1 = unit,
interpolate$$1 = interpolateValue,
clamp = false,
piecewise,
output,
input;
function rescale() {
piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
output = input = null;
return scale;
}
function scale(x) {
return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
}
scale.invert = function(y) {
return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
};
scale.domain = function(_) {
return arguments.length ? (domain = map$3.call(_, number$1), rescale()) : domain.slice();
};
scale.range = function(_) {
return arguments.length ? (range$$1 = slice$4.call(_), rescale()) : range$$1.slice();
};
scale.rangeRound = function(_) {
return range$$1 = slice$4.call(_), interpolate$$1 = interpolateRound, rescale();
};
scale.clamp = function(_) {
return arguments.length ? (clamp = !!_, rescale()) : clamp;
};
scale.interpolate = function(_) {
return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
};
return rescale();
}
var tickFormat = function(domain, count, specifier) {
var start = domain[0],
stop = domain[domain.length - 1],
step = tickStep(start, stop, count == null ? 10 : count),
precision;
specifier = formatSpecifier(specifier == null ? ",f" : specifier);
switch (specifier.type) {
case "s": {
var value = Math.max(Math.abs(start), Math.abs(stop));
if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
return exports.formatPrefix(specifier, value);
}
case "":
case "e":
case "g":
case "p":
case "r": {
if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
break;
}
case "f":
case "%": {
if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
break;
}
}
return exports.format(specifier);
};
function linearish(scale) {
var domain = scale.domain;
scale.ticks = function(count) {
var d = domain();
return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
};
scale.tickFormat = function(count, specifier) {
return tickFormat(domain(), count, specifier);
};
scale.nice = function(count) {
var d = domain(),
i = d.length - 1,
n = count == null ? 10 : count,
start = d[0],
stop = d[i],
step = tickStep(start, stop, n);
if (step) {
step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
d[0] = Math.floor(start / step) * step;
d[i] = Math.ceil(stop / step) * step;
domain(d);
}
return scale;
};
return scale;
}
function linear$2() {
var scale = continuous(deinterpolateLinear, reinterpolate);
scale.copy = function() {
return copy(scale, linear$2());
};
return linearish(scale);
}
function identity$6() {
var domain = [0, 1];
function scale(x) {
return +x;
}
scale.invert = scale;
scale.domain = scale.range = function(_) {
return arguments.length ? (domain = map$3.call(_, number$1), scale) : domain.slice();
};
scale.copy = function() {
return identity$6().domain(domain);
};
return linearish(scale);
}
var nice = function(domain, interval) {
domain = domain.slice();
var i0 = 0,
i1 = domain.length - 1,
x0 = domain[i0],
x1 = domain[i1],
t;
if (x1 < x0) {
t = i0, i0 = i1, i1 = t;
t = x0, x0 = x1, x1 = t;
}
domain[i0] = interval.floor(x0);
domain[i1] = interval.ceil(x1);
return domain;
};
function deinterpolate(a, b) {
return (b = Math.log(b / a))
? function(x) { return Math.log(x / a) / b; }
: constant$9(b);
}
function reinterpolate$1(a, b) {
return a < 0
? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
: function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
}
function pow10(x) {
return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
}
function powp(base) {
return base === 10 ? pow10
: base === Math.E ? Math.exp
: function(x) { return Math.pow(base, x); };
}
function logp(base) {
return base === Math.E ? Math.log
: base === 10 && Math.log10
|| base === 2 && Math.log2
|| (base = Math.log(base), function(x) { return Math.log(x) / base; });
}
function reflect(f) {
return function(x) {
return -f(-x);
};
}
function log$1() {
var scale = continuous(deinterpolate, reinterpolate$1).domain([1, 10]),
domain = scale.domain,
base = 10,
logs = logp(10),
pows = powp(10);
function rescale() {
logs = logp(base), pows = powp(base);
if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
return scale;
}
scale.base = function(_) {
return arguments.length ? (base = +_, rescale()) : base;
};
scale.domain = function(_) {
return arguments.length ? (domain(_), rescale()) : domain();
};
scale.ticks = function(count) {
var d = domain(),
u = d[0],
v = d[d.length - 1],
r;
if (r = v < u) i = u, u = v, v = i;
var i = logs(u),
j = logs(v),
p,
k,
t,
n = count == null ? 10 : +count,
z = [];
if (!(base % 1) && j - i < n) {
i = Math.round(i) - 1, j = Math.round(j) + 1;
if (u > 0) for (; i < j; ++i) {
for (k = 1, p = pows(i); k < base; ++k) {
t = p * k;
if (t < u) continue;
if (t > v) break;
z.push(t);
}
} else for (; i < j; ++i) {
for (k = base - 1, p = pows(i); k >= 1; --k) {
t = p * k;
if (t < u) continue;
if (t > v) break;
z.push(t);
}
}
} else {
z = ticks(i, j, Math.min(j - i, n)).map(pows);
}
return r ? z.reverse() : z;
};
scale.tickFormat = function(count, specifier) {
if (specifier == null) specifier = base === 10 ? ".0e" : ",";
if (typeof specifier !== "function") specifier = exports.format(specifier);
if (count === Infinity) return specifier;
if (count == null) count = 10;
var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
return function(d) {
var i = d / pows(Math.round(logs(d)));
if (i * base < base - 0.5) i *= base;
return i <= k ? specifier(d) : "";
};
};
scale.nice = function() {
return domain(nice(domain(), {
floor: function(x) { return pows(Math.floor(logs(x))); },
ceil: function(x) { return pows(Math.ceil(logs(x))); }
}));
};
scale.copy = function() {
return copy(scale, log$1().base(base));
};
return scale;
}
function raise$1(x, exponent) {
return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
}
function pow$1() {
var exponent = 1,
scale = continuous(deinterpolate, reinterpolate),
domain = scale.domain;
function deinterpolate(a, b) {
return (b = raise$1(b, exponent) - (a = raise$1(a, exponent)))
? function(x) { return (raise$1(x, exponent) - a) / b; }
: constant$9(b);
}
function reinterpolate(a, b) {
b = raise$1(b, exponent) - (a = raise$1(a, exponent));
return function(t) { return raise$1(a + b * t, 1 / exponent); };
}
scale.exponent = function(_) {
return arguments.length ? (exponent = +_, domain(domain())) : exponent;
};
scale.copy = function() {
return copy(scale, pow$1().exponent(exponent));
};
return linearish(scale);
}
function sqrt$1() {
return pow$1().exponent(0.5);
}
function quantile$$1() {
var domain = [],
range$$1 = [],
thresholds = [];
function rescale() {
var i = 0, n = Math.max(1, range$$1.length);
thresholds = new Array(n - 1);
while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
return scale;
}
function scale(x) {
if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)];
}
scale.invertExtent = function(y) {
var i = range$$1.indexOf(y);
return i < 0 ? [NaN, NaN] : [
i > 0 ? thresholds[i - 1] : domain[0],
i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
];
};
scale.domain = function(_) {
if (!arguments.length) return domain.slice();
domain = [];
for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
domain.sort(ascending);
return rescale();
};
scale.range = function(_) {
return arguments.length ? (range$$1 = slice$4.call(_), rescale()) : range$$1.slice();
};
scale.quantiles = function() {
return thresholds.slice();
};
scale.copy = function() {
return quantile$$1()
.domain(domain)
.range(range$$1);
};
return scale;
}
function quantize$1() {
var x0 = 0,
x1 = 1,
n = 1,
domain = [0.5],
range$$1 = [0, 1];
function scale(x) {
if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
}
function rescale() {
var i = -1;
domain = new Array(n);
while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
return scale;
}
scale.domain = function(_) {
return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
};
scale.range = function(_) {
return arguments.length ? (n = (range$$1 = slice$4.call(_)).length - 1, rescale()) : range$$1.slice();
};
scale.invertExtent = function(y) {
var i = range$$1.indexOf(y);
return i < 0 ? [NaN, NaN]
: i < 1 ? [x0, domain[0]]
: i >= n ? [domain[n - 1], x1]
: [domain[i - 1], domain[i]];
};
scale.copy = function() {
return quantize$1()
.domain([x0, x1])
.range(range$$1);
};
return linearish(scale);
}
function threshold$1() {
var domain = [0.5],
range$$1 = [0, 1],
n = 1;
function scale(x) {
if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
}
scale.domain = function(_) {
return arguments.length ? (domain = slice$4.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
};
scale.range = function(_) {
return arguments.length ? (range$$1 = slice$4.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
};
scale.invertExtent = function(y) {
var i = range$$1.indexOf(y);
return [domain[i - 1], domain[i]];
};
scale.copy = function() {
return threshold$1()
.domain(domain)
.range(range$$1);
};
return scale;
}
var t0$1 = new Date;
var t1$1 = new Date;
function newInterval(floori, offseti, count, field) {
function interval(date) {
return floori(date = new Date(+date)), date;
}
interval.floor = interval;
interval.ceil = function(date) {
return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
};
interval.round = function(date) {
var d0 = interval(date),
d1 = interval.ceil(date);
return date - d0 < d1 - date ? d0 : d1;
};
interval.offset = function(date, step) {
return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
};
interval.range = function(start, stop, step) {
var range = [];
start = interval.ceil(start);
step = step == null ? 1 : Math.floor(step);
if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)
return range;
};
interval.filter = function(test) {
return newInterval(function(date) {
if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
}, function(date, step) {
if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty
});
};
if (count) {
interval.count = function(start, end) {
t0$1.setTime(+start), t1$1.setTime(+end);
floori(t0$1), floori(t1$1);
return Math.floor(count(t0$1, t1$1));
};
interval.every = function(step) {
step = Math.floor(step);
return !isFinite(step) || !(step > 0) ? null
: !(step > 1) ? interval
: interval.filter(field
? function(d) { return field(d) % step === 0; }
: function(d) { return interval.count(0, d) % step === 0; });
};
}
return interval;
}
var millisecond = newInterval(function() {
// noop
}, function(date, step) {
date.setTime(+date + step);
}, function(start, end) {
return end - start;
});
// An optimized implementation for this simple case.
millisecond.every = function(k) {
k = Math.floor(k);
if (!isFinite(k) || !(k > 0)) return null;
if (!(k > 1)) return millisecond;
return newInterval(function(date) {
date.setTime(Math.floor(date / k) * k);
}, function(date, step) {
date.setTime(+date + step * k);
}, function(start, end) {
return (end - start) / k;
});
};
var milliseconds = millisecond.range;
var durationSecond$1 = 1e3;
var durationMinute$1 = 6e4;
var durationHour$1 = 36e5;
var durationDay$1 = 864e5;
var durationWeek$1 = 6048e5;
var second = newInterval(function(date) {
date.setTime(Math.floor(date / durationSecond$1) * durationSecond$1);
}, function(date, step) {
date.setTime(+date + step * durationSecond$1);
}, function(start, end) {
return (end - start) / durationSecond$1;
}, function(date) {
return date.getUTCSeconds();
});
var seconds = second.range;
var minute = newInterval(function(date) {
date.setTime(Math.floor(date / durationMinute$1) * durationMinute$1);
}, function(date, step) {
date.setTime(+date + step * durationMinute$1);
}, function(start, end) {
return (end - start) / durationMinute$1;
}, function(date) {
return date.getMinutes();
});
var minutes = minute.range;
var hour = newInterval(function(date) {
var offset = date.getTimezoneOffset() * durationMinute$1 % durationHour$1;
if (offset < 0) offset += durationHour$1;
date.setTime(Math.floor((+date - offset) / durationHour$1) * durationHour$1 + offset);
}, function(date, step) {
date.setTime(+date + step * durationHour$1);
}, function(start, end) {
return (end - start) / durationHour$1;
}, function(date) {
return date.getHours();
});
var hours = hour.range;
var day = newInterval(function(date) {
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setDate(date.getDate() + step);
}, function(start, end) {
return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute$1) / durationDay$1;
}, function(date) {
return date.getDate() - 1;
});
var days = day.range;
function weekday(i) {
return newInterval(function(date) {
date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setDate(date.getDate() + step * 7);
}, function(start, end) {
return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute$1) / durationWeek$1;
});
}
var sunday = weekday(0);
var monday = weekday(1);
var tuesday = weekday(2);
var wednesday = weekday(3);
var thursday = weekday(4);
var friday = weekday(5);
var saturday = weekday(6);
var sundays = sunday.range;
var mondays = monday.range;
var tuesdays = tuesday.range;
var wednesdays = wednesday.range;
var thursdays = thursday.range;
var fridays = friday.range;
var saturdays = saturday.range;
var month = newInterval(function(date) {
date.setDate(1);
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setMonth(date.getMonth() + step);
}, function(start, end) {
return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
}, function(date) {
return date.getMonth();
});
var months = month.range;
var year = newInterval(function(date) {
date.setMonth(0, 1);
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setFullYear(date.getFullYear() + step);
}, function(start, end) {
return end.getFullYear() - start.getFullYear();
}, function(date) {
return date.getFullYear();
});
// An optimized implementation for this simple case.
year.every = function(k) {
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
date.setFullYear(Math.floor(date.getFullYear() / k) * k);
date.setMonth(0, 1);
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setFullYear(date.getFullYear() + step * k);
});
};
var years = year.range;
var utcMinute = newInterval(function(date) {
date.setUTCSeconds(0, 0);
}, function(date, step) {
date.setTime(+date + step * durationMinute$1);
}, function(start, end) {
return (end - start) / durationMinute$1;
}, function(date) {
return date.getUTCMinutes();
});
var utcMinutes = utcMinute.range;
var utcHour = newInterval(function(date) {
date.setUTCMinutes(0, 0, 0);
}, function(date, step) {
date.setTime(+date + step * durationHour$1);
}, function(start, end) {
return (end - start) / durationHour$1;
}, function(date) {
return date.getUTCHours();
});
var utcHours = utcHour.range;
var utcDay = newInterval(function(date) {
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCDate(date.getUTCDate() + step);
}, function(start, end) {
return (end - start) / durationDay$1;
}, function(date) {
return date.getUTCDate() - 1;
});
var utcDays = utcDay.range;
function utcWeekday(i) {
return newInterval(function(date) {
date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCDate(date.getUTCDate() + step * 7);
}, function(start, end) {
return (end - start) / durationWeek$1;
});
}
var utcSunday = utcWeekday(0);
var utcMonday = utcWeekday(1);
var utcTuesday = utcWeekday(2);
var utcWednesday = utcWeekday(3);
var utcThursday = utcWeekday(4);
var utcFriday = utcWeekday(5);
var utcSaturday = utcWeekday(6);
var utcSundays = utcSunday.range;
var utcMondays = utcMonday.range;
var utcTuesdays = utcTuesday.range;
var utcWednesdays = utcWednesday.range;
var utcThursdays = utcThursday.range;
var utcFridays = utcFriday.range;
var utcSaturdays = utcSaturday.range;
var utcMonth = newInterval(function(date) {
date.setUTCDate(1);
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCMonth(date.getUTCMonth() + step);
}, function(start, end) {
return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
}, function(date) {
return date.getUTCMonth();
});
var utcMonths = utcMonth.range;
var utcYear = newInterval(function(date) {
date.setUTCMonth(0, 1);
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCFullYear(date.getUTCFullYear() + step);
}, function(start, end) {
return end.getUTCFullYear() - start.getUTCFullYear();
}, function(date) {
return date.getUTCFullYear();
});
// An optimized implementation for this simple case.
utcYear.every = function(k) {
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
date.setUTCMonth(0, 1);
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCFullYear(date.getUTCFullYear() + step * k);
});
};
var utcYears = utcYear.range;
function localDate(d) {
if (0 <= d.y && d.y < 100) {
var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
date.setFullYear(d.y);
return date;
}
return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
}
function utcDate(d) {
if (0 <= d.y && d.y < 100) {
var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
date.setUTCFullYear(d.y);
return date;
}
return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
}
function newYear(y) {
return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
}
function formatLocale$1(locale) {
var locale_dateTime = locale.dateTime,
locale_date = locale.date,
locale_time = locale.time,
locale_periods = locale.periods,
locale_weekdays = locale.days,
locale_shortWeekdays = locale.shortDays,
locale_months = locale.months,
locale_shortMonths = locale.shortMonths;
var periodRe = formatRe(locale_periods),
periodLookup = formatLookup(locale_periods),
weekdayRe = formatRe(locale_weekdays),
weekdayLookup = formatLookup(locale_weekdays),
shortWeekdayRe = formatRe(locale_shortWeekdays),
shortWeekdayLookup = formatLookup(locale_shortWeekdays),
monthRe = formatRe(locale_months),
monthLookup = formatLookup(locale_months),
shortMonthRe = formatRe(locale_shortMonths),
shortMonthLookup = formatLookup(locale_shortMonths);
var formats = {
"a": formatShortWeekday,
"A": formatWeekday,
"b": formatShortMonth,
"B": formatMonth,
"c": null,
"d": formatDayOfMonth,
"e": formatDayOfMonth,
"H": formatHour24,
"I": formatHour12,
"j": formatDayOfYear,
"L": formatMilliseconds,
"m": formatMonthNumber,
"M": formatMinutes,
"p": formatPeriod,
"S": formatSeconds,
"U": formatWeekNumberSunday,
"w": formatWeekdayNumber,
"W": formatWeekNumberMonday,
"x": null,
"X": null,
"y": formatYear,
"Y": formatFullYear,
"Z": formatZone,
"%": formatLiteralPercent
};
var utcFormats = {
"a": formatUTCShortWeekday,
"A": formatUTCWeekday,
"b": formatUTCShortMonth,
"B": formatUTCMonth,
"c": null,
"d": formatUTCDayOfMonth,
"e": formatUTCDayOfMonth,
"H": formatUTCHour24,
"I": formatUTCHour12,
"j": formatUTCDayOfYear,
"L": formatUTCMilliseconds,
"m": formatUTCMonthNumber,
"M": formatUTCMinutes,
"p": formatUTCPeriod,
"S": formatUTCSeconds,
"U": formatUTCWeekNumberSunday,
"w": formatUTCWeekdayNumber,
"W": formatUTCWeekNumberMonday,
"x": null,
"X": null,
"y": formatUTCYear,
"Y": formatUTCFullYear,
"Z": formatUTCZone,
"%": formatLiteralPercent
};
var parses = {
"a": parseShortWeekday,
"A": parseWeekday,
"b": parseShortMonth,
"B": parseMonth,
"c": parseLocaleDateTime,
"d": parseDayOfMonth,
"e": parseDayOfMonth,
"H": parseHour24,
"I": parseHour24,
"j": parseDayOfYear,
"L": parseMilliseconds,
"m": parseMonthNumber,
"M": parseMinutes,
"p": parsePeriod,
"S": parseSeconds,
"U": parseWeekNumberSunday,
"w": parseWeekdayNumber,
"W": parseWeekNumberMonday,
"x": parseLocaleDate,
"X": parseLocaleTime,
"y": parseYear,
"Y": parseFullYear,
"Z": parseZone,
"%": parseLiteralPercent
};
// These recursive directive definitions must be deferred.
formats.x = newFormat(locale_date, formats);
formats.X = newFormat(locale_time, formats);
formats.c = newFormat(locale_dateTime, formats);
utcFormats.x = newFormat(locale_date, utcFormats);
utcFormats.X = newFormat(locale_time, utcFormats);
utcFormats.c = newFormat(locale_dateTime, utcFormats);
function newFormat(specifier, formats) {
return function(date) {
var string = [],
i = -1,
j = 0,
n = specifier.length,
c,
pad,
format;
if (!(date instanceof Date)) date = new Date(+date);
while (++i < n) {
if (specifier.charCodeAt(i) === 37) {
string.push(specifier.slice(j, i));
if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
else pad = c === "e" ? " " : "0";
if (format = formats[c]) c = format(date, pad);
string.push(c);
j = i + 1;
}
}
string.push(specifier.slice(j, i));
return string.join("");
};
}
function newParse(specifier, newDate) {
return function(string) {
var d = newYear(1900),
i = parseSpecifier(d, specifier, string += "", 0);
if (i != string.length) return null;
// The am-pm flag is 0 for AM, and 1 for PM.
if ("p" in d) d.H = d.H % 12 + d.p * 12;
// Convert day-of-week and week-of-year to day-of-year.
if ("W" in d || "U" in d) {
if (!("w" in d)) d.w = "W" in d ? 1 : 0;
var day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
d.m = 0;
d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;
}
// If a time zone is specified, all fields are interpreted as UTC and then
// offset according to the specified time zone.
if ("Z" in d) {
d.H += d.Z / 100 | 0;
d.M += d.Z % 100;
return utcDate(d);
}
// Otherwise, all fields are in local time.
return newDate(d);
};
}
function parseSpecifier(d, specifier, string, j) {
var i = 0,
n = specifier.length,
m = string.length,
c,
parse;
while (i < n) {
if (j >= m) return -1;
c = specifier.charCodeAt(i++);
if (c === 37) {
c = specifier.charAt(i++);
parse = parses[c in pads ? specifier.charAt(i++) : c];
if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
} else if (c != string.charCodeAt(j++)) {
return -1;
}
}
return j;
}
function parsePeriod(d, string, i) {
var n = periodRe.exec(string.slice(i));
return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseShortWeekday(d, string, i) {
var n = shortWeekdayRe.exec(string.slice(i));
return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseWeekday(d, string, i) {
var n = weekdayRe.exec(string.slice(i));
return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseShortMonth(d, string, i) {
var n = shortMonthRe.exec(string.slice(i));
return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseMonth(d, string, i) {
var n = monthRe.exec(string.slice(i));
return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseLocaleDateTime(d, string, i) {
return parseSpecifier(d, locale_dateTime, string, i);
}
function parseLocaleDate(d, string, i) {
return parseSpecifier(d, locale_date, string, i);
}
function parseLocaleTime(d, string, i) {
return parseSpecifier(d, locale_time, string, i);
}
function formatShortWeekday(d) {
return locale_shortWeekdays[d.getDay()];
}
function formatWeekday(d) {
return locale_weekdays[d.getDay()];
}
function formatShortMonth(d) {
return locale_shortMonths[d.getMonth()];
}
function formatMonth(d) {
return locale_months[d.getMonth()];
}
function formatPeriod(d) {
return locale_periods[+(d.getHours() >= 12)];
}
function formatUTCShortWeekday(d) {
return locale_shortWeekdays[d.getUTCDay()];
}
function formatUTCWeekday(d) {
return locale_weekdays[d.getUTCDay()];
}
function formatUTCShortMonth(d) {
return locale_shortMonths[d.getUTCMonth()];
}
function formatUTCMonth(d) {
return locale_months[d.getUTCMonth()];
}
function formatUTCPeriod(d) {
return locale_periods[+(d.getUTCHours() >= 12)];
}
return {
format: function(specifier) {
var f = newFormat(specifier += "", formats);
f.toString = function() { return specifier; };
return f;
},
parse: function(specifier) {
var p = newParse(specifier += "", localDate);
p.toString = function() { return specifier; };
return p;
},
utcFormat: function(specifier) {
var f = newFormat(specifier += "", utcFormats);
f.toString = function() { return specifier; };
return f;
},
utcParse: function(specifier) {
var p = newParse(specifier, utcDate);
p.toString = function() { return specifier; };
return p;
}
};
}
var pads = {"-": "", "_": " ", "0": "0"};
var numberRe = /^\s*\d+/;
var percentRe = /^%/;
var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
function pad(value, fill, width) {
var sign = value < 0 ? "-" : "",
string = (sign ? -value : value) + "",
length = string.length;
return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
}
function requote(s) {
return s.replace(requoteRe, "\\$&");
}
function formatRe(names) {
return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
}
function formatLookup(names) {
var map = {}, i = -1, n = names.length;
while (++i < n) map[names[i].toLowerCase()] = i;
return map;
}
function parseWeekdayNumber(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 1));
return n ? (d.w = +n[0], i + n[0].length) : -1;
}
function parseWeekNumberSunday(d, string, i) {
var n = numberRe.exec(string.slice(i));
return n ? (d.U = +n[0], i + n[0].length) : -1;
}
function parseWeekNumberMonday(d, string, i) {
var n = numberRe.exec(string.slice(i));
return n ? (d.W = +n[0], i + n[0].length) : -1;
}
function parseFullYear(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 4));
return n ? (d.y = +n[0], i + n[0].length) : -1;
}
function parseYear(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
}
function parseZone(d, string, i) {
var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6));
return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
}
function parseMonthNumber(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
}
function parseDayOfMonth(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.d = +n[0], i + n[0].length) : -1;
}
function parseDayOfYear(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 3));
return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
}
function parseHour24(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.H = +n[0], i + n[0].length) : -1;
}
function parseMinutes(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.M = +n[0], i + n[0].length) : -1;
}
function parseSeconds(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.S = +n[0], i + n[0].length) : -1;
}
function parseMilliseconds(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 3));
return n ? (d.L = +n[0], i + n[0].length) : -1;
}
function parseLiteralPercent(d, string, i) {
var n = percentRe.exec(string.slice(i, i + 1));
return n ? i + n[0].length : -1;
}
function formatDayOfMonth(d, p) {
return pad(d.getDate(), p, 2);
}
function formatHour24(d, p) {
return pad(d.getHours(), p, 2);
}
function formatHour12(d, p) {
return pad(d.getHours() % 12 || 12, p, 2);
}
function formatDayOfYear(d, p) {
return pad(1 + day.count(year(d), d), p, 3);
}
function formatMilliseconds(d, p) {
return pad(d.getMilliseconds(), p, 3);
}
function formatMonthNumber(d, p) {
return pad(d.getMonth() + 1, p, 2);
}
function formatMinutes(d, p) {
return pad(d.getMinutes(), p, 2);
}
function formatSeconds(d, p) {
return pad(d.getSeconds(), p, 2);
}
function formatWeekNumberSunday(d, p) {
return pad(sunday.count(year(d), d), p, 2);
}
function formatWeekdayNumber(d) {
return d.getDay();
}
function formatWeekNumberMonday(d, p) {
return pad(monday.count(year(d), d), p, 2);
}
function formatYear(d, p) {
return pad(d.getFullYear() % 100, p, 2);
}
function formatFullYear(d, p) {
return pad(d.getFullYear() % 10000, p, 4);
}
function formatZone(d) {
var z = d.getTimezoneOffset();
return (z > 0 ? "-" : (z *= -1, "+"))
+ pad(z / 60 | 0, "0", 2)
+ pad(z % 60, "0", 2);
}
function formatUTCDayOfMonth(d, p) {
return pad(d.getUTCDate(), p, 2);
}
function formatUTCHour24(d, p) {
return pad(d.getUTCHours(), p, 2);
}
function formatUTCHour12(d, p) {
return pad(d.getUTCHours() % 12 || 12, p, 2);
}
function formatUTCDayOfYear(d, p) {
return pad(1 + utcDay.count(utcYear(d), d), p, 3);
}
function formatUTCMilliseconds(d, p) {
return pad(d.getUTCMilliseconds(), p, 3);
}
function formatUTCMonthNumber(d, p) {
return pad(d.getUTCMonth() + 1, p, 2);
}
function formatUTCMinutes(d, p) {
return pad(d.getUTCMinutes(), p, 2);
}
function formatUTCSeconds(d, p) {
return pad(d.getUTCSeconds(), p, 2);
}
function formatUTCWeekNumberSunday(d, p) {
return pad(utcSunday.count(utcYear(d), d), p, 2);
}
function formatUTCWeekdayNumber(d) {
return d.getUTCDay();
}
function formatUTCWeekNumberMonday(d, p) {
return pad(utcMonday.count(utcYear(d), d), p, 2);
}
function formatUTCYear(d, p) {
return pad(d.getUTCFullYear() % 100, p, 2);
}
function formatUTCFullYear(d, p) {
return pad(d.getUTCFullYear() % 10000, p, 4);
}
function formatUTCZone() {
return "+0000";
}
function formatLiteralPercent() {
return "%";
}
var locale$2;
defaultLocale$1({
dateTime: "%x, %X",
date: "%-m/%-d/%Y",
time: "%-I:%M:%S %p",
periods: ["AM", "PM"],
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
});
function defaultLocale$1(definition) {
locale$2 = formatLocale$1(definition);
exports.timeFormat = locale$2.format;
exports.timeParse = locale$2.parse;
exports.utcFormat = locale$2.utcFormat;
exports.utcParse = locale$2.utcParse;
return locale$2;
}
var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
function formatIsoNative(date) {
return date.toISOString();
}
var formatIso = Date.prototype.toISOString
? formatIsoNative
: exports.utcFormat(isoSpecifier);
function parseIsoNative(string) {
var date = new Date(string);
return isNaN(date) ? null : date;
}
var parseIso = +new Date("2000-01-01T00:00:00.000Z")
? parseIsoNative
: exports.utcParse(isoSpecifier);
var durationSecond = 1000;
var durationMinute = durationSecond * 60;
var durationHour = durationMinute * 60;
var durationDay = durationHour * 24;
var durationWeek = durationDay * 7;
var durationMonth = durationDay * 30;
var durationYear = durationDay * 365;
function date$1(t) {
return new Date(t);
}
function number$2(t) {
return t instanceof Date ? +t : +new Date(+t);
}
function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {
var scale = continuous(deinterpolateLinear, reinterpolate),
invert = scale.invert,
domain = scale.domain;
var formatMillisecond = format(".%L"),
formatSecond = format(":%S"),
formatMinute = format("%I:%M"),
formatHour = format("%I %p"),
formatDay = format("%a %d"),
formatWeek = format("%b %d"),
formatMonth = format("%B"),
formatYear = format("%Y");
var tickIntervals = [
[second$$1, 1, durationSecond],
[second$$1, 5, 5 * durationSecond],
[second$$1, 15, 15 * durationSecond],
[second$$1, 30, 30 * durationSecond],
[minute$$1, 1, durationMinute],
[minute$$1, 5, 5 * durationMinute],
[minute$$1, 15, 15 * durationMinute],
[minute$$1, 30, 30 * durationMinute],
[ hour$$1, 1, durationHour ],
[ hour$$1, 3, 3 * durationHour ],
[ hour$$1, 6, 6 * durationHour ],
[ hour$$1, 12, 12 * durationHour ],
[ day$$1, 1, durationDay ],
[ day$$1, 2, 2 * durationDay ],
[ week, 1, durationWeek ],
[ month$$1, 1, durationMonth ],
[ month$$1, 3, 3 * durationMonth ],
[ year$$1, 1, durationYear ]
];
function tickFormat(date) {
return (second$$1(date) < date ? formatMillisecond
: minute$$1(date) < date ? formatSecond
: hour$$1(date) < date ? formatMinute
: day$$1(date) < date ? formatHour
: month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
: year$$1(date) < date ? formatMonth
: formatYear)(date);
}
function tickInterval(interval, start, stop, step) {
if (interval == null) interval = 10;
// If a desired tick count is specified, pick a reasonable tick interval
// based on the extent of the domain and a rough estimate of tick size.
// Otherwise, assume interval is already a time interval and use it.
if (typeof interval === "number") {
var target = Math.abs(stop - start) / interval,
i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
if (i === tickIntervals.length) {
step = tickStep(start / durationYear, stop / durationYear, interval);
interval = year$$1;
} else if (i) {
i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
step = i[1];
interval = i[0];
} else {
step = tickStep(start, stop, interval);
interval = millisecond$$1;
}
}
return step == null ? interval : interval.every(step);
}
scale.invert = function(y) {
return new Date(invert(y));
};
scale.domain = function(_) {
return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
};
scale.ticks = function(interval, step) {
var d = domain(),
t0 = d[0],
t1 = d[d.length - 1],
r = t1 < t0,
t;
if (r) t = t0, t0 = t1, t1 = t;
t = tickInterval(interval, t0, t1, step);
t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
return r ? t.reverse() : t;
};
scale.tickFormat = function(count, specifier) {
return specifier == null ? tickFormat : format(specifier);
};
scale.nice = function(interval, step) {
var d = domain();
return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
? domain(nice(d, interval))
: scale;
};
scale.copy = function() {
return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));
};
return scale;
}
var time = function() {
return calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
};
var utcTime = function() {
return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
};
var colors = function(s) {
return s.match(/.{6}/g).map(function(x) {
return "#" + x;
});
};
var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
var rainbow = cubehelix();
var rainbow$1 = function(t) {
if (t < 0 || t > 1) t -= Math.floor(t);
var ts = Math.abs(t - 0.5);
rainbow.h = 360 * t - 100;
rainbow.s = 1.5 - 1.5 * ts;
rainbow.l = 0.8 - 0.9 * ts;
return rainbow + "";
};
function ramp(range) {
var n = range.length;
return function(t) {
return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
};
}
var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
function sequential(interpolator) {
var x0 = 0,
x1 = 1,
clamp = false;
function scale(x) {
var t = (x - x0) / (x1 - x0);
return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
}
scale.domain = function(_) {
return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
};
scale.clamp = function(_) {
return arguments.length ? (clamp = !!_, scale) : clamp;
};
scale.interpolator = function(_) {
return arguments.length ? (interpolator = _, scale) : interpolator;
};
scale.copy = function() {
return sequential(interpolator).domain([x0, x1]).clamp(clamp);
};
return linearish(scale);
}
var constant$10 = function(x) {
return function constant() {
return x;
};
};
var abs$1 = Math.abs;
var atan2$1 = Math.atan2;
var cos$2 = Math.cos;
var max$2 = Math.max;
var min$1 = Math.min;
var sin$2 = Math.sin;
var sqrt$2 = Math.sqrt;
var epsilon$3 = 1e-12;
var pi$4 = Math.PI;
var halfPi$3 = pi$4 / 2;
var tau$4 = 2 * pi$4;
function acos$1(x) {
return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
}
function asin$1(x) {
return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
}
function arcInnerRadius(d) {
return d.innerRadius;
}
function arcOuterRadius(d) {
return d.outerRadius;
}
function arcStartAngle(d) {
return d.startAngle;
}
function arcEndAngle(d) {
return d.endAngle;
}
function arcPadAngle(d) {
return d && d.padAngle; // Note: optional!
}
function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
var x10 = x1 - x0, y10 = y1 - y0,
x32 = x3 - x2, y32 = y3 - y2,
t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);
return [x0 + t * x10, y0 + t * y10];
}
// Compute perpendicular offset line of length rc.
// http://mathworld.wolfram.com/Circle-LineIntersection.html
function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
var x01 = x0 - x1,
y01 = y0 - y1,
lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),
ox = lo * y01,
oy = -lo * x01,
x11 = x0 + ox,
y11 = y0 + oy,
x10 = x1 + ox,
y10 = y1 + oy,
x00 = (x11 + x10) / 2,
y00 = (y11 + y10) / 2,
dx = x10 - x11,
dy = y10 - y11,
d2 = dx * dx + dy * dy,
r = r1 - rc,
D = x11 * y10 - x10 * y11,
d = (dy < 0 ? -1 : 1) * sqrt$2(max$2(0, r * r * d2 - D * D)),
cx0 = (D * dy - dx * d) / d2,
cy0 = (-D * dx - dy * d) / d2,
cx1 = (D * dy + dx * d) / d2,
cy1 = (-D * dx + dy * d) / d2,
dx0 = cx0 - x00,
dy0 = cy0 - y00,
dx1 = cx1 - x00,
dy1 = cy1 - y00;
// Pick the closer of the two intersection points.
// TODO Is there a faster way to determine which intersection to use?
if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
return {
cx: cx0,
cy: cy0,
x01: -ox,
y01: -oy,
x11: cx0 * (r1 / r - 1),
y11: cy0 * (r1 / r - 1)
};
}
var arc = function() {
var innerRadius = arcInnerRadius,
outerRadius = arcOuterRadius,
cornerRadius = constant$10(0),
padRadius = null,
startAngle = arcStartAngle,
endAngle = arcEndAngle,
padAngle = arcPadAngle,
context = null;
function arc() {
var buffer,
r,
r0 = +innerRadius.apply(this, arguments),
r1 = +outerRadius.apply(this, arguments),
a0 = startAngle.apply(this, arguments) - halfPi$3,
a1 = endAngle.apply(this, arguments) - halfPi$3,
da = abs$1(a1 - a0),
cw = a1 > a0;
if (!context) context = buffer = path();
// Ensure that the outer radius is always larger than the inner radius.
if (r1 < r0) r = r1, r1 = r0, r0 = r;
// Is it a point?
if (!(r1 > epsilon$3)) context.moveTo(0, 0);
// Or is it a circle or annulus?
else if (da > tau$4 - epsilon$3) {
context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
context.arc(0, 0, r1, a0, a1, !cw);
if (r0 > epsilon$3) {
context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
context.arc(0, 0, r0, a1, a0, cw);
}
}
// Or is it a circular or annular sector?
else {
var a01 = a0,
a11 = a1,
a00 = a0,
a10 = a1,
da0 = da,
da1 = da,
ap = padAngle.apply(this, arguments) / 2,
rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),
rc = min$1(abs$1(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
rc0 = rc,
rc1 = rc,
t0,
t1;
// Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
if (rp > epsilon$3) {
var p0 = asin$1(rp / r0 * sin$2(ap)),
p1 = asin$1(rp / r1 * sin$2(ap));
if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
else da0 = 0, a00 = a10 = (a0 + a1) / 2;
if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
else da1 = 0, a01 = a11 = (a0 + a1) / 2;
}
var x01 = r1 * cos$2(a01),
y01 = r1 * sin$2(a01),
x10 = r0 * cos$2(a10),
y10 = r0 * sin$2(a10);
// Apply rounded corners?
if (rc > epsilon$3) {
var x11 = r1 * cos$2(a11),
y11 = r1 * sin$2(a11),
x00 = r0 * cos$2(a00),
y00 = r0 * sin$2(a00);
// Restrict the corner radius according to the sector angle.
if (da < pi$4) {
var oc = da0 > epsilon$3 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],
ax = x01 - oc[0],
ay = y01 - oc[1],
bx = x11 - oc[0],
by = y11 - oc[1],
kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),
lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);
rc0 = min$1(rc, (r0 - lc) / (kc - 1));
rc1 = min$1(rc, (r1 - lc) / (kc + 1));
}
}
// Is the sector collapsed to a line?
if (!(da1 > epsilon$3)) context.moveTo(x01, y01);
// Does the sector’s outer ring have rounded corners?
else if (rc1 > epsilon$3) {
t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
// Have the corners merged?
if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
// Otherwise, draw the two corners and the ring.
else {
context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
}
}
// Or is the outer ring just a circular arc?
else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
// Is there no inner ring, and it’s a circular sector?
// Or perhaps it’s an annular sector collapsed due to padding?
if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10);
// Does the sector’s inner ring (or point) have rounded corners?
else if (rc0 > epsilon$3) {
t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
// Have the corners merged?
if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
// Otherwise, draw the two corners and the ring.
else {
context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw);
context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
}
}
// Or is the inner ring just a circular arc?
else context.arc(0, 0, r0, a10, a00, cw);
}
context.closePath();
if (buffer) return context = null, buffer + "" || null;
}
arc.centroid = function() {
var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;
return [cos$2(a) * r, sin$2(a) * r];
};
arc.innerRadius = function(_) {
return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : innerRadius;
};
arc.outerRadius = function(_) {
return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : outerRadius;
};
arc.cornerRadius = function(_) {
return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : cornerRadius;
};
arc.padRadius = function(_) {
return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), arc) : padRadius;
};
arc.startAngle = function(_) {
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : startAngle;
};
arc.endAngle = function(_) {
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : endAngle;
};
arc.padAngle = function(_) {
return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : padAngle;
};
arc.context = function(_) {
return arguments.length ? ((context = _ == null ? null : _), arc) : context;
};
return arc;
};
function Linear(context) {
this._context = context;
}
Linear.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._point = 0;
},
lineEnd: function() {
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; // proceed
default: this._context.lineTo(x, y); break;
}
}
};
var curveLinear = function(context) {
return new Linear(context);
};
function x$3(p) {
return p[0];
}
function y$3(p) {
return p[1];
}
var line = function() {
var x$$1 = x$3,
y$$1 = y$3,
defined = constant$10(true),
context = null,
curve = curveLinear,
output = null;
function line(data) {
var i,
n = data.length,
d,
defined0 = false,
buffer;
if (context == null) output = curve(buffer = path());
for (i = 0; i <= n; ++i) {
if (!(i < n && defined(d = data[i], i, data)) === defined0) {
if (defined0 = !defined0) output.lineStart();
else output.lineEnd();
}
if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));
}
if (buffer) return output = null, buffer + "" || null;
}
line.x = function(_) {
return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : x$$1;
};
line.y = function(_) {
return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : y$$1;
};
line.defined = function(_) {
return arguments.length ? (defined = typeof _ === "function" ? _ : constant$10(!!_), line) : defined;
};
line.curve = function(_) {
return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
};
line.context = function(_) {
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
};
return line;
};
var area$2 = function() {
var x0 = x$3,
x1 = null,
y0 = constant$10(0),
y1 = y$3,
defined = constant$10(true),
context = null,
curve = curveLinear,
output = null;
function area(data) {
var i,
j,
k,
n = data.length,
d,
defined0 = false,
buffer,
x0z = new Array(n),
y0z = new Array(n);
if (context == null) output = curve(buffer = path());
for (i = 0; i <= n; ++i) {
if (!(i < n && defined(d = data[i], i, data)) === defined0) {
if (defined0 = !defined0) {
j = i;
output.areaStart();
output.lineStart();
} else {
output.lineEnd();
output.lineStart();
for (k = i - 1; k >= j; --k) {
output.point(x0z[k], y0z[k]);
}
output.lineEnd();
output.areaEnd();
}
}
if (defined0) {
x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
}
}
if (buffer) return output = null, buffer + "" || null;
}
function arealine() {
return line().defined(defined).curve(curve).context(context);
}
area.x = function(_) {
return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$10(+_), x1 = null, area) : x0;
};
area.x0 = function(_) {
return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$10(+_), area) : x0;
};
area.x1 = function(_) {
return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), area) : x1;
};
area.y = function(_) {
return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$10(+_), y1 = null, area) : y0;
};
area.y0 = function(_) {
return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$10(+_), area) : y0;
};
area.y1 = function(_) {
return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), area) : y1;
};
area.lineX0 =
area.lineY0 = function() {
return arealine().x(x0).y(y0);
};
area.lineY1 = function() {
return arealine().x(x0).y(y1);
};
area.lineX1 = function() {
return arealine().x(x1).y(y0);
};
area.defined = function(_) {
return arguments.length ? (defined = typeof _ === "function" ? _ : constant$10(!!_), area) : defined;
};
area.curve = function(_) {
return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
};
area.context = function(_) {
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
};
return area;
};
var descending$1 = function(a, b) {
return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
};
var identity$7 = function(d) {
return d;
};
var pie = function() {
var value = identity$7,
sortValues = descending$1,
sort = null,
startAngle = constant$10(0),
endAngle = constant$10(tau$4),
padAngle = constant$10(0);
function pie(data) {
var i,
n = data.length,
j,
k,
sum = 0,
index = new Array(n),
arcs = new Array(n),
a0 = +startAngle.apply(this, arguments),
da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),
a1,
p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
pa = p * (da < 0 ? -1 : 1),
v;
for (i = 0; i < n; ++i) {
if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
sum += v;
}
}
// Optionally sort the arcs by previously-computed values or by data.
if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
// Compute the arcs! They are stored in the original data's order.
for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
data: data[j],
index: i,
value: v,
startAngle: a0,
endAngle: a1,
padAngle: p
};
}
return arcs;
}
pie.value = function(_) {
return arguments.length ? (value = typeof _ === "function" ? _ : constant$10(+_), pie) : value;
};
pie.sortValues = function(_) {
return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
};
pie.sort = function(_) {
return arguments.length ? (sort = _, sortValues = null, pie) : sort;
};
pie.startAngle = function(_) {
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : startAngle;
};
pie.endAngle = function(_) {
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : endAngle;
};
pie.padAngle = function(_) {
return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : padAngle;
};
return pie;
};
var curveRadialLinear = curveRadial(curveLinear);
function Radial(curve) {
this._curve = curve;
}
Radial.prototype = {
areaStart: function() {
this._curve.areaStart();
},
areaEnd: function() {
this._curve.areaEnd();
},
lineStart: function() {
this._curve.lineStart();
},
lineEnd: function() {
this._curve.lineEnd();
},
point: function(a, r) {
this._curve.point(r * Math.sin(a), r * -Math.cos(a));
}
};
function curveRadial(curve) {
function radial(context) {
return new Radial(curve(context));
}
radial._curve = curve;
return radial;
}
function radialLine(l) {
var c = l.curve;
l.angle = l.x, delete l.x;
l.radius = l.y, delete l.y;
l.curve = function(_) {
return arguments.length ? c(curveRadial(_)) : c()._curve;
};
return l;
}
var radialLine$1 = function() {
return radialLine(line().curve(curveRadialLinear));
};
var radialArea = function() {
var a = area$2().curve(curveRadialLinear),
c = a.curve,
x0 = a.lineX0,
x1 = a.lineX1,
y0 = a.lineY0,
y1 = a.lineY1;
a.angle = a.x, delete a.x;
a.startAngle = a.x0, delete a.x0;
a.endAngle = a.x1, delete a.x1;
a.radius = a.y, delete a.y;
a.innerRadius = a.y0, delete a.y0;
a.outerRadius = a.y1, delete a.y1;
a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;
a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;
a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;
a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;
a.curve = function(_) {
return arguments.length ? c(curveRadial(_)) : c()._curve;
};
return a;
};
var circle$1 = {
draw: function(context, size) {
var r = Math.sqrt(size / pi$4);
context.moveTo(r, 0);
context.arc(0, 0, r, 0, tau$4);
}
};
var cross$2 = {
draw: function(context, size) {
var r = Math.sqrt(size / 5) / 2;
context.moveTo(-3 * r, -r);
context.lineTo(-r, -r);
context.lineTo(-r, -3 * r);
context.lineTo(r, -3 * r);
context.lineTo(r, -r);
context.lineTo(3 * r, -r);
context.lineTo(3 * r, r);
context.lineTo(r, r);
context.lineTo(r, 3 * r);
context.lineTo(-r, 3 * r);
context.lineTo(-r, r);
context.lineTo(-3 * r, r);
context.closePath();
}
};
var tan30 = Math.sqrt(1 / 3);
var tan30_2 = tan30 * 2;
var diamond = {
draw: function(context, size) {
var y = Math.sqrt(size / tan30_2),
x = y * tan30;
context.moveTo(0, -y);
context.lineTo(x, 0);
context.lineTo(0, y);
context.lineTo(-x, 0);
context.closePath();
}
};
var ka = 0.89081309152928522810;
var kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10);
var kx = Math.sin(tau$4 / 10) * kr;
var ky = -Math.cos(tau$4 / 10) * kr;
var star = {
draw: function(context, size) {
var r = Math.sqrt(size * ka),
x = kx * r,
y = ky * r;
context.moveTo(0, -r);
context.lineTo(x, y);
for (var i = 1; i < 5; ++i) {
var a = tau$4 * i / 5,
c = Math.cos(a),
s = Math.sin(a);
context.lineTo(s * r, -c * r);
context.lineTo(c * x - s * y, s * x + c * y);
}
context.closePath();
}
};
var square = {
draw: function(context, size) {
var w = Math.sqrt(size),
x = -w / 2;
context.rect(x, x, w, w);
}
};
var sqrt3 = Math.sqrt(3);
var triangle = {
draw: function(context, size) {
var y = -Math.sqrt(size / (sqrt3 * 3));
context.moveTo(0, y * 2);
context.lineTo(-sqrt3 * y, -y);
context.lineTo(sqrt3 * y, -y);
context.closePath();
}
};
var c = -0.5;
var s = Math.sqrt(3) / 2;
var k = 1 / Math.sqrt(12);
var a = (k / 2 + 1) * 3;
var wye = {
draw: function(context, size) {
var r = Math.sqrt(size / a),
x0 = r / 2,
y0 = r * k,
x1 = x0,
y1 = r * k + r,
x2 = -x1,
y2 = y1;
context.moveTo(x0, y0);
context.lineTo(x1, y1);
context.lineTo(x2, y2);
context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
context.closePath();
}
};
var symbols = [
circle$1,
cross$2,
diamond,
square,
star,
triangle,
wye
];
var symbol = function() {
var type = constant$10(circle$1),
size = constant$10(64),
context = null;
function symbol() {
var buffer;
if (!context) context = buffer = path();
type.apply(this, arguments).draw(context, +size.apply(this, arguments));
if (buffer) return context = null, buffer + "" || null;
}
symbol.type = function(_) {
return arguments.length ? (type = typeof _ === "function" ? _ : constant$10(_), symbol) : type;
};
symbol.size = function(_) {
return arguments.length ? (size = typeof _ === "function" ? _ : constant$10(+_), symbol) : size;
};
symbol.context = function(_) {
return arguments.length ? (context = _ == null ? null : _, symbol) : context;
};
return symbol;
};
var noop$2 = function() {};
function point$2(that, x, y) {
that._context.bezierCurveTo(
(2 * that._x0 + that._x1) / 3,
(2 * that._y0 + that._y1) / 3,
(that._x0 + 2 * that._x1) / 3,
(that._y0 + 2 * that._y1) / 3,
(that._x0 + 4 * that._x1 + x) / 6,
(that._y0 + 4 * that._y1 + y) / 6
);
}
function Basis(context) {
this._context = context;
}
Basis.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 =
this._y0 = this._y1 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 3: point$2(this, this._x1, this._y1); // proceed
case 2: this._context.lineTo(this._x1, this._y1); break;
}
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; break;
case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
default: point$2(this, x, y); break;
}
this._x0 = this._x1, this._x1 = x;
this._y0 = this._y1, this._y1 = y;
}
};
var basis$2 = function(context) {
return new Basis(context);
};
function BasisClosed(context) {
this._context = context;
}
BasisClosed.prototype = {
areaStart: noop$2,
areaEnd: noop$2,
lineStart: function() {
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 1: {
this._context.moveTo(this._x2, this._y2);
this._context.closePath();
break;
}
case 2: {
this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
this._context.closePath();
break;
}
case 3: {
this.point(this._x2, this._y2);
this.point(this._x3, this._y3);
this.point(this._x4, this._y4);
break;
}
}
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
default: point$2(this, x, y); break;
}
this._x0 = this._x1, this._x1 = x;
this._y0 = this._y1, this._y1 = y;
}
};
var basisClosed$1 = function(context) {
return new BasisClosed(context);
};
function BasisOpen(context) {
this._context = context;
}
BasisOpen.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 =
this._y0 = this._y1 = NaN;
this._point = 0;
},
lineEnd: function() {
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; break;
case 1: this._point = 2; break;
case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
case 3: this._point = 4; // proceed
default: point$2(this, x, y); break;
}
this._x0 = this._x1, this._x1 = x;
this._y0 = this._y1, this._y1 = y;
}
};
var basisOpen = function(context) {
return new BasisOpen(context);
};
function Bundle(context, beta) {
this._basis = new Basis(context);
this._beta = beta;
}
Bundle.prototype = {
lineStart: function() {
this._x = [];
this._y = [];
this._basis.lineStart();
},
lineEnd: function() {
var x = this._x,
y = this._y,
j = x.length - 1;
if (j > 0) {
var x0 = x[0],
y0 = y[0],
dx = x[j] - x0,
dy = y[j] - y0,
i = -1,
t;
while (++i <= j) {
t = i / j;
this._basis.point(
this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
);
}
}
this._x = this._y = null;
this._basis.lineEnd();
},
point: function(x, y) {
this._x.push(+x);
this._y.push(+y);
}
};
var bundle = ((function custom(beta) {
function bundle(context) {
return beta === 1 ? new Basis(context) : new Bundle(context, beta);
}
bundle.beta = function(beta) {
return custom(+beta);
};
return bundle;
}))(0.85);
function point$3(that, x, y) {
that._context.bezierCurveTo(
that._x1 + that._k * (that._x2 - that._x0),
that._y1 + that._k * (that._y2 - that._y0),
that._x2 + that._k * (that._x1 - x),
that._y2 + that._k * (that._y1 - y),
that._x2,
that._y2
);
}
function Cardinal(context, tension) {
this._context = context;
this._k = (1 - tension) / 6;
}
Cardinal.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 = this._x2 =
this._y0 = this._y1 = this._y2 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 2: this._context.lineTo(this._x2, this._y2); break;
case 3: point$3(this, this._x1, this._y1); break;
}
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
case 2: this._point = 3; // proceed
default: point$3(this, x, y); break;
}
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var cardinal = ((function custom(tension) {
function cardinal(context) {
return new Cardinal(context, tension);
}
cardinal.tension = function(tension) {
return custom(+tension);
};
return cardinal;
}))(0);
function CardinalClosed(context, tension) {
this._context = context;
this._k = (1 - tension) / 6;
}
CardinalClosed.prototype = {
areaStart: noop$2,
areaEnd: noop$2,
lineStart: function() {
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 1: {
this._context.moveTo(this._x3, this._y3);
this._context.closePath();
break;
}
case 2: {
this._context.lineTo(this._x3, this._y3);
this._context.closePath();
break;
}
case 3: {
this.point(this._x3, this._y3);
this.point(this._x4, this._y4);
this.point(this._x5, this._y5);
break;
}
}
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
default: point$3(this, x, y); break;
}
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var cardinalClosed = ((function custom(tension) {
function cardinal(context) {
return new CardinalClosed(context, tension);
}
cardinal.tension = function(tension) {
return custom(+tension);
};
return cardinal;
}))(0);
function CardinalOpen(context, tension) {
this._context = context;
this._k = (1 - tension) / 6;
}
CardinalOpen.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 = this._x2 =
this._y0 = this._y1 = this._y2 = NaN;
this._point = 0;
},
lineEnd: function() {
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; break;
case 1: this._point = 2; break;
case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
case 3: this._point = 4; // proceed
default: point$3(this, x, y); break;
}
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var cardinalOpen = ((function custom(tension) {
function cardinal(context) {
return new CardinalOpen(context, tension);
}
cardinal.tension = function(tension) {
return custom(+tension);
};
return cardinal;
}))(0);
function point$4(that, x, y) {
var x1 = that._x1,
y1 = that._y1,
x2 = that._x2,
y2 = that._y2;
if (that._l01_a > epsilon$3) {
var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
n = 3 * that._l01_a * (that._l01_a + that._l12_a);
x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
}
if (that._l23_a > epsilon$3) {
var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
m = 3 * that._l23_a * (that._l23_a + that._l12_a);
x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
}
that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
}
function CatmullRom(context, alpha) {
this._context = context;
this._alpha = alpha;
}
CatmullRom.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 = this._x2 =
this._y0 = this._y1 = this._y2 = NaN;
this._l01_a = this._l12_a = this._l23_a =
this._l01_2a = this._l12_2a = this._l23_2a =
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 2: this._context.lineTo(this._x2, this._y2); break;
case 3: this.point(this._x2, this._y2); break;
}
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
if (this._point) {
var x23 = this._x2 - x,
y23 = this._y2 - y;
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
}
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; break;
case 2: this._point = 3; // proceed
default: point$4(this, x, y); break;
}
this._l01_a = this._l12_a, this._l12_a = this._l23_a;
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var catmullRom = ((function custom(alpha) {
function catmullRom(context) {
return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
}
catmullRom.alpha = function(alpha) {
return custom(+alpha);
};
return catmullRom;
}))(0.5);
function CatmullRomClosed(context, alpha) {
this._context = context;
this._alpha = alpha;
}
CatmullRomClosed.prototype = {
areaStart: noop$2,
areaEnd: noop$2,
lineStart: function() {
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
this._l01_a = this._l12_a = this._l23_a =
this._l01_2a = this._l12_2a = this._l23_2a =
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 1: {
this._context.moveTo(this._x3, this._y3);
this._context.closePath();
break;
}
case 2: {
this._context.lineTo(this._x3, this._y3);
this._context.closePath();
break;
}
case 3: {
this.point(this._x3, this._y3);
this.point(this._x4, this._y4);
this.point(this._x5, this._y5);
break;
}
}
},
point: function(x, y) {
x = +x, y = +y;
if (this._point) {
var x23 = this._x2 - x,
y23 = this._y2 - y;
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
}
switch (this._point) {
case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
default: point$4(this, x, y); break;
}
this._l01_a = this._l12_a, this._l12_a = this._l23_a;
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var catmullRomClosed = ((function custom(alpha) {
function catmullRom(context) {
return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
}
catmullRom.alpha = function(alpha) {
return custom(+alpha);
};
return catmullRom;
}))(0.5);
function CatmullRomOpen(context, alpha) {
this._context = context;
this._alpha = alpha;
}
CatmullRomOpen.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 = this._x2 =
this._y0 = this._y1 = this._y2 = NaN;
this._l01_a = this._l12_a = this._l23_a =
this._l01_2a = this._l12_2a = this._l23_2a =
this._point = 0;
},
lineEnd: function() {
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
if (this._point) {
var x23 = this._x2 - x,
y23 = this._y2 - y;
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
}
switch (this._point) {
case 0: this._point = 1; break;
case 1: this._point = 2; break;
case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
case 3: this._point = 4; // proceed
default: point$4(this, x, y); break;
}
this._l01_a = this._l12_a, this._l12_a = this._l23_a;
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var catmullRomOpen = ((function custom(alpha) {
function catmullRom(context) {
return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
}
catmullRom.alpha = function(alpha) {
return custom(+alpha);
};
return catmullRom;
}))(0.5);
function LinearClosed(context) {
this._context = context;
}
LinearClosed.prototype = {
areaStart: noop$2,
areaEnd: noop$2,
lineStart: function() {
this._point = 0;
},
lineEnd: function() {
if (this._point) this._context.closePath();
},
point: function(x, y) {
x = +x, y = +y;
if (this._point) this._context.lineTo(x, y);
else this._point = 1, this._context.moveTo(x, y);
}
};
var linearClosed = function(context) {
return new LinearClosed(context);
};
function sign$1(x) {
return x < 0 ? -1 : 1;
}
// Calculate the slopes of the tangents (Hermite-type interpolation) based on
// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
// NOV(II), P. 443, 1990.
function slope3(that, x2, y2) {
var h0 = that._x1 - that._x0,
h1 = x2 - that._x1,
s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
p = (s0 * h1 + s1 * h0) / (h0 + h1);
return (sign$1(s0) + sign$1(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
}
// Calculate a one-sided slope.
function slope2(that, t) {
var h = that._x1 - that._x0;
return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
}
// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
function point$5(that, t0, t1) {
var x0 = that._x0,
y0 = that._y0,
x1 = that._x1,
y1 = that._y1,
dx = (x1 - x0) / 3;
that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
}
function MonotoneX(context) {
this._context = context;
}
MonotoneX.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 =
this._y0 = this._y1 =
this._t0 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 2: this._context.lineTo(this._x1, this._y1); break;
case 3: point$5(this, this._t0, slope2(this, this._t0)); break;
}
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
var t1 = NaN;
x = +x, y = +y;
if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; break;
case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;
}
this._x0 = this._x1, this._x1 = x;
this._y0 = this._y1, this._y1 = y;
this._t0 = t1;
}
};
function MonotoneY(context) {
this._context = new ReflectContext(context);
}
(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
MonotoneX.prototype.point.call(this, y, x);
};
function ReflectContext(context) {
this._context = context;
}
ReflectContext.prototype = {
moveTo: function(x, y) { this._context.moveTo(y, x); },
closePath: function() { this._context.closePath(); },
lineTo: function(x, y) { this._context.lineTo(y, x); },
bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
};
function monotoneX(context) {
return new MonotoneX(context);
}
function monotoneY(context) {
return new MonotoneY(context);
}
function Natural(context) {
this._context = context;
}
Natural.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x = [];
this._y = [];
},
lineEnd: function() {
var x = this._x,
y = this._y,
n = x.length;
if (n) {
this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
if (n === 2) {
this._context.lineTo(x[1], y[1]);
} else {
var px = controlPoints(x),
py = controlPoints(y);
for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
}
}
}
if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
this._line = 1 - this._line;
this._x = this._y = null;
},
point: function(x, y) {
this._x.push(+x);
this._y.push(+y);
}
};
// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
function controlPoints(x) {
var i,
n = x.length - 1,
m,
a = new Array(n),
b = new Array(n),
r = new Array(n);
a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
a[n - 1] = r[n - 1] / b[n - 1];
for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
b[n - 1] = (x[n] + a[n - 1]) / 2;
for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
return [a, b];
}
var natural = function(context) {
return new Natural(context);
};
function Step(context, t) {
this._context = context;
this._t = t;
}
Step.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x = this._y = NaN;
this._point = 0;
},
lineEnd: function() {
if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; // proceed
default: {
if (this._t <= 0) {
this._context.lineTo(this._x, y);
this._context.lineTo(x, y);
} else {
var x1 = this._x * (1 - this._t) + x * this._t;
this._context.lineTo(x1, this._y);
this._context.lineTo(x1, y);
}
break;
}
}
this._x = x, this._y = y;
}
};
var step = function(context) {
return new Step(context, 0.5);
};
function stepBefore(context) {
return new Step(context, 0);
}
function stepAfter(context) {
return new Step(context, 1);
}
var slice$5 = Array.prototype.slice;
var none$1 = function(series, order) {
if (!((n = series.length) > 1)) return;
for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
s0 = s1, s1 = series[order[i]];
for (var j = 0; j < m; ++j) {
s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
}
}
};
var none$2 = function(series) {
var n = series.length, o = new Array(n);
while (--n >= 0) o[n] = n;
return o;
};
function stackValue(d, key) {
return d[key];
}
var stack = function() {
var keys = constant$10([]),
order = none$2,
offset = none$1,
value = stackValue;
function stack(data) {
var kz = keys.apply(this, arguments),
i,
m = data.length,
n = kz.length,
sz = new Array(n),
oz;
for (i = 0; i < n; ++i) {
for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
si[j] = sij = [0, +value(data[j], ki, j, data)];
sij.data = data[j];
}
si.key = ki;
}
for (i = 0, oz = order(sz); i < n; ++i) {
sz[oz[i]].index = i;
}
offset(sz, oz);
return sz;
}
stack.keys = function(_) {
return arguments.length ? (keys = typeof _ === "function" ? _ : constant$10(slice$5.call(_)), stack) : keys;
};
stack.value = function(_) {
return arguments.length ? (value = typeof _ === "function" ? _ : constant$10(+_), stack) : value;
};
stack.order = function(_) {
return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$10(slice$5.call(_)), stack) : order;
};
stack.offset = function(_) {
return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;
};
return stack;
};
var expand = function(series, order) {
if (!((n = series.length) > 0)) return;
for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
}
none$1(series, order);
};
var silhouette = function(series, order) {
if (!((n = series.length) > 0)) return;
for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
s0[j][1] += s0[j][0] = -y / 2;
}
none$1(series, order);
};
var wiggle = function(series, order) {
if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
var si = series[order[i]],
sij0 = si[j][1] || 0,
sij1 = si[j - 1][1] || 0,
s3 = (sij0 - sij1) / 2;
for (var k = 0; k < i; ++k) {
var sk = series[order[k]],
skj0 = sk[j][1] || 0,
skj1 = sk[j - 1][1] || 0;
s3 += skj0 - skj1;
}
s1 += sij0, s2 += s3 * sij0;
}
s0[j - 1][1] += s0[j - 1][0] = y;
if (s1) y -= s2 / s1;
}
s0[j - 1][1] += s0[j - 1][0] = y;
none$1(series, order);
};
var ascending$2 = function(series) {
var sums = series.map(sum$2);
return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });
};
function sum$2(series) {
var s = 0, i = -1, n = series.length, v;
while (++i < n) if (v = +series[i][1]) s += v;
return s;
}
var descending$2 = function(series) {
return ascending$2(series).reverse();
};
var insideOut = function(series) {
var n = series.length,
i,
j,
sums = series.map(sum$2),
order = none$2(series).sort(function(a, b) { return sums[b] - sums[a]; }),
top = 0,
bottom = 0,
tops = [],
bottoms = [];
for (i = 0; i < n; ++i) {
j = order[i];
if (top < bottom) {
top += sums[j];
tops.push(j);
} else {
bottom += sums[j];
bottoms.push(j);
}
}
return bottoms.reverse().concat(tops);
};
var reverse = function(series) {
return none$2(series).reverse();
};
var constant$11 = function(x) {
return function() {
return x;
};
};
function x$4(d) {
return d[0];
}
function y$4(d) {
return d[1];
}
function RedBlackTree() {
this._ = null; // root node
}
function RedBlackNode(node) {
node.U = // parent node
node.C = // color - true for red, false for black
node.L = // left node
node.R = // right node
node.P = // previous node
node.N = null; // next node
}
RedBlackTree.prototype = {
constructor: RedBlackTree,
insert: function(after, node) {
var parent, grandpa, uncle;
if (after) {
node.P = after;
node.N = after.N;
if (after.N) after.N.P = node;
after.N = node;
if (after.R) {
after = after.R;
while (after.L) after = after.L;
after.L = node;
} else {
after.R = node;
}
parent = after;
} else if (this._) {
after = RedBlackFirst(this._);
node.P = null;
node.N = after;
after.P = after.L = node;
parent = after;
} else {
node.P = node.N = null;
this._ = node;
parent = null;
}
node.L = node.R = null;
node.U = parent;
node.C = true;
after = node;
while (parent && parent.C) {
grandpa = parent.U;
if (parent === grandpa.L) {
uncle = grandpa.R;
if (uncle && uncle.C) {
parent.C = uncle.C = false;
grandpa.C = true;
after = grandpa;
} else {
if (after === parent.R) {
RedBlackRotateLeft(this, parent);
after = parent;
parent = after.U;
}
parent.C = false;
grandpa.C = true;
RedBlackRotateRight(this, grandpa);
}
} else {
uncle = grandpa.L;
if (uncle && uncle.C) {
parent.C = uncle.C = false;
grandpa.C = true;
after = grandpa;
} else {
if (after === parent.L) {
RedBlackRotateRight(this, parent);
after = parent;
parent = after.U;
}
parent.C = false;
grandpa.C = true;
RedBlackRotateLeft(this, grandpa);
}
}
parent = after.U;
}
this._.C = false;
},
remove: function(node) {
if (node.N) node.N.P = node.P;
if (node.P) node.P.N = node.N;
node.N = node.P = null;
var parent = node.U,
sibling,
left = node.L,
right = node.R,
next,
red;
if (!left) next = right;
else if (!right) next = left;
else next = RedBlackFirst(right);
if (parent) {
if (parent.L === node) parent.L = next;
else parent.R = next;
} else {
this._ = next;
}
if (left && right) {
red = next.C;
next.C = node.C;
next.L = left;
left.U = next;
if (next !== right) {
parent = next.U;
next.U = node.U;
node = next.R;
parent.L = node;
next.R = right;
right.U = next;
} else {
next.U = parent;
parent = next;
node = next.R;
}
} else {
red = node.C;
node = next;
}
if (node) node.U = parent;
if (red) return;
if (node && node.C) { node.C = false; return; }
do {
if (node === this._) break;
if (node === parent.L) {
sibling = parent.R;
if (sibling.C) {
sibling.C = false;
parent.C = true;
RedBlackRotateLeft(this, parent);
sibling = parent.R;
}
if ((sibling.L && sibling.L.C)
|| (sibling.R && sibling.R.C)) {
if (!sibling.R || !sibling.R.C) {
sibling.L.C = false;
sibling.C = true;
RedBlackRotateRight(this, sibling);
sibling = parent.R;
}
sibling.C = parent.C;
parent.C = sibling.R.C = false;
RedBlackRotateLeft(this, parent);
node = this._;
break;
}
} else {
sibling = parent.L;
if (sibling.C) {
sibling.C = false;
parent.C = true;
RedBlackRotateRight(this, parent);
sibling = parent.L;
}
if ((sibling.L && sibling.L.C)
|| (sibling.R && sibling.R.C)) {
if (!sibling.L || !sibling.L.C) {
sibling.R.C = false;
sibling.C = true;
RedBlackRotateLeft(this, sibling);
sibling = parent.L;
}
sibling.C = parent.C;
parent.C = sibling.L.C = false;
RedBlackRotateRight(this, parent);
node = this._;
break;
}
}
sibling.C = true;
node = parent;
parent = parent.U;
} while (!node.C);
if (node) node.C = false;
}
};
function RedBlackRotateLeft(tree, node) {
var p = node,
q = node.R,
parent = p.U;
if (parent) {
if (parent.L === p) parent.L = q;
else parent.R = q;
} else {
tree._ = q;
}
q.U = parent;
p.U = q;
p.R = q.L;
if (p.R) p.R.U = p;
q.L = p;
}
function RedBlackRotateRight(tree, node) {
var p = node,
q = node.L,
parent = p.U;
if (parent) {
if (parent.L === p) parent.L = q;
else parent.R = q;
} else {
tree._ = q;
}
q.U = parent;
p.U = q;
p.L = q.R;
if (p.L) p.L.U = p;
q.R = p;
}
function RedBlackFirst(node) {
while (node.L) node = node.L;
return node;
}
function createEdge(left, right, v0, v1) {
var edge = [null, null],
index = edges.push(edge) - 1;
edge.left = left;
edge.right = right;
if (v0) setEdgeEnd(edge, left, right, v0);
if (v1) setEdgeEnd(edge, right, left, v1);
cells[left.index].halfedges.push(index);
cells[right.index].halfedges.push(index);
return edge;
}
function createBorderEdge(left, v0, v1) {
var edge = [v0, v1];
edge.left = left;
return edge;
}
function setEdgeEnd(edge, left, right, vertex) {
if (!edge[0] && !edge[1]) {
edge[0] = vertex;
edge.left = left;
edge.right = right;
} else if (edge.left === right) {
edge[1] = vertex;
} else {
edge[0] = vertex;
}
}
// Liang–Barsky line clipping.
function clipEdge(edge, x0, y0, x1, y1) {
var a = edge[0],
b = edge[1],
ax = a[0],
ay = a[1],
bx = b[0],
by = b[1],
t0 = 0,
t1 = 1,
dx = bx - ax,
dy = by - ay,
r;
r = x0 - ax;
if (!dx && r > 0) return;
r /= dx;
if (dx < 0) {
if (r < t0) return;
if (r < t1) t1 = r;
} else if (dx > 0) {
if (r > t1) return;
if (r > t0) t0 = r;
}
r = x1 - ax;
if (!dx && r < 0) return;
r /= dx;
if (dx < 0) {
if (r > t1) return;
if (r > t0) t0 = r;
} else if (dx > 0) {
if (r < t0) return;
if (r < t1) t1 = r;
}
r = y0 - ay;
if (!dy && r > 0) return;
r /= dy;
if (dy < 0) {
if (r < t0) return;
if (r < t1) t1 = r;
} else if (dy > 0) {
if (r > t1) return;
if (r > t0) t0 = r;
}
r = y1 - ay;
if (!dy && r < 0) return;
r /= dy;
if (dy < 0) {
if (r > t1) return;
if (r > t0) t0 = r;
} else if (dy > 0) {
if (r < t0) return;
if (r < t1) t1 = r;
}
if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
return true;
}
function connectEdge(edge, x0, y0, x1, y1) {
var v1 = edge[1];
if (v1) return true;
var v0 = edge[0],
left = edge.left,
right = edge.right,
lx = left[0],
ly = left[1],
rx = right[0],
ry = right[1],
fx = (lx + rx) / 2,
fy = (ly + ry) / 2,
fm,
fb;
if (ry === ly) {
if (fx < x0 || fx >= x1) return;
if (lx > rx) {
if (!v0) v0 = [fx, y0];
else if (v0[1] >= y1) return;
v1 = [fx, y1];
} else {
if (!v0) v0 = [fx, y1];
else if (v0[1] < y0) return;
v1 = [fx, y0];
}
} else {
fm = (lx - rx) / (ry - ly);
fb = fy - fm * fx;
if (fm < -1 || fm > 1) {
if (lx > rx) {
if (!v0) v0 = [(y0 - fb) / fm, y0];
else if (v0[1] >= y1) return;
v1 = [(y1 - fb) / fm, y1];
} else {
if (!v0) v0 = [(y1 - fb) / fm, y1];
else if (v0[1] < y0) return;
v1 = [(y0 - fb) / fm, y0];
}
} else {
if (ly < ry) {
if (!v0) v0 = [x0, fm * x0 + fb];
else if (v0[0] >= x1) return;
v1 = [x1, fm * x1 + fb];
} else {
if (!v0) v0 = [x1, fm * x1 + fb];
else if (v0[0] < x0) return;
v1 = [x0, fm * x0 + fb];
}
}
}
edge[0] = v0;
edge[1] = v1;
return true;
}
function clipEdges(x0, y0, x1, y1) {
var i = edges.length,
edge;
while (i--) {
if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
|| !clipEdge(edge, x0, y0, x1, y1)
|| !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4
|| Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {
delete edges[i];
}
}
}
function createCell(site) {
return cells[site.index] = {
site: site,
halfedges: []
};
}
function cellHalfedgeAngle(cell, edge) {
var site = cell.site,
va = edge.left,
vb = edge.right;
if (site === vb) vb = va, va = site;
if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
if (site === va) va = edge[1], vb = edge[0];
else va = edge[0], vb = edge[1];
return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
}
function cellHalfedgeStart(cell, edge) {
return edge[+(edge.left !== cell.site)];
}
function cellHalfedgeEnd(cell, edge) {
return edge[+(edge.left === cell.site)];
}
function sortCellHalfedges() {
for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
var index = new Array(m),
array = new Array(m);
for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
index.sort(function(i, j) { return array[j] - array[i]; });
for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
for (j = 0; j < m; ++j) halfedges[j] = array[j];
}
}
}
function clipCells(x0, y0, x1, y1) {
var nCells = cells.length,
iCell,
cell,
site,
iHalfedge,
halfedges,
nHalfedges,
start,
startX,
startY,
end,
endX,
endY,
cover = true;
for (iCell = 0; iCell < nCells; ++iCell) {
if (cell = cells[iCell]) {
site = cell.site;
halfedges = cell.halfedges;
iHalfedge = halfedges.length;
// Remove any dangling clipped edges.
while (iHalfedge--) {
if (!edges[halfedges[iHalfedge]]) {
halfedges.splice(iHalfedge, 1);
}
}
// Insert any border edges as necessary.
iHalfedge = 0, nHalfedges = halfedges.length;
while (iHalfedge < nHalfedges) {
end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {
halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]
: Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]
: Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]
: Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]
: null)) - 1);
++nHalfedges;
}
}
if (nHalfedges) cover = false;
}
}
// If there weren’t any edges, have the closest site cover the extent.
// It doesn’t matter which corner of the extent we measure!
if (cover) {
var dx, dy, d2, dc = Infinity;
for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
if (cell = cells[iCell]) {
site = cell.site;
dx = site[0] - x0;
dy = site[1] - y0;
d2 = dx * dx + dy * dy;
if (d2 < dc) dc = d2, cover = cell;
}
}
if (cover) {
var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
cover.halfedges.push(
edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
edges.push(createBorderEdge(site, v01, v11)) - 1,
edges.push(createBorderEdge(site, v11, v10)) - 1,
edges.push(createBorderEdge(site, v10, v00)) - 1
);
}
}
// Lastly delete any cells with no edges; these were entirely clipped.
for (iCell = 0; iCell < nCells; ++iCell) {
if (cell = cells[iCell]) {
if (!cell.halfedges.length) {
delete cells[iCell];
}
}
}
}
var circlePool = [];
var firstCircle;
function Circle() {
RedBlackNode(this);
this.x =
this.y =
this.arc =
this.site =
this.cy = null;
}
function attachCircle(arc) {
var lArc = arc.P,
rArc = arc.N;
if (!lArc || !rArc) return;
var lSite = lArc.site,
cSite = arc.site,
rSite = rArc.site;
if (lSite === rSite) return;
var bx = cSite[0],
by = cSite[1],
ax = lSite[0] - bx,
ay = lSite[1] - by,
cx = rSite[0] - bx,
cy = rSite[1] - by;
var d = 2 * (ax * cy - ay * cx);
if (d >= -epsilon2$2) return;
var ha = ax * ax + ay * ay,
hc = cx * cx + cy * cy,
x = (cy * ha - ay * hc) / d,
y = (ax * hc - cx * ha) / d;
var circle = circlePool.pop() || new Circle;
circle.arc = arc;
circle.site = cSite;
circle.x = x + bx;
circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
arc.circle = circle;
var before = null,
node = circles._;
while (node) {
if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
if (node.L) node = node.L;
else { before = node.P; break; }
} else {
if (node.R) node = node.R;
else { before = node; break; }
}
}
circles.insert(before, circle);
if (!before) firstCircle = circle;
}
function detachCircle(arc) {
var circle = arc.circle;
if (circle) {
if (!circle.P) firstCircle = circle.N;
circles.remove(circle);
circlePool.push(circle);
RedBlackNode(circle);
arc.circle = null;
}
}
var beachPool = [];
function Beach() {
RedBlackNode(this);
this.edge =
this.site =
this.circle = null;
}
function createBeach(site) {
var beach = beachPool.pop() || new Beach;
beach.site = site;
return beach;
}
function detachBeach(beach) {
detachCircle(beach);
beaches.remove(beach);
beachPool.push(beach);
RedBlackNode(beach);
}
function removeBeach(beach) {
var circle = beach.circle,
x = circle.x,
y = circle.cy,
vertex = [x, y],
previous = beach.P,
next = beach.N,
disappearing = [beach];
detachBeach(beach);
var lArc = previous;
while (lArc.circle
&& Math.abs(x - lArc.circle.x) < epsilon$4
&& Math.abs(y - lArc.circle.cy) < epsilon$4) {
previous = lArc.P;
disappearing.unshift(lArc);
detachBeach(lArc);
lArc = previous;
}
disappearing.unshift(lArc);
detachCircle(lArc);
var rArc = next;
while (rArc.circle
&& Math.abs(x - rArc.circle.x) < epsilon$4
&& Math.abs(y - rArc.circle.cy) < epsilon$4) {
next = rArc.N;
disappearing.push(rArc);
detachBeach(rArc);
rArc = next;
}
disappearing.push(rArc);
detachCircle(rArc);
var nArcs = disappearing.length,
iArc;
for (iArc = 1; iArc < nArcs; ++iArc) {
rArc = disappearing[iArc];
lArc = disappearing[iArc - 1];
setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
}
lArc = disappearing[0];
rArc = disappearing[nArcs - 1];
rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
attachCircle(lArc);
attachCircle(rArc);
}
function addBeach(site) {
var x = site[0],
directrix = site[1],
lArc,
rArc,
dxl,
dxr,
node = beaches._;
while (node) {
dxl = leftBreakPoint(node, directrix) - x;
if (dxl > epsilon$4) node = node.L; else {
dxr = x - rightBreakPoint(node, directrix);
if (dxr > epsilon$4) {
if (!node.R) {
lArc = node;
break;
}
node = node.R;
} else {
if (dxl > -epsilon$4) {
lArc = node.P;
rArc = node;
} else if (dxr > -epsilon$4) {
lArc = node;
rArc = node.N;
} else {
lArc = rArc = node;
}
break;
}
}
}
createCell(site);
var newArc = createBeach(site);
beaches.insert(lArc, newArc);
if (!lArc && !rArc) return;
if (lArc === rArc) {
detachCircle(lArc);
rArc = createBeach(lArc.site);
beaches.insert(newArc, rArc);
newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
attachCircle(lArc);
attachCircle(rArc);
return;
}
if (!rArc) { // && lArc
newArc.edge = createEdge(lArc.site, newArc.site);
return;
}
// else lArc !== rArc
detachCircle(lArc);
detachCircle(rArc);
var lSite = lArc.site,
ax = lSite[0],
ay = lSite[1],
bx = site[0] - ax,
by = site[1] - ay,
rSite = rArc.site,
cx = rSite[0] - ax,
cy = rSite[1] - ay,
d = 2 * (bx * cy - by * cx),
hb = bx * bx + by * by,
hc = cx * cx + cy * cy,
vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
setEdgeEnd(rArc.edge, lSite, rSite, vertex);
newArc.edge = createEdge(lSite, site, null, vertex);
rArc.edge = createEdge(site, rSite, null, vertex);
attachCircle(lArc);
attachCircle(rArc);
}
function leftBreakPoint(arc, directrix) {
var site = arc.site,
rfocx = site[0],
rfocy = site[1],
pby2 = rfocy - directrix;
if (!pby2) return rfocx;
var lArc = arc.P;
if (!lArc) return -Infinity;
site = lArc.site;
var lfocx = site[0],
lfocy = site[1],
plby2 = lfocy - directrix;
if (!plby2) return lfocx;
var hl = lfocx - rfocx,
aby2 = 1 / pby2 - 1 / plby2,
b = hl / plby2;
if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
return (rfocx + lfocx) / 2;
}
function rightBreakPoint(arc, directrix) {
var rArc = arc.N;
if (rArc) return leftBreakPoint(rArc, directrix);
var site = arc.site;
return site[1] === directrix ? site[0] : Infinity;
}
var epsilon$4 = 1e-6;
var epsilon2$2 = 1e-12;
var beaches;
var cells;
var circles;
var edges;
function triangleArea(a, b, c) {
return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
}
function lexicographic(a, b) {
return b[1] - a[1]
|| b[0] - a[0];
}
function Diagram(sites, extent) {
var site = sites.sort(lexicographic).pop(),
x,
y,
circle;
edges = [];
cells = new Array(sites.length);
beaches = new RedBlackTree;
circles = new RedBlackTree;
while (true) {
circle = firstCircle;
if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
if (site[0] !== x || site[1] !== y) {
addBeach(site);
x = site[0], y = site[1];
}
site = sites.pop();
} else if (circle) {
removeBeach(circle.arc);
} else {
break;
}
}
sortCellHalfedges();
if (extent) {
var x0 = +extent[0][0],
y0 = +extent[0][1],
x1 = +extent[1][0],
y1 = +extent[1][1];
clipEdges(x0, y0, x1, y1);
clipCells(x0, y0, x1, y1);
}
this.edges = edges;
this.cells = cells;
beaches =
circles =
edges =
cells = null;
}
Diagram.prototype = {
constructor: Diagram,
polygons: function() {
var edges = this.edges;
return this.cells.map(function(cell) {
var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
polygon.data = cell.site.data;
return polygon;
});
},
triangles: function() {
var triangles = [],
edges = this.edges;
this.cells.forEach(function(cell, i) {
if (!(m = (halfedges = cell.halfedges).length)) return;
var site = cell.site,
halfedges,
j = -1,
m,
s0,
e1 = edges[halfedges[m - 1]],
s1 = e1.left === site ? e1.right : e1.left;
while (++j < m) {
s0 = s1;
e1 = edges[halfedges[j]];
s1 = e1.left === site ? e1.right : e1.left;
if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
triangles.push([site.data, s0.data, s1.data]);
}
}
});
return triangles;
},
links: function() {
return this.edges.filter(function(edge) {
return edge.right;
}).map(function(edge) {
return {
source: edge.left.data,
target: edge.right.data
};
});
},
find: function(x, y, radius) {
var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;
// Use the previously-found cell, or start with an arbitrary one.
while (!(cell = that.cells[i1])) if (++i1 >= n) return null;
var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;
// Traverse the half-edges to find a closer cell, if any.
do {
cell = that.cells[i0 = i1], i1 = null;
cell.halfedges.forEach(function(e) {
var edge = that.edges[e], v = edge.left;
if ((v === cell.site || !v) && !(v = edge.right)) return;
var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;
if (v2 < d2) d2 = v2, i1 = v.index;
});
} while (i1 !== null);
that._found = i0;
return radius == null || d2 <= radius * radius ? cell.site : null;
}
};
var voronoi = function() {
var x$$1 = x$4,
y$$1 = y$4,
extent = null;
function voronoi(data) {
return new Diagram(data.map(function(d, i) {
var s = [Math.round(x$$1(d, i, data) / epsilon$4) * epsilon$4, Math.round(y$$1(d, i, data) / epsilon$4) * epsilon$4];
s.index = i;
s.data = d;
return s;
}), extent);
}
voronoi.polygons = function(data) {
return voronoi(data).polygons();
};
voronoi.links = function(data) {
return voronoi(data).links();
};
voronoi.triangles = function(data) {
return voronoi(data).triangles();
};
voronoi.x = function(_) {
return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : x$$1;
};
voronoi.y = function(_) {
return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : y$$1;
};
voronoi.extent = function(_) {
return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
};
voronoi.size = function(_) {
return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
};
return voronoi;
};
var constant$12 = function(x) {
return function() {
return x;
};
};
function ZoomEvent(target, type, transform) {
this.target = target;
this.type = type;
this.transform = transform;
}
function Transform(k, x, y) {
this.k = k;
this.x = x;
this.y = y;
}
Transform.prototype = {
constructor: Transform,
scale: function(k) {
return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
},
translate: function(x, y) {
return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
},
apply: function(point) {
return [point[0] * this.k + this.x, point[1] * this.k + this.y];
},
applyX: function(x) {
return x * this.k + this.x;
},
applyY: function(y) {
return y * this.k + this.y;
},
invert: function(location) {
return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
},
invertX: function(x) {
return (x - this.x) / this.k;
},
invertY: function(y) {
return (y - this.y) / this.k;
},
rescaleX: function(x) {
return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
},
rescaleY: function(y) {
return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
},
toString: function() {
return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
}
};
var identity$8 = new Transform(1, 0, 0);
transform$1.prototype = Transform.prototype;
function transform$1(node) {
return node.__zoom || identity$8;
}
function nopropagation$2() {
exports.event.stopImmediatePropagation();
}
var noevent$2 = function() {
exports.event.preventDefault();
exports.event.stopImmediatePropagation();
};
// Ignore right-click, since that should open the context menu.
function defaultFilter$2() {
return !exports.event.button;
}
function defaultExtent$1() {
var e = this, w, h;
if (e instanceof SVGElement) {
e = e.ownerSVGElement || e;
w = e.width.baseVal.value;
h = e.height.baseVal.value;
} else {
w = e.clientWidth;
h = e.clientHeight;
}
return [[0, 0], [w, h]];
}
function defaultTransform() {
return this.__zoom || identity$8;
}
var zoom = function() {
var filter = defaultFilter$2,
extent = defaultExtent$1,
k0 = 0,
k1 = Infinity,
x0 = -k1,
x1 = k1,
y0 = x0,
y1 = x1,
duration = 250,
interpolate$$1 = interpolateZoom,
gestures = [],
listeners = dispatch("start", "zoom", "end"),
touchstarting,
touchending,
touchDelay = 500,
wheelDelay = 150;
function zoom(selection$$1) {
selection$$1
.on("wheel.zoom", wheeled)
.on("mousedown.zoom", mousedowned)
.on("dblclick.zoom", dblclicked)
.on("touchstart.zoom", touchstarted)
.on("touchmove.zoom", touchmoved)
.on("touchend.zoom touchcancel.zoom", touchended)
.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
.property("__zoom", defaultTransform);
}
zoom.transform = function(collection, transform) {
var selection$$1 = collection.selection ? collection.selection() : collection;
selection$$1.property("__zoom", defaultTransform);
if (collection !== selection$$1) {
schedule(collection, transform);
} else {
selection$$1.interrupt().each(function() {
gesture(this, arguments)
.start()
.zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
.end();
});
}
};
zoom.scaleBy = function(selection$$1, k) {
zoom.scaleTo(selection$$1, function() {
var k0 = this.__zoom.k,
k1 = typeof k === "function" ? k.apply(this, arguments) : k;
return k0 * k1;
});
};
zoom.scaleTo = function(selection$$1, k) {
zoom.transform(selection$$1, function() {
var e = extent.apply(this, arguments),
t0 = this.__zoom,
p0 = centroid(e),
p1 = t0.invert(p0),
k1 = typeof k === "function" ? k.apply(this, arguments) : k;
return constrain(translate(scale(t0, k1), p0, p1), e);
});
};
zoom.translateBy = function(selection$$1, x, y) {
zoom.transform(selection$$1, function() {
return constrain(this.__zoom.translate(
typeof x === "function" ? x.apply(this, arguments) : x,
typeof y === "function" ? y.apply(this, arguments) : y
), extent.apply(this, arguments));
});
};
function scale(transform, k) {
k = Math.max(k0, Math.min(k1, k));
return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
}
function translate(transform, p0, p1) {
var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
}
function constrain(transform, extent) {
var dx0 = transform.invertX(extent[0][0]) - x0,
dx1 = transform.invertX(extent[1][0]) - x1,
dy0 = transform.invertY(extent[0][1]) - y0,
dy1 = transform.invertY(extent[1][1]) - y1;
return transform.translate(
dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
);
}
function centroid(extent) {
return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
}
function schedule(transition$$1, transform, center) {
transition$$1
.on("start.zoom", function() { gesture(this, arguments).start(); })
.on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
.tween("zoom", function() {
var that = this,
args = arguments,
g = gesture(that, args),
e = extent.apply(that, args),
p = center || centroid(e),
w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
a = that.__zoom,
b = typeof transform === "function" ? transform.apply(that, args) : transform,
i = interpolate$$1(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
return function(t) {
if (t === 1) t = b; // Avoid rounding error on end.
else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
g.zoom(null, t);
};
});
}
function gesture(that, args) {
for (var i = 0, n = gestures.length, g; i < n; ++i) {
if ((g = gestures[i]).that === that) {
return g;
}
}
return new Gesture(that, args);
}
function Gesture(that, args) {
this.that = that;
this.args = args;
this.index = -1;
this.active = 0;
this.extent = extent.apply(that, args);
}
Gesture.prototype = {
start: function() {
if (++this.active === 1) {
this.index = gestures.push(this) - 1;
this.emit("start");
}
return this;
},
zoom: function(key, transform) {
if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
this.that.__zoom = transform;
this.emit("zoom");
return this;
},
end: function() {
if (--this.active === 0) {
gestures.splice(this.index, 1);
this.index = -1;
this.emit("end");
}
return this;
},
emit: function(type) {
customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
}
};
function wheeled() {
if (!filter.apply(this, arguments)) return;
var g = gesture(this, arguments),
t = this.__zoom,
k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),
p = mouse(this);
// If the mouse is in the same location as before, reuse it.
// If there were recent wheel events, reset the wheel idle timeout.
if (g.wheel) {
if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
g.mouse[1] = t.invert(g.mouse[0] = p);
}
clearTimeout(g.wheel);
}
// If this wheel event won’t trigger a transform change, ignore it.
else if (t.k === k) return;
// Otherwise, capture the mouse point and location at the start.
else {
g.mouse = [p, t.invert(p)];
interrupt(this);
g.start();
}
noevent$2();
g.wheel = setTimeout(wheelidled, wheelDelay);
g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));
function wheelidled() {
g.wheel = null;
g.end();
}
}
function mousedowned() {
if (touchending || !filter.apply(this, arguments)) return;
var g = gesture(this, arguments),
v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
p = mouse(this);
dragDisable(exports.event.view);
nopropagation$2();
g.mouse = [p, this.__zoom.invert(p)];
interrupt(this);
g.start();
function mousemoved() {
noevent$2();
g.moved = true;
g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
}
function mouseupped() {
v.on("mousemove.zoom mouseup.zoom", null);
yesdrag(exports.event.view, g.moved);
noevent$2();
g.end();
}
}
function dblclicked() {
if (!filter.apply(this, arguments)) return;
var t0 = this.__zoom,
p0 = mouse(this),
p1 = t0.invert(p0),
k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),
t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));
noevent$2();
if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);
else select(this).call(zoom.transform, t1);
}
function touchstarted() {
if (!filter.apply(this, arguments)) return;
var g = gesture(this, arguments),
touches$$1 = exports.event.changedTouches,
started,
n = touches$$1.length, i, t, p;
nopropagation$2();
for (i = 0; i < n; ++i) {
t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
p = [p, this.__zoom.invert(p), t.identifier];
if (!g.touch0) g.touch0 = p, started = true;
else if (!g.touch1) g.touch1 = p;
}
// If this is a dbltap, reroute to the (optional) dblclick.zoom handler.
if (touchstarting) {
touchstarting = clearTimeout(touchstarting);
if (!g.touch1) {
g.end();
p = select(this).on("dblclick.zoom");
if (p) p.apply(this, arguments);
return;
}
}
if (started) {
touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
interrupt(this);
g.start();
}
}
function touchmoved() {
var g = gesture(this, arguments),
touches$$1 = exports.event.changedTouches,
n = touches$$1.length, i, t, p, l;
noevent$2();
if (touchstarting) touchstarting = clearTimeout(touchstarting);
for (i = 0; i < n; ++i) {
t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
}
t = g.that.__zoom;
if (g.touch1) {
var p0 = g.touch0[0], l0 = g.touch0[1],
p1 = g.touch1[0], l1 = g.touch1[1],
dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
t = scale(t, Math.sqrt(dp / dl));
p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
}
else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
else return;
g.zoom("touch", constrain(translate(t, p, l), g.extent));
}
function touchended() {
var g = gesture(this, arguments),
touches$$1 = exports.event.changedTouches,
n = touches$$1.length, i, t;
nopropagation$2();
if (touchending) clearTimeout(touchending);
touchending = setTimeout(function() { touchending = null; }, touchDelay);
for (i = 0; i < n; ++i) {
t = touches$$1[i];
if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
}
if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
if (!g.touch0) g.end();
}
zoom.filter = function(_) {
return arguments.length ? (filter = typeof _ === "function" ? _ : constant$12(!!_), zoom) : filter;
};
zoom.extent = function(_) {
return arguments.length ? (extent = typeof _ === "function" ? _ : constant$12([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
};
zoom.scaleExtent = function(_) {
return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];
};
zoom.translateExtent = function(_) {
return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];
};
zoom.duration = function(_) {
return arguments.length ? (duration = +_, zoom) : duration;
};
zoom.interpolate = function(_) {
return arguments.length ? (interpolate$$1 = _, zoom) : interpolate$$1;
};
zoom.on = function() {
var value = listeners.on.apply(listeners, arguments);
return value === listeners ? zoom : value;
};
return zoom;
};
var array$3 = Array.prototype;
var slice$6 = array$3.slice;
var ascending$3 = function(a, b) {
return a - b;
};
var area$3 = function(ring) {
var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];
while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];
return area;
};
var constant$13 = function(x) {
return function() {
return x;
};
};
var contains$2 = function(ring, hole) {
var i = -1, n = hole.length, c;
while (++i < n) if (c = ringContains(ring, hole[i])) return c;
return 0;
};
function ringContains(ring, point) {
var x = point[0], y = point[1], contains = -1;
for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {
var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];
if (segmentContains(pi, pj, point)) return 0;
if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;
}
return contains;
}
function segmentContains(a, b, c) {
var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);
}
function collinear(a, b, c) {
return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);
}
function within(p, q, r) {
return p <= q && q <= r || r <= q && q <= p;
}
var noop$3 = function() {};
var cases = [
[],
[[[1,1.5],[0.5,1]]],
[[[1.5,1],[1,1.5]]],
[[[1.5,1],[0.5,1]]],
[[[1,0.5],[1.5,1]]],
[[[1,0.5],[0.5,1]],[[1,1.5],[1.5,1]]],
[[[1,0.5],[1,1.5]]],
[[[1,0.5],[0.5,1]]],
[[[0.5,1],[1,0.5]]],
[[[1,1.5],[1,0.5]]],
[[[0.5,1],[1,1.5]],[[1.5,1],[1,0.5]]],
[[[1.5,1],[1,0.5]]],
[[[0.5,1],[1.5,1]]],
[[[1,1.5],[1.5,1]]],
[[[0.5,1],[1,1.5]]],
[]
];
var contours = function() {
var dx = 1,
dy = 1,
threshold = thresholdSturges,
smooth = smoothLinear;
function contours(values) {
var tz = threshold(values);
// Convert number of thresholds into uniform thresholds.
if (!Array.isArray(tz)) {
var domain = extent(values), start = domain[0], stop = domain[1];
tz = tickStep(start, stop, tz);
tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);
} else {
tz = tz.slice().sort(ascending$3);
}
// Accumulate, smooth contour rings, assign holes to exterior rings.
// Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js
var layers = tz.map(function(value) {
var polygons = [],
holes = [];
isorings(values, value, function(ring) {
smooth(ring, values, value);
if (area$3(ring) > 0) polygons.push([ring]);
else holes.push(ring);
});
holes.forEach(function(hole) {
for (var i = 0, n = polygons.length, polygon; i < n; ++i) {
if (contains$2((polygon = polygons[i])[0], hole)) {
polygon.push(hole);
return;
}
}
});
return polygons;
});
return layers.map(function(polygons, i) {
return {
type: "MultiPolygon",
value: tz[i],
coordinates: polygons
};
});
}
// Marching squares with isolines stitched into rings.
// Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js
function isorings(values, value, callback) {
var fragmentByStart = new Array,
fragmentByEnd = new Array,
x, y, t0, t1, t2, t3;
// Special case for the first row (y = -1, t2 = t3 = 0).
x = y = -1;
t1 = values[0] >= value;
cases[t1 << 1].forEach(stitch);
while (++x < dx - 1) {
t0 = t1, t1 = values[x + 1] >= value;
cases[t0 | t1 << 1].forEach(stitch);
}
cases[t1 << 0].forEach(stitch);
// General case for the intermediate rows.
while (++y < dy - 1) {
x = -1;
t1 = values[y * dx + dx] >= value;
t2 = values[y * dx] >= value;
cases[t1 << 1 | t2 << 2].forEach(stitch);
while (++x < dx - 1) {
t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;
t3 = t2, t2 = values[y * dx + x + 1] >= value;
cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);
}
cases[t1 | t2 << 3].forEach(stitch);
}
// Special case for the last row (y = dy - 1, t0 = t1 = 0).
x = -1;
t2 = values[y * dx] >= value;
cases[t2 << 2].forEach(stitch);
while (++x < dx - 1) {
t3 = t2, t2 = values[y * dx + x + 1] >= value;
cases[t2 << 2 | t3 << 3].forEach(stitch);
}
cases[t2 << 3].forEach(stitch);
function stitch(line) {
var start = [line[0][0] + x, line[0][1] + y],
end = [line[1][0] + x, line[1][1] + y],
startIndex = index(start),
endIndex = index(end),
f, g;
if (f = fragmentByEnd[startIndex]) {
if (g = fragmentByStart[endIndex]) {
delete fragmentByEnd[f.end];
delete fragmentByStart[g.start];
if (f === g) {
f.ring.push(end);
callback(f.ring);
} else {
fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};
}
} else {
delete fragmentByEnd[f.end];
f.ring.push(end);
fragmentByEnd[f.end = endIndex] = f;
}
} else if (f = fragmentByStart[endIndex]) {
if (g = fragmentByEnd[startIndex]) {
delete fragmentByStart[f.start];
delete fragmentByEnd[g.end];
if (f === g) {
f.ring.push(end);
callback(f.ring);
} else {
fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};
}
} else {
delete fragmentByStart[f.start];
f.ring.unshift(start);
fragmentByStart[f.start = startIndex] = f;
}
} else {
fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};
}
}
}
function index(point) {
return point[0] * 2 + point[1] * (dx + 1) * 4;
}
function smoothLinear(ring, values, value) {
ring.forEach(function(point) {
var x = point[0],
y = point[1],
xt = x | 0,
yt = y | 0,
v0,
v1 = values[yt * dx + xt];
if (x > 0 && x < dx && xt === x) {
v0 = values[yt * dx + xt - 1];
point[0] = x + (value - v0) / (v1 - v0) - 0.5;
}
if (y > 0 && y < dy && yt === y) {
v0 = values[(yt - 1) * dx + xt];
point[1] = y + (value - v0) / (v1 - v0) - 0.5;
}
});
}
contours.size = function(_) {
if (!arguments.length) return [dx, dy];
var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size");
return dx = _0, dy = _1, contours;
};
contours.thresholds = function(_) {
return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$13(slice$6.call(_)) : constant$13(_), contours) : threshold;
};
contours.smooth = function(_) {
return arguments.length ? (smooth = _ ? smoothLinear : noop$3, contours) : smooth === smoothLinear;
};
return contours;
};
// TODO Optimize edge cases.
// TODO Optimize index calculation.
// TODO Optimize arguments.
function blurX(source, target, r) {
var n = source.width,
m = source.height,
w = (r << 1) + 1;
for (var j = 0; j < m; ++j) {
for (var i = 0, sr = 0; i < n + r; ++i) {
if (i < n) {
sr += source.data[i + j * n];
}
if (i >= r) {
if (i >= w) {
sr -= source.data[i - w + j * n];
}
target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
}
}
}
}
// TODO Optimize edge cases.
// TODO Optimize index calculation.
// TODO Optimize arguments.
function blurY(source, target, r) {
var n = source.width,
m = source.height,
w = (r << 1) + 1;
for (var i = 0; i < n; ++i) {
for (var j = 0, sr = 0; j < m + r; ++j) {
if (j < m) {
sr += source.data[i + j * n];
}
if (j >= r) {
if (j >= w) {
sr -= source.data[i + (j - w) * n];
}
target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
}
}
}
}
function defaultX$1(d) {
return d[0];
}
function defaultY$1(d) {
return d[1];
}
var density = function() {
var x = defaultX$1,
y = defaultY$1,
dx = 960,
dy = 500,
r = 20, // blur radius
k = 2, // log2(grid cell size)
o = r * 3, // grid offset, to pad for blur
n = (dx + o * 2) >> k, // grid width
m = (dy + o * 2) >> k, // grid height
threshold = constant$13(20);
function density(data) {
var values0 = new Float32Array(n * m),
values1 = new Float32Array(n * m);
data.forEach(function(d, i, data) {
var xi = (x(d, i, data) + o) >> k,
yi = (y(d, i, data) + o) >> k;
if (xi >= 0 && xi < n && yi >= 0 && yi < m) {
++values0[xi + yi * n];
}
});
// TODO Optimize.
blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
var tz = threshold(values0);
// Convert number of thresholds into uniform thresholds.
if (!Array.isArray(tz)) {
var stop = max(values0);
tz = tickStep(0, stop, tz);
tz = range(0, Math.floor(stop / tz) * tz, tz);
tz.shift();
}
return contours()
.thresholds(tz)
.size([n, m])
(values0)
.map(transform);
}
function transform(geometry) {
geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.
geometry.coordinates.forEach(transformPolygon);
return geometry;
}
function transformPolygon(coordinates) {
coordinates.forEach(transformRing);
}
function transformRing(coordinates) {
coordinates.forEach(transformPoint);
}
// TODO Optimize.
function transformPoint(coordinates) {
coordinates[0] = coordinates[0] * Math.pow(2, k) - o;
coordinates[1] = coordinates[1] * Math.pow(2, k) - o;
}
function resize() {
o = r * 3;
n = (dx + o * 2) >> k;
m = (dy + o * 2) >> k;
return density;
}
density.x = function(_) {
return arguments.length ? (x = typeof _ === "function" ? _ : constant$13(+_), density) : x;
};
density.y = function(_) {
return arguments.length ? (y = typeof _ === "function" ? _ : constant$13(+_), density) : y;
};
density.size = function(_) {
if (!arguments.length) return [dx, dy];
var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size");
return dx = _0, dy = _1, resize();
};
density.cellSize = function(_) {
if (!arguments.length) return 1 << k;
if (!((_ = +_) >= 1)) throw new Error("invalid cell size");
return k = Math.floor(Math.log(_) / Math.LN2), resize();
};
density.thresholds = function(_) {
return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$13(slice$6.call(_)) : constant$13(_), density) : threshold;
};
density.bandwidth = function(_) {
if (!arguments.length) return Math.sqrt(r * (r + 1));
if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth");
return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();
};
return density;
};
var translateSelection = function(xy) {
return this.attr('transform', function(d,i) {
return 'translate('+[typeof xy == 'function' ? xy.call(this, d,i) : xy]+')';
});
};
var parseAttributes = function(name) {
if (typeof name === "string") {
var attr = {},
parts = name.split(/([\.#])/g), p;
name = parts.shift();
while ((p = parts.shift())) {
if (p == '.') attr['class'] = attr['class'] ? attr['class'] + ' ' + parts.shift() : parts.shift();
else if (p == '#') attr.id = parts.shift();
}
return {tag: name, attr: attr};
}
return name;
};
var append = function(name) {
var n = parseAttributes(name), s;
name = creator(n.tag);
s = this.select(function() {
return this.appendChild(name.apply(this, arguments));
});
//attrs not provided by default in v4
for (var key in n.attr) { s.attr(key, n.attr[key]); }
return s;
};
function constantNull$1() {
return null;
}
var insert = function(name, before) {
var n = parseAttributes(name),
create = creator(n.tag),
select$$1 = before == null ? constantNull$1 : typeof before === "function" ? before : selector(before);
var s = this.select(function() {
return this.insertBefore(create.apply(this, arguments), select$$1.apply(this, arguments) || null);
});
//attrs not provided by default in v4
for (var key in n.attr) { s.attr(key, n.attr[key]); }
return s;
};
var parent = function() {
var parents = [];
return this.filter(function() {
if (parents.indexOf(this.parentNode) > -1) return false;
parents.push(this.parentNode);
return true;
}).select(function() {
return this.parentNode;
});
};
var selectAppend = function(name) {
var select$$1 = selector(name),
n = parseAttributes(name), s;
name = creator(n.tag);
s = this.select(function() {
return select$$1.apply(this, arguments) ||
this.appendChild(name.apply(this, arguments));
});
//attrs not provided by default in v4
for (var key in n.attr) { s.attr(key, n.attr[key]); }
return s;
};
var tspans = function(lines, lh) {
return this.selectAll('tspan')
.data(function(d) {
return (typeof(lines) == 'function' ? lines(d) : lines)
.map(function(l) {
return { line: l, parent: d };
});
})
.enter()
.append('tspan')
.text(function(d) { return d.line; })
.attr('x', 0)
.attr('dy', function(d, i) { return i ? (typeof(lh) == 'function' ? lh(d.parent, d.line, i) : lh) || 15 : 0; });
};
var appendMany = function(data, name){
return this.selectAll(null).data(data).enter().append(name);
};
var at = function(name, value) {
if (typeof(name) == 'object'){
for (var key in name){
this.attr(key.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase(), name[key]);
}
return this;
} else{
return arguments.length == 1 ? this.attr(name) : this.attr(name, value);
}
};
function f(){
var functions = arguments;
//convert all string arguments into field accessors
var i = 0, l = functions.length;
while (i < l) {
if (typeof(functions[i]) === 'string' || typeof(functions[i]) === 'number'){
functions[i] = (function(str){ return function(d){ return d[str]; }; })(functions[i]);
}
i++;
}
//return composition of functions
return function(d) {
var i=0, l = functions.length;
while (i++ < l) d = functions[i-1].call(this, d);
return d;
};
}
f.not = function(d){ return !d; };
f.run = function(d){ return d(); };
f.objToFn = function(obj, defaultVal){
if (arguments.length == 1) defaultVal = undefined;
return function(str){
return typeof(obj[str]) !== undefined ? obj[str] : defaultVal;
};
};
var st = function(name, value) {
if (typeof(name) == 'object'){
for (var key in name){
addStyle(this, key, name[key]);
}
return this;
} else {
return arguments.length == 1 ? this.style(name) : addStyle(this, name, value);
}
function addStyle(sel, style, value){
style = style.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase();
var pxStyles = 'top left bottom right padding-top padding-left padding-bottom padding-right border-top b-width border-left-width border-botto-width m border-right-width margin-top margin-left margin-bottom margin-right font-size width height stroke-width line-height margin padding border max-width min-width';
if (~pxStyles.indexOf(style) ){
sel.style(style, typeof value == 'function' ? f(value, addPx) : addPx(value));
} else{
sel.style(style, value);
}
return sel;
}
function addPx(d){ return d.match ? d : d + 'px'; }
};
// while this might not be reprentative for all fonts, it is
// still better than assuming every character has the same width
// (set monospace=true if you want to bypass this)
var CHAR_W = {
A:7,a:7,B:8,b:7,C:8,c:6,D:9,d:7,E:7,e:7,F:7,f:4,G:9,g:7,H:9,h:7,I:3,i:3,J:5,j:3,K:8,k:6,L:7,l:3,M:11,
m:11,N:9,n:7,O:9,o:7,P:8,p:7,Q:9,q:7,R:8,r:4,S:8,s:6,T:7,t:4,U:9,u:7,V:7,v:6,W:11,w:9,X:7,x:6,Y:7,y:6,Z:7,z:5,
'.':2,',':2,':':2,';':2
};
var wordwrap = function(line, maxCharactersPerLine, minCharactersPerLine, monospace) {
var l, lines = [], w = [], words = [], w1, maxChars, minChars, maxLineW, minLineW;
w1 = line.split(' ');
w1.forEach(function(s, i) {
var w2 = s.split('-');
if (w2.length > 1) {
w2.forEach(function(t, j) {
w.push(t + (j < w2.length - 1 ? '-' : ''));
});
} else {
w.push(s + (i < w1.length - 1 ? ' ' : ''));
}
});
maxChars = maxCharactersPerLine || 40;
minChars = minCharactersPerLine || Math.max(3, Math.min(maxChars * 0.5, 0.75 * w.map(word_len).sort(num_asc)[Math.round(w.length / 2)]));
maxLineW = maxChars * CHAR_W.a;
minLineW = minChars * CHAR_W.a;
l = 0;
w.forEach(function(d) {
var ww = sum(d.split('').map(char_w));
if (l + ww > maxLineW && l > minLineW) {
lines.push(words.join(''));
words.length = 0;
l = 0;
}
l += ww;
return words.push(d);
});
if (words.length) {
lines.push(words.join(''));
}
return lines.filter(function(d) {
return d !== '';
});
function char_w(c) { return !monospace && CHAR_W[c] || CHAR_W.a; }
function word_len(d) { return d.length; }
function num_asc(a, b) { return a - b; }
};
var ascendingKey = function(key) {
return typeof key == 'function' ? function (a, b) {
return key(a) < key(b) ? -1 : key(a) > key(b) ? 1 : key(a) >= key(b) ? 0 : NaN;
} : function (a, b) {
return a[key] < b[key] ? -1 : a[key] > b[key] ? 1 : a[key] >= b[key] ? 0 : NaN;
};
};
var descendingKey = function(key) {
return typeof key == 'function' ? function (a, b) {
return key(b) < key(a) ? -1 : key(b) > key(a) ? 1 : key(b) >= key(a) ? 0 : NaN;
} : function (a, b) {
return b[key] < a[key] ? -1 : b[key] > a[key] ? 1 : b[key] >= a[key] ? 0 : NaN;
};
};
var conventions = function(c){
c = c || {};
c.margin = c.margin || {top: 20, right: 20, bottom: 20, left: 20}
;['top', 'right', 'bottom', 'left'].forEach(function(d){
if (!c.margin[d] && c.margin[d] != 0) c.margin[d] = 20 ;
});
c.width = c.width || c.totalWidth - c.margin.left - c.margin.right || 900;
c.height = c.height || c.totalHeight - c.margin.top - c.margin.bottom || 460;
c.totalWidth = c.width + c.margin.left + c.margin.right;
c.totalHeight = c.height + c.margin.top + c.margin.bottom;
c.parentSel = c.parentSel || select('body');
c.rootsvg = c.parentSel.append('svg');
c.svg = c.rootsvg
.attr('width', c.totalWidth)
.attr('height', c.totalHeight)
.append('g')
.attr('transform', 'translate(' + c.margin.left + ',' + c.margin.top + ')');
c.x = c.x || linear$2().range([0, c.width]);
c.y = c.y || linear$2().range([c.height, 0]);
c.xAxis = c.xAxis || axisBottom().scale(c.x);
c.yAxis = c.yAxis || axisLeft().scale(c.y);
c.drawAxis = function(){
c.svg.append('g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + c.height + ')')
.call(c.xAxis);
c.svg.append('g')
.attr('class', 'y axis')
.call(c.yAxis);
};
return c;
};
var attachTooltip = function(sel, tooltipSel, fieldFns){
if (!sel.size()) return;
tooltipSel = tooltipSel || select('.tooltip');
sel
.on('mouseover.attachTooltip', ttDisplay)
.on('mousemove.attachTooltip', ttMove)
.on('mouseout.attachTooltip', ttHide)
.on('click.attachTooltip', function(d){ console.log(d); });
var d = sel.datum();
fieldFns = fieldFns || d3keys(d)
.filter(function(str){
return (typeof d[str] != 'object') && (d[str] != 'array');
})
.map(function(str){
return function(d){ return str + ': <b>' + d[str] + '</b>'; };
});
function ttDisplay(d){
tooltipSel
.classed('tooltip-hidden', false)
.html('')
.appendMany(fieldFns, 'div')
.html(function(fn){ return fn(d); });
select(this).classed('tooltipped', true);
}
function ttMove(d){
var tt = tooltipSel;
if (!tt.size()) return;
var e = exports.event,
x = e.clientX,
y = e.clientY,
n = tt.node(),
nBB = n.getBoundingClientRect(),
doctop = (window.scrollY)? window.scrollY : (document.documentElement && document.documentElement.scrollTop)? document.documentElement.scrollTop : document.body.scrollTop,
topPos = y+doctop-nBB.height-18;
tt.style('top', (topPos < 0 ? 18 + y : topPos)+'px');
tt.style('left', Math.min(Math.max(20, (x-nBB.width/2)), window.innerWidth - nBB.width - 20)+'px');
}
function ttHide(d){
tooltipSel.classed('tooltip-hidden', true);
selectAll('.tooltipped').classed('tooltipped', false);
}
};
var loadData = function(){
var q = queue();
var args = [].slice.call(arguments);
var files = args.slice(0, args.length - 1);
var cb = args[args.length - 1];
files.forEach(function(d){
var type = d.split('.').reverse()[0];
var loadFn = {csv: csv$1, tsv: tsv$1, json: json}[type];
if (!loadFn) return cb(new Error('Invalid type', d));
q.defer(loadFn, d) ;
});
q.awaitAll(cb);
};
var nestBy = function(array, key){
return nest().key(key).entries(array).map(function(d){
d.values.key = d.key;
return d.values;
});
};
var round = function(n, p) {
return p ? Math.round(n * (p = Math.pow(10, p))) / p : Math.round(n);
};
// Clips the specified subject polygon to the specified clip polygon;
// requires the clip polygon to be counterclockwise and convex.
// https://en.wikipedia.org/wiki/Sutherland–Hodgman_algorithm
var polygonClip = function(clip, subject) {
var input,
closed = polygonClosed(subject),
i = -1,
n = clip.length - polygonClosed(clip),
j,
m,
a = clip[n - 1],
b,
c,
d;
while (++i < n) {
input = subject.slice();
subject.length = 0;
b = clip[i];
c = input[(m = input.length - closed) - 1];
j = -1;
while (++j < m) {
d = input[j];
if (polygonInside(d, a, b)) {
if (!polygonInside(c, a, b)) {
subject.push(polygonIntersect(c, d, a, b));
}
subject.push(d);
} else if (polygonInside(c, a, b)) {
subject.push(polygonIntersect(c, d, a, b));
}
c = d;
}
if (closed) subject.push(subject[0]);
a = b;
}
return subject;
};
function polygonInside(p, a, b) {
return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
}
// Intersect two infinite lines cd and ab.
function polygonIntersect(c, d, a, b) {
var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3,
y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3,
ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);
return [x1 + ua * x21, y1 + ua * y21];
}
// Returns true if the polygon is closed.
function polygonClosed(coordinates) {
var a = coordinates[0],
b = coordinates[coordinates.length - 1];
return !(a[0] - b[0] || a[1] - b[1]);
}
selection.prototype.translate = translateSelection;
transition.prototype.translate = translateSelection;
selection.prototype.append = append;
selection.prototype.insert = insert;
selection.prototype.parent = parent;
selection.prototype.selectAppend = selectAppend;
selection.prototype.tspans = tspans;
selection.prototype.appendMany = appendMany;
selection.prototype.at = at;
selection.prototype.st = st;
transition.prototype.at = at;
transition.prototype.st = st;
selection.prototype.prop = selection.prototype.property;
var abs$2 = Math.abs;
var atan$1 = Math.atan;
var atan2$2 = Math.atan2;
var cos$3 = Math.cos;
var floor$1 = Math.floor;
var max$3 = Math.max;
var min$2 = Math.min;
var sin$3 = Math.sin;
var epsilon$5 = 1e-6;
var epsilon2$3 = 1e-12;
var pi$5 = Math.PI;
var halfPi$4 = pi$5 / 2;
var degrees$2 = 180 / pi$5;
var radians$1 = pi$5 / 180;
function asin$2(x) {
return x > 1 ? halfPi$4 : x < -1 ? -halfPi$4 : Math.asin(x);
}
function acos$2(x) {
return x > 1 ? 0 : x < -1 ? pi$5 : Math.acos(x);
}
function sqrt$3(x) {
return x > 0 ? Math.sqrt(x) : 0;
}
var ginzburgPolyconicRaw = function(a, b, c, d, e, f, g, h) {
if (arguments.length < 8) h = 0;
function forward(lambda, phi) {
if (!phi) return [a * lambda / pi$5, 0];
var phi2 = phi * phi,
xB = a + phi2 * (b + phi2 * (c + phi2 * d)),
yB = phi * (e - 1 + phi2 * (f - h + phi2 * g)),
m = (xB * xB + yB * yB) / (2 * yB),
alpha = lambda * asin$2(xB / m) / pi$5;
return [m * sin$3(alpha), phi * (1 + phi2 * h) + m * (1 - cos$3(alpha))];
}
forward.invert = function(x, y) {
var lambda = pi$5 * x / a,
phi = y,
deltaLambda, deltaPhi, i = 50;
do {
var phi2 = phi * phi,
xB = a + phi2 * (b + phi2 * (c + phi2 * d)),
yB = phi * (e - 1 + phi2 * (f - h + phi2 * g)),
p = xB * xB + yB * yB,
q = 2 * yB,
m = p / q,
m2 = m * m,
dAlphadLambda = asin$2(xB / m) / pi$5,
alpha = lambda * dAlphadLambda,
xB2 = xB * xB,
dxBdPhi = (2 * b + phi2 * (4 * c + phi2 * 6 * d)) * phi,
dyBdPhi = e + phi2 * (3 * f + phi2 * 5 * g),
dpdPhi = 2 * (xB * dxBdPhi + yB * (dyBdPhi - 1)),
dqdPhi = 2 * (dyBdPhi - 1),
dmdPhi = (dpdPhi * q - p * dqdPhi) / (q * q),
cosAlpha = cos$3(alpha),
sinAlpha = sin$3(alpha),
mcosAlpha = m * cosAlpha,
msinAlpha = m * sinAlpha,
dAlphadPhi = ((lambda / pi$5) * (1 / sqrt$3(1 - xB2 / m2)) * (dxBdPhi * m - xB * dmdPhi)) / m2,
fx = msinAlpha - x,
fy = phi * (1 + phi2 * h) + m - mcosAlpha - y,
deltaxDeltaPhi = dmdPhi * sinAlpha + mcosAlpha * dAlphadPhi,
deltaxDeltaLambda = mcosAlpha * dAlphadLambda,
deltayDeltaPhi = 1 + dmdPhi - (dmdPhi * cosAlpha - msinAlpha * dAlphadPhi),
deltayDeltaLambda = msinAlpha * dAlphadLambda,
denominator = deltaxDeltaPhi * deltayDeltaLambda - deltayDeltaPhi * deltaxDeltaLambda;
if (!denominator) break;
lambda -= deltaLambda = (fy * deltaxDeltaPhi - fx * deltayDeltaPhi) / denominator;
phi -= deltaPhi = (fx * deltayDeltaLambda - fy * deltaxDeltaLambda) / denominator;
} while ((abs$2(deltaLambda) > epsilon$5 || abs$2(deltaPhi) > epsilon$5) && --i > 0);
return [lambda, phi];
};
return forward;
};
var ginzburg4Raw = ginzburgPolyconicRaw(2.8284, -1.6988, 0.75432, -0.18071, 1.76003, -0.38914, 0.042555);
var ginzburg5Raw = ginzburgPolyconicRaw(2.583819, -0.835827, 0.170354, -0.038094, 1.543313, -0.411435,0.082742);
var ginzburg6Raw = ginzburgPolyconicRaw(5 / 6 * pi$5, -0.62636, -0.0344, 0, 1.3493, -0.05524, 0, 0.045);
var ginzburg9Raw = ginzburgPolyconicRaw(2.6516, -0.76534, 0.19123, -0.047094, 1.36289, -0.13965,0.031762);
// Returns [sn, cn, dn](u + iv|m).
// Returns [sn, cn, dn, ph](u|m).
// Calculate F(phi+iPsi|m).
// See Abramowitz and Stegun, 17.4.11.
// Calculate F(phi|m) where m = k² = sin²α.
// See Abramowitz and Stegun, 17.6.7.
function interpolateLine(coordinates, m) {
var i = -1,
n = coordinates.length,
p0 = coordinates[0],
p1,
dx,
dy,
resampled = [];
while (++i < n) {
p1 = coordinates[i];
dx = (p1[0] - p0[0]) / m;
dy = (p1[1] - p0[1]) / m;
for (var j = 0; j < m; ++j) resampled.push([p0[0] + j * dx, p0[1] + j * dy]);
p0 = p1;
}
resampled.push(p1);
return resampled;
}
function naturalEarthRaw(lambda, phi) {
var phi2 = phi * phi, phi4 = phi2 * phi2;
return [
lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),
phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))
];
}
naturalEarthRaw.invert = function(x, y) {
var phi = y, i = 25, delta;
do {
var phi2 = phi * phi, phi4 = phi2 * phi2;
phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /
(1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
} while (abs$2(delta) > epsilon$5 && --i > 0);
return [
x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),
phi
];
};
var naturalEarth = function() {
return projection(naturalEarthRaw)
.scale(175.295);
};
// Note: 6-element arrays are used to denote the 3x3 affine transform matrix:
// [a, b, c,
// d, e, f,
// 0, 0, 1] - this redundant row is left out.
// Transform matrix for [a0, a1] -> [b0, b1].
// Inverts a transform matrix.
// Multiplies two 3x2 matrices.
// Creates a polyhedral projection.
// * root: a spanning tree of polygon faces. Nodes are automatically
// augmented with a transform matrix.
// * face: a function that returns the appropriate node for a given {lambda, phi}
// point (radians).
// * r: rotation angle for final polyhedral net. Defaults to -pi / 6 (for
// butterflies).
function outline(stream, node, parent) {
var point,
edges = node.edges,
n = edges.length,
edge,
multiPoint = {type: "MultiPoint", coordinates: node.face},
notPoles = node.face.filter(function(d) { return abs$2(d[1]) !== 90; }),
b = bounds({type: "MultiPoint", coordinates: notPoles}),
inside = false,
j = -1,
dx = b[1][0] - b[0][0];
// TODO
var c = dx === 180 || dx === 360
? [(b[0][0] + b[1][0]) / 2, (b[0][1] + b[1][1]) / 2]
: centroid(multiPoint);
// First find the shared edge…
if (parent) while (++j < n) {
if (edges[j] === parent) break;
}
++j;
for (var i = 0; i < n; ++i) {
edge = edges[(i + j) % n];
if (Array.isArray(edge)) {
if (!inside) {
stream.point((point = interpolate$1(edge[0], c)(epsilon$5))[0], point[1]);
inside = true;
}
stream.point((point = interpolate$1(edge[1], c)(epsilon$5))[0], point[1]);
} else {
inside = false;
if (edge !== parent) outline(stream, edge, node);
}
}
}
// TODO generate on-the-fly to avoid external modification.
var octahedron = [
[0, 90],
[-90, 0], [0, 0], [90, 0], [180, 0],
[0, -90]
];
[
[0, 2, 1],
[0, 3, 2],
[5, 1, 2],
[5, 2, 3],
[0, 1, 4],
[0, 4, 3],
[5, 4, 1],
[5, 3, 4]
].map(function(face) {
return face.map(function(i) {
return octahedron[i];
});
});
var points = [];
var lines = [];
var K = [
[0.9986, -0.062],
[1.0000, 0.0000],
[0.9986, 0.0620],
[0.9954, 0.1240],
[0.9900, 0.1860],
[0.9822, 0.2480],
[0.9730, 0.3100],
[0.9600, 0.3720],
[0.9427, 0.4340],
[0.9216, 0.4958],
[0.8962, 0.5571],
[0.8679, 0.6176],
[0.8350, 0.6769],
[0.7986, 0.7346],
[0.7597, 0.7903],
[0.7186, 0.8435],
[0.6732, 0.8936],
[0.6213, 0.9394],
[0.5722, 0.9761],
[0.5322, 1.0000]
];
K.forEach(function(d) {
d[1] *= 1.0144;
});
function satelliteVerticalRaw(P) {
function forward(lambda, phi) {
var cosPhi = cos$3(phi),
k = (P - 1) / (P - cosPhi * cos$3(lambda));
return [
k * cosPhi * sin$3(lambda),
k * sin$3(phi)
];
}
forward.invert = function(x, y) {
var rho2 = x * x + y * y,
rho = sqrt$3(rho2),
sinc = (P - sqrt$3(1 - rho2 * (P + 1) / (P - 1))) / ((P - 1) / rho + rho / (P - 1));
return [
atan2$2(x * sinc, rho * sqrt$3(1 - sinc * sinc)),
rho ? asin$2(y * sinc / rho) : 0
];
};
return forward;
}
function satelliteRaw(P, omega) {
var vertical = satelliteVerticalRaw(P);
if (!omega) return vertical;
var cosOmega = cos$3(omega),
sinOmega = sin$3(omega);
function forward(lambda, phi) {
var coordinates = vertical(lambda, phi),
y = coordinates[1],
A = y * sinOmega / (P - 1) + cosOmega;
return [
coordinates[0] * cosOmega / A,
y / A
];
}
forward.invert = function(x, y) {
var k = (P - 1) / (P - 1 - y * sinOmega);
return vertical.invert(k * x, k * y * cosOmega);
};
return forward;
}
var satellite = function() {
var distance = 2,
omega = 0,
m = projectionMutator(satelliteRaw),
p = m(distance, omega);
// As a multiple of radius.
p.distance = function(_) {
if (!arguments.length) return distance;
return m(distance = +_, omega);
};
p.tilt = function(_) {
if (!arguments.length) return omega * degrees$2;
return m(distance, omega = _ * radians$1);
};
return p
.scale(432.147)
.clipAngle(acos$2(1 / distance) * degrees$2 - 1e-6);
};
var epsilon$6 = 1e-4;
var epsilonInverse = 1e4;
var x0$5 = -180;
var x0e = x0$5 + epsilon$6;
var x1$1 = 180;
var x1e = x1$1 - epsilon$6;
var y0$5 = -90;
var y0e = y0$5 + epsilon$6;
var y1$1 = 90;
var y1e = y1$1 - epsilon$6;
function quantize$3(x) {
return Math.floor(x * epsilonInverse) / epsilonInverse;
}
function normalizePoint(y) {
return y === y0$5 || y === y1$1
? [0, y] // pole
: [x0$5, quantize$3(y)]; // antimeridian
}
function clampPoint(p) {
if (p[0] <= x0e) p[0] = x0$5;
else if (p[0] >= x1e) p[0] = x1$1;
if (p[1] <= y0e) p[1] = y0$5;
else if (p[1] >= y1e) p[1] = y1$1;
}
function clampPoints(points) {
points.forEach(clampPoint);
}
// For each ring, detect where it crosses the antimeridian or pole.
function extractFragments(polygon, fragments) {
for (var j = 0, m = polygon.length; j < m; ++j) {
var ring = polygon[j];
ring.polygon = polygon;
// By default, assume that this ring doesn’t need any stitching.
fragments.push(ring);
for (var i = 0, n = ring.length; i < n; ++i) {
var point = ring[i],
x = point[0],
y = point[1];
// If this is an antimeridian or polar point…
if (x <= x0e || x >= x1e || y <= y0e || y >= y1e) {
clampPoint(point);
// Advance through any antimeridian or polar points…
for (var k = i + 1; k < n; ++k) {
var pointk = ring[k],
xk = pointk[0],
yk = pointk[1];
if (xk > x0e && xk < x1e && yk > y0e && yk < y1e) break;
}
// If this was just a single antimeridian or polar point,
// we don’t need to cut this ring into a fragment;
// we can just leave it as-is.
if (k === i + 1) continue;
// Otherwise, if this is not the first point in the ring,
// cut the current fragment so that it ends at the current point.
// The current point is also normalized for later joining.
if (i) {
var fragmentBefore = ring.slice(0, i + 1);
fragmentBefore.polygon = polygon;
fragmentBefore[fragmentBefore.length - 1] = normalizePoint(y);
fragments[fragments.length - 1] = fragmentBefore;
}
// If the ring started with an antimeridian fragment,
// we can ignore that fragment entirely.
else fragments.pop();
// If the remainder of the ring is an antimeridian fragment,
// move on to the next ring.
if (k >= n) break;
// Otherwise, add the remaining ring fragment and continue.
fragments.push(ring = ring.slice(k - 1));
ring[0] = normalizePoint(ring[0][1]);
ring.polygon = polygon;
i = -1;
n = ring.length;
}
}
}
polygon.length = 0;
}
// Now stitch the fragments back together into rings.
// TODO remove empty polygons.
function stitchFragments(fragments) {
var i, n = fragments.length;
// To connect the fragments start-to-end, create a simple index by end.
var fragmentByStart = {},
fragmentByEnd = {},
fragment,
start,
startFragment,
end,
endFragment;
// For each fragment…
for (i = 0; i < n; ++i) {
fragment = fragments[i];
start = fragment[0];
end = fragment[fragment.length - 1];
// If this fragment is closed, add it as a standalone ring.
if (start[0] === end[0] && start[1] === end[1]) {
fragment.polygon.push(fragment);
fragments[i] = null;
continue;
}
fragment.index = i;
fragmentByStart[start] = fragmentByEnd[end] = fragment;
}
// For each open fragment…
for (i = 0; i < n; ++i) {
fragment = fragments[i];
if (fragment) {
start = fragment[0];
end = fragment[fragment.length - 1];
startFragment = fragmentByEnd[start];
endFragment = fragmentByStart[end];
delete fragmentByStart[start];
delete fragmentByEnd[end];
// If this fragment is closed, add it as a standalone ring.
if (start[0] === end[0] && start[1] === end[1]) {
fragment.polygon.push(fragment);
continue;
}
if (startFragment) {
delete fragmentByEnd[start];
delete fragmentByStart[startFragment[0]];
startFragment.pop(); // drop the shared coordinate
fragments[startFragment.index] = null;
fragment = startFragment.concat(fragment);
fragment.polygon = startFragment.polygon;
if (startFragment === endFragment) {
// Connect both ends to this single fragment to create a ring.
fragment.polygon.push(fragment);
} else {
fragment.index = n++;
fragments.push(fragmentByStart[fragment[0]] = fragmentByEnd[fragment[fragment.length - 1]] = fragment);
}
} else if (endFragment) {
delete fragmentByStart[end];
delete fragmentByEnd[endFragment[endFragment.length - 1]];
fragment.pop(); // drop the shared coordinate
fragment = fragment.concat(endFragment);
fragment.polygon = endFragment.polygon;
fragment.index = n++;
fragments[endFragment.index] = null;
fragments.push(fragmentByStart[fragment[0]] = fragmentByEnd[fragment[fragment.length - 1]] = fragment);
} else {
fragment.push(fragment[0]); // close ring
fragment.polygon.push(fragment);
}
}
}
}
function stitchGeometry(o) {
if (!o) return;
var fragments, i, n;
switch (o.type) {
case "GeometryCollection": {
o.geometries.forEach(stitchGeometry);
return;
}
case "Point": {
clampPoint(o.coordinates);
break;
}
case "MultiPoint":
case "LineString": {
clampPoints(o.coordinates);
break;
}
case "MultiLineString": {
o.coordinates.forEach(clampPoints);
break;
}
case "Polygon": {
extractFragments(o.coordinates, fragments = []);
break;
}
case "MultiPolygon": {
fragments = [], i = -1, n = o.coordinates.length;
while (++i < n) extractFragments(o.coordinates[i], fragments);
break;
}
default: return;
}
stitchFragments(fragments);
}
// Compute the origin as the midpoint of the two reference points.
// Rotate one of the reference points by the origin.
// Apply the spherical law of sines to compute gamma rotation.
// TODO clip to ellipse
// export * from "graph-scroll"
exports.geoNaturalEarth = naturalEarth;
exports.geoSatellite = satellite;
exports.version = version;
exports.bisect = bisectRight;
exports.bisectRight = bisectRight;
exports.bisectLeft = bisectLeft;
exports.ascending = ascending;
exports.bisector = bisector;
exports.cross = cross;
exports.descending = descending;
exports.deviation = deviation;
exports.extent = extent;
exports.histogram = histogram;
exports.thresholdFreedmanDiaconis = freedmanDiaconis;
exports.thresholdScott = scott;
exports.thresholdSturges = thresholdSturges;
exports.max = max;
exports.mean = mean;
exports.median = median;
exports.merge = merge;
exports.min = min;
exports.pairs = pairs;
exports.permute = permute;
exports.quantile = threshold;
exports.range = range;
exports.scan = scan;
exports.shuffle = shuffle;
exports.sum = sum;
exports.ticks = ticks;
exports.tickStep = tickStep;
exports.transpose = transpose;
exports.variance = variance;
exports.zip = zip;
exports.axisTop = axisTop;
exports.axisRight = axisRight;
exports.axisBottom = axisBottom;
exports.axisLeft = axisLeft;
exports.brush = brush;
exports.brushX = brushX;
exports.brushY = brushY;
exports.brushSelection = brushSelection;
exports.chord = chord;
exports.ribbon = ribbon;
exports.nest = nest;
exports.set = set$2;
exports.map = map$1;
exports.keys = d3keys;
exports.values = values;
exports.entries = entries;
exports.color = color;
exports.rgb = rgb;
exports.hsl = hsl;
exports.lab = lab;
exports.hcl = hcl;
exports.cubehelix = cubehelix;
exports.dispatch = dispatch;
exports.drag = drag;
exports.dragDisable = dragDisable;
exports.dragEnable = yesdrag;
exports.dsvFormat = dsv;
exports.csvParse = csvParse;
exports.csvParseRows = csvParseRows;
exports.csvFormat = csvFormat;
exports.csvFormatRows = csvFormatRows;
exports.tsvParse = tsvParse;
exports.tsvParseRows = tsvParseRows;
exports.tsvFormat = tsvFormat;
exports.tsvFormatRows = tsvFormatRows;
exports.easeLinear = linear$1;
exports.easeQuad = quadInOut;
exports.easeQuadIn = quadIn;
exports.easeQuadOut = quadOut;
exports.easeQuadInOut = quadInOut;
exports.easeCubic = cubicInOut;
exports.easeCubicIn = cubicIn;
exports.easeCubicOut = cubicOut;
exports.easeCubicInOut = cubicInOut;
exports.easePoly = polyInOut;
exports.easePolyIn = polyIn;
exports.easePolyOut = polyOut;
exports.easePolyInOut = polyInOut;
exports.easeSin = sinInOut;
exports.easeSinIn = sinIn;
exports.easeSinOut = sinOut;
exports.easeSinInOut = sinInOut;
exports.easeExp = expInOut;
exports.easeExpIn = expIn;
exports.easeExpOut = expOut;
exports.easeExpInOut = expInOut;
exports.easeCircle = circleInOut;
exports.easeCircleIn = circleIn;
exports.easeCircleOut = circleOut;
exports.easeCircleInOut = circleInOut;
exports.easeBounce = bounceOut;
exports.easeBounceIn = bounceIn;
exports.easeBounceOut = bounceOut;
exports.easeBounceInOut = bounceInOut;
exports.easeBack = backInOut;
exports.easeBackIn = backIn;
exports.easeBackOut = backOut;
exports.easeBackInOut = backInOut;
exports.easeElastic = elasticOut;
exports.easeElasticIn = elasticIn;
exports.easeElasticOut = elasticOut;
exports.easeElasticInOut = elasticInOut;
exports.forceCenter = center$1;
exports.forceCollide = collide;
exports.forceLink = link;
exports.forceManyBody = manyBody;
exports.forceSimulation = simulation;
exports.forceX = x$2;
exports.forceY = y$2;
exports.formatDefaultLocale = defaultLocale;
exports.formatLocale = formatLocale;
exports.formatSpecifier = formatSpecifier;
exports.precisionFixed = precisionFixed;
exports.precisionPrefix = precisionPrefix;
exports.precisionRound = precisionRound;
exports.geoArea = area;
exports.geoBounds = bounds;
exports.geoCentroid = centroid;
exports.geoCircle = geoCircle;
exports.geoClipExtent = extent$1;
exports.geoContains = contains;
exports.geoDistance = distance;
exports.geoGraticule = graticule;
exports.geoGraticule10 = graticule10;
exports.geoInterpolate = interpolate$1;
exports.geoLength = length$1;
exports.geoPath = index$1;
exports.geoAlbers = albers;
exports.geoAlbersUsa = albersUsa;
exports.geoAzimuthalEqualArea = azimuthalEqualArea;
exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;
exports.geoAzimuthalEquidistant = azimuthalEquidistant;
exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
exports.geoConicConformal = conicConformal;
exports.geoConicConformalRaw = conicConformalRaw;
exports.geoConicEqualArea = conicEqualArea;
exports.geoConicEqualAreaRaw = conicEqualAreaRaw;
exports.geoConicEquidistant = conicEquidistant;
exports.geoConicEquidistantRaw = conicEquidistantRaw;
exports.geoEquirectangular = geoEquirectangular;
exports.geoEquirectangularRaw = equirectangularRaw;
exports.geoGnomonic = gnomonic;
exports.geoGnomonicRaw = gnomonicRaw;
exports.geoIdentity = identity$5;
exports.geoProjection = projection;
exports.geoProjectionMutator = projectionMutator;
exports.geoMercator = mercator;
exports.geoMercatorRaw = mercatorRaw;
exports.geoOrthographic = geoOrthographic;
exports.geoOrthographicRaw = orthographicRaw;
exports.geoStereographic = stereographic;
exports.geoStereographicRaw = stereographicRaw;
exports.geoTransverseMercator = transverseMercator;
exports.geoTransverseMercatorRaw = transverseMercatorRaw;
exports.geoRotation = rotation;
exports.geoStream = geoStream;
exports.geoTransform = transform;
exports.cluster = cluster;
exports.hierarchy = hierarchy;
exports.pack = index$2;
exports.packSiblings = siblings;
exports.packEnclose = enclose;
exports.partition = partition;
exports.stratify = stratify;
exports.tree = tree;
exports.treemap = index$3;
exports.treemapBinary = binary;
exports.treemapDice = treemapDice;
exports.treemapSlice = treemapSlice;
exports.treemapSliceDice = sliceDice;
exports.treemapSquarify = squarify;
exports.treemapResquarify = resquarify;
exports.interpolate = interpolateValue;
exports.interpolateArray = array$1;
exports.interpolateBasis = basis$1;
exports.interpolateBasisClosed = basisClosed;
exports.interpolateDate = date;
exports.interpolateNumber = reinterpolate;
exports.interpolateObject = object;
exports.interpolateRound = interpolateRound;
exports.interpolateString = interpolateString;
exports.interpolateTransformCss = interpolateTransformCss;
exports.interpolateTransformSvg = interpolateTransformSvg;
exports.interpolateZoom = interpolateZoom;
exports.interpolateRgb = interpolateRgb;
exports.interpolateRgbBasis = rgbBasis;
exports.interpolateRgbBasisClosed = rgbBasisClosed;
exports.interpolateHsl = hsl$2;
exports.interpolateHslLong = hslLong;
exports.interpolateLab = lab$1;
exports.interpolateHcl = hcl$2;
exports.interpolateHclLong = hclLong;
exports.interpolateCubehelix = cubehelix$2;
exports.interpolateCubehelixLong = cubehelixLong;
exports.quantize = quantize;
exports.path = path;
exports.polygonArea = area$1;
exports.polygonCentroid = centroid$1;
exports.polygonHull = hull;
exports.polygonContains = contains$1;
exports.polygonLength = length$2;
exports.quadtree = quadtree;
exports.queue = queue;
exports.randomUniform = uniform;
exports.randomNormal = normal;
exports.randomLogNormal = logNormal;
exports.randomBates = bates;
exports.randomIrwinHall = irwinHall;
exports.randomExponential = exponential$1;
exports.request = request;
exports.html = html;
exports.json = json;
exports.text = text;
exports.xml = xml;
exports.csv = csv$1;
exports.tsv = tsv$1;
exports.scaleBand = band;
exports.scalePoint = point$1;
exports.scaleIdentity = identity$6;
exports.scaleLinear = linear$2;
exports.scaleLog = log$1;
exports.scaleOrdinal = ordinal;
exports.scaleImplicit = implicit;
exports.scalePow = pow$1;
exports.scaleSqrt = sqrt$1;
exports.scaleQuantile = quantile$$1;
exports.scaleQuantize = quantize$1;
exports.scaleThreshold = threshold$1;
exports.scaleTime = time;
exports.scaleUtc = utcTime;
exports.schemeCategory10 = category10;
exports.schemeCategory20b = category20b;
exports.schemeCategory20c = category20c;
exports.schemeCategory20 = category20;
exports.interpolateCubehelixDefault = cubehelix$3;
exports.interpolateRainbow = rainbow$1;
exports.interpolateWarm = warm;
exports.interpolateCool = cool;
exports.interpolateViridis = viridis;
exports.interpolateMagma = magma;
exports.interpolateInferno = inferno;
exports.interpolatePlasma = plasma;
exports.scaleSequential = sequential;
exports.creator = creator;
exports.local = local$1;
exports.matcher = matcher$1;
exports.mouse = mouse;
exports.namespace = namespace;
exports.namespaces = namespaces;
exports.select = select;
exports.selectAll = selectAll;
exports.selection = selection;
exports.selector = selector;
exports.selectorAll = selectorAll;
exports.touch = touch;
exports.touches = touches;
exports.window = window$1;
exports.customEvent = customEvent;
exports.arc = arc;
exports.area = area$2;
exports.line = line;
exports.pie = pie;
exports.radialArea = radialArea;
exports.radialLine = radialLine$1;
exports.symbol = symbol;
exports.symbols = symbols;
exports.symbolCircle = circle$1;
exports.symbolCross = cross$2;
exports.symbolDiamond = diamond;
exports.symbolSquare = square;
exports.symbolStar = star;
exports.symbolTriangle = triangle;
exports.symbolWye = wye;
exports.curveBasisClosed = basisClosed$1;
exports.curveBasisOpen = basisOpen;
exports.curveBasis = basis$2;
exports.curveBundle = bundle;
exports.curveCardinalClosed = cardinalClosed;
exports.curveCardinalOpen = cardinalOpen;
exports.curveCardinal = cardinal;
exports.curveCatmullRomClosed = catmullRomClosed;
exports.curveCatmullRomOpen = catmullRomOpen;
exports.curveCatmullRom = catmullRom;
exports.curveLinearClosed = linearClosed;
exports.curveLinear = curveLinear;
exports.curveMonotoneX = monotoneX;
exports.curveMonotoneY = monotoneY;
exports.curveNatural = natural;
exports.curveStep = step;
exports.curveStepAfter = stepAfter;
exports.curveStepBefore = stepBefore;
exports.stack = stack;
exports.stackOffsetExpand = expand;
exports.stackOffsetNone = none$1;
exports.stackOffsetSilhouette = silhouette;
exports.stackOffsetWiggle = wiggle;
exports.stackOrderAscending = ascending$2;
exports.stackOrderDescending = descending$2;
exports.stackOrderInsideOut = insideOut;
exports.stackOrderNone = none$2;
exports.stackOrderReverse = reverse;
exports.timeInterval = newInterval;
exports.timeMillisecond = millisecond;
exports.timeMilliseconds = milliseconds;
exports.utcMillisecond = millisecond;
exports.utcMilliseconds = milliseconds;
exports.timeSecond = second;
exports.timeSeconds = seconds;
exports.utcSecond = second;
exports.utcSeconds = seconds;
exports.timeMinute = minute;
exports.timeMinutes = minutes;
exports.timeHour = hour;
exports.timeHours = hours;
exports.timeDay = day;
exports.timeDays = days;
exports.timeWeek = sunday;
exports.timeWeeks = sundays;
exports.timeSunday = sunday;
exports.timeSundays = sundays;
exports.timeMonday = monday;
exports.timeMondays = mondays;
exports.timeTuesday = tuesday;
exports.timeTuesdays = tuesdays;
exports.timeWednesday = wednesday;
exports.timeWednesdays = wednesdays;
exports.timeThursday = thursday;
exports.timeThursdays = thursdays;
exports.timeFriday = friday;
exports.timeFridays = fridays;
exports.timeSaturday = saturday;
exports.timeSaturdays = saturdays;
exports.timeMonth = month;
exports.timeMonths = months;
exports.timeYear = year;
exports.timeYears = years;
exports.utcMinute = utcMinute;
exports.utcMinutes = utcMinutes;
exports.utcHour = utcHour;
exports.utcHours = utcHours;
exports.utcDay = utcDay;
exports.utcDays = utcDays;
exports.utcWeek = utcSunday;
exports.utcWeeks = utcSundays;
exports.utcSunday = utcSunday;
exports.utcSundays = utcSundays;
exports.utcMonday = utcMonday;
exports.utcMondays = utcMondays;
exports.utcTuesday = utcTuesday;
exports.utcTuesdays = utcTuesdays;
exports.utcWednesday = utcWednesday;
exports.utcWednesdays = utcWednesdays;
exports.utcThursday = utcThursday;
exports.utcThursdays = utcThursdays;
exports.utcFriday = utcFriday;
exports.utcFridays = utcFridays;
exports.utcSaturday = utcSaturday;
exports.utcSaturdays = utcSaturdays;
exports.utcMonth = utcMonth;
exports.utcMonths = utcMonths;
exports.utcYear = utcYear;
exports.utcYears = utcYears;
exports.timeFormatDefaultLocale = defaultLocale$1;
exports.timeFormatLocale = formatLocale$1;
exports.isoFormat = formatIso;
exports.isoParse = parseIso;
exports.now = now;
exports.timer = timer;
exports.timerFlush = timerFlush;
exports.timeout = timeout$1;
exports.interval = interval$1;
exports.transition = transition;
exports.active = active;
exports.interrupt = interrupt;
exports.voronoi = voronoi;
exports.zoom = zoom;
exports.zoomTransform = transform$1;
exports.zoomIdentity = identity$8;
exports.contours = contours;
exports.contourDensity = density;
exports.wordwrap = wordwrap;
exports.parseAttributes = parseAttributes;
exports.f = f;
exports.ascendingKey = ascendingKey;
exports.descendingKey = descendingKey;
exports.conventions = conventions;
exports.attachTooltip = attachTooltip;
exports.loadData = loadData;
exports.nestBy = nestBy;
exports.round = round;
exports.polygonClip = polygonClip;
Object.defineProperty(exports, '__esModule', { value: true });
})));
<!DOCTYPE html>
<meta charset='utf-8'>
<link rel="stylesheet" type="text/css" href="style.css">
<body>
<div class='g-cyber-map'></div>
</body>
<script src='d3v4.js'></script>
<script src='topojson.js'></script>
<script src='script.js'></script>
console.clear()
// load data
d3.loadData('world-50m.json', 'wannacry-trimmed.tsv', function(err, res){
world = res[0]
points = res[1]
var sel = d3.select(".g-cyber-map").html('').st({position: 'relative'})
var width = sel.node().offsetWidth,
height = width/960*500;
var land = topojson.feature(world, world.objects.land),
countries = topojson.mesh(world, world.objects.countries, (a, b) => a !== b )
var proj = d3.geoNaturalEarth().fitSize([width, height], land)
var path = d3.geoPath().projection(proj);
proj.scale(proj.scale()*1.25)
var svg = sel.append("svg").at({width, height})
svg.append("path.land").at({d: path(land)})
svg.append('clipPath#clip')
.append('path')
.at({d: path(land)})
var color = d3.scaleLog()
.domain([0.00390625, .125/2, 1.5])
.range(['rgb(228, 228, 177)', 'yellow', 'red'])
points.forEach(d => d.pos = proj([d.lng, d.lat]))
contour = d3.contourDensity()
.x(d => d.pos[0])
.y(d => d.pos[1])
.bandwidth(7)
.thresholds([.25, .5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512])
.cellSize(7)
var layerSel = svg.append('g')
.attr('clip-path', 'url(#clip)')
.appendMany(contour(points), 'path.contour')
.at({d: d3.geoPath(), fill: d => color(d.value)})
if (window.drawtimer) drawtimer.stop()
drawtimer = d3.timer(contourLoop)
function contourLoop(t){
var index = (t*2) % points.length
activePoints = points.slice(index, index + Math.min(index/2, 5000))
layerSel.data(contour(activePoints)).at({d: d3.geoPath()})
}
})
svg{
overflow: visible;
}
.land{
fill: #eee;
stroke: #888;
}
svg path.contour{
stroke: #444;
stroke-opacity: .1;
/*fill: rgba(255, 0, 0, .2);*/
}
body{
font-family: monospace;
margin: 0px;
}
canvas{
position: absolute;
top: 0px;
left: 0px;
pointer-events: none;
}
// https://github.com/topojson/topojson-client Version 1.8.0. Copyright 2016 Mike Bostock.
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.topojson=n.topojson||{})}(this,function(n){"use strict";function t(n){if(!n)return h;var t,r,e=n.scale[0],o=n.scale[1],i=n.translate[0],u=n.translate[1];return function(n,f){f||(t=r=0),n[0]=(t+=n[0])*e+i,n[1]=(r+=n[1])*o+u}}function r(n){if(!n)return h;var t,r,e=n.scale[0],o=n.scale[1],i=n.translate[0],u=n.translate[1];return function(n,f){f||(t=r=0);var c=Math.round((n[0]-i)/e),a=Math.round((n[1]-u)/o);n[0]=c-t,n[1]=a-r,t=c,r=a}}function e(n,t){for(var r,e=n.length,o=e-t;o<--e;)r=n[o],n[o++]=n[e],n[e]=r}function o(n,t){for(var r=0,e=n.length;r<e;){var o=r+e>>>1;n[o]<t?r=o+1:e=o}return r}function i(n,t){var r={type:"Feature",id:t.id,properties:t.properties||{},geometry:u(n,t)};return null==t.id&&delete r.id,r}function u(n,r){function o(n,t){t.length&&t.pop();for(var r,o=l[n<0?~n:n],i=0,u=o.length;i<u;++i)t.push(r=o[i].slice()),s(r,i);n<0&&e(t,u)}function i(n){return n=n.slice(),s(n,0),n}function u(n){for(var t=[],r=0,e=n.length;r<e;++r)o(n[r],t);return t.length<2&&t.push(t[0].slice()),t}function f(n){for(var t=u(n);t.length<4;)t.push(t[0].slice());return t}function c(n){return n.map(f)}function a(n){var t=n.type;return"GeometryCollection"===t?{type:t,geometries:n.geometries.map(a)}:t in h?{type:t,coordinates:h[t](n)}:null}var s=t(n.transform),l=n.arcs,h={Point:function(n){return i(n.coordinates)},MultiPoint:function(n){return n.coordinates.map(i)},LineString:function(n){return u(n.arcs)},MultiLineString:function(n){return n.arcs.map(u)},Polygon:function(n){return c(n.arcs)},MultiPolygon:function(n){return n.arcs.map(c)}};return a(r)}function f(n,t,r){function e(n){var t=n<0?~n:n;(a[t]||(a[t]=[])).push({i:n,g:c})}function o(n){n.forEach(e)}function i(n){n.forEach(o)}function u(n){"GeometryCollection"===n.type?n.geometries.forEach(u):n.type in s&&(c=n,s[n.type](n.arcs))}var f=[];if(arguments.length>1){var c,a=[],s={LineString:o,MultiLineString:i,Polygon:i,MultiPolygon:function(n){n.forEach(i)}};u(t),a.forEach(arguments.length<3?function(n){f.push(n[0].i)}:function(n){r(n[0].g,n[n.length-1].g)&&f.push(n[0].i)})}else for(var l=0,h=n.arcs.length;l<h;++l)f.push(l);return{type:"MultiLineString",arcs:v(n,f)}}function c(n){var t=n[0],r=n[1],e=n[2];return Math.abs((t[0]-e[0])*(r[1]-t[1])-(t[0]-r[0])*(e[1]-t[1]))}function a(n){for(var t,r=-1,e=n.length,o=n[e-1],i=0;++r<e;)t=o,o=n[r],i+=t[0]*o[1]-t[1]*o[0];return i/2}function s(n,t){function r(n){n.forEach(function(t){t.forEach(function(t){(o[t=t<0?~t:t]||(o[t]=[])).push(n)})}),i.push(n)}function e(t){return Math.abs(a(u(n,{type:"Polygon",arcs:[t]}).coordinates[0]))}var o={},i=[],f=[];return t.forEach(function(n){"Polygon"===n.type?r(n.arcs):"MultiPolygon"===n.type&&n.arcs.forEach(r)}),i.forEach(function(n){if(!n._){var t=[],r=[n];for(n._=1,f.push(t);n=r.pop();)t.push(n),n.forEach(function(n){n.forEach(function(n){o[n<0?~n:n].forEach(function(n){n._||(n._=1,r.push(n))})})})}}),i.forEach(function(n){delete n._}),{type:"MultiPolygon",arcs:f.map(function(t){var r,i=[];if(t.forEach(function(n){n.forEach(function(n){n.forEach(function(n){o[n<0?~n:n].length<2&&i.push(n)})})}),i=v(n,i),(r=i.length)>1)for(var u,f,c=1,a=e(i[0]);c<r;++c)(u=e(i[c]))>a&&(f=i[0],i[0]=i[c],i[c]=f,a=u);return i})}}function l(n,t){return n[1][2]-t[1][2]}var h=function(){},p=function(n,t){return"GeometryCollection"===t.type?{type:"FeatureCollection",features:t.geometries.map(function(t){return i(n,t)})}:i(n,t)},v=function(n,t){function r(t){var r,e=n.arcs[t<0?~t:t],o=e[0];return n.transform?(r=[0,0],e.forEach(function(n){r[0]+=n[0],r[1]+=n[1]})):r=e[e.length-1],t<0?[r,o]:[o,r]}function e(n,t){for(var r in n){var e=n[r];delete t[e.start],delete e.start,delete e.end,e.forEach(function(n){o[n<0?~n:n]=1}),f.push(e)}}var o={},i={},u={},f=[],c=-1;return t.forEach(function(r,e){var o,i=n.arcs[r<0?~r:r];i.length<3&&!i[1][0]&&!i[1][1]&&(o=t[++c],t[c]=r,t[e]=o)}),t.forEach(function(n){var t,e,o=r(n),f=o[0],c=o[1];if(t=u[f])if(delete u[t.end],t.push(n),t.end=c,e=i[c]){delete i[e.start];var a=e===t?t:t.concat(e);i[a.start=t.start]=u[a.end=e.end]=a}else i[t.start]=u[t.end]=t;else if(t=i[c])if(delete i[t.start],t.unshift(n),t.start=f,e=u[f]){delete u[e.end];var s=e===t?t:e.concat(t);i[s.start=e.start]=u[s.end=t.end]=s}else i[t.start]=u[t.end]=t;else t=[n],i[t.start=f]=u[t.end=c]=t}),e(u,i),e(i,u),t.forEach(function(n){o[n<0?~n:n]||f.push([n])}),f},g=function(n){return u(n,f.apply(this,arguments))},d=function(n){return u(n,s.apply(this,arguments))},y=function(n){function t(n,t){n.forEach(function(n){n<0&&(n=~n);var r=i[n];r?r.push(t):i[n]=[t]})}function r(n,r){n.forEach(function(n){t(n,r)})}function e(n,t){"GeometryCollection"===n.type?n.geometries.forEach(function(n){e(n,t)}):n.type in f&&f[n.type](n.arcs,t)}var i={},u=n.map(function(){return[]}),f={LineString:t,MultiLineString:r,Polygon:r,MultiPolygon:function(n,t){n.forEach(function(n){r(n,t)})}};n.forEach(e);for(var c in i)for(var a=i[c],s=a.length,l=0;l<s;++l)for(var h=l+1;h<s;++h){var p,v=a[l],g=a[h];(p=u[v])[c=o(p,g)]!==g&&p.splice(c,0,g),(p=u[g])[c=o(p,v)]!==v&&p.splice(c,0,v)}return u},m=function(){function n(n,t){for(;t>0;){var r=(t+1>>1)-1,o=e[r];if(l(n,o)>=0)break;e[o._=t]=o,e[n._=t=r]=n}}function t(n,t){for(;;){var r=t+1<<1,i=r-1,u=t,f=e[u];if(i<o&&l(e[i],f)<0&&(f=e[u=i]),r<o&&l(e[r],f)<0&&(f=e[u=r]),u===t)break;e[f._=t]=f,e[n._=t=u]=n}}var r={},e=[],o=0;return r.push=function(t){return n(e[t._=o]=t,o++),o},r.pop=function(){if(!(o<=0)){var n,r=e[0];return--o>0&&(n=e[o],t(e[n._=0]=n,0)),r}},r.remove=function(r){var i,u=r._;if(e[u]===r)return u!==--o&&(i=e[o],(l(i,r)<0?n:t)(e[i._=u]=i,u)),u},r},E=function(n,e){function o(n){f.remove(n),n[1][2]=e(n),f.push(n)}var i=t(n.transform),u=r(n.transform),f=m();return null==e&&(e=c),n.arcs.forEach(function(n){var t,r,c,a,s=[],l=0;for(r=0,c=n.length;r<c;++r)a=n[r],i(n[r]=[a[0],a[1],1/0],r);for(r=1,c=n.length-1;r<c;++r)t=n.slice(r-1,r+2),t[1][2]=e(t),s.push(t),f.push(t);for(r=0,c=s.length;r<c;++r)t=s[r],t.previous=s[r-1],t.next=s[r+1];for(;t=f.pop();){var h=t.previous,p=t.next;t[1][2]<l?t[1][2]=l:l=t[1][2],h&&(h.next=p,h[2]=t[2],o(h)),p&&(p.previous=h,p[0]=t[0],o(p))}n.forEach(u)}),n};n.mesh=g,n.meshArcs=f,n.merge=d,n.mergeArcs=s,n.feature=p,n.neighbors=y,n.presimplify=E,Object.defineProperty(n,"__esModule",{value:!0})});
We can't make this file beautiful and searchable because it's too large.
lat lng time
40.7 -74.0 0
51.3 0.5 23
52.2 0.1 208
45.9 -119.7 309
35.7 139.7 344
45.9 -119.7 954
48.5 34.6 1001
43.6 -79.4 1003
46.6 20.7 1004
24.1 120.7 1005
34.0 -118.4 1006
55.7 37.6 1006
35.6 139.8 1006
23.5 121.0 1007
32.1 118.8 1007
57.8 40.9 1007
55.7 37.6 1007
50.4 30.5 1009
55.7 37.6 1009
43.6 -79.7 1010
21.1 -86.9 1010
25.8 -80.4 1010
22.8 108.3 1010
32.8 -79.9 1010
23.5 121.0 1010
39.1 -94.6 1011
57.8 40.9 1011
23.5 121.0 1011
23.5 121.0 1011
23.0 120.2 1011
23.5 121.0 1012
56.0 24.0 1012
17.4 78.5 1012
50.6 36.6 1012
34.7 113.5 1012
23.5 121.0 1012
50.7 3.2 1013
48.9 2.3 1013
51.7 55.4 1013
55.8 37.6 1013
17.4 78.5 1014
30.7 104.1 1015
23.5 121.0 1015
48.7 2.3 1015
57.0 24.1 1015
23.5 121.0 1015
51.7 6.2 1015
23.5 121.0 1016
30.7 104.1 1016
41.9 -87.7 1016
34.3 108.9 1016
25.0 121.5 1017
50.3 127.5 1017
50.6 36.6 1017
55.1 36.6 1017
40.2 44.5 1017
57.8 40.9 1017
55.7 37.6 1017
34.0 -118.4 1017
41.0 29.0 1018
23.5 121.0 1018
55.7 37.6 1018
50.6 36.6 1019
-43.0 147.3 1019
25.3 55.3 1019
23.5 121.0 1020
50.4 30.5 1020
50.6 36.6 1020
25.1 121.7 1020
39.9 115.3 1020
56.9 35.9 1020
22.6 120.4 1021
24.1 120.7 1021
25.0 121.3 1021
48.5 35.0 1021
49.8 30.1 1022
23.0 120.2 1022
55.8 37.6 1022
34.8 113.7 1022
21.0 105.9 1022
1.0 32.0 1022
47.2 27.6 1022
53.5 49.3 1022
30.3 -97.7 1022
23.0 120.2 1023
55.7 37.6 1023
23.5 121.0 1023
50.4 30.5 1024
55.8 37.6 1024
50.6 36.6 1024
23.0 120.2 1024
56.3 114.9 1024
48.0 37.8 1024
38.0 23.7 1024
16.3 -61.6 1025
43.7 -79.5 1025
37.5 127.0 1025
51.2 58.3 1025
51.8 55.1 1025
50.6 36.6 1025
34.1 -118.3 1025
57.8 40.9 1025
25.0 121.5 1025
23.5 121.0 1025
23.1 113.3 1026
23.5 121.0 1026
45.9 -119.7 1026
55.7 37.6 1026
48.9 2.3 1026
37.5 127.0 1026
53.1 36.2 1026
24.8 121.0 1027
55.2 61.4 1027
51.8 55.1 1028
51.7 55.4 1028
53.7 91.4 1028
48.9 2.3 1028
55.7 37.6 1028
45.0 41.1 1028
34.7 113.5 1028
-22.8 -43.2 1028
33.4 112.4 1029
50.4 30.5 1029
51.3 9.5 1029
39.1 117.2 1029
51.7 55.4 1030
50.6 36.6 1030
51.7 55.4 1030
54.2 37.6 1030
23.5 121.0 1030
40.5 -74.2 1030
23.5 121.0 1030
34.7 113.5 1030
30.3 120.2 1030
51.2 58.3 1031
23.5 121.0 1031
28.6 77.2 1031
36.8 127.0 1032
34.8 113.7 1032
37.8 128.9 1032
53.0 36.1 1032
26.1 119.3 1032
55.7 37.6 1032
23.5 121.0 1032
24.9 118.6 1032
51.2 58.3 1033
51.7 55.4 1033
23.0 120.2 1033
34.8 113.7 1033
47.4 40.1 1033
55.8 37.6 1033
42.7 23.3 1034
51.7 55.4 1034
37.8 -97.8 1034
25.3 55.3 1034
35.0 138.4 1034
51.7 39.2 1034
37.5 127.0 1034
53.0 36.1 1034
50.6 36.6 1035
50.5 30.5 1035
34.8 113.7 1035
37.8 -97.8 1035
41.8 123.4 1035
25.0 121.5 1035
55.7 37.6 1035
24.1 120.5 1036
53.5 49.6 1036
23.5 121.0 1036
51.2 58.3 1036
51.7 55.4 1036
29.5 -98.4 1036
45.9 -119.7 1036
-33.9 151.1 1036
26.6 106.7 1036
23.5 121.0 1036
33.1 -96.8 1036
30.3 120.2 1037
37.5 127.0 1037
55.0 82.9 1037
51.2 58.3 1037
51.7 55.4 1037
41.3 -104.7 1037
30.3 120.2 1037
26.1 119.3 1038
51.7 55.4 1038
34.7 113.5 1038
54.6 39.7 1038
24.1 120.7 1039
37.7 112.5 1039
34.8 113.7 1039
25.0 121.5 1039
31.0 121.4 1039
23.5 121.0 1040
50.6 36.6 1040
50.4 30.5 1040
31.9 117.3 1040
55.7 37.6 1040
42.7 23.3 1040
53.0 36.1 1040
50.4 30.5 1040
51.7 55.4 1041
25.0 121.5 1041
51.2 38.5 1041
31.5 34.8 1041
53.8 87.1 1041
54.2 37.6 1041
23.5 121.0 1041
46.8 29.5 1042
50.6 36.6 1042
51.8 55.1 1042
22.8 108.3 1042
51.3 37.8 1042
23.0 120.2 1042
20.0 77.0 1042
-23.4 -46.9 1042
45.0 39.0 1042
34.7 113.5 1042
23.5 121.0 1042
55.5 38.4 1042
35.7 51.4 1042
48.9 2.3 1043
58.1 52.7 1043
25.0 121.5 1043
25.0 121.5 1043
50.1 14.5 1043
1.3 103.9 1043
26.6 106.7 1043
51.5 -0.1 1043
23.5 121.0 1044
51.4 57.6 1044
51.2 58.3 1044
55.2 61.4 1044
53.1 36.2 1044
43.9 125.3 1044
51.8 55.1 1045
30.7 104.1 1045
52.8 52.3 1045
22.8 108.3 1045
55.8 37.6 1045
22.6 120.4 1045
36.7 117.0 1045
23.1 113.3 1045
53.0 36.1 1045
55.3 38.7 1045
53.1 36.2 1046
35.3 139.4 1046
50.6 36.6 1046
51.7 55.4 1046
23.5 121.0 1046
52.8 52.3 1046
23.5 121.0 1046
23.5 121.0 1046
36.7 117.0 1046
36.7 117.0 1046
41.0 64.0 1046
26.6 106.7 1046
-33.5 143.2 1047
40.9 29.2 1047
49.8 73.1 1047
34.7 113.5 1047
55.8 37.6 1047
13.8 100.5 1047
23.5 121.0 1048
44.7 37.8 1048
51.9 33.5 1048
51.3 37.8 1048
45.5 -73.6 1048
53.1 36.2 1048
28.6 115.9 1049
51.7 55.4 1049
52.8 52.3 1049
55.0 73.4 1049
56.9 60.6 1049
13.8 100.5 1049
16.2 120.8 1049
11.0 77.0 1049
-22.9 -43.2 1049
51.2 58.3 1050
-34.6 -58.4 1050
28.6 77.2 1050
59.3 18.1 1050
25.0 121.5 1050
55.0 73.4 1051
34.7 113.5 1051
51.7 55.4 1051
56.4 44.1 1051
47.5 19.1 1051
56.2 47.3 1051
-26.1 28.2 1051
13.8 100.5 1051
50.4 30.5 1052
50.4 30.5 1052
37.8 -97.8 1052
35.7 139.7 1052
55.7 37.6 1052
33.0 -96.5 1052
50.4 80.3 1052
39.9 116.4 1052
51.7 55.4 1053
52.8 52.3 1053
51.5 -0.1 1053
55.7 37.6 1053
34.8 113.7 1053
51.8 55.1 1053
39.1 -94.6 1053
34.1 -118.3 1053
35.6 139.8 1053
51.9 36.3 1053
55.8 37.6 1053
39.9 116.4 1053
56.9 35.9 1053
19.4 -99.1 1053
54.8 56.0 1053
51.7 36.2 1053
45.3 -73.9 1053
45.5 -73.6 1053
55.0 73.4 1054
-25.7 28.2 1054
23.5 121.0 1054
48.5 35.0 1054
51.7 36.2 1054
51.5 -0.1 1054
45.5 -73.6 1054
37.5 127.0 1054
34.8 113.7 1055
51.2 58.3 1055
62.0 129.7 1055
34.0 74.9 1055
23.1 113.3 1055
44.0 43.1 1055
37.5 127.0 1055
51.3 9.5 1055
37.8 128.9 1055
38.7 -90.3 1055
-22.8 -43.2 1055
43.9 125.3 1055
24.1 120.7 1055
34.4 132.5 1056
51.2 58.3 1056
53.7 91.4 1056
45.8 126.7 1056
52.8 52.3 1056
16.2 120.8 1056
30.3 120.2 1056
37.5 127.0 1056
50.4 30.5 1057
30.0 70.0 1057
55.7 37.6 1057
41.8 -87.7 1057
51.7 55.4 1058
55.0 73.4 1058
51.8 55.1 1058
50.4 30.5 1058
56.4 37.5 1058
34.7 135.5 1058
25.0 121.5 1058
45.5 -73.6 1058
51.5 31.3 1058
47.4 25.8 1059
17.4 78.5 1059
13.8 100.5 1059
25.0 121.5 1059
36.7 117.0 1059
15.9 -96.3 1059
17.4 78.5 1059
45.5 -73.6 1059
50.4 30.5 1060
51.7 55.4 1060
51.3 58.2 1060
52.6 39.6 1060
57.8 40.9 1060
-22.9 -43.2 1060
39.1 114.9 1060
56.9 60.6 1060
50.4 30.5 1060
51.3 37.8 1060
45.3 -73.9 1060
55.1 73.1 1061
51.7 55.4 1061
55.9 37.7 1061
37.8 -97.8 1061
37.5 121.4 1061
52.5 -1.9 1061
55.7 37.6 1061
22.3 114.2 1061
22.6 120.3 1061
55.0 50.1 1062
30.3 120.2 1062
56.0 92.9 1062
50.4 30.5 1062
25.0 121.3 1062
37.8 -97.8 1062
23.1 113.3 1062
55.7 37.6 1062
55.7 37.6 1062
23.0 120.2 1063
53.0 36.1 1063
34.7 113.5 1063
32.1 118.8 1063
50.0 36.3 1063
55.7 37.6 1063
47.5 42.2 1063
55.7 37.6 1063
56.2 47.3 1064
52.8 52.3 1064
55.7 84.9 1064
51.7 39.2 1064
55.2 61.4 1065
51.7 55.4 1065
24.1 120.7 1065
51.2 38.5 1065
43.1 12.1 1066
-22.8 -43.4 1066
46.0 25.0 1066
38.3 141.0 1066
30.7 104.1 1066
38.7 -9.1 1066
25.0 121.5 1066
51.5 -0.2 1066
51.7 39.2 1066
48.0 37.8 1067
34.8 113.7 1067
55.0 73.4 1067
24.8 121.0 1067
50.0 36.3 1067
52.2 21.0 1068
30.7 104.1 1068
51.7 36.2 1068
23.5 121.0 1068
47.9 35.3 1068
26.6 106.7 1068
51.7 55.4 1069
25.0 121.5 1069
55.8 37.6 1069
55.7 37.6 1069
51.2 58.3 1070
23.1 113.3 1070
24.1 120.7 1070
23.5 121.0 1070
56.9 35.9 1070
36.7 117.0 1070
22.5 114.1 1070
32.1 118.8 1070
23.5 121.0 1070
49.8 6.2 1070
23.5 121.0 1071
40.6 122.5 1071
55.0 73.4 1071
17.4 78.5 1071
32.1 34.8 1071
50.6 36.6 1071
51.7 39.2 1071
23.5 121.0 1071
51.7 55.4 1072
51.7 39.2 1072
48.0 68.0 1072
52.2 21.0 1072
53.0 36.1 1072
23.1 113.3 1072
51.7 36.2 1072
22.3 114.2 1072
53.0 36.1 1072
39.9 116.4 1072
22.6 120.4 1072
32.1 118.8 1072
23.1 113.3 1073
53.5 49.3 1073
55.7 37.6 1073
50.5 30.5 1073
53.1 36.2 1073
-26.1 28.1 1073
57.8 40.9 1073
34.8 113.7 1073
51.5 46.0 1073
52.4 4.9 1073
23.5 121.0 1073
23.5 121.0 1073
23.5 121.0 1073
43.2 -79.7 1073
23.5 121.0 1073
51.7 55.4 1074
25.0 121.5 1074
37.5 121.4 1074
48.6 45.7 1074
24.1 120.5 1074
23.5 121.0 1074
55.7 37.6 1074
37.5 127.0 1074
49.1 -122.8 1074
37.5 127.0 1074
53.2 50.1 1074
11.2 78.2 1074
45.3 -73.9 1074
23.1 113.3 1074
37.8 128.9 1074
40.5 -74.2 1075
59.9 30.3 1075
17.4 78.5 1075
50.0 36.3 1075
35.7 51.4 1075
23.5 121.0 1075
56.7 37.2 1075
36.7 117.0 1076
34.8 113.7 1076
23.5 121.0 1076
55.8 37.6 1076
24.8 121.0 1076
39.9 116.4 1076
48.9 2.3 1076
51.3 37.8 1076
50.6 36.6 1076
32.1 118.8 1076
30.7 104.1 1077
36.1 -86.9 1077
13.8 100.5 1077
55.8 37.6 1077
50.6 36.6 1077
50.0 36.3 1077
41.0 29.0 1077
53.2 -4.1 1077
23.5 121.0 1078
52.8 52.3 1078
-6.2 -38.9 1078
52.2 21.0 1078
-53.8 -67.7 1078
51.7 36.2 1078
22.8 108.3 1078
36.7 117.0 1078
23.1 113.3 1078
55.7 37.6 1079
23.5 121.0 1079
59.9 30.3 1079
13.8 100.5 1079
34.9 137.0 1079
51.8 55.1 1080
51.7 39.2 1080
23.5 121.0 1080
50.3 127.5 1080
45.5 -73.6 1080
14.6 121.1 1080
55.0 50.1 1080
55.7 37.6 1080
51.9 0.9 1080
33.0 -96.7 1080
54.0 86.7 1080
55.2 61.4 1081
22.6 120.3 1081
52.8 52.3 1081
52.8 52.3 1081
23.5 121.0 1081
55.7 37.6 1081
18.5 73.9 1081
45.5 -73.6 1081
39.9 116.4 1081
23.5 121.0 1081
37.5 127.0 1081
-17.4 -66.1 1082
51.7 55.4 1082
50.4 30.5 1082
23.5 121.0 1082
55.8 37.6 1082
45.5 -73.6 1082
54.6 39.7 1082
22.3 114.2 1082
51.2 58.3 1083
44.2 42.1 1083
-0.2 -78.5 1083
51.2 58.3 1083
51.2 58.3 1083
22.5 114.1 1083
55.0 73.4 1083
55.7 37.6 1083
25.0 121.5 1083
50.6 36.6 1083
55.2 61.4 1083
53.0 36.1 1084
52.2 21.0 1084
48.7 38.1 1084
50.4 30.5 1084
53.7 91.4 1084
48.9 2.3 1084
37.5 127.0 1084
47.2 39.7 1084
37.5 127.0 1084
45.1 7.7 1084
24.1 120.7 1084
55.7 37.6 1084
42.5 14.2 1084
32.1 118.8 1084
52.2 21.0 1084
23.5 121.0 1085
51.3 58.2 1085
57.8 40.9 1085
17.4 78.5 1085
31.0 121.4 1085
23.1 113.3 1085
23.1 113.3 1085
51.7 39.2 1085
55.7 37.6 1085
53.1 49.9 1085
52.2 21.0 1086
51.7 55.4 1086
13.8 100.5 1086
57.8 40.9 1086
56.9 60.6 1086
14.4 121.3 1086
45.5 -73.6 1086
53.7 52.4 1087
51.8 55.1 1087
51.5 -0.1 1087
51.2 58.6 1087
53.1 36.2 1087
50.6 36.6 1087
45.5 -73.6 1087
55.0 36.5 1088
51.2 58.3 1088
47.1 37.5 1088
28.2 113.1 1088
50.6 26.2 1088
34.3 108.9 1088
36.7 117.0 1088
55.0 60.1 1088
52.0 47.8 1088
23.5 121.0 1088
52.2 21.0 1088
37.5 127.0 1088
39.9 116.4 1088
55.7 37.6 1088
51.5 -0.1 1088
47.5 19.1 1088
23.5 121.0 1089
50.6 36.6 1089
34.8 113.7 1089
50.4 30.5 1089
55.3 38.7 1089
22.8 108.3 1089
17.4 78.5 1089
43.1 141.3 1089
52.8 52.3 1090
46.5 30.7 1090
53.5 49.3 1090
45.8 126.7 1090
23.5 121.0 1090
50.6 36.6 1090
48.0 37.8 1090
45.7 27.2 1090
35.6 139.8 1090
55.7 37.6 1090
55.7 84.9 1090
25.0 121.5 1090
50.9 4.4 1091
51.7 55.4 1091
23.5 121.0 1091
24.1 120.7 1091
23.1 113.3 1091
44.8 -93.0 1091
52.3 104.3 1092
51.7 55.4 1092
50.6 36.6 1092
52.2 21.0 1092
35.6 140.1 1092
49.8 24.0 1092
55.7 37.6 1093
26.6 106.7 1093
25.0 121.5 1093
51.7 36.2 1093
24.1 120.7 1093
56.2 47.3 1093
55.8 37.6 1093
24.1 120.5 1094
47.9 35.3 1094
30.7 104.1 1094
52.2 21.0 1094
55.8 39.0 1094
31.9 117.3 1094
16.3 80.5 1094
23.1 113.3 1094
23.5 121.0 1094
53.0 36.1 1094
53.0 36.1 1094
53.1 91.4 1095
34.8 113.7 1095
47.5 41.8 1095
53.1 36.2 1095
17.4 78.5 1095
12.2 -86.3 1095
53.5 49.3 1095
50.6 36.6 1095
48.9 2.3 1095
40.5 -74.2 1095
56.1 40.4 1095
49.6 34.5 1096
52.2 21.0 1096
51.7 55.4 1096
55.8 37.6 1096
52.2 21.0 1096
37.5 127.0 1096
30.7 104.1 1096
34.7 113.5 1096
22.8 108.3 1096
37.5 127.0 1096
24.1 120.7 1096
45.5 -73.6 1096
51.8 55.1 1097
50.4 30.5 1097
53.1 46.6 1097
48.9 2.3 1097
31.0 121.4 1097
1.3 103.9 1097
51.5 -0.1 1098
52.2 21.0 1098
36.6 101.8 1098
49.6 34.5 1098
45.5 -73.6 1098
55.0 82.9 1098
35.9 139.6 1098
52.3 104.3 1098
34.7 113.5 1098
47.2 39.7 1098
50.6 36.6 1098
40.5 -74.2 1098
48.7 44.5 1098
36.7 117.0 1098
48.3 16.3 1098
50.0 36.3 1098
39.1 117.2 1099
49.8 30.1 1099
9.9 -84.1 1099
43.4 -79.7 1099
47.4 19.1 1099
23.5 121.0 1099
49.8 30.1 1099
36.7 117.0 1099
32.1 118.8 1099
53.4 83.8 1099
51.3 37.8 1099
41.0 29.0 1099
52.2 21.0 1099
54.6 39.7 1099
23.5 121.0 1099
23.5 121.0 1099
40.6 9.0 1099
36.7 117.0 1100
51.8 55.1 1100
24.1 120.7 1100
35.7 139.7 1100
53.0 36.1 1100
57.7 12.0 1101
51.8 11.6 1101
52.8 52.3 1101
34.8 113.7 1101
23.5 121.0 1101
51.7 55.4 1101
51.7 55.4 1101
56.6 47.9 1101
47.2 39.7 1101
30.3 120.2 1101
13.8 100.5 1101
32.1 118.8 1101
30.3 120.2 1101
31.0 121.4 1101
32.1 118.8 1101
31.0 121.4 1101
51.5 -0.1 1101
23.1 113.3 1102
-23.5 -46.2 1102
23.5 121.0 1102
14.6 121.0 1102
51.8 55.1 1102
25.7 -100.4 1102
29.5 -98.4 1102
23.5 121.0 1102
51.7 55.4 1102
30.3 120.2 1102
25.0 121.5 1103
37.8 -97.8 1103
51.7 39.2 1103
55.7 37.6 1103
51.7 39.2 1103
23.5 121.0 1103
52.2 21.0 1103
53.2 50.1 1103
51.5 46.1 1103
51.5 46.1 1103
36.7 117.0 1103
22.6 120.4 1103
58.0 56.3 1104
-40.6 -73.1 1104
22.3 114.2 1104
51.7 39.2 1104
52.2 21.0 1104
54.6 39.7 1104
9.9 -84.1 1104
53.3 -3.8 1104
37.5 127.0 1104
51.7 36.2 1104
55.7 37.6 1104
25.0 121.5 1104
51.7 39.2 1104
30.3 120.2 1105
45.0 39.0 1105
48.2 16.4 1105
37.5 127.0 1105
45.8 126.7 1105
51.2 58.3 1105
34.8 113.7 1105
33.8 132.8 1105
55.7 37.6 1105
44.4 26.1 1105
32.1 118.8 1105
36.7 117.0 1105
50.6 36.6 1105
47.2 39.7 1105
43.6 39.7 1105
21.0 105.9 1105
31.0 121.4 1105
52.8 52.3 1106
51.2 58.3 1106
25.0 121.5 1106
36.7 117.0 1106
50.4 30.5 1106
24.1 120.7 1106
28.2 113.1 1106
59.3 18.1 1106
26.6 106.7 1106
22.8 108.3 1106
51.5 -0.2 1107
55.7 37.6 1107
55.7 37.6 1107
40.4 -3.7 1107
36.7 117.0 1107
44.0 43.1 1107
-18.9 -48.3 1108
39.9 116.4 1108
55.7 37.6 1108
51.7 55.4 1109
53.5 49.1 1109
37.5 127.0 1109
51.5 46.0 1109
39.9 116.4 1109
23.1 113.3 1109
23.1 113.3 1109
47.6 -122.3 1109
45.5 -73.6 1109
48.5 32.3 1110
55.7 37.6 1110
25.0 121.5 1110
51.7 55.4 1110
53.5 49.3 1110
45.5 -73.6 1110
55.7 37.6 1110
25.0 121.3 1110
34.7 113.5 1110
10.5 -66.8 1110
45.5 -73.6 1110
45.5 -73.6 1110
48.9 2.3 1111
30.7 104.1 1111
48.7 44.5 1111
56.2 47.3 1111
24.1 120.7 1111
56.6 84.8 1111
22.3 114.2 1111
45.0 39.0 1111
48.0 37.8 1111
25.0 121.5 1112
50.6 36.6 1112
34.0 -117.8 1112
56.9 35.9 1112
23.5 121.0 1112
61.3 73.4 1112
36.7 117.0 1112
45.5 -73.6 1112
23.5 121.0 1112
29.0 111.7 1113
23.1 113.3 1113
50.6 36.6 1113
56.1 47.3 1113
56.9 60.6 1113
50.0 36.3 1113
19.3 76.1 1113
43.9 125.3 1113
55.7 38.0 1113
31.0 121.4 1114
34.9 117.6 1114
45.8 126.7 1114
35.2 115.4 1114
51.7 36.2 1114
22.8 108.3 1114
51.7 36.2 1114
48.0 68.0 1114
6.9 79.9 1114
34.8 135.4 1114
25.0 121.5 1114
25.0 121.5 1114
48.0 37.8 1114
17.4 78.5 1114
41.8 123.4 1114
51.7 55.4 1115
-38.0 -57.5 1115
56.1 47.5 1115
45.3 -73.9 1115
48.5 35.0 1115
25.0 121.5 1115
51.7 36.2 1115
50.7 3.2 1116
45.5 -73.6 1116
48.5 35.0 1116
30.3 120.2 1116
36.7 117.0 1116
43.9 125.3 1116
55.8 37.6 1116
47.6 -122.3 1116
33.8 -84.3 1117
37.5 127.0 1117
47.4 40.1 1117
50.6 36.6 1117
50.4 30.5 1117
23.5 121.0 1117
28.2 113.1 1117
34.7 113.5 1117
17.4 78.5 1117
53.4 83.8 1117
45.5 -73.6 1118
52.8 52.3 1118
23.5 121.0 1118
37.8 -97.8 1118
44.4 26.1 1118
56.9 60.6 1118
45.1 16.3 1118
24.5 118.1 1118
56.4 41.3 1118
50.4 30.5 1118
53.2 50.1 1118
51.7 39.2 1118
53.1 36.2 1118
30.7 104.1 1119
30.7 104.1 1119
51.8 55.1 1119
51.7 55.4 1119
37.5 127.0 1119
22.4 114.0 1119
56.0 37.2 1119
55.7 37.6 1119
4.6 -74.1 1119
55.7 37.6 1119
48.5 35.0 1119
45.5 -73.6 1119
45.5 -73.6 1119
37.5 127.0 1119
57.2 65.5 1120
51.7 55.4 1120
25.0 121.5 1120
37.5 127.0 1120
22.3 114.2 1120
57.0 41.0 1120
51.8 55.1 1121
36.7 117.0 1121
39.1 -77.1 1121
53.2 50.1 1121
55.7 37.6 1121
53.5 87.3 1121
23.0 113.7 1121
47.4 19.1 1121
41.1 -8.6 1121
32.8 -117.0 1121
39.9 116.4 1121
53.0 36.1 1121
51.7 55.4 1122
38.6 -90.2 1122
55.8 37.6 1122
51.3 37.8 1122
36.7 117.0 1122
36.7 117.0 1122
56.9 35.9 1122
36.7 117.0 1122
22.6 120.3 1122
37.8 -97.8 1122
53.0 36.1 1122
37.5 127.0 1122
55.7 37.6 1122
52.3 104.3 1122
30.0 120.6 1123
51.7 55.4 1123
46.5 30.7 1123
13.8 100.5 1123
59.9 30.3 1123
36.7 117.0 1123
47.6 -122.3 1123
51.7 55.4 1124
48.5 35.0 1124
35.2 115.4 1124
10.0 8.0 1124
30.7 104.1 1124
51.7 36.2 1124
29.0 -111.7 1124
23.5 121.0 1124
48.7 44.5 1124
51.7 39.2 1124
34.7 -86.6 1124
34.8 113.7 1124
53.0 36.1 1124
60.9 76.6 1125
51.8 55.1 1125
51.8 55.1 1125
25.0 121.5 1125
25.0 121.5 1125
35.6 139.7 1125
51.5 46.1 1125
23.5 121.0 1125
22.5 114.1 1125
37.5 127.0 1125
37.5 127.0 1125
10.8 106.6 1125
51.7 39.2 1125
39.9 116.4 1125
53.0 36.1 1125
53.5 49.3 1126
50.4 30.5 1126
51.7 55.4 1126
51.2 58.3 1126
51.5 -0.1 1126
24.5 118.1 1126
30.6 114.3 1126
51.5 46.0 1126
51.7 36.2 1126
36.7 117.0 1126
41.1 -73.5 1126
19.4 -99.1 1126
17.0 81.8 1126
23.5 121.0 1127
23.5 121.0 1127
23.5 121.0 1127
35.7 51.4 1127
55.7 37.6 1127
1.4 103.8 1127
37.5 127.0 1128
45.5 -73.6 1128
12.5 -70.0 1128
55.7 37.6 1128
52.8 52.3 1128
50.4 30.5 1128
49.8 30.1 1128
47.1 8.2 1128
51.5 81.3 1128
50.6 36.6 1128
39.1 -94.6 1128
51.3 9.5 1128
43.9 125.3 1128
53.1 36.2 1128
31.0 121.4 1128
55.7 37.6 1129
25.0 121.5 1129
40.8 -74.1 1129
37.4 -122.0 1129
37.5 127.0 1129
34.7 113.5 1129
23.1 113.3 1129
51.7 36.2 1129
59.9 30.3 1129
46.1 -73.9 1130
57.2 65.5 1130
45.3 -73.9 1130
32.1 118.8 1130
56.4 37.5 1130
37.5 127.0 1130
52.0 47.8 1130
53.2 50.1 1130
32.1 118.8 1130
37.5 127.0 1130
55.7 37.6 1130
25.0 121.5 1130
23.5 121.0 1130
36.7 117.0 1131
23.5 121.0 1131
41.8 123.4 1131
23.5 121.0 1131
51.1 13.8 1131
56.9 35.9 1131
4.6 -74.1 1131
56.3 114.9 1131
50.3 28.7 1132
53.9 27.6 1132
49.8 24.0 1132
30.7 104.1 1132
41.8 123.4 1132
40.0 45.0 1132
45.8 126.7 1132
32.1 118.8 1132
-26.9 26.7 1132
20.0 77.0 1132
40.5 -74.2 1132
37.5 127.0 1133
30.1 121.1 1133
32.1 118.8 1133
50.0 36.3 1133
24.1 120.7 1133
39.9 116.4 1133
55.4 43.8 1133
22.5 114.1 1133
25.0 121.5 1133
22.5 114.1 1133
56.7 37.2 1133
45.5 -73.6 1133
31.0 121.4 1133
51.7 55.4 1133
45.5 -73.6 1134
51.8 55.1 1134
20.2 85.8 1134
23.1 113.3 1134
25.0 121.5 1134
23.5 121.0 1134
10.4 123.9 1134
34.8 113.7 1134
55.7 37.6 1134
23.1 113.3 1134
51.7 36.2 1134
23.5 121.0 1134
33.7 -84.4 1134
34.8 113.7 1134
23.5 121.0 1134
26.6 106.7 1134
31.0 121.4 1134
23.7 90.4 1135
50.6 36.6 1135
39.9 116.4 1135
25.0 121.5 1135
37.5 127.0 1135
53.2 50.1 1135
34.8 113.7 1135
51.7 36.2 1135
23.5 121.0 1135
48.0 37.8 1135
35.1 137.2 1135
60.6 16.8 1136
54.6 53.7 1136
23.1 113.3 1136
23.5 121.0 1136
51.7 36.2 1136
55.7 37.6 1136
36.7 117.0 1136
50.6 36.6 1136
23.5 121.0 1136
53.2 50.1 1136
17.4 78.5 1136
53.1 36.2 1136
31.5 119.5 1137
23.1 113.3 1137
31.0 121.4 1137
32.0 -5.0 1137
55.7 37.6 1137
34.8 113.7 1137
41.4 -75.4 1137
51.5 46.0 1137
54.3 48.4 1137
32.1 118.8 1137
47.6 -122.3 1137
45.5 -73.6 1137
53.1 36.2 1137
25.0 121.5 1138
47.5 42.2 1138
45.5 -73.6 1138
-23.5 -46.2 1138
25.0 121.5 1138
30.3 120.2 1138
23.1 113.3 1138
45.5 -73.6 1138
51.7 55.4 1139
51.2 58.3 1139
51.7 55.4 1139
23.5 121.0 1139
31.0 121.4 1139
25.8 -80.2 1139
53.5 49.3 1139
22.8 108.3 1139
45.0 39.0 1139
53.5 49.3 1139
24.9 118.6 1139
22.3 113.6 1139
23.5 121.0 1139
53.1 49.9 1140
22.4 114.0 1140
28.2 113.1 1140
51.5 46.0 1140
22.6 120.4 1140
23.1 113.3 1140
43.9 125.3 1140
36.7 117.0 1141
25.0 121.5 1141
36.7 117.0 1141
50.6 36.6 1141
51.7 35.7 1141
52.5 -93.0 1141
28.6 111.8 1141
35.7 139.8 1141
51.7 39.2 1141
50.4 30.5 1142
37.5 127.0 1142
55.8 49.1 1142
51.7 36.2 1142
47.1 21.9 1142
-12.3 -66.2 1142
41.0 64.0 1142
51.7 39.2 1142
24.0 120.9 1143
28.2 113.1 1143
50.6 36.6 1143
51.7 55.4 1143
45.8 126.7 1143
56.2 101.6 1143
53.1 36.2 1143
39.9 116.4 1143
23.5 121.0 1143
28.2 113.1 1143
23.5 121.0 1143
25.0 121.5 1143
55.3 61.4 1143
47.6 -122.3 1143
45.5 -73.6 1143
46.7 38.3 1144
44.7 10.9 1144
51.3 9.5 1144
54.0 38.5 1144
30.6 114.3 1144
36.7 117.0 1144
34.7 113.5 1144
-33.5 -70.7 1144
50.4 30.5 1144
51.7 39.2 1144
55.2 61.4 1144
55.2 61.4 1144
24.1 120.7 1144
34.7 -86.6 1144
51.8 55.1 1145
55.7 37.6 1145
51.3 9.5 1145
52.6 39.6 1145
45.5 -73.6 1145
23.5 121.0 1145
55.7 37.6 1145
37.5 127.0 1145
23.5 121.0 1145
51.2 -0.6 1145
31.0 121.4 1145
36.6 127.5 1145
23.1 113.3 1145
53.1 36.2 1145
55.4 43.8 1145
56.1 47.3 1146
52.8 52.3 1146
23.1 113.3 1146
51.7 39.2 1146
23.1 113.3 1146
51.1 17.0 1146
36.7 117.0 1147
55.0 73.4 1147
37.5 127.0 1147
36.6 127.5 1147
55.8 37.6 1147
23.5 121.0 1147
55.7 37.6 1147
25.0 121.5 1148
39.0 -77.5 1148
39.9 116.4 1148
45.5 -73.6 1148
50.0 36.3 1148
53.2 50.1 1148
23.1 113.3 1148
23.5 121.0 1148
45.3 -73.9 1148
-34.6 -58.4 1148
51.7 55.4 1149
51.7 36.2 1149
23.1 113.3 1149
56.0 92.9 1149
-34.6 -58.4 1149
47.2 39.7 1149
51.2 58.3 1150
45.8 126.7 1150
52.8 52.3 1150
25.0 121.5 1150
22.3 114.2 1150
55.7 38.0 1150
56.2 47.3 1150
30.7 104.1 1150
24.1 120.5 1150
45.5 -73.6 1150
23.1 113.3 1150
51.5 46.0 1150
53.2 50.1 1150
55.2 59.7 1150
55.0 60.1 1150
55.7 37.6 1150
55.7 37.6 1150
55.2 59.7 1150
48.9 2.3 1151
53.2 50.1 1151
37.5 127.0 1151
42.4 -71.0 1151
22.8 108.3 1151
23.1 113.3 1151
55.8 37.6 1151
46.8 75.0 1151
51.5 46.1 1151
37.5 127.0 1151
48.2 16.4 1152
24.1 120.7 1152
35.6 139.7 1152
49.8 30.1 1152
56.7 36.8 1152
32.1 118.8 1152
30.7 104.1 1152
37.8 -97.8 1152
39.1 117.2 1152
50.4 30.5 1152
48.9 2.3 1152
37.5 127.0 1152
31.0 121.4 1152
55.3 61.4 1152
25.0 121.5 1153
23.1 113.3 1153
57.0 61.5 1153
36.7 117.0 1153
39.9 116.4 1153
55.2 61.4 1153
37.5 127.0 1153
50.0 36.3 1153
53.1 36.2 1153
1.3 103.9 1153
37.5 127.0 1153
55.2 61.4 1153
55.2 61.4 1153
51.2 58.3 1154
54.6 39.7 1154
10.7 123.0 1154
51.5 46.0 1154
31.9 117.3 1154
25.3 55.3 1154
55.2 61.4 1154
55.2 61.4 1154
-12.3 -66.2 1154
47.6 -122.3 1154
31.0 121.4 1154
54.8 61.3 1154
32.1 118.8 1154
55.2 61.4 1154
36.7 117.0 1155
40.0 -86.9 1155
23.5 121.0 1155
56.2 47.3 1155
23.5 121.0 1155
23.5 121.0 1155
13.8 100.5 1155
40.7 -74.2 1155
55.2 61.4 1155
56.3 44.0 1155
39.9 116.4 1155
25.0 121.5 1155
25.0 102.7 1155
55.3 61.4 1155
55.7 37.6 1155
31.0 121.4 1156
30.7 104.1 1156
57.0 41.0 1156
25.0 121.5 1156
11.0 77.0 1156
14.7 121.0 1156
45.5 -73.6 1156
24.1 120.7 1156
45.5 -73.6 1156
55.8 37.6 1156
55.2 61.4 1156
45.3 131.0 1157
55.0 82.9 1157
23.1 113.3 1157
36.7 117.0 1157
23.5 121.0 1157
17.4 78.5 1157
53.1 36.2 1157
45.5 -73.6 1157
14.6 121.0 1157
35.6 139.8 1158
55.7 37.6 1158
51.7 36.2 1158
55.2 61.4 1158
55.2 61.4 1158
51.2 58.3 1158
50.6 36.6 1158
48.7 38.1 1159
36.6 101.8 1159
44.5 34.2 1159
22.3 114.2 1159
36.7 117.0 1159
51.8 55.1 1159
40.7 109.8 1159
31.9 117.3 1159
50.6 36.6 1159
55.2 59.7 1159
55.2 61.4 1159
55.7 38.0 1159
55.2 61.4 1159
55.2 59.7 1159
55.2 61.4 1159
55.7 37.6 1160
23.5 121.0 1160
36.7 117.0 1160
22.6 120.3 1160
32.1 118.8 1160
22.5 114.1 1160
55.2 61.4 1160
55.7 37.6 1161
46.7 10.5 1161
59.9 30.3 1161
52.7 58.7 1161
1.3 103.9 1161
44.9 23.9 1162
51.5 -0.1 1162
50.5 30.5 1162
45.5 -73.6 1162
-34.1 150.8 1162
46.3 48.0 1162
31.0 121.4 1162
40.5 -74.2 1162
56.9 60.6 1162
55.0 73.4 1162
31.9 117.3 1162
51.5 46.0 1162
50.9 16.5 1162
55.2 61.4 1162
45.5 -73.6 1162
45.5 -73.6 1163
56.3 44.0 1163
36.7 117.0 1163
55.7 37.6 1163
56.9 35.9 1163
14.3 121.6 1163
51.5 46.0 1163
55.3 61.4 1163
32.8 -96.8 1163
30.3 120.2 1163
51.2 38.5 1163
37.8 -97.8 1163
55.7 37.6 1164
30.3 120.2 1164
36.7 117.0 1164
51.7 55.4 1164
55.8 37.6 1164
23.5 121.0 1164
45.8 126.7 1164
35.9 139.6 1164
23.5 121.0 1164
23.5 121.0 1164
22.5 114.1 1164
50.4 30.5 1164
23.5 121.0 1164
7.0 81.0 1165
51.8 55.1 1165
55.0 82.9 1165
41.0 75.0 1165
25.0 121.5 1165
51.7 36.2 1165
50.5 30.5 1165
55.8 37.6 1165
45.5 -73.6 1165
55.7 37.6 1165
31.0 121.4 1165
31.0 121.4 1165
35.6 139.8 1165
23.1 113.3 1165
51.5 -0.1 1166
51.7 55.4 1166
30.7 104.1 1166
23.5 121.0 1166
32.1 118.8 1166
-12.1 -77.1 1166
48.9 2.3 1166
-0.7 -75.3 1166
47.2 39.7 1166
37.5 121.4 1166
39.9 116.4 1166
55.2 61.4 1166
51.7 39.2 1167
37.8 -97.8 1167
54.2 37.6 1167
63.8 20.3 1167
36.7 117.0 1167
53.5 49.3 1167
23.5 121.0 1167
42.7 26.3 1167
53.2 50.1 1167
51.7 36.2 1167
28.2 113.1 1167
50.6 36.6 1167
23.5 121.0 1167
47.9 35.3 1168
49.8 30.1 1168
-6.8 39.3 1168
28.2 113.1 1168
23.1 120.2 1168
53.1 36.2 1168
50.4 30.5 1168
32.1 118.8 1168
32.1 118.8 1169
53.8 87.1 1169
47.1 8.2 1169
36.7 117.0 1169
50.5 30.5 1169
55.0 60.1 1169
46.3 48.0 1169
23.1 113.3 1169
47.1 37.5 1169
51.7 36.2 1169
40.7 -74.2 1169
50.4 30.5 1169
53.5 49.6 1170
55.2 61.4 1170
30.7 104.1 1170
48.5 35.0 1170
51.3 58.2 1170
30.3 120.2 1170
-23.5 -46.6 1170
58.5 31.3 1170
31.0 121.4 1170
55.3 61.4 1170
51.7 55.4 1171
51.7 39.2 1171
36.7 117.0 1171
23.1 113.3 1171
51.5 -0.2 1171
45.5 -73.6 1171
55.8 37.6 1171
23.1 113.3 1171
55.7 37.6 1171
30.3 120.2 1171
50.7 3.2 1171
54.2 37.6 1171
54.2 37.6 1171
37.8 -97.8 1171
39.1 117.2 1171
55.2 61.4 1171
50.6 36.6 1171
55.2 61.4 1171
53.2 48.5 1171
25.0 121.3 1172
51.8 55.1 1172
56.1 47.3 1172
51.7 55.4 1172
51.3 58.2 1172
30.3 -97.7 1172
24.8 121.0 1172
55.2 61.4 1172
22.5 114.1 1172
53.0 36.1 1172
55.2 61.4 1172
56.4 44.1 1172
50.6 36.6 1172
51.2 4.4 1172
47.5 19.1 1172
40.5 -74.2 1172
55.9 37.7 1172
51.7 36.2 1173
23.1 113.3 1173
36.7 117.0 1173
52.0 -0.7 1173
55.7 37.6 1173
46.3 48.0 1173
-19.8 -43.9 1173
30.3 120.2 1173
50.6 36.6 1173
55.8 37.6 1173
55.2 61.4 1173
51.3 58.2 1174
-37.8 145.0 1174
50.4 30.5 1174
37.5 127.0 1174
46.5 30.7 1174
51.5 -0.1 1174
55.8 37.6 1174
34.1 -118.3 1174
51.7 36.2 1174
37.5 127.0 1174
53.1 36.2 1174
-22.8 -43.2 1174
51.5 -0.1 1174
46.3 20.2 1174
45.5 -73.6 1174
39.9 115.3 1174
50.4 30.5 1175
23.5 121.0 1175
30.8 120.8 1175
51.5 -0.2 1175
-23.5 -46.6 1175
39.9 116.4 1175
53.2 50.1 1175
35.6 139.7 1175
52.4 4.9 1175
23.1 113.3 1175
9.3 122.9 1175
55.2 61.4 1175
55.2 61.4 1175
55.2 61.4 1175
36.7 117.0 1176
48.9 24.7 1176
34.8 113.7 1176
50.5 30.5 1176
51.2 58.3 1176
23.1 113.3 1176
24.9 67.1 1176
55.8 38.4 1176
51.7 36.2 1176
55.7 37.6 1176
34.8 137.9 1176
50.0 36.3 1176
32.8 -96.8 1176
37.5 121.4 1177
52.8 52.3 1177
36.7 117.0 1177
45.5 -73.6 1177
29.0 -95.5 1177
28.6 77.2 1177
50.4 30.5 1177
55.2 61.4 1177
51.5 -0.1 1177
44.9 33.8 1177
50.4 30.5 1177
54.2 45.2 1178
30.7 104.1 1178
51.8 55.1 1178
34.8 113.7 1178
50.6 8.7 1178
25.0 121.5 1178
55.2 61.4 1178
45.5 -73.6 1178
25.0 121.5 1178
55.2 61.4 1178
55.2 59.7 1178
45.3 -73.9 1178
45.3 -73.9 1179
49.6 25.6 1179
28.2 113.1 1179
51.2 58.3 1179
34.1 -118.3 1179
23.5 121.0 1179
53.0 36.1 1179
53.1 36.2 1179
23.1 113.3 1179
4.6 -74.1 1179
34.8 113.7 1179
55.2 61.4 1179
55.3 61.4 1179
51.8 55.1 1180
55.7 37.6 1180
34.8 113.7 1180
51.9 36.3 1180
56.9 60.6 1180
27.4 -82.5 1180
35.2 115.4 1180
23.1 113.3 1180
22.5 114.1 1180
41.0 29.0 1180
53.5 49.3 1180
55.2 61.4 1180
30.3 120.2 1180
55.8 37.6 1180
54.6 39.7 1181
51.8 55.1 1181
23.7 90.4 1181
34.1 -118.3 1181
53.2 50.1 1181
-18.9 -48.3 1181
23.5 121.0 1181
32.1 118.8 1181
51.7 39.2 1181
55.2 59.7 1181
23.5 121.0 1181
34.8 113.7 1182
54.6 39.7 1182
45.5 -73.6 1182
57.8 40.9 1182
59.2 11.4 1182
49.8 30.1 1182
51.7 36.2 1182
44.9 40.6 1182
53.0 -1.2 1182
31.9 117.3 1182
39.9 116.4 1182
55.3 61.4 1182
54.2 45.2 1182
37.5 127.0 1183
55.0 36.5 1183
45.5 -73.6 1183
33.4 -111.9 1183
53.9 27.6 1183
48.9 2.3 1183
22.5 114.1 1183
51.7 36.2 1183
45.5 -73.6 1183
55.9 37.4 1183
50.4 80.3 1183
55.8 37.6 1183
55.7 12.6 1184
36.7 117.0 1184
52.2 21.0 1184
40.3 -111.7 1184
49.8 24.0 1184
50.1 8.7 1184
37.5 121.4 1184
39.1 117.2 1184
31.0 121.4 1184
51.3 58.2 1185
51.7 55.4 1185
51.8 55.1 1185
48.9 2.3 1185
-34.6 -58.4 1185
55.0 82.9 1185
55.7 37.6 1185
55.8 37.6 1185
23.7 90.4 1186
30.3 120.2 1186
31.0 121.4 1186
56.0 43.1 1186
23.5 121.0 1186
40.5 -74.2 1186
52.7 58.7 1186
23.1 113.3 1186
55.7 12.6 1186
51.7 39.2 1186
35.6 140.1 1186
40.5 -74.2 1186
55.2 59.7 1186
55.5 47.5 1187
54.6 53.7 1187
48.9 2.3 1187
50.4 30.5 1187
30.7 104.1 1187
24.7 46.7 1187
23.5 121.0 1187
30.3 120.2 1187
55.8 37.6 1187
24.1 120.7 1187
53.5 49.3 1187
36.7 117.0 1187
32.1 118.8 1187
30.7 104.1 1188
14.6 121.0 1188
23.0 120.2 1188
53.0 36.1 1188
37.5 127.0 1188
23.1 113.3 1188
25.0 121.5 1188
55.2 61.4 1188
23.5 121.0 1188
23.5 121.0 1189
53.5 49.6 1189
51.8 55.1 1189
21.5 39.2 1189
36.7 117.0 1189
39.1 117.2 1189
51.1 17.0 1189
45.5 -73.6 1189
55.2 61.4 1189
45.5 -73.6 1190
55.7 37.6 1190
35.2 115.4 1190
23.1 113.3 1190
34.1 -118.3 1190
30.3 120.2 1190
39.9 116.4 1190
26.2 91.7 1190
50.4 30.5 1190
55.3 61.4 1190
51.7 39.2 1190
55.2 61.4 1190
50.0 36.3 1190
23.5 121.0 1190
53.2 45.0 1191
45.5 -73.6 1191
51.2 58.3 1191
50.6 36.6 1191
56.1 47.3 1191
41.4 -8.3 1191
39.0 -77.5 1191
-34.1 150.8 1191
51.8 55.1 1191
37.6 -77.6 1191
49.6 34.5 1192
52.8 52.3 1192
55.2 61.4 1192
54.9 43.3 1192
30.7 104.1 1192
56.9 60.6 1192
56.9 53.2 1192
23.1 113.3 1192
55.2 61.4 1192
34.8 113.7 1192
43.9 125.3 1192
51.5 -0.1 1192
51.2 58.3 1193
23.5 121.0 1193
37.5 127.0 1193
23.1 113.3 1193
23.1 113.3 1193
56.9 60.6 1193
48.9 2.3 1193
40.4 -80.6 1193
30.3 120.2 1193
24.1 120.7 1193
42.4 -71.1 1193
32.1 118.8 1193
36.7 117.0 1194
36.7 117.0 1194
23.1 113.3 1194
39.9 116.4 1194
53.0 36.1 1194
54.3 48.4 1194
24.9 118.6 1194
55.2 61.4 1194
55.2 61.4 1194
48.5 35.0 1194
55.2 61.4 1194
55.2 61.4 1194
55.2 61.4 1194
51.2 58.3 1195
51.2 58.3 1195
36.7 117.0 1195
45.5 -73.6 1195
55.7 37.6 1195
52.5 103.9 1195
41.0 29.0 1195
46.3 48.0 1195
35.2 115.4 1195
13.0 77.6 1195
23.1 113.3 1195
55.2 61.4 1195
36.7 117.0 1196
36.7 117.0 1196
54.6 39.7 1196
47.1 8.2 1196
30.3 120.2 1196
51.3 9.5 1196
45.3 -73.9 1196
55.2 61.4 1196
51.2 58.3 1197
56.0 92.9 1197
41.2 -73.2 1197
51.7 35.7 1197
43.5 43.6 1197
45.5 -73.6 1197
36.7 117.0 1197
23.5 121.0 1197
25.0 121.3 1197
32.1 118.8 1197
45.5 -73.6 1197
45.5 -73.6 1197
36.6 128.7 1197
45.5 -73.6 1198
53.8 91.3 1198
55.0 73.4 1198
42.0 43.5 1198
46.8 29.5 1198
25.0 121.5 1198
24.0 120.9 1198
48.9 2.3 1198
8.5 124.6 1198
55.7 37.6 1198
51.5 46.0 1198
23.5 121.0 1198
1.3 103.9 1198
39.9 116.4 1198
45.3 -73.9 1198
23.1 114.4 1198
31.0 121.4 1198
55.2 61.4 1198
55.7 37.6 1198
26.1 119.3 1199
48.0 37.9 1199
36.7 117.0 1199
51.8 55.1 1199
59.9 30.3 1199
43.9 -79.0 1199
39.9 116.4 1199
51.5 46.0 1199
39.9 116.4 1199
55.2 61.4 1199
37.5 121.4 1200
23.5 121.0 1200
59.9 30.3 1200
30.7 104.1 1200
51.5 -0.2 1200
53.4 59.0 1200
44.9 -93.3 1200
50.6 36.6 1200
50.4 30.5 1200
49.8 30.1 1200
53.1 36.2 1200
58.0 56.3 1200
40.5 -74.2 1200
39.9 116.4 1200
23.5 121.0 1200
55.2 61.4 1200
25.0 121.5 1200
37.5 127.0 1200
50.3 28.7 1201
23.5 121.0 1201
56.3 93.5 1201
50.6 36.6 1201
55.3 61.4 1201
55.2 61.4 1201
55.2 61.4 1201
30.7 104.1 1202
51.7 55.4 1202
26.1 119.3 1202
-26.2 28.1 1202
20.0 77.0 1202
47.5 19.1 1202
30.3 120.2 1202
59.6 30.1 1202
51.7 36.2 1202
34.1 -118.2 1202
55.3 61.4 1202
55.2 61.4 1202
51.3 9.5 1202
45.5 -73.6 1203
36.7 117.0 1203
39.6 -76.2 1203
55.7 37.6 1203
35.9 139.6 1203
23.1 113.3 1203
55.5 65.3 1203
24.1 120.7 1203
30.7 104.1 1203
30.6 114.3 1203
55.2 61.4 1203
55.3 61.4 1203
47.5 19.1 1203
23.5 121.0 1203
25.0 121.5 1203
51.8 55.1 1203
29.4 48.0 1203
32.1 118.8 1203
23.1 113.3 1204
23.1 113.3 1204
51.3 9.5 1204
23.5 121.0 1204
31.9 117.3 1204
24.6 120.8 1204
55.2 61.4 1204
22.8 108.3 1204
51.7 39.2 1204
53.5 48.9 1204
56.1 40.4 1205
51.2 58.3 1205
31.0 121.4 1205
34.3 108.9 1205
43.5 43.6 1205
52.8 55.8 1205
50.6 36.6 1205
26.1 119.3 1205
51.3 37.8 1205
32.9 -117.2 1205
25.0 121.5 1205
55.2 61.4 1205
55.3 61.4 1205
4.6 -74.1 1205
-17.3 -42.8 1205
36.7 117.0 1206
28.5 119.9 1206
22.6 120.4 1206
53.2 48.5 1206
42.7 -84.6 1206
52.7 58.7 1206
53.2 50.1 1206
23.1 113.3 1206
45.0 39.0 1206
45.5 -73.6 1206
22.5 114.1 1206
53.6 10.0 1206
50.4 83.5 1206
45.5 -73.6 1207
45.5 131.9 1207
23.0 120.2 1207
39.9 116.4 1207
41.9 -87.6 1207
50.4 80.3 1207
45.5 -73.6 1208
25.0 121.5 1208
48.9 2.3 1208
46.3 48.0 1208
24.5 118.1 1208
51.5 46.1 1208
50.6 36.6 1208
50.6 36.6 1208
55.2 61.4 1208
55.2 61.4 1208
30.3 120.2 1208
25.0 121.5 1208
55.2 61.4 1208
29.9 121.5 1209
36.7 117.0 1209
23.5 121.0 1209
30.7 104.1 1209
46.0 25.0 1209
25.0 121.3 1209
14.4 100.6 1209
49.8 30.1 1209
54.3 48.4 1209
22.2 114.3 1209
32.1 118.8 1209
32.1 118.8 1209
32.8 -96.8 1210
54.8 56.0 1210
39.0 -77.5 1210
51.2 58.3 1210
22.3 114.2 1210
46.0 25.0 1210
30.7 104.1 1210
36.7 117.0 1210
19.4 -99.1 1210
10.4 123.9 1210
39.9 116.4 1210
37.5 127.0 1210
23.5 121.0 1210
23.1 113.3 1210
25.0 121.5 1210
55.8 37.6 1210
40.4 -3.7 1210
49.6 25.6 1210
55.2 59.7 1210
25.0 121.5 1210
50.0 36.3 1210
30.3 120.2 1210
55.2 61.4 1210
36.7 117.0 1211
49.4 32.1 1211
51.5 -0.1 1211
48.3 38.1 1211
54.9 43.3 1211
47.2 39.7 1211
22.8 121.2 1211
41.2 -73.2 1211
41.0 64.0 1211
45.5 -73.6 1211
51.2 58.3 1212
51.8 55.1 1212
23.1 113.3 1212
36.7 117.0 1212
-36.8 -73.0 1212
22.8 108.3 1212
23.7 90.4 1212
23.5 121.0 1212
45.5 -73.6 1212
45.0 39.0 1212
45.5 -73.6 1212
32.1 118.8 1212
55.2 61.4 1212
43.2 -123.4 1213
37.5 127.0 1213
38.1 46.3 1213
34.1 -118.3 1213
-6.2 106.8 1213
55.7 37.6 1213
45.0 39.0 1213
54.3 48.4 1213
54.3 48.4 1213
54.9 61.4 1213
22.8 108.3 1213
45.5 -73.6 1214
25.0 121.5 1214
23.1 113.3 1214
45.1 7.7 1214
30.4 -90.9 1214
54.3 48.4 1214
39.9 116.4 1214
32.1 118.8 1214
55.3 61.4 1214
55.7 37.6 1215
13.8 100.5 1215
30.2 121.2 1215
-18.4 -49.2 1215
51.2 58.3 1215
25.0 121.5 1215
51.5 -0.2 1215
55.2 61.4 1215
55.2 61.4 1215
54.8 32.0 1215
23.5 121.0 1215
37.5 127.0 1216
51.3 37.8 1216
56.1 47.3 1216
50.0 36.3 1216
23.1 113.3 1216
51.7 55.4 1216
30.7 104.1 1216
48.7 44.5 1216
23.5 121.0 1216
20.0 110.3 1216
50.6 36.6 1216
55.7 37.6 1216
23.5 121.0 1216
45.5 -73.6 1216
53.1 46.6 1217
48.0 37.8 1217
48.9 2.3 1217
41.8 -91.6 1217
55.3 86.1 1217
55.8 37.6 1217
25.0 121.3 1217
23.5 121.0 1217
45.5 -73.6 1217
53.2 50.1 1218
51.7 36.2 1218
51.2 58.3 1218
51.8 107.6 1218
48.9 2.3 1218
58.0 56.3 1218
39.1 117.2 1218
48.9 2.3 1218
1.3 103.9 1218
37.5 127.0 1218
51.7 39.2 1218
55.2 61.4 1218
53.2 50.1 1218
29.4 48.0 1218
50.4 30.5 1218
45.5 -73.6 1218
41.2 -73.2 1218
39.9 116.4 1218
49.8 24.0 1219
30.7 104.1 1219
45.9 -119.7 1219
25.0 121.5 1219
55.0 60.1 1219
51.8 107.6 1219
50.4 30.5 1219
36.1 -95.3 1219
31.9 117.3 1219
55.3 61.4 1219
22.5 114.1 1220
55.0 50.1 1220
47.9 16.2 1220
36.7 117.0 1220
30.3 120.2 1220
24.1 120.7 1220
53.5 49.6 1220
41.1 -74.0 1220
54.3 48.4 1220
22.6 120.4 1220
22.3 114.2 1220
37.5 127.0 1220
51.7 36.2 1220
-0.2 -78.5 1221
51.7 55.4 1221
51.7 55.4 1221
49.4 32.1 1221
53.1 36.2 1221
55.8 37.6 1221
30.3 120.2 1221
55.0 60.1 1221
51.5 -0.1 1221
55.2 59.7 1221
49.6 34.5 1222
45.5 -73.6 1222
54.6 39.7 1222
58.1 52.7 1222
53.5 49.6 1222
23.5 121.0 1222
50.6 36.6 1222
52.7 6.2 1222
55.2 61.4 1222
53.9 86.7 1222
55.2 61.4 1222
24.9 118.6 1222
54.3 48.4 1222
48.5 35.0 1223
34.1 -118.3 1223
37.8 -97.8 1223
36.7 117.0 1223
45.5 -73.6 1223
28.6 77.2 1223
53.4 83.8 1223
45.5 -73.6 1223
36.1 103.8 1223
45.5 -73.6 1223
23.5 121.0 1223
55.9 37.7 1223
53.6 56.0 1223
20.0 77.0 1224
23.5 121.0 1224
28.2 113.1 1224
53.7 91.4 1224
22.3 114.2 1224
53.1 36.2 1224
55.7 37.6 1224
55.3 61.4 1224
39.9 116.4 1224
50.6 36.6 1224
23.5 121.0 1225
49.4 32.1 1225
32.1 118.8 1225
49.6 25.6 1225
49.8 30.1 1225
59.6 33.5 1225
23.0 120.2 1225
23.1 113.3 1225
23.5 121.0 1225
23.0 120.2 1225
55.2 61.4 1225
51.7 55.4 1226
49.6 34.5 1226
23.5 121.0 1226
35.4 139.6 1226
51.5 46.0 1226
-34.5 -58.7 1226
49.4 32.1 1226
54.3 48.4 1226
39.9 116.4 1226
55.2 59.7 1226
52.5 103.9 1226
55.2 61.4 1226
48.9 2.3 1226
4.6 -74.1 1226
55.2 61.4 1226
56.3 44.0 1227
25.0 121.5 1227
40.5 -74.2 1227
23.5 121.0 1227
55.7 37.6 1227
25.0 121.3 1227
51.9 33.5 1227
55.2 61.4 1227
55.2 61.4 1227
50.6 36.6 1227
55.3 86.1 1227
14.6 121.0 1227
50.6 36.6 1227
31.0 121.4 1227
36.7 117.0 1228
57.6 39.9 1228
51.8 55.1 1228
25.0 121.5 1228
34.0 -117.9 1228
23.1 113.3 1228
22.3 114.2 1228
55.2 61.4 1228
55.7 37.6 1228
51.7 36.2 1228
56.1 47.3 1229
30.7 104.1 1229
55.8 -4.3 1229
23.5 121.0 1229
50.6 -111.9 1229
47.9 106.9 1229
37.5 127.0 1229
22.8 108.3 1229
39.9 116.4 1229
55.2 59.7 1229
56.2 47.3 1229
55.2 61.4 1229
47.3 19.2 1230
35.6 139.8 1230
59.6 33.5 1230
46.3 48.0 1230
38.0 -122.0 1230
30.7 104.1 1230
44.0 43.1 1230
51.9 36.3 1230
39.1 117.2 1230
54.3 48.4 1230
55.7 37.6 1230
56.3 44.0 1230
31.0 121.4 1230
55.2 61.4 1230
23.5 121.0 1231
31.0 121.4 1231
54.6 39.7 1231
36.7 117.0 1231
24.1 120.7 1231
55.7 37.6 1231
23.5 121.0 1232
45.5 -73.6 1232
55.7 37.6 1232
41.9 12.5 1232
52.7 58.7 1232
35.4 136.7 1232
43.7 -79.5 1232
50.6 36.6 1232
23.5 121.0 1232
4.6 -74.1 1232
1.3 103.9 1232
50.4 30.5 1232
25.3 55.3 1232
55.2 61.4 1232
56.0 37.9 1232
31.0 121.4 1232
55.2 61.4 1232
55.7 37.6 1233
45.9 -119.7 1233
48.9 2.3 1233
31.0 121.4 1233
7.1 125.6 1233
30.3 120.2 1233
55.7 37.6 1233
22.6 120.4 1233
-12.3 -66.2 1233
21.5 39.2 1233
56.9 35.9 1233
23.5 121.0 1233
23.5 121.0 1233
51.5 -0.2 1234
23.5 121.0 1234
63.8 20.3 1234
50.6 36.6 1234
25.0 121.5 1234
24.9 118.6 1234
51.7 39.2 1234
56.3 44.0 1234
55.4 43.8 1235
55.8 -4.3 1235
45.5 -73.6 1235
53.0 36.1 1235
50.4 30.5 1235
23.5 121.0 1235
23.1 113.3 1235
45.5 -73.6 1235
47.2 39.7 1235
48.9 2.3 1235
59.4 56.8 1235
25.0 121.5 1235
51.9 36.3 1235
55.2 61.4 1235
59.4 28.2 1235
40.7 109.8 1235
45.3 -73.9 1235
36.7 117.0 1236
36.1 140.1 1236
23.5 121.0 1236
53.2 50.1 1236
51.2 58.3 1236
37.5 127.0 1236
58.3 59.8 1236
54.5 37.1 1236
46.3 48.0 1236
54.3 49.6 1236
23.5 121.0 1236
49.4 32.1 1236
54.3 48.4 1236
34.7 113.5 1236
54.3 48.4 1236
30.1 121.1 1237
51.5 -0.5 1237
37.5 127.0 1237
36.7 117.0 1237
51.8 55.1 1237
46.3 48.0 1237
45.0 39.0 1237
53.0 36.1 1237
35.4 139.6 1237
20.0 110.3 1237
25.0 121.5 1237
49.6 34.5 1238
28.2 113.1 1238
57.0 25.0 1238
36.7 117.0 1238
34.0 -117.9 1238
53.0 36.1 1238
41.0 20.0 1238
14.6 121.1 1238
54.3 48.4 1238
25.0 121.5 1238
31.0 121.4 1238
-22.8 -43.2 1238
55.2 61.4 1238
23.0 120.2 1238
55.2 61.4 1238
55.7 37.6 1238
57.0 24.1 1239
50.6 36.6 1239
50.5 30.5 1239
23.1 113.3 1239
25.0 121.5 1239
14.2 121.5 1239
22.6 88.4 1239
23.5 121.0 1239
45.5 -73.6 1239
41.5 -81.5 1239
-27.2 -48.5 1239
55.2 61.4 1239
32.1 118.8 1239
55.2 61.4 1239
34.8 113.7 1239
48.5 32.3 1240
57.2 65.5 1240
53.5 49.3 1240
30.8 120.8 1240
32.1 118.8 1240
52.8 52.3 1240
46.3 48.0 1240
23.5 121.0 1240
23.5 121.0 1240
25.0 121.3 1240
55.7 37.6 1240
42.8 -106.4 1240
14.6 121.0 1240
55.3 61.4 1240
55.2 61.4 1240
45.3 -73.9 1240
36.1 103.8 1241
36.7 117.0 1241
53.0 36.1 1241
33.5 -84.2 1241
36.7 117.0 1241
55.2 59.7 1241
-34.6 -58.4 1241
22.6 110.2 1241
30.3 120.2 1242
44.5 34.2 1242
54.6 39.7 1242
49.8 24.0 1242
37.5 127.0 1242
41.0 64.0 1242
-12.3 -66.2 1242
1.3 103.9 1242
30.3 120.2 1242
41.7 44.8 1243
30.3 -97.7 1243
36.7 117.0 1243
36.7 117.0 1243
-18.9 -48.3 1243
48.9 2.3 1243
25.0 121.5 1243
25.0 121.5 1243
60.2 60.0 1243
55.4 43.8 1243
14.6 121.0 1243
55.7 37.6 1243
23.5 121.0 1244
34.7 113.5 1244
51.7 39.2 1244
41.0 75.0 1244
40.4 -80.0 1244
48.0 37.8 1244
55.2 61.4 1244
50.4 30.5 1244
45.5 -73.6 1244
54.3 48.4 1244
36.1 103.8 1244
50.6 36.6 1245
51.3 58.2 1245
57.8 40.9 1245
50.4 30.5 1245
20.2 85.8 1245
45.5 -73.6 1246
30.3 120.2 1246
50.6 36.6 1246
26.1 119.3 1246
54.6 39.7 1246
-25.4 -49.3 1246
45.5 -73.6 1246
30.1 31.3 1246
34.8 113.7 1246
48.9 2.3 1246
52.2 48.0 1246
34.8 113.7 1246
25.0 121.5 1246
45.0 34.1 1246
28.2 113.1 1247
55.8 -4.3 1247
23.1 113.3 1247
23.5 121.0 1247
55.0 73.4 1247
53.3 34.4 1247
34.0 -117.9 1247
-22.8 -43.2 1247
37.5 127.0 1247
37.5 127.0 1247
23.5 121.0 1247
54.7 20.5 1247
55.7 37.9 1247
54.3 48.4 1247
17.4 78.5 1247
17.4 78.5 1247
25.0 121.5 1247
31.0 121.4 1247
31.0 121.4 1247
55.2 61.4 1247
50.6 36.6 1248
56.2 47.3 1248
30.7 104.1 1248
23.5 121.0 1248
50.6 36.6 1248
-34.4 -58.6 1248
34.1 -118.3 1248
52.4 4.9 1248
35.6 139.8 1248
34.1 -118.3 1248
50.0 36.3 1248
55.2 61.4 1248
-25.4 -49.3 1248
42.0 -87.7 1248
54.3 48.4 1248
34.8 113.7 1248
32.1 118.8 1249
51.7 36.2 1249
35.2 115.4 1249
29.9 121.5 1249
55.8 37.6 1249
23.5 121.0 1249
51.7 39.2 1249
40.4 -3.7 1249
39.9 116.4 1249
45.0 41.1 1249
45.5 -73.6 1249
55.2 61.4 1249
56.0 37.2 1249
36.7 117.0 1250
51.7 55.4 1250
17.4 78.5 1250
49.8 18.3 1250
23.5 121.0 1250
51.6 46.1 1250
55.0 82.9 1250
54.6 53.7 1250
45.5 9.2 1250
50.4 30.5 1251
23.5 121.0 1251
46.3 48.0 1251
34.4 -118.4 1251
55.7 37.6 1251
23.1 113.3 1251
55.7 37.6 1251
48.9 2.3 1251
50.9 4.4 1251
51.6 40.1 1251
55.2 59.7 1251
54.8 61.3 1251
41.3 -104.7 1251
31.0 121.4 1252
30.3 120.2 1252
51.7 55.4 1252
28.2 113.1 1252
-26.2 28.1 1252
58.0 56.3 1252
23.5 121.0 1252
22.6 120.4 1252
50.4 30.5 1252
45.5 -73.6 1252
34.7 135.8 1252
54.3 48.4 1252
31.0 121.4 1252
55.2 61.4 1252
55.8 -4.3 1253
39.9 116.4 1253
47.2 39.7 1253
25.0 121.5 1253
23.1 113.3 1253
55.7 37.6 1253
19.0 72.8 1253
45.5 -73.6 1253
56.2 47.3 1253
52.3 77.0 1253
56.1 47.5 1254
55.0 73.4 1254
51.7 36.2 1254
48.9 2.3 1254
50.6 36.6 1254
51.7 55.4 1254
56.3 93.5 1254
30.7 104.1 1254
48.9 2.3 1254
42.9 -78.8 1254
23.1 113.3 1254
54.3 48.4 1254
30.3 120.2 1254
55.2 61.4 1254
35.6 139.7 1255
56.2 47.3 1255
33.7 -84.4 1255
48.5 32.3 1255
54.8 56.0 1255
29.0 -111.7 1255
23.1 113.3 1255
55.2 59.7 1255
23.5 121.0 1255
51.2 58.3 1256
50.6 36.6 1256
55.0 73.4 1256
53.0 36.1 1256
34.8 113.7 1256
51.8 55.1 1256
10.5 -66.9 1256
55.4 43.8 1256
55.0 82.9 1256
33.4 -112.0 1256
55.2 61.4 1256
30.3 120.2 1256
43.0 44.7 1256
25.0 121.5 1256
50.4 30.5 1256
50.1 8.7 1257
53.0 36.1 1257
29.0 -111.7 1257
50.7 3.2 1257
56.0 37.2 1257
50.5 30.5 1257
55.3 61.4 1257
56.0 24.0 1258
51.7 55.4 1258
52.4 5.0 1258
41.0 75.0 1258
47.2 39.7 1258
52.4 4.9 1258
45.0 41.1 1258
55.7 37.6 1258
32.1 118.8 1258
32.1 118.8 1258
45.0 42.0 1258
22.3 114.2 1258
53.6 9.9 1258
55.2 61.4 1258
31.0 121.4 1258
39.9 116.4 1259
49.0 31.4 1259
51.7 55.4 1259
46.3 -96.7 1259
55.7 37.6 1259
55.7 37.6 1259
56.9 35.9 1259
55.7 37.6 1259
22.6 88.4 1259
55.4 43.8 1259
55.3 61.4 1259
56.3 44.0 1259
55.2 61.4 1259
31.0 121.4 1259
55.2 61.4 1259
30.3 120.2 1259
55.7 37.6 1259
21.2 79.1 1259
56.0 37.2 1259
41.7 123.2 1259
54.6 39.7 1260
36.7 117.0 1260
53.0 36.1 1260
53.1 45.4 1260
52.8 52.3 1260
34.0 -117.9 1260
34.7 113.5 1260
51.7 39.2 1260
23.5 121.0 1260
23.5 121.0 1260
32.1 118.8 1260
23.5 121.0 1260
56.2 47.3 1260
55.2 61.4 1260
51.7 39.2 1260
45.5 -73.6 1260
45.0 34.1 1260
22.3 114.2 1260
51.7 36.2 1260
14.6 121.0 1261
42.0 -87.7 1261
24.9 118.6 1261
49.6 34.5 1261
55.7 37.6 1261
55.2 61.4 1261
53.4 83.8 1261
53.1 36.2 1262
51.7 36.2 1262
29.9 121.5 1262
25.0 121.5 1262
14.9 121.0 1262
50.5 30.5 1262
56.9 60.6 1262
48.9 2.3 1262
49.8 30.1 1262
55.2 11.8 1262
55.2 61.4 1262
32.1 118.8 1262
51.7 55.4 1263
-22.8 -47.2 1263
29.9 121.5 1263
55.9 37.8 1263
50.6 36.6 1263
34.8 -95.6 1263
25.0 121.5 1263
49.8 30.1 1263
55.3 61.4 1263
-7.8 -35.7 1263
55.2 61.4 1263
55.2 61.4 1263
24.1 120.7 1263
55.3 61.4 1263
51.8 55.1 1264
53.0 36.1 1264
52.8 52.3 1264
31.0 121.4 1264
51.7 55.4 1264
55.7 37.6 1264
25.0 121.5 1264
20.2 85.8 1264
50.9 4.4 1264
39.0 -77.5 1264
51.5 46.1 1264
31.9 117.3 1264
51.9 36.3 1264
30.3 120.2 1264
35.7 51.4 1264
46.3 48.0 1264
19.4 -99.1 1264
54.3 48.4 1264
23.1 114.4 1264
51.8 55.1 1265
48.1 39.9 1265
57.9 60.0 1265
43.1 12.1 1265
57.1 24.3 1265
30.0 70.0 1265
37.5 127.0 1265
-34.1 150.8 1265
24.1 120.7 1265
26.6 106.7 1265
50.9 34.8 1265
22.3 114.2 1265
65.0 77.7 1265
23.5 121.0 1265
22.5 114.1 1266
45.3 -73.9 1266
52.8 52.3 1266
19.7 -101.1 1266
59.3 18.1 1266
24.1 120.7 1266
23.5 121.0 1266
14.6 121.1 1266
37.5 41.0 1266
50.4 30.5 1266
39.9 116.4 1266
22.6 120.4 1266
40.2 44.5 1266
55.2 61.4 1266
31.8 120.0 1266
55.2 61.4 1266
-6.2 106.8 1266
55.2 61.4 1266
51.7 39.2 1266
34.0 -117.9 1266
53.0 36.1 1267
48.9 24.7 1267
51.6 -0.2 1267
55.7 37.6 1267
50.6 36.6 1267
20.0 77.0 1267
22.3 114.2 1267
32.1 118.8 1267
55.2 61.4 1267
31.0 121.4 1267
56.4 41.3 1267
52.8 104.8 1267
45.5 -73.6 1267
47.8 35.2 1267
-12.3 -66.2 1267
55.2 61.4 1267
48.0 37.8 1268
39.9 116.4 1268
23.5 121.0 1268
53.5 49.3 1268
32.1 118.8 1268
51.7 39.2 1268
-34.6 -58.5 1268
37.5 -122.2 1268
49.2 -122.9 1268
55.7 37.6 1268
55.2 61.4 1268
34.0 -118.3 1268
51.5 -0.1 1269
29.8 -95.4 1269
55.7 37.6 1269
53.0 36.1 1269
48.9 2.3 1269
25.0 121.5 1269
23.5 121.0 1269
41.0 29.0 1269
39.1 117.2 1269
23.5 121.0 1269
55.3 61.4 1269
55.2 61.4 1269
55.2 61.4 1269
53.5 49.3 1270
25.0 121.5 1270
-28.5 -49.0 1270
55.8 37.6 1270
23.5 121.0 1270
51.8 55.1 1270
57.8 40.9 1270
30.3 120.2 1270
55.7 37.6 1270
32.1 118.8 1270
46.3 48.0 1270
24.1 120.7 1270
50.4 30.5 1270
55.2 61.4 1270
23.5 121.0 1270
54.3 48.4 1270
32.1 118.8 1270
37.5 -122.4 1271
31.0 121.4 1271
37.8 -97.8 1271
51.5 46.0 1271
57.8 40.9 1271
-37.8 144.9 1271
39.9 116.4 1271
50.4 30.5 1271
24.1 120.7 1271
23.1 113.3 1271
36.6 128.7 1271
49.7 6.6 1271
31.0 121.4 1271
42.7 23.3 1271
54.3 48.4 1271
32.1 118.8 1271
32.1 118.8 1271
55.2 61.4 1271
37.8 128.9 1271
22.3 114.2 1272
23.0 120.2 1272
51.2 58.3 1272
30.7 104.1 1272
30.3 120.2 1272
25.0 121.5 1272
43.5 43.6 1272
45.5 -73.6 1272
31.9 34.8 1272
45.5 -73.6 1272
43.9 125.3 1272
-36.7 -73.1 1272
20.6 -87.1 1272
45.7 9.7 1272
55.2 61.4 1272
32.1 118.8 1272
56.9 60.6 1272
32.1 118.8 1272
55.9 48.3 1273
23.5 121.0 1273
34.1 -118.3 1273
55.7 37.6 1273
37.7 -84.6 1273
23.5 121.0 1273
40.0 45.0 1273
55.2 61.4 1273
32.1 118.8 1273
55.2 61.4 1273
55.8 37.6 1273
23.0 120.2 1273
55.0 60.4 1273
55.3 61.4 1273
37.8 -97.8 1274
51.7 36.2 1274
51.5 -0.2 1274
51.5 -0.2 1274
55.2 61.4 1274
53.1 36.2 1274
51.5 -0.1 1274
54.3 48.4 1274
50.4 30.5 1274
23.1 113.3 1274
55.7 37.6 1274
-12.3 -66.2 1274
24.1 120.7 1274
32.1 118.8 1274
35.0 136.9 1275
36.7 117.0 1275
43.6 -79.4 1275
51.7 39.2 1275
31.9 34.8 1275
48.9 2.3 1275
55.7 37.6 1275
51.5 -0.1 1275
23.5 121.0 1275
49.4 32.1 1275
45.5 -73.6 1276
23.7 90.4 1276
50.4 30.5 1276
51.8 55.1 1276
51.2 58.3 1276
30.3 120.2 1276
59.9 30.3 1276
33.4 -112.0 1276
55.2 61.4 1276
55.2 61.4 1276
45.3 -73.9 1276
54.3 48.4 1276
45.5 -73.6 1276
56.4 37.5 1277
53.5 49.3 1277
51.7 55.4 1277
57.8 40.9 1277
55.7 37.6 1277
54.3 48.4 1277
13.8 100.5 1277
40.7 109.8 1277
37.5 127.0 1277
44.6 33.5 1277
36.7 117.0 1277
55.0 50.1 1277
24.1 120.7 1277
32.1 118.8 1277
56.9 60.6 1277
31.0 121.4 1277
23.5 121.0 1277
51.7 36.2 1277
55.7 37.6 1278
53.0 36.1 1278
48.9 2.3 1278
55.8 37.6 1278
55.7 37.6 1278
49.4 32.1 1278
49.3 -123.1 1278
22.6 120.4 1278
48.5 35.0 1278
23.5 121.0 1278
55.2 61.4 1278
32.1 118.8 1278
45.5 -73.6 1278
45.5 -73.6 1278
53.5 49.3 1278
55.7 84.9 1278
55.2 61.4 1278
59.4 13.5 1279
52.8 52.3 1279
51.7 55.4 1279
31.0 121.4 1279
57.8 40.9 1279
58.6 49.7 1279
54.6 39.7 1279
55.2 61.4 1279
54.6 39.7 1279
55.2 61.4 1279
38.7 -77.2 1280
19.7 -101.1 1280
25.0 121.5 1280
59.4 13.5 1280
56.9 60.6 1280
22.3 114.2 1280
51.7 55.4 1281
-6.2 106.8 1281
36.7 117.0 1281
42.7 23.3 1281
37.5 127.0 1281
23.5 121.0 1281
39.8 -105.0 1281
34.1 -118.3 1281
50.4 30.5 1281
50.4 30.5 1281
55.3 61.4 1281
54.3 48.4 1281
54.6 39.7 1281
55.0 73.4 1282
56.5 85.0 1282
14.6 121.0 1282
52.4 4.9 1282
54.9 43.3 1282
46.3 48.0 1282
39.9 116.4 1282
30.7 104.1 1282
50.4 30.5 1282
23.5 121.0 1282
55.3 61.4 1282
54.3 48.4 1282
36.6 128.7 1282
32.1 118.8 1282
40.2 44.5 1282
50.4 30.5 1282
48.9 2.3 1283
54.7 25.3 1283
20.2 85.8 1283
25.0 121.5 1283
25.0 121.5 1283
37.8 -97.8 1283
50.4 30.5 1283
28.2 113.1 1283
30.3 120.2 1283
41.1 14.8 1283
50.4 30.5 1283
48.9 2.3 1284
23.5 121.0 1284
52.4 4.9 1284
45.5 -73.6 1284
50.4 30.5 1284
-16.5 -68.1 1284
30.3 120.2 1284
51.5 -0.1 1284
51.5 46.0 1284
55.2 61.4 1284
56.1 47.3 1284
24.1 120.7 1284
50.4 80.3 1284
13.8 100.5 1285
53.2 45.0 1285
52.2 21.0 1285
36.7 117.0 1285
55.3 61.4 1285
55.2 61.4 1285
51.2 58.3 1286
58.1 52.7 1286
56.2 47.3 1286
23.7 90.4 1286
51.3 9.5 1286
56.3 44.0 1286
55.7 37.6 1286
59.4 13.5 1286
55.2 61.4 1286
55.8 37.6 1286
46.1 -73.9 1287
37.5 121.4 1287
51.7 55.4 1287
23.5 121.0 1287
23.5 121.0 1287
23.0 120.2 1287
54.2 45.2 1287
39.9 116.4 1287
52.2 48.0 1287
48.7 44.5 1287
54.6 39.7 1287
55.3 61.4 1287
49.2 31.9 1288
24.1 120.7 1288
34.8 113.7 1288
25.0 121.5 1288
50.4 30.5 1288
55.2 61.4 1288
56.8 56.4 1288
50.4 30.5 1288
56.8 53.2 1288
14.6 121.0 1288
50.4 30.5 1288
55.2 61.4 1288
25.0 121.5 1289
52.8 52.3 1289
57.8 40.9 1289
39.9 116.4 1289
55.5 65.3 1289
37.3 -121.9 1289
22.5 114.1 1289
23.5 121.0 1289
54.3 48.4 1289
19.7 -101.1 1290
23.5 121.0 1290
48.5 35.0 1290
-25.7 28.2 1290
48.5 35.0 1290
38.7 -77.2 1290
23.1 113.3 1290
50.5 30.5 1290
23.1 113.3 1290
45.5 -73.6 1290
55.2 61.4 1290
55.2 61.4 1290
40.0 45.0 1290
55.2 61.4 1290
36.0 139.6 1291
51.2 58.3 1291
47.3 39.9 1291
53.8 38.1 1291
37.5 127.0 1291
23.5 121.0 1291
46.7 32.6 1291
51.5 -0.1 1291
56.9 35.9 1291
43.3 13.0 1291
40.5 47.5 1291
45.5 -73.6 1292
48.9 2.3 1292
32.1 118.8 1292
28.5 77.0 1292
22.8 108.3 1292
53.2 50.1 1292
56.9 35.9 1292
52.0 47.8 1292
-20.5 -47.4 1292
51.7 39.2 1292
36.7 117.0 1293
22.5 114.1 1293
37.8 -97.8 1293
23.1 113.3 1293
51.3 9.5 1293
29.0 -111.7 1293
41.0 75.0 1293
31.9 117.3 1293
48.5 32.3 1293
23.5 121.0 1293
50.3 28.7 1293
31.5 34.8 1293
45.5 -73.6 1293
-20.8 -47.6 1294
55.7 37.6 1294
23.1 113.3 1294
51.8 107.6 1294
46.3 48.0 1294
35.1 136.7 1294
45.0 41.1 1294
25.0 121.5 1294
24.9 118.6 1294
23.1 113.3 1294
42.0 -87.7 1294
52.6 19.7 1294
45.5 -73.6 1294
23.1 113.3 1294
49.4 32.1 1294
55.7 37.6 1294
49.4 27.0 1294
54.8 83.1 1294
37.5 126.7 1294
39.9 116.4 1294
34.0 -117.9 1294
45.5 -73.6 1294
55.2 61.4 1294
37.5 127.0 1294
46.5 30.7 1295
55.7 37.6 1295
40.4 -3.7 1295
50.4 30.5 1295
51.3 37.8 1295
53.8 87.1 1295
43.2 -77.7 1295
55.2 61.4 1295
55.2 61.4 1295
56.9 60.6 1295
55.2 61.4 1295
25.0 121.5 1296
40.7 109.8 1296
54.7 25.3 1296
51.7 55.4 1296
-0.2 -78.5 1296
22.3 114.2 1296
39.9 116.4 1296
36.6 128.7 1296
-22.9 -43.2 1296
51.7 36.2 1296
25.0 121.5 1296
38.5 106.3 1296
25.1 121.4 1296
25.0 121.5 1296
45.3 -73.9 1296
40.5 -74.2 1296
51.7 55.4 1297
48.9 36.3 1297
55.7 37.6 1297
53.4 59.0 1297
-22.8 -43.2 1297
57.8 40.9 1297
54.2 37.6 1297
-33.4 -70.7 1297
58.5 31.3 1297
30.3 120.2 1297
23.5 121.0 1297
23.0 120.2 1297
34.7 -86.6 1297
55.2 61.4 1297
40.2 44.5 1297
25.0 121.5 1298
30.3 120.2 1298
53.1 36.2 1298
36.7 117.0 1298
55.7 37.6 1298
23.5 121.0 1298
17.4 78.5 1298
32.0 -5.0 1298
23.1 113.3 1298
20.0 77.0 1298
55.4 43.8 1298
24.5 118.1 1298
56.9 53.2 1298
23.5 121.0 1298
42.0 21.4 1298
55.7 37.6 1298
45.5 -73.6 1298
41.0 64.0 1298
34.8 113.7 1299
50.0 36.3 1299
48.9 2.3 1299
25.0 121.5 1299
23.5 121.0 1299
55.9 26.5 1299
25.0 121.5 1299
50.5 30.5 1299
52.8 52.3 1299
56.1 47.5 1299
23.5 121.0 1299
23.5 121.0 1299
50.6 36.6 1299
55.2 61.4 1299
45.5 -73.6 1299
55.2 61.4 1299
22.6 120.4 1299
30.3 120.2 1299
54.3 48.4 1299
51.7 36.2 1300
50.9 34.8 1300
28.2 113.1 1300
20.0 77.0 1300
51.3 58.2 1300
30.3 120.2 1300
55.2 61.4 1300
55.3 61.4 1300
55.2 59.7 1300
43.1 12.1 1300
31.0 121.4 1300
24.9 118.6 1300
51.5 -0.1 1301
55.8 37.6 1301
48.6 39.3 1301
53.1 36.2 1301
33.6 -112.1 1301
55.2 61.4 1301
52.2 21.0 1301
45.5 -73.6 1301
23.0 113.1 1301
25.0 121.5 1301
23.1 113.3 1301
55.9 37.8 1301
30.9 -89.9 1301
52.8 52.3 1302
51.7 36.2 1302
25.1 121.7 1302
34.8 113.7 1302
29.0 -111.7 1302
55.7 37.6 1302
35.6 139.7 1302
45.5 -73.6 1302
43.1 12.1 1302
54.3 48.4 1302
55.3 61.4 1302
45.5 -73.6 1302
55.2 61.4 1302
54.3 48.4 1302
49.4 32.1 1302
55.3 61.4 1302
32.1 118.8 1302
31.0 121.4 1303
45.5 -73.6 1303
46.0 25.0 1303
40.5 -74.2 1303
50.4 30.5 1303
50.6 36.6 1303
45.5 -73.6 1303
45.5 -73.6 1303
55.7 37.6 1303
36.1 103.8 1303
55.2 61.4 1303
-26.2 28.1 1303
55.2 61.4 1304
34.1 -118.2 1304
30.3 120.2 1304
29.0 -111.7 1304
46.3 48.0 1304
23.5 121.0 1304
45.5 -73.6 1304
19.4 -99.1 1304
56.0 37.9 1304
24.6 120.8 1304
22.3 114.2 1304
39.9 116.4 1305
53.6 56.0 1305
23.1 113.3 1305
36.7 117.0 1305
22.6 120.4 1305
49.4 32.1 1305
50.5 30.5 1305
30.3 120.2 1305
22.3 114.2 1305
48.3 38.1 1305
56.7 36.8 1305
36.1 103.8 1305
49.7 29.7 1305
23.5 121.0 1305
53.5 -113.5 1305
32.1 118.8 1305
56.2 47.3 1305
55.2 61.4 1305
55.2 61.4 1305
47.5 19.0 1305
31.0 121.4 1305
53.7 91.7 1305
55.2 61.4 1305
45.5 -73.6 1305
39.9 116.4 1305
45.6 8.6 1305
55.2 59.7 1305
36.7 117.0 1306
55.0 73.4 1306
57.0 25.0 1306
43.7 -79.4 1306
44.5 34.2 1306
22.0 96.1 1306
51.7 36.2 1306
51.7 36.2 1306
49.8 30.1 1306
23.5 121.0 1306
55.8 37.6 1306
28.6 115.9 1306
41.8 123.4 1306
55.2 61.4 1306
55.7 37.6 1306
22.3 114.2 1306
39.9 116.4 1306
28.2 113.1 1307
51.8 55.1 1307
32.1 118.8 1307
49.6 34.5 1307
26.1 119.3 1307
37.5 -122.4 1307
51.7 36.2 1307
23.5 121.0 1307
39.9 116.4 1307
25.0 121.5 1307
48.0 37.9 1307
31.0 121.4 1307
55.2 61.4 1307
55.3 61.4 1307
23.1 113.3 1308
52.8 52.3 1308
30.3 120.2 1308
48.5 32.3 1308
49.4 32.1 1308
46.3 48.0 1308
25.0 121.5 1308
-33.9 18.7 1308
55.7 37.6 1308
57.4 41.3 1308
31.9 117.3 1308
51.5 46.0 1308
23.1 113.3 1308
45.5 -73.6 1308
37.5 126.7 1308
46.3 48.0 1309
23.1 113.3 1309
39.9 116.4 1309
52.4 4.9 1309
37.5 127.0 1309
23.5 121.0 1309
51.5 46.0 1309
25.8 -80.2 1309
23.1 113.3 1309
55.2 61.4 1309
30.3 120.2 1309
57.8 40.9 1310
36.7 117.0 1310
23.5 121.0 1310
23.1 113.3 1310
41.8 123.4 1310
22.3 114.2 1310
51.7 55.4 1310
45.5 -73.6 1310
18.5 -69.9 1310
51.7 55.4 1310
39.5 116.7 1310
22.3 114.2 1310
39.9 116.4 1310
26.6 106.7 1310
30.7 104.1 1310
57.8 40.9 1310
23.5 121.0 1310
50.4 30.5 1310
51.1 128.4 1310
37.8 128.9 1310
45.5 -73.6 1310
45.5 -73.6 1310
39.9 116.4 1310
55.2 61.4 1310
55.3 61.4 1310
30.3 120.2 1310
32.1 118.8 1310
22.3 114.2 1310
56.7 37.2 1310
55.2 61.4 1310
55.2 61.4 1310
55.8 60.7 1310
23.5 121.0 1310
51.7 55.4 1311
53.2 50.1 1311
51.7 55.4 1311
46.5 30.7 1311
55.2 61.4 1311
49.8 30.1 1311
51.3 37.8 1311
25.0 121.5 1311
23.1 113.3 1311
46.4 34.2 1311
45.5 -73.6 1311
55.3 61.4 1311
55.2 61.4 1311
55.2 61.4 1311
52.3 21.0 1311
55.7 37.6 1311
23.5 121.0 1312
44.6 27.4 1312
57.0 24.1 1312
55.0 73.4 1312
51.2 58.3 1312
34.3 108.9 1312
50.4 30.5 1312
23.1 113.3 1312
46.6 -97.6 1312
45.9 -119.7 1312
53.1 49.9 1312
37.5 127.0 1312
45.5 -73.6 1312
30.3 120.2 1312
45.5 -73.6 1312
53.2 50.1 1312
32.1 118.8 1312
39.9 115.3 1312
48.9 2.3 1313
31.0 121.4 1313
54.7 25.3 1313
31.0 121.4 1313
24.1 120.7 1313
45.0 39.0 1313
22.6 120.4 1313
54.2 37.6 1313
23.5 121.0 1313
50.1 8.7 1313
25.0 121.5 1313
55.2 59.7 1313
15.0 30.0 1313
54.0 86.7 1313
37.5 127.0 1313
37.5 127.0 1313
49.4 32.1 1314
23.5 121.0 1314
31.0 121.4 1314
51.3 9.5 1314
49.8 30.1 1314
24.1 120.7 1314
25.0 121.5 1314
32.1 118.8 1314
30.3 120.2 1314
55.2 61.4 1314
23.5 121.0 1315
58.5 31.3 1315
55.2 59.7 1315
51.2 58.3 1315
23.1 113.3 1316
39.9 116.4 1316
31.0 121.4 1316
36.7 117.0 1316
14.2 121.5 1316
50.6 36.6 1316
45.5 -73.6 1316
55.2 61.4 1316
32.1 118.8 1316
55.2 61.4 1316
32.1 118.8 1316
23.5 121.0 1316
37.5 121.4 1317
24.8 121.0 1317
48.9 2.3 1317
49.4 32.1 1317
22.9 120.3 1317
50.4 30.5 1317
30.3 120.2 1317
55.8 37.6 1317
43.3 76.9 1317
55.2 61.4 1317
55.3 61.4 1317
55.2 61.4 1317
49.9 14.3 1317
30.3 120.2 1318
23.5 121.0 1318
51.5 -0.1 1318
13.8 100.5 1318
22.6 120.3 1318
-27.5 153.0 1318
55.2 59.7 1318
56.3 44.0 1318
-26.2 28.1 1318
55.0 60.4 1318
31.0 121.4 1319
25.0 121.5 1319
52.8 52.3 1319
52.3 104.3 1319
25.0 121.5 1319
45.3 -73.9 1319
48.9 2.3 1319
23.1 113.3 1319
54.3 48.4 1319
28.7 77.2 1319
23.1 113.3 1319
55.2 61.4 1319
34.7 113.5 1319
25.0 121.5 1319
55.2 61.4 1319
51.5 -0.1 1319
48.2 16.4 1319
55.9 26.5 1320
36.7 117.0 1320
19.7 -101.1 1320
37.5 127.0 1320
45.5 -73.6 1320
34.7 113.5 1320
36.7 117.0 1320
51.7 55.4 1320
41.0 29.0 1320
60.2 60.0 1320
48.5 35.0 1320
22.3 114.2 1320
65.9 57.5 1320
19.7 -101.1 1321
50.7 3.2 1321
31.0 121.4 1321
34.7 135.5 1321
39.9 116.4 1321
51.7 55.4 1321
30.3 120.2 1321
51.7 55.4 1321
-34.1 150.8 1321
-33.5 -70.7 1321
55.8 37.6 1321
22.8 108.3 1321
43.5 43.6 1321
54.3 48.4 1321
55.8 37.6 1321
30.3 120.2 1322
53.9 27.6 1322
51.7 55.4 1322
37.9 139.0 1322
45.5 -73.6 1322
25.0 121.5 1322
29.0 -111.7 1322
51.7 36.2 1322
42.7 26.3 1322
48.0 68.0 1322
40.5 -74.3 1322
25.0 121.5 1322
55.2 61.4 1322
53.0 36.1 1322
40.7 109.8 1322
48.0 37.8 1322
31.0 121.4 1322
23.5 121.0 1323
45.5 -73.6 1323
23.7 90.4 1323
25.0 121.5 1323
59.3 18.1 1323
59.9 30.3 1323
22.5 114.1 1323
45.3 -73.9 1323
59.9 30.3 1323
59.9 30.3 1323
33.4 -111.7 1323
23.5 121.0 1323
22.3 114.2 1323
39.9 116.4 1323
55.2 61.4 1323
20.6 -100.4 1323
50.4 30.5 1323
25.0 121.5 1323
53.0 36.1 1323
48.9 36.3 1323
56.8 53.2 1323
23.5 121.0 1324
39.9 116.4 1324
53.5 49.3 1324
23.1 113.3 1324
55.7 37.6 1324
50.6 36.6 1324
58.6 49.7 1324
25.0 121.5 1324
23.0 120.2 1324
55.9 37.7 1324
55.2 61.4 1324
45.5 -73.6 1324
54.9 37.4 1324
55.2 61.4 1324
41.8 123.4 1325
30.3 120.2 1325
30.7 104.1 1325
51.3 9.5 1325
37.5 -122.4 1325
-1.3 36.8 1325
32.1 118.8 1325
41.8 123.4 1325
35.4 139.6 1325
55.2 61.4 1325
50.6 36.6 1325
36.6 128.7 1325
23.5 121.0 1326
50.4 30.5 1326
32.1 118.8 1326
30.4 -97.8 1326
51.3 9.5 1326
25.0 121.5 1326
53.2 50.1 1326
53.4 10.6 1326
50.4 30.5 1326
50.0 36.3 1326
55.3 61.4 1326
55.2 61.4 1326
51.7 55.4 1326
23.5 121.0 1327
32.8 -83.6 1327
23.5 121.0 1327
32.1 118.8 1327
37.5 127.0 1327
28.6 115.9 1327
-26.2 28.1 1327
22.5 114.1 1327
55.0 82.9 1327
45.5 -73.6 1327
41.2 -96.0 1327
55.3 61.4 1327
25.0 121.5 1328
48.9 24.7 1328
57.2 65.5 1328
50.5 30.5 1328
48.1 37.9 1328
22.5 114.1 1328
17.3 76.8 1328
55.2 61.4 1328
32.1 118.8 1328
34.7 135.5 1328
45.8 126.7 1328
58.1 57.8 1328
23.1 113.3 1328
49.6 34.5 1329
32.1 118.8 1329
36.0 139.8 1329
24.1 120.7 1329
25.0 102.7 1329
23.5 121.0 1329
36.2 140.5 1329
23.5 121.0 1329
23.5 121.0 1329
55.2 61.4 1329
48.5 35.0 1329
55.0 60.1 1329
37.5 127.0 1329
55.3 61.4 1329
53.0 36.1 1329
55.2 61.4 1329
25.0 102.7 1329
50.6 36.6 1330
23.5 121.0 1330
34.8 113.7 1330
51.5 -0.2 1330
53.3 34.4 1330
18.0 -76.8 1330
55.0 82.9 1330
55.7 37.6 1330
32.1 118.8 1330
53.0 36.1 1330
25.0 102.7 1330
30.3 120.2 1330
48.9 2.3 1330
1.3 103.9 1330
55.7 37.9 1330
49.6 34.5 1330
23.1 113.3 1331
48.6 39.3 1331
50.3 28.7 1331
23.5 121.0 1331
33.0 -97.7 1331
58.0 56.3 1331
24.9 118.6 1331
28.4 -82.5 1331
51.5 46.0 1331
22.3 114.2 1331
55.2 61.4 1331
23.5 121.0 1332
59.4 13.5 1332
53.2 50.1 1332
28.6 115.9 1332
23.5 121.0 1332
37.5 127.0 1332
55.2 61.4 1332
45.5 -73.6 1332
31.0 121.4 1332
39.9 116.4 1332
55.2 61.4 1332
50.4 30.5 1332
30.1 121.1 1333
34.1 -118.3 1333
34.9 117.6 1333
22.3 114.2 1333
23.0 120.2 1333
52.0 47.8 1333
39.9 116.4 1333
31.2 30.0 1333
58.6 49.7 1333
31.0 121.4 1333
45.0 39.0 1333
51.2 58.3 1333
50.6 36.6 1333
55.3 61.4 1333
23.5 121.0 1333
36.1 103.8 1333
50.6 36.6 1334
45.3 -73.9 1334
40.7 -74.0 1334
37.5 121.4 1334
55.7 37.6 1334
46.7 32.6 1334
44.5 34.2 1334
51.7 36.2 1334
45.7 -77.2 1334
23.5 121.0 1334
45.5 -73.6 1334
25.0 121.5 1334
55.0 82.9 1334
55.2 61.4 1334
25.0 121.5 1334
24.1 120.5 1334
51.7 55.4 1334
55.2 61.4 1334
45.5 -73.6 1334
35.0 -82.0 1334
57.8 40.9 1335
36.7 117.0 1335
44.2 42.1 1335
50.0 36.1 1335
25.0 121.5 1335
39.8 -105.0 1335
56.8 53.2 1335
30.1 31.3 1335
35.7 51.4 1335
40.6 -74.0 1335
45.5 -73.6 1335
24.1 120.7 1335
30.3 120.2 1335
48.0 37.9 1335
19.2 73.1 1335
48.5 135.1 1335
25.3 55.3 1335
55.2 61.4 1335
43.5 43.6 1335
47.6 -122.3 1335
55.8 37.6 1335
51.8 55.1 1335
39.9 116.4 1336
50.6 36.6 1336
51.5 -0.1 1336
32.1 118.8 1336
55.7 37.6 1336
30.3 120.2 1336
4.6 -74.1 1336
23.5 121.0 1336
40.0 45.0 1336
54.3 48.4 1336
19.6 -99.2 1336
22.5 114.1 1336
50.4 30.5 1336
37.5 127.0 1336
32.1 118.8 1336
24.1 120.7 1336
32.1 118.8 1336
30.3 120.2 1336
55.2 61.4 1336
35.2 115.4 1337
55.3 38.7 1337
48.9 2.3 1337
29.3 47.7 1337
23.5 121.0 1337
32.1 118.8 1337
46.0 25.0 1337
23.5 121.0 1337
23.5 121.0 1337
25.0 121.5 1337
41.0 75.0 1337
23.5 121.0 1337
55.2 61.4 1337
55.2 61.4 1337
50.6 36.6 1337
23.5 121.0 1338
45.0 39.0 1338
50.6 36.6 1338
36.7 117.0 1338
25.0 121.5 1338
53.6 56.0 1338
51.9 36.3 1338
25.1 121.4 1338
24.5 118.1 1338
55.8 37.6 1338
56.8 53.2 1338
50.6 36.6 1338
50.4 30.5 1338
51.7 55.4 1338
55.1 59.5 1338
30.3 120.2 1339
23.5 121.0 1339
29.3 48.1 1339
54.8 56.0 1339
50.5 30.5 1339
40.5 -74.2 1339
40.7 109.8 1339
54.3 48.4 1339
51.5 46.1 1339
55.8 37.6 1339
25.0 121.5 1339
39.9 116.4 1339
45.5 -73.6 1339
47.6 -122.3 1339
56.1 47.5 1340
32.1 118.8 1340
51.7 36.2 1340
25.0 121.5 1340
23.5 121.0 1340
33.8 -117.8 1340
54.6 52.8 1340
25.0 121.5 1340
23.5 121.0 1340
31.0 121.4 1340
56.4 37.5 1340
55.2 61.4 1340
23.5 121.0 1341
37.5 127.0 1341
51.7 36.2 1341
46.3 48.0 1341
51.5 -0.1 1341
-1.4 -48.4 1341
25.0 121.5 1341
55.0 50.1 1341
31.9 117.3 1341
54.9 52.3 1341
28.4 -81.4 1341
8.5 124.6 1341
59.4 13.5 1341
32.1 118.8 1341
32.1 118.8 1341
30.3 120.2 1341
51.7 55.4 1341
44.1 39.1 1341
23.5 121.0 1341
48.9 2.3 1341
55.3 61.4 1341
32.1 118.8 1342
29.3 48.1 1342
68.9 33.7 1342
43.8 -79.3 1342
22.6 120.4 1342
30.7 104.1 1342
23.5 121.0 1342
50.8 -0.6 1342
23.1 113.3 1342
55.2 61.4 1342
55.2 61.4 1342
22.3 114.2 1342
51.5 -0.1 1343
50.6 36.6 1343
32.1 118.8 1343
55.7 37.6 1343
23.5 121.0 1343
-31.9 115.8 1343
50.6 36.6 1343
51.7 55.4 1343
50.4 30.5 1343
30.3 120.2 1343
39.9 116.4 1343
48.9 24.7 1343
55.2 61.4 1343
25.0 121.5 1344
23.5 121.0 1344
55.7 37.6 1344
29.3 48.1 1344
47.2 39.7 1344
23.5 121.0 1344
39.0 -77.5 1344
20.0 77.0 1344
54.7 20.5 1344
50.4 30.5 1344
34.2 -119.2 1344
30.3 120.2 1344
43.1 12.1 1344
55.0 82.9 1344
49.4 32.1 1344
30.3 120.2 1344
31.0 121.4 1344
23.1 113.3 1345
56.1 40.4 1345
36.6 128.7 1345
53.2 50.1 1345
55.7 37.6 1345
-33.5 -70.7 1345
51.7 36.2 1345
45.5 -73.6 1345
54.6 52.8 1345
23.5 121.0 1345
22.6 120.4 1345
45.5 -73.6 1345
54.3 48.4 1345
34.1 -118.3 1345
32.1 118.8 1345
30.3 120.2 1345
34.8 113.7 1346
57.8 40.9 1346
22.6 120.3 1346
39.9 -75.1 1346
30.7 104.1 1346
45.8 126.7 1346
53.0 49.7 1346
37.5 127.0 1346
55.0 50.1 1346
45.3 -73.9 1346
52.3 21.0 1346
56.5 53.8 1347
17.4 78.5 1347
20.2 85.8 1347
41.0 64.0 1347
35.5 139.5 1347
22.8 108.3 1347
55.0 50.1 1347
45.5 -73.6 1347
23.1 113.3 1347
48.9 36.3 1347
55.3 61.4 1347
55.1 59.5 1347
55.0 60.4 1347
32.1 118.8 1347
40.6 -74.5 1348
35.2 115.4 1348
55.7 37.6 1348
48.1 37.9 1348
55.2 59.7 1348
25.0 121.5 1348
47.1 21.9 1348
48.0 68.0 1348
45.5 -73.6 1348
39.9 116.4 1348
35.6 139.7 1349
37.5 127.0 1349
30.3 120.2 1349
28.6 115.9 1349
55.7 37.6 1349
23.5 121.0 1349
48.9 2.3 1349
28.5 77.0 1349
30.3 120.2 1349
51.7 55.4 1349
36.1 103.8 1349
-6.3 106.8 1349
36.1 103.8 1349
53.5 49.3 1350
23.5 121.0 1350
41.0 29.0 1350
48.9 2.3 1350
49.8 30.1 1350
55.0 50.1 1350
33.9 118.3 1350
55.3 61.4 1350
51.7 39.2 1350
50.3 28.7 1351
-22.8 -43.2 1351
23.5 121.0 1351
42.4 -83.1 1351
22.5 114.1 1351
46.0 25.0 1351
10.8 106.6 1351
39.9 116.4 1351
34.0 -117.9 1351
31.0 121.4 1351
19.4 -99.1 1351
23.5 121.0 1351
51.7 55.4 1351
39.9 116.4 1352
54.2 45.2 1352
23.0 120.2 1352
30.3 120.2 1352
47.2 39.7 1352
23.1 113.3 1352
51.7 55.4 1352
55.5 65.3 1352
34.1 -118.3 1352
39.9 -105.2 1353
17.4 78.5 1353
57.0 25.0 1353
41.6 -81.4 1353
48.9 2.3 1353
33.7 -84.8 1353
55.8 37.6 1353
25.0 121.5 1353
50.4 30.5 1353
32.1 118.8 1354
32.1 118.8 1354
55.0 60.1 1354
45.5 -73.6 1354
32.1 118.8 1354
24.6 120.8 1354
56.0 43.1 1354
50.1 14.4 1354
32.1 118.8 1354
13.8 100.5 1354
49.6 34.5 1354
46.3 48.0 1354
46.3 48.0 1354
45.5 -73.6 1354
25.0 121.5 1354
50.6 36.6 1354
50.5 30.5 1354
25.0 121.5 1354
49.4 32.1 1354
51.3 58.2 1354
13.8 100.5 1354
34.1 -118.3 1354
41.3 69.3 1355
23.1 113.3 1355
23.1 113.3 1355
24.7 46.7 1355
36.7 117.0 1355
45.5 -73.6 1355
34.8 113.7 1355
55.7 37.6 1355
41.8 123.4 1355
55.2 59.7 1355
55.8 37.6 1355
32.5 -117.0 1355
51.3 9.5 1355
36.7 117.0 1356
53.5 49.3 1356
55.7 37.9 1356
30.7 104.1 1356
55.3 38.7 1356
48.7 44.5 1356
55.2 61.4 1356
25.3 55.3 1356
30.3 120.2 1356
32.1 118.8 1357
32.1 118.8 1357
55.2 61.4 1357
55.3 61.4 1357
55.7 37.6 1357
54.3 48.4 1357
55.7 37.6 1357
55.7 37.6 1358
35.2 115.4 1358
37.5 127.0 1358
51.7 36.2 1358
48.5 35.0 1358
41.0 29.0 1358
30.3 120.2 1358
11.0 77.0 1358
22.8 108.3 1358
55.3 61.4 1358
26.6 106.7 1358
25.0 121.5 1358
25.0 121.5 1359
23.5 121.0 1359
32.1 118.8 1359
59.6 33.5 1359
24.1 120.7 1359
50.4 30.5 1359
40.0 45.0 1359
23.5 121.0 1359
24.1 120.7 1359
32.8 -117.2 1359
55.2 61.4 1359
31.0 121.4 1359
-12.3 -66.2 1359
51.7 36.2 1360
23.5 121.0 1360
50.1 14.5 1360
13.1 80.3 1360
22.2 113.6 1360
39.9 116.4 1360
23.5 121.0 1360
55.2 61.4 1360
54.3 48.4 1360
56.3 44.0 1361
54.5 36.3 1361
39.9 116.4 1361
55.4 43.8 1361
51.7 36.2 1361
51.7 39.2 1361
54.6 52.8 1361
53.0 36.1 1361
45.5 -73.6 1361
55.7 37.6 1361
55.2 59.7 1361
51.3 9.5 1361
55.2 61.4 1361
34.0 -118.3 1361
19.7 -101.1 1362
32.1 118.8 1362
34.0 -117.9 1362
55.3 61.4 1362
53.0 36.1 1362
23.5 121.0 1362
58.6 49.7 1362
45.5 -73.6 1362
48.9 36.3 1362
56.9 53.2 1362
30.3 120.2 1362
34.8 113.7 1362
51.7 55.4 1362
52.8 52.3 1362
51.2 58.3 1362
48.9 36.3 1363
36.7 117.0 1363
46.1 12.7 1363
45.5 -73.6 1363
34.0 -118.5 1363
41.4 -81.9 1363
31.8 35.2 1363
34.8 113.7 1363
54.4 53.3 1363
30.3 120.2 1363
24.1 120.7 1363
51.2 58.3 1363
23.0 120.2 1363
21.0 72.9 1363
23.5 121.0 1364
57.0 23.8 1364
45.5 -73.6 1364
30.7 104.1 1364
56.9 60.6 1364
57.4 41.3 1364
45.5 -73.6 1364
50.4 30.5 1364
55.3 52.1 1364
57.0 41.0 1364
40.0 45.0 1364
55.2 61.4 1364
52.3 -0.9 1364
42.3 -83.7 1364
34.0 -117.9 1364
48.2 16.4 1364
54.8 56.0 1365
33.7 -84.4 1365
51.8 107.6 1365
50.8 4.4 1365
22.3 114.2 1365
55.7 37.6 1365
55.8 49.1 1365
58.6 49.7 1365
51.2 58.3 1365
22.5 114.1 1365
23.5 121.0 1365
56.2 101.6 1366
23.5 121.0 1366
30.3 120.2 1366
31.0 121.4 1366
56.9 53.2 1366
41.0 75.0 1366
55.3 61.4 1366
54.6 52.5 1366
52.8 52.3 1366
55.2 61.4 1366
31.0 121.4 1366
25.3 55.3 1366
45.0 39.0 1366
30.3 120.2 1366
48.0 37.8 1367
32.1 118.8 1367
23.5 121.0 1367
48.9 2.3 1367
55.0 82.9 1367
37.5 127.0 1367
52.8 52.3 1367
23.1 113.3 1367
49.6 34.5 1368
53.5 49.3 1368
1.3 103.9 1368
26.1 119.3 1368
32.1 118.8 1368
54.2 37.6 1368
58.3 57.8 1368
54.8 83.1 1368
34.8 113.7 1368
51.8 55.1 1368
32.1 118.8 1368
55.2 61.4 1368
36.1 103.8 1368
19.4 -99.1 1368
55.7 37.6 1368
52.2 21.0 1368
29.3 47.7 1369
50.4 30.5 1369
32.1 118.8 1369
23.5 121.0 1369
35.2 115.4 1369
56.9 53.2 1369
49.8 30.1 1369
17.4 78.5 1369
28.2 113.1 1369
48.0 68.0 1369
37.5 127.0 1369
20.0 110.3 1369
40.7 -74.2 1369
50.4 30.5 1369
40.4 -3.7 1369
31.0 121.4 1369
22.6 120.4 1370
26.6 106.7 1370
32.1 118.8 1370
36.7 117.0 1370
50.6 36.6 1370
36.7 117.0 1370
55.5 47.5 1370
46.3 48.0 1370
34.1 -118.4 1370
54.9 52.3 1370
25.0 121.5 1370
49.8 30.1 1370
47.7 -122.3 1370
24.8 121.0 1370
55.2 61.4 1370
55.2 61.4 1370
31.0 121.4 1371
34.8 113.7 1371
55.9 26.5 1371
45.5 -73.6 1371
23.5 121.0 1371
51.2 4.4 1371
25.0 121.5 1371
16.3 80.5 1371
40.7 109.8 1371
55.3 61.4 1371
30.3 120.2 1371
55.9 37.5 1371
43.9 125.3 1371
30.3 120.2 1371
48.9 24.7 1372
50.7 3.2 1372
30.0 31.2 1372
45.5 -73.6 1372
30.7 104.1 1372
51.5 46.0 1372
55.8 37.6 1372
48.0 37.9 1372
6.3 -75.6 1372
37.8 -97.8 1372
55.7 37.6 1372
52.4 4.9 1372
55.7 37.6 1372
32.1 118.8 1373
51.7 36.2 1373
56.9 53.2 1373
32.1 118.8 1373
32.1 118.8 1373
39.9 116.4 1373
34.8 113.7 1373
53.0 36.1 1373
54.6 52.5 1373
25.0 121.5 1373
34.1 -118.3 1373
45.5 9.2 1373
56.1 47.3 1373
39.9 116.4 1373
49.9 28.6 1374
23.0 120.2 1374
58.1 52.7 1374
32.1 118.8 1374
25.0 121.5 1374
32.1 118.8 1374
56.3 44.0 1374
13.8 100.5 1374
55.8 37.6 1374
54.3 48.4 1374
55.0 50.1 1374
55.7 37.6 1374
37.5 127.0 1374
23.0 120.2 1374
21.0 105.9 1374
54.3 48.4 1374
35.9 140.0 1374
25.0 102.7 1374
55.2 61.4 1374
23.5 121.0 1374
28.5 -81.4 1374
30.3 120.2 1375
25.0 121.5 1375
57.0 24.1 1375
48.5 35.0 1375
40.6 -74.5 1375
49.4 32.1 1375
48.9 2.3 1375
53.2 50.1 1375
4.6 -74.1 1375
24.1 120.7 1375
34.8 113.7 1375
55.2 61.4 1375
55.0 60.1 1375
54.3 48.4 1375
48.9 2.3 1375
32.1 118.8 1376
30.1 121.1 1376
50.4 30.5 1376
-29.0 24.0 1376
23.5 121.0 1376
47.0 32.0 1376
48.9 2.3 1376
57.0 41.0 1376
52.4 4.9 1376
45.5 -73.6 1376
36.6 128.7 1376
55.2 61.4 1376
34.7 113.5 1376
37.5 127.0 1376
56.3 44.0 1376
24.9 118.6 1376
42.0 43.5 1376
55.2 61.4 1376
23.1 113.3 1377
22.8 108.3 1377
48.9 2.3 1377
53.0 36.1 1377
22.3 114.2 1377
55.7 37.6 1377
25.0 121.5 1377
23.5 121.0 1377
22.3 114.2 1377
55.2 59.7 1377
23.5 121.0 1377
55.0 73.4 1377
57.0 25.0 1378
32.1 118.8 1378
39.9 116.4 1378
49.8 24.0 1378
29.4 48.0 1378
47.6 -122.3 1378
55.2 59.7 1378
23.5 121.0 1378
40.7 -74.0 1378
55.0 73.4 1378
40.1 -75.4 1379
53.8 38.1 1379
31.5 74.4 1379
22.3 114.2 1379
-12.1 -77.1 1379
45.3 -73.9 1379
45.3 -73.9 1379
55.1 73.1 1379
58.0 56.3 1379
39.9 116.4 1379
22.3 114.0 1379
56.9 53.2 1379
22.6 120.4 1380
32.1 118.8 1380
34.8 113.7 1380
40.5 -74.2 1380
32.1 118.8 1380
34.8 113.7 1380
32.1 118.8 1380
49.6 34.5 1380
23.1 113.3 1380
32.1 118.8 1380
34.8 113.7 1380
23.5 121.0 1380
31.9 117.3 1380
23.1 113.3 1380
50.4 30.5 1380
51.7 55.4 1380
54.6 39.7 1380
32.1 118.8 1380
22.3 114.2 1380
17.4 78.5 1380
56.9 53.2 1381
25.0 121.5 1381
45.9 -119.7 1381
23.5 121.0 1381
53.0 36.1 1381
34.8 113.7 1381
51.7 55.4 1381
26.6 106.7 1381
50.5 30.5 1381
32.1 118.8 1381
33.8 -118.2 1381
55.3 61.4 1381
23.5 121.0 1382
32.1 118.8 1382
19.7 -101.1 1382
32.1 118.8 1382
30.3 120.2 1382
30.3 120.2 1382
45.5 -73.6 1382
59.9 10.7 1383
-34.1 150.8 1383
50.4 30.5 1383
32.1 118.8 1383
51.3 37.8 1384
34.8 113.7 1384
51.7 55.4 1384
24.5 54.4 1384
22.5 114.1 1384
41.8 123.4 1384
39.9 116.4 1384
53.7 -2.3 1384
35.6 139.8 1384
50.4 30.5 1384
56.8 61.3 1384
55.7 37.6 1384
55.2 59.7 1384
50.4 30.5 1384
50.6 36.6 1384
55.2 61.4 1384
32.1 118.8 1385
57.8 40.9 1385
32.1 118.8 1385
46.7 32.6 1385
56.9 53.2 1385
55.9 37.4 1385
57.1 24.3 1385
24.1 120.7 1385
48.0 37.8 1385
30.6 114.3 1385
24.9 118.6 1385
56.1 40.4 1385
22.3 114.2 1385
50.6 36.6 1385
23.1 113.3 1385
39.6 -75.6 1385
48.8 41.0 1386
37.5 -122.4 1386
23.1 113.3 1386
48.9 2.3 1386
46.3 48.0 1386
55.1 61.6 1386
53.0 36.1 1386
54.6 39.7 1386
26.1 119.3 1386
55.7 37.6 1386
47.6 -122.3 1386
54.4 53.3 1386
23.5 121.0 1386
30.3 120.2 1386
51.8 55.1 1386
30.3 120.2 1386
55.7 37.6 1386
49.6 25.6 1386
22.3 114.2 1386
51.7 55.4 1386
54.3 48.4 1386
51.7 55.4 1386
23.1 113.3 1387
28.0 120.7 1387
34.8 113.7 1387
56.9 53.2 1387
23.5 121.0 1387
55.8 37.6 1387
22.6 120.4 1387
39.9 116.4 1387
30.6 114.3 1387
25.0 121.5 1387
55.0 50.1 1387
58.0 56.3 1387
31.0 121.4 1387
50.4 30.5 1387
54.3 48.4 1387
32.1 118.8 1387
30.3 120.2 1388
30.7 104.1 1388
49.6 34.5 1388
45.5 -73.6 1388
48.9 2.3 1388
34.1 -118.3 1388
51.7 36.2 1388
40.0 -75.3 1388
40.5 -74.2 1388
23.1 113.3 1388
52.4 4.9 1388
50.4 30.5 1388
34.1 -118.3 1388
51.7 55.4 1388
-6.3 106.5 1388
31.0 121.4 1388
22.6 120.4 1388
48.7 38.1 1388
22.3 114.2 1388
56.1 40.4 1389
56.9 53.2 1389
34.7 113.5 1389
45.5 -73.6 1389
23.5 121.0 1389
23.5 121.0 1389
22.6 120.4 1389
35.3 139.7 1389
37.5 127.0 1389
31.2 30.0 1389
36.7 117.0 1389
48.5 35.0 1389
-22.8 -43.2 1389
50.4 30.5 1389
45.1 7.7 1389
23.1 113.3 1389
42.7 23.3 1389
32.1 118.8 1389
26.2 127.8 1390
50.1 8.8 1390
54.8 56.0 1390
45.0 39.0 1390
39.9 116.4 1390
39.9 32.8 1390
53.0 36.1 1390
51.4 -0.2 1390
58.4 58.3 1390
61.3 73.4 1390
55.2 61.4 1390
42.0 43.5 1390
-37.9 145.1 1390
39.0 -77.5 1390
36.1 103.8 1390
55.2 61.4 1390
40.5 -74.2 1391
23.1 113.3 1391
48.9 24.7 1391
52.4 4.9 1391
48.7 30.2 1391
23.0 120.2 1391
34.8 113.7 1391
53.0 36.1 1391
-34.9 -56.2 1391
32.1 118.8 1391
25.0 121.5 1391
54.6 52.5 1391
55.2 59.7 1391
55.7 37.6 1391
50.6 15.3 1392
57.1 24.2 1392
30.3 120.2 1392
23.5 121.0 1392
30.6 114.3 1392
62.4 17.3 1392
22.8 108.3 1392
47.9 35.3 1392
31.0 121.4 1392
49.8 73.1 1392
42.3 -71.8 1393
39.9 116.4 1393
55.7 37.6 1393
55.4 43.8 1393
53.0 36.1 1393
20.0 110.3 1393
28.6 115.9 1393
55.2 61.4 1393
55.3 61.4 1393
32.1 118.8 1393
52.3 104.3 1394
23.1 113.3 1394
24.1 120.7 1394
50.6 36.6 1394
24.1 120.7 1394
25.0 121.5 1394
55.7 37.6 1394
55.3 61.4 1394
55.0 73.4 1394
32.1 118.8 1394
32.1 118.8 1394
52.0 -2.9 1395
45.5 -73.6 1395
52.2 21.0 1395
55.4 37.5 1395
50.6 36.6 1395
24.1 120.7 1395
48.9 2.3 1395
55.0 50.1 1395
39.9 116.4 1395
-12.3 -66.2 1395
47.2 39.7 1395
61.3 73.4 1395
17.4 78.5 1395
59.9 30.3 1395
55.2 61.4 1395
24.9 118.6 1395
55.2 59.7 1395
22.3 114.0 1395
24.0 54.0 1396
47.4 18.9 1396
16.2 120.8 1396
24.8 121.0 1396
35.2 115.4 1396
57.8 40.9 1396
30.3 120.2 1396
51.7 36.2 1396
46.3 48.0 1396
22.3 114.2 1396
22.3 114.2 1396
51.2 58.6 1396
30.3 120.2 1396
31.0 121.4 1396
39.9 116.4 1396
51.2 58.3 1396
26.6 106.7 1396
23.5 121.0 1396
55.2 61.4 1396
38.7 -77.2 1397
23.5 121.0 1397
45.5 -73.6 1397
50.0 36.3 1397
47.2 39.7 1397
50.4 30.5 1397
24.1 120.7 1397
23.5 121.0 1397
36.7 117.0 1397
31.0 121.4 1397
55.2 61.4 1397
22.5 114.1 1398
23.0 113.1 1398
56.9 53.2 1398
25.3 110.3 1398
55.3 61.4 1398
35.8 -83.6 1398
30.7 104.1 1398
53.2 48.5 1398
24.1 120.7 1398
53.8 87.1 1398
46.8 29.5 1398
30.3 120.2 1398
56.6 47.9 1398
55.3 61.4 1398
55.3 61.4 1398
55.3 61.4 1398
51.2 58.3 1398
51.5 -0.1 1399
45.5 -74.1 1399
23.0 120.2 1399
51.3 37.8 1399
30.3 120.2 1399
24.6 120.8 1399
55.0 50.1 1399
56.6 84.8 1399
51.7 55.4 1399
50.6 36.6 1399
30.3 120.2 1399
55.2 61.4 1399
54.9 61.4 1399
45.2 26.8 1399
55.2 61.4 1399
51.7 55.4 1399
33.6 131.2 1399
31.0 121.4 1400
39.9 116.4 1400
39.9 116.4 1400
56.2 47.3 1400
55.7 37.6 1400
34.8 113.7 1400
55.8 37.6 1400
53.8 87.1 1400
34.7 113.5 1400
54.3 48.4 1400
50.4 30.5 1400
51.9 47.9 1400
51.3 58.2 1400
45.5 -73.6 1400
48.9 2.3 1401
30.3 120.2 1401
23.1 113.3 1401
34.2 117.2 1401
26.1 119.3 1401
51.5 -0.1 1401
45.5 -73.6 1401
55.0 73.4 1401
40.4 -3.7 1401
30.3 120.2 1401
25.0 121.5 1401
32.1 118.8 1401
55.3 61.4 1401
51.7 7.9 1401
56.8 53.2 1402
37.5 127.0 1402
32.1 118.8 1402
40.3 -83.1 1402
36.6 128.7 1402
30.3 120.2 1402
43.9 125.3 1402
24.1 120.7 1402
55.2 61.4 1402
30.3 120.2 1402
23.5 121.0 1402
23.1 113.3 1402
28.2 113.1 1403
57.8 40.9 1403
31.0 121.4 1403
56.5 85.0 1403
51.7 36.2 1403
22.6 120.4 1403
23.1 113.3 1403
23.1 113.3 1403
32.1 118.8 1403
49.8 30.1 1403
20.0 110.3 1403
40.5 -74.2 1403
48.3 25.9 1403
55.2 59.7 1403
43.9 125.3 1403
23.5 121.0 1404
56.1 47.3 1404
23.1 113.3 1404
55.7 37.6 1404
28.6 115.9 1404
39.9 116.4 1404
55.6 51.8 1404
17.4 78.5 1404
24.1 120.7 1404
32.1 118.8 1404
25.0 102.7 1404
51.5 -0.1 1405
34.3 108.9 1405
51.5 -0.1 1405
30.3 120.2 1405
55.2 61.4 1405
57.1 24.3 1405
14.6 121.1 1405
30.6 114.3 1405
17.4 78.5 1405
32.1 118.8 1405
20.0 110.3 1405
61.3 73.4 1405
36.7 117.0 1405
30.3 120.2 1405
53.5 48.9 1405
24.1 120.7 1405
30.3 120.2 1405
25.0 102.7 1405
55.2 61.4 1405
40.0 45.0 1405
45.5 -73.6 1405
45.5 -73.6 1405
30.1 -93.3 1405
37.5 -122.4 1406
35.6 139.7 1406
50.0 26.6 1406
50.4 30.5 1406
23.5 121.0 1406
61.3 73.4 1406
36.6 136.6 1406
24.9 118.6 1406
24.1 120.7 1406
55.3 86.1 1406
32.1 118.8 1406
55.7 37.6 1406
22.3 114.2 1407
22.6 120.4 1407
18.5 -69.9 1407
69.0 33.1 1407
25.0 121.3 1407
23.1 113.3 1407
36.6 101.8 1407
45.3 -73.9 1407
45.6 11.5 1407
34.8 113.7 1407
51.3 37.8 1407
36.9 30.7 1407
25.0 121.5 1407
21.0 105.9 1407
51.7 55.4 1407
23.1 113.3 1407
40.0 45.0 1407
55.2 61.4 1407
55.2 61.4 1407
29.0 -111.7 1407
54.8 56.0 1408
23.5 121.0 1408
50.4 30.5 1408
25.0 121.5 1408
30.7 104.1 1408
18.5 73.9 1408
51.8 107.4 1408
52.2 20.8 1408
51.7 39.2 1408
45.5 -73.6 1408
23.5 121.0 1408
54.2 37.6 1408
52.8 52.3 1408
49.4 32.1 1409
32.9 -117.2 1409
24.9 118.6 1409
19.4 -99.1 1409
25.0 121.3 1409
45.0 41.1 1409
45.7 28.4 1409
52.6 39.6 1409
17.4 78.5 1409
30.3 120.2 1409
25.0 121.5 1409
22.8 108.3 1410
53.2 50.1 1410
55.0 50.1 1410
48.5 35.0 1410
32.1 118.8 1410
55.9 52.3 1410
36.1 103.8 1410
53.2 50.1 1410
23.5 121.0 1410
56.8 60.5 1410
57.0 54.0 1410
53.2 50.1 1410
23.0 120.2 1411
45.8 126.7 1411
55.1 61.6 1411
48.9 2.3 1411
50.6 36.6 1411
45.0 39.0 1411
36.7 117.0 1411
55.2 61.4 1411
45.0 34.1 1411
55.2 59.7 1411
58.0 56.3 1411
-12.3 -66.2 1411
25.0 121.5 1412
31.0 121.4 1412
55.7 37.6 1412
50.4 30.5 1412
53.5 49.3 1412
55.7 37.6 1412
48.9 2.3 1412
55.7 37.6 1412
57.6 39.9 1412
36.7 117.0 1412
25.0 121.5 1412
25.0 121.5 1412
34.8 113.7 1412
23.5 121.0 1412
55.2 61.4 1412
32.1 118.8 1412
30.3 120.2 1412
54.4 61.3 1412
51.9 36.3 1413
51.1 133.0 1413
54.6 39.7 1413
-22.8 -43.2 1413
51.7 39.2 1413
55.8 37.6 1414
53.2 45.0 1414
55.7 37.6 1414
23.1 113.3 1414
54.8 32.0 1414
32.1 118.8 1414
41.3 -104.7 1414
22.3 113.9 1414
23.5 121.0 1414
23.5 121.0 1414
42.4 -71.1 1415
55.1 37.5 1415
52.2 20.8 1415
58.6 49.7 1415
54.6 52.5 1415
40.7 -74.2 1415
26.6 106.7 1415
52.8 52.3 1415
53.1 36.2 1415
55.2 61.4 1415
56.9 53.2 1415
45.5 -73.6 1415
17.4 78.5 1415
18.5 -72.3 1415
45.5 -73.6 1416
32.1 118.8 1416
32.1 118.8 1416
54.5 36.3 1416
50.9 34.8 1416
48.5 135.1 1416
48.9 2.3 1416
45.5 -73.6 1416
39.9 116.4 1416
23.5 121.0 1416
23.1 113.3 1416
55.7 37.6 1416
30.3 120.2 1416
23.5 121.0 1416
23.5 121.0 1416
55.4 43.8 1417
25.0 121.5 1417
32.1 118.8 1417
14.6 121.1 1417
55.7 37.6 1417
56.4 61.9 1417
22.3 114.2 1417
34.0 -117.9 1417
37.5 127.0 1417
50.4 30.5 1417
62.0 129.7 1417
28.6 115.9 1417
45.5 -73.6 1417
50.1 14.4 1418
32.1 118.8 1418
53.1 36.2 1418
56.1 47.3 1418
25.0 121.5 1418
34.7 135.2 1418
25.0 121.5 1418
22.6 120.4 1418
21.2 79.7 1418
32.1 118.8 1418
10.5 -66.6 1418
25.0 121.5 1418
25.0 121.5 1418
49.6 34.5 1418
30.3 120.2 1418
22.6 120.4 1418
41.3 -81.3 1418
56.8 53.2 1419
23.1 113.3 1419
25.0 121.5 1419
23.1 113.3 1419
30.7 104.1 1419
19.0 72.8 1419
55.8 49.1 1419
40.6 -74.0 1419
39.9 116.4 1419
30.3 120.2 1419
32.1 118.8 1419
25.0 121.5 1419
19.7 -101.1 1420
32.1 118.8 1420
50.4 30.5 1420
55.2 59.7 1420
51.7 36.2 1420
56.2 47.3 1420
45.3 -73.9 1420
48.9 2.3 1420
30.0 31.2 1420
51.9 47.9 1420
24.1 120.7 1420
25.0 121.5 1420
50.4 36.9 1420
33.6 46.4 1420
48.3 25.9 1420
31.7 34.6 1420
30.3 120.2 1420
55.2 61.4 1420
29.0 -111.7 1420
39.9 116.4 1420
55.3 61.4 1420
51.8 55.1 1420
48.7 44.5 1421
50.4 30.5 1421
22.8 108.3 1421
39.9 116.4 1421
55.7 37.6 1421
29.4 48.0 1421
55.7 84.9 1421
37.5 127.0 1421
54.6 52.5 1421
55.2 61.4 1421
55.2 61.4 1421
36.1 103.8 1421
55.2 61.4 1421
51.7 55.4 1421
30.7 104.1 1422
-6.8 39.3 1422
45.0 39.0 1422
-22.9 -45.5 1422
23.5 121.0 1422
47.0 28.9 1422
23.1 113.3 1422
55.0 50.1 1422
23.0 120.2 1422
34.8 113.7 1422
47.1 21.9 1422
23.7 92.7 1422
51.7 55.4 1422
40.9 -8.6 1422
23.5 121.0 1422
32.1 118.8 1422
24.9 67.1 1423
23.0 120.2 1423
23.1 113.3 1423
45.5 -73.6 1423
23.5 121.0 1423
55.4 43.8 1423
23.5 121.0 1423
41.0 75.0 1423
45.5 -73.6 1423
28.6 115.9 1423
45.0 -93.2 1423
23.5 121.0 1423
55.2 61.4 1423
45.5 -73.6 1423
50.4 30.5 1424
55.4 43.8 1424
30.7 104.1 1424
57.8 40.9 1424
53.2 48.5 1424
22.5 114.1 1424
53.7 91.4 1424
36.7 117.0 1424
50.4 30.5 1424
55.9 37.2 1424
45.5 -122.6 1424
-33.5 -70.7 1424
55.2 61.4 1424
30.7 104.1 1424
55.5 37.7 1424
55.3 61.4 1424
56.9 35.9 1424
36.7 117.0 1424
31.0 121.4 1425
52.5 103.9 1425
10.3 123.9 1425
50.6 36.6 1425
25.0 121.5 1425
31.2 30.0 1425
25.0 121.5 1425
40.7 -74.2 1425
51.7 55.4 1425
11.0 -74.8 1425
34.0 -117.9 1425
48.9 24.7 1426
23.1 113.3 1426
48.5 35.0 1426
50.6 36.6 1426
54.2 37.6 1426
56.3 44.0 1426
34.1 -118.3 1426
23.5 121.0 1426
50.4 30.5 1426
36.7 117.0 1426
55.2 61.4 1426
48.5 35.0 1426
42.7 23.3 1426
17.4 78.5 1426
34.8 113.7 1426
37.5 127.0 1427
50.0 36.3 1427
54.2 45.2 1427
23.5 121.0 1427
35.7 51.3 1427
36.6 128.7 1427
61.3 73.4 1427
34.2 131.5 1427
25.0 121.5 1427
48.7 44.5 1427
50.4 30.5 1427
25.7 -100.3 1427
24.1 120.7 1427
55.2 61.4 1427
23.1 113.3 1427
55.3 61.4 1428
45.5 -73.6 1428
48.9 2.3 1428
23.5 121.0 1428
32.1 118.8 1428
51.7 35.7 1428
29.0 -111.7 1428
29.9 121.5 1428
37.5 127.0 1428
29.9 121.5 1428
55.4 43.8 1428
42.0 -91.6 1428
41.1 -81.5 1428
55.2 61.4 1428
55.2 61.4 1428
51.8 55.1 1428
55.2 61.4 1428
51.8 55.1 1428
50.4 30.5 1428
22.5 114.1 1429
32.1 118.8 1429
54.9 37.3 1429
23.1 113.3 1429
24.9 118.6 1429
55.8 49.1 1429
51.5 6.7 1429
55.2 59.7 1429
46.5 30.7 1429
55.2 59.7 1429
56.9 53.2 1429
39.9 116.4 1429
60.9 76.6 1430
37.5 127.0 1430
56.9 60.6 1430
55.7 37.6 1430
46.3 48.0 1430
6.9 79.8 1430
23.5 121.0 1430
22.5 114.1 1430
48.5 32.3 1430
55.2 61.4 1430
22.3 114.2 1430
23.5 121.0 1430
54.2 83.4 1430
41.0 64.0 1430
56.0 24.0 1431
30.3 120.2 1431
26.1 119.3 1431
45.5 -73.6 1431
53.5 49.3 1431
48.9 2.3 1431
23.5 121.0 1431
21.0 105.9 1431
59.9 30.2 1431
42.2 24.6 1431
55.2 61.4 1431
-22.8 -43.2 1431
42.4 -92.4 1431
47.6 19.1 1432
28.5 77.0 1432
-25.7 28.2 1432
39.9 116.4 1432
43.3 17.8 1432
53.6 10.0 1432
23.5 121.0 1432
58.6 49.7 1432
23.5 121.0 1432
17.4 78.5 1432
55.5 65.3 1432
23.5 121.0 1432
48.9 2.3 1432
51.7 55.4 1432
53.2 48.5 1432
50.4 30.5 1432
22.6 120.4 1432
48.6 39.3 1432
55.2 61.4 1432
48.5 35.0 1432
32.1 118.8 1433
55.7 37.6 1433
53.1 36.2 1433
56.7 37.2 1433
51.7 36.2 1433
54.3 48.4 1433
22.5 114.1 1433
56.3 44.0 1433
53.0 36.1 1433
51.5 -0.1 1433
41.0 29.0 1433
23.5 121.0 1433
51.7 55.4 1433
55.2 61.4 1433
55.3 61.4 1433
34.1 -118.3 1433
30.3 120.2 1433
23.5 121.0 1434
54.2 37.6 1434
23.1 113.3 1434
56.3 44.0 1434
14.6 121.1 1434
55.2 61.4 1434
28.6 115.9 1434
55.8 37.6 1434
55.6 51.8 1434
55.2 61.4 1434
55.1 61.6 1434
25.0 121.5 1434
54.3 48.4 1435
23.5 121.0 1435
4.6 -74.1 1435
45.5 -73.6 1435
54.7 25.3 1435
40.4 -3.7 1435
25.0 121.5 1435
50.4 30.5 1435
51.7 39.2 1435
-34.6 -58.4 1435
45.5 -73.6 1435
55.0 82.9 1435
55.9 48.3 1435
55.2 61.4 1435
55.8 49.2 1436
53.9 27.6 1436
30.3 120.2 1436
57.0 41.0 1436
51.3 37.8 1436
29.9 121.5 1436
-22.8 -43.2 1436
51.3 37.8 1436
45.5 -73.6 1436
44.6 33.5 1436
48.9 2.3 1436
32.1 118.8 1436
54.6 52.5 1436
24.1 120.7 1436
30.3 120.2 1436
48.5 35.0 1436
45.5 -73.6 1436
48.9 2.3 1436
30.3 120.2 1436
46.6 142.8 1436
36.7 117.0 1436
43.6 51.2 1436
32.1 118.8 1437
53.2 50.1 1437
29.6 106.6 1437
35.6 139.8 1437
46.3 48.0 1437
35.6 139.7 1437
45.5 9.2 1437
50.6 36.6 1437
54.6 52.5 1437
34.1 -118.3 1437
34.0 -117.9 1437
53.5 48.9 1437
52.3 21.0 1437
23.5 121.0 1437
59.3 18.1 1438
23.5 121.0 1438
30.3 120.2 1438
54.2 37.6 1438
22.6 120.4 1438
-26.2 28.1 1438
30.7 104.1 1438
22.6 120.3 1438
43.1 12.1 1438
32.8 -97.8 1438
55.7 37.6 1438
23.0 120.2 1438
58.0 56.3 1438
44.5 -73.2 1438
56.8 53.2 1438
22.8 108.3 1439
23.5 121.0 1439
32.1 118.8 1439
50.0 36.3 1439
50.4 30.5 1439
53.0 36.1 1439
23.5 121.0 1439
50.4 30.5 1439
20.5 85.8 1439
24.1 120.7 1439
39.9 116.4 1439
46.3 48.0 1439
39.9 116.4 1439
55.0 50.1 1439
25.0 121.5 1439
55.2 61.4 1439
55.2 61.4 1439
25.3 55.3 1439
52.3 104.3 1439
30.3 120.2 1439
38.7 -77.2 1440
50.0 36.3 1440
34.8 113.7 1440
48.9 2.3 1440
23.1 113.3 1440
37.8 128.9 1440
29.9 121.5 1440
55.0 50.1 1440
23.1 113.3 1440
-5.5 -47.5 1440
45.5 -73.6 1440
23.5 121.0 1440
30.3 120.2 1440
45.5 -73.6 1440
55.2 59.7 1440
23.5 121.0 1440
55.0 73.4 1440
23.7 120.5 1440
55.2 61.4 1440
32.1 118.8 1441
23.1 113.3 1441
55.7 37.3 1441
46.5 30.7 1441
48.9 2.3 1441
24.1 120.7 1441
47.0 28.8 1441
49.8 73.1 1441
37.8 -97.8 1441
45.5 -73.6 1441
55.2 61.4 1441
48.0 68.0 1441
30.3 120.2 1441
55.3 61.4 1441
23.5 121.0 1441
39.9 116.4 1442
25.0 121.5 1442
34.8 113.7 1442
30.3 120.2 1442
28.2 113.1 1442
48.0 37.9 1442
-33.3 -66.3 1442
59.4 56.8 1442
41.9 -87.7 1442
48.9 2.3 1442
55.2 59.7 1442
30.3 120.2 1442
38.8 -90.7 1442
23.5 121.0 1442
55.2 59.7 1442
55.2 61.4 1443
54.9 61.4 1443
39.9 116.4 1443
22.3 114.2 1443
22.3 114.2 1443
55.8 49.1 1443
54.9 43.3 1443
50.5 30.5 1443
50.6 36.6 1443
55.0 73.4 1443
55.2 61.4 1443
40.0 45.0 1443
51.2 58.3 1443
55.4 43.8 1443
56.3 22.3 1444
48.5 35.0 1444
50.0 36.3 1444
31.0 121.4 1444
50.6 36.6 1444
48.0 37.8 1444
39.1 117.2 1444
40.5 -74.2 1444
56.8 53.2 1444
56.1 47.5 1444
11.0 77.0 1444
49.8 30.1 1444
25.0 121.5 1444
25.0 121.5 1444
45.5 -73.6 1444
56.6 47.9 1445
55.2 59.7 1445
22.3 114.2 1445
22.6 120.4 1445
23.5 121.0 1445
52.4 4.9 1445
57.0 41.0 1445
25.0 121.5 1445
55.3 52.1 1445
41.0 75.0 1445
17.4 78.5 1445
55.0 60.4 1445
34.1 -118.3 1445
45.5 -73.6 1445
48.7 37.6 1445
50.4 30.5 1445
55.2 59.7 1445
36.8 -114.1 1446
45.5 -73.6 1446
59.6 33.5 1446
39.9 116.4 1446
51.2 38.5 1446
55.8 37.6 1446
45.5 -73.6 1446
54.9 52.3 1446
47.6 -122.3 1446
36.7 117.0 1446
48.5 35.0 1446
30.3 120.2 1446
40.6 -77.9 1446
56.9 53.2 1447
51.7 36.2 1447
57.8 40.9 1447
45.8 126.7 1447
45.5 -73.6 1447
25.0 121.5 1447
7.1 -73.1 1447
39.9 116.4 1447
-34.1 150.8 1447
45.5 -73.6 1447
52.2 20.8 1447
48.9 2.3 1447
52.8 52.3 1447
33.7 73.1 1447
51.8 55.1 1447
-8.0 -34.8 1447
50.4 30.5 1447
40.5 -74.2 1447
55.2 61.4 1447
24.1 120.7 1448
45.5 -73.6 1448
23.5 121.0 1448
57.8 40.9 1448
55.8 49.2 1448
50.6 36.6 1448
55.2 61.4 1448
23.5 121.0 1448
53.5 49.3 1448
35.7 139.7 1448
55.2 61.4 1448
48.9 2.3 1448
44.4 26.1 1448
50.6 36.6 1448
23.5 87.3 1448
55.0 82.9 1448
49.8 30.1 1448
50.6 36.6 1448
25.0 121.5 1448
56.9 53.2 1449
32.1 118.8 1449
-8.2 113.7 1449
55.2 61.4 1449
13.8 100.5 1449
55.4 37.5 1449
24.6 120.8 1449
49.4 32.1 1450
58.1 52.7 1450
24.1 120.7 1450
30.3 120.2 1450
28.7 77.4 1450
55.6 51.8 1450
24.9 118.6 1450
30.3 120.2 1450
48.5 35.0 1450
55.2 59.7 1450
55.2 59.7 1450
45.8 126.7 1451
30.3 120.2 1451
14.6 121.0 1451
37.8 -97.8 1451
55.2 61.4 1451
55.7 37.6 1451
30.3 120.2 1451
55.0 50.1 1451
32.1 118.8 1451
46.6 14.3 1451
45.3 28.0 1451
45.0 34.1 1451
34.9 117.6 1451
51.5 46.0 1452
57.3 25.3 1452
29.9 121.5 1452
32.1 118.8 1452
22.3 114.2 1452
57.0 25.0 1452
47.2 39.7 1452
50.0 36.3 1452
25.4 55.4 1452
29.4 48.0 1452
29.4 48.0 1452
40.5 -74.2 1452
55.2 61.4 1452
55.0 60.1 1452
45.5 -73.6 1452
56.9 53.2 1452
45.8 126.7 1453
37.5 127.0 1453
54.3 48.4 1453
53.0 28.0 1453
30.7 104.1 1453
34.1 -118.3 1453
56.9 60.6 1453
4.6 -74.1 1453
39.2 -94.5 1453
13.1 80.3 1453
55.2 61.4 1453
55.7 37.6 1453
36.7 117.0 1453
41.8 123.4 1453
23.5 121.0 1453
36.7 117.0 1453
51.8 55.1 1453
23.5 121.0 1453
9.8 -63.2 1453
54.6 53.7 1454
22.3 114.2 1454
53.7 87.8 1454
25.0 121.5 1454
25.0 121.5 1454
55.3 61.4 1454
53.0 36.1 1454
20.0 77.0 1454
55.7 37.6 1454
51.5 -0.1 1454
56.9 60.6 1454
61.3 73.4 1454
55.4 43.8 1454
45.5 -73.6 1454
41.8 123.4 1454
61.3 73.4 1454
48.3 25.9 1454
25.0 121.5 1454
50.4 30.5 1454
55.0 73.4 1454
55.2 61.4 1454
56.9 53.2 1454
50.9 34.8 1455
56.4 44.1 1455
31.0 121.4 1455
50.4 30.5 1455
50.4 30.5 1455
50.4 30.5 1455
46.5 30.7 1455
50.6 36.6 1455
50.4 30.5 1455
31.5 74.3 1455
50.6 7.0 1455
48.7 44.5 1455
36.6 128.7 1455
25.0 121.5 1455
51.3 37.8 1455
55.7 37.6 1455
39.9 116.4 1455
-4.6 55.7 1455
47.0 28.8 1455
53.2 50.1 1455
50.4 30.5 1455
25.0 102.7 1455
39.1 117.2 1455
55.2 61.4 1455
36.1 103.8 1455
30.3 120.2 1456
51.5 81.3 1456
23.5 121.0 1456
36.8 -114.1 1456
23.5 121.0 1456
54.7 25.3 1456
45.5 -73.6 1456
32.1 118.8 1456
37.5 127.0 1456
53.3 34.4 1456
56.8 53.2 1456
55.0 60.1 1456
54.3 48.4 1456
23.5 121.0 1456
56.2 47.3 1456
31.8 120.0 1457
32.1 118.8 1457
23.5 121.0 1457
-19.7 -50.2 1457
50.4 30.5 1457
25.0 121.5 1457
56.9 53.2 1457
24.1 120.7 1457
38.0 23.7 1457
-34.9 -56.2 1457
52.4 4.9 1457
61.3 73.4 1457
29.9 121.5 1457
6.3 -75.6 1457
23.5 121.0 1457
34.0 -117.9 1457
22.3 114.2 1457
23.5 121.0 1457
37.4 -121.9 1457
22.3 114.2 1457
23.5 121.0 1457
39.5 -74.5 1458
32.1 118.8 1458
49.8 30.1 1458
54.4 18.7 1458
30.1 31.3 1458
23.5 121.0 1458
21.2 79.7 1458
55.8 37.6 1458
56.0 92.9 1458
36.7 117.0 1458
22.3 114.2 1458
32.1 118.8 1458
55.7 37.6 1458
48.5 35.0 1458
36.7 117.0 1458
48.5 35.0 1459
37.5 127.0 1459
48.9 2.3 1459
30.3 120.2 1459
37.5 127.0 1459
53.5 -2.1 1459
24.9 118.6 1459
25.0 121.5 1459
49.8 30.1 1459
54.7 25.3 1459
54.3 48.4 1459
22.8 108.3 1459
51.7 55.4 1459
55.0 73.4 1459
55.2 61.4 1459
23.1 113.3 1460
30.7 104.1 1460
23.5 121.0 1460
30.3 120.2 1460
22.8 108.3 1460
22.8 108.3 1460
56.5 43.6 1460
55.9 37.4 1460
30.3 120.2 1460
24.1 120.7 1460
45.5 -73.6 1460
28.6 115.9 1460
55.0 73.4 1460
48.5 35.0 1460
56.9 53.2 1460
39.9 116.4 1461
32.1 118.8 1461
-22.8 -43.2 1461
30.7 104.1 1461
37.5 127.0 1461
42.9 -78.9 1461
45.8 126.7 1461
53.0 36.1 1461
25.0 121.5 1461
60.2 60.0 1461
37.5 127.0 1461
55.0 73.4 1461
51.7 36.2 1461
53.2 50.1 1461
34.0 -117.9 1461
55.2 61.4 1461
48.6 45.7 1461
56.8 53.2 1461
55.7 37.6 1462
60.2 24.9 1462
54.9 52.3 1462
55.7 37.6 1462
45.5 -73.6 1462
-22.5 -43.5 1462
30.9 120.1 1462
30.1 31.3 1462
56.9 53.2 1462
45.5 -73.6 1462
39.1 117.2 1462
25.0 102.7 1462
35.6 139.8 1463
50.6 36.6 1463
50.9 128.5 1463
32.1 118.8 1463
35.6 139.8 1463
46.8 29.5 1463
34.0 -118.3 1463
54.8 56.0 1463
50.9 4.4 1463
23.5 121.0 1463
55.7 37.6 1463
36.7 117.0 1463
48.9 2.3 1463
56.9 53.2 1463
32.1 118.8 1464
32.1 118.8 1464
23.1 113.3 1464
24.1 120.7 1464
45.5 -73.6 1464
56.5 53.8 1464
56.2 47.3 1464
34.1 -118.3 1464
32.1 118.8 1464
39.9 116.4 1464
55.2 61.4 1464
39.9 116.4 1464
29.4 48.0 1464
55.0 50.1 1464
51.7 55.4 1464
35.6 139.8 1464
2.5 112.5 1464
54.8 32.0 1464
56.8 53.2 1464
55.2 61.4 1464
35.6 139.8 1465
23.5 121.0 1465
55.9 37.7 1465
53.2 48.5 1465
55.0 73.4 1465
43.8 87.6 1465
22.3 114.2 1465
55.2 61.4 1465
36.7 117.0 1465
55.0 73.4 1465
36.1 103.8 1465
40.2 44.5 1465
56.9 53.2 1465
23.5 121.0 1465
55.0 73.4 1465
17.4 78.5 1465
35.6 139.8 1466
25.0 121.5 1466
50.0 36.3 1466
53.1 36.2 1466
35.6 139.7 1466
51.7 39.2 1466
22.3 114.2 1466
55.2 61.4 1466
34.8 113.7 1466
36.6 128.7 1467
34.8 113.7 1467
51.2 0.1 1467
33.7 -84.4 1467
4.6 -74.1 1467
39.9 116.4 1467
55.3 61.4 1467
13.7 -89.2 1467
30.3 120.2 1467
30.0 31.2 1467
30.3 120.2 1467
23.5 121.0 1467
24.9 118.6 1467
26.6 106.7 1467
51.8 55.1 1467
55.2 61.4 1467
55.2 61.4 1467
55.3 61.4 1467
42.0 43.5 1467
20.0 77.0 1468
23.5 121.0 1468
10.5 -66.9 1468
58.6 49.7 1468
-29.0 24.0 1468
55.6 42.0 1468
23.0 120.2 1468
23.5 121.0 1468
-22.3 -42.5 1468
50.0 36.3 1468
45.3 -73.9 1468
54.9 37.4 1468
56.9 60.6 1468
36.1 103.8 1468
54.8 56.0 1468
51.5 46.0 1469
56.8 53.2 1469
51.7 36.2 1469
45.5 -73.6 1469
34.8 113.7 1469
45.3 -73.9 1469
39.9 116.4 1469
30.3 120.2 1469
55.2 59.7 1469
55.3 38.7 1470
48.9 2.3 1470
30.3 120.2 1470
53.0 36.1 1470
23.5 121.0 1470
55.2 61.4 1470
29.4 48.0 1470
36.7 117.0 1470
56.0 24.0 1470
30.3 120.2 1470
45.0 41.1 1470
49.4 32.1 1470
23.5 121.0 1470
45.5 -73.6 1470
53.2 50.1 1470
57.2 65.5 1470
34.1 -118.3 1470
61.3 73.4 1470
48.9 2.3 1471
55.2 61.4 1471
25.0 121.3 1471
55.2 61.4 1471
50.6 36.6 1471
35.6 139.7 1471
30.3 120.2 1471
22.9 120.3 1471
40.7 -74.2 1471
35.7 51.3 1471
45.5 -73.6 1471
52.8 52.3 1471
25.0 121.5 1471
40.0 45.0 1471
51.2 58.3 1471
30.3 120.2 1471
23.1 113.3 1472
37.5 127.0 1472
29.3 48.1 1472
30.3 120.2 1472
51.3 37.8 1472
25.0 121.3 1472
55.7 37.6 1472
47.6 -122.3 1472
29.9 121.5 1472
42.9 71.4 1472
54.3 48.4 1472
34.1 -118.3 1472
23.5 121.0 1473
57.4 41.2 1473
30.3 120.2 1473
49.9 10.9 1473
55.2 61.4 1473
-22.0 -42.4 1473
25.0 121.5 1473
23.5 121.0 1473
45.5 -73.6 1473
61.3 73.4 1473
54.8 32.0 1473
55.2 61.4 1473
49.8 24.0 1473
55.2 61.4 1473
55.2 61.4 1473
54.3 48.4 1473
39.1 117.2 1473
29.3 48.1 1474
23.3 121.3 1474
54.3 48.4 1474
56.2 47.3 1474
49.4 32.1 1474
40.7 109.8 1474
43.6 -79.8 1474
55.7 37.6 1474
52.7 41.4 1474
13.8 100.5 1474
54.7 20.5 1474
50.5 30.5 1474
55.2 59.7 1474
25.0 102.7 1474
48.9 2.3 1475
25.4 55.4 1475
25.0 121.5 1475
45.5 -73.6 1475
30.3 120.2 1475
-25.3 -57.6 1475
52.3 21.0 1475
39.1 117.2 1475
55.2 61.4 1475
56.7 37.2 1475
17.4 78.5 1475
-12.3 -66.2 1475
53.0 36.1 1475
34.0 -117.9 1475
50.4 30.5 1476
48.9 2.3 1476
9.2 7.2 1476
23.5 121.0 1476
44.7 10.6 1476
48.9 2.2 1476
56.1 40.4 1476
55.7 37.6 1476
34.1 -118.3 1476
24.1 120.7 1476
55.8 37.6 1476
50.0 36.3 1476
50.6 36.6 1476
53.5 49.3 1476
51.7 55.4 1476
55.2 61.4 1476
34.8 113.7 1477
32.1 118.8 1477
37.5 -122.4 1477
34.8 113.7 1477
38.7 -77.2 1477
30.3 120.2 1477
50.5 30.5 1477
39.9 116.4 1477
47.5 42.2 1477
30.3 120.2 1477
30.3 120.2 1477
45.9 4.7 1477
31.9 117.3 1477
45.3 -73.9 1477
56.9 53.2 1477
19.0 72.8 1477
55.2 61.4 1477
30.3 120.2 1478
60.9 76.6 1478
54.3 48.4 1478
13.0 77.6 1478
23.5 121.0 1478
34.7 135.6 1478
23.5 121.0 1478
54.3 48.4 1478
55.2 61.4 1478
35.6 139.8 1478
51.8 55.1 1478
30.3 120.2 1478
30.3 120.2 1478
55.2 61.4 1478
56.9 60.6 1479
53.3 39.1 1479
16.2 120.8 1479
-6.8 39.3 1479
23.5 121.0 1479
51.3 37.8 1479
55.3 61.4 1479
55.3 61.4 1479
50.0 36.3 1479
55.2 61.4 1479
30.3 120.2 1479
55.2 61.4 1479
36.1 103.8 1479
25.0 121.5 1479
36.7 117.0 1479
35.6 139.8 1479
51.8 55.1 1479
55.0 73.4 1479
45.5 -73.6 1479
29.7 -95.4 1479
55.0 73.4 1479
29.3 48.1 1480
23.5 121.0 1480
35.7 140.0 1480
23.5 121.0 1480
23.5 121.0 1480
-25.4 -49.3 1480
35.4 139.6 1480
47.2 39.7 1480
55.2 61.4 1480
36.6 128.7 1480
55.3 61.4 1480
37.3 -121.9 1480
30.3 120.2 1480
23.0 120.2 1480
35.2 115.4 1480
39.1 117.2 1480
43.9 125.3 1480
45.5 -73.6 1480
52.8 52.3 1480
45.0 34.1 1480
-34.6 -58.4 1480
17.4 78.5 1480
10.7 123.0 1481
37.5 -122.4 1481
55.0 59.0 1481
48.5 35.0 1481
29.3 48.1 1481
23.5 121.0 1481
45.5 -73.6 1481
52.4 30.8 1481
37.8 128.9 1481
48.9 2.3 1481
37.5 127.0 1481
45.0 23.8 1481
52.0 113.6 1481
50.9 4.4 1481
48.9 2.3 1481
47.5 35.6 1481
30.3 120.2 1481
56.5 85.0 1481
55.0 82.9 1481
39.1 117.2 1481
30.3 120.2 1482
59.9 30.3 1482
51.8 107.4 1482
51.7 36.2 1482
53.0 36.1 1482
55.2 61.4 1482
10.8 106.6 1482
55.6 51.8 1482
38.0 23.7 1482
36.7 117.0 1482
36.8 -119.8 1482
35.7 51.4 1482
45.5 -73.6 1482
30.7 104.1 1482
57.2 65.5 1482
34.1 -118.3 1482
26.3 -81.8 1482
23.1 113.3 1483
25.3 55.3 1483
37.5 127.0 1483
46.3 48.0 1483
52.3 104.3 1483
40.5 -74.2 1483
55.3 52.0 1483
-34.6 -58.4 1483
55.2 61.4 1483
55.2 61.4 1483
49.6 34.5 1483
50.3 28.7 1483
55.3 61.4 1483
55.3 61.4 1483
22.5 114.1 1483
29.9 121.5 1484
55.7 37.6 1484
53.4 83.8 1484
22.5 114.1 1484
51.7 36.2 1484
23.5 121.0 1484
3.4 -76.5 1484
25.0 121.5 1484
56.7 66.3 1484
34.7 113.5 1484
41.0 75.0 1484
55.0 50.1 1484
54.3 48.4 1484
55.7 37.6 1484
51.2 58.3 1484
19.0 72.8 1484
54.8 32.0 1484
-34.1 150.8 1485
38.3 26.8 1485
50.5 30.5 1485
30.3 120.2 1485
53.5 48.9 1485
37.5 -122.4 1485
39.3 -76.7 1485
55.2 61.4 1485
56.0 37.9 1485
55.7 37.6 1485
51.5 46.1 1485
24.9 118.6 1485
33.7 -112.0 1485
36.1 103.8 1485
42.0 24.9 1485
48.9 36.3 1485
24.0 120.6 1485
53.2 50.1 1485
22.3 114.2 1486
33.8 35.8 1486
45.3 -73.9 1486
50.6 36.6 1486
53.0 36.1 1486
55.0 60.4 1486
47.2 39.7 1486
36.2 -86.8 1486
25.0 121.5 1486
50.6 26.2 1486
51.5 -0.1 1486
23.5 121.0 1486
48.9 2.3 1486
23.5 121.0 1486
37.3 -121.9 1486
23.5 121.0 1486
30.3 120.2 1486
55.2 61.4 1486
23.5 121.0 1486
52.3 21.0 1486
23.7 90.4 1486
56.9 35.9 1486
23.5 121.0 1487
-22.8 -43.2 1487
31.8 120.0 1487
55.2 61.4 1487
41.9 -88.3 1487
61.3 73.4 1487
39.9 116.4 1487
23.0 120.2 1487
32.1 118.8 1487
55.3 52.1 1487
-12.0 -77.0 1487
40.0 45.0 1487
30.3 120.2 1487
52.4 4.9 1488
25.0 121.5 1488
25.0 121.5 1488
4.6 -74.1 1488
24.0 121.6 1488
47.2 39.7 1488
24.5 118.1 1488
52.5 103.9 1488
45.5 -73.6 1488
-34.1 150.8 1489
56.1 47.5 1489
-34.1 150.8 1489
51.1 93.6 1489
22.3 114.2 1489
55.2 61.4 1489
22.6 120.4 1489
55.8 49.1 1489
50.4 30.5 1489
29.9 121.5 1489
55.0 50.1 1489
39.9 116.4 1489
48.5 35.0 1489
55.2 61.4 1489
24.1 120.7 1489
23.5 121.0 1490
50.0 36.3 1490
45.5 -73.6 1490
30.3 120.2 1490
32.1 118.8 1490
48.9 2.3 1490
23.1 113.3 1490
55.2 61.4 1490
55.7 84.9 1490
56.3 44.0 1490
51.3 9.5 1490
50.4 36.9 1490
24.9 118.6 1490
13.1 80.3 1490
24.9 118.6 1490
62.0 129.7 1490
45.5 -73.6 1490
37.5 -122.4 1490
23.5 121.0 1490
39.9 116.4 1490
45.5 -73.6 1490
41.0 75.0 1490
55.2 61.4 1490
39.9 116.4 1490
34.1 -118.3 1490
55.0 73.4 1490
34.7 113.5 1490
45.5 -73.6 1490
32.1 118.8 1490
31.0 121.4 1491
22.8 108.3 1491
45.0 39.0 1491
32.1 118.8 1491
51.3 37.8 1491
55.2 61.4 1491
56.2 47.3 1491
36.7 117.0 1491
25.0 121.5 1491
55.8 37.6 1491
48.0 37.9 1491
33.9 118.3 1491
25.0 121.5 1491
40.5 -74.2 1491
50.6 36.6 1491
39.9 116.4 1491
10.5 -66.9 1491
53.8 87.1 1491
55.2 61.4 1491
56.9 60.6 1492
55.0 59.0 1492
22.5 114.1 1492
48.3 38.1 1492
52.4 4.9 1492
33.7 -84.4 1492
55.9 26.5 1492
32.1 118.8 1492
57.8 28.3 1492
55.6 13.0 1492
55.2 61.4 1492
55.2 61.4 1492
55.2 61.4 1492
23.5 121.0 1492
45.5 -73.6 1492
51.2 58.6 1492
30.3 120.2 1492
40.6 -75.4 1493
55.8 49.1 1493
56.8 53.2 1493
30.7 104.1 1493
22.8 108.3 1493
32.1 118.8 1493
51.6 46.1 1493
55.7 37.6 1493
55.3 61.4 1493
55.3 61.4 1493
51.7 55.4 1493
39.9 116.4 1493
55.7 37.6 1494
55.8 -4.3 1494
31.0 121.4 1494
55.2 61.4 1494
44.7 37.8 1494
39.9 116.4 1494
23.1 113.3 1494
40.4 -3.7 1494
56.2 101.6 1494
50.0 36.3 1494
39.9 116.4 1494
23.5 121.0 1494
36.7 117.0 1494
59.3 18.1 1494
48.9 2.3 1494
50.4 30.5 1494
25.0 121.5 1495
25.0 121.5 1495
32.8 -80.1 1495
55.2 59.7 1495
55.2 61.4 1495
16.3 102.6 1495
28.6 115.9 1495
35.6 139.7 1495
52.3 21.0 1495
51.8 55.1 1495
23.5 121.0 1495
30.3 120.2 1495
31.0 121.4 1495
48.9 2.3 1495
55.3 61.4 1495
49.1 33.4 1495
51.5 -0.1 1496
23.1 113.3 1496
48.5 32.3 1496
48.5 35.0 1496
57.2 65.5 1496
56.9 53.2 1496
39.9 116.4 1496
55.3 61.4 1496
55.2 61.4 1496
56.9 60.6 1497
45.5 -73.6 1497
31.0 121.4 1497
51.7 39.2 1497
55.2 61.4 1497
55.3 61.4 1497
48.3 1.3 1497
23.5 121.0 1497
25.7 -100.3 1497
55.7 37.6 1497
30.3 120.2 1497
25.0 121.5 1497
40.7 109.8 1497
48.5 32.3 1497
48.5 32.3 1497
23.1 113.3 1497
23.5 121.0 1498
-22.9 -43.2 1498
54.4 61.3 1498
47.0 28.9 1498
55.2 61.4 1498
55.2 61.4 1498
51.3 9.5 1498
11.0 77.0 1498
49.6 34.5 1498
36.7 -78.4 1498
53.2 50.1 1498
45.5 -73.6 1498
51.7 36.2 1498
46.1 -73.9 1498
48.5 32.3 1498
55.2 61.4 1498
55.4 43.8 1498
51.2 58.3 1498
40.0 45.0 1498
55.7 37.6 1499
32.1 118.8 1499
23.0 120.2 1499
45.5 -73.6 1499
55.2 61.4 1499
54.6 39.7 1499
23.5 121.0 1499
48.9 2.3 1499
46.0 25.0 1499
34.1 -118.3 1499
55.7 37.6 1499
45.5 -73.6 1499
17.3 78.5 1499
22.5 114.1 1499
48.5 32.3 1499
36.7 117.0 1499
55.2 61.4 1499
55.7 37.6 1500
30.1 121.1 1500
22.8 108.3 1500
23.5 121.0 1500
37.8 128.9 1500
48.3 40.3 1500
44.7 37.8 1500
47.2 38.9 1500
54.6 52.8 1500
61.3 73.4 1500
34.8 113.7 1500
49.4 27.0 1500
56.4 37.5 1500
55.0 73.4 1500
39.9 116.4 1500
55.2 59.7 1500
36.1 103.8 1500
56.1 40.4 1501
48.9 2.3 1501
36.0 -115.2 1501
54.2 45.2 1501
48.9 2.3 1501
23.1 113.3 1501
24.9 67.1 1501
34.0 -118.3 1501
35.0 135.8 1501
55.7 37.6 1501
52.0 47.8 1501
51.7 55.4 1501
4.8 -75.7 1501
51.7 55.4 1501
23.5 121.0 1501
37.5 -122.4 1502
49.0 33.6 1502
55.8 37.6 1502
48.9 2.3 1502
23.1 113.3 1502
23.5 121.0 1502
47.7 -122.3 1502
31.0 121.4 1502
40.7 -74.2 1502
55.2 61.4 1502
40.0 45.0 1502
51.7 55.4 1502
45.5 -73.6 1502
30.7 104.1 1502
-22.8 -43.3 1502
36.7 117.0 1502
52.8 52.3 1502
36.6 128.7 1503
48.9 2.3 1503
53.7 87.8 1503
45.5 -73.6 1503
48.5 35.0 1503
41.1 29.0 1503
55.2 61.4 1503
30.7 104.1 1503
48.9 2.3 1503
39.7 -105.1 1503
23.5 121.0 1503
55.8 37.6 1503
50.4 30.5 1503
-6.6 106.8 1503
51.7 36.2 1503
40.2 44.5 1503
52.8 52.3 1503
52.8 52.3 1503
55.7 37.6 1503
23.1 113.3 1504
45.0 39.0 1504
55.2 59.7 1504
55.7 37.6 1504
61.3 73.4 1504
51.5 -0.1 1504
24.1 120.7 1504
48.9 2.3 1504
46.0 25.0 1504
19.4 -99.1 1504
30.6 114.3 1504
36.7 117.0 1504
55.7 37.6 1504
39.9 116.4 1505
51.8 55.1 1505
22.8 108.3 1505
45.5 -73.6 1505
23.6 120.3 1505
30.3 120.2 1505
46.0 25.0 1505
43.3 76.9 1505
17.4 78.5 1505
55.2 61.4 1505
22.6 120.3 1505
37.5 -122.4 1505
22.3 114.2 1505
47.5 19.1 1505
56.3 114.9 1505
23.1 113.3 1505
36.7 117.0 1505
50.4 30.5 1505
55.2 59.7 1505
53.2 50.1 1505
31.0 121.4 1506
45.5 -73.6 1506
25.0 121.5 1506
47.2 39.7 1506
25.0 121.5 1506
22.3 114.2 1506
53.7 52.4 1506
-34.6 -58.4 1506
37.5 127.0 1506
30.3 120.2 1506
35.6 139.8 1506
55.0 60.4 1506
50.6 36.6 1506
30.3 120.2 1506
42.0 43.5 1507
55.2 61.4 1507
55.2 61.4 1507
45.0 39.0 1507
30.3 120.2 1507
28.6 115.9 1507
34.1 -118.3 1507
55.7 37.6 1507
4.6 -74.1 1507
51.7 36.2 1507
45.0 34.1 1507
49.4 32.1 1507
48.5 32.3 1507
25.0 121.5 1507
55.0 73.4 1507
48.5 32.3 1507
55.2 61.4 1507
37.5 127.0 1508
32.1 118.8 1508
37.5 -122.4 1508
53.2 50.7 1508
23.1 113.3 1508
54.3 48.4 1508
53.0 36.1 1508
54.3 48.4 1508
23.5 121.0 1508
30.3 120.2 1508
23.1 113.3 1508
55.0 50.1 1508
-30.4 30.7 1508
46.3 48.0 1508
44.9 37.3 1508
22.3 114.2 1508
55.2 61.4 1508
51.2 53.0 1508
55.2 61.4 1508
55.2 61.4 1508
39.9 116.4 1508
55.2 61.4 1508
26.6 106.7 1508
39.1 -94.6 1508
55.2 61.4 1508
53.1 36.2 1509
39.1 -94.6 1509
50.6 36.6 1509
23.5 121.0 1509
53.2 50.1 1509
23.5 121.0 1509
31.8 35.2 1509
37.5 127.0 1509
24.9 118.6 1509
30.3 120.2 1509
37.5 127.0 1509
57.8 40.9 1510
24.8 121.0 1510
43.1 131.6 1510
30.3 120.2 1510
22.5 114.1 1510
32.1 118.8 1510
31.8 120.0 1510
60.2 60.0 1510
23.5 121.0 1510
50.4 30.5 1510
52.3 21.0 1510
55.6 109.3 1510
25.0 121.5 1510
53.7 91.7 1510
55.2 61.4 1510
-12.3 -66.2 1510
30.3 120.2 1511
32.1 118.8 1511
37.5 127.0 1511
55.2 61.4 1511
55.3 61.4 1511
14.6 121.0 1511
51.2 58.3 1511
22.6 120.4 1511
51.3 58.2 1511
30.3 120.2 1511
50.1 8.7 1511
51.7 55.4 1511
34.1 -118.3 1511
45.0 34.1 1511
55.2 61.4 1512
51.7 39.2 1512
50.4 30.5 1512
50.1 8.7 1512
41.0 29.0 1512
56.1 40.4 1512
-33.5 143.2 1512
32.1 118.8 1512
36.7 117.0 1512
29.3 47.7 1512
24.1 120.7 1512
40.6 -74.5 1512
23.5 121.0 1512
45.5 -73.6 1512
45.8 126.7 1513
55.0 59.0 1513
45.3 -73.9 1513
25.0 121.5 1513
25.0 121.5 1513
25.0 121.5 1513
50.6 36.6 1513
55.0 50.1 1513
32.1 118.8 1513
45.5 -73.6 1514
30.3 120.2 1514
22.8 108.3 1514
51.5 -0.1 1514
48.5 35.0 1514
39.9 116.4 1514
61.3 73.4 1514
46.3 48.0 1514
45.5 -73.6 1514
58.9 60.8 1514
48.3 25.9 1514
55.2 61.4 1514
45.5 -73.6 1514
45.5 -73.6 1514
55.2 61.4 1514
53.7 91.7 1514
55.8 49.2 1515
32.1 118.8 1515
50.0 36.3 1515
55.2 61.4 1515
37.3 -121.9 1515
54.2 45.2 1515
21.0 105.9 1515
13.8 100.5 1515
35.7 51.3 1515
55.2 61.4 1515
45.5 -73.6 1515
51.3 58.2 1515
48.5 32.3 1515
48.9 24.7 1516
38.7 -77.2 1516
32.1 118.8 1516
57.8 40.9 1516
53.0 36.1 1516
55.3 52.1 1516
54.3 48.4 1516
55.2 61.4 1516
23.5 121.0 1516
48.5 32.3 1516
45.5 -73.6 1517
23.1 113.3 1517
25.0 121.5 1517
45.8 126.7 1517
55.1 36.6 1517
55.2 61.4 1517
25.0 121.5 1517
44.8 20.5 1517
30.6 114.3 1517
55.7 37.6 1517
55.7 37.6 1517
1.3 103.9 1517
32.1 118.8 1517
36.7 117.0 1517
45.3 -73.9 1517
55.3 61.4 1517
54.3 48.4 1518
51.7 36.2 1518
39.5 116.7 1518
48.9 36.3 1518
23.5 121.0 1518
28.2 113.1 1518
48.5 35.0 1518
50.6 26.2 1518
55.8 49.2 1518
54.8 56.0 1518
39.9 116.4 1518
55.2 61.4 1518
51.5 81.3 1518
51.5 -0.5 1518
21.0 105.9 1518
32.1 118.8 1518
55.2 61.4 1518
45.3 -73.9 1518
56.1 40.4 1518
45.5 -73.6 1518
23.5 121.0 1518
53.0 36.1 1518
23.5 121.0 1518
38.7 -77.2 1519
30.3 120.2 1519
17.4 78.5 1519
24.1 120.7 1519
36.6 127.5 1519
31.0 121.4 1519
55.2 59.7 1519
55.3 61.4 1519
49.4 32.1 1519
37.8 -97.8 1519
55.3 61.4 1519
48.5 35.0 1519
56.1 40.4 1519
55.7 37.6 1519
50.6 36.6 1519
51.2 58.3 1519
25.0 102.7 1519
25.0 121.3 1519
60.0 10.8 1519
53.1 49.9 1520
55.3 61.4 1520
36.1 103.8 1520
55.7 37.6 1520
39.9 116.4 1520
37.5 127.0 1520
53.4 83.8 1520
31.9 117.3 1520
55.6 51.8 1520
50.4 30.5 1520
49.4 27.0 1520
17.4 78.5 1520
48.5 32.3 1520
23.5 121.0 1520
45.5 -73.6 1520
55.3 61.4 1520
45.3 -73.9 1521
13.7 -89.2 1521
43.6 1.6 1521
30.1 31.3 1521
30.3 120.2 1521
41.7 44.8 1521
31.0 121.4 1521
55.2 61.4 1521
17.4 78.5 1521
29.1 119.6 1521
25.0 121.5 1521
50.3 127.5 1521
39.9 116.4 1521
23.5 121.0 1521
44.5 34.2 1521
39.9 116.4 1521
54.4 86.2 1521
55.7 37.6 1521
48.5 32.3 1521
30.3 120.2 1521
45.5 -73.6 1522
30.3 120.2 1522
55.7 37.6 1522
39.5 116.7 1522
35.7 51.4 1522
45.5 -73.6 1522
41.3 -104.7 1522
17.5 78.5 1522
41.2 -73.7 1522
17.4 78.5 1522
40.9 -74.0 1522
48.9 2.3 1523
22.6 120.4 1523
52.3 104.3 1523
51.7 39.2 1523
31.0 121.4 1523
30.3 120.2 1523
50.4 30.5 1523
19.4 -99.1 1523
36.7 117.0 1523
50.6 36.6 1523
51.2 58.3 1523
51.8 55.1 1523
48.6 45.7 1523
25.0 121.5 1523
44.5 34.2 1523
-26.2 28.1 1523
23.1 113.3 1524
56.9 53.2 1524
55.7 37.6 1524
23.0 120.2 1524
41.0 29.0 1524
30.3 120.2 1524
50.6 36.6 1524
50.4 30.5 1524
50.6 26.2 1524
41.3 -104.7 1524
55.0 50.1 1524
51.2 58.3 1524
48.5 32.3 1524
52.8 52.3 1524
30.3 120.2 1524
55.7 37.6 1524
39.2 -8.8 1524
53.7 91.7 1524
45.5 -73.6 1524
43.9 125.3 1524
25.0 121.3 1524
50.6 26.2 1525
55.8 37.6 1525
58.6 49.7 1525
53.1 46.6 1525
57.0 25.0 1525
30.3 120.2 1525
32.1 118.8 1525
31.8 120.0 1525
55.2 61.4 1525
55.0 50.1 1525
46.8 29.5 1525
23.5 121.0 1525
-23.5 -46.6 1525
50.4 30.5 1525
24.1 120.7 1525
56.1 94.6 1525
53.7 91.4 1525
28.6 115.9 1525
61.3 73.4 1525
31.9 117.3 1525
28.6 115.9 1525
23.5 121.0 1525
37.5 127.0 1525
56.9 53.2 1525
30.3 120.2 1525
48.6 39.3 1526
45.3 -73.9 1526
23.5 121.0 1526
55.7 37.6 1526
55.7 37.6 1526
35.3 139.5 1526
29.9 121.5 1526
23.5 121.0 1526
46.0 15.9 1526
50.4 30.5 1526
55.0 60.1 1526
45.5 -73.6 1526
42.0 43.5 1526
59.4 13.5 1526
55.2 61.4 1526
55.0 60.4 1526
43.2 -77.7 1526
45.5 -73.6 1526
25.0 121.5 1526
38.7 -77.2 1527
23.1 113.3 1527
30.3 120.2 1527
37.7 -121.9 1527
23.1 113.3 1527
23.5 121.0 1527
38.9 -76.8 1527
23.7 90.4 1527
37.3 -121.9 1527
32.1 118.8 1527
13.8 100.5 1527
50.5 30.5 1527
39.9 116.4 1527
51.5 46.1 1527
41.0 75.0 1527
-22.8 -43.2 1527
61.3 73.4 1527
51.8 55.1 1527
53.1 49.9 1527
25.0 121.5 1527
28.6 115.9 1527
23.5 121.0 1527
48.9 2.3 1527
23.5 121.0 1528
45.8 126.7 1528
55.0 60.1 1528
38.7 -9.1 1528
56.1 40.4 1528
23.5 121.0 1528
31.0 121.4 1528
37.5 127.0 1528
10.5 -66.9 1528
30.7 104.1 1528
32.1 118.8 1528
37.5 127.0 1528
26.2 91.7 1528
48.9 2.3 1528
50.0 36.3 1528
49.8 30.1 1528
22.3 114.2 1528
39.9 115.3 1528
55.0 50.1 1528
48.5 32.3 1528
53.0 36.1 1528
41.0 29.0 1528
33.6 -85.1 1529
45.5 -73.6 1529
32.1 118.8 1529
55.2 61.4 1529
55.7 37.6 1529
54.2 45.2 1529
23.5 121.0 1529
36.9 30.7 1529
13.8 100.5 1529
-33.0 -71.5 1529
55.2 59.7 1529
24.1 120.7 1529
54.2 37.6 1529
45.5 -73.6 1529
23.5 121.0 1529
39.9 116.4 1529
-20.5 -47.4 1529
10.8 106.6 1530
30.3 120.2 1530
52.5 103.8 1530
23.5 121.0 1530
38.9 -77.0 1530
48.0 37.8 1530
25.0 121.5 1530
23.5 121.0 1530
51.5 -0.1 1530
55.7 37.6 1530
45.2 7.8 1530
39.9 116.4 1530
50.6 36.6 1530
55.2 61.4 1530
23.5 121.0 1530
31.0 121.4 1530
24.5 117.7 1530
48.5 32.3 1530
45.5 -73.6 1531
43.1 131.6 1531
22.5 114.1 1531
55.7 37.6 1531
31.0 121.4 1531
45.5 -73.6 1531
41.7 44.8 1531
55.7 37.6 1531
45.5 -73.6 1531
14.6 121.0 1531
24.1 120.7 1531
49.5 24.0 1531
17.4 78.5 1531
55.2 61.4 1531
48.5 32.3 1531
51.5 -0.1 1531
51.7 39.2 1531
40.7 -73.7 1531
45.5 -73.6 1531
39.9 116.4 1531
29.3 48.1 1532
23.5 121.0 1532
22.6 120.3 1532
48.0 37.8 1532
23.5 121.0 1532
32.1 118.8 1532
25.0 121.5 1532
34.3 108.9 1532
25.1 121.7 1532
30.3 120.2 1532
32.1 118.8 1532
55.3 61.4 1532
22.3 114.2 1532
55.2 61.4 1532
-23.6 -46.9 1532
56.4 41.3 1532
50.7 3.2 1532
38.7 -9.1 1532
54.6 39.7 1533
43.2 -77.7 1533
45.5 -73.6 1533
55.2 34.3 1533
-6.2 106.8 1533
56.0 37.2 1533
55.7 37.6 1533
23.5 121.0 1533
34.3 108.9 1533
23.1 113.3 1533
55.2 61.4 1533
55.0 50.1 1533
22.6 120.4 1533
35.6 139.7 1533
30.3 120.2 1533
50.6 36.6 1533
19.4 -99.1 1533
48.0 68.0 1533
36.7 117.0 1533
45.5 -73.6 1533
39.9 116.4 1534
22.8 108.3 1534
55.3 61.4 1534
55.2 61.4 1534
23.5 121.0 1534
20.0 77.0 1534
53.2 48.5 1534
55.7 37.6 1534
32.1 118.8 1534
44.8 10.5 1534
34.8 113.7 1534
35.2 115.4 1534
48.5 35.0 1534
51.5 31.3 1534
-22.8 -43.2 1534
28.6 115.9 1534
55.3 61.4 1534
48.5 32.3 1534
56.8 53.2 1534
48.5 32.3 1534
19.5 72.8 1534
36.7 117.0 1534
30.3 120.2 1534
35.6 139.8 1534
48.5 32.3 1534
51.5 -0.1 1535
56.7 60.8 1535
51.3 9.5 1535
19.7 -101.1 1535
50.4 30.5 1535
54.3 48.4 1535
24.1 120.7 1535
55.5 47.5 1535
51.3 37.8 1535
23.5 121.0 1535
37.4 -121.9 1535
36.6 128.7 1535
45.5 -73.6 1535
47.9 35.3 1535
55.2 61.4 1535
53.5 49.3 1536
48.7 9.0 1536
34.8 113.7 1536
52.3 104.3 1536
37.5 127.0 1536
51.7 39.2 1536
37.7 -25.7 1536
23.5 121.0 1536
56.9 53.2 1536
45.5 9.2 1536
55.2 61.4 1536
21.0 105.9 1536
50.4 30.5 1536
55.2 61.4 1536
47.2 39.7 1536
53.3 -6.3 1536
51.5 46.0 1536
56.0 37.2 1536
31.0 121.4 1536
53.1 45.4 1536
43.9 125.3 1536
49.2 -123.0 1536
37.5 121.4 1536
30.7 104.1 1536
45.5 -73.6 1536
48.5 32.3 1536
48.5 32.3 1536
25.0 121.5 1537
-36.8 -73.0 1537
41.0 29.0 1537
52.4 4.9 1537
30.7 104.1 1537
38.7 -77.2 1537
44.5 34.2 1537
55.2 61.4 1537
56.0 37.2 1537
54.2 45.2 1537
30.3 120.2 1537
50.3 28.7 1537
51.5 46.0 1537
56.0 37.2 1537
55.0 50.1 1537
34.8 113.7 1537
54.6 39.7 1537
19.4 -99.1 1537
37.5 127.0 1537
55.2 59.7 1537
55.2 61.4 1537
52.3 21.0 1537
48.9 2.3 1537
54.8 61.3 1537
55.2 61.4 1537
51.5 46.0 1538
50.6 36.6 1538
25.8 -80.2 1538
55.2 61.4 1538
50.4 30.5 1538
22.3 114.2 1538
56.2 47.3 1538
34.0 -118.3 1538
28.2 113.1 1538
58.6 49.7 1538
58.6 49.7 1538
22.8 108.3 1538
52.3 21.0 1538
48.5 32.3 1538
55.2 61.4 1538
20.5 85.8 1538
55.2 59.7 1538
50.4 30.5 1538
45.5 -73.6 1538
45.5 -73.6 1538
45.5 -73.6 1538
54.4 86.2 1538
45.5 -73.6 1538
55.2 61.4 1539
-34.6 -58.4 1539
55.7 37.6 1539
55.0 50.1 1539
45.5 -73.6 1539
23.5 121.0 1539
-19.0 -49.5 1539
53.1 36.2 1539
30.3 120.2 1539
51.7 55.4 1539
55.2 61.4 1539
23.5 121.0 1539
55.2 61.4 1539
34.1 -118.3 1539
45.5 -73.6 1540
-40.6 -73.1 1540
53.5 49.6 1540
-36.8 -73.0 1540
54.2 37.6 1540
23.5 121.0 1540
55.2 61.4 1540
45.5 -73.6 1540
61.3 73.4 1540
47.5 42.2 1540
55.2 61.4 1540
45.5 -73.6 1540
50.0 36.3 1540
55.2 61.4 1540
39.9 116.4 1540
55.2 61.4 1540
40.3 44.6 1540
23.0 120.2 1540
30.3 120.2 1540
57.6 39.9 1540
25.0 102.7 1540
51.2 58.3 1540
50.6 36.6 1540
55.2 61.4 1540
45.5 -73.6 1541
35.7 51.4 1541
47.2 39.7 1541
23.5 121.0 1541
19.4 -99.1 1541
14.6 121.0 1541
34.1 -118.3 1541
35.8 -79.6 1541
40.4 -3.7 1541
32.1 118.8 1542
22.6 120.4 1542
14.6 121.1 1542
53.5 49.6 1542
30.6 114.3 1542
-22.8 -43.2 1542
55.8 49.1 1542
58.6 49.7 1542
37.5 127.0 1542
23.5 121.0 1542
34.0 -118.3 1542
17.4 78.5 1542
56.5 85.0 1542
48.9 36.3 1542
55.2 61.4 1542
51.3 58.2 1542
45.5 -73.6 1542
30.3 120.2 1542
24.8 121.0 1543
51.0 4.5 1543
56.9 53.2 1543
54.8 56.0 1543
48.9 2.3 1543
59.9 30.3 1543
16.5 107.6 1543
37.3 -121.9 1543
55.2 61.4 1543
55.3 61.4 1543
30.1 31.3 1543
57.0 41.0 1543
48.5 32.3 1543
45.5 -73.6 1543
23.5 121.0 1543
45.5 -73.6 1543
53.0 36.1 1543
57.2 65.5 1543
36.7 117.0 1543
19.4 -99.1 1543
55.2 61.4 1543
55.0 36.5 1544
22.8 108.3 1544
55.7 37.6 1544
55.9 26.5 1544
30.3 120.2 1544
56.4 38.7 1544
56.1 40.4 1544
55.2 61.4 1544
55.2 61.4 1544
37.3 -121.9 1544
54.9 82.8 1544
37.5 127.0 1544
48.9 2.3 1544
36.7 117.0 1544
32.1 118.8 1545
48.9 2.3 1545
55.2 61.4 1545
53.3 34.4 1545
55.0 60.4 1545
34.8 113.7 1545
51.7 36.2 1545
37.5 126.7 1545
22.3 114.2 1545
47.9 35.3 1545
43.1 12.1 1545
22.8 108.3 1546
51.5 46.0 1546
48.5 32.3 1546
30.3 120.2 1546
50.0 36.3 1546
55.9 48.3 1546
40.0 -75.3 1546
37.5 127.0 1546
23.1 113.3 1546
55.1 73.1 1546
56.9 53.2 1546
52.0 113.5 1547
32.1 118.8 1547
50.0 36.3 1547
23.5 121.0 1547
33.4 -111.9 1547
36.1 139.4 1547
55.2 61.4 1547
45.5 -73.6 1547
35.2 115.4 1547
30.3 120.2 1548
23.5 121.0 1548
-33.5 143.2 1548
45.5 -73.6 1548
57.4 61.4 1548
56.8 61.3 1548
22.3 114.2 1548
55.7 37.6 1548
25.0 121.5 1548
39.9 116.4 1548
55.0 82.9 1548
50.5 30.5 1548
55.3 52.1 1548
23.5 121.0 1548
55.7 37.6 1548
22.6 120.4 1548
52.3 104.3 1548
37.4 -121.9 1548
40.0 -75.1 1548
45.3 -73.9 1548
17.4 78.5 1548
48.5 32.3 1548
55.0 73.4 1548
30.3 120.2 1548
59.4 13.5 1548
35.1 -106.7 1549
37.8 -97.8 1549
22.8 108.3 1549
30.3 120.2 1549
-1.0 100.4 1549
37.5 127.0 1549
23.1 113.3 1549
23.1 113.3 1549
56.9 53.2 1549
25.0 121.5 1549
55.2 61.4 1549
23.5 121.0 1549
45.5 -73.6 1550
50.4 30.5 1550
44.2 42.1 1550
39.1 117.2 1550
23.5 121.0 1550
-40.6 -73.1 1550
55.2 61.4 1550
35.8 139.5 1550
55.2 61.4 1550
55.2 61.4 1550
-12.3 -66.2 1550
52.4 4.9 1550
37.5 127.0 1550
47.5 -122.3 1550
48.5 32.3 1550
51.2 58.3 1550
51.5 46.0 1551
17.5 78.5 1551
22.8 108.3 1551
32.1 118.8 1551
17.4 78.5 1551
43.9 125.3 1551
54.3 48.4 1551
25.0 121.5 1551
50.4 30.5 1551
50.4 30.5 1551
55.0 82.9 1551
30.3 120.2 1551
61.3 73.4 1551
61.3 73.4 1551
51.5 46.0 1551
56.8 53.2 1551
48.9 2.3 1551
55.2 61.4 1551
36.7 117.0 1551
-40.6 -73.1 1552
45.5 -73.6 1552
44.3 26.1 1552
55.0 60.1 1552
30.3 120.2 1552
45.5 -73.6 1552
55.2 61.4 1552
23.5 121.0 1552
24.1 120.7 1552
50.5 30.5 1552
50.0 36.3 1552
48.9 2.3 1552
56.9 60.6 1552
23.5 121.0 1552
30.9 120.1 1552
23.5 121.0 1552
45.5 -73.6 1552
30.3 120.2 1552
50.6 36.6 1552
45.5 -73.6 1553
45.5 -73.6 1553
45.5 -73.6 1553
35.6 140.1 1553
10.4 123.9 1553
48.0 68.0 1553
23.5 121.0 1553
25.0 121.5 1553
24.8 121.0 1553
39.1 -94.6 1553
45.3 -73.9 1553
25.0 121.5 1553
61.3 73.4 1553
30.3 120.2 1553
37.5 126.7 1553
54.6 39.7 1553
23.5 121.0 1553
50.5 30.5 1553
25.0 121.5 1554
14.6 121.0 1554
26.6 106.7 1554
34.8 113.7 1554
55.0 50.1 1554
17.4 78.5 1554
25.0 121.5 1554
51.5 46.0 1554
29.9 121.5 1554
-8.6 -35.1 1554
58.6 49.7 1554
37.5 -122.0 1554
56.8 53.2 1554
36.7 117.0 1554
45.5 -73.6 1554
37.8 -97.8 1554
30.7 -112.4 1554
50.4 30.5 1554
30.3 120.2 1555
30.3 120.2 1555
29.9 121.5 1555
36.6 101.8 1555
45.5 -73.6 1555
48.9 2.3 1555
56.8 53.2 1555
-38.7 -72.6 1555
53.5 49.3 1555
-23.5 -46.6 1555
53.7 87.8 1555
25.0 121.3 1555
54.8 32.0 1555
48.5 35.0 1555
22.6 88.4 1555
50.9 12.0 1555
23.5 121.0 1555
41.0 75.0 1555
46.3 48.0 1555
52.2 20.8 1555
51.7 55.4 1555
55.2 61.4 1555
30.3 120.2 1555
26.6 106.7 1555
23.5 121.0 1556
56.9 53.2 1556
56.2 47.3 1556
55.3 42.2 1556
56.1 40.4 1556
32.1 118.8 1556
56.9 60.6 1556
55.2 61.4 1556
-33.5 -70.7 1556
37.5 127.0 1556
50.4 30.5 1556
55.7 37.6 1556
48.0 37.8 1556
50.0 36.3 1556
55.2 61.4 1556
48.5 32.3 1556
39.9 116.4 1556
23.5 121.0 1556
58.6 49.9 1557
30.3 120.2 1557
43.8 87.6 1557
53.9 27.6 1557
57.8 40.9 1557
50.4 30.5 1557
55.7 37.6 1557
55.2 61.4 1557
29.0 -111.7 1557
30.3 120.2 1557
55.2 61.4 1557
45.3 -73.9 1557
55.9 48.3 1557
51.5 46.0 1557
-34.6 -58.4 1557
55.8 49.2 1557
47.2 39.7 1557
55.8 37.6 1557
30.3 120.2 1557
32.1 118.8 1557
45.5 -73.6 1557
14.4 80.0 1557
48.9 2.3 1557
30.3 120.2 1557
34.8 113.7 1557
23.5 121.0 1557
39.1 117.2 1558
37.5 -122.4 1558
55.1 37.5 1558
30.1 31.2 1558
-3.3 -41.4 1558
55.7 37.6 1558
48.5 32.3 1558
23.5 121.0 1558
23.5 121.0 1558
48.9 24.7 1558
25.0 121.5 1558
50.0 36.3 1558
31.0 121.4 1558
48.9 2.3 1559
24.9 67.1 1559
45.5 -73.6 1559
31.0 121.4 1559
-23.5 -46.6 1559
45.5 -73.6 1559
48.9 2.3 1559
32.1 118.8 1559
22.8 108.3 1559
55.2 61.4 1559
55.7 37.6 1559
55.2 61.4 1559
51.3 9.5 1559
33.6 46.4 1559
53.2 50.1 1559
55.7 37.6 1559
-32.0 115.9 1559
53.1 36.2 1559
36.7 117.0 1559
61.3 73.4 1559
53.2 50.1 1560
26.1 119.3 1560
56.9 60.6 1560
23.5 121.0 1560
46.3 48.0 1560
22.3 114.2 1560
25.0 121.5 1560
36.6 128.7 1560
26.6 106.7 1560
55.8 37.6 1560
41.0 75.0 1560
47.6 -122.3 1560
25.0 121.5 1560
45.5 -73.6 1560
25.0 121.5 1560
37.5 127.0 1560
48.5 35.0 1560
50.1 19.9 1560
23.5 121.0 1560
39.9 116.4 1560
37.5 127.0 1561
55.2 61.4 1561
40.0 45.0 1561
25.0 121.5 1561
53.2 50.1 1561
48.9 2.3 1561
30.3 120.2 1561
14.6 121.0 1561
58.5 50.0 1561
48.5 32.3 1561
48.5 32.3 1561
34.8 113.7 1561
50.5 30.5 1562
23.1 113.3 1562
4.6 -74.1 1562
45.5 -73.6 1562
25.0 121.5 1562
36.7 117.0 1562
23.5 121.0 1562
48.5 32.3 1562
51.8 55.1 1562
48.3 25.9 1562
48.9 2.3 1562
36.1 103.8 1562
24.1 120.7 1562
39.9 116.4 1562
48.5 35.0 1562
30.3 120.2 1562
-40.6 -73.1 1563
54.3 48.4 1563
50.6 36.6 1563
45.5 -73.6 1563
-29.0 24.0 1563
23.5 121.0 1563
54.3 48.4 1563
30.3 120.2 1563
50.4 30.5 1563
56.4 38.7 1563
40.5 -74.2 1563
56.8 53.2 1563
50.8 25.3 1563
43.3 76.9 1563
45.5 -73.6 1563
55.0 73.4 1563
55.2 61.4 1563
55.2 61.4 1563
45.5 -73.6 1563
25.0 121.5 1564
45.5 -73.6 1564
55.8 37.6 1564
48.5 35.0 1564
45.5 -73.6 1564
54.3 48.4 1564
23.5 121.0 1564
52.4 4.9 1564
23.5 121.0 1564
24.8 121.0 1564
52.9 -1.5 1564
48.5 35.0 1564
56.0 92.9 1564
55.8 39.0 1564
45.5 -73.6 1564
30.3 120.2 1564
23.5 121.0 1564
40.7 -74.2 1564
41.0 20.0 1564
23.5 121.0 1564
43.8 41.9 1564
53.8 -2.7 1565
55.8 49.2 1565
31.0 121.4 1565
42.0 43.5 1565
36.6 101.8 1565
39.1 117.2 1565
29.9 121.5 1565
34.8 113.7 1565
48.9 2.3 1565
61.6 23.9 1565
17.4 78.5 1565
23.5 121.0 1565
23.5 121.0 1565
35.7 51.4 1565
17.4 78.5 1565
37.5 126.7 1565
51.2 58.3 1565
25.0 121.5 1565
55.2 61.4 1565
31.0 121.4 1565
25.0 121.5 1565
37.5 -122.4 1566
53.5 49.3 1566
48.9 2.3 1566
45.0 41.1 1566
8.0 -2.0 1566
41.8 123.4 1566
28.6 115.9 1566
22.5 114.1 1566
34.8 113.7 1566
23.5 121.0 1566
45.5 -73.6 1566
55.2 61.4 1566
53.1 36.2 1566
48.5 32.3 1566
46.8 29.5 1566
30.3 120.2 1567
50.4 30.5 1567
23.1 113.3 1567
57.0 24.1 1567
45.5 -73.6 1567
53.0 36.1 1567
23.5 121.0 1567
51.5 -0.1 1567
50.3 28.7 1567
48.8 2.3 1567
23.5 121.0 1567
56.4 37.5 1567
25.0 102.7 1567
51.7 55.4 1567
32.1 118.8 1567
48.5 35.0 1568
45.0 39.0 1568
48.5 35.0 1568
41.0 -74.2 1568
50.1 14.4 1568
32.1 118.8 1568
52.0 8.5 1568
55.3 61.4 1568
29.9 121.5 1568
55.2 61.4 1568
53.3 34.4 1568
50.9 4.4 1568
36.8 3.1 1568
55.8 49.1 1568
34.8 113.7 1568
56.1 47.3 1568
45.5 -73.6 1568
23.5 121.0 1569
25.8 -80.2 1569
45.5 -73.6 1569
23.5 121.0 1569
30.3 120.2 1569
19.7 -101.1 1569
30.3 120.2 1569
53.5 49.3 1569
30.3 120.2 1569
54.3 48.4 1569
23.1 113.3 1569
23.5 121.0 1569
23.1 113.3 1569
48.7 44.5 1569
30.9 120.1 1569
40.5 -74.2 1569
41.0 64.0 1569
55.2 61.4 1569
55.7 37.6 1569
22.3 114.2 1569
45.5 -73.6 1569
51.8 55.1 1569
51.8 55.1 1569
23.5 121.0 1570
23.5 121.0 1570
55.9 37.8 1570
45.5 -73.6 1570
51.7 36.2 1570
32.1 118.8 1570
32.1 118.8 1570
30.6 114.3 1570
-22.9 -47.1 1570
25.0 121.5 1570
56.9 60.6 1570
39.9 116.4 1570
22.3 114.2 1570
28.6 77.3 1570
51.2 58.3 1570
60.0 30.7 1570
53.1 36.2 1570
45.5 -73.6 1571
48.9 2.3 1571
22.4 -100.3 1571
29.9 121.5 1571
30.7 104.1 1571
51.7 39.2 1571
51.7 39.2 1571
34.1 -118.3 1571
55.0 82.9 1571
34.7 113.5 1571
37.5 -122.4 1571
48.7 44.5 1571
40.4 -3.7 1571
55.3 61.4 1571
55.2 61.4 1571
55.8 60.7 1571
45.5 -73.6 1571
23.7 90.4 1571
50.6 36.6 1571
31.8 120.0 1572
51.7 39.2 1572
59.9 30.3 1572
45.5 -73.6 1572
32.1 118.8 1572
51.7 55.4 1572
29.9 121.5 1572
23.5 121.0 1572
43.8 -79.8 1572
49.4 1.1 1572
51.7 39.2 1572
56.0 92.9 1572
43.2 -77.7 1572
22.6 120.4 1572
55.1 73.1 1572
14.6 121.1 1573
45.5 -73.6 1573
37.3 -121.9 1573
45.5 -73.6 1573
30.1 31.3 1573
57.3 60.1 1573
23.5 121.0 1573
34.0 -117.9 1573
48.5 32.3 1573
32.8 -96.8 1573
51.5 -0.2 1573
45.3 -73.9 1574
23.5 121.0 1574
30.3 120.2 1574
25.0 121.5 1574
50.4 30.5 1574
-36.8 -73.0 1574
64.5 76.6 1574
22.6 120.4 1574
43.3 76.9 1574
50.4 30.5 1574
45.5 -73.6 1574
40.5 -74.2 1574
46.3 48.0 1574
34.0 -118.3 1574
56.9 59.9 1574
34.8 113.7 1574
57.2 65.5 1574
59.6 33.5 1574
50.4 30.5 1574
55.2 61.4 1574
55.2 61.4 1574
9.2 76.6 1575
30.3 120.2 1575
51.6 40.1 1575
55.2 61.4 1575
55.2 61.4 1575
55.2 61.4 1575
53.0 36.1 1575
45.5 -73.6 1575
55.2 61.4 1575
9.0 -80.0 1575
58.0 56.3 1575
39.9 116.4 1575
39.9 116.4 1576
45.5 -73.6 1576
55.2 61.4 1576
33.9 -118.3 1576
55.8 37.6 1576
4.6 -74.1 1576
55.7 37.6 1576
55.2 61.4 1576
55.7 37.6 1576
50.5 30.5 1576
25.0 121.5 1576
48.5 32.3 1576
51.2 58.3 1576
36.7 117.0 1576
48.9 2.3 1576
45.5 -73.6 1576
25.0 102.7 1576
55.7 37.6 1577
55.7 37.6 1577
37.5 127.0 1577
44.5 34.2 1577
48.9 2.3 1577
55.7 38.0 1577
52.4 -1.5 1577
55.2 61.4 1577
49.8 24.0 1577
48.9 2.3 1577
50.6 36.6 1577
48.5 35.0 1577
30.3 120.2 1577
37.5 127.0 1577
55.7 37.6 1577
56.2 47.3 1577
46.3 48.0 1577
51.5 46.0 1577
43.1 131.6 1578
55.7 37.6 1578
45.5 -73.6 1578
56.2 101.6 1578
48.7 44.5 1578
50.6 36.6 1578
53.9 27.6 1578
20.2 85.8 1578
23.1 113.3 1578
54.6 52.5 1578
48.9 2.3 1578
22.6 120.3 1578
62.0 129.7 1578
55.2 61.4 1578
40.5 -74.2 1578
51.7 55.4 1578
55.2 61.4 1578
39.7 -82.9 1578
23.5 121.0 1578
25.0 121.5 1579
55.8 49.2 1579
39.9 116.4 1579
23.1 113.3 1579
55.7 37.6 1579
32.1 118.8 1579
39.1 -94.6 1579
17.4 78.5 1579
55.7 37.6 1579
34.9 137.1 1579
47.2 39.7 1579
37.3 -121.9 1579
36.7 117.0 1579
34.0 -118.3 1579
28.6 115.9 1579
50.6 36.6 1579
31.8 120.0 1579
50.4 36.9 1579
55.9 94.8 1579
32.1 118.8 1579
29.9 121.5 1579
55.2 61.4 1579
45.5 -73.6 1579
45.5 -73.6 1579
45.3 -73.9 1579
52.4 4.9 1580
48.9 2.3 1580
13.0 77.6 1580
55.7 37.6 1580
55.4 43.8 1580
22.8 108.3 1580
-33.3 -66.3 1580
55.2 61.4 1580
23.5 121.0 1580
24.1 120.5 1580
39.9 116.4 1580
22.5 114.1 1580
45.5 -73.6 1580
17.3 76.8 1580
39.9 116.4 1580
50.4 30.5 1580
30.0 31.2 1580
45.5 -73.6 1580
48.9 2.3 1581
55.2 124.7 1581
35.6 139.8 1581
23.5 121.0 1581
55.2 61.4 1581
20.0 77.0 1581
34.8 113.7 1581
32.1 118.8 1581
37.5 127.0 1581
55.7 37.6 1581
45.5 -73.6 1581
30.3 120.2 1581
36.7 117.0 1581
55.2 61.4 1581
45.5 9.2 1581
23.5 121.0 1581
55.7 37.6 1581
39.9 116.4 1581
56.8 53.2 1581
30.3 120.2 1582
56.9 53.2 1582
45.5 -73.6 1582
23.1 113.3 1582
55.3 61.4 1582
25.0 121.5 1582
31.0 121.4 1582
48.5 35.0 1582
24.1 120.5 1582
55.2 61.4 1582
30.0 31.2 1582
36.7 117.0 1582
47.6 -122.3 1582
37.5 127.0 1582
26.6 106.7 1582
51.2 58.6 1582
30.3 120.2 1582
48.5 32.3 1582
54.4 61.3 1582
23.5 121.0 1582
56.9 53.2 1583
55.3 61.4 1583
25.0 121.5 1583
35.6 -87.0 1583
43.9 -79.3 1583
32.1 118.8 1583
29.1 119.6 1583
37.5 127.0 1583
31.5 119.5 1583
54.6 39.7 1583
54.4 86.3 1583
51.2 58.3 1583
45.5 -73.6 1583
51.2 58.3 1583
50.0 36.3 1583
45.5 -73.6 1584
30.3 120.2 1584
55.8 37.6 1584
55.7 37.6 1584
55.0 82.9 1584
47.2 39.7 1584
30.3 120.2 1584
55.7 37.6 1584
49.6 34.5 1584
25.0 121.5 1584
39.9 116.4 1584
13.1 80.2 1584
34.8 113.7 1584
-23.5 -46.6 1584
34.8 113.7 1584
52.8 52.3 1584
50.6 36.6 1584
39.1 117.2 1584
55.2 61.4 1584
40.4 -3.7 1584
45.5 -73.6 1584
30.3 120.2 1585
39.9 116.4 1585
53.7 -2.3 1585
39.9 116.4 1585
54.1 44.9 1585
55.3 61.4 1585
23.1 113.3 1585
31.0 121.4 1585
55.2 61.4 1585
47.0 28.8 1585
45.5 -73.6 1585
34.0 -117.9 1585
54.3 48.4 1585
51.7 55.4 1585
55.0 82.9 1585
37.5 -122.4 1585
30.3 120.2 1585
25.0 121.5 1585
37.7 120.3 1585
39.9 116.4 1585
51.7 55.4 1585
55.0 60.4 1585
55.0 82.9 1585
50.3 28.7 1585
58.6 49.7 1585
43.2 23.6 1585
39.0 -77.5 1586
25.0 121.3 1586
32.1 118.8 1586
30.3 120.2 1586
53.2 50.1 1586
54.3 48.4 1586
41.9 -87.8 1586
23.5 121.0 1586
56.4 38.7 1586
53.1 46.6 1586
23.5 121.0 1586
48.0 37.9 1586
50.9 4.4 1586
51.2 58.3 1586
38.7 -77.2 1586
45.5 -73.6 1586
59.9 30.3 1586
55.0 60.1 1587
-36.8 -73.0 1587
-33.9 151.2 1587
23.1 113.3 1587
48.6 39.3 1587
57.0 54.0 1587
50.4 30.5 1587
55.2 61.4 1587
56.3 44.0 1587
55.2 59.7 1587
26.9 75.8 1587
14.6 121.0 1587
23.0 120.2 1587
25.0 121.5 1587
55.0 50.1 1587
45.5 -73.6 1587
23.5 121.0 1587
23.1 113.3 1587
39.9 116.4 1587
48.5 35.0 1587
52.8 52.3 1587
51.7 36.2 1587
55.2 61.4 1587
23.5 121.0 1587
58.6 49.9 1588
23.1 113.3 1588
55.3 61.4 1588
55.9 37.8 1588
14.6 121.0 1588
45.5 -73.6 1588
55.7 37.6 1588
48.9 2.3 1588
30.3 120.2 1588
30.3 120.2 1588
19.4 -99.1 1588
-12.3 -66.2 1588
35.5 48.9 1588
55.7 37.6 1588
-34.9 -57.9 1588
56.2 47.3 1588
55.2 61.4 1588
22.3 114.2 1588
56.4 60.2 1588
50.0 36.3 1588
55.2 61.4 1588
51.3 9.5 1588
56.9 53.2 1589
22.8 108.3 1589
53.2 50.1 1589
17.4 78.5 1589
23.5 121.0 1589
54.2 -4.6 1589
48.9 2.3 1589
55.2 61.4 1589
22.6 120.4 1589
55.2 61.4 1589
50.4 30.5 1589
51.5 -0.1 1589
54.8 11.9 1589
55.3 61.4 1589
43.9 -79.3 1589
45.8 16.0 1589
32.1 118.8 1589
25.0 121.5 1589
41.6 -72.5 1589
55.0 50.1 1589
57.3 60.1 1589
56.8 53.2 1589
38.7 -77.2 1589
-18.6 -46.5 1589
48.9 2.3 1589
34.8 113.7 1590
48.9 2.4 1590
56.3 44.0 1590
56.8 53.2 1590
37.5 127.0 1590
48.9 2.3 1590
48.9 2.3 1590
29.9 121.5 1590
55.2 61.4 1590
32.1 118.8 1590
54.2 37.6 1590
46.5 30.7 1590
56.1 47.3 1590
55.0 50.1 1590
36.6 128.7 1590
50.0 36.3 1590
53.8 87.1 1590
55.2 61.4 1590
48.5 32.3 1590
55.2 61.4 1590
50.3 28.7 1590
25.0 121.5 1590
56.8 53.2 1590
34.1 -118.3 1590
55.8 39.0 1591
37.5 126.7 1591
55.9 37.8 1591
23.1 113.3 1591
55.8 49.2 1591
45.5 -73.6 1591
48.0 37.8 1591
36.1 120.4 1591
30.7 104.1 1591
30.7 104.1 1591
55.8 37.6 1591
38.7 -77.2 1591
33.9 35.5 1591
49.6 25.6 1591
55.0 73.4 1591
53.0 36.1 1591
24.1 120.7 1592
45.5 -73.6 1592
45.3 -73.9 1592
55.7 37.6 1592
24.1 120.7 1592
55.7 37.6 1592
55.2 61.4 1592
34.1 -118.3 1592
23.5 121.0 1592
45.0 39.0 1592
51.7 55.4 1592
34.8 113.7 1592
42.0 43.5 1592
25.0 102.7 1592
61.3 73.4 1593
23.5 121.0 1593
28.5 77.0 1593
40.7 109.8 1593
45.5 -73.6 1593
45.5 -73.6 1593
31.9 117.3 1593
24.1 120.7 1593
23.5 121.0 1593
48.5 32.3 1593
51.7 39.2 1593
37.8 128.9 1593
36.7 117.0 1593
28.2 113.1 1593
25.0 121.5 1593
44.7 37.8 1594
45.3 37.4 1594
55.7 37.6 1594
30.3 120.2 1594
53.0 28.0 1594
55.7 37.6 1594
26.6 106.7 1594
39.9 116.4 1594
48.9 2.3 1594
37.5 127.0 1594
25.0 121.5 1594
51.8 55.1 1594
32.1 118.8 1594
23.5 121.0 1594
50.0 36.3 1594
40.5 -74.2 1594
51.2 58.3 1594
24.1 120.7 1594
25.0 102.7 1594
36.1 103.8 1594
55.2 59.7 1595
49.7 32.0 1595
32.1 118.8 1595
30.3 120.2 1595
23.1 113.3 1595
23.5 121.0 1595
61.3 73.4 1595
45.5 -73.6 1595
34.1 -118.4 1595
51.7 36.2 1595
19.0 72.8 1595
56.2 43.5 1595
55.2 61.4 1595
54.8 61.3 1595
23.7 90.4 1595
55.2 61.4 1595
23.5 121.0 1596
45.5 -73.6 1596
-25.9 25.6 1596
44.7 37.8 1596
37.3 114.7 1596
55.8 37.6 1596
55.7 37.6 1596
37.5 127.0 1596
23.0 113.1 1596
30.3 120.2 1596
25.0 102.7 1596
37.5 -122.4 1596
4.9 114.9 1596
51.5 46.0 1596
30.3 120.2 1596
37.5 -122.4 1596
55.3 86.1 1596
55.6 40.7 1596
51.5 -0.1 1596
48.5 32.3 1596
50.6 36.6 1596
45.0 34.1 1596
51.7 36.2 1596
39.9 116.4 1597
55.8 49.1 1597
56.9 60.6 1597
48.9 2.3 1597
40.7 -74.2 1597
55.2 61.4 1597
23.5 121.0 1597
30.0 31.2 1597
59.4 28.6 1597
40.4 -3.7 1597
52.2 20.8 1597
62.4 17.3 1597
35.2 115.4 1597
35.5 139.7 1597
55.8 60.7 1597
45.5 -73.6 1598
38.7 -77.2 1598
55.7 37.9 1598
31.5 34.8 1598
23.5 121.0 1598
45.5 -73.6 1598
30.3 120.2 1598
45.5 -73.6 1598
39.9 116.4 1598
29.9 121.5 1598
48.9 2.3 1598
45.5 -73.6 1598
50.4 30.5 1598
37.8 -97.8 1598
48.6 39.3 1599
45.5 -73.6 1599
48.5 35.0 1599
41.3 69.3 1599
50.3 28.7 1599
55.4 42.5 1599
55.2 61.4 1599
50.4 30.5 1599
30.3 120.2 1599
34.8 113.7 1599
37.5 -122.4 1599
32.8 -97.8 1599
55.7 37.6 1599
23.5 121.0 1599
45.9 -119.7 1599
55.0 60.1 1599
24.1 120.7 1599
36.7 117.0 1599
55.2 61.4 1599
47.9 35.3 1600
31.0 121.4 1600
23.1 113.3 1600
29.4 48.0 1600
54.6 39.7 1600
57.0 61.5 1600
57.0 61.5 1600
35.6 140.1 1600
55.7 37.6 1600
47.1 8.2 1600
55.2 61.4 1600
42.7 23.3 1600
48.5 35.0 1600
30.3 120.2 1600
43.5 1.4 1600
38.8 -77.1 1600
56.9 53.2 1601
45.5 -73.6 1601
31.0 121.4 1601
55.8 49.2 1601
-36.8 -73.0 1601
30.3 120.2 1601
36.1 103.8 1601
41.7 44.8 1601
24.1 120.5 1601
45.5 -73.6 1601
47.0 28.9 1601
23.5 121.0 1601
23.0 120.2 1601
22.8 121.2 1601
30.3 120.2 1601
25.0 121.5 1601
23.5 121.0 1601
52.5 13.4 1601
52.0 47.8 1601
55.8 49.1 1601
50.6 36.6 1601
45.5 -73.6 1601
13.0 77.6 1601
55.2 61.4 1602
56.4 38.7 1602
34.8 113.7 1602
48.9 2.3 1602
51.8 107.6 1602
53.7 91.4 1602
30.3 120.2 1602
24.1 120.7 1602
22.5 114.1 1602
45.5 -73.6 1602
52.8 52.3 1602
45.5 -73.6 1603
24.1 120.7 1603
39.9 116.4 1603
30.3 120.2 1603
25.0 121.5 1603
50.6 36.6 1603
45.5 -73.6 1603
55.2 61.4 1603
54.8 38.9 1604
45.5 -73.6 1604
48.9 2.3 1604
45.5 -73.6 1604
30.7 104.1 1604
52.2 21.0 1604
55.3 61.4 1604
23.1 113.3 1604
34.3 108.9 1604
30.3 120.2 1604
47.5 19.1 1604
53.1 49.9 1604
37.5 127.0 1604
55.7 37.6 1604
42.7 23.3 1604
55.2 61.4 1604
30.3 120.2 1604
55.0 73.4 1604
55.0 60.1 1604
23.5 121.0 1604
44.5 34.2 1605
37.5 127.0 1605
49.6 34.5 1605
30.3 120.2 1605
48.9 2.3 1605
48.2 16.4 1605
23.5 121.0 1605
59.9 30.3 1605
58.3 48.3 1605
30.3 120.2 1605
39.1 -94.6 1605
44.5 -84.6 1605
40.7 -74.2 1605
56.9 53.2 1605
51.7 55.4 1605
25.0 121.5 1605
36.6 101.8 1606
-33.7 151.3 1606
50.6 36.6 1606
41.8 123.4 1606
50.4 30.5 1606
40.7 109.8 1606
49.6 34.5 1606
47.6 -122.3 1606
17.4 78.5 1606
50.6 36.6 1606
15.0 120.6 1606
54.9 54.7 1606
30.3 120.2 1606
49.7 36.9 1607
55.3 61.4 1607
24.8 121.0 1607
24.1 120.7 1607
23.5 121.0 1607
55.2 59.7 1607
53.9 27.6 1607
45.5 -73.6 1607
55.2 61.4 1607
30.3 120.2 1607
58.1 52.7 1607
37.5 -122.4 1607
42.0 43.5 1607
13.7 100.5 1607
36.6 101.8 1607
25.0 121.5 1607
53.1 46.6 1607
36.7 117.0 1607
51.5 -0.1 1607
-40.3 -73.1 1608
36.6 101.8 1608
56.1 47.3 1608
48.9 2.3 1608
35.6 139.8 1608
48.9 2.4 1608
45.5 -73.6 1608
-40.6 -73.1 1608
45.0 39.0 1608
55.2 61.4 1608
49.6 34.5 1608
55.3 61.4 1608
32.1 118.8 1608
41.2 -112.0 1608
51.7 55.4 1608
25.0 102.7 1608
22.6 120.4 1608
58.4 49.1 1608
55.2 61.4 1608
48.5 35.0 1609
48.9 2.3 1609
47.2 38.9 1609
23.1 113.3 1609
38.7 -77.2 1609
23.5 121.0 1609
53.9 27.6 1609
55.7 37.6 1609
55.0 50.1 1609
30.3 120.2 1609
13.8 100.5 1609
17.4 78.5 1609
51.5 46.0 1609
56.0 24.0 1610
51.7 36.2 1610
53.0 36.1 1610
53.0 36.1 1610
30.3 120.2 1610
47.2 39.7 1610
53.2 50.1 1610
57.0 41.0 1610
23.5 121.0 1610
49.8 24.0 1610
55.2 61.4 1610
37.5 127.0 1610
51.7 39.2 1610
48.5 35.0 1610
36.1 103.8 1610
55.2 61.4 1610
30.3 120.2 1611
24.1 120.7 1611
30.3 120.2 1611
39.9 116.4 1611
36.6 101.8 1611
40.5 -74.2 1611
20.0 77.0 1611
53.7 91.7 1611
25.0 121.5 1611
47.5 42.2 1612
22.8 108.3 1612
30.3 120.2 1612
41.8 123.4 1612
10.3 123.9 1612
48.9 2.3 1612
30.3 120.2 1612
59.5 34.7 1612
48.5 35.0 1612
56.9 60.6 1612
22.6 120.4 1612
35.2 115.4 1612
23.5 121.0 1612
34.0 -117.9 1612
55.8 38.4 1612
53.5 49.3 1612
45.8 16.0 1612
55.2 61.4 1612
40.8 -73.8 1612
55.0 73.4 1612
22.8 108.3 1612
17.4 78.5 1612
55.2 61.4 1612
45.5 -73.6 1613
59.2 39.9 1613
36.6 101.8 1613
26.6 106.7 1613
35.6 139.8 1613
50.6 36.6 1613
34.8 113.7 1613
34.1 -118.3 1613
-33.4 -71.1 1613
37.5 127.0 1613
55.6 37.9 1613
51.5 46.1 1613
49.8 30.1 1613
40.5 -74.2 1613
51.7 55.4 1613
55.2 61.4 1613
55.2 61.4 1613
40.0 45.0 1613
39.1 117.2 1613
56.3 44.0 1614
36.6 101.8 1614
30.3 120.2 1614
53.0 36.1 1614
30.3 120.2 1614
-36.8 -73.0 1614
13.1 80.3 1614
55.2 61.4 1614
36.8 3.1 1614
48.5 35.0 1614
51.7 39.2 1614
51.7 39.2 1614
53.0 36.1 1614
32.1 118.8 1614
55.2 59.7 1614
16.2 120.8 1614
51.7 36.2 1614
32.1 118.8 1614
48.9 2.3 1614
24.1 120.7 1614
39.9 116.4 1614
45.5 -73.6 1614
58.5 48.9 1614
39.1 117.2 1615
26.1 119.3 1615
22.7 88.3 1615
54.2 -4.6 1615
47.5 42.2 1615
50.5 30.5 1615
43.8 87.6 1615
47.5 19.1 1615
38.9 -77.1 1615
48.9 2.3 1615
55.2 61.4 1615
55.0 60.1 1615
53.0 36.1 1615
23.5 121.0 1615
53.9 27.6 1615
25.0 121.5 1615
14.6 121.0 1615
43.4 13.3 1615
56.1 40.4 1615
40.5 -74.2 1615
55.2 61.4 1615
55.2 61.4 1615
22.6 120.4 1615
17.4 78.5 1615
22.3 114.2 1615
48.5 32.3 1615
23.5 121.0 1616
22.8 108.3 1616
53.1 36.2 1616
45.5 -73.6 1616
55.4 43.8 1616
29.3 120.1 1616
44.9 38.0 1616
45.6 -73.5 1616
56.3 44.0 1616
35.7 139.7 1616
55.2 61.4 1616
50.4 30.5 1616
51.5 46.0 1616
36.6 101.8 1616
23.5 121.0 1616
55.7 37.6 1616
36.7 117.0 1616
55.3 61.4 1616
48.5 32.3 1616
55.2 61.4 1616
45.9 -119.7 1616
23.1 113.3 1617
37.3 -121.9 1617
55.0 82.9 1617
23.5 121.0 1617
54.3 48.4 1617
55.0 60.1 1617
55.2 61.4 1617
30.3 120.2 1617
55.2 61.4 1617
38.7 -77.2 1617
22.6 120.4 1617
41.0 75.0 1617
48.5 32.3 1617
55.7 37.6 1617
45.5 -73.6 1617
45.5 -73.6 1618
45.5 -73.6 1618
31.0 121.4 1618
38.6 -90.2 1618
29.1 119.6 1618
50.4 30.5 1618
45.3 -73.9 1618
48.0 37.8 1618
48.6 39.3 1618
48.9 2.3 1618
55.2 61.4 1618
48.5 32.3 1618
50.0 36.3 1618
55.2 61.4 1618
30.3 120.2 1619
48.6 39.3 1619
32.1 118.8 1619
32.1 118.8 1619
53.0 36.1 1619
40.7 -74.2 1619
35.6 139.7 1619
30.3 120.2 1619
22.6 120.4 1619
-22.8 -43.2 1619
30.3 120.2 1619
49.4 32.1 1619
45.5 -73.6 1619
30.3 120.2 1620
43.3 21.9 1620
55.2 61.4 1620
55.8 49.2 1620
55.0 60.1 1620
29.9 121.5 1620
30.7 104.1 1620
50.4 30.5 1620
4.6 -74.1 1620
35.0 138.4 1620
55.2 61.4 1620
56.1 47.5 1620
37.5 -122.4 1620
23.5 121.0 1620
30.3 120.2 1620
47.6 -122.3 1620
4.8 -75.7 1620
26.1 119.3 1620
45.5 -73.6 1621
32.1 118.8 1621
14.6 121.1 1621
55.7 37.6 1621
36.7 117.0 1621
54.4 46.1 1621
25.0 121.5 1621
22.5 114.1 1621
51.8 55.1 1621
55.7 37.6 1621
30.3 120.2 1621
17.5 78.5 1621
50.6 36.6 1621
45.5 -73.6 1621
23.5 121.0 1621
55.2 61.4 1621
23.1 113.3 1622
36.6 101.8 1622
30.3 120.2 1622
57.0 24.3 1622
53.4 83.8 1622
41.5 -81.6 1622
53.9 27.6 1622
55.2 61.4 1622
51.5 31.3 1622
23.5 121.0 1622
13.8 100.5 1622
56.1 47.3 1622
54.0 -1.1 1622
30.3 120.2 1622
55.3 52.1 1622
37.5 127.0 1622
55.6 109.3 1622
39.9 116.4 1622
48.9 2.3 1622
40.0 45.0 1622
40.5 -74.2 1622
40.5 -74.2 1622
39.9 116.4 1622
46.3 48.0 1623
56.2 44.2 1623
-40.6 -73.1 1623
30.3 120.2 1623
31.0 121.4 1623
53.5 49.3 1623
46.3 48.0 1623
48.0 37.8 1623
30.3 120.2 1623
39.9 116.4 1623
51.9 47.9 1623
36.0 -81.6 1623
23.5 121.0 1623
48.0 37.8 1623
55.2 61.4 1623
30.3 120.2 1623
55.2 61.4 1623
59.6 33.5 1623
55.2 61.4 1623
55.0 82.9 1623
54.6 39.7 1623
55.2 61.4 1623
51.7 55.4 1623
53.2 50.1 1624
54.3 48.4 1624
45.5 -73.6 1624
30.3 120.2 1624
55.8 49.1 1624
31.0 121.4 1624
50.6 36.6 1624
47.5 19.1 1624
36.6 101.8 1624
32.8 -96.8 1624
55.3 61.4 1624
54.3 48.4 1624
61.0 69.0 1624
25.0 121.5 1624
34.8 113.7 1624
55.2 61.4 1624
45.5 -73.6 1625
22.6 120.4 1625
41.3 69.3 1625
37.5 127.0 1625
45.5 -73.6 1625
45.3 -73.9 1625
50.4 30.5 1625
50.7 3.2 1625
23.0 120.2 1625
51.7 36.2 1625
53.9 27.6 1625
55.2 61.4 1625
37.8 128.9 1625
28.6 77.2 1625
-4.3 15.3 1625
23.1 113.3 1625
49.8 24.0 1625
51.5 -0.1 1625
54.6 39.7 1625
54.4 61.3 1625
55.2 61.4 1625
48.5 35.0 1625
53.7 91.7 1625
30.7 104.1 1625
23.5 121.0 1625
25.0 121.5 1625
55.2 61.4 1625
51.7 39.2 1625
55.2 61.4 1625
36.7 117.0 1625
55.7 37.6 1626
45.5 -73.6 1626
55.7 37.6 1626
49.5 8.4 1626
23.0 72.6 1626
53.2 50.1 1626
53.0 36.1 1626
55.0 82.9 1626
55.7 37.6 1626
54.9 52.3 1626
20.5 85.8 1626
31.0 121.4 1626
22.5 114.1 1626
23.7 90.4 1626
23.5 121.0 1627
45.3 -73.9 1627
19.4 -99.1 1627
50.3 28.7 1627
49.8 30.1 1627
22.7 120.5 1627
25.0 121.5 1627
54.9 43.3 1627
23.1 113.3 1627
42.0 43.5 1627
36.7 117.0 1627
45.5 -73.6 1627
44.5 34.2 1628
53.9 27.6 1628
13.8 100.5 1628
24.9 67.1 1628
45.5 -73.6 1628
22.4 114.1 1628
51.5 46.1 1628
25.0 121.5 1628
53.2 45.0 1628
47.2 39.7 1628
45.8 16.0 1628
23.5 121.0 1628
25.0 121.5 1628
55.2 61.4 1628
27.4 95.6 1628
23.5 121.0 1628
25.0 121.5 1628
24.1 120.7 1628
55.2 61.4 1628
20.0 77.0 1629
45.5 -73.6 1629
45.5 -73.6 1629
56.2 43.5 1629
30.3 120.2 1629
22.8 108.3 1629
26.6 106.7 1629
55.2 61.4 1629
56.3 44.0 1629
34.7 113.5 1629
55.0 50.1 1629
52.6 36.3 1629
39.9 116.4 1629
40.5 -74.2 1629
52.3 21.0 1629
48.9 2.3 1629
55.7 37.6 1629
45.5 -73.6 1629
55.2 61.4 1629
57.8 40.9 1629
55.2 61.4 1629
55.2 61.4 1629
12.2 -86.3 1629
36.7 117.0 1629
23.5 121.0 1630
32.1 118.8 1630
55.0 60.1 1630
47.8 27.9 1630
45.5 -73.6 1630
23.1 113.3 1630
55.0 50.1 1630
1.0 -79.7 1630
55.8 37.6 1630
60.0 10.8 1630
53.2 50.1 1630
34.8 113.7 1630
36.6 101.8 1630
13.7 100.5 1630
48.5 32.3 1630
55.2 59.7 1630
55.3 61.4 1630
40.0 45.0 1630
53.4 59.0 1630
31.0 121.4 1631
56.1 40.4 1631
50.8 14.9 1631
30.3 120.2 1631
30.1 31.3 1631
54.4 53.3 1631
45.5 -73.6 1631
55.2 61.4 1631
24.1 120.7 1631
30.9 120.1 1631
45.5 -73.6 1631
47.7 -122.4 1631
51.7 55.4 1631
43.6 27.8 1631
45.5 -73.6 1631
52.8 52.3 1631
55.2 61.4 1631
51.7 36.2 1631
45.5 -73.6 1631
55.2 61.4 1631
34.1 -118.3 1631
55.8 49.2 1632
36.6 101.8 1632
23.1 113.3 1632
37.5 -122.2 1632
29.6 -98.6 1632
61.3 73.4 1632
37.8 128.9 1632
25.0 121.5 1632
54.6 39.7 1632
55.2 61.4 1632
57.8 40.9 1632
54.6 39.7 1632
55.2 61.4 1632
30.1 31.3 1633
58.4 45.5 1633
23.5 121.0 1633
30.3 120.2 1633
53.0 36.1 1633
36.2 140.5 1633
30.3 120.2 1633
25.0 121.5 1633
48.9 2.3 1633
37.5 127.0 1633
44.5 34.2 1633
48.9 2.3 1633
53.2 50.1 1633
23.5 121.0 1633
40.0 45.0 1633
16.3 80.5 1633
55.7 84.9 1633
55.2 61.4 1633
30.3 120.2 1633
45.5 -73.6 1633
43.0 -87.9 1633
23.5 121.0 1633
23.1 113.3 1633
53.4 83.8 1634
45.5 -73.6 1634
48.9 2.3 1634
50.4 30.5 1634
55.2 61.4 1634
31.0 121.4 1634
32.1 118.8 1634
32.1 118.8 1634
47.6 -122.3 1634
37.5 -122.4 1634
36.6 101.8 1634
57.0 25.0 1634
50.4 30.5 1634
55.2 61.4 1634
25.0 121.5 1634
48.5 32.3 1634
48.8 41.0 1634
40.5 -74.2 1634
23.5 121.0 1635
60.5 15.4 1635
55.2 61.4 1635
47.8 35.2 1635
55.2 59.7 1635
55.2 61.4 1635
47.5 19.1 1635
55.2 59.7 1635
49.1 33.4 1635
34.8 113.7 1635
34.1 -118.3 1635
37.8 -97.8 1635
50.0 36.3 1635
26.1 119.3 1635
49.4 32.1 1635
53.0 36.1 1635
24.1 120.7 1635
55.2 61.4 1636
64.6 39.8 1636
45.5 -73.6 1636
42.7 23.3 1636
36.6 128.7 1636
32.1 118.8 1636
26.1 119.3 1636
55.1 52.7 1636
33.4 -111.9 1636
51.7 55.4 1636
40.5 -74.2 1636
55.2 59.7 1636
69.3 88.2 1636
55.2 61.4 1636
17.4 78.5 1636
51.5 -0.1 1636
55.2 61.4 1636
23.1 113.3 1637
56.9 53.2 1637
53.2 50.1 1637
10.3 123.9 1637
30.3 120.2 1637
17.4 78.5 1637
55.0 60.1 1637
55.2 61.4 1637
40.7 109.8 1637
57.0 61.5 1637
24.1 120.5 1637
34.3 108.9 1637
48.0 68.0 1637
30.3 120.2 1637
23.5 121.0 1637
51.8 107.6 1637
54.2 37.6 1637
55.3 86.1 1637
22.6 120.4 1637
55.3 61.4 1637
34.8 113.7 1637
41.0 29.0 1637
53.0 36.1 1637
53.1 36.2 1637
65.9 57.5 1637
50.6 36.6 1638
17.4 78.5 1638
31.0 121.4 1638
23.5 121.0 1638
24.1 120.7 1638
48.9 2.3 1638
29.1 119.6 1638
48.9 2.3 1638
30.1 31.3 1638
45.8 16.0 1638
24.9 118.6 1638
29.9 121.5 1638
51.7 55.4 1638
24.1 120.7 1638
55.5 37.8 1639
39.1 117.2 1639
44.0 43.1 1639
32.1 118.8 1639
43.0 47.5 1639
31.6 -8.0 1639
36.7 117.0 1639
55.2 61.4 1639
30.3 120.2 1639
30.7 104.1 1639
36.7 117.0 1639
37.8 128.9 1639
55.2 61.4 1639
30.3 120.2 1639
41.8 123.4 1639
47.0 28.8 1639
55.3 61.4 1639
48.5 32.3 1639
48.9 2.3 1639
55.7 37.6 1639
45.5 -73.6 1639
55.2 61.4 1639
55.3 61.4 1639
24.1 120.7 1640
26.1 119.3 1640
49.6 34.5 1640
36.6 128.7 1640
30.7 104.1 1640
23.5 121.0 1640
30.3 120.2 1640
51.8 55.1 1640
23.5 121.0 1640
57.8 40.9 1640
39.9 116.4 1640
39.9 116.4 1640
51.8 55.1 1640
46.5 41.5 1640
53.8 87.1 1640
44.5 34.2 1641
53.5 49.3 1641
45.5 -73.6 1641
50.6 36.6 1641
55.8 38.0 1641
28.6 115.9 1641
24.0 121.6 1641
45.0 34.1 1641
56.9 37.4 1641
48.7 44.5 1641
50.3 28.7 1641
22.3 114.2 1641
39.9 116.4 1641
24.1 120.7 1641
37.5 127.0 1641
47.9 35.3 1641
22.3 114.2 1642
58.0 38.8 1642
34.8 113.7 1642
-40.6 -73.1 1642
52.4 4.9 1642
56.9 60.6 1642
23.5 121.0 1642
23.1 113.3 1642
30.7 104.1 1642
29.4 48.0 1642
48.9 2.3 1642
35.7 51.3 1642
55.2 61.4 1642
51.7 36.2 1642
55.2 61.4 1642
39.9 116.4 1642
17.4 78.5 1642
9.4 76.6 1643
45.5 -73.6 1643
22.5 114.1 1643
50.4 30.5 1643
41.1 14.2 1643
37.8 128.9 1643
14.6 121.0 1643
24.8 121.0 1643
34.8 113.7 1643
56.8 53.2 1643
32.1 118.8 1643
43.9 125.3 1643
41.9 12.5 1643
24.9 118.6 1643
23.1 113.3 1644
24.1 120.7 1644
23.5 121.0 1644
10.0 -64.4 1644
4.6 -74.1 1644
39.7 -105.1 1644
55.7 37.6 1644
55.7 37.6 1644
31.3 120.6 1644
25.0 121.3 1644
50.4 30.5 1644
51.7 39.2 1644
48.5 35.0 1644
23.5 121.0 1644
35.1 136.6 1644
23.1 113.3 1644
23.5 121.0 1644
23.5 121.0 1644
17.4 78.5 1644
45.5 -73.6 1644
36.7 117.0 1644
37.5 127.0 1645
35.9 128.6 1645
22.6 88.4 1645
30.3 120.2 1645
47.9 35.3 1645
34.7 113.5 1645
55.7 37.6 1645
30.3 120.2 1645
56.1 40.4 1645
50.5 30.5 1645
36.7 117.0 1645
54.0 86.7 1645
45.5 -73.6 1645
55.3 61.4 1645
55.7 37.6 1645
50.4 30.5 1646
55.8 49.1 1646
30.3 120.2 1646
29.4 48.0 1646
54.0 86.7 1646
34.1 -118.3 1646
23.5 121.0 1646
47.9 35.3 1646
56.4 37.5 1646
48.9 2.3 1646
45.5 -73.6 1646
22.3 114.2 1646
48.6 22.3 1646
45.5 -73.6 1646
30.3 120.2 1646
7.8 -72.2 1647
57.1 24.5 1647
34.7 135.5 1647
53.5 49.3 1647
53.0 28.0 1647
52.7 58.7 1647
54.8 56.0 1647
41.3 -104.7 1647
36.7 117.0 1647
55.2 59.7 1647
30.7 104.1 1647
48.9 2.3 1647
23.5 121.0 1647
55.2 61.4 1647
22.8 108.3 1647
35.2 115.4 1647
29.4 48.0 1648
30.3 120.2 1648
55.8 49.2 1648
51.3 9.5 1648
55.2 61.4 1648
30.7 104.1 1648
55.2 61.4 1648
36.7 117.0 1648
53.0 36.1 1648
32.1 118.8 1648
22.3 114.2 1648
50.9 128.5 1648
53.5 13.3 1648
37.8 -97.8 1648
55.2 61.4 1648
50.4 30.5 1648
62.0 129.7 1648
45.5 -73.6 1648
55.3 61.4 1648
45.5 -73.6 1649
30.3 120.2 1649
48.5 35.0 1649
54.8 56.0 1649
55.7 84.9 1649
55.2 61.4 1649
50.4 30.5 1649
46.0 25.0 1649
55.9 37.6 1649
13.8 100.5 1649
37.8 128.9 1649
47.2 39.7 1649
-22.8 -43.2 1649
55.2 61.4 1649
23.5 121.0 1649
54.6 52.8 1649
57.8 48.9 1649
48.7 2.1 1650
28.6 115.9 1650
28.6 115.9 1650
50.6 36.6 1650
45.5 -73.6 1650
48.5 35.0 1650
24.1 120.7 1650
55.2 61.4 1650
48.2 16.4 1650
45.5 -73.6 1650
41.0 29.0 1650
40.7 -74.2 1650
55.7 37.6 1650
46.3 48.0 1650
50.5 30.5 1650
25.0 121.5 1650
55.0 50.1 1650
55.2 61.4 1650
25.0 102.7 1650
55.0 50.1 1650
55.2 61.4 1650
55.2 61.4 1650
51.2 58.6 1650
40.7 109.8 1650
55.2 61.4 1650
9.8 105.5 1650
38.6 34.6 1650
23.1 113.3 1651
38.7 -77.2 1651
56.2 44.2 1651
23.1 113.3 1651
55.2 61.4 1651
51.1 13.7 1651
48.9 2.3 1651
55.8 37.6 1651
53.2 50.1 1651
55.0 59.0 1651
56.1 40.4 1651
55.2 61.4 1651
54.7 25.3 1651
23.0 120.2 1651
30.3 120.2 1651
34.7 113.5 1651
14.6 121.0 1651
55.3 61.4 1651
24.1 120.7 1651
48.5 35.0 1651
56.1 40.4 1651
34.8 113.7 1651
36.1 103.8 1651
48.3 38.1 1652
31.0 121.4 1652
19.3 84.8 1652
55.8 49.2 1652
30.7 104.1 1652
55.2 61.4 1652
55.2 61.4 1652
-5.8 106.3 1652
35.9 139.5 1652
45.5 -73.6 1652
48.5 32.3 1652
48.8 37.6 1652
55.2 61.4 1652
41.0 64.0 1652
45.5 -73.6 1652
48.5 35.0 1652
51.8 55.1 1652
58.3 48.3 1653
25.0 121.5 1653
40.0 -75.3 1653
50.6 36.6 1653
37.8 -97.8 1653
35.7 139.7 1653
55.0 82.9 1653
55.9 48.3 1653
19.4 -99.0 1653
55.3 38.7 1653
53.4 83.8 1653
48.9 2.3 1653
34.0 -118.4 1653
34.1 -118.3 1653
37.5 127.0 1653
53.8 87.1 1653
23.5 121.0 1653
52.5 103.8 1653
55.2 61.4 1653
55.2 61.4 1653
45.5 -73.6 1653
55.2 61.4 1653
48.5 35.0 1653
30.3 120.2 1654
53.5 49.3 1654
56.0 38.0 1654
41.7 -71.5 1654
55.8 49.2 1654
48.0 37.8 1654
55.0 50.1 1654
50.0 36.3 1654
51.3 9.5 1654
55.7 37.6 1654
50.4 30.5 1654
30.7 104.1 1654
56.3 44.0 1654
23.5 121.0 1654
55.0 60.1 1654
45.8 16.0 1654
61.3 73.4 1654
13.8 100.5 1654
28.6 115.9 1654
45.3 -73.9 1654
34.1 -118.3 1654
48.9 2.3 1654
51.3 58.2 1654
48.5 32.3 1654
45.5 -73.6 1654
17.4 78.5 1654
23.5 121.0 1655
45.5 -73.6 1655
55.7 12.6 1655
-33.9 18.4 1655
55.7 37.6 1655
55.3 61.4 1655
55.7 37.6 1655
45.0 39.0 1655
23.5 121.0 1655
50.4 30.5 1655
55.2 61.4 1655
50.0 36.3 1655
59.4 28.6 1655
24.1 120.7 1655
23.5 121.0 1655
41.0 64.0 1655
37.5 -122.4 1655
17.4 78.5 1655
23.5 121.0 1655
45.5 -73.6 1655
54.8 61.3 1655
50.0 36.3 1656
1.3 103.9 1656
48.0 37.8 1656
23.5 121.0 1656
45.3 -73.9 1656
48.0 37.8 1656
37.8 -97.8 1656
48.0 37.8 1656
48.4 135.2 1656
41.3 -104.7 1656
37.5 126.7 1656
51.7 55.4 1656
55.2 61.4 1656
52.3 21.0 1656
55.3 86.1 1656
45.5 11.0 1656
50.4 30.5 1657
23.5 121.0 1657
30.3 120.2 1657
50.6 3.1 1657
50.4 30.5 1657
49.9 28.6 1657
55.2 61.4 1657
46.1 -73.9 1657
48.5 32.3 1657
45.3 -73.9 1657
58.6 49.7 1657
28.4 -81.3 1657
45.0 34.1 1657
45.5 -73.6 1657
38.8 -77.0 1657
-12.3 -66.2 1657
23.5 121.0 1658
30.3 120.2 1658
50.5 30.5 1658
29.9 -90.0 1658
22.6 120.4 1658
30.3 120.2 1658
54.3 48.4 1658
45.9 27.3 1658
37.3 -121.9 1658
57.8 40.9 1658
24.1 120.7 1658
43.2 -85.5 1658
46.8 75.0 1658
48.9 2.3 1658
40.8 -111.9 1658
51.8 55.1 1658
25.0 121.5 1658
51.7 55.4 1658
45.3 -73.9 1658
25.0 121.5 1659
39.9 116.4 1659
55.7 37.6 1659
55.8 37.6 1659
48.5 32.3 1659
45.5 -73.6 1659
48.0 37.8 1659
37.5 127.0 1659
37.4 127.1 1659
51.7 36.2 1659
23.5 121.0 1659
32.1 118.8 1659
47.5 -122.3 1659
55.3 86.1 1659
47.0 28.8 1659
30.3 120.2 1659
-34.6 -58.4 1659
30.3 120.2 1659
30.3 120.2 1659
30.9 120.1 1659
21.1 -101.7 1659
56.8 53.2 1659
35.0 -85.2 1659
30.9 120.1 1659
50.9 4.4 1659
45.5 -73.6 1660
48.5 32.3 1660
51.9 36.3 1660
45.5 -73.6 1660
55.1 37.5 1660
41.8 123.4 1660
56.9 37.4 1660
32.1 118.8 1660
25.0 121.5 1660
51.7 55.4 1660
50.6 36.6 1661
25.0 121.5 1661
50.0 36.3 1661
37.5 127.0 1661
32.7 51.7 1661
11.0 77.0 1661
56.9 53.2 1661
23.5 121.0 1661
55.3 52.0 1661
52.5 103.8 1661
44.9 24.9 1661
22.3 114.2 1661
55.0 60.4 1661
50.6 36.6 1661
31.0 121.4 1662
39.9 116.4 1662
23.1 113.3 1662
57.0 24.1 1662
44.6 40.1 1662
55.2 61.4 1662
49.2 7.0 1662
55.0 60.1 1662
43.1 12.1 1662
48.5 35.0 1662
23.1 113.3 1662
49.6 34.5 1662
56.6 47.9 1662
38.6 -86.1 1662
55.0 60.1 1662
25.0 121.5 1662
36.7 117.0 1662
55.8 49.1 1663
50.7 3.2 1663
23.5 121.0 1663
37.5 127.0 1663
46.7 32.6 1663
48.9 36.3 1663
55.2 61.4 1663
45.5 -73.6 1663
61.3 73.4 1663
29.9 121.5 1663
48.0 68.0 1663
23.1 113.3 1663
34.7 113.5 1663
4.6 -74.1 1663
52.2 21.0 1663
50.4 30.5 1663
55.3 61.4 1663
48.9 2.3 1663
47.2 39.7 1663
23.0 120.2 1663
52.8 104.8 1664
34.8 113.7 1664
16.4 80.6 1664
25.0 121.5 1664
31.0 121.4 1664
48.5 32.3 1664
57.3 25.3 1664
34.4 132.5 1664
35.6 139.7 1664
55.7 37.6 1664
30.3 120.2 1664
10.6 -62.3 1664
33.4 -112.0 1664
59.9 30.3 1664
54.8 56.0 1664
48.9 2.3 1664
55.7 37.6 1664
34.8 113.7 1664
45.0 35.4 1665
23.1 113.3 1665
25.0 121.5 1665
39.0 -77.5 1665
22.6 88.4 1665
37.8 -97.8 1665
48.5 35.0 1665
25.0 121.5 1665
37.5 -122.4 1665
34.0 -117.9 1665
43.0 -78.7 1665
30.3 120.2 1665
48.5 32.3 1665
31.0 121.4 1665
56.9 53.2 1665
29.9 121.5 1665
45.5 -73.6 1665
55.2 61.4 1665
23.1 113.3 1666
45.5 -73.6 1666
24.8 121.0 1666
55.3 61.4 1666
55.2 59.7 1666
29.9 121.5 1666
40.7 -74.0 1666
46.3 48.0 1666
34.0 -117.9 1666
22.6 120.4 1666
23.5 121.0 1666
55.8 37.6 1666
45.5 -73.6 1666
34.1 -118.3 1666
25.0 121.3 1666
51.3 58.2 1666
55.3 61.4 1666
25.0 121.5 1667
48.9 2.3 1667
51.7 36.2 1667
56.9 53.2 1667
55.2 61.4 1667
45.5 -73.6 1667
23.5 121.0 1667
48.9 2.3 1667
30.3 120.2 1667
39.1 117.2 1667
22.3 114.2 1667
55.0 50.1 1667
48.9 2.3 1667
55.0 50.1 1667
30.3 120.2 1668
34.8 113.7 1668
59.3 18.0 1668
54.3 48.4 1668
37.5 127.0 1668
55.3 61.4 1668
55.5 65.3 1668
55.2 61.4 1668
55.2 61.4 1668
51.5 46.0 1668
54.6 39.7 1668
13.8 100.5 1668
50.4 30.5 1668
23.5 121.0 1668
45.5 -73.6 1668
24.5 118.1 1668
40.0 45.0 1668
45.5 -73.6 1668
50.3 28.7 1668
52.8 52.3 1668
53.1 36.2 1668
30.3 120.2 1669
52.3 104.3 1669
39.1 117.2 1669
50.5 30.5 1669
24.1 120.7 1669
53.0 28.0 1669
53.0 28.0 1669
30.3 120.2 1669
23.5 121.0 1669
23.7 120.5 1669
56.1 47.5 1669
51.7 55.4 1669
57.0 41.0 1669
55.7 37.6 1669
57.9 60.0 1669
42.9 71.4 1669
55.0 50.1 1669
58.6 49.7 1669
25.7 -100.3 1669
25.0 121.5 1670
39.9 116.4 1670
30.3 120.2 1670
29.9 121.5 1670
14.6 121.0 1670
51.8 107.6 1670
30.3 120.2 1670
48.5 32.3 1670
39.0 -94.6 1670
45.0 39.0 1670
14.1 -87.2 1670
32.1 118.8 1670
45.5 -73.6 1670
25.0 102.7 1670
56.9 53.2 1670
56.1 43.5 1670
36.1 103.8 1670
51.3 58.2 1670
52.8 52.3 1670
24.9 67.1 1671
50.9 34.8 1671
41.8 123.4 1671
48.0 37.8 1671
23.5 121.0 1671
48.0 37.9 1671
25.0 121.5 1671
23.5 121.0 1671
48.0 37.8 1671
24.1 120.7 1671
24.5 117.7 1671
45.3 -73.9 1671
48.6 39.3 1671
51.7 55.4 1671
48.5 32.3 1672
22.5 114.1 1672
56.9 60.6 1672
31.0 121.4 1672
34.8 113.7 1672
30.8 111.3 1672
58.5 31.3 1672
41.9 -87.6 1672
59.4 56.8 1672
23.5 121.0 1672
55.5 43.5 1672
17.0 81.8 1672
53.5 49.3 1673
53.5 49.3 1673
45.5 -73.6 1673
55.7 37.6 1673
57.5 24.7 1673
31.0 121.4 1673
23.5 121.0 1673
30.3 120.2 1673
55.2 61.4 1673
50.4 30.5 1673
51.8 107.6 1673
34.8 113.7 1673
36.6 139.7 1674
31.0 121.4 1674
48.9 36.3 1674
32.3 34.9 1674
23.1 113.3 1674
36.7 117.0 1674
55.2 59.7 1674
30.3 120.2 1674
48.9 2.3 1674
55.2 61.4 1674
52.3 104.3 1674
51.7 36.2 1674
23.5 121.0 1674
22.2 114.3 1674
45.5 -73.6 1674
53.7 -2.3 1674
55.7 37.6 1674
55.2 61.4 1674
34.9 117.6 1674
53.4 83.8 1675
23.5 121.0 1675
55.2 61.4 1675
30.7 104.1 1675
43.6 -79.4 1675
33.7 -84.4 1675
23.5 121.0 1675
47.9 35.3 1675
30.3 120.2 1675
-23.3 -46.7 1675
53.0 36.1 1675
53.0 36.1 1675
40.5 -74.2 1675
45.0 39.0 1675
55.2 61.4 1675
17.4 78.5 1675
22.3 114.2 1676
34.8 113.7 1676
30.3 120.2 1676
45.5 -73.6 1676
54.5 37.1 1676
52.3 104.3 1676
55.7 37.6 1676
19.4 -99.1 1676
19.4 -99.1 1676
55.2 61.4 1676
30.3 120.2 1676
59.3 18.1 1676
41.0 75.0 1676
45.5 -73.6 1676
61.3 73.4 1676
25.0 121.5 1676
35.9 139.6 1676
17.4 78.5 1676
55.7 37.6 1676
24.9 118.6 1676
55.0 73.4 1676
40.4 -3.7 1676
45.5 -73.6 1677
43.0 47.5 1677
45.5 -73.6 1677
48.5 32.3 1677
51.5 -0.1 1677
23.5 121.0 1677
55.8 48.5 1677
55.8 49.2 1677
55.2 61.4 1677
56.8 53.2 1677
55.9 37.7 1677
32.1 118.8 1677
50.5 30.5 1677
44.2 43.5 1677
47.8 26.7 1677
47.2 39.7 1677
54.6 39.7 1677
23.5 121.0 1677
37.5 127.0 1677
22.6 120.4 1677
55.2 61.4 1677
36.7 117.0 1677
56.1 40.4 1678
45.3 -73.9 1678
31.0 121.4 1678
54.3 48.4 1678
55.2 61.4 1678
55.7 84.9 1678
29.4 -98.5 1678
51.5 46.0 1678
47.2 39.7 1678
36.1 103.8 1678
53.6 142.9 1679
48.5 32.3 1679
45.5 -73.6 1679
31.0 121.4 1679
25.0 121.5 1679
45.5 -73.6 1679
43.7 -79.6 1679
29.9 121.5 1679
55.2 61.4 1679
55.2 59.7 1679
37.5 127.0 1679
17.4 78.5 1679
53.8 87.1 1679
40.7 -74.2 1679
37.8 -97.8 1679
23.5 121.0 1679
40.5 -74.2 1679
23.5 121.0 1679
-15.8 -47.8 1679
50.0 36.3 1679
32.1 118.8 1679
34.8 113.7 1679
56.2 89.6 1679
40.5 -74.2 1679
41.4 -75.7 1680
22.3 114.2 1680
25.0 121.5 1680
55.8 49.1 1680
31.0 121.4 1680
23.5 121.0 1680
34.8 113.7 1680
39.9 116.4 1680
53.9 27.6 1680
55.2 61.4 1680
23.5 121.0 1680
22.9 88.4 1680
22.3 114.2 1680
30.7 104.1 1680
55.7 37.6 1680
45.0 39.0 1680
24.8 67.0 1680
45.5 -73.6 1680
48.0 37.9 1680
40.0 45.0 1680
22.8 108.3 1680
55.6 40.7 1680
49.3 12.8 1680
40.5 -74.2 1680
53.0 36.1 1680
40.0 45.0 1680
50.6 36.6 1681
59.5 32.0 1681
45.3 -73.9 1681
25.0 121.5 1681
57.0 24.1 1681
45.3 -73.9 1681
56.5 85.0 1681
45.5 -73.6 1681
56.9 60.6 1681
55.8 49.1 1681
49.6 34.5 1681
30.3 120.2 1681
34.0 -117.9 1681
48.9 2.3 1681
37.5 127.0 1681
-8.0 -35.0 1681
53.0 36.1 1681
45.0 42.0 1681
55.7 37.6 1681
56.2 44.2 1682
45.5 -73.6 1682
55.7 37.6 1682
56.9 60.6 1682
44.5 34.2 1682
30.7 104.1 1682
53.9 27.6 1682
2.5 112.5 1682
22.6 120.4 1682
30.3 120.2 1682
50.4 30.5 1682
56.8 60.5 1682
45.5 -73.6 1682
48.9 2.3 1682
30.3 120.2 1682
36.1 103.8 1682
30.3 120.2 1682
32.1 118.8 1682
39.9 116.4 1682
45.5 -73.6 1683
55.7 37.6 1683
23.5 121.0 1683
47.1 21.9 1683
30.7 104.1 1683
55.1 61.6 1683
33.7 -84.4 1683
47.9 35.3 1683
41.0 75.0 1683
23.0 120.2 1683
55.3 61.4 1683
45.5 -73.6 1684
30.3 120.2 1684
50.6 36.6 1684
50.4 30.5 1684
-29.0 24.0 1684
13.8 100.5 1684
53.5 -113.5 1684
56.6 47.9 1684
30.3 120.2 1684
53.7 91.7 1684
22.8 108.3 1684
51.7 55.4 1684
17.4 78.5 1684
22.4 114.3 1684
23.5 121.0 1684
25.0 121.5 1685
45.3 -73.9 1685
30.3 120.2 1685
30.3 120.2 1685
41.8 123.4 1685
48.0 37.8 1685
37.7 112.5 1685
23.5 121.0 1685
55.7 37.6 1685
54.6 39.7 1685
44.0 15.6 1685
50.0 36.3 1685
32.1 118.8 1685
48.9 2.3 1685
54.9 52.4 1685
22.3 114.2 1685
48.5 32.3 1686
45.5 -73.6 1686
48.5 32.3 1686
45.5 -73.6 1686
35.7 139.6 1686
23.1 113.3 1686
48.9 2.3 1686
44.7 37.8 1686
9.0 -80.0 1686
23.5 121.0 1686
48.9 2.3 1686
45.5 -73.6 1686
34.0 -117.9 1686
56.0 92.9 1686
23.5 121.0 1686
36.5 -82.4 1686
55.3 86.1 1686
23.5 121.0 1686
52.8 52.3 1686
55.2 61.4 1686
55.2 43.1 1686
46.5 6.6 1686
54.9 52.3 1687
55.2 61.4 1687
48.9 2.3 1687
30.3 120.2 1687
38.7 -9.3 1687
51.7 55.4 1687
-22.8 -43.2 1687
23.5 121.0 1687
54.6 52.8 1687
17.4 78.5 1687
51.7 36.2 1687
23.5 121.0 1688
45.5 -73.6 1688
51.4 -1.0 1688
20.0 77.0 1688
31.0 121.4 1688
25.0 121.5 1688
51.3 9.5 1688
55.9 48.3 1688
35.7 51.4 1688
53.2 50.1 1688
23.5 121.0 1688
50.6 36.6 1688
17.4 78.5 1688
51.2 58.3 1688
39.9 32.8 1688
55.7 37.6 1688
55.2 61.4 1688
58.6 49.7 1688
25.0 121.5 1688
56.9 53.2 1688
53.0 36.1 1688
48.5 32.3 1689
26.6 106.7 1689
39.9 116.4 1689
31.0 121.4 1689
55.0 60.1 1689
45.5 -73.6 1689
25.0 121.5 1689
48.9 2.3 1689
51.7 36.2 1689
50.4 30.5 1689
44.8 20.5 1689
37.2 42.0 1689
23.1 113.3 1689
51.5 -0.5 1689
50.5 30.5 1689
55.2 61.4 1689
55.3 52.1 1689
36.1 103.8 1689
31.0 121.4 1689
37.5 -122.4 1690
55.7 37.6 1690
23.5 121.0 1690
37.5 -122.4 1690
45.5 -73.6 1690
25.0 121.3 1690
36.7 117.0 1690
37.5 127.0 1690
22.3 114.2 1690
30.3 120.2 1690
34.0 -117.9 1690
32.1 118.8 1690
55.4 42.5 1690
23.5 121.0 1690
56.0 24.0 1690
17.4 78.5 1690
34.3 108.9 1691
45.5 -73.6 1691
55.0 50.1 1691
55.7 37.6 1691
45.5 -73.6 1691
49.4 32.1 1691
22.3 114.2 1691
48.9 2.3 1691
54.9 61.4 1691
48.6 39.3 1691
48.5 35.0 1691
55.3 61.4 1691
23.5 121.0 1691
40.9 -72.6 1691
48.8 44.8 1691
23.5 121.0 1691
51.8 107.6 1691
52.4 4.9 1691
48.9 2.3 1691
54.6 52.5 1691
36.1 103.8 1691
40.5 -74.2 1691
52.3 21.0 1691
40.5 -74.2 1691
56.3 44.0 1691
52.2 104.1 1691
55.7 37.6 1691
28.2 113.1 1692
37.3 -121.9 1692
46.0 25.0 1692
50.6 26.2 1692
29.1 48.1 1692
46.3 48.0 1692
25.0 121.5 1692
51.5 46.1 1692
51.9 36.3 1692
34.8 113.7 1692
51.7 36.2 1692
55.2 61.4 1692
57.6 39.9 1692
55.0 60.1 1692
16.5 80.6 1692
34.8 113.7 1692
51.5 -0.1 1693
23.1 113.3 1693
-39.8 -73.2 1693
34.3 108.9 1693
46.3 48.0 1693
55.2 61.4 1693
25.0 121.5 1693
55.2 59.7 1693
54.3 48.4 1693
51.7 36.2 1693
39.9 116.4 1693
23.5 121.0 1693
48.9 2.3 1693
22.6 88.4 1693
22.6 120.3 1693
34.1 -118.3 1693
39.9 116.4 1693
30.3 120.2 1693
55.0 50.1 1693
30.3 120.2 1693
45.5 -73.6 1693
55.5 37.7 1693
55.2 61.4 1693
23.5 121.0 1694
48.5 32.3 1694
39.9 116.4 1694
32.1 118.8 1694
45.0 39.0 1694
31.0 121.4 1694
53.9 27.6 1694
55.2 61.4 1694
48.7 44.5 1694
30.3 120.2 1694
50.4 30.5 1694
25.0 121.5 1694
33.7 -84.4 1694
42.0 -88.0 1694
34.0 -118.3 1694
48.7 44.5 1694
45.8 16.0 1694
36.1 103.8 1694
37.8 -97.8 1694
36.7 117.0 1694
29.6 106.6 1694
51.5 -0.1 1694
-32.0 115.9 1694
36.7 117.0 1694
55.2 59.7 1694
48.5 34.6 1694
40.5 -74.2 1694
40.5 -74.2 1694
1.4 103.8 1695
49.4 32.1 1695
55.0 50.1 1695
45.5 -73.6 1695
45.5 -73.6 1695
55.2 59.7 1695
10.4 123.9 1695
55.2 61.4 1695
23.5 121.0 1695
55.7 37.6 1695
31.9 117.3 1695
55.2 61.4 1695
55.8 37.6 1695
15.4 -61.3 1695
48.9 2.3 1695
41.0 75.0 1695
24.1 120.7 1695
50.1 8.7 1695
49.4 32.1 1695
22.6 120.4 1695
48.3 25.9 1695
53.7 91.7 1695
23.5 121.0 1695
37.5 127.0 1695
30.3 120.2 1695
-34.6 -58.4 1695
23.5 121.0 1696
23.5 121.0 1696
45.0 42.0 1696
31.0 121.4 1696
25.0 121.5 1696
30.3 120.2 1696
23.8 90.4 1696
45.3 -73.9 1696
56.8 53.2 1696
61.3 73.4 1696
55.0 82.9 1696
48.0 37.8 1696
25.3 55.3 1696
-23.5 -46.6 1696
56.3 44.0 1696
48.5 32.3 1696
51.7 36.2 1696
39.9 116.4 1696
58.6 49.7 1696
48.5 32.3 1697
55.5 37.7 1697
49.8 30.1 1697
20.0 77.0 1697
55.2 61.4 1697
-34.6 -58.4 1697
50.6 36.6 1697
27.2 31.2 1697
44.9 37.3 1697
43.9 125.3 1697
53.2 45.0 1697
40.5 -74.2 1697
45.5 -73.6 1697
57.0 41.0 1697
21.0 105.9 1697
54.9 52.3 1697
25.0 102.7 1697
55.6 51.8 1697
-22.9 -47.1 1698
45.5 -73.6 1698
45.5 -73.6 1698
29.9 121.5 1698
31.0 121.4 1698
53.9 27.6 1698
32.1 118.8 1698
61.3 73.4 1698
42.9 -78.9 1698
24.9 118.6 1698
55.2 61.4 1698
50.5 30.5 1698
36.1 103.8 1698
55.3 61.4 1698
45.5 -73.6 1698
23.0 120.2 1698
36.7 117.0 1698
38.6 -90.2 1698
49.4 32.1 1698
22.3 114.2 1698
-33.9 151.2 1699
49.7 32.0 1699
50.4 30.5 1699
23.5 121.0 1699
48.0 37.8 1699
51.7 55.4 1699
50.9 34.8 1699
56.6 47.9 1699
47.9 35.3 1699
50.6 36.6 1699
31.9 117.3 1699
55.2 61.4 1699
48.8 37.6 1699
34.8 113.7 1699
51.2 58.3 1699
22.2 114.0 1699
32.1 118.8 1699
45.5 -73.6 1700
52.5 103.9 1700
30.3 120.2 1700
25.0 121.5 1700
48.0 37.8 1700
30.3 120.2 1700
49.6 34.5 1700
40.4 -3.7 1700
54.8 61.3 1700
29.9 121.5 1700
53.1 49.9 1700
-33.5 -70.7 1700
34.0 -117.9 1700
24.1 120.7 1700
23.1 113.3 1700
40.5 -74.2 1700
55.0 50.1 1700
38.7 -77.2 1700
50.4 30.5 1700
55.2 61.4 1700
48.9 2.3 1701
23.5 121.0 1701
46.9 19.8 1701
50.5 30.5 1701
23.5 121.0 1701
36.7 117.0 1701
30.3 120.2 1701
30.3 120.2 1701
25.0 121.5 1701
56.6 47.9 1701
48.9 2.3 1701
45.5 -73.6 1701
56.6 47.9 1701
30.3 120.2 1701
56.8 53.2 1701
23.5 121.0 1701
23.5 121.0 1701
55.0 82.9 1701
55.8 49.2 1702
45.5 -73.6 1702
55.8 49.1 1702
25.0 121.5 1702
15.7 104.6 1702
49.8 30.1 1702
48.9 2.3 1702
48.5 35.0 1702
54.6 39.7 1702
56.3 44.0 1702
23.5 121.0 1702
23.0 120.2 1703
45.5 -73.6 1703
57.0 25.0 1703
48.9 2.3 1703
34.8 113.7 1703
45.3 -73.9 1703
45.3 -73.9 1703
28.6 115.9 1703
30.6 114.3 1703
48.9 2.3 1703
39.9 116.4 1703
58.1 52.7 1703
55.2 59.7 1703
36.7 117.0 1703
53.4 83.8 1703
56.1 47.5 1703
55.2 59.7 1703
51.7 55.4 1703
50.7 3.2 1703
48.9 2.3 1703
57.2 24.9 1704
55.0 60.1 1704
52.5 103.9 1704
53.2 50.1 1704
51.7 36.2 1704
45.5 -73.6 1704
48.5 32.3 1704
45.5 -73.6 1704
50.4 30.5 1704
55.2 61.4 1704
56.1 40.4 1704
-37.3 -59.1 1704
46.3 20.2 1704
55.7 37.6 1704
39.9 116.4 1704
42.0 43.5 1704
48.9 2.3 1704
52.8 52.3 1704
56.9 53.2 1705
12.2 -86.3 1705
57.1 24.3 1705
35.7 138.7 1705
-34.7 -55.7 1705
30.3 120.2 1705
55.2 61.4 1705
56.9 53.2 1705
35.7 51.4 1705
51.7 36.2 1705
23.5 121.0 1705
23.5 121.0 1705
22.3 114.2 1705
55.2 61.4 1705
29.9 121.5 1705
48.9 2.3 1706
23.1 113.3 1706
48.0 37.9 1706
48.5 135.1 1706
60.0 10.8 1706
30.3 120.2 1706
51.2 3.2 1706
56.2 101.6 1706
55.2 61.4 1706
22.8 108.3 1706
43.6 39.7 1706
39.9 116.4 1706
37.5 127.0 1706
56.9 53.2 1706
-12.3 -66.2 1706
32.1 118.8 1706
53.1 36.2 1706
43.1 12.1 1706
49.0 14.5 1706
50.0 36.3 1706
56.8 53.2 1706
50.7 3.2 1706
30.3 120.2 1706
55.7 37.6 1707
26.1 119.3 1707
45.5 -73.6 1707
25.0 121.5 1707
20.0 77.0 1707
37.8 -97.8 1707
42.3 -88.5 1707
48.9 2.3 1707
23.1 113.3 1707
56.3 44.0 1707
51.5 46.1 1707
48.0 37.8 1707
57.0 25.0 1707
40.5 -74.2 1707
25.0 121.5 1707
30.3 120.2 1707
41.0 64.0 1707
41.1 -73.4 1708
30.3 120.2 1708
55.2 61.4 1708
55.8 49.2 1708
31.0 121.4 1708
50.0 36.3 1708
50.4 30.5 1708
48.0 37.8 1708
49.8 30.1 1708
29.3 47.7 1708
45.0 39.0 1708
55.7 37.6 1708
51.5 46.0 1708
26.1 119.3 1708
55.7 37.6 1708
-22.9 -47.1 1708
45.5 -73.6 1708
48.6 39.3 1708
41.4 2.2 1708
25.0 102.7 1708
30.6 114.3 1708
30.7 104.1 1708
40.5 -74.2 1708
58.0 56.3 1709
45.5 -73.6 1709
46.0 33.8 1709
55.6 51.8 1709
10.8 106.6 1709
45.5 -73.6 1709
55.7 37.6 1709
8.0 -5.0 1709
37.5 127.0 1709
45.0 39.0 1709
-13.5 34.0 1709
23.1 113.3 1709
30.0 31.2 1709
37.5 127.0 1709
23.5 121.0 1709
50.6 26.2 1709
45.5 -73.6 1709
48.5 32.3 1709
26.1 119.3 1709
39.9 116.4 1709
22.8 108.3 1709
58.6 49.7 1709
17.4 78.5 1709
25.0 121.5 1709
41.0 64.0 1709
41.0 64.0 1709
22.3 114.2 1709
58.3 48.3 1710
55.8 49.2 1710
48.5 32.3 1710
31.0 121.4 1710
30.3 120.2 1710
28.6 115.9 1710
53.9 27.6 1710
4.6 -74.1 1710
30.3 120.2 1710
23.5 121.0 1710
47.0 28.8 1710
51.7 36.2 1710
23.5 121.0 1710
33.7 -84.4 1710
35.6 139.8 1710
53.5 49.3 1710
55.3 86.1 1710
24.9 118.6 1710
30.3 120.2 1710
28.5 119.9 1711
39.9 116.4 1711
56.8 53.2 1711
28.6 115.9 1711
-40.6 -73.1 1711
37.5 126.7 1711
55.2 61.4 1711
30.3 120.2 1711
50.0 36.3 1711
30.3 120.2 1711
55.7 37.6 1711
51.3 9.5 1711
39.9 116.4 1711
50.4 30.5 1711
55.3 61.4 1711
45.5 -73.6 1711
41.3 -104.7 1711
25.0 121.5 1711
56.9 53.2 1711
30.3 120.2 1711
23.5 121.0 1711
23.7 90.4 1711
55.2 61.4 1711
48.9 2.3 1711
55.2 61.4 1711
-34.6 -58.5 1711
40.0 45.0 1711
55.2 61.4 1711
23.5 121.0 1712
22.3 114.2 1712
45.3 -73.9 1712
33.9 118.3 1712
37.5 127.0 1712
24.1 120.7 1712
53.1 36.2 1712
56.8 53.2 1712
48.9 2.3 1712
36.7 117.0 1712
53.9 27.6 1712
56.9 37.4 1712
43.1 141.3 1712
45.5 -73.6 1712
49.8 24.0 1712
48.8 37.6 1712
55.2 61.4 1712
44.4 26.1 1712
55.3 52.0 1712
37.5 127.0 1712
23.5 121.0 1712
40.5 -74.2 1712
55.8 49.1 1712
55.3 61.4 1712
55.0 59.0 1712
55.8 39.0 1713
45.5 -73.6 1713
36.7 117.0 1713
29.4 48.0 1713
48.9 2.3 1713
22.8 108.3 1713
49.4 32.1 1713
41.8 123.4 1713
48.9 2.3 1713
30.3 120.2 1713
50.4 30.5 1713
50.1 14.4 1713
48.7 44.5 1713
32.1 118.8 1713
51.7 36.2 1713
45.0 34.1 1713
48.5 32.3 1713
30.3 120.2 1713
51.7 55.4 1713
22.6 120.4 1714
53.2 50.1 1714
45.3 -73.9 1714
45.5 -73.6 1714
51.5 46.0 1714
39.9 116.4 1714
55.7 37.6 1714
25.0 121.5 1714
48.3 38.1 1714
30.3 120.2 1714
52.3 104.3 1714
30.3 120.2 1714
37.5 127.0 1714
36.7 117.0 1714
54.9 52.3 1714
47.5 19.1 1714
48.3 39.7 1714
30.9 120.1 1714
55.5 38.4 1715
48.5 32.3 1715
34.7 113.5 1715
45.0 42.0 1715
55.7 37.6 1715
34.8 113.7 1715
45.5 -73.6 1715
30.8 120.8 1715
24.5 54.4 1715
59.4 56.8 1715
49.4 32.1 1715
49.4 32.1 1715
30.3 120.2 1715
48.0 37.8 1715
34.0 -117.9 1715
36.7 117.0 1715
56.9 35.9 1715
48.9 2.3 1715
37.5 127.0 1715
50.3 28.7 1716
49.4 32.1 1716
41.3 69.3 1716
30.3 120.2 1716
45.3 -73.9 1716
54.3 48.4 1716
30.3 120.2 1716
30.3 120.2 1716
19.7 -101.1 1716
30.7 104.1 1716
48.9 2.3 1716
55.8 49.2 1716
-29.9 31.0 1716
55.2 61.4 1716
34.8 113.7 1716
23.1 113.3 1716
43.9 125.3 1716
50.4 30.5 1716
-34.6 -58.4 1716
48.8 37.6 1716
24.1 120.7 1716
55.2 61.4 1716
55.3 61.4 1716
35.6 139.8 1716
22.6 120.4 1717
56.1 47.5 1717
22.8 108.3 1717
30.3 120.2 1717
30.3 120.2 1717
45.3 -73.9 1717
50.5 30.5 1717
30.3 120.2 1717
23.5 121.0 1717
51.7 36.2 1717
49.8 24.0 1717
48.0 37.8 1717
48.8 37.6 1717
56.0 43.1 1717
23.5 121.0 1717
22.6 120.3 1717
24.5 117.7 1717
55.3 61.4 1717
34.8 113.7 1718
56.9 53.2 1718
23.5 121.0 1718
25.0 121.5 1718
55.1 61.6 1718
45.5 -73.6 1718
51.7 39.2 1718
50.9 128.5 1718
40.5 -74.2 1718
55.2 59.7 1718
50.9 39.5 1718
36.7 117.0 1718
-19.8 -43.9 1718
45.0 41.1 1718
30.7 104.1 1718
23.5 121.0 1718
39.9 116.4 1718
56.2 47.3 1718
45.5 -73.6 1718
40.7 109.8 1718
56.3 44.0 1718
48.0 37.8 1719
48.9 2.3 1719
37.5 126.7 1719
55.7 37.6 1719
49.8 30.1 1719
45.5 -73.6 1719
48.9 2.3 1719
45.5 -73.6 1719
36.7 117.0 1719
50.4 30.5 1719
45.5 -73.6 1719
55.0 60.1 1719
48.0 37.9 1719
25.0 45.0 1719
23.1 113.3 1719
30.3 120.2 1719
47.9 35.3 1719
22.4 114.0 1719
48.9 2.3 1719
23.5 121.0 1719
48.9 2.3 1719
57.6 39.9 1719
50.4 30.5 1719
25.0 121.5 1719
55.2 61.4 1719
34.7 113.5 1720
45.5 -73.6 1720
45.5 -73.6 1720
50.5 30.5 1720
45.5 -73.6 1720
48.5 32.3 1720
-25.4 -49.3 1720
48.9 2.3 1720
55.3 61.4 1720
43.5 -80.6 1720
23.5 121.0 1720
36.7 117.0 1720
22.6 120.4 1720
23.1 113.3 1720
47.5 19.1 1720
23.1 113.3 1720
50.6 36.6 1720
50.4 80.3 1720
22.3 114.2 1720
56.8 56.4 1720
48.9 36.3 1721
45.5 -73.6 1721
41.7 123.2 1721
45.3 -73.9 1721
30.3 120.2 1721
50.4 30.5 1721
56.5 85.0 1721
23.5 121.0 1721
55.7 37.6 1721
48.5 32.3 1721
40.0 45.0 1721
26.3 50.2 1721
25.0 102.7 1721
45.5 -73.6 1722
30.3 120.2 1722
17.4 78.5 1722
53.4 83.8 1722
50.7 3.2 1722
36.1 103.8 1722
34.3 108.9 1722
19.8 -99.2 1722
35.7 51.3 1722
51.7 36.2 1722
25.0 121.5 1722
48.0 68.0 1722
34.2 -118.3 1722
55.0 82.9 1722
30.3 120.2 1722
62.0 129.7 1722
48.7 38.1 1722
56.7 37.2 1722
50.5 30.5 1722
38.7 -77.2 1722
30.3 120.2 1723
24.1 120.7 1723
23.0 120.2 1723
45.3 -73.9 1723
45.5 -73.6 1723
53.2 63.6 1723
35.2 115.4 1723
55.3 61.4 1723
53.5 49.3 1723
31.0 121.4 1723
13.8 100.5 1723
49.4 27.0 1723
58.6 49.9 1723
45.5 -73.6 1723
37.5 -122.4 1723
48.3 38.1 1723
25.0 121.5 1723
55.1 73.1 1723
40.5 -74.2 1723
52.8 52.3 1723
55.2 61.4 1723
51.7 55.4 1723
-6.2 106.8 1724
51.9 36.3 1724
56.9 53.2 1724
45.5 -73.6 1724
45.3 -73.9 1724
30.3 120.2 1724
23.5 121.0 1724
56.9 53.2 1724
45.5 -73.6 1724
50.9 6.0 1724
22.6 120.3 1724
25.0 121.5 1724
51.5 -0.1 1724
36.7 117.0 1724
55.8 49.2 1724
46.3 48.0 1724
48.9 2.3 1724
23.0 120.2 1724
23.5 121.0 1724
55.3 42.2 1724
51.7 36.2 1724
23.5 121.0 1724
23.1 113.3 1724
39.1 117.2 1724
55.2 61.4 1724
53.0 36.1 1724
37.5 121.4 1724
55.2 61.4 1724
55.2 61.4 1724
37.5 127.0 1725
45.5 -73.6 1725
41.4 -75.7 1725
45.3 -73.9 1725
53.9 27.6 1725
50.7 3.2 1725
45.5 -73.6 1725
55.2 61.4 1725
56.1 40.4 1725
54.2 37.6 1725
56.4 41.3 1726
37.5 127.0 1726
13.8 100.5 1726
34.3 108.9 1726
23.5 121.0 1726
48.9 2.3 1726
45.8 126.7 1726
59.9 30.3 1726
23.1 113.3 1726
54.2 37.6 1726
51.9 36.3 1726
50.6 36.6 1726
52.2 20.8 1726
55.2 61.4 1726
30.3 120.2 1726
31.5 34.8 1727
45.5 -73.6 1727
30.3 120.2 1727
40.5 -74.2 1727
34.8 113.7 1727
45.5 -73.6 1727
34.8 113.7 1727
22.3 114.2 1727
38.6 -90.2 1727
9.0 -79.5 1727
55.2 59.7 1727
36.7 117.0 1727
25.0 121.5 1727
43.9 125.3 1727
45.0 39.0 1727
28.6 115.9 1727
48.0 37.9 1727
42.2 24.6 1727
25.0 102.7 1727
23.7 120.5 1727
50.4 30.5 1727
23.5 121.0 1727
55.8 52.1 1727
45.5 -73.6 1728
30.3 120.2 1728
24.8 121.0 1728
24.9 118.6 1728
52.0 113.6 1728
25.0 121.5 1728
48.9 2.3 1728
44.9 40.6 1728
59.9 30.3 1728
56.8 53.2 1728
23.5 116.1 1728
45.5 -73.6 1728
52.2 20.8 1728
30.3 120.2 1728
55.0 73.4 1728
52.3 21.0 1728
25.0 121.5 1729
25.0 121.3 1729
45.5 -73.6 1729
25.0 121.5 1729
40.7 -74.2 1729
29.4 48.0 1729
23.5 121.0 1729
56.5 85.0 1729
55.7 37.6 1729
59.9 30.3 1729
36.6 128.7 1729
55.2 61.4 1729
48.5 32.3 1729
17.4 78.5 1729
43.1 12.1 1729
50.6 36.6 1729
56.1 47.3 1730
14.6 121.1 1730
22.7 120.5 1730
24.9 67.1 1730
30.3 120.2 1730
25.0 121.5 1730
41.8 123.4 1730
52.7 41.4 1730
50.6 36.6 1730
54.8 56.0 1730
55.7 37.6 1730
45.5 -73.6 1731
49.4 32.1 1731
55.2 61.4 1731
53.0 36.1 1731
45.5 -73.6 1731
23.1 113.3 1731
57.0 54.0 1731
48.7 44.5 1731
40.5 -74.2 1731
48.9 2.3 1731
17.4 78.5 1731
30.6 114.3 1731
30.3 120.2 1731
23.5 121.0 1732
19.1 72.8 1732
45.5 -73.6 1732
57.0 25.0 1732
45.0 39.0 1732
45.3 -73.9 1732
45.5 -73.6 1732
23.5 121.0 1732
50.4 30.5 1732
39.9 116.4 1732
55.2 61.4 1732
44.6 40.1 1732
55.7 37.6 1732
23.5 121.0 1732
30.3 120.2 1732
30.3 120.2 1732
55.2 61.4 1732
51.7 55.4 1732
40.5 -74.2 1732
55.2 61.4 1732
56.9 53.2 1733
48.5 32.3 1733
31.0 121.4 1733
24.1 120.7 1733
30.3 120.2 1733
59.2 39.9 1733
45.5 -73.6 1733
56.8 53.2 1733
50.6 36.6 1733
23.5 121.0 1733
23.1 113.3 1733
49.8 73.1 1733
49.4 27.0 1733
48.7 44.5 1733
55.0 82.9 1733
25.0 121.5 1734
45.5 -73.6 1734
30.3 120.2 1734
30.3 120.2 1734
48.9 2.3 1734
40.7 109.8 1734
48.5 35.0 1734
41.1 122.1 1734
55.2 61.4 1734
41.3 -104.7 1734
23.1 113.3 1734
51.7 36.2 1734
23.5 121.0 1734
30.3 120.2 1734
30.3 120.2 1734
48.6 39.3 1734
57.8 40.9 1734
57.8 40.9 1734
36.7 117.0 1734
24.8 67.0 1734
55.0 73.4 1734
45.5 -73.6 1735
37.3 -121.9 1735
42.3 -71.1 1735
55.0 60.1 1735
55.7 37.6 1735
54.2 45.2 1735
50.4 30.5 1735
59.5 34.7 1735
43.0 -78.7 1735
22.5 114.1 1735
38.7 -77.2 1735
48.9 2.3 1735
50.0 36.3 1735
48.5 32.3 1735
30.3 120.2 1735
48.5 32.3 1735
58.6 49.7 1735
30.3 120.2 1736
45.5 -73.6 1736
22.6 120.3 1736
49.8 30.1 1736
25.0 121.5 1736
25.0 121.5 1736
48.5 35.0 1736
48.5 32.3 1736
55.2 61.4 1736
23.1 113.3 1736
45.5 -73.6 1737
54.9 43.3 1737
37.5 127.0 1737
45.5 -73.6 1737
58.1 52.7 1737
45.5 -73.6 1737
23.5 121.0 1737
51.7 36.2 1737
25.0 121.5 1737
55.7 37.6 1737
35.7 139.6 1737
45.5 -73.6 1737
55.2 61.4 1737
56.1 101.6 1737
53.0 36.1 1737
22.6 120.4 1737
53.8 87.1 1737
49.2 31.9 1738
28.6 115.9 1738
45.5 -73.6 1738
53.0 36.1 1738
22.3 114.2 1738
23.5 121.0 1738
-2.2 -79.9 1738
45.3 -73.9 1738
50.4 30.5 1738
47.6 -122.3 1738
32.1 118.8 1738
55.8 37.6 1738
32.1 118.8 1738
55.2 61.4 1738
17.4 78.5 1738
23.5 121.0 1738
49.2 16.6 1738
51.7 39.2 1738
47.0 28.9 1738
40.0 45.0 1738
23.7 90.4 1738
30.3 120.2 1738
45.5 -73.6 1739
41.3 69.3 1739
56.1 40.4 1739
55.7 37.6 1739
-33.5 -70.7 1739
30.3 120.2 1739
41.8 123.4 1739
56.9 53.2 1739
57.1 24.2 1739
30.7 104.1 1739
60.9 76.6 1739
55.7 37.6 1739
31.0 121.4 1739
32.1 118.8 1739
20.2 85.8 1739
47.6 -122.3 1739
55.5 89.2 1739
55.0 82.9 1739
8.0 -66.0 1739
23.1 113.3 1739
25.0 121.5 1739
51.9 36.3 1739
55.2 61.4 1739
53.4 83.8 1739
55.2 59.7 1739
53.2 50.1 1739
23.5 121.0 1739
30.8 111.3 1739
55.0 50.1 1739
55.3 61.4 1739
48.9 2.3 1740
53.5 49.3 1740
37.5 -122.4 1740
48.5 32.3 1740
54.3 48.4 1740
50.4 30.5 1740
45.5 -73.6 1740
44.4 26.1 1740
58.6 49.7 1740
45.5 -73.6 1740
22.8 108.3 1740
45.5 -73.6 1740
50.6 36.6 1740
50.6 36.6 1740
23.5 121.0 1740
35.3 139.6 1740
54.6 52.5 1740
55.3 61.4 1740
45.5 8.6 1740
55.0 50.1 1740
64.6 39.8 1741
25.0 121.5 1741
56.9 53.2 1741
55.2 61.4 1741
55.2 59.7 1741
39.9 116.4 1741
48.5 35.0 1741
55.3 61.4 1741
55.2 61.4 1741
10.8 106.6 1741
53.2 50.1 1741
55.3 61.4 1741
23.1 113.3 1741
48.0 68.0 1741
55.3 61.4 1741
57.2 65.5 1741
53.6 9.7 1741
39.9 116.4 1741
25.0 121.5 1741
36.1 103.8 1741
19.4 -99.1 1741
51.8 55.1 1741
59.9 30.3 1741
24.8 121.0 1741
28.2 113.1 1742
30.3 120.2 1742
45.5 -73.6 1742
55.3 61.4 1742
48.9 36.3 1742
36.7 117.0 1742
50.4 30.5 1742
25.0 102.7 1742
53.9 27.6 1742
25.0 121.5 1742
-21.7 -49.7 1742
51.7 36.2 1742
51.7 36.2 1742
30.3 120.2 1742
23.1 113.3 1742
-22.8 -43.2 1742
55.2 61.4 1742
23.5 121.0 1743
55.2 61.4 1743
22.6 88.4 1743
55.2 61.4 1743
48.5 32.3 1743
23.5 121.0 1743
25.0 121.5 1743
45.5 -73.6 1743
45.0 34.1 1743
45.5 -73.6 1743
23.0 120.2 1743
56.3 44.0 1743
55.2 61.4 1743
51.3 9.5 1743
25.0 102.7 1743
22.3 114.2 1743
20.2 85.8 1743
55.0 73.4 1743
55.2 61.4 1743
22.3 114.2 1743
55.0 82.9 1743
55.0 50.1 1743
25.0 121.5 1743
55.2 61.4 1743
53.3 -6.3 1744
45.5 -73.6 1744
30.3 120.2 1744
48.5 32.3 1744
23.5 121.0 1744
55.2 61.4 1744
45.5 -73.6 1744
45.3 -73.9 1744
32.1 118.8 1744
45.5 -73.6 1744
22.6 120.4 1744
36.7 117.0 1744
45.5 -73.6 1744
50.4 30.5 1744
40.0 45.0 1744
52.4 4.9 1744
48.9 2.3 1744
48.9 2.3 1744
30.3 120.2 1744
40.5 -74.2 1744
55.2 59.7 1744
45.0 34.1 1744
42.0 43.5 1744
51.8 55.1 1744
55.3 61.4 1744
55.3 61.4 1744
55.2 61.4 1744
45.5 -73.6 1745
30.3 120.2 1745
42.0 43.5 1745
52.4 4.9 1745
37.7 112.5 1745
48.5 35.0 1745
37.5 127.0 1745
56.1 47.3 1745
46.8 29.5 1745
25.0 121.5 1745
23.1 113.3 1745
36.8 -114.1 1745
61.3 73.4 1745
21.0 105.9 1745
48.9 2.6 1745
23.5 121.0 1745
37.5 127.0 1745
58.7 27.8 1745
55.2 61.4 1745
33.8 -117.8 1745
51.5 46.0 1745
55.3 61.4 1745
53.6 49.3 1745
19.4 -99.0 1745
55.4 43.8 1745
30.3 120.2 1746
39.9 116.4 1746
46.7 32.6 1746
44.0 21.0 1746
51.7 36.2 1746
48.9 2.3 1746
50.4 30.5 1746
37.5 -122.2 1746
22.3 114.2 1746
55.7 37.6 1746
23.0 113.1 1746
52.3 104.3 1746
48.9 2.3 1746
30.3 120.2 1746
40.5 -74.2 1746
50.4 30.5 1746
45.0 34.1 1747
50.5 30.5 1747
20.0 77.0 1747
48.0 37.8 1747
50.5 30.5 1747
55.7 37.6 1747
55.2 59.7 1747
48.9 2.3 1747
55.2 61.4 1747
28.6 115.9 1747
52.7 58.7 1747
23.5 121.0 1747
51.5 -0.1 1747
49.4 32.1 1747
48.6 39.3 1747
55.2 59.7 1747
52.0 47.8 1747
23.1 113.3 1747
51.8 55.1 1747
55.2 61.4 1747
51.5 -0.1 1747
54.6 39.7 1747
37.5 121.4 1747
47.0 28.8 1747
-36.8 -73.0 1748
37.5 127.0 1748
51.5 -0.1 1748
45.3 -73.9 1748
57.2 65.5 1748
45.5 -73.6 1748
47.2 38.9 1748
23.5 121.0 1748
45.5 -73.6 1748
41.3 28.4 1748
33.7 -84.4 1748
57.0 54.0 1748
55.2 61.4 1748
55.2 61.4 1748
51.8 55.1 1748
22.6 120.4 1748
58.5 50.0 1749
54.3 48.4 1749
45.5 -73.6 1749
39.9 116.4 1749
45.5 -73.6 1749
23.5 121.0 1749
60.9 76.6 1749
22.3 114.2 1749
23.5 121.0 1749
-23.5 -46.6 1749
37.5 126.7 1749
24.1 120.7 1749
45.5 -73.6 1749
25.0 121.5 1749
23.5 121.0 1749
58.6 49.7 1749
47.3 19.2 1749
17.4 78.5 1749
-6.2 106.8 1749
51.3 9.5 1749
56.3 44.0 1750
45.3 -73.9 1750
45.5 -73.6 1750
55.3 61.4 1750
50.4 30.5 1750
45.5 -73.6 1750
45.5 -73.6 1750
30.3 120.2 1750
-0.2 -78.5 1750
25.0 102.7 1750
51.5 -0.1 1750
55.2 61.4 1750
45.5 -73.6 1750
53.3 34.4 1750
51.5 31.3 1750
32.1 118.8 1750
34.0 -118.3 1750
23.5 121.0 1750
55.2 61.4 1750
55.2 61.4 1750
40.0 45.0 1750
40.5 -74.2 1750
36.1 103.8 1750
48.9 2.3 1750
50.6 36.6 1751
45.5 -73.6 1751
56.4 41.3 1751
55.7 37.6 1751
39.9 116.4 1751
41.0 29.1 1751
49.4 32.1 1751
30.9 120.1 1751
30.3 120.2 1751
22.6 120.4 1751
36.1 103.8 1751
56.1 40.4 1751
54.2 45.2 1751
34.3 108.9 1751
41.8 123.4 1751
50.4 30.5 1751
48.5 35.0 1751
51.7 36.2 1751
25.0 121.3 1751
-25.3 -57.6 1751
48.9 2.3 1751
45.5 -73.6 1751
42.1 -87.8 1751
54.6 52.8 1751
40.6 -74.5 1751
29.0 -111.7 1751
17.4 78.5 1751
-22.8 -43.2 1751
49.6 34.5 1752
49.4 32.1 1752
49.2 7.0 1752
36.7 117.0 1752
28.6 77.2 1752
55.2 61.4 1752
56.8 53.2 1752
22.3 114.2 1752
40.8 -73.6 1752
48.9 2.3 1752
33.7 -84.4 1752
23.1 113.3 1752
48.0 37.8 1752
19.3 76.1 1752
54.4 61.3 1752
40.5 -74.2 1752
24.1 120.7 1752
58.6 49.7 1753
45.5 -73.6 1753
22.3 114.2 1753
30.3 120.2 1753
32.1 118.8 1753
53.1 36.2 1753
55.2 61.4 1753
55.2 61.4 1753
23.1 113.3 1753
0.4 -78.1 1753
13.1 80.2 1753
56.2 101.6 1753
60.9 76.6 1753
45.5 -73.6 1753
44.4 9.0 1753
30.3 120.2 1753
37.5 127.0 1753
45.5 -73.6 1753
32.1 118.8 1753
48.9 2.3 1753
47.6 -122.3 1753
48.5 32.3 1753
55.2 61.4 1753
41.0 64.0 1753
48.8 37.6 1753
57.0 41.0 1754
55.3 61.4 1754
29.4 48.0 1754
29.4 48.0 1754
58.0 56.3 1754
55.8 37.6 1754
30.3 120.2 1754
55.2 61.4 1754
23.5 121.0 1754
41.0 29.0 1754
23.1 113.3 1754
23.5 121.0 1754
36.1 -115.1 1754
55.2 61.4 1754
17.4 78.5 1754
55.0 73.4 1754
56.2 44.2 1755
31.5 34.8 1755
22.6 120.4 1755
50.4 30.5 1755
45.5 -73.6 1755
37.3 -121.9 1755
55.2 61.4 1755
30.3 120.2 1755
45.5 -73.6 1755
30.3 120.2 1755
45.5 -73.6 1755
49.4 32.1 1755
55.2 61.4 1755
55.8 49.2 1755
23.5 121.0 1755
48.9 2.3 1755
52.0 47.8 1755
-37.9 145.0 1755
36.8 -114.1 1755
53.8 38.1 1755
59.9 30.3 1755
55.2 61.4 1755
42.9 -78.9 1755
55.2 61.4 1755
48.7 44.5 1755
30.3 120.2 1755
55.2 61.4 1755
55.0 73.4 1755
50.6 36.6 1755
22.3 114.2 1755
32.0 34.8 1755
55.3 52.1 1755
43.1 12.1 1755
55.2 61.4 1756
28.6 115.9 1756
55.2 61.4 1756
23.5 121.0 1756
30.3 120.2 1756
4.6 -74.1 1756
55.0 73.4 1756
51.5 -0.1 1756
54.3 48.4 1756
25.0 121.3 1756
32.5 -94.4 1756
37.5 127.0 1756
51.7 36.2 1756
45.5 -73.6 1756
48.9 2.3 1756
56.9 53.2 1756
45.5 -73.6 1756
40.5 -74.2 1756
48.5 32.3 1756
48.5 32.3 1756
25.0 121.3 1757
55.7 37.6 1757
50.5 30.5 1757
23.5 121.0 1757
55.3 61.4 1757
25.0 102.7 1757
36.7 117.0 1757
23.5 121.0 1757
55.3 61.4 1757
56.8 53.2 1757
49.4 32.1 1757
45.5 -73.6 1757
23.5 121.0 1757
23.1 113.3 1757
24.9 118.6 1757
52.3 104.3 1757
30.3 120.2 1757
48.3 40.3 1757
55.7 37.6 1757
36.7 117.0 1757
41.0 29.0 1757
28.6 115.9 1757
50.5 30.5 1757
48.0 37.9 1758
54.4 61.3 1758
23.5 121.0 1758
36.7 117.0 1758
45.0 19.8 1758
46.3 48.0 1758
23.5 121.0 1758
48.9 2.3 1758
55.2 61.4 1758
56.8 53.2 1758
50.5 30.5 1758
45.5 -73.6 1758
25.0 121.5 1758
34.1 -118.3 1758
54.6 52.8 1758
-33.5 -70.7 1758
60.3 5.4 1758
56.3 44.0 1758
39.9 116.4 1759
45.5 -73.6 1759
50.4 30.5 1759
50.4 30.5 1759
30.3 120.2 1759
30.3 120.2 1759
45.5 -73.6 1759
60.9 76.6 1759
37.8 -97.8 1759
25.0 121.5 1759
55.2 61.4 1759
37.3 -121.9 1759
24.1 120.7 1759
48.9 2.3 1759
51.7 55.4 1759
51.2 58.3 1759
51.7 55.4 1759
17.4 78.5 1759
50.6 36.6 1759
26.1 119.3 1759
55.3 61.4 1760
24.8 67.0 1760
52.6 39.6 1760
22.3 114.2 1760
24.0 120.6 1760
48.9 2.3 1760
26.6 106.7 1760
39.9 116.4 1760
51.3 9.5 1760
55.2 61.4 1760
45.3 28.8 1760
17.4 78.5 1760
55.7 37.6 1760
17.4 78.5 1760
30.3 120.2 1760
47.8 29.0 1760
20.0 110.3 1760
55.1 73.1 1760
45.0 34.1 1760
55.2 61.4 1760
31.0 121.4 1761
55.2 61.4 1761
45.5 -73.6 1761
30.3 120.2 1761
45.3 -73.9 1761
22.6 120.4 1761
25.0 121.5 1761
59.9 30.3 1761
23.5 121.0 1761
49.6 34.5 1761
50.4 30.5 1761
56.5 85.0 1761
48.5 35.0 1761
-22.8 -43.2 1761
49.8 30.1 1761
55.2 61.4 1761
30.0 31.2 1761
34.0 -118.3 1761
55.7 37.6 1761
49.4 32.1 1761
55.3 61.4 1761
55.2 59.7 1761
20.0 77.0 1761
40.5 -74.2 1761
22.3 114.2 1761
47.2 39.7 1761
36.1 103.8 1761
23.5 121.0 1761
55.0 59.0 1761
48.6 39.3 1761
55.0 59.0 1761
23.5 121.0 1762
55.2 61.4 1762
23.5 121.0 1762
23.5 121.0 1762
22.6 88.4 1762
23.1 113.3 1762
30.3 120.2 1762
23.1 113.3 1762
55.2 61.4 1762
42.9 -78.9 1762
39.1 -94.6 1762
32.1 118.8 1762
51.2 58.3 1762
51.7 55.4 1762
52.0 47.4 1762
26.9 114.5 1762
51.7 55.4 1762
30.0 31.2 1763
45.5 -73.6 1763
55.7 37.6 1763
55.0 60.1 1763
50.7 -3.5 1763
50.0 36.3 1763
53.0 36.1 1763
45.5 -73.6 1763
43.2 -123.4 1763
23.5 121.0 1763
51.7 55.4 1763
-8.0 -34.9 1763
29.9 121.5 1763
55.2 61.4 1763
51.8 55.1 1763
37.5 126.8 1764
52.0 113.6 1764
30.3 120.2 1764
56.9 60.6 1764
37.4 127.1 1764
45.5 -73.6 1764
16.5 80.7 1764
61.3 73.4 1764
37.5 127.0 1764
46.9 -96.8 1764
4.6 -74.1 1764
34.1 -118.3 1764
56.9 53.2 1764
53.4 59.0 1764
23.1 113.3 1764
28.6 115.9 1764
51.7 55.4 1764
52.3 21.0 1764
51.7 55.4 1764
51.3 9.5 1764
25.0 102.7 1764
36.1 103.8 1764
30.3 120.2 1764
55.2 61.4 1764
37.5 127.0 1764
55.3 61.4 1765
48.9 2.3 1765
45.5 -73.6 1765
45.5 -73.6 1765
56.9 60.6 1765
55.7 37.6 1765
46.0 15.9 1765
23.7 90.4 1765
51.3 9.5 1765
55.9 37.7 1765
45.0 39.0 1765
45.5 -73.6 1765
30.6 114.3 1765
39.0 -76.9 1765
36.0 129.4 1765
30.3 120.2 1765
34.8 113.7 1765
31.5 34.8 1765
61.3 73.4 1765
23.5 121.0 1765
25.0 121.5 1765
51.8 55.1 1765
53.3 34.4 1765
45.5 -73.6 1765
41.9 23.5 1765
45.5 -73.6 1766
45.5 -73.6 1766
48.9 2.3 1766
55.2 61.4 1766
45.5 -73.6 1766
54.9 37.3 1766
30.7 104.1 1766
55.7 37.6 1766
45.5 -73.6 1766
50.1 14.4 1766
55.8 49.1 1766
55.2 61.4 1766
25.0 121.5 1766
52.3 104.3 1766
23.1 113.3 1766
52.8 52.3 1766
23.5 121.0 1766
51.7 55.4 1766
54.9 58.8 1766
48.0 68.0 1767
48.0 68.0 1767
51.7 36.2 1767
31.0 121.4 1767
30.3 120.2 1767
60.9 76.6 1767
23.7 90.4 1767
45.5 -73.6 1767
42.0 43.5 1767
55.2 61.4 1767
51.7 36.2 1767
55.3 61.4 1767
55.2 61.4 1767
36.0 129.4 1767
-23.5 -46.6 1767
51.7 55.4 1767
23.1 113.3 1767
55.3 61.4 1767
36.6 128.7 1768
55.7 37.6 1768
55.2 61.4 1768
55.2 61.4 1768
55.2 61.4 1768
45.5 -73.6 1768
48.0 37.8 1768
50.4 30.5 1768
55.3 61.4 1768
32.1 118.8 1768
50.6 36.6 1768
48.6 39.3 1768
54.6 52.5 1768
32.1 118.8 1768
45.5 -73.6 1769
49.8 24.0 1769
24.9 118.6 1769
31.0 121.4 1769
48.5 32.3 1769
32.1 118.8 1769
56.8 53.2 1769
32.1 118.8 1769
32.1 118.8 1769
49.6 34.5 1769
45.9 -119.7 1769
28.6 115.9 1769
25.0 102.7 1769
23.5 121.0 1769
34.9 135.2 1769
22.3 114.2 1769
41.0 75.0 1769
45.3 -73.9 1769
37.5 126.7 1769
55.0 73.4 1769
53.2 45.0 1769
45.3 -73.9 1769
45.5 -73.6 1770
-34.7 -58.4 1770
-40.6 -73.1 1770
-22.8 -43.2 1770
55.2 61.4 1770
23.5 121.0 1770
37.5 -122.4 1770
45.3 -73.9 1770
45.5 -73.6 1770
57.0 24.1 1770
50.7 3.2 1770
55.4 37.5 1770
23.5 121.0 1770
49.6 34.5 1770
23.3 116.3 1770
56.8 53.2 1770
50.6 36.6 1770
25.0 121.3 1770
50.1 45.4 1770
24.1 120.7 1770
39.0 -77.4 1770
48.9 2.3 1770
55.2 61.4 1770
56.9 60.6 1770
45.3 -73.9 1770
24.1 120.7 1770
36.7 34.6 1770
48.5 35.0 1770
50.0 36.3 1770
58.0 56.3 1770
45.5 -73.6 1771
45.5 -73.6 1771
23.5 121.0 1771
45.5 -73.6 1771
48.9 2.3 1771
24.1 120.7 1771
30.3 120.2 1771
17.4 78.5 1771
53.0 28.0 1771
55.2 61.4 1771
54.2 45.2 1771
55.3 61.4 1771
36.7 117.0 1771
50.4 36.9 1771
53.1 36.2 1771
30.3 120.2 1771
55.2 61.4 1771
45.3 -73.9 1771
48.5 32.3 1771
55.2 61.4 1771
55.0 82.9 1771
55.0 59.0 1771
45.5 -73.6 1771
40.5 -74.2 1771
47.2 39.7 1771
41.0 64.0 1772
50.4 83.5 1772
30.3 120.2 1772
23.5 121.0 1772
49.6 34.5 1772
31.0 121.4 1772
55.2 61.4 1772
55.2 61.4 1772
56.9 53.2 1772
35.7 51.4 1772
55.7 37.6 1772
50.0 36.3 1772
40.5 -74.2 1772
56.3 44.0 1772
55.0 50.1 1772
55.6 40.7 1772
55.2 61.4 1772
17.4 78.5 1772
41.0 29.0 1773
55.2 61.4 1773
37.5 127.0 1773
55.2 61.4 1773
33.7 -84.4 1773
25.0 121.5 1773
30.7 104.1 1773
50.4 30.5 1773
22.5 114.1 1773
43.1 12.1 1773
23.1 113.3 1773
23.5 121.0 1773
30.3 120.2 1773
53.1 36.2 1773
39.1 117.2 1773
48.5 32.3 1773
37.5 -122.4 1773
40.5 -74.2 1773
55.3 61.4 1773
51.7 55.4 1773
55.2 61.4 1773
40.5 -74.2 1773
17.4 78.5 1773
37.8 -97.8 1773
54.2 45.2 1774
36.6 128.7 1774
36.6 128.7 1774
48.9 2.3 1774
25.0 121.5 1774
48.9 2.3 1774
36.6 128.7 1774
51.5 -0.1 1774
48.5 35.0 1774
55.2 59.7 1774
45.5 -73.6 1774
48.9 2.3 1774
30.3 120.2 1774
55.1 61.6 1774
23.1 113.3 1774
45.5 -73.6 1774
41.8 -87.7 1774
32.9 -117.1 1774
23.5 121.0 1774
34.1 -118.3 1774
45.8 11.8 1774
13.0 77.6 1774
55.8 49.1 1774
-22.9 -43.1 1774
45.5 -73.6 1775
55.7 37.6 1775
52.4 4.9 1775
34.8 113.7 1775
30.3 120.2 1775
10.3 123.9 1775
55.2 61.4 1775
55.8 49.2 1775
54.6 39.7 1775
46.3 48.0 1775
23.1 113.3 1775
23.1 113.3 1775
29.9 121.5 1775
45.3 -73.9 1775
55.2 61.4 1775
45.5 -73.6 1775
23.5 121.0 1775
55.0 50.1 1775
23.1 113.3 1776
32.1 118.8 1776
57.0 24.1 1776
31.0 121.4 1776
45.3 -73.9 1776
48.5 32.3 1776
48.5 32.3 1776
19.4 -99.1 1776
55.8 49.2 1776
53.9 27.6 1776
55.0 60.4 1776
43.1 141.3 1776
25.0 121.5 1776
17.4 78.5 1776
22.6 120.4 1776
55.2 61.4 1776
23.1 113.3 1776
48.3 38.1 1776
36.6 128.7 1776
55.7 37.6 1776
34.0 -117.9 1776
55.2 61.4 1776
25.8 -80.2 1776
51.7 36.2 1776
55.2 61.4 1776
32.1 118.8 1776
25.0 121.5 1776
48.9 2.3 1776
48.5 32.3 1776
23.5 121.0 1776
31.0 121.4 1776
30.3 120.2 1777
45.5 -73.6 1777
55.7 37.6 1777
17.2 78.4 1777
22.3 114.2 1777
56.9 53.2 1777
49.4 32.1 1777
48.9 2.3 1777
36.6 128.7 1777
50.4 30.5 1777
22.5 114.0 1777
55.2 61.4 1777
54.8 32.0 1777
55.8 38.0 1777
48.9 2.3 1777
41.4 -75.7 1777
56.3 44.0 1777
56.9 53.2 1777
48.3 38.1 1777
57.8 40.9 1777
14.6 121.0 1777
45.5 -73.6 1777
56.8 53.2 1777
55.2 59.7 1777
22.6 120.4 1777
55.2 61.4 1777
34.8 113.7 1777
53.7 91.4 1777
52.2 21.0 1777
32.1 118.8 1778
2.5 112.5 1778
36.6 128.7 1778
23.0 90.9 1778
55.0 60.1 1778
50.6 3.1 1778
48.5 35.0 1778
46.0 25.0 1778
20.2 85.8 1778
23.0 120.2 1778
56.8 53.2 1778
45.5 -73.6 1778
55.2 61.4 1778
22.3 114.2 1778
55.2 59.7 1778
23.1 113.3 1778
48.9 2.3 1778
48.9 2.3 1778
54.8 56.0 1778
26.6 106.7 1778
23.5 121.0 1778
45.0 34.1 1778
55.3 61.4 1779
32.1 118.8 1779
57.0 24.1 1779
24.1 120.7 1779
55.8 49.2 1779
52.3 104.3 1779
50.4 30.5 1779
55.2 61.4 1779
40.5 -74.2 1779
47.9 35.3 1779
48.5 35.0 1779
45.5 -73.6 1779
40.5 -74.2 1779
52.3 21.0 1779
55.0 60.1 1780
45.5 -73.6 1780
30.7 104.1 1780
-13.0 -38.5 1780
32.1 118.8 1780
55.0 60.1 1780
30.6 114.3 1780
51.2 58.3 1780
36.6 128.7 1780
9.3 122.9 1780
48.5 35.0 1780
48.0 37.8 1780
51.7 39.2 1780
25.0 121.5 1780
51.7 55.4 1780
40.5 -74.2 1780
36.6 128.7 1780
50.5 30.5 1780
39.1 -94.6 1780
51.2 58.3 1780
13.0 77.6 1780
34.8 113.7 1780
51.3 9.5 1781
55.2 61.4 1781
55.2 61.4 1781
45.3 -73.9 1781
34.8 113.7 1781
55.2 61.4 1781
53.0 36.1 1781
23.1 113.3 1781
41.8 -87.7 1781
23.5 121.0 1781
48.5 32.3 1781
33.9 118.3 1781
53.5 49.3 1781
62.0 129.7 1781
45.5 -73.6 1781
55.2 61.4 1781
51.3 9.5 1781
55.2 61.4 1781
23.1 113.3 1781
55.3 61.4 1781
53.2 -4.1 1781
55.7 37.6 1781
25.0 121.5 1781
57.0 86.1 1781
56.9 53.2 1781
36.6 128.7 1781
30.3 120.2 1781
45.3 -73.9 1781
50.1 8.6 1781
43.2 23.6 1781
45.3 -73.9 1782
55.2 59.7 1782
47.5 42.2 1782
25.0 102.7 1782
48.9 2.3 1782
45.8 126.7 1782
50.6 36.6 1782
48.9 2.3 1782
33.4 -112.0 1782
45.5 -73.6 1782
23.5 121.0 1782
45.5 -73.6 1782
56.9 60.6 1782
55.2 61.4 1782
48.5 32.3 1782
45.5 -73.6 1783
56.9 53.2 1783
-40.6 -73.1 1783
23.0 120.2 1783
37.3 -121.9 1783
48.3 25.9 1783
51.7 36.2 1783
45.5 -73.6 1783
28.5 77.0 1783
50.1 14.4 1783
25.0 121.5 1783
32.1 118.8 1783
55.8 49.2 1783
32.1 118.8 1783
50.6 36.6 1783
56.9 60.6 1783
46.1 -73.9 1783
30.3 120.2 1783
24.1 120.7 1783
47.5 40.8 1783
24.1 120.5 1783
-22.9 -43.2 1783
29.5 -98.4 1783
55.2 61.4 1783
55.2 59.7 1783
55.2 61.4 1783
49.6 34.5 1783
34.4 -118.5 1783
51.5 46.0 1783
48.0 37.9 1783
36.2 -86.6 1783
54.3 48.4 1783
55.2 61.4 1783
55.2 61.4 1783
48.9 2.3 1783
49.1 33.4 1783
48.9 2.3 1783
51.2 58.6 1783
-37.1 -73.2 1784
50.4 30.5 1784
-22.4 -47.5 1784
43.8 87.6 1784
25.0 121.5 1784
39.9 116.4 1784
60.9 76.6 1784
22.3 114.2 1784
22.9 120.3 1784
53.9 27.6 1784
45.5 -73.6 1784
42.3 -71.1 1784
39.1 117.2 1784
37.5 127.0 1784
22.5 114.1 1784
23.1 113.3 1784
30.8 120.8 1784
55.2 61.4 1784
52.8 52.3 1784
45.5 -73.6 1784
23.5 121.0 1784
55.2 61.4 1784
24.9 118.6 1784
49.4 32.1 1784
30.3 120.2 1784
45.5 -73.6 1785
45.5 -73.6 1785
36.9 30.7 1785
30.3 120.2 1785
45.5 -73.6 1785
36.7 117.0 1785
49.4 32.1 1785
58.6 49.7 1785
48.9 2.3 1785
23.0 72.6 1785
25.0 121.5 1785
48.9 2.3 1785
25.0 121.5 1785
45.5 -73.6 1785
39.1 117.2 1785
55.2 59.7 1785
45.8 16.0 1785
56.9 53.2 1785
55.0 82.9 1785
51.7 55.4 1785
56.1 40.4 1785
55.3 61.4 1785
47.0 142.7 1785
48.9 2.4 1785
56.4 37.5 1786
30.3 120.2 1786
43.1 12.1 1786
-36.8 -73.0 1786
29.7 -95.4 1786
50.9 3.3 1786
55.7 37.6 1786
48.9 2.3 1786
25.0 121.5 1786
60.9 76.6 1786
36.7 117.0 1786
50.6 36.6 1786
55.3 61.4 1786
55.2 61.4 1786
33.8 -117.8 1786
48.9 2.3 1786
46.0 25.0 1786
23.5 121.0 1786
56.4 41.3 1786
20.0 110.3 1786
23.5 121.0 1786
30.3 120.2 1787
55.2 61.4 1787
51.7 36.2 1787
57.0 54.0 1787
23.0 120.2 1787
23.5 121.0 1787
25.0 102.7 1787
23.5 121.0 1787
43.3 76.9 1787
48.5 32.3 1787
49.6 34.5 1787
55.8 49.2 1787
55.7 37.6 1787
40.0 45.0 1787
39.1 -94.6 1787
34.8 113.7 1787
39.9 116.4 1787
55.7 37.6 1787
56.0 92.9 1787
50.6 36.6 1787
51.7 55.4 1787
55.3 86.1 1787
40.5 47.5 1787
30.3 120.2 1787
45.5 -73.6 1788
24.0 54.0 1788
23.5 121.0 1788
30.3 120.2 1788
55.1 59.5 1788
51.3 9.5 1788
37.5 -122.4 1788
34.0 -117.9 1788
55.2 59.7 1788
25.0 121.5 1788
30.6 114.3 1788
30.3 120.2 1788
59.3 18.1 1788
49.4 32.1 1788
30.3 120.2 1788
48.0 68.0 1788
45.5 -73.6 1788
34.3 108.9 1788
39.1 117.2 1788
49.4 32.1 1788
37.5 -122.4 1788
43.9 125.3 1788
47.2 39.7 1788
17.4 78.5 1788
24.9 118.6 1788
51.7 55.4 1788
17.4 78.5 1789
24.1 120.7 1789
45.5 -73.6 1789
51.5 -0.1 1789
39.9 116.4 1789
46.1 -73.9 1789
25.0 102.7 1789
48.5 35.0 1789
23.1 113.3 1789
50.6 36.6 1789
50.6 36.6 1789
48.0 37.8 1789
-25.4 -49.3 1789
40.7 -74.2 1789
-25.4 -49.3 1789
55.2 61.4 1789
45.5 -73.6 1789
23.5 121.0 1789
56.9 53.2 1789
57.8 40.9 1789
48.5 32.3 1789
55.2 61.4 1789
47.9 35.3 1789
51.2 58.3 1789
51.3 58.2 1789
53.2 63.6 1790
45.5 -73.6 1790
48.9 2.3 1790
25.0 121.5 1790
45.5 -73.6 1790
22.3 114.2 1790
49.4 32.1 1790
51.5 46.0 1790
45.3 -73.9 1790
45.5 -73.6 1790
55.7 37.6 1790
55.7 37.6 1790
50.4 30.5 1790
40.0 45.0 1790
22.3 113.6 1790
45.5 -73.6 1790
57.8 40.9 1790
37.5 127.0 1791
55.2 61.4 1791
23.5 121.0 1791
12.2 -86.3 1791
55.2 34.3 1791
23.1 113.3 1791
31.8 120.0 1791
46.3 48.0 1791
45.5 -73.6 1791
26.1 119.3 1791
23.5 121.0 1791
55.2 61.4 1791
55.2 61.4 1791
23.1 113.3 1791
38.7 -9.1 1791
37.5 -122.4 1791
37.3 -121.9 1791
51.5 46.0 1791
23.1 113.3 1791
41.0 29.0 1791
28.2 113.1 1791
13.0 77.6 1791
23.1 113.3 1791
39.9 116.4 1792
28.2 113.1 1792
53.2 50.1 1792
28.7 77.2 1792
48.9 2.3 1792
53.1 49.9 1792
55.7 37.6 1792
23.1 113.3 1792
43.1 131.9 1792
56.8 53.2 1792
23.1 113.3 1792
23.1 113.3 1792
55.2 124.7 1792
55.7 37.6 1792
39.9 116.4 1792
55.7 37.6 1792
51.7 55.4 1792
51.7 36.2 1792
51.7 36.2 1793
-22.8 -43.2 1793
-26.2 28.2 1793
25.0 121.5 1793
51.7 39.2 1793
55.3 61.4 1793
55.2 61.4 1793
43.1 12.1 1793
30.3 120.2 1793
49.8 30.1 1793
24.8 121.0 1793
4.6 -74.1 1793
30.7 104.1 1793
44.6 33.5 1793
43.1 12.1 1793
50.3 127.5 1793
23.5 121.0 1793
59.4 28.6 1793
45.5 -73.6 1793
39.9 116.4 1793
55.6 109.3 1793
52.3 21.0 1793
40.2 44.5 1793
48.9 38.4 1793
45.8 126.7 1793
50.0 36.3 1793
55.7 37.6 1794
48.5 32.3 1794
45.5 -73.6 1794
30.3 120.2 1794
37.3 13.7 1794
52.1 5.0 1794
23.7 90.4 1794
55.2 61.4 1794
48.9 2.3 1794
29.9 121.5 1794
48.4 10.0 1794
46.3 48.0 1794
55.2 61.4 1794
50.5 30.5 1794
30.3 120.2 1794
46.7 32.6 1794
22.6 88.4 1794
45.5 -73.6 1794
55.3 61.4 1794
40.4 49.9 1794
36.1 103.8 1794
40.5 -74.2 1794
33.7 -84.4 1794
42.9 -73.4 1794
51.3 9.5 1794
47.2 39.7 1794
28.4 -80.8 1794
24.1 120.7 1794
25.0 121.5 1795
30.3 120.2 1795
55.9 26.5 1795
37.5 -122.4 1795
30.6 114.3 1795
37.5 127.0 1795
51.5 31.3 1795
34.7 113.5 1795
32.8 -117.1 1795
32.1 118.8 1795
55.2 61.4 1795
55.3 61.4 1795
52.2 20.8 1795
23.5 121.0 1796
45.5 -73.6 1796
37.3 -121.9 1796
13.1 80.3 1796
51.8 55.1 1796
30.3 120.2 1796
30.3 120.2 1796
55.5 47.5 1796
55.3 61.4 1796
23.5 121.0 1796
24.1 120.7 1796
55.9 37.8 1796
53.9 86.7 1796
55.8 37.6 1796
55.2 61.4 1796
34.7 113.5 1796
17.4 78.5 1796
28.6 115.9 1797
25.3 51.5 1797
52.4 4.9 1797
25.0 102.7 1797
19.4 -99.0 1797
32.1 118.8 1797
23.1 113.3 1797
55.2 61.4 1797
45.3 -73.9 1797
52.8 52.3 1797
39.9 115.3 1797
23.1 113.3 1797
37.5 127.0 1798
30.3 120.2 1798
47.5 19.1 1798
56.1 47.3 1798
51.7 55.4 1798
48.9 2.3 1798
49.4 32.1 1798
55.7 37.6 1798
45.1 7.7 1798
24.8 121.0 1798
55.0 73.4 1798
23.5 121.0 1798
51.2 58.3 1798
55.3 52.1 1798
35.5 -81.0 1798
48.9 2.3 1799
39.9 116.4 1799
53.4 83.8 1799
55.2 61.4 1799
36.6 101.8 1799
48.9 2.3 1799
25.0 121.5 1799
39.9 32.8 1799
31.9 117.3 1799
39.9 116.4 1799
24.1 120.7 1799
19.4 -99.1 1799
35.6 139.8 1799
23.5 121.0 1799
55.2 61.4 1799
48.8 37.6 1799
58.7 50.2 1799
56.9 60.6 1800
45.5 -73.6 1800
55.2 61.4 1800
25.0 121.5 1800
45.5 -73.6 1800
45.5 -73.6 1800
25.0 121.5 1800
36.7 117.0 1800
45.5 -73.6 1800
48.9 2.3 1800
39.9 116.4 1800
23.5 121.0 1800
22.3 114.2 1800
51.5 46.0 1800
23.5 121.0 1800
41.0 75.0 1800
10.8 106.6 1800
56.5 85.0 1800
23.1 113.3 1800
22.3 114.2 1801
50.6 26.2 1801
45.5 -73.6 1801
25.0 121.5 1801
45.8 11.7 1801
40.4 -3.7 1801
50.4 30.5 1801
41.0 29.0 1801
50.9 4.4 1801
51.9 33.5 1801
50.6 36.6 1801
22.6 88.4 1801
45.5 -73.6 1801
32.1 118.8 1801
37.5 127.0 1801
54.2 37.6 1801
55.7 37.6 1801
55.2 61.4 1801
51.3 58.2 1801
55.2 61.4 1802
48.2 17.1 1802
49.8 24.0 1802
55.3 38.7 1802
54.2 37.6 1802
23.1 113.3 1802
18.5 73.9 1802
53.9 27.6 1802
53.2 50.1 1802
55.5 65.3 1802
54.2 45.2 1802
53.9 27.6 1802
54.2 45.2 1802
23.1 113.3 1802
48.5 35.0 1802
58.6 49.7 1802
45.5 -73.6 1802
56.9 53.2 1802
30.3 120.2 1802
55.2 59.7 1802
30.3 120.2 1802
54.9 61.4 1802
19.4 -98.9 1803
22.6 88.4 1803
23.5 121.0 1803
39.9 116.4 1803
23.5 121.0 1803
50.4 30.5 1803
55.7 37.6 1803
25.0 102.7 1803
60.9 76.6 1803
39.9 116.4 1803
55.7 37.6 1803
37.3 -121.9 1803
55.2 61.4 1803
55.7 37.6 1803
50.0 36.3 1803
37.3 -121.9 1803
23.1 113.3 1803
50.9 128.5 1803
61.3 73.4 1803
23.1 113.3 1803
25.0 121.5 1803
41.8 123.4 1803
56.1 47.3 1803
45.5 -73.6 1803
37.5 127.0 1803
24.5 118.1 1803
48.5 32.3 1804
47.5 19.1 1804
58.6 49.7 1804
40.5 -74.2 1804
47.0 28.9 1804
45.5 -73.6 1804
30.3 120.2 1804
53.5 49.3 1804
22.6 120.4 1804
25.0 121.5 1804
19.6 -98.9 1804
55.2 61.4 1804
48.5 35.0 1804
37.7 112.5 1804
55.2 61.4 1804
55.2 61.4 1804
43.1 -73.8 1804
22.3 114.2 1804
56.6 47.9 1804
30.3 120.2 1804
50.3 83.5 1804
51.8 55.1 1804
28.6 115.9 1804
45.3 -73.9 1804
51.7 55.4 1804
56.1 47.3 1804
-18.6 -46.5 1804
51.7 36.2 1805
30.3 120.2 1805
45.5 -73.6 1805
54.9 43.3 1805
43.8 87.6 1805
41.0 75.0 1805
45.5 -73.6 1805
55.8 49.2 1805
45.5 -73.6 1805
35.6 139.8 1805
34.7 113.5 1805
49.3 -123.1 1805
23.1 113.3 1805
30.0 31.2 1805
36.7 117.0 1805
58.6 49.7 1805
55.2 76.0 1805
50.0 36.3 1805
23.5 121.0 1805
45.5 -73.6 1805
52.8 52.3 1805
55.2 61.4 1805
55.2 61.4 1805
23.5 121.0 1806
45.5 -73.6 1806
50.0 36.3 1806
54.3 48.4 1806
37.5 -122.4 1806
60.2 24.7 1806
10.0 8.0 1806
54.6 22.2 1806
47.0 28.9 1806
55.2 61.4 1806
34.8 113.7 1806
30.1 31.3 1806
45.5 -73.6 1806
38.4 27.1 1806
57.8 40.9 1806
45.5 -73.6 1807
35.6 140.1 1807
50.0 36.3 1807
30.3 120.2 1807
23.5 121.0 1807
22.5 114.1 1807
34.3 108.9 1807
25.1 121.7 1807
56.8 53.2 1807
45.8 16.0 1807
9.8 -63.2 1807
25.0 121.5 1807
7.0 124.9 1807
-12.3 -66.2 1807
45.3 -73.9 1807
40.5 -74.2 1807
50.4 30.5 1807
55.0 82.9 1807
37.3 -121.9 1808
25.0 121.5 1808
23.5 87.3 1808
42.3 69.6 1808
49.4 32.1 1808
19.4 -99.1 1808
60.9 76.6 1808
34.7 113.5 1808
49.4 32.1 1808
50.0 36.3 1808
49.6 34.5 1808
30.6 114.3 1808
-25.4 -49.3 1808
49.4 32.1 1808
55.3 61.4 1808
45.5 -73.6 1808
51.5 46.1 1808
48.9 2.3 1808
48.8 37.6 1808
55.2 61.4 1808
48.8 37.6 1808
45.3 -73.9 1808
48.9 2.3 1809
40.8 -75.9 1809
34.8 113.7 1809
30.7 104.1 1809
49.6 34.5 1809
30.3 120.2 1809
49.6 34.5 1809
55.2 61.4 1809
45.5 -73.6 1809
56.4 52.3 1809
30.3 120.2 1809
13.0 77.6 1809
17.4 78.5 1809
30.3 120.2 1809
33.7 -84.4 1809
23.1 113.3 1809
25.0 121.5 1809
53.2 50.1 1809
56.8 60.5 1809
45.2 39.7 1809
57.8 40.9 1809
45.3 -73.9 1810
30.3 120.2 1810
23.5 121.0 1810
55.2 61.4 1810
23.5 121.0 1810
50.4 30.5 1810
21.5 -104.9 1810
48.9 2.3 1810
39.9 116.4 1810
49.3 -123.1 1810
55.3 38.7 1810
45.5 -73.6 1810
50.5 30.5 1810
31.0 121.4 1811
31.0 121.4 1811
8.5 77.0 1811
39.9 116.4 1811
55.8 49.1 1811
50.4 30.5 1811
50.4 30.5 1811
47.5 19.1 1811
30.8 120.8 1811
48.9 2.4 1811
48.0 37.8 1811
48.7 44.5 1811
40.5 -74.2 1811
45.7 28.4 1811
22.5 114.1 1811
48.9 2.3 1811
56.1 40.4 1811
28.6 115.9 1812
54.3 48.4 1812
34.0 -117.9 1812
28.7 77.2 1812
52.3 104.3 1812
30.6 114.3 1812
20.0 110.3 1812
55.2 61.4 1812
30.3 120.2 1812
55.7 37.6 1812
49.6 34.5 1812
56.9 35.9 1812
53.4 83.8 1812
50.9 4.4 1812
45.5 -73.6 1812
32.1 118.8 1813
45.3 -73.9 1813
57.0 24.1 1813
55.7 37.6 1813
48.9 2.3 1813
56.9 53.2 1813
37.5 127.0 1813
44.5 34.2 1813
48.8 37.6 1813
48.5 32.3 1813
55.2 61.4 1813
17.4 78.5 1813
34.3 108.9 1813
23.1 113.3 1813
55.2 61.4 1813
55.7 37.6 1813
23.0 120.2 1813
51.3 9.5 1814
30.3 120.2 1814
23.5 121.0 1814
39.9 116.4 1814
36.7 117.0 1814
23.1 113.3 1814
20.0 77.0 1814
-22.8 -43.2 1814
48.9 2.3 1814
13.7 100.5 1814
25.0 121.5 1814
56.9 53.2 1814
55.4 43.8 1814
51.8 55.1 1814
55.3 52.1 1814
30.3 120.2 1814
23.5 121.0 1814
30.3 120.2 1814
22.3 114.2 1814
28.6 115.9 1815
44.2 42.1 1815
30.3 120.2 1815
55.2 61.4 1815
30.3 120.2 1815
10.6 -71.6 1815
47.0 32.0 1815
22.5 114.1 1815
55.0 60.1 1815
45.0 39.0 1815
41.8 123.4 1815
46.3 48.0 1815
53.9 27.6 1815
55.2 61.4 1815
55.8 37.6 1815
48.3 38.1 1815
55.2 61.4 1815
45.3 -73.9 1815
34.1 -118.3 1815
45.3 -73.9 1815
48.7 44.5 1815
33.7 -84.4 1815
53.7 91.7 1815
42.0 43.5 1815
55.2 61.4 1816
45.5 -73.6 1816
45.5 -73.6 1816
45.8 126.7 1816
55.2 61.4 1816
47.9 35.3 1816
23.5 121.0 1816
55.2 61.4 1816
45.5 -73.6 1816
51.7 39.2 1816
43.8 -79.2 1816
4.6 -74.1 1816
45.5 -73.6 1816
53.0 36.1 1816
25.0 121.5 1816
23.5 121.0 1816
55.2 61.4 1816
55.3 86.1 1816
55.8 49.1 1816
55.0 60.1 1816
54.8 38.9 1817
53.5 49.3 1817
34.3 108.9 1817
41.8 123.4 1817
52.5 103.9 1817
55.8 37.6 1817
55.2 61.4 1817
22.3 114.2 1817
32.1 118.8 1817
30.6 114.3 1817
31.9 117.3 1817
45.5 -73.6 1817
44.7 37.8 1817
37.8 -97.8 1817
55.2 61.4 1817
64.6 39.8 1817
45.5 -73.6 1817
43.8 87.6 1817
45.5 -73.6 1817
55.2 61.4 1818
48.5 32.3 1818
48.5 32.3 1818
39.9 116.4 1818
51.5 -0.1 1818
55.2 61.4 1818
-22.0 -47.9 1818
55.2 61.4 1818
39.9 116.4 1818
55.3 61.4 1818
55.8 37.6 1818
55.2 61.4 1818
17.4 78.5 1818
45.5 -73.6 1818
51.7 55.4 1818
55.3 61.4 1818
45.3 -73.9 1818
39.9 116.4 1819
53.0 36.1 1819
47.0 28.9 1819
22.3 114.2 1819
48.9 2.3 1819
51.8 55.1 1819
23.0 120.2 1819
50.5 30.5 1819
23.5 121.0 1819
53.9 27.6 1819
55.2 61.4 1819
48.9 2.3 1819
34.1 -118.3 1819
56.3 44.0 1819
48.5 32.3 1819
17.4 78.5 1820
59.6 56.8 1820
45.5 -73.6 1820
30.3 120.2 1820
50.4 30.5 1820
55.2 61.4 1820
48.5 35.0 1820
59.9 30.3 1820
50.4 30.5 1820
55.2 61.4 1820
23.5 121.0 1820
25.0 121.5 1820
45.5 -73.6 1820
55.0 50.1 1820
30.9 120.1 1820
45.5 -73.6 1821
4.6 -74.1 1821
56.8 53.2 1821
51.7 55.4 1821
56.0 43.1 1821
55.2 61.4 1821
55.2 61.4 1821
38.7 -77.1 1821
39.9 116.4 1821
45.5 -73.6 1821
43.0 44.7 1821
37.5 127.0 1821
22.3 114.2 1821
48.9 2.3 1821
37.5 127.0 1821
55.7 38.0 1821
45.3 -73.9 1822
25.0 121.5 1822
56.9 53.2 1822
48.0 68.0 1822
45.5 -73.6 1822
23.5 121.0 1822
23.5 121.0 1822
23.1 113.3 1822
23.1 113.3 1822
54.9 43.3 1822
55.7 37.6 1822
45.5 -73.6 1822
56.8 53.2 1822
55.3 61.4 1822
24.8 121.0 1822
50.6 36.6 1822
53.4 83.8 1822
50.6 36.6 1822
51.3 37.8 1822
32.1 118.8 1823
55.7 37.6 1823
25.0 121.5 1823
22.8 108.3 1823
30.3 120.2 1823
50.4 30.5 1823
30.3 120.2 1823
53.9 27.6 1823
23.7 90.4 1823
51.9 36.3 1823
47.5 35.6 1823
48.3 38.1 1823
45.5 -73.6 1823
56.9 53.2 1823
55.0 60.1 1823
47.6 -122.3 1823
23.5 121.0 1823
22.8 108.3 1823
55.2 61.4 1823
53.2 50.1 1824
-6.2 107.0 1824
30.3 120.2 1824
13.8 100.5 1824
46.1 -73.9 1824
45.5 -73.6 1824
4.6 -74.1 1824
40.4 -3.7 1824
55.3 61.4 1824
25.0 121.5 1824
48.7 28.8 1824
43.3 76.9 1824
48.8 37.6 1824
30.3 120.2 1825
50.5 30.5 1825
41.8 123.4 1825
23.1 113.3 1825
-34.1 150.8 1825
33.7 -84.4 1825
45.5 -73.6 1825
37.5 127.0 1825
32.1 118.8 1825
25.0 121.5 1825
48.9 2.3 1825
48.9 2.3 1825
57.1 65.8 1825
48.9 2.3 1825
50.0 36.3 1826
35.1 136.0 1826
30.3 120.2 1826
48.3 38.1 1826
56.1 40.4 1826
55.2 61.4 1826
49.1 33.4 1826
55.1 37.5 1826
50.3 28.7 1826
23.5 121.0 1826
51.7 55.4 1826
56.2 47.3 1826
30.3 120.2 1826
29.6 77.3 1826
55.9 37.7 1826
7.0 124.9 1826
31.0 121.4 1826
55.2 61.4 1826
56.9 60.6 1826
50.6 36.6 1826
3.4 -76.5 1826
57.3 60.1 1826
23.5 121.0 1827
25.0 102.7 1827
45.5 -73.6 1827
48.9 2.3 1827
51.7 36.2 1827
25.0 121.5 1827
55.2 61.4 1827
45.3 -73.9 1827
22.5 114.1 1827
44.8 33.9 1827
44.8 10.9 1827
50.5 30.5 1827
48.5 32.3 1827
46.8 29.5 1827
24.5 118.1 1827
24.5 118.1 1827
-34.6 -58.4 1827
48.9 2.3 1828
22.6 88.4 1828
56.1 43.5 1828
42.3 -83.1 1828
39.9 116.4 1828
48.9 2.3 1828
33.7 73.1 1828
45.5 -73.6 1828
53.1 23.2 1828
22.8 108.3 1828
37.5 -122.4 1828
52.3 21.0 1828
55.8 49.2 1828
55.2 61.4 1828
51.2 58.3 1828
25.0 121.5 1829
30.3 120.2 1829
-22.8 -47.6 1829
49.8 73.1 1829
31.0 121.4 1829
55.2 59.7 1829
55.8 49.2 1829
36.7 117.0 1829
32.1 118.8 1829
47.0 28.8 1829
45.0 39.0 1829
24.1 120.7 1829
48.9 2.3 1829
51.5 46.0 1829
52.3 21.0 1829
57.8 48.9 1829
34.8 113.7 1830
48.0 68.0 1830
51.3 37.8 1830
55.2 61.4 1830
45.5 -73.6 1830
48.9 2.3 1830
23.1 113.3 1830
35.6 139.8 1830
23.5 121.0 1830
53.4 83.8 1830
51.5 46.0 1830
55.2 61.4 1830
35.6 139.7 1830
29.9 121.5 1830
25.0 121.3 1830
55.2 61.4 1830
48.5 32.3 1831
55.0 59.0 1831
46.3 48.0 1831
23.5 121.0 1831
39.9 116.4 1831
48.9 2.3 1831
31.0 121.4 1831
50.9 34.8 1831
24.1 120.7 1831
60.9 76.6 1831
31.0 121.4 1831
43.9 125.3 1831
19.4 -99.1 1831
53.2 45.0 1831
56.9 59.9 1831
49.6 34.5 1831
55.2 59.7 1831
25.0 121.5 1831
53.1 36.2 1831
48.9 2.3 1831
23.1 113.3 1832
30.3 120.2 1832
48.5 32.3 1832
55.7 37.6 1832
37.0 35.3 1832
59.9 30.3 1832
30.3 120.2 1832
48.9 2.4 1832
-18.2 35.0 1832
57.0 24.1 1833
24.9 67.1 1833
25.0 121.3 1833
30.3 120.2 1833
30.1 31.3 1833
37.8 -97.8 1833
57.0 61.5 1833
55.7 37.6 1833
50.6 36.6 1833
45.3 -73.9 1833
30.3 120.2 1834
45.5 -73.6 1834
55.2 61.4 1834
53.2 50.1 1834
37.7 -121.9 1834
50.4 30.5 1834
58.6 49.7 1834
30.7 104.1 1834
23.1 113.3 1834
45.5 -73.6 1834
55.0 73.4 1834
55.2 61.4 1834
51.2 58.3 1834
39.9 116.4 1834
55.0 59.0 1835
45.5 -73.6 1835
58.0 56.3 1835
30.8 120.8 1835
52.7 41.4 1835
42.3 -83.5 1835
39.9 116.4 1835
28.2 113.1 1835
50.0 36.3 1835
25.0 102.7 1835
53.2 50.1 1835
56.8 53.2 1835
61.3 73.4 1835
23.1 113.3 1835
22.3 114.2 1835
45.5 -73.6 1835
22.9 120.3 1835
50.5 30.5 1835
39.9 116.4 1835
45.5 -73.6 1836
48.9 24.7 1836
31.0 121.4 1836
48.5 32.3 1836
54.3 48.4 1836
55.8 37.6 1836
40.3 -111.6 1836
39.9 116.4 1836
47.5 -52.8 1836
55.1 37.5 1836
56.8 53.2 1836
52.4 4.7 1836
-12.0 -77.0 1836
34.8 113.7 1836
17.4 78.5 1836
55.0 50.1 1836
14.6 121.0 1836
55.2 61.4 1837
56.9 53.2 1837
50.6 36.6 1837
56.2 44.2 1837
30.3 120.2 1837
55.2 61.4 1837
39.9 116.4 1837
54.6 21.8 1837
25.0 102.7 1837
23.5 121.0 1837
1.3 103.9 1837
38.7 -9.1 1837
-25.9 27.9 1837
49.4 32.1 1837
56.9 53.2 1837
30.3 120.2 1837
23.1 113.3 1837
30.3 120.2 1837
55.2 59.7 1837
53.9 10.7 1837
40.5 -74.2 1837
48.9 2.3 1837
56.9 35.9 1837
30.3 120.2 1838
51.7 36.2 1838
48.5 32.3 1838
55.2 61.4 1838
33.1 -96.6 1838
56.9 60.6 1838
25.0 121.5 1838
48.5 35.0 1838
-0.2 -78.5 1838
48.5 35.0 1838
55.0 73.4 1838
24.1 120.7 1838
47.2 39.7 1838
43.2 -2.9 1838
45.3 -73.9 1838
55.3 61.4 1838
45.5 -73.6 1839
55.2 61.4 1839
45.3 -73.9 1839
16.3 102.6 1839
48.5 32.3 1839
23.5 121.0 1839
48.9 2.3 1839
45.5 -73.6 1839
35.5 139.7 1839
30.1 31.3 1839
55.3 61.4 1839
55.8 49.2 1839
30.3 120.2 1839
45.5 -73.6 1839
25.0 121.5 1839
45.5 -73.6 1839
22.3 114.2 1839
14.6 121.0 1839
45.5 -73.6 1839
22.6 120.4 1839
30.3 120.2 1839
37.5 126.7 1839
47.0 28.8 1840
30.3 120.2 1840
48.5 35.0 1840
52.4 4.9 1840
54.8 61.3 1840
49.6 25.6 1840
48.5 35.0 1840
25.0 102.7 1840
23.1 120.2 1840
50.7 3.2 1840
31.0 121.4 1840
25.0 121.5 1840
45.5 -73.6 1840
23.1 113.3 1840
56.1 47.5 1840
45.3 -73.9 1840
51.2 58.3 1840
55.0 73.4 1840
44.6 132.8 1840
32.2 34.9 1840
48.8 37.6 1840
45.5 -73.6 1841
34.8 113.7 1841
45.5 -73.6 1841
56.9 60.6 1841
55.7 37.6 1841
23.1 113.3 1841
-26.2 28.1 1841
48.9 2.3 1841
54.2 45.2 1841
42.4 -71.1 1841
56.1 60.7 1841
55.2 61.4 1841
55.8 37.6 1841
37.5 127.0 1841
48.5 32.3 1841
51.7 55.4 1841
51.8 55.1 1841
51.5 -0.1 1841
30.7 104.1 1841
23.5 121.0 1841
30.3 120.2 1842
55.2 59.7 1842
41.0 64.0 1842
60.9 76.6 1842
48.9 2.3 1842
45.0 42.0 1842
53.5 49.3 1842
23.5 121.0 1842
10.5 -66.9 1842
47.6 -122.3 1842
60.2 24.9 1842
40.5 -74.2 1842
47.6 18.4 1842
51.7 55.4 1842
39.9 116.4 1842
55.3 61.4 1842
23.1 113.3 1842
28.6 115.9 1843
50.3 28.7 1843
45.5 -73.6 1843
35.6 139.8 1843
30.3 120.2 1843
-23.5 -46.6 1843
55.7 37.6 1843
21.0 105.9 1843
55.8 37.6 1843
23.5 121.0 1843
25.0 121.5 1843
48.5 35.0 1843
55.2 61.4 1843
30.3 120.2 1843
42.0 43.5 1843
48.6 39.3 1843
49.8 24.9 1843
30.0 31.2 1843
37.5 -122.4 1843
30.3 120.2 1843
29.1 119.6 1843
36.6 128.7 1843
30.3 120.2 1843
55.2 61.4 1843
25.0 121.5 1844
50.9 34.8 1844
50.5 30.5 1844
55.2 61.4 1844
43.1 12.1 1844
55.2 61.4 1844
45.3 -73.9 1844
55.7 37.6 1844
54.2 37.6 1844
32.1 34.8 1844
54.2 45.2 1844
-8.0 -34.9 1844
53.5 -2.1 1844
55.2 61.4 1844
40.5 47.5 1844
30.7 104.1 1844
55.7 37.6 1845
49.2 28.5 1845
30.3 120.2 1845
47.2 39.7 1845
49.6 34.5 1845
51.7 36.2 1845
22.5 114.1 1845
55.2 61.4 1845
50.4 30.5 1845
-27.6 -48.6 1845
22.3 114.2 1845
55.0 82.9 1845
48.0 37.8 1845
42.7 23.3 1845
55.7 37.6 1845
55.7 37.6 1845
45.5 -73.6 1845
45.5 -73.6 1845
45.5 -73.6 1845
50.0 36.3 1845
55.2 59.7 1846
45.5 -73.6 1846
-25.3 -57.6 1846
30.3 120.2 1846
31.0 121.4 1846
45.5 -73.6 1846
37.3 -121.9 1846
56.3 39.4 1846
48.0 37.9 1846
32.1 34.8 1846
55.2 61.4 1846
56.8 53.2 1846
50.6 36.6 1846
37.5 126.7 1846
44.5 39.7 1846
22.8 108.3 1846
48.5 32.3 1846
48.9 2.3 1846
58.5 50.0 1846
54.4 86.3 1846
48.5 35.0 1846
56.9 53.2 1847
25.0 121.3 1847
56.1 40.4 1847
43.3 76.9 1847
39.9 116.4 1847
14.4 121.3 1847
55.2 61.4 1847
45.5 -73.6 1847
45.5 -73.6 1847
1.3 103.9 1847
45.5 -73.6 1847
24.1 120.7 1847
25.0 121.5 1847
59.9 30.3 1847
25.0 121.5 1847
55.7 37.6 1847
49.9 28.6 1847
25.0 121.5 1847
33.7 -84.4 1847
34.0 -117.9 1847
23.0 120.2 1847
23.5 121.0 1847
39.9 116.4 1847
55.7 37.6 1847
23.0 120.2 1848
55.8 60.7 1848
41.0 29.0 1848
23.1 70.1 1848
30.7 104.1 1848
48.9 2.3 1848
55.2 61.4 1848
45.5 -73.6 1848
51.3 9.5 1848
51.3 9.5 1848
53.2 50.1 1848
45.5 -73.6 1848
23.1 113.3 1848
55.2 61.4 1848
40.5 -74.2 1848
34.8 113.7 1848
30.3 120.2 1849
37.8 -97.8 1849
50.1 14.4 1849
30.3 120.2 1849
51.7 -1.1 1849
44.0 131.6 1849
50.4 30.5 1849
37.5 127.0 1849
35.7 139.7 1849
56.8 53.2 1849
45.5 -73.6 1849
54.4 61.3 1849
53.0 36.1 1849
55.3 86.1 1849
25.0 118.5 1849
48.5 32.3 1850
37.5 -122.4 1850
23.5 121.0 1850
48.7 44.5 1850
55.5 65.3 1850
24.8 121.0 1850
45.5 -73.6 1850
52.8 52.3 1850
52.8 52.3 1850
43.1 12.1 1850
56.1 40.4 1850
55.2 61.4 1851
58.1 52.7 1851
34.8 113.7 1851
23.5 121.0 1851
30.3 120.2 1851
48.5 32.3 1851
30.3 120.2 1851
55.8 37.6 1851
55.7 37.6 1851
58.6 49.7 1851
32.1 118.8 1851
45.5 -73.6 1851
23.1 113.3 1851
23.1 113.3 1851
31.0 121.4 1851
35.6 139.7 1851
50.0 36.3 1851
56.1 47.3 1852
48.9 2.3 1852
48.3 38.1 1852
55.2 61.4 1852
28.6 115.9 1852
48.5 35.0 1852
58.6 49.7 1852
32.1 118.8 1852
55.7 37.6 1852
32.1 118.8 1852
-40.6 -73.1 1852
32.1 118.8 1852
50.5 30.5 1852
48.8 37.6 1852
56.1 47.3 1852
25.0 121.5 1852
46.3 48.0 1852
14.6 121.0 1852
51.5 -0.1 1853
28.6 115.9 1853
22.8 108.3 1853
45.5 -73.6 1853
48.5 32.3 1853
32.1 118.8 1853
22.3 114.3 1853
23.1 113.3 1853
41.7 123.2 1853
37.5 121.4 1853
55.2 61.4 1853
32.1 118.8 1853
51.3 58.2 1853
56.2 101.6 1853
55.2 61.4 1853
57.2 65.5 1853
56.3 44.0 1853
55.2 61.4 1853
58.5 31.3 1854
30.3 120.2 1854
30.3 120.2 1854
30.3 120.2 1854
34.3 108.9 1854
24.8 121.0 1854
50.9 4.4 1854
23.5 121.0 1854
55.0 73.4 1854
45.5 -73.6 1854
32.1 118.8 1854
33.7 -84.4 1854
45.5 -73.6 1854
54.6 52.8 1854
55.2 61.4 1854
40.8 -74.1 1854
37.8 128.9 1854
52.8 52.3 1854
23.5 121.0 1854
48.5 35.0 1855
22.6 88.4 1855
30.3 120.2 1855
23.5 121.0 1855
39.9 32.8 1855
19.0 72.8 1855
51.8 55.1 1855
51.7 36.2 1855
53.2 50.1 1855
51.5 46.0 1855
57.8 40.9 1855
56.9 53.2 1856
37.5 127.0 1856
41.7 -0.9 1856
23.5 121.0 1856
25.0 121.5 1856
25.0 102.7 1856
55.0 60.1 1856
45.5 -73.6 1856
45.3 -73.9 1856
34.8 113.7 1856
47.0 28.9 1856
55.2 61.4 1856
30.8 120.8 1856
51.7 39.2 1856
55.2 61.4 1856
48.8 37.6 1856
40.5 -74.2 1856
51.2 58.3 1856
23.5 121.0 1856
50.9 34.8 1856
53.0 36.1 1856
45.5 -73.6 1857
30.3 120.2 1857
45.0 42.0 1857
25.0 121.5 1857
23.1 113.3 1857
53.9 27.6 1857
55.2 61.4 1857
24.8 121.0 1857
23.0 120.2 1857
28.6 77.2 1857
55.3 61.4 1857
39.1 117.2 1857
-37.1 -73.2 1857
25.8 -80.2 1857
52.2 48.0 1857
55.2 61.4 1857
23.5 121.0 1857
54.6 52.8 1857
28.6 77.2 1858
55.2 61.4 1858
48.9 2.3 1858
49.4 32.1 1858
45.5 -73.6 1858
45.5 -73.6 1858
30.9 75.9 1858
16.5 80.6 1858
51.5 46.0 1858
50.5 30.5 1858
51.2 58.6 1858
41.7 123.2 1859
48.5 32.3 1859
48.5 35.0 1859
30.7 104.1 1859
32.1 118.8 1859
37.5 127.0 1859
25.7 -100.4 1859
61.3 73.4 1859
50.5 30.5 1859
25.0 121.5 1859
55.2 59.7 1859
32.1 118.8 1859
56.9 53.2 1859
45.5 -73.6 1859
33.7 -84.4 1859
37.5 -122.4 1859
55.2 61.4 1859
55.9 37.8 1859
10.2 -71.3 1859
48.7 2.1 1859
55.0 82.9 1859
48.2 16.4 1859
25.0 102.7 1859
55.2 61.4 1859
30.3 120.2 1860
23.5 121.0 1860
42.0 -88.0 1860
50.4 30.5 1860
48.5 35.0 1860
50.1 8.7 1860
56.4 37.5 1860
55.2 61.4 1860
23.1 113.3 1860
30.3 120.2 1861
48.3 38.1 1861
45.5 -73.6 1861
29.0 -111.7 1861
2.5 112.5 1861
55.0 60.1 1861
36.7 117.0 1861
56.9 53.2 1861
51.5 46.0 1861
55.0 82.9 1861
28.6 77.2 1861
35.6 139.7 1861
51.8 55.1 1861
48.9 38.5 1861
42.0 43.5 1861
45.5 -73.6 1861
23.5 121.0 1861
55.7 37.6 1861
48.5 32.3 1861
56.9 60.6 1862
46.3 48.0 1862
50.5 30.5 1862
25.0 121.5 1862
48.5 35.0 1862
56.1 47.5 1862
55.2 61.4 1862
51.7 55.4 1862
37.5 127.0 1862
34.1 -118.3 1862
56.1 47.3 1862
47.9 106.9 1862
30.3 120.2 1863
35.9 139.6 1863
37.5 127.0 1863
45.5 -73.6 1863
48.3 38.1 1863
50.9 34.8 1863
48.9 2.3 1863
23.5 121.0 1863
33.8 -117.8 1863
30.3 120.2 1863
35.2 115.4 1863
24.1 120.7 1863
31.9 117.3 1863
51.7 39.2 1863
29.9 121.5 1863
23.5 121.0 1863
23.5 121.0 1863
55.3 61.4 1864
55.8 37.6 1864
55.4 37.5 1864
51.0 31.9 1864
48.0 39.9 1864
55.2 61.4 1864
34.0 -118.3 1864
45.0 39.0 1864
50.7 3.2 1864
36.7 117.0 1864
25.0 121.5 1864
25.0 121.5 1864
55.2 61.4 1864
37.8 128.9 1864
35.7 51.4 1864
51.7 39.2 1864
52.2 20.8 1864
55.2 61.4 1864
55.2 61.4 1864
23.5 121.0 1864
34.1 -118.2 1864
28.6 115.9 1865
32.1 118.8 1865
45.5 -73.6 1865
43.1 12.1 1865
50.0 36.3 1865
23.5 121.0 1865
55.2 61.4 1865
56.9 53.2 1865
30.3 120.2 1865
45.5 -73.6 1865
51.5 46.0 1865
13.8 100.5 1865
30.3 120.2 1865
55.2 61.4 1866
30.3 120.2 1866
55.2 61.4 1866
42.0 -87.7 1866
56.9 60.6 1866
25.0 102.7 1866
45.5 -73.6 1866
55.2 61.4 1866
30.7 104.1 1866
52.7 41.4 1866
23.5 87.3 1866
37.5 127.0 1866
59.4 28.6 1866
55.7 37.6 1866
55.2 61.4 1866
55.3 86.1 1866
23.5 121.0 1866
51.7 55.4 1866
19.0 72.8 1867
41.9 -87.6 1867
25.6 -80.4 1867
23.7 90.4 1867
52.0 113.6 1867
12.9 74.8 1867
36.7 117.0 1867
23.5 121.0 1867
16.3 80.5 1867
40.5 -74.2 1867
51.7 55.4 1867
53.4 83.8 1867
55.0 50.1 1867
34.8 113.7 1867
55.0 60.1 1867
23.5 121.0 1867
30.6 114.3 1867
56.0 92.9 1867
32.1 118.8 1868
37.4 -122.1 1868
22.4 114.2 1868
37.3 -121.9 1868
23.5 121.0 1868
55.8 37.6 1868
30.3 120.2 1868
45.5 -73.6 1868
48.9 2.3 1868
55.2 61.4 1868
48.9 2.3 1868
53.4 83.9 1868
45.5 -73.6 1868
40.5 -74.2 1868
40.5 -74.2 1868
17.3 -88.7 1868
22.3 114.2 1869
50.4 30.5 1869
45.5 -73.6 1869
37.8 -97.8 1869
40.2 44.5 1869
56.1 47.3 1869
36.7 117.0 1869
55.2 61.4 1869
64.6 39.8 1869
54.2 45.2 1869
25.0 121.5 1869
55.2 61.4 1869
23.1 113.3 1869
30.3 120.2 1869
55.7 37.6 1869
17.4 78.5 1869
55.0 82.9 1869
51.8 55.1 1869
55.6 51.8 1869
50.5 30.5 1869
56.3 44.0 1869
55.0 73.4 1869
56.4 41.3 1870
23.5 121.0 1870
55.7 37.6 1870
45.3 -73.9 1870
37.2 127.2 1870
55.2 61.4 1870
23.5 121.0 1870
55.5 47.5 1870
55.2 61.4 1870
55.3 61.4 1870
52.7 41.4 1870
45.5 -73.6 1870
23.5 121.0 1870
48.0 37.8 1870
55.7 37.6 1870
42.9 74.6 1870
23.5 121.0 1870
56.9 53.2 1870
56.8 53.2 1870
42.4 -71.1 1870
51.7 55.4 1870
45.5 10.5 1870
37.5 127.0 1870
23.1 113.3 1870
55.2 59.7 1870
55.0 50.1 1870
56.4 41.3 1871
43.1 12.1 1871
54.9 43.3 1871
38.7 -9.1 1871
-38.9 -68.1 1871
48.0 68.0 1871
48.9 2.3 1871
48.9 2.3 1871
42.0 43.5 1871
36.7 117.0 1871
51.7 36.2 1871
48.9 2.3 1871
40.9 24.4 1871
35.7 139.7 1871
50.5 30.5 1871
51.7 36.2 1871
48.8 37.6 1871
52.8 52.3 1871
55.2 61.4 1872
48.5 32.3 1872
31.0 121.4 1872
45.5 9.2 1872
45.0 39.0 1872
37.5 127.0 1872
24.8 121.0 1872
54.9 47.5 1872
39.9 116.4 1872
40.5 -74.2 1872
37.5 -122.4 1872
51.5 46.1 1872
30.3 120.2 1872
50.6 36.6 1872
17.5 78.5 1872
34.0 -117.9 1872
24.5 118.1 1872
48.9 2.3 1872
37.5 -122.4 1872
52.6 39.6 1872
30.3 120.2 1873
45.5 -73.6 1873
32.1 118.8 1873
55.0 60.1 1873
50.9 4.4 1873
-20.2 -48.0 1873
55.8 37.6 1873
54.8 56.0 1873
55.3 61.4 1873
56.1 47.3 1873
37.5 127.0 1873
56.1 47.5 1873
39.7 -105.2 1873
55.2 61.4 1873
56.0 92.9 1873
23.5 121.0 1873
45.5 -73.6 1873
30.3 120.2 1873
45.3 -73.9 1873
23.5 121.0 1873
56.9 53.2 1873
40.5 -74.2 1873
45.5 -73.6 1873
55.8 37.6 1873
40.0 45.0 1873
34.1 -118.3 1873
55.0 82.9 1874
24.1 120.7 1874
38.9 -77.1 1874
26.1 119.3 1874
55.2 61.4 1874
56.1 47.3 1874
55.8 49.2 1874
45.3 -73.9 1874
56.1 47.3 1874
46.7 32.6 1874
23.1 113.3 1874
48.5 35.0 1874
53.4 59.0 1874
34.3 108.9 1874
30.3 120.2 1874
44.0 43.1 1874
23.1 113.3 1874
23.5 121.0 1874
46.3 48.0 1874
51.3 9.5 1874
32.8 -96.8 1874
54.6 52.5 1874
58.3 48.3 1874
23.5 121.0 1874
45.3 -73.9 1875
55.2 61.4 1875
39.9 116.4 1875
48.5 32.3 1875
32.1 118.8 1875
47.2 18.3 1875
25.0 121.5 1875
33.7 -84.4 1875
44.8 20.5 1875
23.5 121.0 1875
52.0 113.6 1875
45.5 -73.6 1875
46.0 25.0 1875
55.2 59.7 1875
32.1 118.8 1875
52.3 104.3 1875
55.3 86.1 1875
54.3 48.4 1875
30.3 120.2 1875
55.3 86.1 1875
14.4 121.3 1876
55.2 61.4 1876
23.5 121.0 1876
55.2 61.4 1876
-33.5 -70.7 1876
23.5 121.0 1876
56.9 35.9 1876
23.5 121.0 1876
16.1 108.2 1876
30.3 120.2 1876
23.5 121.0 1876
43.7 -79.7 1876
45.5 -73.6 1876
55.7 37.6 1876
33.7 -84.4 1876
55.2 59.7 1876
23.5 121.0 1876
55.7 37.6 1876
55.2 61.4 1876
51.3 9.5 1876
23.5 121.0 1876
55.8 37.6 1876
40.5 -74.2 1876
23.1 113.3 1876
52.8 52.3 1876
23.5 121.0 1876
30.3 120.2 1877
30.3 120.2 1877
55.5 47.5 1877
23.1 113.3 1877
50.6 36.6 1877
4.6 -74.1 1877
23.5 121.0 1877
55.2 61.4 1877
22.6 120.4 1877
53.7 91.7 1877
38.7 -9.1 1877
54.9 52.3 1877
57.0 24.1 1878
48.5 32.3 1878
48.0 37.8 1878
24.1 120.5 1878
51.7 36.2 1878
48.5 35.0 1878
64.6 39.8 1878
25.1 121.7 1878
48.5 35.0 1878
23.5 121.0 1878
45.5 -73.6 1878
23.1 113.3 1878
48.9 2.3 1878
23.5 121.0 1878
37.8 -97.8 1878
25.0 118.5 1878
30.3 120.2 1879
45.5 -73.6 1879
45.5 -73.6 1879
28.6 115.9 1879
48.3 25.9 1879
45.5 -73.6 1879
54.8 56.0 1879
58.6 49.7 1879
23.5 121.0 1879
41.0 75.0 1879
29.9 121.5 1879
26.1 119.3 1879
55.2 61.4 1879
53.0 36.1 1879
45.5 -73.6 1879
54.3 48.4 1879
58.6 49.7 1879
45.3 -73.9 1879
29.9 121.5 1879
-31.4 -64.2 1879
42.3 69.6 1879
60.2 60.0 1879
40.5 -74.2 1879
55.2 61.4 1879
57.2 65.5 1879
45.5 -73.6 1880
22.6 120.4 1880
25.0 121.5 1880
22.3 114.2 1880
47.4 40.1 1880
46.9 19.8 1880
41.8 -88.1 1880
50.0 36.3 1880
45.5 -73.6 1880
-34.6 -58.4 1880
23.5 121.0 1880
46.0 25.0 1880
30.1 31.3 1880
36.1 103.8 1880
23.5 121.0 1880
45.5 -73.6 1880
23.1 113.3 1880
58.6 49.7 1880
34.1 -118.2 1880
23.1 113.3 1880
54.9 61.4 1880
48.8 37.6 1880
48.5 32.3 1881
56.6 47.9 1881
53.2 50.1 1881
56.1 47.3 1881
45.0 39.0 1881
22.3 114.2 1881
51.5 46.0 1881
34.0 -117.9 1881
42.7 23.3 1881
56.4 60.2 1881
48.9 2.3 1881
55.3 61.4 1881
50.3 28.7 1881
55.7 37.6 1881
45.5 -73.6 1881
55.0 50.1 1881
51.7 55.4 1881
23.5 121.0 1882
45.5 -73.6 1882
61.3 73.4 1882
55.5 65.3 1882
29.7 91.1 1882
61.3 73.4 1882
55.0 50.1 1882
56.1 40.4 1882
13.0 77.6 1882
38.8 -77.3 1882
48.9 2.3 1883
46.8 29.5 1883
25.0 121.5 1883
25.0 121.3 1883
23.5 121.0 1883
30.3 120.2 1883
23.5 121.0 1883
30.3 120.2 1883
55.2 61.4 1883
25.0 121.5 1883
24.8 121.0 1883
55.2 61.4 1883
30.3 120.2 1883
37.5 127.0 1883
50.5 30.5 1883
58.0 56.3 1883
34.3 108.9 1883
23.1 113.3 1883
50.4 30.5 1883
55.2 61.4 1883
56.1 40.4 1883
39.9 116.4 1883
45.5 -73.6 1883
39.6 -105.0 1883
55.2 61.4 1883
56.8 53.2 1884
-34.6 -58.4 1884
48.9 2.3 1884
55.2 61.4 1884
58.6 49.7 1884
47.0 32.0 1884
50.0 36.3 1884
52.7 41.4 1884
23.1 113.3 1884
51.8 107.6 1884
55.2 61.4 1884
28.6 115.9 1884
50.6 36.6 1884
55.4 38.3 1884
51.3 9.5 1884
23.5 121.0 1884
28.6 115.9 1884
23.1 113.3 1885
23.5 121.0 1885
1.3 103.9 1885
23.2 87.9 1885
45.5 -73.6 1885
45.5 -73.6 1885
55.3 61.4 1885
37.8 -97.8 1885
55.2 61.4 1885
48.5 35.0 1885
55.7 37.6 1885
48.5 35.0 1885
45.5 -73.6 1885
47.9 35.3 1885
56.9 53.2 1885
13.8 100.5 1885
34.1 -118.3 1885
55.0 82.9 1885
61.3 73.4 1885
55.0 73.4 1885
40.5 -74.2 1886
55.2 61.4 1886
14.3 120.9 1886
55.2 61.4 1886
13.0 77.6 1886
41.0 64.0 1886
32.1 118.8 1886
-6.9 109.7 1886
32.1 118.8 1886
-41.5 -72.9 1886
28.6 115.9 1886
25.0 102.7 1886
48.9 2.3 1886
45.5 -73.6 1886
23.5 121.0 1886
55.2 61.4 1886
20.0 110.3 1886
23.1 113.3 1887
45.5 -73.6 1887
54.9 73.3 1887
55.2 61.4 1887
51.5 -0.1 1887
32.1 118.8 1887
35.3 -119.0 1887
23.5 121.0 1887
56.1 47.3 1887
56.9 53.2 1887
48.5 35.0 1887
55.2 61.4 1887
45.6 38.9 1887
33.4 -112.4 1887
37.5 127.0 1887
55.0 50.1 1887
30.3 120.2 1887
41.8 123.4 1887
18.5 73.9 1887
55.2 61.4 1887
14.6 121.0 1887
25.0 121.3 1888
37.5 127.0 1888
55.7 37.6 1888
34.3 108.9 1888
55.2 61.4 1888
22.3 114.2 1888
53.9 27.6 1888
25.0 121.5 1888
23.5 121.0 1888
50.6 137.0 1888
23.5 121.0 1888
55.2 61.4 1888
23.5 121.0 1888
23.1 113.3 1888
23.1 113.3 1888
22.3 114.2 1888
55.2 61.4 1888
32.1 118.8 1888
30.3 120.2 1888
55.0 73.4 1888
43.1 12.1 1888
25.0 121.5 1889
47.0 28.9 1889
39.9 116.4 1889
55.5 47.5 1889
55.2 61.4 1889
53.2 50.1 1889
52.9 83.5 1889
44.4 26.1 1889
25.0 121.5 1889
45.0 34.1 1889
60.2 24.9 1890
45.5 -73.6 1890
43.7 -79.7 1890
23.5 121.0 1890
34.8 113.7 1890
48.9 2.3 1890
51.7 55.4 1890
50.0 36.3 1890
16.5 80.6 1890
30.3 120.2 1891
48.9 2.3 1891
30.3 120.2 1891
56.1 47.5 1891
23.5 121.0 1891
41.2 -81.8 1891
30.3 120.2 1891
30.3 120.2 1891
23.1 113.3 1891
45.3 -73.9 1891
48.9 2.3 1891
22.3 114.2 1891
45.5 -73.6 1891
37.5 127.0 1891
55.2 61.4 1891
45.3 -73.9 1892
31.0 121.4 1892
24.9 118.6 1892
23.1 113.3 1892
2.5 112.5 1892
32.1 118.8 1892
22.5 114.1 1892
29.6 106.6 1892
53.4 83.8 1892
30.6 114.3 1892
23.1 113.3 1892
53.2 50.1 1892
55.0 73.4 1892
28.6 115.9 1892
33.7 -84.4 1892
45.3 -73.9 1892
13.8 100.5 1892
47.0 28.8 1892
1.3 103.9 1892
32.1 34.9 1892
39.9 116.4 1892
30.3 120.2 1893
55.3 61.4 1893
55.2 61.4 1893
50.1 8.7 1893
56.1 47.3 1893
51.3 9.5 1893
39.9 116.4 1893
55.2 61.4 1893
55.2 61.4 1893
55.7 37.6 1893
23.1 113.3 1893
53.4 -1.5 1893
39.0 -77.5 1893
30.3 120.2 1893
55.3 61.4 1894
57.4 61.4 1894
52.6 39.6 1894
50.3 28.7 1894
23.0 120.2 1894
41.0 64.0 1894
48.3 38.1 1894
50.5 30.5 1894
13.8 100.5 1894
22.6 120.4 1894
55.7 37.6 1894
48.9 2.3 1894
56.8 53.2 1894
21.3 110.3 1894
47.2 39.7 1894
56.8 53.2 1895
55.7 37.6 1895
55.2 59.7 1895
32.1 118.8 1895
45.5 -73.6 1895
35.7 51.4 1895
52.4 4.9 1895
53.4 59.0 1895
48.7 44.5 1895
30.7 104.1 1895
48.8 37.6 1895
24.1 120.7 1896
52.1 -106.6 1896
39.9 116.4 1896
28.2 113.1 1896
45.5 -73.6 1896
23.5 121.0 1896
36.1 103.8 1896
56.7 36.8 1896
48.5 35.0 1896
37.5 -122.4 1896
32.1 118.8 1896
34.8 113.7 1896
32.1 118.8 1896
55.2 61.4 1896
54.9 69.1 1896
45.5 -73.6 1896
54.8 83.1 1896
55.2 61.4 1896
37.5 127.0 1896
40.2 44.5 1896
35.1 -85.3 1896
55.3 61.4 1896
55.7 37.6 1896
39.9 116.4 1897
56.9 53.2 1897
29.0 -111.7 1897
25.0 118.5 1897
32.8 -96.8 1897
48.5 35.0 1897
50.6 36.6 1897
45.2 15.5 1897
56.1 47.3 1897
6.5 3.4 1897
48.0 68.0 1897
47.6 -122.3 1897
23.5 121.0 1897
30.3 120.2 1897
37.5 127.0 1897
39.1 117.2 1897
48.8 37.6 1897
22.6 88.4 1898
-20.0 -48.9 1898
50.6 36.6 1898
56.3 44.0 1898
46.3 48.0 1898
56.8 53.2 1898
40.4 -3.7 1898
17.3 -88.7 1898
48.9 2.3 1898
45.5 -73.6 1898
37.5 -122.4 1898
53.5 49.3 1898
30.3 120.2 1898
39.1 117.2 1898
30.9 75.9 1898
25.0 121.5 1898
29.4 48.0 1898
31.9 117.3 1898
-22.8 -43.2 1898
23.1 113.3 1898
54.8 56.0 1899
55.2 61.4 1899
45.3 -73.9 1899
48.5 32.3 1899
20.6 -105.2 1899
48.0 37.9 1899
23.5 121.0 1899
50.3 28.7 1899
41.9 -87.7 1899
52.7 41.4 1899
41.0 75.0 1899
30.8 111.3 1899
55.7 37.6 1899
36.7 117.0 1899
51.2 58.3 1899
51.4 128.1 1899
46.0 25.0 1899
30.6 114.3 1899
48.9 2.3 1899
47.2 39.7 1899
48.9 2.3 1899
23.5 121.0 1900
45.5 -73.6 1900
45.5 -73.6 1900
33.7 -84.4 1900
25.0 121.5 1900
55.3 61.4 1900
23.1 113.3 1900
21.0 105.9 1900
36.6 128.7 1900
48.5 35.0 1900
45.5 -73.6 1900
23.1 113.3 1900
57.8 40.9 1900
23.1 113.3 1900
36.1 103.8 1900
24.9 118.6 1900
50.6 3.1 1900
51.8 55.1 1900
54.8 56.0 1901
30.3 120.2 1901
37.5 127.0 1901
23.5 121.0 1901
23.5 121.0 1901
30.3 120.2 1901
41.7 123.2 1901
41.9 -88.2 1901
55.7 37.6 1901
56.9 53.2 1901
22.3 114.2 1901
23.5 121.0 1901
50.6 36.6 1901
45.0 42.0 1901
48.0 37.9 1901
22.6 120.4 1901
56.8 53.2 1901
51.1 6.6 1901
45.0 34.1 1901
37.5 127.0 1901
26.7 88.4 1901
40.0 45.0 1901
40.0 45.0 1901
54.2 45.2 1902
48.9 2.3 1902
54.2 45.2 1902
55.2 61.4 1902
56.8 53.2 1902
48.9 2.3 1902
23.5 121.0 1902
30.1 31.3 1902
25.7 94.1 1902
55.2 61.4 1902
45.3 -73.9 1902
45.5 -73.6 1902
28.0 73.3 1902
55.0 73.4 1902
32.1 118.8 1902
55.3 61.4 1902
22.7 75.8 1902
23.5 121.0 1902
50.5 30.5 1902
48.9 2.3 1902
48.5 32.3 1902
51.7 36.2 1903
48.0 68.0 1903
23.5 121.0 1903
55.7 37.6 1903
25.0 121.5 1903
50.4 30.5 1903
55.7 37.6 1903
37.5 -122.4 1903
43.7 -79.4 1903
55.0 60.1 1903
45.5 -73.6 1903
39.1 -94.6 1903
45.5 -73.6 1903
37.5 127.0 1903
25.0 121.5 1903
51.5 46.0 1903
23.1 113.3 1903
44.4 26.1 1903
55.8 37.6 1903
55.2 61.4 1904
55.2 61.4 1904
45.5 -73.6 1904
55.0 60.1 1904
31.0 121.4 1904
31.0 121.4 1904
45.8 126.7 1904
30.3 120.2 1904
34.9 117.6 1904
45.5 -73.6 1904
45.5 -73.6 1904
55.2 61.4 1904
48.5 35.0 1904
34.1 -118.3 1904
45.5 -73.6 1904
23.5 121.0 1904
23.5 121.0 1904
50.6 36.6 1905
45.5 -73.6 1905
30.3 120.2 1905
50.4 30.5 1905
55.2 61.4 1905
45.5 -73.6 1905
29.9 121.5 1905
45.5 -73.6 1905
23.5 121.0 1905
45.5 -73.6 1905
55.2 59.7 1905
33.6 130.4 1905
55.7 37.6 1905
17.4 78.5 1905
-33.4 -70.7 1905
37.2 42.0 1905
55.2 59.7 1905
57.8 40.9 1905
55.8 37.6 1905
56.9 53.2 1906
17.4 78.5 1906
56.9 60.6 1906
45.5 -73.6 1906
31.0 121.4 1906
37.5 127.0 1906
55.2 61.4 1906
25.0 121.5 1906
22.5 114.1 1906
36.1 103.8 1906
32.1 118.8 1906
45.3 -73.9 1906
53.1 36.2 1906
56.5 85.0 1906
23.5 121.0 1906
55.2 61.4 1906
28.7 77.2 1906
23.5 121.0 1906
23.5 121.0 1907
34.8 113.7 1907
23.5 121.0 1907
22.6 120.4 1907
23.5 121.0 1907
54.9 23.9 1907
36.1 103.8 1907
34.1 -118.3 1907
21.0 105.9 1907
23.5 121.0 1907
17.4 78.5 1907
32.1 118.8 1907
45.5 -73.6 1907
43.9 125.3 1907
45.5 -73.6 1907
45.5 -73.6 1907
53.1 36.2 1907
31.8 120.0 1907
56.8 53.2 1907
55.2 61.4 1907
23.1 113.3 1907
45.5 -73.6 1907
-12.1 -77.1 1907
48.8 37.6 1907
54.2 37.6 1907
30.3 120.2 1907
55.2 61.4 1907
25.0 102.7 1908
24.9 67.1 1908
50.0 36.3 1908
42.7 23.3 1908
23.5 121.0 1908
55.2 59.7 1908
24.1 120.7 1908
45.5 -73.6 1908
45.3 -73.9 1908
56.8 56.4 1908
51.2 58.3 1908
48.5 32.3 1908
50.9 128.5 1909
45.5 -73.6 1909
48.5 32.3 1909
48.5 35.0 1909
44.0 21.0 1909
43.9 125.3 1909
23.0 120.2 1909
56.9 53.2 1909
24.1 120.7 1909
51.7 55.4 1909
55.6 38.1 1909
50.5 30.5 1909
57.8 40.9 1909
42.7 23.3 1909
47.9 106.9 1909
22.3 114.2 1910
42.0 43.5 1910
49.4 32.1 1910
47.0 32.0 1910
45.5 -73.6 1910
30.3 120.2 1910
51.5 -0.1 1910
40.5 -74.2 1910
55.0 73.4 1910
23.1 113.3 1910
55.3 61.4 1910
59.3 18.1 1910
56.8 53.2 1910
54.3 48.4 1910
55.7 37.6 1911
48.9 2.3 1911
52.0 113.6 1911
56.9 53.2 1911
23.1 113.3 1911
22.6 120.4 1911
16.5 80.6 1911
25.0 121.5 1911
48.9 2.3 1911
45.3 -73.9 1911
40.2 44.5 1911
30.7 104.1 1911
39.1 -94.6 1911
23.5 121.0 1911
22.3 114.2 1911
55.7 37.6 1911
2.0 10.0 1911
40.5 47.5 1911
55.2 61.4 1911
35.9 128.6 1911
56.5 85.0 1911
23.5 121.0 1911
37.8 -97.8 1911
30.7 104.1 1911
33.8 130.8 1912
25.0 121.5 1912
45.5 -73.6 1912
46.4 6.9 1912
55.2 61.4 1912
24.9 118.6 1912
25.0 102.7 1912
37.8 -97.8 1912
48.9 2.3 1912
23.5 121.0 1912
29.7 91.1 1912
24.1 120.7 1912
23.5 121.0 1912
45.5 -73.6 1912
25.0 121.5 1912
30.3 120.2 1912
55.2 61.4 1913
55.2 61.4 1913
45.5 -73.6 1913
25.0 121.5 1913
45.3 -73.9 1913
36.7 117.0 1913
55.4 37.5 1913
36.7 117.0 1913
55.8 37.6 1913
37.8 128.9 1913
36.7 34.6 1913
17.4 78.5 1913
50.6 36.6 1913
59.9 30.3 1913
55.0 82.9 1914
-22.8 -43.2 1914
47.3 39.5 1914
54.8 56.0 1914
50.6 36.6 1914
45.5 -73.6 1914
50.1 45.4 1914
1.3 103.9 1914
37.8 128.9 1914
11.0 77.0 1914
50.4 30.5 1914
55.7 37.6 1914
23.5 121.0 1914
52.8 52.3 1914
23.1 113.3 1914
22.6 120.4 1914
48.9 2.3 1914
24.1 120.7 1914
48.9 2.3 1914
55.0 50.1 1914
19.7 -101.1 1915
45.5 -73.6 1915
23.5 121.0 1915
36.9 30.7 1915
54.8 61.3 1915
55.7 37.6 1915
55.2 61.4 1915
56.9 37.4 1915
37.5 127.0 1915
23.5 121.0 1915
48.9 2.3 1915
49.4 27.0 1915
48.8 2.3 1916
23.5 121.0 1916
50.5 30.5 1916
50.6 36.6 1916
56.1 47.3 1916
48.5 35.0 1916
48.5 35.0 1916
43.4 -80.5 1916
46.0 25.0 1916
45.5 -73.6 1916
23.5 121.0 1916
34.3 108.9 1916
55.2 59.7 1916
30.3 120.2 1917
34.0 9.0 1917
48.3 38.1 1917
30.3 120.2 1917
55.2 61.4 1917
19.7 -101.1 1917
30.3 120.2 1917
37.5 -122.4 1917
34.1 -118.3 1917
55.0 73.4 1917
22.3 114.2 1917
35.6 139.7 1917
28.9 120.0 1917
55.2 59.7 1917
32.1 118.8 1917
51.2 58.3 1917
50.4 30.5 1917
48.9 2.3 1917
55.8 49.2 1917
44.9 39.0 1918
42.0 43.5 1918
55.2 59.7 1918
48.9 2.3 1918
17.4 78.5 1918
41.3 -104.7 1918
56.1 47.3 1918
34.1 -118.3 1918
23.1 113.3 1918
55.0 73.4 1918
32.1 118.8 1918
40.2 44.5 1918
51.5 46.0 1918
23.1 113.3 1918
41.4 22.6 1918
55.3 61.4 1918
55.0 73.4 1918
56.1 47.3 1918
-15.8 -47.8 1918
40.6 22.9 1918
55.2 61.4 1918
57.8 40.9 1918
52.3 104.3 1918
51.0 39.5 1918
37.8 -97.8 1919
56.0 92.9 1919
30.3 120.2 1919
55.8 37.6 1919
24.1 120.7 1919
22.5 114.1 1919
56.2 47.3 1919
48.9 2.3 1919
55.2 61.4 1919
22.6 88.4 1919
22.3 114.2 1919
51.7 39.2 1919
45.5 -73.6 1919
45.5 -73.6 1919
55.2 61.4 1919
23.5 121.0 1919
22.6 88.4 1919
51.7 39.2 1919
23.5 121.0 1919
48.0 37.8 1920
45.5 -73.6 1920
42.3 -83.1 1920
48.0 68.0 1920
28.5 119.9 1920
48.9 2.3 1920
33.4 -112.0 1920
55.7 37.6 1920
34.8 113.7 1920
48.7 44.5 1920
23.1 113.3 1920
22.5 114.1 1920
23.5 121.0 1920
34.1 -118.3 1920
40.5 -74.2 1920
55.2 61.4 1920
48.7 44.5 1920
48.5 32.3 1920
51.3 58.2 1920
55.2 61.4 1920
55.0 73.4 1920
55.2 61.4 1920
24.1 120.7 1920
39.9 116.4 1921
54.8 56.0 1921
56.1 40.4 1921
34.8 113.7 1921
28.6 115.9 1921
54.6 22.2 1921
48.9 2.3 1921
51.5 -0.1 1921
50.1 14.5 1921
39.0 -76.9 1921
45.5 -73.6 1921
52.2 -1.9 1921
55.8 37.6 1921
55.7 37.6 1921
-20.4 -43.5 1921
-36.8 -73.0 1921
32.1 118.8 1921
55.7 37.6 1921
55.7 37.6 1921
39.9 116.4 1921
55.2 61.4 1921
36.7 117.0 1921
37.4 -122.1 1922
39.9 116.4 1922
23.1 113.3 1922
37.5 127.0 1922
55.5 47.5 1922
17.4 78.5 1922
43.4 11.9 1922
54.2 45.2 1922
45.5 -73.6 1922
56.8 53.2 1922
36.1 103.8 1922
-22.8 -43.2 1922
1.3 103.9 1922
48.9 2.3 1922
56.8 53.2 1923
55.2 61.4 1923
48.9 2.3 1923
30.7 104.1 1923
55.2 61.4 1923
25.0 121.5 1923
45.5 -73.6 1923
23.1 113.3 1923
47.5 19.1 1923
56.1 40.4 1923
55.2 59.7 1923
55.0 60.1 1923
40.4 49.9 1923
30.9 120.1 1923
57.8 40.9 1923
23.1 113.3 1924
45.5 -73.6 1924
23.5 121.0 1924
54.8 56.0 1924
56.5 85.0 1924
23.5 121.0 1924
50.1 14.4 1924
55.0 60.1 1924
55.2 61.4 1924
23.1 113.3 1924
45.5 -73.6 1924
-9.4 -40.5 1924
37.5 127.0 1924
45.5 -73.6 1924
42.4 -71.1 1924
23.5 121.0 1924
23.1 113.3 1924
48.9 2.3 1924
37.8 -97.8 1925
30.1 121.1 1925
4.6 -74.1 1925
31.8 120.0 1925
34.0 -117.9 1925
37.5 127.0 1925
52.6 36.3 1925
51.5 46.0 1925
37.5 127.0 1925
45.5 -73.6 1925
23.1 113.3 1925
45.5 -73.6 1925
50.4 30.5 1925
34.8 113.7 1925
47.1 37.5 1925
23.1 113.3 1925
55.0 50.1 1925
52.6 39.6 1926
55.2 61.4 1926
31.0 121.4 1926
30.3 120.2 1926
50.1 8.7 1926
41.2 -73.2 1926
36.6 127.5 1926
21.0 105.9 1926
23.1 113.3 1926
56.8 53.2 1926
13.0 77.6 1926
34.8 113.7 1926
55.2 59.7 1926
23.1 113.3 1926
54.6 52.5 1926
55.7 37.6 1926
31.0 121.4 1927
55.4 43.8 1927
48.5 32.3 1927
45.5 -73.6 1927
37.8 -97.8 1927
50.1 8.7 1927
39.9 116.4 1927
56.1 47.3 1927
45.5 -73.6 1927
45.5 -73.6 1927
51.7 55.4 1927
42.7 23.3 1927
48.9 2.3 1927
55.8 49.1 1927
52.5 13.3 1927
55.0 50.1 1927
36.6 128.7 1927
30.3 120.2 1927
45.0 42.0 1927
56.2 47.3 1927
50.9 34.8 1927
43.9 125.3 1927
23.5 121.0 1927
39.9 116.4 1928
40.5 -74.2 1928
23.1 113.3 1928
50.4 30.5 1928
29.4 48.0 1928
39.9 115.3 1928
50.4 30.5 1928
52.7 41.4 1928
43.2 27.9 1928
48.9 2.3 1928
55.0 60.4 1928
24.8 76.3 1928
48.5 32.3 1928
30.3 120.2 1928
23.5 121.0 1928
57.4 41.2 1928
41.0 29.0 1928
37.3 -121.9 1929
23.5 121.0 1929
17.4 78.5 1929
22.3 114.2 1929
45.5 -73.6 1929
33.8 -117.8 1929
20.0 77.0 1929
49.4 32.1 1929
54.8 32.0 1929
54.4 61.3 1929
48.9 2.3 1929
55.2 61.4 1929
48.9 2.3 1929
55.2 61.4 1929
48.5 35.0 1930
31.9 75.0 1930
39.9 116.4 1930
34.0 -117.9 1930
55.2 61.4 1930
48.9 2.3 1930
55.7 37.6 1930
49.8 24.0 1930
49.8 24.0 1930
58.4 42.3 1930
19.4 -99.0 1930
45.3 -73.9 1930
22.5 114.1 1930
45.5 -73.6 1930
48.8 37.6 1930
45.5 -73.6 1930
34.8 113.7 1930
39.9 116.4 1930
52.8 52.3 1930
48.7 37.6 1930
56.2 43.5 1930
55.2 61.4 1930
50.8 25.3 1931
48.9 2.3 1931
45.3 -73.9 1931
30.3 120.2 1931
50.3 28.7 1931
22.6 88.4 1931
48.5 32.3 1931
32.1 118.8 1931
20.2 85.8 1931
30.7 104.1 1931
56.2 47.3 1931
28.1 -80.6 1931
55.8 49.2 1931
47.9 35.3 1931
30.3 120.2 1931
56.2 47.3 1931
43.7 10.7 1931
51.7 55.4 1931
55.8 37.6 1931
49.9 28.6 1931
45.5 -73.6 1931
48.6 39.3 1931
32.1 118.8 1931
23.5 121.0 1931
19.7 -101.1 1932
40.5 -74.2 1932
45.5 -73.6 1932
22.9 120.3 1932
32.1 118.8 1932
51.7 36.2 1932
55.2 61.4 1932
45.5 -73.6 1932
23.1 113.3 1932
45.5 -73.6 1932
35.6 139.8 1932
45.5 -73.6 1932
51.7 36.2 1932
37.5 127.0 1932
51.7 39.2 1932
43.1 131.6 1932
30.9 120.1 1932
53.5 49.3 1932
45.3 -73.9 1932
52.8 52.3 1932
47.2 39.7 1932
48.9 2.3 1933
39.9 116.4 1933
55.2 61.4 1933
22.5 114.0 1933
48.6 39.3 1933
30.7 104.1 1933
45.5 -73.6 1933
55.8 49.2 1933
-22.9 -43.1 1933
25.0 102.7 1933
50.4 30.5 1933
29.9 121.5 1933
40.5 43.0 1933
55.3 61.4 1933
41.0 29.0 1933
41.8 123.4 1933
45.5 -73.6 1933
57.8 40.9 1933
51.5 -0.1 1933
45.5 -73.6 1933
23.1 113.3 1933
50.9 12.1 1933
52.2 20.8 1933
56.2 47.3 1933
48.9 2.3 1933
58.5 31.3 1933
30.3 120.2 1933
45.5 -73.6 1934
25.0 121.5 1934
48.9 2.3 1934
35.6 139.8 1934
46.8 75.0 1934
14.6 121.0 1934
51.2 58.3 1934
55.3 61.4 1934
45.5 -73.6 1934
25.0 121.5 1934
49.4 32.1 1934
25.0 102.7 1934
51.5 -0.1 1934
46.0 25.0 1934
45.5 -73.6 1934
23.1 113.3 1934
48.0 68.0 1934
55.3 61.4 1934
55.6 51.8 1934
30.3 120.2 1934
45.5 -73.6 1934
48.6 39.3 1934
45.5 -73.6 1934
23.5 121.0 1934
31.8 120.0 1934
13.0 77.6 1935
48.9 2.3 1935
48.5 35.0 1935
32.1 118.8 1935
51.3 58.2 1935
22.3 114.2 1935
54.8 32.0 1935
58.1 52.7 1935
45.5 -73.6 1935
55.2 61.4 1935
22.6 120.4 1935
51.5 46.0 1935
55.0 73.4 1935
48.9 2.3 1935
23.1 113.3 1935
48.3 39.7 1935
51.5 -0.1 1935
55.2 61.4 1935
53.8 91.4 1935
52.9 40.5 1935
53.5 -2.1 1935
54.8 56.0 1936
-32.1 115.9 1936
30.3 120.2 1936
45.5 -73.6 1936
32.1 118.8 1936
49.8 30.1 1936
57.1 24.3 1936
51.3 9.5 1936
49.6 34.5 1936
38.6 68.8 1936
49.8 73.1 1936
37.5 127.0 1936
23.1 113.3 1936
23.1 113.3 1936
55.8 38.0 1936
51.7 55.4 1936
55.7 37.6 1936
25.8 -80.2 1936
23.5 121.0 1936
50.6 36.6 1936
30.6 114.3 1936
48.0 37.8 1937
47.2 39.7 1937
50.5 30.5 1937
56.8 53.2 1937
54.8 56.0 1937
55.7 37.6 1937
56.8 53.2 1937
25.0 121.5 1937
56.1 47.5 1937
56.2 47.3 1937
55.3 61.4 1937
39.1 117.2 1937
56.8 53.2 1937
45.5 -73.6 1937
49.8 24.9 1937
55.2 61.4 1937
55.0 73.4 1937
40.5 -74.2 1937
55.2 61.4 1937
55.2 61.4 1937
48.5 32.3 1937
39.9 116.4 1937
32.1 118.8 1938
45.5 -73.6 1938
30.3 120.2 1938
56.2 47.3 1938
52.7 41.4 1938
23.1 113.3 1938
54.2 45.2 1938
23.1 113.3 1938
39.9 116.4 1938
48.9 2.3 1938
25.8 -80.2 1938
51.5 -0.1 1938
55.8 37.6 1938
21.9 112.0 1938
30.3 120.2 1939
45.5 -73.6 1939
52.6 39.6 1939
45.5 -73.6 1939
48.9 2.3 1939
45.5 -73.6 1939
56.1 47.3 1939
45.5 -73.6 1939
34.8 113.7 1939
22.3 114.2 1939
39.9 116.4 1939
23.1 113.3 1939
45.5 -73.6 1939
50.5 30.5 1939
45.5 -73.6 1939
48.9 2.3 1939
1.4 103.8 1939
37.5 127.0 1939
23.1 113.3 1939
57.2 65.5 1939
40.6 22.9 1939
51.7 36.2 1939
-21.2 -42.6 1940
28.2 113.1 1940
50.1 14.4 1940
45.3 -73.9 1940
25.0 121.5 1940
45.5 -73.6 1940
45.3 -73.9 1940
56.1 47.3 1940
48.9 2.3 1940
55.2 61.4 1940
56.1 47.3 1940
23.1 113.3 1940
53.5 49.3 1940
45.5 -73.6 1940
-38.0 -57.5 1940
37.2 -76.7 1940
23.5 121.0 1940
48.6 39.3 1940
-33.5 -70.7 1940
55.2 61.4 1940
45.5 -73.6 1940
17.4 78.5 1940
53.2 50.1 1940
56.0 92.9 1940
40.5 -74.2 1940
55.7 37.6 1940
32.1 118.8 1940
37.3 -121.9 1941
45.5 -73.6 1941
45.5 -73.6 1941
53.0 36.1 1941
54.2 37.6 1941
45.5 -73.6 1941
48.5 32.3 1941
56.1 40.4 1941
48.9 2.3 1941
30.6 114.3 1941
21.5 86.9 1941
23.1 113.3 1941
55.2 61.4 1941
55.2 61.4 1941
-40.6 -73.1 1941
53.5 49.1 1941
48.5 32.3 1941
48.9 2.3 1941
48.6 39.3 1941
49.8 30.1 1941
24.9 118.6 1942
32.1 118.8 1942
45.5 -73.6 1942
56.2 47.3 1942
22.6 120.4 1942
56.9 60.6 1942
45.5 -73.6 1942
50.0 36.3 1942
23.5 121.0 1942
48.9 2.3 1942
30.7 104.1 1942
37.4 127.1 1942
48.9 2.3 1942
55.2 61.4 1942
31.0 121.4 1942
31.9 117.3 1942
45.3 -73.9 1942
28.6 115.9 1942
30.3 120.2 1942
23.5 121.0 1942
45.1 16.3 1942
51.7 55.4 1942
51.6 -0.4 1943
23.5 121.0 1943
23.5 121.0 1943
-26.2 28.1 1943
32.1 118.8 1943
45.5 -73.6 1943
55.2 61.4 1943
23.5 121.0 1943
30.3 120.2 1943
45.5 -73.6 1943
34.0 -117.9 1943
56.1 47.3 1943
52.8 52.3 1943
54.8 61.3 1943
55.2 59.7 1943
-40.6 -73.1 1943
55.7 37.6 1943
37.5 127.0 1943
51.7 55.4 1943
55.3 52.1 1943
25.0 121.5 1944
45.5 -73.6 1944
31.0 121.4 1944
45.3 -73.9 1944
17.4 78.5 1944
51.7 39.2 1944
28.2 113.1 1944
50.4 30.5 1944
30.8 111.3 1944
55.7 37.6 1944
22.3 114.2 1944
48.9 2.3 1944
37.5 127.0 1944
23.5 121.0 1944
32.1 118.8 1944
45.5 -73.6 1944
35.6 139.8 1944
50.9 34.8 1944
53.5 49.3 1944
25.0 121.5 1944
22.3 114.2 1944
55.2 61.4 1944
22.8 108.3 1945
56.8 53.2 1945
45.0 35.4 1945
36.7 117.0 1945
32.1 118.8 1945
55.9 26.5 1945
36.7 117.0 1945
51.8 55.1 1945
23.1 113.3 1945
55.3 61.4 1945
55.9 37.7 1945
45.5 -73.6 1945
45.5 -73.6 1945
25.0 121.5 1945
44.2 42.1 1945
45.0 9.3 1945
58.6 49.7 1945
52.3 104.3 1945
54.6 39.7 1945
55.0 50.1 1945
7.0 124.9 1945
35.6 139.7 1945
54.6 52.5 1945
45.0 39.0 1945
50.9 34.8 1945
30.7 104.1 1945
45.5 -73.6 1946
36.2 128.3 1946
25.0 121.5 1946
55.2 61.4 1946
51.7 36.2 1946
55.3 61.4 1946
53.3 141.5 1946
37.5 127.0 1946
45.0 39.0 1946
-39.8 -73.2 1946
30.3 120.2 1946
26.1 119.3 1946
17.4 78.5 1946
45.0 34.1 1946
48.9 2.3 1946
55.6 51.8 1946
56.9 53.2 1947
55.4 43.8 1947
30.3 120.2 1947
25.0 121.5 1947
25.0 121.5 1947
48.0 37.8 1947
23.5 121.0 1947
25.6 85.1 1947
57.2 24.9 1947
23.5 121.0 1947
48.6 39.3 1947
54.3 48.4 1947
33.7 -84.4 1947
30.3 120.2 1947
23.5 121.0 1947
37.7 112.5 1947
55.2 61.4 1947
37.5 127.0 1947
11.0 77.0 1947
53.4 83.8 1947
23.5 121.0 1948
55.3 42.2 1948
23.5 121.0 1948
50.5 30.5 1948
45.5 -73.6 1948
34.3 108.9 1948
60.2 24.7 1948
47.6 -122.3 1948
43.9 125.3 1948
45.5 -73.6 1948
53.4 83.8 1948
52.3 21.0 1948
48.9 2.3 1948
55.3 42.2 1949
55.2 61.4 1949
22.3 114.2 1949
26.1 119.3 1949
45.5 -73.6 1949
30.3 120.2 1949
36.0 -115.1 1949
45.5 -73.6 1949
55.3 61.4 1949
25.0
View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment