Index: /Dev/trunk/d3/.gitignore
===================================================================
--- /Dev/trunk/d3/.gitignore	(revision 76)
+++ /Dev/trunk/d3/.gitignore	(revision 76)
@@ -0,0 +1,1 @@
+_site
Index: /Dev/trunk/d3/LICENSE
===================================================================
--- /Dev/trunk/d3/LICENSE	(revision 76)
+++ /Dev/trunk/d3/LICENSE	(revision 76)
@@ -0,0 +1,26 @@
+Copyright (c) 2010, Michael Bostock
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* The name Michael Bostock may not be used to endorse or promote products
+  derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: /Dev/trunk/d3/Makefile
===================================================================
--- /Dev/trunk/d3/Makefile	(revision 76)
+++ /Dev/trunk/d3/Makefile	(revision 76)
@@ -0,0 +1,283 @@
+JS_COMPILER = \
+	./lib/uglifyjs/bin/uglifyjs
+
+all: \
+	d3.js \
+	d3.min.js \
+	d3.behavior.js \
+	d3.behavior.min.js \
+	d3.chart.js \
+	d3.chart.min.js \
+	d3.layout.js \
+	d3.layout.min.js \
+	d3.csv.js \
+	d3.csv.min.js \
+	d3.geo.js \
+	d3.geo.min.js \
+	d3.geom.js \
+	d3.geom.min.js \
+	d3.time.js \
+	d3.time.min.js
+
+.INTERMEDIATE d3.js: \
+	src/start.js \
+	d3.core.js \
+	d3.scale.js \
+	d3.svg.js \
+	src/end.js
+
+d3.core.js: \
+	src/core/core.js \
+	src/core/date.js \
+	src/core/object.js \
+	src/core/array.js \
+	src/core/functor.js \
+	src/core/rebind.js \
+	src/core/ascending.js \
+	src/core/descending.js \
+	src/core/min.js \
+	src/core/max.js \
+	src/core/sum.js \
+	src/core/quantile.js \
+	src/core/zip.js \
+	src/core/bisect.js \
+	src/core/first.js \
+	src/core/last.js \
+	src/core/nest.js \
+	src/core/keys.js \
+	src/core/values.js \
+	src/core/entries.js \
+	src/core/permute.js \
+	src/core/merge.js \
+	src/core/split.js \
+	src/core/collapse.js \
+	src/core/call.js \
+	src/core/range.js \
+	src/core/requote.js \
+	src/core/round.js \
+	src/core/xhr.js \
+	src/core/text.js \
+	src/core/json.js \
+	src/core/html.js \
+	src/core/xml.js \
+	src/core/ns.js \
+	src/core/dispatch.js \
+	src/core/format.js \
+	src/core/ease.js \
+	src/core/event.js \
+	src/core/interpolate.js \
+	src/core/uninterpolate.js \
+	src/core/rgb.js \
+	src/core/hsl.js \
+	src/core/selection.js \
+	src/core/transition.js \
+	src/core/timer.js \
+	src/core/noop.js
+
+d3.scale.js: \
+	src/scale/scale.js \
+	src/scale/nice.js \
+	src/scale/linear.js \
+	src/scale/bilinear.js \
+	src/scale/polylinear.js \
+	src/scale/log.js \
+	src/scale/pow.js \
+	src/scale/sqrt.js \
+	src/scale/ordinal.js \
+	src/scale/category.js \
+	src/scale/quantile.js \
+	src/scale/quantize.js
+
+d3.svg.js: \
+	src/svg/svg.js \
+	src/svg/arc.js \
+	src/svg/line.js \
+	src/svg/line-radial.js \
+	src/svg/area.js \
+	src/svg/area-radial.js \
+	src/svg/chord.js \
+	src/svg/diagonal.js \
+	src/svg/diagonal-radial.js \
+	src/svg/mouse.js \
+	src/svg/touches.js \
+	src/svg/symbol.js
+
+d3.behavior.js: \
+	src/start.js \
+	src/behavior/behavior.js \
+	src/behavior/zoom.js \
+	src/end.js
+
+d3.chart.js: \
+	src/start.js \
+	src/chart/chart.js \
+	src/chart/box.js \
+	src/chart/bullet.js \
+	src/chart/horizon.js \
+	src/chart/qq.js \
+	src/end.js
+
+d3.layout.js: \
+	src/start.js \
+	src/layout/layout.js \
+	src/layout/bundle.js \
+	src/layout/chord.js \
+	src/layout/force.js \
+	src/layout/partition.js \
+	src/layout/pie.js \
+	src/layout/stack.js \
+	src/layout/histogram.js \
+	src/layout/hierarchy.js \
+	src/layout/pack.js \
+	src/layout/cluster.js \
+	src/layout/tree.js \
+	src/layout/treemap.js \
+	src/end.js
+
+d3.geo.js: \
+	src/start.js \
+	src/geo/geo.js \
+	src/geo/azimuthal.js \
+	src/geo/albers.js \
+	src/geo/mercator.js \
+	src/geo/path.js \
+	src/geo/bounds.js \
+	src/end.js
+
+d3.csv.js: \
+	src/start.js \
+	src/csv/csv.js \
+	src/csv/parse.js \
+	src/csv/format.js \
+	src/end.js
+
+d3.time.js: \
+	src/start.js \
+	src/time/time.js \
+	src/time/format.js \
+	src/time/format-utc.js \
+	src/time/format-iso.js \
+	src/time/range.js \
+	src/time/second.js \
+	src/time/seconds.js \
+	src/time/minute.js \
+	src/time/minutes.js \
+	src/time/hour.js \
+	src/time/hours.js \
+	src/time/day.js \
+	src/time/days.js \
+	src/time/week.js \
+	src/time/weeks.js \
+	src/time/month.js \
+	src/time/months.js \
+	src/time/year.js \
+	src/time/years.js \
+	src/time/scale.js \
+	src/time/scale-utc.js \
+	src/end.js
+
+d3.geom.js: \
+	src/start.js \
+	src/geom/geom.js \
+	src/geom/contour.js \
+	src/geom/hull.js \
+	src/geom/polygon.js \
+	src/geom/voronoi.js \
+	src/geom/delaunay.js \
+	src/geom/quadtree.js \
+	src/end.js
+
+test: \
+	test/core \
+	test/csv \
+	test/layout \
+	test/scale \
+	test/svg \
+	test/time
+
+test/core: \
+	test/core/test-append.test \
+	test/core/test-attr.test \
+	test/core/test-bisect.test \
+	test/core/test-call.test \
+	test/core/test-classed.test \
+	test/core/test-format.test \
+	test/core/test-hsl.test \
+	test/core/test-insert.test \
+	test/core/test-interpolate.test \
+	test/core/test-keys.test \
+	test/core/test-max.test \
+	test/core/test-min.test \
+	test/core/test-nest.test \
+	test/core/test-permute.test \
+	test/core/test-remove.test \
+	test/core/test-rgb.test \
+	test/core/test-round.test \
+	test/core/test-sum.test \
+	test/core/test-transition.test \
+	test/core/test-zip.test
+
+test/csv: \
+	test/csv/test-parse.test
+
+test/layout: \
+	test/layout/test-histogram.test \
+	test/layout/test-treemap.test
+
+test/scale: \
+	test/scale/test-linear.test \
+	test/scale/test-log.test \
+	test/scale/test-polylinear.test \
+	test/scale/test-pow.test \
+	test/scale/test-quantile.test \
+	test/scale/test-sqrt.test \
+	test/scale/test-ordinal.test
+
+test/svg: \
+	test/svg/test-arc.test \
+	test/svg/test-area.test \
+	test/svg/test-line.test \
+	test/svg/test-symbol.test
+
+test/time: \
+	test/time/test-day.test \
+	test/time/test-days.test \
+	test/time/test-format-iso.test \
+	test/time/test-format-utc.test \
+	test/time/test-format.test \
+	test/time/test-hour.test \
+	test/time/test-hours.test \
+	test/time/test-minute.test \
+	test/time/test-minutes.test \
+	test/time/test-month.test \
+	test/time/test-months.test \
+	test/time/test-parse-iso.test \
+	test/time/test-parse-utc.test \
+	test/time/test-parse.test \
+	test/time/test-scale.test \
+	test/time/test-scale-utc.test \
+	test/time/test-second.test \
+	test/time/test-seconds.test \
+	test/time/test-week.test \
+	test/time/test-weeks.test \
+	test/time/test-year.test \
+	test/time/test-years.test
+
+%.min.js: %.js Makefile
+	@rm -f $@
+	$(JS_COMPILER) < $< > $@
+
+d3.js d3%.js: Makefile
+	@rm -f $@
+	cat $(filter %.js,$^) > $@
+	@chmod a-w $@
+
+%.test: %.js %.out all
+	@/bin/echo -n "test: $* "
+	@node $< > $*.actual
+	@diff -U 3 $*.out $*.actual && rm -f $*.actual \
+		&& echo '\033[1;32mPASS\033[0m' \
+		|| echo test: $* '\033[1;31mFAIL\033[0m'
+
+clean:
+	rm -f d3*.js
Index: /Dev/trunk/d3/README.md
===================================================================
--- /Dev/trunk/d3/README.md	(revision 76)
+++ /Dev/trunk/d3/README.md	(revision 76)
@@ -0,0 +1,30 @@
+# D3
+
+**D3** is a small, free JavaScript library for manipulating HTML documents
+based on data. D3 can help you quickly visualize your data as HTML or SVG,
+handle interactivity, and incorporate smooth transitions and staged animations
+into your pages. You can use D3 as a visualization framework (like Protovis),
+or you can use it to build dynamic pages (like jQuery).
+
+### Browser Support
+
+D3 should work on any browser, with minimal requirements such as JavaScript
+and the [W3C DOM](http://www.w3.org/DOM/) API. By default D3 requires the
+[Selectors API](http://www.w3.org/TR/selectors-api/) Level 1, but you can
+preload [Sizzle](http://sizzlejs.com/) for compatibility with older browsers.
+Some of the included D3 examples use additional browser features, such as
+[SVG](http://www.w3.org/TR/SVG/) and [CSS3
+Transitions](http://www.w3.org/TR/css3-transitions/). These features are not
+required to use D3, but are useful for visualization! D3 is not a
+compatibility layer. The examples should work on Firefox, Chrome (Chromium),
+Safari (WebKit), Opera and IE9.
+
+Note: Chrome has strict permissions for reading files out of the local file
+system. Some examples use AJAX which works differently via HTTP instead of local
+files. For the best experience, load the D3 examples from your own machine via
+HTTP. Any static file web server will work; for example you can run Python's
+built-in server:
+
+    python -m SimpleHTTPServer 8888
+
+Once this is running, go to: <http://localhost:8888/examples/>
Index: /Dev/trunk/d3/d3.behavior.js
===================================================================
--- /Dev/trunk/d3/d3.behavior.js	(revision 76)
+++ /Dev/trunk/d3/d3.behavior.js	(revision 76)
@@ -0,0 +1,198 @@
+(function(){d3.behavior = {};
+// TODO unbind zoom behavior?
+// TODO unbind listener?
+d3.behavior.zoom = function() {
+  var xyz = [0, 0, 0],
+      event = d3.dispatch("zoom");
+
+  function zoom() {
+    this
+        .on("mousedown.zoom", mousedown)
+        .on("mousewheel.zoom", mousewheel)
+        .on("DOMMouseScroll.zoom", dblclick)
+        .on("dblclick.zoom", dblclick)
+        .on("touchstart.zoom", touchstart);
+
+    d3.select(window)
+        .on("mousemove.zoom", d3_behavior_zoomMousemove)
+        .on("mouseup.zoom", d3_behavior_zoomMouseup)
+        .on("touchmove.zoom", d3_behavior_zoomTouchmove)
+        .on("touchend.zoom", d3_behavior_zoomTouchup);
+  }
+
+  // snapshot the local context for subsequent dispatch
+  function start() {
+    d3_behavior_zoomXyz = xyz;
+    d3_behavior_zoomDispatch = event.zoom.dispatch;
+    d3_behavior_zoomTarget = this;
+    d3_behavior_zoomArguments = arguments;
+  }
+
+  function mousedown() {
+    start.apply(this, arguments);
+    d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
+    d3.event.preventDefault();
+    window.focus();
+  }
+
+  // store starting mouse location
+  function mousewheel() {
+    start.apply(this, arguments);
+    if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
+    d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming);
+  }
+
+  function dblclick() {
+    start.apply(this, arguments);
+    var mouse = d3.svg.mouse(d3_behavior_zoomTarget);
+    d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse));
+  }
+
+  // doubletap detection
+  function touchstart() {
+    start.apply(this, arguments);
+    var touches = d3_behavior_zoomTouchup(),
+        touch,
+        now = Date.now();
+    if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) {
+      d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]);
+    }
+    d3_behavior_zoomLast = now;
+  }
+
+  zoom.on = function(type, listener) {
+    event[type].add(listener);
+    return zoom;
+  };
+
+  return zoom;
+};
+
+var d3_behavior_zoomDiv,
+    d3_behavior_zoomPanning,
+    d3_behavior_zoomZooming,
+    d3_behavior_zoomLocations = {}, // identifier -> location
+    d3_behavior_zoomLast = 0,
+    d3_behavior_zoomXyz,
+    d3_behavior_zoomDispatch,
+    d3_behavior_zoomTarget,
+    d3_behavior_zoomArguments;
+
+function d3_behavior_zoomLocation(point) {
+  return [
+    point[0] - d3_behavior_zoomXyz[0],
+    point[1] - d3_behavior_zoomXyz[1],
+    d3_behavior_zoomXyz[2]
+  ];
+}
+
+// detect the pixels that would be scrolled by this wheel event
+function d3_behavior_zoomDelta() {
+
+  // mousewheel events are totally broken!
+  // https://bugs.webkit.org/show_bug.cgi?id=40441
+  // not only that, but Chrome and Safari differ in re. to acceleration!
+  if (!d3_behavior_zoomDiv) {
+    d3_behavior_zoomDiv = d3.select("body").append("div")
+        .style("visibility", "hidden")
+        .style("top", 0)
+        .style("height", 0)
+        .style("width", 0)
+        .style("overflow-y", "scroll")
+      .append("div")
+        .style("height", "2000px")
+      .node().parentNode;
+  }
+
+  var e = d3.event, delta;
+  try {
+    d3_behavior_zoomDiv.scrollTop = 1000;
+    d3_behavior_zoomDiv.dispatchEvent(e);
+    delta = 1000 - d3_behavior_zoomDiv.scrollTop;
+  } catch (error) {
+    delta = e.wheelDelta || -e.detail;
+  }
+
+  return delta * .005;
+}
+
+// Note: Since we don't rotate, it's possible for the touches to become
+// slightly detached from their original positions. Thus, we recompute the
+// touch points on touchend as well as touchstart!
+function d3_behavior_zoomTouchup() {
+  var touches = d3.svg.touches(d3_behavior_zoomTarget),
+      i = -1,
+      n = touches.length,
+      touch;
+  while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch);
+  return touches;
+}
+
+function d3_behavior_zoomTouchmove() {
+  var touches = d3.svg.touches(d3_behavior_zoomTarget);
+  switch (touches.length) {
+
+    // single-touch pan
+    case 1: {
+      var touch = touches[0];
+      d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]);
+      break;
+    }
+
+    // double-touch pan + zoom
+    case 2: {
+      var p0 = touches[0],
+          p1 = touches[1],
+          p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2],
+          l0 = d3_behavior_zoomLocations[p0.identifier],
+          l1 = d3_behavior_zoomLocations[p1.identifier],
+          l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]];
+      d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2);
+      break;
+    }
+  }
+}
+
+function d3_behavior_zoomMousemove() {
+  d3_behavior_zoomZooming = null;
+  if (d3_behavior_zoomPanning) d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning);
+}
+
+function d3_behavior_zoomMouseup() {
+  if (d3_behavior_zoomPanning) {
+    d3_behavior_zoomMousemove();
+    d3_behavior_zoomPanning = null;
+  }
+}
+
+function d3_behavior_zoomTo(z, x0, x1) {
+  var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]),
+      x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0],
+      y = d3_behavior_zoomXyz[1] = x0[1] - K * x1[1],
+      o = d3.event, // Events can be reentrant (e.g., focus).
+      k = Math.pow(2, z);
+
+  d3.event = {
+    scale: k,
+    translate: [x, y],
+    transform: function(sx, sy) {
+      if (sx) transform(sx, x);
+      if (sy) transform(sy, y);
+    }
+  };
+
+  function transform(scale, o) {
+    var domain = scale.__domain || (scale.__domain = scale.domain()),
+        range = scale.range().map(function(v) { return (v - o) / k; });
+    scale.domain(domain).domain(range.map(scale.invert));
+  }
+
+  try {
+    d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments);
+  } finally {
+    d3.event = o;
+  }
+
+  o.preventDefault();
+}
+})();
Index: /Dev/trunk/d3/d3.behavior.min.js
===================================================================
--- /Dev/trunk/d3/d3.behavior.min.js	(revision 76)
+++ /Dev/trunk/d3/d3.behavior.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){function p(a,b,c){function m(a,b){var c=a.__domain||(a.__domain=a.domain()),d=a.range().map(function(a){return(a-b)/l});a.domain(c).domain(d.map(a.invert))}var d=Math.pow(2,(f[2]=a)-c[2]),e=f[0]=b[0]-d*c[0],j=f[1]=b[1]-d*c[1],k=d3.event,l=Math.pow(2,a);d3.event={scale:l,translate:[e,j],transform:function(a,b){a&&m(a,e),b&&m(b,j)}};try{g.apply(h,i)}finally{d3.event=k}k.preventDefault()}function o(){b&&(n(),b=null)}function n(){c=null,b&&p(f[2],d3.svg.mouse(h),b)}function m(){var a=d3.svg.touches(h);switch(a.length){case 1:var b=a[0];p(f[2],b,d[b.identifier]);break;case 2:var c=a[0],e=a[1],g=[(c[0]+e[0])/2,(c[1]+e[1])/2],i=d[c.identifier],j=d[e.identifier],k=[(i[0]+j[0])/2,(i[1]+j[1])/2,i[2]];p(Math.log(d3.event.scale)/Math.LN2+i[2],g,k)}}function l(){var a=d3.svg.touches(h),b=-1,c=a.length,e;while(++b<c)d[(e=a[b]).identifier]=j(e);return a}function k(){a||(a=d3.select("body").append("div").style("visibility","hidden").style("top",0).style("height",0).style("width",0).style("overflow-y","scroll").append("div").style("height","2000px").node().parentNode);var b=d3.event,c;try{a.scrollTop=1e3,a.dispatchEvent(b),c=1e3-a.scrollTop}catch(d){c=b.wheelDelta||-b.detail}return c*.005}function j(a){return[a[0]-f[0],a[1]-f[1],f[2]]}d3.behavior={},d3.behavior.zoom=function(){function w(){s.apply(this,arguments);var b=l(),c,f=Date.now();b.length===1&&f-e<300&&p(1+Math.floor(a[2]),c=b[0],d[c.identifier]),e=f}function v(){s.apply(this,arguments);var b=d3.svg.mouse(h);p(d3.event.shiftKey?Math.ceil(a[2]-1):Math.floor(a[2]+1),b,j(b))}function u(){s.apply(this,arguments),c||(c=j(d3.svg.mouse(h))),p(k()+a[2],d3.svg.mouse(h),c)}function t(){s.apply(this,arguments),b=j(d3.svg.mouse(h)),d3.event.preventDefault(),window.focus()}function s(){f=a,g=q.zoom.dispatch,h=this,i=arguments}function r(){this.on("mousedown.zoom",t).on("mousewheel.zoom",u).on("DOMMouseScroll.zoom",v).on("dblclick.zoom",v).on("touchstart.zoom",w),d3.select(window).on("mousemove.zoom",n).on("mouseup.zoom",o).on("touchmove.zoom",m).on("touchend.zoom",l)}var a=[0,0,0],q=d3.dispatch("zoom");r.on=function(a,b){q[a].add(b);return r};return r};var a,b,c,d={},e=0,f,g,h,i})()
Index: /Dev/trunk/d3/d3.chart.js
===================================================================
--- /Dev/trunk/d3/d3.chart.js	(revision 76)
+++ /Dev/trunk/d3/d3.chart.js	(revision 76)
@@ -0,0 +1,984 @@
+(function(){d3.chart = {};
+// Inspired by http://informationandvisualization.de/blog/box-plot
+d3.chart.box = function() {
+  var width = 1,
+      height = 1,
+      duration = 0,
+      domain = null,
+      value = Number,
+      whiskers = d3_chart_boxWhiskers,
+      quartiles = d3_chart_boxQuartiles,
+      tickFormat = null;
+
+  // For each small multipleâŠ
+  function box(g) {
+    g.each(function(d, i) {
+      d = d.map(value).sort(d3.ascending);
+      var g = d3.select(this),
+          n = d.length,
+          min = d[0],
+          max = d[n - 1];
+
+      // Compute quartiles. Must return exactly 3 elements.
+      var quartileData = d.quartiles = quartiles(d);
+
+      // Compute whiskers. Must return exactly 2 elements, or null.
+      var whiskerIndices = whiskers && whiskers.call(this, d, i),
+          whiskerData = whiskerIndices && whiskerIndices.map(function(i) { return d[i]; });
+
+      // Compute outliers. If no whiskers are specified, all data are "outliers".
+      // We compute the outliers as indices, so that we can join across transitions!
+      var outlierIndices = whiskerIndices
+          ? d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n))
+          : d3.range(n);
+
+      // Compute the new x-scale.
+      var x1 = d3.scale.linear()
+          .domain(domain && domain.call(this, d, i) || [min, max])
+          .range([height, 0]);
+
+      // Retrieve the old x-scale, if this is an update.
+      var x0 = this.__chart__ || d3.scale.linear()
+          .domain([0, Infinity])
+          .range(x1.range());
+
+      // Stash the new scale.
+      this.__chart__ = x1;
+
+      // Note: the box, median, and box tick elements are fixed in number,
+      // so we only have to handle enter and update. In contrast, the outliers
+      // and other elements are variable, so we need to exit them! Variable
+      // elements also fade in and out.
+
+      // Update center line: the vertical line spanning the whiskers.
+      var center = g.selectAll("line.center")
+          .data(whiskerData ? [whiskerData] : []);
+
+      center.enter().insert("svg:line", "rect")
+          .attr("class", "center")
+          .attr("x1", width / 2)
+          .attr("y1", function(d) { return x0(d[0]); })
+          .attr("x2", width / 2)
+          .attr("y2", function(d) { return x0(d[1]); })
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .style("opacity", 1)
+          .attr("y1", function(d) { return x1(d[0]); })
+          .attr("y2", function(d) { return x1(d[1]); });
+
+      center.transition()
+          .duration(duration)
+          .style("opacity", 1)
+          .attr("y1", function(d) { return x1(d[0]); })
+          .attr("y2", function(d) { return x1(d[1]); });
+
+      center.exit().transition()
+          .duration(duration)
+          .style("opacity", 1e-6)
+          .attr("y1", function(d) { return x1(d[0]); })
+          .attr("y2", function(d) { return x1(d[1]); })
+          .remove();
+
+      // Update innerquartile box.
+      var box = g.selectAll("rect.box")
+          .data([quartileData]);
+
+      box.enter().append("svg:rect")
+          .attr("class", "box")
+          .attr("x", 0)
+          .attr("y", function(d) { return x0(d[2]); })
+          .attr("width", width)
+          .attr("height", function(d) { return x0(d[0]) - x0(d[2]); })
+        .transition()
+          .duration(duration)
+          .attr("y", function(d) { return x1(d[2]); })
+          .attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
+
+      box.transition()
+          .duration(duration)
+          .attr("y", function(d) { return x1(d[2]); })
+          .attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
+
+      // Update median line.
+      var medianLine = g.selectAll("line.median")
+          .data([quartileData[1]]);
+
+      medianLine.enter().append("svg:line")
+          .attr("class", "median")
+          .attr("x1", 0)
+          .attr("y1", x0)
+          .attr("x2", width)
+          .attr("y2", x0)
+        .transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1);
+
+      medianLine.transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1);
+
+      // Update whiskers.
+      var whisker = g.selectAll("line.whisker")
+          .data(whiskerData || []);
+
+      whisker.enter().insert("svg:line", "circle, text")
+          .attr("class", "whisker")
+          .attr("x1", 0)
+          .attr("y1", x0)
+          .attr("x2", width)
+          .attr("y2", x0)
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1)
+          .style("opacity", 1);
+
+      whisker.transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1)
+          .style("opacity", 1);
+
+      whisker.exit().transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1)
+          .style("opacity", 1e-6)
+          .remove();
+
+      // Update outliers.
+      var outlier = g.selectAll("circle.outlier")
+          .data(outlierIndices, Number);
+
+      outlier.enter().insert("svg:circle", "text")
+          .attr("class", "outlier")
+          .attr("r", 5)
+          .attr("cx", width / 2)
+          .attr("cy", function(i) { return x0(d[i]); })
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .attr("cy", function(i) { return x1(d[i]); })
+          .style("opacity", 1);
+
+      outlier.transition()
+          .duration(duration)
+          .attr("cy", function(i) { return x1(d[i]); })
+          .style("opacity", 1);
+
+      outlier.exit().transition()
+          .duration(duration)
+          .attr("cy", function(i) { return x1(d[i]); })
+          .style("opacity", 1e-6)
+          .remove();
+
+      // Compute the tick format.
+      var format = tickFormat || x1.tickFormat(8);
+
+      // Update box ticks.
+      var boxTick = g.selectAll("text.box")
+          .data(quartileData);
+
+      boxTick.enter().append("svg:text")
+          .attr("class", "box")
+          .attr("dy", ".3em")
+          .attr("dx", function(d, i) { return i & 1 ? 6 : -6 })
+          .attr("x", function(d, i) { return i & 1 ? width : 0 })
+          .attr("y", x0)
+          .attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })
+          .text(format)
+        .transition()
+          .duration(duration)
+          .attr("y", x1);
+
+      boxTick.transition()
+          .duration(duration)
+          .text(format)
+          .attr("y", x1);
+
+      // Update whisker ticks. These are handled separately from the box
+      // ticks because they may or may not exist, and we want don't want
+      // to join box ticks pre-transition with whisker ticks post-.
+      var whiskerTick = g.selectAll("text.whisker")
+          .data(whiskerData || []);
+
+      whiskerTick.enter().append("svg:text")
+          .attr("class", "whisker")
+          .attr("dy", ".3em")
+          .attr("dx", 6)
+          .attr("x", width)
+          .attr("y", x0)
+          .text(format)
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .attr("y", x1)
+          .style("opacity", 1);
+
+      whiskerTick.transition()
+          .duration(duration)
+          .text(format)
+          .attr("y", x1)
+          .style("opacity", 1);
+
+      whiskerTick.exit().transition()
+          .duration(duration)
+          .attr("y", x1)
+          .style("opacity", 1e-6)
+          .remove();
+    });
+    d3.timer.flush();
+  }
+
+  box.width = function(x) {
+    if (!arguments.length) return width;
+    width = x;
+    return box;
+  };
+
+  box.height = function(x) {
+    if (!arguments.length) return height;
+    height = x;
+    return box;
+  };
+
+  box.tickFormat = function(x) {
+    if (!arguments.length) return tickFormat;
+    tickFormat = x;
+    return box;
+  };
+
+  box.duration = function(x) {
+    if (!arguments.length) return duration;
+    duration = x;
+    return box;
+  };
+
+  box.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x == null ? x : d3.functor(x);
+    return box;
+  };
+
+  box.value = function(x) {
+    if (!arguments.length) return value;
+    value = x;
+    return box;
+  };
+
+  box.whiskers = function(x) {
+    if (!arguments.length) return whiskers;
+    whiskers = x;
+    return box;
+  };
+
+  box.quartiles = function(x) {
+    if (!arguments.length) return quartiles;
+    quartiles = x;
+    return box;
+  };
+
+  return box;
+};
+
+function d3_chart_boxWhiskers(d) {
+  return [0, d.length - 1];
+}
+
+function d3_chart_boxQuartiles(d) {
+  return [
+    d3.quantile(d, .25),
+    d3.quantile(d, .5),
+    d3.quantile(d, .75)
+  ];
+}
+// Chart design based on the recommendations of Stephen Few. Implementation
+// based on the work of Clint Ivy, Jamie Love, and Jason Davies.
+// http://projects.instantcognition.com/protovis/bulletchart/
+d3.chart.bullet = function() {
+  var orient = "left", // TODO top & bottom
+      reverse = false,
+      duration = 0,
+      ranges = d3_chart_bulletRanges,
+      markers = d3_chart_bulletMarkers,
+      measures = d3_chart_bulletMeasures,
+      width = 380,
+      height = 30,
+      tickFormat = null;
+
+  // For each small multipleâŠ
+  function bullet(g) {
+    g.each(function(d, i) {
+      var rangez = ranges.call(this, d, i).slice().sort(d3.descending),
+          markerz = markers.call(this, d, i).slice().sort(d3.descending),
+          measurez = measures.call(this, d, i).slice().sort(d3.descending),
+          g = d3.select(this);
+
+      // Compute the new x-scale.
+      var x1 = d3.scale.linear()
+          .domain([0, Math.max(rangez[0], markerz[0], measurez[0])])
+          .range(reverse ? [width, 0] : [0, width]);
+
+      // Retrieve the old x-scale, if this is an update.
+      var x0 = this.__chart__ || d3.scale.linear()
+          .domain([0, Infinity])
+          .range(x1.range());
+
+      // Stash the new scale.
+      this.__chart__ = x1;
+
+      // Derive width-scales from the x-scales.
+      var w0 = d3_chart_bulletWidth(x0),
+          w1 = d3_chart_bulletWidth(x1);
+
+      // Update the range rects.
+      var range = g.selectAll("rect.range")
+          .data(rangez);
+
+      range.enter().append("svg:rect")
+          .attr("class", function(d, i) { return "range s" + i; })
+          .attr("width", w0)
+          .attr("height", height)
+          .attr("x", reverse ? x0 : 0)
+        .transition()
+          .duration(duration)
+          .attr("width", w1)
+          .attr("x", reverse ? x1 : 0);
+
+      range.transition()
+          .duration(duration)
+          .attr("x", reverse ? x1 : 0)
+          .attr("width", w1)
+          .attr("height", height);
+
+      // Update the measure rects.
+      var measure = g.selectAll("rect.measure")
+          .data(measurez);
+
+      measure.enter().append("svg:rect")
+          .attr("class", function(d, i) { return "measure s" + i; })
+          .attr("width", w0)
+          .attr("height", height / 3)
+          .attr("x", reverse ? x0 : 0)
+          .attr("y", height / 3)
+        .transition()
+          .duration(duration)
+          .attr("width", w1)
+          .attr("x", reverse ? x1 : 0);
+
+      measure.transition()
+          .duration(duration)
+          .attr("width", w1)
+          .attr("height", height / 3)
+          .attr("x", reverse ? x1 : 0)
+          .attr("y", height / 3);
+
+      // Update the marker lines.
+      var marker = g.selectAll("line.marker")
+          .data(markerz);
+
+      marker.enter().append("svg:line")
+          .attr("class", "marker")
+          .attr("x1", x0)
+          .attr("x2", x0)
+          .attr("y1", height / 6)
+          .attr("y2", height * 5 / 6)
+        .transition()
+          .duration(duration)
+          .attr("x1", x1)
+          .attr("x2", x1);
+
+      marker.transition()
+          .duration(duration)
+          .attr("x1", x1)
+          .attr("x2", x1)
+          .attr("y1", height / 6)
+          .attr("y2", height * 5 / 6);
+
+      // Compute the tick format.
+      var format = tickFormat || x1.tickFormat(8);
+
+      // Update the tick groups.
+      var tick = g.selectAll("g.tick")
+          .data(x1.ticks(8), function(d) {
+            return this.textContent || format(d);
+          });
+
+      // Initialize the ticks with the old scale, x0.
+      var tickEnter = tick.enter().append("svg:g")
+          .attr("class", "tick")
+          .attr("transform", d3_chart_bulletTranslate(x0))
+          .style("opacity", 1e-6);
+
+      tickEnter.append("svg:line")
+          .attr("y1", height)
+          .attr("y2", height * 7 / 6);
+
+      tickEnter.append("svg:text")
+          .attr("text-anchor", "middle")
+          .attr("dy", "1em")
+          .attr("y", height * 7 / 6)
+          .text(format);
+
+      // Transition the entering ticks to the new scale, x1.
+      tickEnter.transition()
+          .duration(duration)
+          .attr("transform", d3_chart_bulletTranslate(x1))
+          .style("opacity", 1);
+
+      // Transition the updating ticks to the new scale, x1.
+      var tickUpdate = tick.transition()
+          .duration(duration)
+          .attr("transform", d3_chart_bulletTranslate(x1))
+          .style("opacity", 1);
+
+      tickUpdate.select("line")
+          .attr("y1", height)
+          .attr("y2", height * 7 / 6);
+
+      tickUpdate.select("text")
+          .attr("y", height * 7 / 6);
+
+      // Transition the exiting ticks to the new scale, x1.
+      tick.exit().transition()
+          .duration(duration)
+          .attr("transform", d3_chart_bulletTranslate(x1))
+          .style("opacity", 1e-6)
+          .remove();
+    });
+    d3.timer.flush();
+  }
+
+  // left, right, top, bottom
+  bullet.orient = function(x) {
+    if (!arguments.length) return orient;
+    orient = x;
+    reverse = orient == "right" || orient == "bottom";
+    return bullet;
+  };
+
+  // ranges (bad, satisfactory, good)
+  bullet.ranges = function(x) {
+    if (!arguments.length) return ranges;
+    ranges = x;
+    return bullet;
+  };
+
+  // markers (previous, goal)
+  bullet.markers = function(x) {
+    if (!arguments.length) return markers;
+    markers = x;
+    return bullet;
+  };
+
+  // measures (actual, forecast)
+  bullet.measures = function(x) {
+    if (!arguments.length) return measures;
+    measures = x;
+    return bullet;
+  };
+
+  bullet.width = function(x) {
+    if (!arguments.length) return width;
+    width = x;
+    return bullet;
+  };
+
+  bullet.height = function(x) {
+    if (!arguments.length) return height;
+    height = x;
+    return bullet;
+  };
+
+  bullet.tickFormat = function(x) {
+    if (!arguments.length) return tickFormat;
+    tickFormat = x;
+    return bullet;
+  };
+
+  bullet.duration = function(x) {
+    if (!arguments.length) return duration;
+    duration = x;
+    return bullet;
+  };
+
+  return bullet;
+};
+
+function d3_chart_bulletRanges(d) {
+  return d.ranges;
+}
+
+function d3_chart_bulletMarkers(d) {
+  return d.markers;
+}
+
+function d3_chart_bulletMeasures(d) {
+  return d.measures;
+}
+
+function d3_chart_bulletTranslate(x) {
+  return function(d) {
+    return "translate(" + x(d) + ",0)";
+  };
+}
+
+function d3_chart_bulletWidth(x) {
+  var x0 = x(0);
+  return function(d) {
+    return Math.abs(x(d) - x0);
+  };
+}
+// Implements a horizon layout, which is a variation of a single-series
+// area chart where the area is folded into multiple bands. Color is used to
+// encode band, allowing the size of the chart to be reduced significantly
+// without impeding readability. This layout algorithm is based on the work of
+// J. Heer, N. Kong and M. Agrawala in "Sizing the Horizon: The Effects of Chart
+// Size and Layering on the Graphical Perception of Time Series Visualizations",
+// CHI 2009. http://hci.stanford.edu/publications/2009/heer-horizon-chi09.pdf
+d3.chart.horizon = function() {
+  var bands = 1, // between 1 and 5, typically
+      mode = "offset", // or mirror
+      interpolate = "linear", // or basis, monotone, step-before, etc.
+      x = d3_chart_horizonX,
+      y = d3_chart_horizonY,
+      w = 960,
+      h = 40,
+      duration = 0;
+
+  var color = d3.scale.linear()
+      .domain([-1, 0, 1])
+      .range(["#d62728", "#fff", "#1f77b4"]);
+
+  // For each small multipleâŠ
+  function horizon(g) {
+    g.each(function(d, i) {
+      var g = d3.select(this),
+          n = 2 * bands + 1,
+          xMin = Infinity,
+          xMax = -Infinity,
+          yMax = -Infinity,
+          x0, // old x-scale
+          y0, // old y-scale
+          id; // unique id for paths
+
+      // Compute x- and y-values along with extents.
+      var data = d.map(function(d, i) {
+        var xv = x.call(this, d, i),
+            yv = y.call(this, d, i);
+        if (xv < xMin) xMin = xv;
+        if (xv > xMax) xMax = xv;
+        if (-yv > yMax) yMax = -yv;
+        if (yv > yMax) yMax = yv;
+        return [xv, yv];
+      });
+
+      // Compute the new x- and y-scales.
+      var x1 = d3.scale.linear().domain([xMin, xMax]).range([0, w]),
+          y1 = d3.scale.linear().domain([0, yMax]).range([0, h * bands]);
+
+      // Retrieve the old scales, if this is an update.
+      if (this.__chart__) {
+        x0 = this.__chart__.x;
+        y0 = this.__chart__.y;
+        id = this.__chart__.id;
+      } else {
+        x0 = d3.scale.linear().domain([0, Infinity]).range(x1.range());
+        y0 = d3.scale.linear().domain([0, Infinity]).range(y1.range());
+        id = ++d3_chart_horizonId;
+      }
+
+      // We'll use a defs to store the area path and the clip path.
+      var defs = g.selectAll("defs")
+          .data([data]);
+
+      var defsEnter = defs.enter().append("svg:defs");
+
+      // The clip path is a simple rect.
+      defsEnter.append("svg:clipPath")
+          .attr("id", "d3_chart_horizon_clip" + id)
+        .append("svg:rect")
+          .attr("width", w)
+          .attr("height", h);
+
+      defs.select("rect").transition()
+          .duration(duration)
+          .attr("width", w)
+          .attr("height", h);
+
+      // The area path is rendered with our resuable d3.svg.area.
+      defsEnter.append("svg:path")
+          .attr("id", "d3_chart_horizon_path" + id)
+          .attr("d", d3_chart_horizonArea
+          .interpolate(interpolate)
+          .x(function(d) { return x0(d[0]); })
+          .y0(h * bands)
+          .y1(function(d) { return h * bands - y0(d[1]); }))
+        .transition()
+          .duration(duration)
+          .attr("d", d3_chart_horizonArea
+          .x(function(d) { return x1(d[0]); })
+          .y1(function(d) { return h * bands - y1(d[1]); }));
+
+      defs.select("path").transition()
+          .duration(duration)
+          .attr("d", d3_chart_horizonArea);
+
+      // We'll use a container to clip all horizon layers at once.
+      g.selectAll("g")
+          .data([null])
+        .enter().append("svg:g")
+          .attr("clip-path", "url(#d3_chart_horizon_clip" + id + ")");
+
+      // Define the transform function based on the mode.
+      var transform = mode == "offset"
+          ? function(d) { return "translate(0," + (d + (d < 0) - bands) * h + ")"; }
+          : function(d) { return (d < 0 ? "scale(1,-1)" : "") + "translate(0," + (d - bands) * h + ")"; };
+
+      // Instantiate each copy of the path with different transforms.
+      var u = g.select("g").selectAll("use")
+          .data(d3.range(-1, -bands - 1, -1).concat(d3.range(1, bands + 1)), Number);
+
+      // TODO don't fudge the enter transition
+      u.enter().append("svg:use")
+          .attr("xlink:href", "#d3_chart_horizon_path" + id)
+          .attr("transform", function(d) { return transform(d + (d > 0 ? 1 : -1)); })
+          .style("fill", color)
+        .transition()
+          .duration(duration)
+          .attr("transform", transform);
+
+      u.transition()
+          .duration(duration)
+          .attr("transform", transform)
+          .style("fill", color);
+
+      u.exit().transition()
+          .duration(duration)
+          .attr("transform", transform)
+          .remove();
+
+      // Stash the new scales.
+      this.__chart__ = {x: x1, y: y1, id: id};
+    });
+    d3.timer.flush();
+  }
+
+  horizon.duration = function(x) {
+    if (!arguments.length) return duration;
+    duration = +x;
+    return horizon;
+  };
+
+  horizon.bands = function(x) {
+    if (!arguments.length) return bands;
+    bands = +x;
+    color.domain([-bands, 0, bands]);
+    return horizon;
+  };
+
+  horizon.mode = function(x) {
+    if (!arguments.length) return mode;
+    mode = x + "";
+    return horizon;
+  };
+
+  horizon.colors = function(x) {
+    if (!arguments.length) return color.range();
+    color.range(x);
+    return horizon;
+  };
+
+  horizon.interpolate = function(x) {
+    if (!arguments.length) return interpolate;
+    interpolate = x + "";
+    return horizon;
+  };
+
+  horizon.x = function(z) {
+    if (!arguments.length) return x;
+    x = z;
+    return horizon;
+  };
+
+  horizon.y = function(z) {
+    if (!arguments.length) return y;
+    y = z;
+    return horizon;
+  };
+
+  horizon.width = function(x) {
+    if (!arguments.length) return w;
+    w = +x;
+    return horizon;
+  };
+
+  horizon.height = function(x) {
+    if (!arguments.length) return h;
+    h = +x;
+    return horizon;
+  };
+
+  return horizon;
+};
+
+var d3_chart_horizonArea = d3.svg.area(),
+    d3_chart_horizonId = 0;
+
+function d3_chart_horizonX(d) {
+  return d[0];
+}
+
+function d3_chart_horizonY(d) {
+  return d[1];
+}
+// Based on http://vis.stanford.edu/protovis/ex/qqplot.html
+d3.chart.qq = function() {
+  var width = 1,
+      height = 1,
+      duration = 0,
+      domain = null,
+      tickFormat = null,
+      n = 100,
+      x = d3_chart_qqX,
+      y = d3_chart_qqY;
+
+  // For each small multipleâŠ
+  function qq(g) {
+    g.each(function(d, i) {
+      var g = d3.select(this),
+          qx = d3_chart_qqQuantiles(n, x.call(this, d, i)),
+          qy = d3_chart_qqQuantiles(n, y.call(this, d, i)),
+          xd = domain && domain.call(this, d, i) || [d3.min(qx), d3.max(qx)], // new x-domain
+          yd = domain && domain.call(this, d, i) || [d3.min(qy), d3.max(qy)], // new y-domain
+          x0, // old x-scale
+          y0; // old y-scale
+
+      // Compute the new x-scale.
+      var x1 = d3.scale.linear()
+          .domain(xd)
+          .range([0, width]);
+
+      // Compute the new y-scale.
+      var y1 = d3.scale.linear()
+          .domain(yd)
+          .range([height, 0]);
+
+      // Retrieve the old scales, if this is an update.
+      if (this.__chart__) {
+        x0 = this.__chart__.x;
+        y0 = this.__chart__.y;
+      } else {
+        x0 = d3.scale.linear().domain([0, Infinity]).range(x1.range());
+        y0 = d3.scale.linear().domain([0, Infinity]).range(y1.range());
+      }
+
+      // Stash the new scales.
+      this.__chart__ = {x: x1, y: y1};
+
+      // Update diagonal line.
+      var diagonal = g.selectAll("line.diagonal")
+          .data([null]);
+
+      diagonal.enter().append("svg:line")
+          .attr("class", "diagonal")
+          .attr("x1", x1(yd[0]))
+          .attr("y1", y1(xd[0]))
+          .attr("x2", x1(yd[1]))
+          .attr("y2", y1(xd[1]));
+
+      diagonal.transition()
+          .duration(duration)
+          .attr("x1", x1(yd[0]))
+          .attr("y1", y1(xd[0]))
+          .attr("x2", x1(yd[1]))
+          .attr("y2", y1(xd[1]));
+
+      // Update quantile plots.
+      var circle = g.selectAll("circle")
+          .data(d3.range(n).map(function(i) {
+            return {x: qx[i], y: qy[i]};
+          }));
+
+      circle.enter().append("svg:circle")
+          .attr("class", "quantile")
+          .attr("r", 4.5)
+          .attr("cx", function(d) { return x0(d.x); })
+          .attr("cy", function(d) { return y0(d.y); })
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .attr("cx", function(d) { return x1(d.x); })
+          .attr("cy", function(d) { return y1(d.y); })
+          .style("opacity", 1);
+
+      circle.transition()
+          .duration(duration)
+          .attr("cx", function(d) { return x1(d.x); })
+          .attr("cy", function(d) { return y1(d.y); })
+          .style("opacity", 1);
+
+      circle.exit().transition()
+          .duration(duration)
+          .attr("cx", function(d) { return x1(d.x); })
+          .attr("cy", function(d) { return y1(d.y); })
+          .style("opacity", 1e-6)
+          .remove();
+
+      var xformat = tickFormat || x1.tickFormat(4),
+          yformat = tickFormat || y1.tickFormat(4),
+          tx = function(d) { return "translate(" + x1(d) + "," + height + ")"; },
+          ty = function(d) { return "translate(0," + y1(d) + ")"; };
+
+      // Update x-ticks.
+      var xtick = g.selectAll("g.x.tick")
+          .data(x1.ticks(4), function(d) {
+            return this.textContent || xformat(d);
+          });
+
+      var xtickEnter = xtick.enter().append("svg:g")
+          .attr("class", "x tick")
+          .attr("transform", function(d) { return "translate(" + x0(d) + "," + height + ")"; })
+          .style("opacity", 1e-6);
+
+      xtickEnter.append("svg:line")
+          .attr("y1", 0)
+          .attr("y2", -6);
+
+      xtickEnter.append("svg:text")
+          .attr("text-anchor", "middle")
+          .attr("dy", "1em")
+          .text(xformat);
+
+      // Transition the entering ticks to the new scale, x1.
+      xtickEnter.transition()
+          .duration(duration)
+          .attr("transform", tx)
+          .style("opacity", 1);
+
+      // Transition the updating ticks to the new scale, x1.
+      xtick.transition()
+          .duration(duration)
+          .attr("transform", tx)
+          .style("opacity", 1);
+
+      // Transition the exiting ticks to the new scale, x1.
+      xtick.exit().transition()
+          .duration(duration)
+          .attr("transform", tx)
+          .style("opacity", 1e-6)
+          .remove();
+
+      // Update ticks.
+      var ytick = g.selectAll("g.y.tick")
+          .data(y1.ticks(4), function(d) {
+            return this.textContent || yformat(d);
+          });
+
+      var ytickEnter = ytick.enter().append("svg:g")
+          .attr("class", "y tick")
+          .attr("transform", function(d) { return "translate(0," + y0(d) + ")"; })
+          .style("opacity", 1e-6);
+
+      ytickEnter.append("svg:line")
+          .attr("x1", 0)
+          .attr("x2", 6);
+
+      ytickEnter.append("svg:text")
+          .attr("text-anchor", "end")
+          .attr("dx", "-.5em")
+          .attr("dy", ".3em")
+          .text(yformat);
+
+      // Transition the entering ticks to the new scale, y1.
+      ytickEnter.transition()
+          .duration(duration)
+          .attr("transform", ty)
+          .style("opacity", 1);
+
+      // Transition the updating ticks to the new scale, y1.
+      ytick.transition()
+          .duration(duration)
+          .attr("transform", ty)
+          .style("opacity", 1);
+
+      // Transition the exiting ticks to the new scale, y1.
+      ytick.exit().transition()
+          .duration(duration)
+          .attr("transform", ty)
+          .style("opacity", 1e-6)
+          .remove();
+    });
+  }
+
+  qq.width = function(x) {
+    if (!arguments.length) return width;
+    width = x;
+    return qq;
+  };
+
+  qq.height = function(x) {
+    if (!arguments.length) return height;
+    height = x;
+    return qq;
+  };
+
+  qq.duration = function(x) {
+    if (!arguments.length) return duration;
+    duration = x;
+    return qq;
+  };
+
+  qq.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x == null ? x : d3.functor(x);
+    return qq;
+  };
+
+  qq.count = function(z) {
+    if (!arguments.length) return n;
+    n = z;
+    return qq;
+  };
+
+  qq.x = function(z) {
+    if (!arguments.length) return x;
+    x = z;
+    return qq;
+  };
+
+  qq.y = function(z) {
+    if (!arguments.length) return y;
+    y = z;
+    return qq;
+  };
+
+  qq.tickFormat = function(x) {
+    if (!arguments.length) return tickFormat;
+    tickFormat = x;
+    return qq;
+  };
+
+  return qq;
+};
+
+function d3_chart_qqQuantiles(n, values) {
+  var m = values.length - 1;
+  values = values.slice().sort(d3.ascending);
+  return d3.range(n).map(function(i) {
+    return values[~~(i * m / n)];
+  });
+}
+
+function d3_chart_qqX(d) {
+  return d.x;
+}
+
+function d3_chart_qqY(d) {
+  return d.y;
+}
+})();
Index: /Dev/trunk/d3/d3.chart.min.js
===================================================================
--- /Dev/trunk/d3/d3.chart.min.js	(revision 76)
+++ /Dev/trunk/d3/d3.chart.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){function n(a){return a.y}function m(a){return a.x}function l(a,b){var c=b.length-1;b=b.slice().sort(d3.ascending);return d3.range(a).map(function(d){return b[~~(d*c/a)]})}function k(a){return a[1]}function j(a){return a[0]}function g(a){var b=a(0);return function(c){return Math.abs(a(c)-b)}}function f(a){return function(b){return"translate("+a(b)+",0)"}}function e(a){return a.measures}function d(a){return a.markers}function c(a){return a.ranges}function b(a){return[d3.quantile(a,.25),d3.quantile(a,.5),d3.quantile(a,.75)]}function a(a){return[0,a.length-1]}d3.chart={},d3.chart.box=function(){function k(a){a.each(function(a,b){a=a.map(g).sort(d3.ascending);var k=d3.select(this),l=a.length,m=a[0],n=a[l-1],o=a.quartiles=i(a),p=h&&h.call(this,a,b),q=p&&p.map(function(b){return a[b]}),r=p?d3.range(0,p[0]).concat(d3.range(p[1]+1,l)):d3.range(l),s=d3.scale.linear().domain(f&&f.call(this,a,b)||[m,n]).range([d,0]),t=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(s.range());this.__chart__=s;var u=k.selectAll("line.center").data(q?[q]:[]);u.enter().insert("svg:line","rect").attr("class","center").attr("x1",c/2).attr("y1",function(a){return t(a[0])}).attr("x2",c/2).attr("y2",function(a){return t(a[1])}).style("opacity",1e-6).transition().duration(e).style("opacity",1).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}),u.transition().duration(e).style("opacity",1).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}),u.exit().transition().duration(e).style("opacity",1e-6).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}).remove();var v=k.selectAll("rect.box").data([o]);v.enter().append("svg:rect").attr("class","box").attr("x",0).attr("y",function(a){return t(a[2])}).attr("width",c).attr("height",function(a){return t(a[0])-t(a[2])}).transition().duration(e).attr("y",function(a){return s(a[2])}).attr("height",function(a){return s(a[0])-s(a[2])}),v.transition().duration(e).attr("y",function(a){return s(a[2])}).attr("height",function(a){return s(a[0])-s(a[2])});var w=k.selectAll("line.median").data([o[1]]);w.enter().append("svg:line").attr("class","median").attr("x1",0).attr("y1",t).attr("x2",c).attr("y2",t).transition().duration(e).attr("y1",s).attr("y2",s),w.transition().duration(e).attr("y1",s).attr("y2",s);var x=k.selectAll("line.whisker").data(q||[]);x.enter().insert("svg:line","circle, text").attr("class","whisker").attr("x1",0).attr("y1",t).attr("x2",c).attr("y2",t).style("opacity",1e-6).transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1),x.transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1),x.exit().transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1e-6).remove();var y=k.selectAll("circle.outlier").data(r,Number);y.enter().insert("svg:circle","text").attr("class","outlier").attr("r",5).attr("cx",c/2).attr("cy",function(b){return t(a[b])}).style("opacity",1e-6).transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1),y.transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1),y.exit().transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1e-6).remove();var z=j||s.tickFormat(8),A=k.selectAll("text.box").data(o);A.enter().append("svg:text").attr("class","box").attr("dy",".3em").attr("dx",function(a,b){return b&1?6:-6}).attr("x",function(a,b){return b&1?c:0}).attr("y",t).attr("text-anchor",function(a,b){return b&1?"start":"end"}).text(z).transition().duration(e).attr("y",s),A.transition().duration(e).text(z).attr("y",s);var B=k.selectAll("text.whisker").data(q||[]);B.enter().append("svg:text").attr("class","whisker").attr("dy",".3em").attr("dx",6).attr("x",c).attr("y",t).text(z).style("opacity",1e-6).transition().duration(e).attr("y",s).style("opacity",1),B.transition().duration(e).text(z).attr("y",s).style("opacity",1),B.exit().transition().duration(e).attr("y",s).style("opacity",1e-6).remove()}),d3.timer.flush()}var c=1,d=1,e=0,f=null,g=Number,h=a,i=b,j=null;k.width=function(a){if(!arguments.length)return c;c=a;return k},k.height=function(a){if(!arguments.length)return d;d=a;return k},k.tickFormat=function(a){if(!arguments.length)return j;j=a;return k},k.duration=function(a){if(!arguments.length)return e;e=a;return k},k.domain=function(a){if(!arguments.length)return f;f=a==null?a:d3.functor(a);return k},k.value=function(a){if(!arguments.length)return g;g=a;return k},k.whiskers=function(a){if(!arguments.length)return h;h=a;return k},k.quartiles=function(a){if(!arguments.length)return i;i=a;return k};return k},d3.chart.bullet=function(){function o(a){a.each(function(a,c){var d=i.call(this,a,c).slice().sort(d3.descending),e=j.call(this,a,c).slice().sort(d3.descending),o=k.call(this,a,c).slice().sort(d3.descending),p=d3.select(this),q=d3.scale.linear().domain([0,Math.max(d[0],e[0],o[0])]).range(b?[l,0]:[0,l]),r=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(q.range());this.__chart__=q;var s=g(r),t=g(q),u=p.selectAll("rect.range").data(d);u.enter().append("svg:rect").attr("class",function(a,b){return"range s"+b}).attr("width",s).attr("height",m).attr("x",b?r:0).transition().duration(h).attr("width",t).attr("x",b?q:0),u.transition().duration(h).attr("x",b?q:0).attr("width",t).attr("height",m);var v=p.selectAll("rect.measure").data(o);v.enter().append("svg:rect").attr("class",function(a,b){return"measure s"+b}).attr("width",s).attr("height",m/3).attr("x",b?r:0).attr("y",m/3).transition().duration(h).attr("width",t).attr("x",b?q:0),v.transition().duration(h).attr("width",t).attr("height",m/3).attr("x",b?q:0).attr("y",m/3);var w=p.selectAll("line.marker").data(e);w.enter().append("svg:line").attr("class","marker").attr("x1",r).attr("x2",r).attr("y1",m/6).attr("y2",m*5/6).transition().duration(h).attr("x1",q).attr("x2",q),w.transition().duration(h).attr("x1",q).attr("x2",q).attr("y1",m/6).attr("y2",m*5/6);var x=n||q.tickFormat(8),y=p.selectAll("g.tick").data(q.ticks(8),function(a){return this.textContent||x(a)}),z=y.enter().append("svg:g").attr("class","tick").attr("transform",f(r)).style("opacity",1e-6);z.append("svg:line").attr("y1",m).attr("y2",m*7/6),z.append("svg:text").attr("text-anchor","middle").attr("dy","1em").attr("y",m*7/6).text(x),z.transition().duration(h).attr("transform",f(q)).style("opacity",1);var A=y.transition().duration(h).attr("transform",f(q)).style("opacity",1);A.select("line").attr("y1",m).attr("y2",m*7/6),A.select("text").attr("y",m*7/6),y.exit().transition().duration(h).attr("transform",f(q)).style("opacity",1e-6).remove()}),d3.timer.flush()}var a="left",b=!1,h=0,i=c,j=d,k=e,l=380,m=30,n=null;o.orient=function(c){if(!arguments.length)return a;a=c,b=a=="right"||a=="bottom";return o},o.ranges=function(a){if(!arguments.length)return i;i=a;return o},o.markers=function(a){if(!arguments.length)return j;j=a;return o},o.measures=function(a){if(!arguments.length)return k;k=a;return o},o.width=function(a){if(!arguments.length)return l;l=a;return o},o.height=function(a){if(!arguments.length)return m;m=a;return o},o.tickFormat=function(a){if(!arguments.length)return n;n=a;return o},o.duration=function(a){if(!arguments.length)return h;h=a;return o};return o},d3.chart.horizon=function(){function n(j){j.each(function(j,k){var n=d3.select(this),o=2*a+1,p=Infinity,q=-Infinity,r=-Infinity,s,t,u,v=j.map(function(a,b){var c=d.call(this,a,b),f=e.call(this,a,b);c<p&&(p=c),c>q&&(q=c),-f>r&&(r=-f),f>r&&(r=f);return[c,f]}),z=d3.scale.linear().domain([p,q]).range([0,f]),A=d3.scale.linear().domain([0,r]).range([0,g*a]);this.__chart__?(s=this.__chart__.x,t=this.__chart__.y,u=this.__chart__.id):(s=d3.scale.linear().domain([0,Infinity]).range(z.range()),t=d3.scale.linear().domain([0,Infinity]).range(A.range()),u=++i);var B=n.selectAll("defs").data([v]),C=B.enter().append("svg:defs");C.append("svg:clipPath").attr("id","d3_chart_horizon_clip"+u).append("svg:rect").attr("width",f).attr("height",g),B.select("rect").transition().duration(l).attr("width",f).attr("height",g),C.append("svg:path").attr("id","d3_chart_horizon_path"+u).attr("d",h.interpolate(c).x(function(a){return s(a[0])}).y0(g*a).y1(function(b){return g*a-t(b[1])})).transition().duration(l).attr("d",h.x(function(a){return z(a[0])}).y1(function(b){return g*a-A(b[1])})),B.select("path").transition().duration(l).attr("d",h),n.selectAll("g").data([null]).enter().append("svg:g").attr("clip-path","url(#d3_chart_horizon_clip"+u+")");var D=b=="offset"?function(b){return"translate(0,"+(b+(b<0)-a)*g+")"}:function(b){return(b<0?"scale(1,-1)":"")+"translate(0,"+(b-a)*g+")"},E=n.select("g").selectAll("use").data(d3.range(-1,-a-1,-1).concat(d3.range(1,a+1)),Number);E.enter().append("svg:use").attr("xlink:href","#d3_chart_horizon_path"+u).attr("transform",function(a){return D(a+(a>0?1:-1))}).style("fill",m).transition().duration(l).attr("transform",D),E.transition().duration(l).attr("transform",D).style("fill",m),E.exit().transition().duration(l).attr("transform",D).remove(),this.__chart__={x:z,y:A,id:u}}),d3.timer.flush()}var a=1,b="offset",c="linear",d=j,e=k,f=960,g=40,l=0,m=d3.scale.linear().domain([-1,0,1]).range(["#d62728","#fff","#1f77b4"]);n.duration=function(a){if(!arguments.length)return l;l=+a;return n},n.bands=function(b){if(!arguments.length)return a;a=+b,m.domain([-a,0,a]);return n},n.mode=function(a){if(!arguments.length)return b;b=a+"";return n},n.colors=function(a){if(!arguments.length)return m.range();m.range(a);return n},n.interpolate=function(a){if(!arguments.length)return c;c=a+"";return n},n.x=function(a){if(!arguments.length)return d;d=a;return n},n.y=function(a){if(!arguments.length)return e;e=a;return n},n.width=function(a){if(!arguments.length)return f;f=+a;return n},n.height=function(a){if(!arguments.length)return g;g=+a;return n};return n};var h=d3.svg.area(),i=0;d3.chart.qq=function(){function i(i){i.each(function(i,j){var k=d3.select(this),m=l(f,g.call(this,i,j)),n=l(f,h.call(this,i,j)),o=d&&d.call(this,i,j)||[d3.min(m),d3.max(m)],p=d&&d.call(this,i,j)||[d3.min(n),d3.max(n)],q,r,s=d3.scale.linear().domain(o).range([0,a]),t=d3.scale.linear().domain(p).range([b,0]);this.__chart__?(q=this.__chart__.x,r=this.__chart__.y):(q=d3.scale.linear().domain([0,Infinity]).range(s.range()),r=d3.scale.linear().domain([0,Infinity]).range(t.range())),this.__chart__={x:s,y:t};var u=k.selectAll("line.diagonal").data([null]);u.enter().append("svg:line").attr("class","diagonal").attr("x1",s(p[0])).attr("y1",t(o[0])).attr("x2",s(p[1])).attr("y2",t(o[1])),u.transition().duration(c).attr("x1",s(p[0])).attr("y1",t(o[0])).attr("x2",s(p[1])).attr("y2",t(o[1]));var v=k.selectAll("circle").data(d3.range(f).map(function(a){return{x:m[a],y:n[a]}}));v.enter().append("svg:circle").attr("class","quantile").attr("r",4.5).attr("cx",function(a){return q(a.x)}).attr("cy",function(a){return r(a.y)}).style("opacity",1e-6).transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1),v.transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1),v.exit().transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1e-6).remove();var w=e||s.tickFormat(4),z=e||t.tickFormat(4),A=function(a){return"translate("+s(a)+","+b+")"},B=function(a){return"translate(0,"+t(a)+")"},C=k.selectAll("g.x.tick").data(s.ticks(4),function(a){return this.textContent||w(a)}),D=C.enter().append("svg:g").attr("class","x tick").attr("transform",function(a){return"translate("+q(a)+","+b+")"}).style("opacity",1e-6);D.append("svg:line").attr("y1",0).attr("y2",-6),D.append("svg:text").attr("text-anchor","middle").attr("dy","1em").text(w),D.transition().duration(c).attr("transform",A).style("opacity",1),C.transition().duration(c).attr("transform",A).style("opacity",1),C.exit().transition().duration(c).attr("transform",A).style("opacity",1e-6).remove();var E=k.selectAll("g.y.tick").data(t.ticks(4),function(a){return this.textContent||z(a)}),F=E.enter().append("svg:g").attr("class","y tick").attr("transform",function(a){return"translate(0,"+r(a)+")"}).style("opacity",1e-6);F.append("svg:line").attr("x1",0).attr("x2",6),F.append("svg:text").attr("text-anchor","end").attr("dx","-.5em").attr("dy",".3em").text(z),F.transition().duration(c).attr("transform",B).style("opacity",1),E.transition().duration(c).attr("transform",B).style("opacity",1),E.exit().transition().duration(c).attr("transform",B).style("opacity",1e-6).remove()})}var a=1,b=1,c=0,d=null,e=null,f=100,g=m,h=n;i.width=function(b){if(!arguments.length)return a;a=b;return i},i.height=function(a){if(!arguments.length)return b;b=a;return i},i.duration=function(a){if(!arguments.length)return c;c=a;return i},i.domain=function(a){if(!arguments.length)return d;d=a==null?a:d3.functor(a);return i},i.count=function(a){if(!arguments.length)return f;f=a;return i},i.x=function(a){if(!arguments.length)return g;g=a;return i},i.y=function(a){if(!arguments.length)return h;h=a;return i},i.tickFormat=function(a){if(!arguments.length)return e;e=a;return i};return i}})()
Index: /Dev/trunk/d3/d3.csv.js
===================================================================
--- /Dev/trunk/d3/d3.csv.js	(revision 76)
+++ /Dev/trunk/d3/d3.csv.js	(revision 76)
@@ -0,0 +1,92 @@
+(function(){d3.csv = function(url, callback) {
+  d3.text(url, "text/csv", function(text) {
+    callback(text && d3.csv.parse(text));
+  });
+};
+d3.csv.parse = function(text) {
+  var header;
+  return d3.csv.parseRows(text, function(row, i) {
+    if (i) {
+      var o = {}, j = -1, m = header.length;
+      while (++j < m) o[header[j]] = row[j];
+      return o;
+    } else {
+      header = row;
+      return null;
+    }
+  });
+};
+
+d3.csv.parseRows = function(text, f) {
+  var EOL = {}, // sentinel value for end-of-line
+      EOF = {}, // sentinel value for end-of-file
+      rows = [], // output rows
+      re = /\r\n|[,\r\n]/g, // field separator regex
+      n = 0, // the current line number
+      t, // the current token
+      eol; // is the current token followed by EOL?
+
+  re.lastIndex = 0; // work-around bug in FF 3.6
+
+  /** @private Returns the next token. */
+  function token() {
+    if (re.lastIndex === text.length) return EOF; // special case: end of file
+    if (eol) { eol = false; return EOL; } // special case: end of line
+
+    // special case: quotes
+    var j = re.lastIndex;
+    if (text.charCodeAt(j) === 34) {
+      var i = j;
+      while (i++ < text.length) {
+        if (text.charCodeAt(i) === 34) {
+          if (text.charCodeAt(i + 1) !== 34) break;
+          i++;
+        }
+      }
+      re.lastIndex = i + 2;
+      var c = text.charCodeAt(i + 1);
+      if (c === 13) {
+        eol = true;
+        if (text.charCodeAt(i + 2) === 10) re.lastIndex++;
+      } else if (c === 10) {
+        eol = true;
+      }
+      return text.substring(j + 1, i).replace(/""/g, "\"");
+    }
+
+    // common case
+    var m = re.exec(text);
+    if (m) {
+      eol = m[0].charCodeAt(0) !== 44;
+      return text.substring(j, m.index);
+    }
+    re.lastIndex = text.length;
+    return text.substring(j);
+  }
+
+  while ((t = token()) !== EOF) {
+    var a = [];
+    while ((t !== EOL) && (t !== EOF)) {
+      a.push(t);
+      t = token();
+    }
+    if (f && !(a = f(a, n++))) continue;
+    rows.push(a);
+  }
+
+  return rows;
+};
+d3.csv.format = function(rows) {
+  return rows.map(d3_csv_formatRow).join("\n");
+};
+
+function d3_csv_formatRow(row) {
+  return row.map(d3_csv_formatValue).join(",");
+}
+
+function d3_csv_formatValue(text) {
+  return /[",\n]/.test(text)
+      ? "\"" + text.replace(/\"/g, "\"\"") + "\""
+      : text;
+}
+})();
Index: /Dev/trunk/d3/d3.csv.min.js
===================================================================
--- /Dev/trunk/d3/d3.csv.min.js	(revision 76)
+++ /Dev/trunk/d3/d3.csv.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){function b(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}function a(a){return a.map(b).join(",")}d3.csv=function(a,b){d3.text(a,"text/csv",function(a){b(a&&d3.csv.parse(a))})},d3.csv.parse=function(a){var b;return d3.csv.parseRows(a,function(a,c){if(c){var d={},e=-1,f=b.length;while(++e<f)d[b[e]]=a[e];return d}b=a;return null})},d3.csv.parseRows=function(a,b){function j(){if(f.lastIndex===a.length)return d;if(i){i=!1;return c}var b=f.lastIndex;if(a.charCodeAt(b)===34){var e=b;while(e++<a.length)if(a.charCodeAt(e)===34){if(a.charCodeAt(e+1)!==34)break;e++}f.lastIndex=e+2;var g=a.charCodeAt(e+1);g===13?(i=!0,a.charCodeAt(e+2)===10&&f.lastIndex++):g===10&&(i=!0);return a.substring(b+1,e).replace(/""/g,'"')}var h=f.exec(a);if(h){i=h[0].charCodeAt(0)!==44;return a.substring(b,h.index)}f.lastIndex=a.length;return a.substring(b)}var c={},d={},e=[],f=/\r\n|[,\r\n]/g,g=0,h,i;f.lastIndex=0;while((h=j())!==d){var k=[];while(h!==c&&h!==d)k.push(h),h=j();if(b&&!(k=b(k,g++)))continue;e.push(k)}return e},d3.csv.format=function(b){return b.map(a).join("\n")}})()
Index: /Dev/trunk/d3/d3.geo.js
===================================================================
--- /Dev/trunk/d3/d3.geo.js	(revision 76)
+++ /Dev/trunk/d3/d3.geo.js	(revision 76)
@@ -0,0 +1,566 @@
+(function(){d3.geo = {};
+// TODO clip input coordinates on opposite hemisphere
+d3.geo.azimuthal = function() {
+  var mode = "orthographic", // or stereographic
+      origin,
+      scale = 200,
+      translate = [480, 250],
+      x0,
+      y0,
+      cy0,
+      sy0;
+
+  function azimuthal(coordinates) {
+    var x1 = coordinates[0] * d3_radians - x0,
+        y1 = coordinates[1] * d3_radians,
+        cx1 = Math.cos(x1),
+        sx1 = Math.sin(x1),
+        cy1 = Math.cos(y1),
+        sy1 = Math.sin(y1),
+        k = mode == "stereographic" ? 1 / (1 + sy0 * sy1 + cy0 * cy1 * cx1) : 1,
+        x = k * cy1 * sx1,
+        y = k * (sy0 * cy1 * cx1 - cy0 * sy1);
+    return [
+      scale * x + translate[0],
+      scale * y + translate[1]
+    ];
+  }
+
+  azimuthal.mode = function(x) {
+    if (!arguments.length) return mode;
+    mode = x;
+    return azimuthal;
+  };
+
+  azimuthal.origin = function(x) {
+    if (!arguments.length) return origin;
+    origin = x;
+    x0 = origin[0] * d3_radians;
+    y0 = origin[1] * d3_radians;
+    cy0 = Math.cos(y0);
+    sy0 = Math.sin(y0);
+    return azimuthal;
+  };
+
+  azimuthal.scale = function(x) {
+    if (!arguments.length) return scale;
+    scale = +x;
+    return azimuthal;
+  };
+
+  azimuthal.translate = function(x) {
+    if (!arguments.length) return translate;
+    translate = [+x[0], +x[1]];
+    return azimuthal;
+  };
+
+  return azimuthal.origin([0, 0]);
+};
+// Derived from Tom Carden's Albers implementation for Protovis.
+// http://gist.github.com/476238
+// http://mathworld.wolfram.com/AlbersEqual-AreaConicProjection.html
+
+d3.geo.albers = function() {
+  var origin = [-98, 38],
+      parallels = [29.5, 45.5],
+      scale = 1000,
+      translate = [480, 250],
+      lng0, // d3_radians * origin[0]
+      n,
+      C,
+      p0;
+
+  function albers(coordinates) {
+    var t = n * (d3_radians * coordinates[0] - lng0),
+        p = Math.sqrt(C - 2 * n * Math.sin(d3_radians * coordinates[1])) / n;
+    return [
+      scale * p * Math.sin(t) + translate[0],
+      scale * (p * Math.cos(t) - p0) + translate[1]
+    ];
+  }
+
+  function reload() {
+    var phi1 = d3_radians * parallels[0],
+        phi2 = d3_radians * parallels[1],
+        lat0 = d3_radians * origin[1],
+        s = Math.sin(phi1),
+        c = Math.cos(phi1);
+    lng0 = d3_radians * origin[0];
+    n = .5 * (s + Math.sin(phi2));
+    C = c * c + 2 * n * s;
+    p0 = Math.sqrt(C - 2 * n * Math.sin(lat0)) / n;
+    return albers;
+  }
+
+  albers.origin = function(x) {
+    if (!arguments.length) return origin;
+    origin = [+x[0], +x[1]];
+    return reload();
+  };
+
+  albers.parallels = function(x) {
+    if (!arguments.length) return parallels;
+    parallels = [+x[0], +x[1]];
+    return reload();
+  };
+
+  albers.scale = function(x) {
+    if (!arguments.length) return scale;
+    scale = +x;
+    return albers;
+  };
+
+  albers.translate = function(x) {
+    if (!arguments.length) return translate;
+    translate = [+x[0], +x[1]];
+    return albers;
+  };
+
+  return reload();
+};
+
+// A composite projection for the United States, 960x500. 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
+// TODO allow the composite projection to be rescaled?
+d3.geo.albersUsa = function() {
+  var lower48 = d3.geo.albers();
+
+  var alaska = d3.geo.albers()
+      .origin([-160, 60])
+      .parallels([55, 65]);
+
+  var hawaii = d3.geo.albers()
+      .origin([-160, 20])
+      .parallels([8, 18]);
+
+  var puertoRico = d3.geo.albers()
+      .origin([-60, 10])
+      .parallels([8, 18]);
+
+  function albersUsa(coordinates) {
+    var lon = coordinates[0],
+        lat = coordinates[1];
+    return (lat < 25
+        ? (lon < -100 ? hawaii : puertoRico)
+        : (lat > 50 ? alaska : lower48))(coordinates);
+  }
+
+  albersUsa.scale = function(x) {
+    if (!arguments.length) return lower48.scale();
+    lower48.scale(x);
+    alaska.scale(x * .6);
+    hawaii.scale(x);
+    puertoRico.scale(x * 1.5);
+    return albersUsa.translate(lower48.translate());
+  };
+
+  albersUsa.translate = function(x) {
+    if (!arguments.length) return lower48.translate();
+    var dz = lower48.scale() / 1000,
+        dx = x[0],
+        dy = x[1];
+    lower48.translate(x);
+    alaska.translate([dx - 400 * dz, dy + 170 * dz]);
+    hawaii.translate([dx - 190 * dz, dy + 200 * dz]);
+    puertoRico.translate([dx + 580 * dz, dy + 430 * dz]);
+    return albersUsa;
+  };
+
+  return albersUsa.scale(lower48.scale());
+};
+
+var d3_radians = Math.PI / 180;
+d3.geo.mercator = function() {
+  var scale = 500,
+      translate = [480, 250];
+
+  function mercator(coordinates) {
+    var x = (coordinates[0]) / 360,
+        y = (-180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + coordinates[1] * Math.PI / 360))) / 360;
+    return [
+      scale * x + translate[0],
+      scale * Math.max(-.5, Math.min(.5, y)) + translate[1]
+    ];
+  }
+
+  mercator.scale = function(x) {
+    if (!arguments.length) return scale;
+    scale = +x;
+    return mercator;
+  };
+
+  mercator.translate = function(x) {
+    if (!arguments.length) return translate;
+    translate = [+x[0], +x[1]];
+    return mercator;
+  };
+
+  return mercator;
+};
+/**
+ * Returns a function that, given a GeoJSON object (e.g., a feature), returns
+ * the corresponding SVG path. The function can be customized by overriding the
+ * projection. Point features are mapped to circles with a default radius of
+ * 4.5px; the radius can be specified either as a constant or a function that
+ * is evaluated per object.
+ */
+d3.geo.path = function() {
+  var pointRadius = 4.5,
+      pointCircle = d3_path_circle(pointRadius),
+      projection = d3.geo.albersUsa();
+
+  function path(d, i) {
+    if (typeof pointRadius === "function") {
+      pointCircle = d3_path_circle(pointRadius.apply(this, arguments));
+    }
+    return d3_geo_pathType(pathTypes, d);
+  }
+
+  function project(coordinates) {
+    return projection(coordinates).join(",");
+  }
+
+  var pathTypes = {
+
+    FeatureCollection: function(f) {
+      var path = [],
+          features = f.features,
+          i = -1, // features.index
+          n = features.length;
+      while (++i < n) path.push(d3_geo_pathType(pathTypes, features[i].geometry));
+      return path.join("");
+    },
+
+    Feature: function(f) {
+      return d3_geo_pathType(pathTypes, f.geometry);
+    },
+
+    Point: function(o) {
+      return "M" + project(o.coordinates) + pointCircle;
+    },
+
+    MultiPoint: function(o) {
+      var path = [],
+          coordinates = o.coordinates,
+          i = -1, // coordinates.index
+          n = coordinates.length;
+      while (++i < n) path.push("M", project(coordinates[i]), pointCircle);
+      return path.join("");
+    },
+
+    LineString: function(o) {
+      var path = ["M"],
+          coordinates = o.coordinates,
+          i = -1, // coordinates.index
+          n = coordinates.length;
+      while (++i < n) path.push(project(coordinates[i]), "L");
+      path.pop();
+      return path.join("");
+    },
+
+    MultiLineString: function(o) {
+      var path = [],
+          coordinates = o.coordinates,
+          i = -1, // coordinates.index
+          n = coordinates.length,
+          subcoordinates, // coordinates[i]
+          j, // subcoordinates.index
+          m; // subcoordinates.length
+      while (++i < n) {
+        subcoordinates = coordinates[i];
+        j = -1;
+        m = subcoordinates.length;
+        path.push("M");
+        while (++j < m) path.push(project(subcoordinates[j]), "L");
+        path.pop();
+      }
+      return path.join("");
+    },
+
+    Polygon: function(o) {
+      var path = [],
+          coordinates = o.coordinates,
+          i = -1, // coordinates.index
+          n = coordinates.length,
+          subcoordinates, // coordinates[i]
+          j, // subcoordinates.index
+          m; // subcoordinates.length
+      while (++i < n) {
+        subcoordinates = coordinates[i];
+        j = -1;
+        m = subcoordinates.length;
+        path.push("M");
+        while (++j < m) path.push(project(subcoordinates[j]), "L");
+        path[path.length - 1] = "Z";
+      }
+      return path.join("");
+    },
+
+    MultiPolygon: function(o) {
+      var path = [],
+          coordinates = o.coordinates,
+          i = -1, // coordinates index
+          n = coordinates.length,
+          subcoordinates, // coordinates[i]
+          j, // subcoordinates index
+          m, // subcoordinates.length
+          subsubcoordinates, // subcoordinates[j]
+          k, // subsubcoordinates index
+          p; // subsubcoordinates.length
+      while (++i < n) {
+        subcoordinates = coordinates[i];
+        j = -1;
+        m = subcoordinates.length;
+        while (++j < m) {
+          subsubcoordinates = subcoordinates[j];
+          k = -1;
+          p = subsubcoordinates.length - 1;
+          path.push("M");
+          while (++k < p) path.push(project(subsubcoordinates[k]), "L");
+          path[path.length - 1] = "Z";
+        }
+      }
+      return path.join("");
+    },
+
+    GeometryCollection: function(o) {
+      var path = [],
+          geometries = o.geometries,
+          i = -1, // geometries index
+          n = geometries.length;
+      while (++i < n) path.push(d3_geo_pathType(pathTypes, geometries[i]));
+      return path.join("");
+    }
+
+  };
+
+  var areaTypes = {
+
+    FeatureCollection: function(f) {
+      var area = 0,
+          features = f.features,
+          i = -1, // features.index
+          n = features.length;
+      while (++i < n) area += d3_geo_pathType(areaTypes, features[i]);
+      return area;
+    },
+
+    Feature: function(f) {
+      return d3_geo_pathType(areaTypes, f.geometry);
+    },
+
+    Point: d3_geo_pathZero,
+    MultiPoint: d3_geo_pathZero,
+    LineString: d3_geo_pathZero,
+    MultiLineString: d3_geo_pathZero,
+
+    Polygon: function(o) {
+      return polygonArea(o.coordinates);
+    },
+
+    MultiPolygon: function(o) {
+      var sum = 0,
+          coordinates = o.coordinates,
+          i = -1, // coordinates index
+          n = coordinates.length;
+      while (++i < n) sum += polygonArea(coordinates[i]);
+      return sum;
+    },
+
+    GeometryCollection: function(o) {
+      var sum = 0,
+          geometries = o.geometries,
+          i = -1, // geometries index
+          n = geometries.length;
+      while (++i < n) sum += d3_geo_pathType(areaTypes, geometries[i]);
+      return sum;
+    }
+
+  };
+
+  function polygonArea(coordinates) {
+    var sum = area(coordinates[0]), // exterior ring
+        i = 0, // coordinates.index
+        n = coordinates.length;
+    while (++i < n) sum -= area(coordinates[i]); // holes
+    return sum;
+  }
+
+  function polygonCentroid(coordinates) {
+    var polygon = d3.geom.polygon(coordinates[0].map(projection)), // exterior ring
+        centroid = polygon.centroid(1),
+        x = centroid[0],
+        y = centroid[1],
+        z = Math.abs(polygon.area()),
+        i = 0, // coordinates index
+        n = coordinates.length;
+    while (++i < n) {
+      polygon = d3.geom.polygon(coordinates[i].map(projection)); // holes
+      centroid = polygon.centroid(1);
+      x -= centroid[0];
+      y -= centroid[1];
+      z -= Math.abs(polygon.area());
+    }
+    return [x, y, 6 * z]; // weighted centroid
+  }
+
+  var centroidTypes = {
+
+    // TODO FeatureCollection
+    // TODO Point
+    // TODO MultiPoint
+    // TODO LineString
+    // TODO MultiLineString
+    // TODO GeometryCollection
+
+    Feature: function(f) {
+      return d3_geo_pathType(centroidTypes, f.geometry);
+    },
+
+    Polygon: function(o) {
+      var centroid = polygonCentroid(o.coordinates);
+      return [centroid[0] / centroid[2], centroid[1] / centroid[2]];
+    },
+
+    MultiPolygon: function(o) {
+      var area = 0,
+          coordinates = o.coordinates,
+          centroid,
+          x = 0,
+          y = 0,
+          z = 0,
+          i = -1, // coordinates index
+          n = coordinates.length;
+      while (++i < n) {
+        centroid = polygonCentroid(coordinates[i]);
+        x += centroid[0];
+        y += centroid[1];
+        z += centroid[2];
+      }
+      return [x / z, y / z];
+    }
+
+  };
+
+
+  function area(coordinates) {
+    return Math.abs(d3.geom.polygon(coordinates.map(projection)).area());
+  }
+
+  path.projection = function(x) {
+    projection = x;
+    return path;
+  };
+
+  path.area = function(d) {
+    return d3_geo_pathType(areaTypes, d);
+  };
+
+  path.centroid = function(d) {
+    return d3_geo_pathType(centroidTypes, d);
+  };
+
+  path.pointRadius = function(x) {
+    if (typeof x === "function") pointRadius = x;
+    else {
+      pointRadius = +x;
+      pointCircle = d3_path_circle(pointRadius);
+    }
+    return path;
+  };
+
+  return path;
+};
+
+function d3_path_circle(radius) {
+  return "m0," + radius
+      + "a" + radius + "," + radius + " 0 1,1 0," + (-2 * radius)
+      + "a" + radius + "," + radius + " 0 1,1 0," + (+2 * radius)
+      + "z";
+}
+
+function d3_geo_pathZero() {
+  return 0;
+}
+
+function d3_geo_pathType(types, o) {
+  return o && o.type in types ? types[o.type](o) : "";
+}
+/**
+ * Given a GeoJSON object, returns the corresponding bounding box. The bounding
+ * box is represented by a two-dimensional array: [[left, bottom], [right,
+ * top]], where left is the minimum longitude, bottom is the minimum latitude,
+ * right is maximum longitude, and top is the maximum latitude.
+ */
+d3.geo.bounds = function(feature) {
+  var left = Infinity,
+      bottom = Infinity,
+      right = -Infinity,
+      top = -Infinity;
+  d3_geo_bounds(feature, function(x, y) {
+    if (x < left) left = x;
+    if (x > right) right = x;
+    if (y < bottom) bottom = y;
+    if (y > top) top = y;
+  });
+  return [[left, bottom], [right, top]];
+};
+
+function d3_geo_bounds(o, f) {
+  if (o.type in d3_geo_boundsTypes) d3_geo_boundsTypes[o.type](o, f);
+}
+
+var d3_geo_boundsTypes = {
+  Feature: d3_geo_boundsFeature,
+  FeatureCollection: d3_geo_boundsFeatureCollection,
+  LineString: d3_geo_boundsLineString,
+  MultiLineString: d3_geo_boundsMultiLineString,
+  MultiPoint: d3_geo_boundsLineString,
+  MultiPolygon: d3_geo_boundsMultiPolygon,
+  Point: d3_geo_boundsPoint,
+  Polygon: d3_geo_boundsPolygon
+};
+
+function d3_geo_boundsFeature(o, f) {
+  d3_geo_bounds(o.geometry, f);
+}
+
+function d3_geo_boundsFeatureCollection(o, f) {
+  for (var a = o.features, i = 0, n = a.length; i < n; i++) {
+    d3_geo_bounds(a[i].geometry, f);
+  }
+}
+
+function d3_geo_boundsLineString(o, f) {
+  for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+    f.apply(null, a[i]);
+  }
+}
+
+function d3_geo_boundsMultiLineString(o, f) {
+  for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+    for (var b = a[i], j = 0, m = b.length; j < m; j++) {
+      f.apply(null, b[j]);
+    }
+  }
+}
+
+function d3_geo_boundsMultiPolygon(o, f) {
+  for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+    for (var b = a[i][0], j = 0, m = b.length; j < m; j++) {
+      f.apply(null, b[j]);
+    }
+  }
+}
+
+function d3_geo_boundsPoint(o, f) {
+  f.apply(null, o.coordinates);
+}
+
+function d3_geo_boundsPolygon(o, f) {
+  for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) {
+    f.apply(null, a[i]);
+  }
+}
+})();
Index: /Dev/trunk/d3/d3.geo.min.js
===================================================================
--- /Dev/trunk/d3/d3.geo.min.js	(revision 76)
+++ /Dev/trunk/d3/d3.geo.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){function m(a,b){for(var c=a.coordinates[0],d=0,e=c.length;d<e;d++)b.apply(null,c[d])}function l(a,b){b.apply(null,a.coordinates)}function k(a,b){for(var c=a.coordinates,d=0,e=c.length;d<e;d++)for(var f=c[d][0],g=0,h=f.length;g<h;g++)b.apply(null,f[g])}function j(a,b){for(var c=a.coordinates,d=0,e=c.length;d<e;d++)for(var f=c[d],g=0,h=f.length;g<h;g++)b.apply(null,f[g])}function i(a,b){for(var c=a.coordinates,d=0,e=c.length;d<e;d++)b.apply(null,c[d])}function h(a,b){for(var c=a.features,d=0,f=c.length;d<f;d++)e(c[d].geometry,b)}function g(a,b){e(a.geometry,b)}function e(a,b){a.type in f&&f[a.type](a,b)}function d(a,b){return b&&b.type in a?a[b.type](b):""}function c(){return 0}function b(a){return"m0,"+a+"a"+a+","+a+" 0 1,1 0,"+ -2*a+"a"+a+","+a+" 0 1,1 0,"+2*a+"z"}d3.geo={},d3.geo.azimuthal=function(){function j(c){var g=c[0]*a-f,j=c[1]*a,k=Math.cos(g),l=Math.sin(g),m=Math.cos(j),n=Math.sin(j),o=b=="stereographic"?1/(1+i*n+h*m*k):1,p=o*m*l,q=o*(i*m*k-h*n);return[d*p+e[0],d*q+e[1]]}var b="orthographic",c,d=200,e=[480,250],f,g,h,i;j.mode=function(a){if(!arguments.length)return b;b=a;return j},j.origin=function(b){if(!arguments.length)return c;c=b,f=c[0]*a,g=c[1]*a,h=Math.cos(g),i=Math.sin(g);return j},j.scale=function(a){if(!arguments.length)return d;d=+a;return j},j.translate=function(a){if(!arguments.length)return e;e=[+a[0],+a[1]];return j};return j.origin([0,0])},d3.geo.albers=function(){function k(){var d=a*c[0],e=a*c[1],k=a*b[1],l=Math.sin(d),m=Math.cos(d);f=a*b[0],g=.5*(l+Math.sin(e)),h=m*m+2*g*l,i=Math.sqrt(h-2*g*Math.sin(k))/g;return j}function j(b){var c=g*(a*b[0]-f),j=Math.sqrt(h-2*g*Math.sin(a*b[1]))/g;return[d*j*Math.sin(c)+e[0],d*(j*Math.cos(c)-i)+e[1]]}var b=[-98,38],c=[29.5,45.5],d=1e3,e=[480,250],f,g,h,i;j.origin=function(a){if(!arguments.length)return b;b=[+a[0],+a[1]];return k()},j.parallels=function(a){if(!arguments.length)return c;c=[+a[0],+a[1]];return k()},j.scale=function(a){if(!arguments.length)return d;d=+a;return j},j.translate=function(a){if(!arguments.length)return e;e=[+a[0],+a[1]];return j};return k()},d3.geo.albersUsa=function(){function e(e){var f=e[0],g=e[1];return(g<25?f<-100?c:d:g>50?b:a)(e)}var a=d3.geo.albers(),b=d3.geo.albers().origin([-160,60]).parallels([55,65]),c=d3.geo.albers().origin([-160,20]).parallels([8,18]),d=d3.geo.albers().origin([-60,10]).parallels([8,18]);e.scale=function(f){if(!arguments.length)return a.scale();a.scale(f),b.scale(f*.6),c.scale(f),d.scale(f*1.5);return e.translate(a.translate())},e.translate=function(f){if(!arguments.length)return a.translate();var g=a.scale()/1e3,h=f[0],i=f[1];a.translate(f),b.translate([h-400*g,i+170*g]),c.translate([h-190*g,i+200*g]),d.translate([h+580*g,i+430*g]);return e};return e.scale(a.scale())};var a=Math.PI/180;d3.geo.mercator=function(){function c(c){var d=c[0]/360,e=-180/Math.PI*Math.log(Math.tan(Math.PI/4+c[1]*Math.PI/360))/360;return[a*d+b[0],a*Math.max(-0.5,Math.min(.5,e))+b[1]]}var a=500,b=[480,250];c.scale=function(b){if(!arguments.length)return a;a=+b;return c},c.translate=function(a){if(!arguments.length)return b;b=[+a[0],+a[1]];return c};return c},d3.geo.path=function(){function n(a){return Math.abs(d3.geom.polygon(a.map(f)).area())}function l(a){var b=d3.geom.polygon(a[0].map(f)),c=b.centroid(1),d=c[0],e=c[1],g=Math.abs(b.area()),h=0,i=a.length;while(++h<i)b=d3.geom.polygon(a[h].map(f)),c=b.centroid(1),d-=c[0],e-=c[1],g-=Math.abs(b.area());return[d,e,6*g]}function k(a){var b=n(a[0]),c=0,d=a.length;while(++c<d)b-=n(a[c]);return b}function h(a){return f(a).join(",")}function g(c,f){typeof a=="function"&&(e=b(a.apply(this,arguments)));return d(i,c)}var a=4.5,e=b(a),f=d3.geo.albersUsa(),i={FeatureCollection:function(a){var b=[],c=a.features,e=-1,f=c.length;while(++e<f)b.push(d(i,c[e].geometry));return b.join("")},Feature:function(a){return d(i,a.geometry)},Point:function(a){return"M"+h(a.coordinates)+e},MultiPoint:function(a){var b=[],c=a.coordinates,d=-1,f=c.length;while(++d<f)b.push("M",h(c[d]),e);return b.join("")},LineString:function(a){var b=["M"],c=a.coordinates,d=-1,e=c.length;while(++d<e)b.push(h(c[d]),"L");b.pop();return b.join("")},MultiLineString:function(a){var b=[],c=a.coordinates,d=-1,e=c.length,f,g,i;while(++d<e){f=c[d],g=-1,i=f.length,b.push("M");while(++g<i)b.push(h(f[g]),"L");b.pop()}return b.join("")},Polygon:function(a){var b=[],c=a.coordinates,d=-1,e=c.length,f,g,i;while(++d<e){f=c[d],g=-1,i=f.length,b.push("M");while(++g<i)b.push(h(f[g]),"L");b[b.length-1]="Z"}return b.join("")},MultiPolygon:function(a){var b=[],c=a.coordinates,d=-1,e=c.length,f,g,i,j,k,l;while(++d<e){f=c[d],g=-1,i=f.length;while(++g<i){j=f[g],k=-1,l=j.length-1,b.push("M");while(++k<l)b.push(h(j[k]),"L");b[b.length-1]="Z"}}return b.join("")},GeometryCollection:function(a){var b=[],c=a.geometries,e=-1,f=c.length;while(++e<f)b.push(d(i,c[e]));return b.join("")}},j={FeatureCollection:function(a){var b=0,c=a.features,e=-1,f=c.length;while(++e<f)b+=d(j,c[e]);return b},Feature:function(a){return d(j,a.geometry)},Point:c,MultiPoint:c,LineString:c,MultiLineString:c,Polygon:function(a){return k(a.coordinates)},MultiPolygon:function(a){var b=0,c=a.coordinates,d=-1,e=c.length;while(++d<e)b+=k(c[d]);return b},GeometryCollection:function(a){var b=0,c=a.geometries,e=-1,f=c.length;while(++e<f)b+=d(j,c[e]);return b}},m={Feature:function(a){return d(m,a.geometry)},Polygon:function(a){var b=l(a.coordinates);return[b[0]/b[2],b[1]/b[2]]},MultiPolygon:function(a){var b=0,c=a.coordinates,d,e=0,f=0,g=0,h=-1,i=c.length;while(++h<i)d=l(c[h]),e+=d[0],f+=d[1],g+=d[2];return[e/g,f/g]}};g.projection=function(a){f=a;return g},g.area=function(a){return d(j,a)},g.centroid=function(a){return d(m,a)},g.pointRadius=function(c){typeof c=="function"?a=c:(a=+c,e=b(a));return g};return g},d3.geo.bounds=function(a){var b=Infinity,c=Infinity,d=-Infinity,f=-Infinity;e(a,function(a,e){a<b&&(b=a),a>d&&(d=a),e<c&&(c=e),e>f&&(f=e)});return[[b,c],[d,f]]};var f={Feature:g,FeatureCollection:h,LineString:i,MultiLineString:j,MultiPoint:i,MultiPolygon:k,Point:l,Polygon:m}})()
Index: /Dev/trunk/d3/d3.geom.js
===================================================================
--- /Dev/trunk/d3/d3.geom.js	(revision 76)
+++ /Dev/trunk/d3/d3.geom.js	(revision 76)
@@ -0,0 +1,825 @@
+(function(){d3.geom = {};
+/**
+ * Computes a contour for a given input grid function using the <a
+ * href="http://en.wikipedia.org/wiki/Marching_squares">marching
+ * squares</a> algorithm. Returns the contour polygon as an array of points.
+ *
+ * @param grid a two-input function(x, y) that returns true for values
+ * inside the contour and false for values outside the contour.
+ * @param start an optional starting point [x, y] on the grid.
+ * @returns polygon [[x1, y1], [x2, y2], âŠ]
+ */
+d3.geom.contour = function(grid, start) {
+  var s = start || d3_geom_contourStart(grid), // starting point
+      c = [],    // contour polygon
+      x = s[0],  // current x position
+      y = s[1],  // current y position
+      dx = 0,    // next x direction
+      dy = 0,    // next y direction
+      pdx = NaN, // previous x direction
+      pdy = NaN, // previous y direction
+      i = 0;
+
+  do {
+    // determine marching squares index
+    i = 0;
+    if (grid(x-1, y-1)) i += 1;
+    if (grid(x,   y-1)) i += 2;
+    if (grid(x-1, y  )) i += 4;
+    if (grid(x,   y  )) i += 8;
+
+    // determine next direction
+    if (i === 6) {
+      dx = pdy === -1 ? -1 : 1;
+      dy = 0;
+    } else if (i === 9) {
+      dx = 0;
+      dy = pdx === 1 ? -1 : 1;
+    } else {
+      dx = d3_geom_contourDx[i];
+      dy = d3_geom_contourDy[i];
+    }
+
+    // update contour polygon
+    if (dx != pdx && dy != pdy) {
+      c.push([x, y]);
+      pdx = dx;
+      pdy = dy;
+    }
+
+    x += dx;
+    y += dy;
+  } while (s[0] != x || s[1] != y);
+
+  return c;
+};
+
+// lookup tables for marching directions
+var d3_geom_contourDx = [1, 0, 1, 1,-1, 0,-1, 1,0, 0,0,0,-1, 0,-1,NaN],
+    d3_geom_contourDy = [0,-1, 0, 0, 0,-1, 0, 0,1,-1,1,1, 0,-1, 0,NaN];
+
+function d3_geom_contourStart(grid) {
+  var x = 0,
+      y = 0;
+
+  // search for a starting point; begin at origin
+  // and proceed along outward-expanding diagonals
+  while (true) {
+    if (grid(x,y)) {
+      return [x,y];
+    }
+    if (x === 0) {
+      x = y + 1;
+      y = 0;
+    } else {
+      x = x - 1;
+      y = y + 1;
+    }
+  }
+}
+/**
+ * Computes the 2D convex hull of a set of points using Graham's scanning
+ * algorithm. The algorithm has been implemented as described in Cormen,
+ * Leiserson, and Rivest's Introduction to Algorithms. The running time of
+ * this algorithm is O(n log n), where n is the number of input points.
+ *
+ * @param vertices [[x1, y1], [x2, y2], âŠ]
+ * @returns polygon [[x1, y1], [x2, y2], âŠ]
+ */
+d3.geom.hull = function(vertices) {
+  if (vertices.length < 3) return [];
+
+  var len = vertices.length,
+      plen = len - 1,
+      points = [],
+      stack = [],
+      i, j, h = 0, x1, y1, x2, y2, u, v, a, sp;
+
+  // find the starting ref point: leftmost point with the minimum y coord
+  for (i=1; i<len; ++i) {
+    if (vertices[i][1] < vertices[h][1]) {
+      h = i;
+    } else if (vertices[i][1] == vertices[h][1]) {
+      h = (vertices[i][0] < vertices[h][0] ? i : h);
+    }
+  }
+
+  // calculate polar angles from ref point and sort
+  for (i=0; i<len; ++i) {
+    if (i === h) continue;
+    y1 = vertices[i][1] - vertices[h][1];
+    x1 = vertices[i][0] - vertices[h][0];
+    points.push({angle: Math.atan2(y1, x1), index: i});
+  }
+  points.sort(function(a, b) { return a.angle - b.angle; });
+
+  // toss out duplicate angles
+  a = points[0].angle;
+  v = points[0].index;
+  u = 0;
+  for (i=1; i<plen; ++i) {
+    j = points[i].index;
+    if (a == points[i].angle) {
+      // keep angle for point most distant from the reference
+      x1 = vertices[v][0] - vertices[h][0];
+      y1 = vertices[v][1] - vertices[h][1];
+      x2 = vertices[j][0] - vertices[h][0];
+      y2 = vertices[j][1] - vertices[h][1];
+      if ((x1*x1 + y1*y1) >= (x2*x2 + y2*y2)) {
+        points[i].index = -1;
+      } else {
+        points[u].index = -1;
+        a = points[i].angle;
+        u = i;
+        v = j;
+      }
+    } else {
+      a = points[i].angle;
+      u = i;
+      v = j;
+    }
+  }
+
+  // initialize the stack
+  stack.push(h);
+  for (i=0, j=0; i<2; ++j) {
+    if (points[j].index !== -1) {
+      stack.push(points[j].index);
+      i++;
+    }
+  }
+  sp = stack.length;
+
+  // do graham's scan
+  for (; j<plen; ++j) {
+    if (points[j].index === -1) continue; // skip tossed out points
+    while (!d3_geom_hullCCW(stack[sp-2], stack[sp-1], points[j].index, vertices)) {
+      --sp;
+    }
+    stack[sp++] = points[j].index;
+  }
+
+  // construct the hull
+  var poly = [];
+  for (i=0; i<sp; ++i) {
+    poly.push(vertices[stack[i]]);
+  }
+  return poly;
+}
+
+// are three points in counter-clockwise order?
+function d3_geom_hullCCW(i1, i2, i3, v) {
+  var t, a, b, c, d, e, f;
+  t = v[i1]; a = t[0]; b = t[1];
+  t = v[i2]; c = t[0]; d = t[1];
+  t = v[i3]; e = t[0]; f = t[1];
+  return ((f-b)*(c-a) - (d-b)*(e-a)) > 0;
+}
+// Note: requires coordinates to be counterclockwise and convex!
+d3.geom.polygon = function(coordinates) {
+
+  coordinates.area = function() {
+    var i = 0,
+        n = coordinates.length,
+        a = coordinates[n - 1][0] * coordinates[0][1],
+        b = coordinates[n - 1][1] * coordinates[0][0];
+    while (++i < n) {
+      a += coordinates[i - 1][0] * coordinates[i][1];
+      b += coordinates[i - 1][1] * coordinates[i][0];
+    }
+    return (b - a) * .5;
+  };
+
+  coordinates.centroid = function(k) {
+    var i = -1,
+        n = coordinates.length - 1,
+        x = 0,
+        y = 0,
+        a,
+        b,
+        c;
+    if (!arguments.length) k = 1 / (6 * coordinates.area());
+    while (++i < n) {
+      a = coordinates[i];
+      b = coordinates[i + 1];
+      c = a[0] * b[1] - b[0] * a[1];
+      x += (a[0] + b[0]) * c;
+      y += (a[1] + b[1]) * c;
+    }
+    return [x * k, y * k];
+  };
+
+  // The Sutherland-Hodgman clipping algorithm.
+  coordinates.clip = function(subject) {
+    var input,
+        i = -1,
+        n = coordinates.length,
+        j,
+        m,
+        a = coordinates[n - 1],
+        b,
+        c,
+        d;
+    while (++i < n) {
+      input = subject.slice();
+      subject.length = 0;
+      b = coordinates[i];
+      c = input[(m = input.length) - 1];
+      j = -1;
+      while (++j < m) {
+        d = input[j];
+        if (d3_geom_polygonInside(d, a, b)) {
+          if (!d3_geom_polygonInside(c, a, b)) {
+            subject.push(d3_geom_polygonIntersect(c, d, a, b));
+          }
+          subject.push(d);
+        } else if (d3_geom_polygonInside(c, a, b)) {
+          subject.push(d3_geom_polygonIntersect(c, d, a, b));
+        }
+        c = d;
+      }
+      a = b;
+    }
+    return subject;
+  };
+
+  return coordinates;
+};
+
+function d3_geom_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 d3_geom_polygonIntersect(c, d, a, b) {
+  var x1 = c[0], x2 = d[0], x3 = a[0], x4 = b[0],
+      y1 = c[1], y2 = d[1], y3 = a[1], y4 = b[1],
+      x13 = x1 - x3,
+      x21 = x2 - x1,
+      x43 = x4 - x3,
+      y13 = y1 - y3,
+      y21 = y2 - y1,
+      y43 = y4 - y3,
+      ua = (x43 * y13 - y43 * x13) / (y43 * x21 - x43 * y21);
+  return [x1 + ua * x21, y1 + ua * y21];
+}
+// Adapted from Nicolas Garcia Belmonte's JIT implementation:
+// http://blog.thejit.org/2010/02/12/voronoi-tessellation/
+// http://blog.thejit.org/assets/voronoijs/voronoi.js
+// See lib/jit/LICENSE for details.
+
+/**
+ * @param vertices [[x1, y1], [x2, y2], âŠ]
+ * @returns polygons [[[x1, y1], [x2, y2], âŠ], âŠ]
+ */
+d3.geom.voronoi = function(vertices) {
+  var polygons = vertices.map(function() { return []; });
+
+  // Note: we expect the caller to clip the polygons, if needed.
+  d3_voronoi_tessellate(vertices, function(e) {
+    var s1,
+        s2,
+        x1,
+        x2,
+        y1,
+        y2;
+    if (e.a === 1 && e.b >= 0) {
+      s1 = e.ep.r;
+      s2 = e.ep.l;
+    } else {
+      s1 = e.ep.l;
+      s2 = e.ep.r;
+    }
+    if (e.a === 1) {
+      y1 = s1 ? s1.y : -1e6;
+      x1 = e.c - e.b * y1;
+      y2 = s2 ? s2.y : 1e6;
+      x2 = e.c - e.b * y2;
+    } else {
+      x1 = s1 ? s1.x : -1e6;
+      y1 = e.c - e.a * x1;
+      x2 = s2 ? s2.x : 1e6;
+      y2 = e.c - e.a * x2;
+    }
+    var v1 = [x1, y1],
+        v2 = [x2, y2];
+    polygons[e.region.l.index].push(v1, v2);
+    polygons[e.region.r.index].push(v1, v2);
+  });
+
+  // Reconnect the polygon segments into counterclockwise loops.
+  return polygons.map(function(polygon, i) {
+    var cx = vertices[i][0],
+        cy = vertices[i][1];
+    polygon.forEach(function(v) {
+      v.angle = Math.atan2(v[0] - cx, v[1] - cy);
+    });
+    return polygon.sort(function(a, b) {
+      return a.angle - b.angle;
+    }).filter(function(d, i) {
+      return !i || (d.angle - polygon[i - 1].angle > 1e-10);
+    });
+  });
+};
+
+var d3_voronoi_opposite = {"l": "r", "r": "l"};
+
+function d3_voronoi_tessellate(vertices, callback) {
+
+  var Sites = {
+    list: vertices
+      .map(function(v, i) {
+        return {
+          index: i,
+          x: v[0],
+          y: v[1]
+        };
+      })
+      .sort(function(a, b) {
+        return a.y < b.y ? -1
+          : a.y > b.y ? 1
+          : a.x < b.x ? -1
+          : a.x > b.x ? 1
+          : 0;
+      }),
+    bottomSite: null
+  };
+
+  var EdgeList = {
+    list: [],
+    leftEnd: null,
+    rightEnd: null,
+
+    init: function() {
+      EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l");
+      EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l");
+      EdgeList.leftEnd.r = EdgeList.rightEnd;
+      EdgeList.rightEnd.l = EdgeList.leftEnd;
+      EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd);
+    },
+
+    createHalfEdge: function(edge, side) {
+      return {
+        edge: edge,
+        side: side,
+        vertex: null,
+        "l": null,
+        "r": null
+      };
+    },
+
+    insert: function(lb, he) {
+      he.l = lb;
+      he.r = lb.r;
+      lb.r.l = he;
+      lb.r = he;
+    },
+
+    leftBound: function(p) {
+      var he = EdgeList.leftEnd;
+      do {
+        he = he.r;
+      } while (he != EdgeList.rightEnd && Geom.rightOf(he, p));
+      he = he.l;
+      return he;
+    },
+
+    del: function(he) {
+      he.l.r = he.r;
+      he.r.l = he.l;
+      he.edge = null;
+    },
+
+    right: function(he) {
+      return he.r;
+    },
+
+    left: function(he) {
+      return he.l;
+    },
+
+    leftRegion: function(he) {
+      return he.edge == null
+          ? Sites.bottomSite
+          : he.edge.region[he.side];
+    },
+
+    rightRegion: function(he) {
+      return he.edge == null
+          ? Sites.bottomSite
+          : he.edge.region[d3_voronoi_opposite[he.side]];
+    }
+  };
+
+  var Geom = {
+
+    bisect: function(s1, s2) {
+      var newEdge = {
+        region: {"l": s1, "r": s2},
+        ep: {"l": null, "r": null}
+      };
+
+      var dx = s2.x - s1.x,
+          dy = s2.y - s1.y,
+          adx = dx > 0 ? dx : -dx,
+          ady = dy > 0 ? dy : -dy;
+
+      newEdge.c = s1.x * dx + s1.y * dy
+          + (dx * dx + dy * dy) * .5;
+
+      if (adx > ady) {
+        newEdge.a = 1;
+        newEdge.b = dy / dx;
+        newEdge.c /= dx;
+      } else {
+        newEdge.b = 1;
+        newEdge.a = dx / dy;
+        newEdge.c /= dy;
+      }
+
+      return newEdge;
+    },
+
+    intersect: function(el1, el2) {
+      var e1 = el1.edge,
+          e2 = el2.edge;
+      if (!e1 || !e2 || (e1.region.r == e2.region.r)) {
+        return null;
+      }
+      var d = (e1.a * e2.b) - (e1.b * e2.a);
+      if (Math.abs(d) < 1e-10) {
+        return null;
+      }
+      var xint = (e1.c * e2.b - e2.c * e1.b) / d,
+          yint = (e2.c * e1.a - e1.c * e2.a) / d,
+          e1r = e1.region.r,
+          e2r = e2.region.r,
+          el,
+          e;
+      if ((e1r.y < e2r.y) ||
+         (e1r.y == e2r.y && e1r.x < e2r.x)) {
+        el = el1;
+        e = e1;
+      } else {
+        el = el2;
+        e = e2;
+      }
+      var rightOfSite = (xint >= e.region.r.x);
+      if ((rightOfSite && (el.side === "l")) ||
+        (!rightOfSite && (el.side === "r"))) {
+        return null;
+      }
+      return {
+        x: xint,
+        y: yint
+      };
+    },
+
+    rightOf: function(he, p) {
+      var e = he.edge,
+          topsite = e.region.r,
+          rightOfSite = (p.x > topsite.x);
+
+      if (rightOfSite && (he.side === "l")) {
+        return 1;
+      }
+      if (!rightOfSite && (he.side === "r")) {
+        return 0;
+      }
+      if (e.a === 1) {
+        var dyp = p.y - topsite.y,
+            dxp = p.x - topsite.x,
+            fast = 0,
+            above = 0;
+
+        if ((!rightOfSite && (e.b < 0)) ||
+          (rightOfSite && (e.b >= 0))) {
+          above = fast = (dyp >= e.b * dxp);
+        } else {
+          above = ((p.x + p.y * e.b) > e.c);
+          if (e.b < 0) {
+            above = !above;
+          }
+          if (!above) {
+            fast = 1;
+          }
+        }
+        if (!fast) {
+          var dxs = topsite.x - e.region.l.x;
+          above = (e.b * (dxp * dxp - dyp * dyp)) <
+            (dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b));
+
+          if (e.b < 0) {
+            above = !above;
+          }
+        }
+      } else /* e.b == 1 */ {
+        var yl = e.c - e.a * p.x,
+            t1 = p.y - yl,
+            t2 = p.x - topsite.x,
+            t3 = yl - topsite.y;
+
+        above = (t1 * t1) > (t2 * t2 + t3 * t3);
+      }
+      return he.side === "l" ? above : !above;
+    },
+
+    endPoint: function(edge, side, site) {
+      edge.ep[side] = site;
+      if (!edge.ep[d3_voronoi_opposite[side]]) return;
+      callback(edge);
+    },
+
+    distance: function(s, t) {
+      var dx = s.x - t.x,
+          dy = s.y - t.y;
+      return Math.sqrt(dx * dx + dy * dy);
+    }
+  };
+
+  var EventQueue = {
+    list: [],
+
+    insert: function(he, site, offset) {
+      he.vertex = site;
+      he.ystar = site.y + offset;
+      for (var i=0, list=EventQueue.list, l=list.length; i<l; i++) {
+        var next = list[i];
+        if (he.ystar > next.ystar ||
+          (he.ystar == next.ystar &&
+          site.x > next.vertex.x)) {
+          continue;
+        } else {
+          break;
+        }
+      }
+      list.splice(i, 0, he);
+    },
+
+    del: function(he) {
+      for (var i=0, ls=EventQueue.list, l=ls.length; i<l && (ls[i] != he); ++i) {}
+      ls.splice(i, 1);
+    },
+
+    empty: function() { return EventQueue.list.length === 0; },
+
+    nextEvent: function(he) {
+      for (var i=0, ls=EventQueue.list, l=ls.length; i<l; ++i) {
+        if (ls[i] == he) return ls[i+1];
+      }
+      return null;
+    },
+
+    min: function() {
+      var elem = EventQueue.list[0];
+      return {
+        x: elem.vertex.x,
+        y: elem.ystar
+      };
+    },
+
+    extractMin: function() {
+      return EventQueue.list.shift();
+    }
+  };
+
+  EdgeList.init();
+  Sites.bottomSite = Sites.list.shift();
+
+  var newSite = Sites.list.shift(), newIntStar;
+  var lbnd, rbnd, llbnd, rrbnd, bisector;
+  var bot, top, temp, p, v;
+  var e, pm;
+
+  while (true) {
+    if (!EventQueue.empty()) {
+      newIntStar = EventQueue.min();
+    }
+    if (newSite && (EventQueue.empty()
+      || newSite.y < newIntStar.y
+      || (newSite.y == newIntStar.y
+      && newSite.x < newIntStar.x))) { //new site is smallest
+      lbnd = EdgeList.leftBound(newSite);
+      rbnd = EdgeList.right(lbnd);
+      bot = EdgeList.rightRegion(lbnd);
+      e = Geom.bisect(bot, newSite);
+      bisector = EdgeList.createHalfEdge(e, "l");
+      EdgeList.insert(lbnd, bisector);
+      p = Geom.intersect(lbnd, bisector);
+      if (p) {
+        EventQueue.del(lbnd);
+        EventQueue.insert(lbnd, p, Geom.distance(p, newSite));
+      }
+      lbnd = bisector;
+      bisector = EdgeList.createHalfEdge(e, "r");
+      EdgeList.insert(lbnd, bisector);
+      p = Geom.intersect(bisector, rbnd);
+      if (p) {
+        EventQueue.insert(bisector, p, Geom.distance(p, newSite));
+      }
+      newSite = Sites.list.shift();
+    } else if (!EventQueue.empty()) { //intersection is smallest
+      lbnd = EventQueue.extractMin();
+      llbnd = EdgeList.left(lbnd);
+      rbnd = EdgeList.right(lbnd);
+      rrbnd = EdgeList.right(rbnd);
+      bot = EdgeList.leftRegion(lbnd);
+      top = EdgeList.rightRegion(rbnd);
+      v = lbnd.vertex;
+      Geom.endPoint(lbnd.edge, lbnd.side, v);
+      Geom.endPoint(rbnd.edge, rbnd.side, v);
+      EdgeList.del(lbnd);
+      EventQueue.del(rbnd);
+      EdgeList.del(rbnd);
+      pm = "l";
+      if (bot.y > top.y) {
+        temp = bot;
+        bot = top;
+        top = temp;
+        pm = "r";
+      }
+      e = Geom.bisect(bot, top);
+      bisector = EdgeList.createHalfEdge(e, pm);
+      EdgeList.insert(llbnd, bisector);
+      Geom.endPoint(e, d3_voronoi_opposite[pm], v);
+      p = Geom.intersect(llbnd, bisector);
+      if (p) {
+        EventQueue.del(llbnd);
+        EventQueue.insert(llbnd, p, Geom.distance(p, bot));
+      }
+      p = Geom.intersect(bisector, rrbnd);
+      if (p) {
+        EventQueue.insert(bisector, p, Geom.distance(p, bot));
+      }
+    } else {
+      break;
+    }
+  }//end while
+
+  for (lbnd = EdgeList.right(EdgeList.leftEnd);
+      lbnd != EdgeList.rightEnd;
+      lbnd = EdgeList.right(lbnd)) {
+    callback(lbnd.edge);
+  }
+}
+/**
+* @param vertices [[x1, y1], [x2, y2], âŠ]
+* @returns triangles [[[x1, y1], [x2, y2], [x3, y3]], âŠ]
+ */
+d3.geom.delaunay = function(vertices) {
+  var edges = vertices.map(function() { return []; }),
+      triangles = [];
+
+  // Use the Voronoi tessellation to determine Delaunay edges.
+  d3_voronoi_tessellate(vertices, function(e) {
+    edges[e.region.l.index].push(vertices[e.region.r.index]);
+  });
+
+  // Reconnect the edges into counterclockwise triangles.
+  edges.forEach(function(edge, i) {
+    var v = vertices[i],
+        cx = v[0],
+        cy = v[1];
+    edge.forEach(function(v) {
+      v.angle = Math.atan2(v[0] - cx, v[1] - cy);
+    });
+    edge.sort(function(a, b) {
+      return a.angle - b.angle;
+    });
+    for (var j = 0, m = edge.length - 1; j < m; j++) {
+      triangles.push([v, edge[j], edge[j + 1]]);
+    }
+  });
+
+  return triangles;
+};
+// Constructs a new quadtree for the specified array of points. A quadtree is a
+// two-dimensional recursive spatial subdivision. This implementation uses
+// square partitions, dividing each square into four equally-sized squares. Each
+// point exists in a unique node; if multiple points are in the same position,
+// some points may be stored on internal nodes rather than leaf nodes. Quadtrees
+// can be used to accelerate various spatial operations, such as the Barnes-Hut
+// approximation for computing n-body forces, or collision detection.
+d3.geom.quadtree = function(points, x1, y1, x2, y2) {
+  var p,
+      i = -1,
+      n = points.length;
+
+  // Type conversion for deprecated API.
+  if (n && isNaN(points[0].x)) points = points.map(d3_geom_quadtreePoint);
+
+  // Allow bounds to be specified explicitly.
+  if (arguments.length < 5) {
+    if (arguments.length === 3) {
+      y2 = x2 = y1;
+      y1 = x1;
+    } else {
+      x1 = y1 = Infinity;
+      x2 = y2 = -Infinity;
+
+      // Compute bounds.
+      while (++i < n) {
+        p = points[i];
+        if (p.x < x1) x1 = p.x;
+        if (p.y < y1) y1 = p.y;
+        if (p.x > x2) x2 = p.x;
+        if (p.y > y2) y2 = p.y;
+      }
+
+      // Squarify the bounds.
+      var dx = x2 - x1,
+          dy = y2 - y1;
+      if (dx > dy) y2 = y1 + dx;
+      else x2 = x1 + dy;
+    }
+  }
+
+  // Recursively inserts the specified point p at the node n or one of its
+  // descendants. The bounds are defined by [x1, x2] and [y1, y2].
+  function insert(n, p, x1, y1, x2, y2) {
+    if (isNaN(p.x) || isNaN(p.y)) return; // ignore invalid points
+    if (n.leaf) {
+      var v = n.point;
+      if (v) {
+        // If the point at this leaf node is at the same position as the new
+        // point we are adding, we leave the point associated with the
+        // internal node while adding the new point to a child node. This
+        // avoids infinite recursion.
+        if ((Math.abs(v.x - p.x) + Math.abs(v.y - p.y)) < .01) {
+          insertChild(n, p, x1, y1, x2, y2);
+        } else {
+          n.point = null;
+          insertChild(n, v, x1, y1, x2, y2);
+          insertChild(n, p, x1, y1, x2, y2);
+        }
+      } else {
+        n.point = p;
+      }
+    } else {
+      insertChild(n, p, x1, y1, x2, y2);
+    }
+  }
+
+  // Recursively inserts the specified point p into a descendant of node n. The
+  // bounds are defined by [x1, x2] and [y1, y2].
+  function insertChild(n, p, x1, y1, x2, y2) {
+    // Compute the split point, and the quadrant in which to insert p.
+    var sx = (x1 + x2) * .5,
+        sy = (y1 + y2) * .5,
+        right = p.x >= sx,
+        bottom = p.y >= sy,
+        i = (bottom << 1) + right;
+
+    // Recursively insert into the child node.
+    n.leaf = false;
+    n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
+
+    // Update the bounds as we recurse.
+    if (right) x1 = sx; else x2 = sx;
+    if (bottom) y1 = sy; else y2 = sy;
+    insert(n, p, x1, y1, x2, y2);
+  }
+
+  // Create the root node.
+  var root = d3_geom_quadtreeNode();
+
+  root.add = function(p) {
+    insert(root, p, x1, y1, x2, y2);
+  };
+
+  root.visit = function(f) {
+    d3_geom_quadtreeVisit(f, root, x1, y1, x2, y2);
+  };
+
+  // Insert all points.
+  points.forEach(root.add);
+  return root;
+};
+
+function d3_geom_quadtreeNode() {
+  return {
+    leaf: true,
+    nodes: [],
+    point: null
+  };
+}
+
+function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
+  if (!f(node, x1, y1, x2, y2)) {
+    var sx = (x1 + x2) * .5,
+        sy = (y1 + y2) * .5,
+        children = node.nodes;
+    if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
+    if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
+    if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
+    if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
+  }
+}
+
+function d3_geom_quadtreePoint(p) {
+  return {
+    x: p[0],
+    y: p[1]
+  };
+}
+})();
Index: /Dev/trunk/d3/d3.geom.min.js
===================================================================
--- /Dev/trunk/d3/d3.geom.min.js	(revision 76)
+++ /Dev/trunk/d3/d3.geom.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){function k(a){return{x:a[0],y:a[1]}}function j(a,b,c,d,e,f){if(!a(b,c,d,e,f)){var g=(c+e)*.5,h=(d+f)*.5,i=b.nodes;i[0]&&j(a,i[0],c,d,g,h),i[1]&&j(a,i[1],g,d,e,h),i[2]&&j(a,i[2],c,h,g,f),i[3]&&j(a,i[3],g,h,e,f)}}function i(){return{leaf:!0,nodes:[],point:null}}function h(a,b){var c={list:a.map(function(a,b){return{index:b,x:a[0],y:a[1]}}).sort(function(a,b){return a.y<b.y?-1:a.y>b.y?1:a.x<b.x?-1:a.x>b.x?1:0}),bottomSite:null},d={list:[],leftEnd:null,rightEnd:null,init:function(){d.leftEnd=d.createHalfEdge(null,"l"),d.rightEnd=d.createHalfEdge(null,"l"),d.leftEnd.r=d.rightEnd,d.rightEnd.l=d.leftEnd,d.list.unshift(d.leftEnd,d.rightEnd)},createHalfEdge:function(a,b){return{edge:a,side:b,vertex:null,l:null,r:null}},insert:function(a,b){b.l=a,b.r=a.r,a.r.l=b,a.r=b},leftBound:function(a){var b=d.leftEnd;do b=b.r;while(b!=d.rightEnd&&e.rightOf(b,a));b=b.l;return b},del:function(a){a.l.r=a.r,a.r.l=a.l,a.edge=null},right:function(a){return a.r},left:function(a){return a.l},leftRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[a.side]},rightRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[g[a.side]]}},e={bisect:function(a,b){var c={region:{l:a,r:b},ep:{l:null,r:null}},d=b.x-a.x,e=b.y-a.y,f=d>0?d:-d,g=e>0?e:-e;c.c=a.x*d+a.y*e+(d*d+e*e)*.5,f>g?(c.a=1,c.b=e/d,c.c/=d):(c.b=1,c.a=d/e,c.c/=e);return c},intersect:function(a,b){var c=a.edge,d=b.edge;if(!c||!d||c.region.r==d.region.r)return null;var e=c.a*d.b-c.b*d.a;if(Math.abs(e)<1e-10)return null;var f=(c.c*d.b-d.c*c.b)/e,g=(d.c*c.a-c.c*d.a)/e,h=c.region.r,i=d.region.r,j,k;h.y<i.y||h.y==i.y&&h.x<i.x?(j=a,k=c):(j=b,k=d);var l=f>=k.region.r.x;if(l&&j.side==="l"||!l&&j.side==="r")return null;return{x:f,y:g}},rightOf:function(a,b){var c=a.edge,d=c.region.r,e=b.x>d.x;if(e&&a.side==="l")return 1;if(!e&&a.side==="r")return 0;if(c.a===1){var f=b.y-d.y,g=b.x-d.x,h=0,i=0;!e&&c.b<0||e&&c.b>=0?i=h=f>=c.b*g:(i=b.x+b.y*c.b>c.c,c.b<0&&(i=!i),i||(h=1));if(!h){var j=d.x-c.region.l.x;i=c.b*(g*g-f*f)<j*f*(1+2*g/j+c.b*c.b),c.b<0&&(i=!i)}}else{var k=c.c-c.a*b.x,l=b.y-k,m=b.x-d.x,n=k-d.y;i=l*l>m*m+n*n}return a.side==="l"?i:!i},endPoint:function(a,c,d){a.ep[c]=d;!a.ep[g[c]]||b(a)},distance:function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)}},f={list:[],insert:function(a,b,c){a.vertex=b,a.ystar=b.y+c;for(var d=0,e=f.list,g=e.length;d<g;d++){var h=e[d];if(a.ystar>h.ystar||a.ystar==h.ystar&&b.x>h.vertex.x)continue;break}e.splice(d,0,a)},del:function(a){for(var b=0,c=f.list,d=c.length;b<d&&c[b]!=a;++b);c.splice(b,1)},empty:function(){return f.list.length===0},nextEvent:function(a){for(var b=0,c=f.list,d=c.length;b<d;++b)if(c[b]==a)return c[b+1];return null},min:function(){var a=f.list[0];return{x:a.vertex.x,y:a.ystar}},extractMin:function(){return f.list.shift()}};d.init(),c.bottomSite=c.list.shift();var h=c.list.shift(),i,j,k,l,m,n,o,p,q,r,s,t,u;for(;;){f.empty()||(i=f.min());if(h&&(f.empty()||h.y<i.y||h.y==i.y&&h.x<i.x))j=d.leftBound(h),k=d.right(j),o=d.rightRegion(j),t=e.bisect(o,h),n=d.createHalfEdge(t,"l"),d.insert(j,n),r=e.intersect(j,n),r&&(f.del(j),f.insert(j,r,e.distance(r,h))),j=n,n=d.createHalfEdge(t,"r"),d.insert(j,n),r=e.intersect(n,k),r&&f.insert(n,r,e.distance(r,h)),h=c.list.shift();else if(!f.empty())j=f.extractMin(),l=d.left(j),k=d.right(j),m=d.right(k),o=d.leftRegion(j),p=d.rightRegion(k),s=j.vertex,e.endPoint(j.edge,j.side,s),e.endPoint(k.edge,k.side,s),d.del(j),f.del(k),d.del(k),u="l",o.y>p.y&&(q=o,o=p,p=q,u="r"),t=e.bisect(o,p),n=d.createHalfEdge(t,u),d.insert(l,n),e.endPoint(t,g[u],s),r=e.intersect(l,n),r&&(f.del(l),f.insert(l,r,e.distance(r,o))),r=e.intersect(n,m),r&&f.insert(n,r,e.distance(r,o));else break}for(j=d.right(d.leftEnd);j!=d.rightEnd;j=d.right(j))b(j.edge)}function f(a,b,c,d){var e=a[0],f=b[0],g=c[0],h=d[0],i=a[1],j=b[1],k=c[1],l=d[1],m=e-g,n=f-e,o=h-g,p=i-k,q=j-i,r=l-k,s=(o*p-r*m)/(r*n-o*q);return[e+s*n,i+s*q]}function e(a,b,c){return(c[0]-b[0])*(a[1]-b[1])<(c[1]-b[1])*(a[0]-b[0])}function d(a,b,c,d){var e,f,g,h,i,j,k;e=d[a],f=e[0],g=e[1],e=d[b],h=e[0],i=e[1],e=d[c],j=e[0],k=e[1];return(k-g)*(h-f)-(i-g)*(j-f)>0}function c(a){var b=0,c=0;for(;;){if(a(b,c))return[b,c];b===0?(b=c+1,c=0):(b=b-1,c=c+1)}}d3.geom={},d3.geom.contour=function(d,e){var f=e||c(d),g=[],h=f[0],i=f[1],j=0,k=0,l=NaN,m=NaN,n=0;do n=0,d(h-1,i-1)&&(n+=1),d(h,i-1)&&(n+=2),d(h-1,i)&&(n+=4),d(h,i)&&(n+=8),n===6?(j=m===-1?-1:1,k=0):n===9?(j=0,k=l===1?-1:1):(j=a[n],k=b[n]),j!=l&&k!=m&&(g.push([h,i]),l=j,m=k),h+=j,i+=k;while(f[0]!=h||f[1]!=i);return g};var a=[1,0,1,1,-1,0,-1,1,0,0,0,0,-1,0,-1,NaN],b=[0,-1,0,0,0,-1,0,0,1,-1,1,1,0,-1,0,NaN];d3.geom.hull=function(a){if(a.length<3)return[];var b=a.length,c=b-1,e=[],f=[],g,h,i=0,j,k,l,m,n,o,p,q;for(g=1;g<b;++g)a[g][1]<a[i][1]?i=g:a[g][1]==a[i][1]&&(i=a[g][0]<a[i][0]?g:i);for(g=0;g<b;++g){if(g===i)continue;k=a[g][1]-a[i][1],j=a[g][0]-a[i][0],e.push({angle:Math.atan2(k,j),index:g})}e.sort(function(a,b){return a.angle-b.angle}),p=e[0].angle,o=e[0].index,n=0;for(g=1;g<c;++g)h=e[g].index,p==e[g].angle?(j=a[o][0]-a[i][0],k=a[o][1]-a[i][1],l=a[h][0]-a[i][0],m=a[h][1]-a[i][1],j*j+k*k>=l*l+m*m?e[g].index=-1:(e[n].index=-1,p=e[g].angle,n=g,o=h)):(p=e[g].angle,n=g,o=h);f.push(i);for(g=0,h=0;g<2;++h)e[h].index!==-1&&(f.push(e[h].index),g++);q=f.length;for(;h<c;++h){if(e[h].index===-1)continue;while(!d(f[q-2],f[q-1],e[h].index,a))--q;f[q++]=e[h].index}var r=[];for(g=0;g<q;++g)r.push(a[f[g]]);return r},d3.geom.polygon=function(a){a.area=function(){var b=0,c=a.length,d=a[c-1][0]*a[0][1],e=a[c-1][1]*a[0][0];while(++b<c)d+=a[b-1][0]*a[b][1],e+=a[b-1][1]*a[b][0];return(e-d)*.5},a.centroid=function(b){var c=-1,d=a.length-1,e=0,f=0,g,h,i;arguments.length||(b=1/(6*a.area()));while(++c<d)g=a[c],h=a[c+1],i=g[0]*h[1]-h[0]*g[1],e+=(g[0]+h[0])*i,f+=(g[1]+h[1])*i;return[e*b,f*b]},a.clip=function(b){var c,d=-1,g=a.length,h,i,j=a[g-1],k,l,m;while(++d<g){c=b.slice(),b.length=0,k=a[d],l=c[(i=c.length)-1],h=-1;while(++h<i)m=c[h],e(m,j,k)?(e(l,j,k)||b.push(f(l,m,j,k)),b.push(m)):e(l,j,k)&&b.push(f(l,m,j,k)),l=m;j=k}return b};return a},d3.geom.voronoi=function(a){var b=a.map(function(){return[]});h(a,function(a){var c,d,e,f,g,h;a.a===1&&a.b>=0?(c=a.ep.r,d=a.ep.l):(c=a.ep.l,d=a.ep.r),a.a===1?(g=c?c.y:-1e6,e=a.c-a.b*g,h=d?d.y:1e6,f=a.c-a.b*h):(e=c?c.x:-1e6,g=a.c-a.a*e,f=d?d.x:1e6,h=a.c-a.a*f);var i=[e,g],j=[f,h];b[a.region.l.index].push(i,j),b[a.region.r.index].push(i,j)});return b.map(function(b,c){var d=a[c][0],e=a[c][1];b.forEach(function(a){a.angle=Math.atan2(a[0]-d,a[1]-e)});return b.sort(function(a,b){return a.angle-b.angle}).filter(function(a,c){return!c||a.angle-b[c-1].angle>1e-10})})};var g={l:"r",r:"l"};d3.geom.delaunay=function(a){var b=a.map(function(){return[]}),c=[];h(a,function(c){b[c.region.l.index].push(a[c.region.r.index])}),b.forEach(function(b,d){var e=a[d],f=e[0],g=e[1];b.forEach(function(a){a.angle=Math.atan2(a[0]-f,a[1]-g)}),b.sort(function(a,b){return a.angle-b.angle});for(var h=0,i=b.length-1;h<i;h++)c.push([e,b[h],b[h+1]])});return c},d3.geom.quadtree=function(a,b,c,d,e){function o(a,b,c,d,e,f){var g=(c+e)*.5,h=(d+f)*.5,j=b.x>=g,k=b.y>=h,l=(k<<1)+j;a.leaf=!1,a=a.nodes[l]||(a.nodes[l]=i()),j?c=g:e=g,k?d=h:f=h,n(a,b,c,d,e,f)}function n(a,b,c,d,e,f){if(!isNaN(b.x)&&!isNaN(b.y))if(a.leaf){var g=a.point;g?Math.abs(g.x-b.x)+Math.abs(g.y-b.y)<.01?o(a,b,c,d,e,f):(a.point=null,o(a,g,c,d,e,f),o(a,b,c,d,e,f)):a.point=b}else o(a,b,c,d,e,f)}var f,g=-1,h=a.length;h&&isNaN(a[0].x)&&(a=a.map(k));if(arguments.length<5)if(arguments.length===3)e=d=c,c=b;else{b=c=Infinity,d=e=-Infinity;while(++g<h)f=a[g],f.x<b&&(b=f.x),f.y<c&&(c=f.y),f.x>d&&(d=f.x),f.y>e&&(e=f.y);var l=d-b,m=e-c;l>m?e=c+l:d=b+m}var p=i();p.add=function(a){n(p,a,b,c,d,e)},p.visit=function(a){j(a,p,b,c,d,e)},a.forEach(p.add);return p}})()
Index: /Dev/trunk/d3/d3.js
===================================================================
--- /Dev/trunk/d3/d3.js	(revision 76)
+++ /Dev/trunk/d3/d3.js	(revision 76)
@@ -0,0 +1,3592 @@
+(function(){d3 = {version: "1.29.1"}; // semver
+if (!Date.now) Date.now = function() {
+  return +new Date;
+};
+if (!Object.create) Object.create = function(o) {
+  /** @constructor */ function f() {}
+  f.prototype = o;
+  return new f;
+};
+var d3_array = d3_arraySlice; // conversion for NodeLists
+
+function d3_arrayCopy(psuedoarray) {
+  var i = -1, n = psuedoarray.length, array = [];
+  while (++i < n) array.push(psuedoarray[i]);
+  return array;
+}
+
+function d3_arraySlice(psuedoarray) {
+  return Array.prototype.slice.call(psuedoarray);
+}
+
+try {
+  d3_array(document.documentElement.childNodes)[0].nodeType;
+} catch(e) {
+  d3_array = d3_arrayCopy;
+}
+d3.functor = function(v) {
+  return typeof v === "function" ? v : function() { return v; };
+};
+// A getter-setter method that preserves the appropriate `this` context.
+d3.rebind = function(object, method) {
+  return function() {
+    var x = method.apply(object, arguments);
+    return arguments.length ? object : x;
+  };
+};
+d3.ascending = function(a, b) {
+  return a < b ? -1 : a > b ? 1 : 0;
+};
+d3.descending = function(a, b) {
+  return b < a ? -1 : b > a ? 1 : 0;
+};
+d3.min = function(array, f) {
+  var i = -1,
+      n = array.length,
+      a,
+      b;
+  if (arguments.length === 1) {
+    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
+    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+  } else {
+    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+    while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
+  }
+  return a;
+};
+d3.max = function(array, f) {
+  var i = -1,
+      n = array.length,
+      a,
+      b;
+  if (arguments.length === 1) {
+    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
+    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+  } else {
+    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+    while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
+  }
+  return a;
+};
+d3.sum = function(array, f) {
+  var s = 0,
+      n = array.length,
+      a,
+      i = -1;
+
+  if (arguments.length === 1) {
+    while (++i < n) if (!isNaN(a = +array[i])) s += a;
+  } else {
+    while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
+  }
+
+  return s;
+};
+// R-7 per <http://en.wikipedia.org/wiki/Quantile>
+d3.quantile = function(values, p) {
+  var H = (values.length - 1) * p + 1,
+      h = Math.floor(H),
+      v = values[h - 1],
+      e = H - h;
+  return e ? v + e * (values[h] - v) : v;
+};
+d3.zip = function() {
+  if (!(n = arguments.length)) return [];
+  for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
+    for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
+      zip[j] = arguments[j][i];
+    }
+  }
+  return zips;
+};
+
+function d3_zipLength(d) {
+  return d.length;
+}
+// Locate the insertion point for x in a to maintain sorted order. The
+// arguments lo and hi may be used to specify a subset of the array which should
+// be considered; by default the entire array is used. If x is already present
+// in a, the insertion point will be before (to the left of) any existing
+// entries. The return value is suitable for use as the first argument to
+// `array.splice` assuming that a is already sorted.
+//
+// The returned insertion point i partitions the array a into two halves so that
+// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi]
+// for the right side.
+d3.bisectLeft = function(a, x, lo, hi) {
+  if (arguments.length < 3) lo = 0;
+  if (arguments.length < 4) hi = a.length;
+  while (lo < hi) {
+    var mid = (lo + hi) >> 1;
+    if (a[mid] < x) lo = mid + 1;
+    else hi = mid;
+  }
+  return lo;
+};
+
+// Similar to bisectLeft, but returns an insertion point which comes after (to
+// the right of) any existing entries of x in a.
+//
+// The returned insertion point i partitions the array into two halves so that
+// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi]
+// for the right side.
+d3.bisect =
+d3.bisectRight = function(a, x, lo, hi) {
+  if (arguments.length < 3) lo = 0;
+  if (arguments.length < 4) hi = a.length;
+  while (lo < hi) {
+    var mid = (lo + hi) >> 1;
+    if (x < a[mid]) hi = mid;
+    else lo = mid + 1;
+  }
+  return lo;
+};
+d3.first = function(array, f) {
+  var i = 0,
+      n = array.length,
+      a = array[0],
+      b;
+  if (arguments.length === 1) f = d3.ascending;
+  while (++i < n) {
+    if (f.call(array, a, b = array[i]) > 0) {
+      a = b;
+    }
+  }
+  return a;
+};
+d3.last = function(array, f) {
+  var i = 0,
+      n = array.length,
+      a = array[0],
+      b;
+  if (arguments.length === 1) f = d3.ascending;
+  while (++i < n) {
+    if (f.call(array, a, b = array[i]) <= 0) {
+      a = b;
+    }
+  }
+  return a;
+};
+d3.nest = function() {
+  var nest = {},
+      keys = [],
+      sortKeys = [],
+      sortValues,
+      rollup;
+
+  function map(array, depth) {
+    if (depth >= keys.length) return rollup
+        ? rollup.call(nest, array) : (sortValues
+        ? array.sort(sortValues)
+        : array);
+
+    var i = -1,
+        n = array.length,
+        key = keys[depth++],
+        keyValue,
+        object,
+        o = {};
+
+    while (++i < n) {
+      if ((keyValue = key(object = array[i])) in o) {
+        o[keyValue].push(object);
+      } else {
+        o[keyValue] = [object];
+      }
+    }
+
+    for (keyValue in o) {
+      o[keyValue] = map(o[keyValue], depth);
+    }
+
+    return o;
+  }
+
+  function entries(map, depth) {
+    if (depth >= keys.length) return map;
+
+    var a = [],
+        sortKey = sortKeys[depth++],
+        key;
+
+    for (key in map) {
+      a.push({key: key, values: entries(map[key], depth)});
+    }
+
+    if (sortKey) a.sort(function(a, b) {
+      return sortKey(a.key, b.key);
+    });
+
+    return a;
+  }
+
+  nest.map = function(array) {
+    return map(array, 0);
+  };
+
+  nest.entries = function(array) {
+    return entries(map(array, 0), 0);
+  };
+
+  nest.key = function(d) {
+    keys.push(d);
+    return nest;
+  };
+
+  // Specifies the order for the most-recently specified key.
+  // Note: only applies to entries. Map keys are unordered!
+  nest.sortKeys = function(order) {
+    sortKeys[keys.length - 1] = order;
+    return nest;
+  };
+
+  // Specifies the order for leaf values.
+  // Applies to both maps and entries array.
+  nest.sortValues = function(order) {
+    sortValues = order;
+    return nest;
+  };
+
+  nest.rollup = function(f) {
+    rollup = f;
+    return nest;
+  };
+
+  return nest;
+};
+d3.keys = function(map) {
+  var keys = [];
+  for (var key in map) keys.push(key);
+  return keys;
+};
+d3.values = function(map) {
+  var values = [];
+  for (var key in map) values.push(map[key]);
+  return values;
+};
+d3.entries = function(map) {
+  var entries = [];
+  for (var key in map) entries.push({key: key, value: map[key]});
+  return entries;
+};
+d3.permute = function(array, indexes) {
+  var permutes = [],
+      i = -1,
+      n = indexes.length;
+  while (++i < n) permutes[i] = array[indexes[i]];
+  return permutes;
+};
+d3.merge = function(arrays) {
+  return Array.prototype.concat.apply([], arrays);
+};
+d3.split = function(array, f) {
+  var arrays = [],
+      values = [],
+      value,
+      i = -1,
+      n = array.length;
+  if (arguments.length < 2) f = d3_splitter;
+  while (++i < n) {
+    if (f.call(values, value = array[i], i)) {
+      values = [];
+    } else {
+      if (!values.length) arrays.push(values);
+      values.push(value);
+    }
+  }
+  return arrays;
+};
+
+function d3_splitter(d) {
+  return d == null;
+}
+function d3_collapse(s) {
+  return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " ");
+}
+//
+// Note: assigning to the arguments array simultaneously changes the value of
+// the corresponding argument!
+//
+// TODO The `this` argument probably shouldn't be the first argument to the
+// callback, anyway, since it's redundant. However, that will require a major
+// version bump due to backwards compatibility, so I'm not changing it right
+// away.
+//
+function d3_call(callback) {
+  callback.apply(this, (arguments[0] = this, arguments));
+  return this;
+}
+/**
+ * @param {number} start
+ * @param {number=} stop
+ * @param {number=} step
+ */
+d3.range = function(start, stop, step) {
+  if (arguments.length === 1) { stop = start; start = 0; }
+  if (step == null) step = 1;
+  if ((stop - start) / step == Infinity) throw new Error("infinite range");
+  var range = [],
+       i = -1,
+       j;
+  if (step < 0) while ((j = start + step * ++i) > stop) range.push(j);
+  else while ((j = start + step * ++i) < stop) range.push(j);
+  return range;
+};
+d3.requote = function(s) {
+  return s.replace(d3_requote_re, "\\$&");
+};
+
+var d3_requote_re = /[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;
+d3.round = function(x, n) {
+  return n
+      ? Math.round(x * Math.pow(10, n)) * Math.pow(10, -n)
+      : Math.round(x);
+};
+d3.xhr = function(url, mime, callback) {
+  var req = new XMLHttpRequest;
+  if (arguments.length < 3) callback = mime;
+  else if (mime && req.overrideMimeType) req.overrideMimeType(mime);
+  req.open("GET", url, true);
+  req.onreadystatechange = function() {
+    if (req.readyState === 4) callback(req.status < 300 ? req : null);
+  };
+  req.send(null);
+};
+d3.text = function(url, mime, callback) {
+  function ready(req) {
+    callback(req && req.responseText);
+  }
+  if (arguments.length < 3) {
+    callback = mime;
+    mime = null;
+  }
+  d3.xhr(url, mime, ready);
+};
+d3.json = function(url, callback) {
+  d3.text(url, "application/json", function(text) {
+    callback(text ? JSON.parse(text) : null);
+  });
+};
+d3.html = function(url, callback) {
+  d3.text(url, "text/html", function(text) {
+    if (text != null) { // Treat empty string as valid HTML.
+      var range = document.createRange();
+      range.selectNode(document.body);
+      text = range.createContextualFragment(text);
+    }
+    callback(text);
+  });
+};
+d3.xml = function(url, mime, callback) {
+  function ready(req) {
+    callback(req && req.responseXML);
+  }
+  if (arguments.length < 3) {
+    callback = mime;
+    mime = null;
+  }
+  d3.xhr(url, mime, ready);
+};
+d3.ns = {
+
+  prefix: {
+    svg: "http://www.w3.org/2000/svg",
+    xhtml: "http://www.w3.org/1999/xhtml",
+    xlink: "http://www.w3.org/1999/xlink",
+    xml: "http://www.w3.org/XML/1998/namespace",
+    xmlns: "http://www.w3.org/2000/xmlns/"
+  },
+
+  qualify: function(name) {
+    var i = name.indexOf(":");
+    return i < 0 ? name : {
+      space: d3.ns.prefix[name.substring(0, i)],
+      local: name.substring(i + 1)
+    };
+  }
+
+};
+/** @param {...string} types */
+d3.dispatch = function(types) {
+  var dispatch = {},
+      type;
+  for (var i = 0, n = arguments.length; i < n; i++) {
+    type = arguments[i];
+    dispatch[type] = d3_dispatch(type);
+  }
+  return dispatch;
+};
+
+function d3_dispatch(type) {
+  var dispatch = {},
+      listeners = [];
+
+  dispatch.add = function(listener) {
+    for (var i = 0; i < listeners.length; i++) {
+      if (listeners[i].listener == listener) return dispatch; // already registered
+    }
+    listeners.push({listener: listener, on: true});
+    return dispatch;
+  };
+
+  dispatch.remove = function(listener) {
+    for (var i = 0; i < listeners.length; i++) {
+      var l = listeners[i];
+      if (l.listener == listener) {
+        l.on = false;
+        listeners = listeners.slice(0, i).concat(listeners.slice(i + 1));
+        break;
+      }
+    }
+    return dispatch;
+  };
+
+  dispatch.dispatch = function() {
+    var ls = listeners; // defensive reference
+    for (var i = 0, n = ls.length; i < n; i++) {
+      var l = ls[i];
+      if (l.on) l.listener.apply(this, arguments);
+    }
+  };
+
+  return dispatch;
+};
+// TODO align
+d3.format = function(specifier) {
+  var match = d3_format_re.exec(specifier),
+      fill = match[1] || " ",
+      sign = match[3] || "",
+      zfill = match[5],
+      width = +match[6],
+      comma = match[7],
+      precision = match[8],
+      type = match[9],
+      percentage = false,
+      integer = false;
+
+  if (precision) precision = precision.substring(1);
+
+  if (zfill) {
+    fill = "0"; // TODO align = "=";
+    if (comma) width -= Math.floor((width - 1) / 4);
+  }
+
+  switch (type) {
+    case "n": comma = true; type = "g"; break;
+    case "%": percentage = true; type = "f"; break;
+    case "p": percentage = true; type = "r"; break;
+    case "d": integer = true; precision = "0"; break;
+  }
+
+  type = d3_format_types[type] || d3_format_typeDefault;
+
+  return function(value) {
+    var number = percentage ? value * 100 : +value,
+        negative = (number < 0) && (number = -number) ? "\u2212" : sign;
+
+    // Return the empty string for floats formatted as ints.
+    if (integer && (number % 1)) return "";
+
+    // Convert the input value to the desired precision.
+    value = type(number, precision);
+
+    // If the fill character is 0, the sign and group is applied after the fill.
+    if (zfill) {
+      var length = value.length + negative.length;
+      if (length < width) value = new Array(width - length + 1).join(fill) + value;
+      if (comma) value = d3_format_group(value);
+      value = negative + value;
+    }
+
+    // Otherwise (e.g., space-filling), the sign and group is applied before.
+    else {
+      if (comma) value = d3_format_group(value);
+      value = negative + value;
+      var length = value.length;
+      if (length < width) value = new Array(width - length + 1).join(fill) + value;
+    }
+    if (percentage) value += "%";
+
+    return value;
+  };
+};
+
+// [[fill]align][sign][#][0][width][,][.precision][type]
+var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
+
+var d3_format_types = {
+  g: function(x, p) { return x.toPrecision(p); },
+  e: function(x, p) { return x.toExponential(p); },
+  f: function(x, p) { return x.toFixed(p); },
+  r: function(x, p) {
+    var n = 1 + Math.floor(1e-15 + Math.log(x) / Math.LN10);
+    return d3.round(x, p - n).toFixed(Math.max(0, p - n));
+  }
+};
+
+function d3_format_typeDefault(x) {
+  return x + "";
+}
+
+// Apply comma grouping for thousands.
+function d3_format_group(value) {
+  var i = value.lastIndexOf("."),
+      f = i >= 0 ? value.substring(i) : (i = value.length, ""),
+      t = [];
+  while (i > 0) t.push(value.substring(i -= 3, i + 3));
+  return t.reverse().join(",") + f;
+}
+/*
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the author nor the names of contributors may be used to
+ *   endorse or promote products derived from this software without specific
+ *   prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var d3_ease_quad = d3_ease_poly(2),
+    d3_ease_cubic = d3_ease_poly(3);
+
+var d3_ease = {
+  linear: function() { return d3_ease_linear; },
+  poly: d3_ease_poly,
+  quad: function() { return d3_ease_quad; },
+  cubic: function() { return d3_ease_cubic; },
+  sin: function() { return d3_ease_sin; },
+  exp: function() { return d3_ease_exp; },
+  circle: function() { return d3_ease_circle; },
+  elastic: d3_ease_elastic,
+  back: d3_ease_back,
+  bounce: function() { return d3_ease_bounce; }
+};
+
+var d3_ease_mode = {
+  "in": function(f) { return f; },
+  "out": d3_ease_reverse,
+  "in-out": d3_ease_reflect,
+  "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); }
+};
+
+d3.ease = function(name) {
+  var i = name.indexOf("-"),
+      t = i >= 0 ? name.substring(0, i) : name,
+      m = i >= 0 ? name.substring(i + 1) : "in";
+  return d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1)));
+};
+
+function d3_ease_reverse(f) {
+  return function(t) {
+    return 1 - f(1 - t);
+  };
+}
+
+function d3_ease_reflect(f) {
+  return function(t) {
+    return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t)));
+  };
+}
+
+function d3_ease_linear(t) {
+  return t;
+}
+
+function d3_ease_poly(e) {
+  return function(t) {
+    return Math.pow(t, e);
+  }
+}
+
+function d3_ease_sin(t) {
+  return 1 - Math.cos(t * Math.PI / 2);
+}
+
+function d3_ease_exp(t) {
+  return t ? Math.pow(2, 10 * (t - 1)) - 1e-3 : 0;
+}
+
+function d3_ease_circle(t) {
+  return 1 - Math.sqrt(1 - t * t);
+}
+
+function d3_ease_elastic(a, p) {
+  var s;
+  if (arguments.length < 2) p = 0.45;
+  if (arguments.length < 1) { a = 1; s = p / 4; }
+  else s = p / (2 * Math.PI) * Math.asin(1 / a);
+  return function(t) {
+    return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
+  };
+}
+
+function d3_ease_back(s) {
+  if (!s) s = 1.70158;
+  return function(t) {
+    return t * t * ((s + 1) * t - s);
+  };
+}
+
+function d3_ease_bounce(t) {
+  return t < 1 / 2.75 ? 7.5625 * t * t
+      : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75
+      : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375
+      : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
+}
+d3.event = null;
+d3.interpolate = function(a, b) {
+  var i = d3.interpolators.length, f;
+  while (--i >= 0 && !(f = d3.interpolators[i](a, b)));
+  return f;
+};
+
+d3.interpolateNumber = function(a, b) {
+  b -= a;
+  return function(t) { return a + b * t; };
+};
+
+d3.interpolateRound = function(a, b) {
+  b -= a;
+  return function(t) { return Math.round(a + b * t); };
+};
+
+d3.interpolateString = function(a, b) {
+  var m, // current match
+      i, // current index
+      j, // current index (for coallescing)
+      s0 = 0, // start index of current string prefix
+      s1 = 0, // end index of current string prefix
+      s = [], // string constants and placeholders
+      q = [], // number interpolators
+      n, // q.length
+      o;
+
+  // Reset our regular expression!
+  d3_interpolate_number.lastIndex = 0;
+
+  // Find all numbers in b.
+  for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
+    if (m.index) s.push(b.substring(s0, s1 = m.index));
+    q.push({i: s.length, x: m[0]});
+    s.push(null);
+    s0 = d3_interpolate_number.lastIndex;
+  }
+  if (s0 < b.length) s.push(b.substring(s0));
+
+  // Find all numbers in a.
+  for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
+    o = q[i];
+    if (o.x == m[0]) { // The numbers match, so coallesce.
+      if (o.i) {
+        if (s[o.i + 1] == null) { // This match is followed by another number.
+          s[o.i - 1] += o.x;
+          s.splice(o.i, 1);
+          for (j = i + 1; j < n; ++j) q[j].i--;
+        } else { // This match is followed by a string, so coallesce twice.
+          s[o.i - 1] += o.x + s[o.i + 1];
+          s.splice(o.i, 2);
+          for (j = i + 1; j < n; ++j) q[j].i -= 2;
+        }
+      } else {
+          if (s[o.i + 1] == null) { // This match is followed by another number.
+          s[o.i] = o.x;
+        } else { // This match is followed by a string, so coallesce twice.
+          s[o.i] = o.x + s[o.i + 1];
+          s.splice(o.i + 1, 1);
+          for (j = i + 1; j < n; ++j) q[j].i--;
+        }
+      }
+      q.splice(i, 1);
+      n--;
+      i--;
+    } else {
+      o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
+    }
+  }
+
+  // Remove any numbers in b not found in a.
+  while (i < n) {
+    o = q.pop();
+    if (s[o.i + 1] == null) { // This match is followed by another number.
+      s[o.i] = o.x;
+    } else { // This match is followed by a string, so coallesce twice.
+      s[o.i] = o.x + s[o.i + 1];
+      s.splice(o.i + 1, 1);
+    }
+    n--;
+  }
+
+  // Special optimization for only a single match.
+  if (s.length === 1) {
+    return s[0] == null ? q[0].x : function() { return b; };
+  }
+
+  // Otherwise, interpolate each of the numbers and rejoin the string.
+  return function(t) {
+    for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
+    return s.join("");
+  };
+};
+
+d3.interpolateRgb = function(a, b) {
+  a = d3.rgb(a);
+  b = d3.rgb(b);
+  var ar = a.r,
+      ag = a.g,
+      ab = a.b,
+      br = b.r - ar,
+      bg = b.g - ag,
+      bb = b.b - ab;
+  return function(t) {
+    return "rgb(" + Math.round(ar + br * t)
+        + "," + Math.round(ag + bg * t)
+        + "," + Math.round(ab + bb * t)
+        + ")";
+  };
+};
+
+// interpolates HSL space, but outputs RGB string (for compatibility)
+d3.interpolateHsl = function(a, b) {
+  a = d3.hsl(a);
+  b = d3.hsl(b);
+  var h0 = a.h,
+      s0 = a.s,
+      l0 = a.l,
+      h1 = b.h - h0,
+      s1 = b.s - s0,
+      l1 = b.l - l0;
+  return function(t) {
+    return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString();
+  };
+};
+
+d3.interpolateArray = function(a, b) {
+  var x = [],
+      c = [],
+      na = a.length,
+      nb = b.length,
+      n0 = Math.min(a.length, b.length),
+      i;
+  for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
+  for (; i < na; ++i) c[i] = a[i];
+  for (; i < nb; ++i) c[i] = b[i];
+  return function(t) {
+    for (i = 0; i < n0; ++i) c[i] = x[i](t);
+    return c;
+  };
+};
+
+d3.interpolateObject = function(a, b) {
+  var i = {},
+      c = {},
+      k;
+  for (k in a) {
+    if (k in b) {
+      i[k] = d3_interpolateByName(k)(a[k], b[k]);
+    } else {
+      c[k] = a[k];
+    }
+  }
+  for (k in b) {
+    if (!(k in a)) {
+      c[k] = b[k];
+    }
+  }
+  return function(t) {
+    for (k in i) c[k] = i[k](t);
+    return c;
+  };
+}
+
+var d3_interpolate_number = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
+    d3_interpolate_rgb = {background: 1, fill: 1, stroke: 1};
+
+function d3_interpolateByName(n) {
+  return n in d3_interpolate_rgb || /\bcolor\b/.test(n)
+      ? d3.interpolateRgb
+      : d3.interpolate;
+}
+
+d3.interpolators = [
+  d3.interpolateObject,
+  function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
+  function(a, b) { return (typeof b === "string") && d3.interpolateString(String(a), b); },
+  function(a, b) { return (b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b)) && d3.interpolateRgb(String(a), b); },
+  function(a, b) { return (typeof b === "number") && d3.interpolateNumber(+a, b); }
+];
+function d3_uninterpolateNumber(a, b) {
+  b = 1 / (b - (a = +a));
+  return function(x) { return (x - a) * b; };
+}
+
+function d3_uninterpolateClamp(a, b) {
+  b = 1 / (b - (a = +a));
+  return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); };
+}
+d3.rgb = function(r, g, b) {
+  return arguments.length === 1
+      ? d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)
+      : d3_rgb(~~r, ~~g, ~~b);
+};
+
+function d3_rgb(r, g, b) {
+  return new d3_Rgb(r, g, b);
+}
+
+function d3_Rgb(r, g, b) {
+  this.r = r;
+  this.g = g;
+  this.b = b;
+}
+
+d3_Rgb.prototype.brighter = function(k) {
+  k = Math.pow(0.7, arguments.length ? k : 1);
+  var r = this.r,
+      g = this.g,
+      b = this.b,
+      i = 30;
+  if (!r && !g && !b) return d3_rgb(i, i, i);
+  if (r && r < i) r = i;
+  if (g && g < i) g = i;
+  if (b && b < i) b = i;
+  return d3_rgb(
+    Math.min(255, Math.floor(r / k)),
+    Math.min(255, Math.floor(g / k)),
+    Math.min(255, Math.floor(b / k)));
+};
+
+d3_Rgb.prototype.darker = function(k) {
+  k = Math.pow(0.7, arguments.length ? k : 1);
+  return d3_rgb(
+    Math.max(0, Math.floor(k * this.r)),
+    Math.max(0, Math.floor(k * this.g)),
+    Math.max(0, Math.floor(k * this.b)));
+};
+
+d3_Rgb.prototype.hsl = function() {
+  return d3_rgb_hsl(this.r, this.g, this.b);
+};
+
+d3_Rgb.prototype.toString = function() {
+  return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
+};
+
+function d3_rgb_hex(v) {
+  return v < 0x10 ? "0" + v.toString(16) : v.toString(16);
+}
+
+function d3_rgb_parse(format, rgb, hsl) {
+  var r = 0, // red channel; int in [0, 255]
+      g = 0, // green channel; int in [0, 255]
+      b = 0, // blue channel; int in [0, 255]
+      m1, // CSS color specification match
+      m2, // CSS color specification type (e.g., rgb)
+      name;
+
+  /* Handle hsl, rgb. */
+  m1 = /([a-z]+)\((.*)\)/i.exec(format);
+  if (m1) {
+    m2 = m1[2].split(",");
+    switch (m1[1]) {
+      case "hsl": {
+        return hsl(
+          parseFloat(m2[0]), // degrees
+          parseFloat(m2[1]) / 100, // percentage
+          parseFloat(m2[2]) / 100 // percentage
+        );
+      }
+      case "rgb": {
+        return rgb(
+          d3_rgb_parseNumber(m2[0]),
+          d3_rgb_parseNumber(m2[1]),
+          d3_rgb_parseNumber(m2[2])
+        );
+      }
+    }
+  }
+
+  /* Named colors. */
+  if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b);
+
+  /* Hexadecimal colors: #rgb and #rrggbb. */
+  if (format != null && format.charAt(0) === "#") {
+    if (format.length === 4) {
+      r = format.charAt(1); r += r;
+      g = format.charAt(2); g += g;
+      b = format.charAt(3); b += b;
+    } else if (format.length === 7) {
+      r = format.substring(1, 3);
+      g = format.substring(3, 5);
+      b = format.substring(5, 7);
+    }
+    r = parseInt(r, 16);
+    g = parseInt(g, 16);
+    b = parseInt(b, 16);
+  }
+
+  return rgb(r, g, b);
+}
+
+function d3_rgb_hsl(r, g, b) {
+  var min = Math.min(r /= 255, g /= 255, b /= 255),
+      max = Math.max(r, g, b),
+      d = max - min,
+      h,
+      s,
+      l = (max + min) / 2;
+  if (d) {
+    s = l < .5 ? d / (max + min) : d / (2 - max - min);
+    if (r == max) h = (g - b) / d + (g < b ? 6 : 0);
+    else if (g == max) h = (b - r) / d + 2;
+    else h = (r - g) / d + 4;
+    h *= 60;
+  } else {
+    s = h = 0;
+  }
+  return d3_hsl(h, s, l);
+}
+
+function d3_rgb_parseNumber(c) { // either integer or percentage
+  var f = parseFloat(c);
+  return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
+}
+
+var d3_rgb_names = {
+  aliceblue: "#f0f8ff",
+  antiquewhite: "#faebd7",
+  aqua: "#00ffff",
+  aquamarine: "#7fffd4",
+  azure: "#f0ffff",
+  beige: "#f5f5dc",
+  bisque: "#ffe4c4",
+  black: "#000000",
+  blanchedalmond: "#ffebcd",
+  blue: "#0000ff",
+  blueviolet: "#8a2be2",
+  brown: "#a52a2a",
+  burlywood: "#deb887",
+  cadetblue: "#5f9ea0",
+  chartreuse: "#7fff00",
+  chocolate: "#d2691e",
+  coral: "#ff7f50",
+  cornflowerblue: "#6495ed",
+  cornsilk: "#fff8dc",
+  crimson: "#dc143c",
+  cyan: "#00ffff",
+  darkblue: "#00008b",
+  darkcyan: "#008b8b",
+  darkgoldenrod: "#b8860b",
+  darkgray: "#a9a9a9",
+  darkgreen: "#006400",
+  darkgrey: "#a9a9a9",
+  darkkhaki: "#bdb76b",
+  darkmagenta: "#8b008b",
+  darkolivegreen: "#556b2f",
+  darkorange: "#ff8c00",
+  darkorchid: "#9932cc",
+  darkred: "#8b0000",
+  darksalmon: "#e9967a",
+  darkseagreen: "#8fbc8f",
+  darkslateblue: "#483d8b",
+  darkslategray: "#2f4f4f",
+  darkslategrey: "#2f4f4f",
+  darkturquoise: "#00ced1",
+  darkviolet: "#9400d3",
+  deeppink: "#ff1493",
+  deepskyblue: "#00bfff",
+  dimgray: "#696969",
+  dimgrey: "#696969",
+  dodgerblue: "#1e90ff",
+  firebrick: "#b22222",
+  floralwhite: "#fffaf0",
+  forestgreen: "#228b22",
+  fuchsia: "#ff00ff",
+  gainsboro: "#dcdcdc",
+  ghostwhite: "#f8f8ff",
+  gold: "#ffd700",
+  goldenrod: "#daa520",
+  gray: "#808080",
+  green: "#008000",
+  greenyellow: "#adff2f",
+  grey: "#808080",
+  honeydew: "#f0fff0",
+  hotpink: "#ff69b4",
+  indianred: "#cd5c5c",
+  indigo: "#4b0082",
+  ivory: "#fffff0",
+  khaki: "#f0e68c",
+  lavender: "#e6e6fa",
+  lavenderblush: "#fff0f5",
+  lawngreen: "#7cfc00",
+  lemonchiffon: "#fffacd",
+  lightblue: "#add8e6",
+  lightcoral: "#f08080",
+  lightcyan: "#e0ffff",
+  lightgoldenrodyellow: "#fafad2",
+  lightgray: "#d3d3d3",
+  lightgreen: "#90ee90",
+  lightgrey: "#d3d3d3",
+  lightpink: "#ffb6c1",
+  lightsalmon: "#ffa07a",
+  lightseagreen: "#20b2aa",
+  lightskyblue: "#87cefa",
+  lightslategray: "#778899",
+  lightslategrey: "#778899",
+  lightsteelblue: "#b0c4de",
+  lightyellow: "#ffffe0",
+  lime: "#00ff00",
+  limegreen: "#32cd32",
+  linen: "#faf0e6",
+  magenta: "#ff00ff",
+  maroon: "#800000",
+  mediumaquamarine: "#66cdaa",
+  mediumblue: "#0000cd",
+  mediumorchid: "#ba55d3",
+  mediumpurple: "#9370db",
+  mediumseagreen: "#3cb371",
+  mediumslateblue: "#7b68ee",
+  mediumspringgreen: "#00fa9a",
+  mediumturquoise: "#48d1cc",
+  mediumvioletred: "#c71585",
+  midnightblue: "#191970",
+  mintcream: "#f5fffa",
+  mistyrose: "#ffe4e1",
+  moccasin: "#ffe4b5",
+  navajowhite: "#ffdead",
+  navy: "#000080",
+  oldlace: "#fdf5e6",
+  olive: "#808000",
+  olivedrab: "#6b8e23",
+  orange: "#ffa500",
+  orangered: "#ff4500",
+  orchid: "#da70d6",
+  palegoldenrod: "#eee8aa",
+  palegreen: "#98fb98",
+  paleturquoise: "#afeeee",
+  palevioletred: "#db7093",
+  papayawhip: "#ffefd5",
+  peachpuff: "#ffdab9",
+  peru: "#cd853f",
+  pink: "#ffc0cb",
+  plum: "#dda0dd",
+  powderblue: "#b0e0e6",
+  purple: "#800080",
+  red: "#ff0000",
+  rosybrown: "#bc8f8f",
+  royalblue: "#4169e1",
+  saddlebrown: "#8b4513",
+  salmon: "#fa8072",
+  sandybrown: "#f4a460",
+  seagreen: "#2e8b57",
+  seashell: "#fff5ee",
+  sienna: "#a0522d",
+  silver: "#c0c0c0",
+  skyblue: "#87ceeb",
+  slateblue: "#6a5acd",
+  slategray: "#708090",
+  slategrey: "#708090",
+  snow: "#fffafa",
+  springgreen: "#00ff7f",
+  steelblue: "#4682b4",
+  tan: "#d2b48c",
+  teal: "#008080",
+  thistle: "#d8bfd8",
+  tomato: "#ff6347",
+  turquoise: "#40e0d0",
+  violet: "#ee82ee",
+  wheat: "#f5deb3",
+  white: "#ffffff",
+  whitesmoke: "#f5f5f5",
+  yellow: "#ffff00",
+  yellowgreen: "#9acd32"
+};
+
+for (var d3_rgb_name in d3_rgb_names) {
+  d3_rgb_names[d3_rgb_name] = d3_rgb_parse(
+      d3_rgb_names[d3_rgb_name],
+      d3_rgb,
+      d3_hsl_rgb);
+}
+d3.hsl = function(h, s, l) {
+  return arguments.length === 1
+      ? d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)
+      : d3_hsl(+h, +s, +l);
+};
+
+function d3_hsl(h, s, l) {
+  return new d3_Hsl(h, s, l);
+}
+
+function d3_Hsl(h, s, l) {
+  this.h = h;
+  this.s = s;
+  this.l = l;
+}
+
+d3_Hsl.prototype.brighter = function(k) {
+  k = Math.pow(0.7, arguments.length ? k : 1);
+  return d3_hsl(this.h, this.s, this.l / k);
+};
+
+d3_Hsl.prototype.darker = function(k) {
+  k = Math.pow(0.7, arguments.length ? k : 1);
+  return d3_hsl(this.h, this.s, k * this.l);
+};
+
+d3_Hsl.prototype.rgb = function() {
+  return d3_hsl_rgb(this.h, this.s, this.l);
+};
+
+d3_Hsl.prototype.toString = function() {
+  return "hsl(" + this.h + "," + this.s * 100 + "%," + this.l * 100 + "%)";
+};
+
+function d3_hsl_rgb(h, s, l) {
+  var m1,
+      m2;
+
+  /* Some simple corrections for h, s and l. */
+  h = h % 360; if (h < 0) h += 360;
+  s = s < 0 ? 0 : s > 1 ? 1 : s;
+  l = l < 0 ? 0 : l > 1 ? 1 : l;
+
+  /* From FvD 13.37, CSS Color Module Level 3 */
+  m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
+  m1 = 2 * l - m2;
+
+  function v(h) {
+    if (h > 360) h -= 360;
+    else if (h < 0) h += 360;
+    if (h < 60) return m1 + (m2 - m1) * h / 60;
+    if (h < 180) return m2;
+    if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
+    return m1;
+  }
+
+  function vv(h) {
+    return Math.round(v(h) * 255);
+  }
+
+  return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
+}
+var d3_select = function(s, n) { return n.querySelector(s); },
+    d3_selectAll = function(s, n) { return d3_array(n.querySelectorAll(s)); };
+
+// Use Sizzle, if available.
+if (typeof Sizzle === "function") {
+  d3_select = function(s, n) { return Sizzle(s, n)[0]; };
+  d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); };
+}
+
+var d3_root = d3_selection([[document]]);
+d3_root[0].parentNode = document.documentElement;
+
+// TODO fast singleton implementation!
+d3.select = function(selector) {
+  return typeof selector === "string"
+      ? d3_root.select(selector)
+      : d3_selection([[selector]]); // assume node
+};
+
+d3.selectAll = function(selector) {
+  return typeof selector === "string"
+      ? d3_root.selectAll(selector)
+      : d3_selection([d3_array(selector)]); // assume node[]
+};
+
+function d3_selection(groups) {
+
+  function select(select) {
+    var subgroups = [],
+        subgroup,
+        subnode,
+        group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = group.parentNode;
+      for (var i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) {
+          subgroup.push(subnode = select(node));
+          if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
+        } else {
+          subgroup.push(null);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  }
+
+  function selectAll(selectAll) {
+    var subgroups = [],
+        subgroup,
+        group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      for (var i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) {
+          subgroups.push(subgroup = selectAll(node));
+          subgroup.parentNode = node;
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  }
+
+  // TODO select(function)?
+  groups.select = function(selector) {
+    return select(function(node) {
+      return d3_select(selector, node);
+    });
+  };
+
+  // TODO selectAll(function)?
+  groups.selectAll = function(selector) {
+    return selectAll(function(node) {
+      return d3_selectAll(selector, node);
+    });
+  };
+
+  // TODO preserve null elements to maintain index?
+  groups.filter = function(filter) {
+    var subgroups = [],
+        subgroup,
+        group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = group.parentNode;
+      for (var i = 0, n = group.length; i < n; i++) {
+        if ((node = group[i]) && filter.call(node, node.__data__, i)) {
+          subgroup.push(node);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  };
+
+  groups.map = function(map) {
+    var group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      for (var i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) node.__data__ = map.call(node, node.__data__, i);
+      }
+    }
+    return groups;
+  };
+
+  // TODO data(null) for clearing data?
+  groups.data = function(data, join) {
+    var enter = [],
+        update = [],
+        exit = [];
+
+    function bind(group, groupData) {
+      var i = 0,
+          n = group.length,
+          m = groupData.length,
+          n0 = Math.min(n, m),
+          n1 = Math.max(n, m),
+          updateNodes = [],
+          enterNodes = [],
+          exitNodes = [],
+          node,
+          nodeData;
+
+      if (join) {
+        var nodeByKey = {},
+            keys = [],
+            key,
+            j = groupData.length;
+
+        for (i = 0; i < n; i++) {
+          key = join.call(node = group[i], node.__data__, i);
+          if (key in nodeByKey) {
+            exitNodes[j++] = node; // duplicate key
+          } else {
+            nodeByKey[key] = node;
+          }
+          keys.push(key);
+        }
+
+        for (i = 0; i < m; i++) {
+          node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)];
+          if (node) {
+            node.__data__ = nodeData;
+            updateNodes[i] = node;
+            enterNodes[i] = exitNodes[i] = null;
+          } else {
+            enterNodes[i] = d3_selection_enterNode(nodeData);
+            updateNodes[i] = exitNodes[i] = null;
+          }
+          delete nodeByKey[key];
+        }
+
+        for (i = 0; i < n; i++) {
+          if (keys[i] in nodeByKey) {
+            exitNodes[i] = group[i];
+          }
+        }
+      } else {
+        for (; i < n0; i++) {
+          node = group[i];
+          nodeData = groupData[i];
+          if (node) {
+            node.__data__ = nodeData;
+            updateNodes[i] = node;
+            enterNodes[i] = exitNodes[i] = null;
+          } else {
+            enterNodes[i] = d3_selection_enterNode(nodeData);
+            updateNodes[i] = exitNodes[i] = null;
+          }
+        }
+        for (; i < m; i++) {
+          enterNodes[i] = d3_selection_enterNode(groupData[i]);
+          updateNodes[i] = exitNodes[i] = null;
+        }
+        for (; i < n1; i++) {
+          exitNodes[i] = group[i];
+          enterNodes[i] = updateNodes[i] = null;
+        }
+      }
+
+      enterNodes.parentNode
+          = updateNodes.parentNode
+          = exitNodes.parentNode
+          = group.parentNode;
+
+      enter.push(enterNodes);
+      update.push(updateNodes);
+      exit.push(exitNodes);
+    }
+
+    var i = -1,
+        n = groups.length,
+        group;
+    if (typeof data === "function") {
+      while (++i < n) {
+        bind(group = groups[i], data.call(group, group.parentNode.__data__, i));
+      }
+    } else {
+      while (++i < n) {
+        bind(group = groups[i], data);
+      }
+    }
+
+    var selection = d3_selection(update);
+    selection.enter = function() {
+      return d3_selectionEnter(enter);
+    };
+    selection.exit = function() {
+      return d3_selection(exit);
+    };
+    return selection;
+  };
+
+  // TODO mask forEach? or rename for eachData?
+  // TODO offer the same semantics for map, reduce, etc.?
+  groups.each = function(callback) {
+    for (var j = 0, m = groups.length; j < m; j++) {
+      var group = groups[j];
+      for (var i = 0, n = group.length; i < n; i++) {
+        var node = group[i];
+        if (node) callback.call(node, node.__data__, i);
+      }
+    }
+    return groups;
+  };
+
+  function first(callback) {
+    for (var j = 0, m = groups.length; j < m; j++) {
+      var group = groups[j];
+      for (var i = 0, n = group.length; i < n; i++) {
+        var node = group[i];
+        if (node) return callback.call(node, node.__data__, i);
+      }
+    }
+    return null;
+  }
+
+  groups.empty = function() {
+    return !first(function() { return true; });
+  };
+
+  groups.node = function() {
+    return first(function() { return this; });
+  };
+
+  groups.attr = function(name, value) {
+    name = d3.ns.qualify(name);
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 2) {
+      return first(name.local
+          ? function() { return this.getAttributeNS(name.space, name.local); }
+          : function() { return this.getAttribute(name); });
+    }
+
+    /** @this {Element} */
+    function attrNull() {
+      this.removeAttribute(name);
+    }
+
+    /** @this {Element} */
+    function attrNullNS() {
+      this.removeAttributeNS(name.space, name.local);
+    }
+
+    /** @this {Element} */
+    function attrConstant() {
+      this.setAttribute(name, value);
+    }
+
+    /** @this {Element} */
+    function attrConstantNS() {
+      this.setAttributeNS(name.space, name.local, value);
+    }
+
+    /** @this {Element} */
+    function attrFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.removeAttribute(name);
+      else this.setAttribute(name, x);
+    }
+
+    /** @this {Element} */
+    function attrFunctionNS() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.removeAttributeNS(name.space, name.local);
+      else this.setAttributeNS(name.space, name.local, x);
+    }
+
+    return groups.each(value == null
+        ? (name.local ? attrNullNS : attrNull) : (typeof value === "function"
+        ? (name.local ? attrFunctionNS : attrFunction)
+        : (name.local ? attrConstantNS : attrConstant)));
+  };
+
+  groups.classed = function(name, value) {
+    var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g");
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 2) {
+      return first(function() {
+        if (c = this.classList) return c.contains(name);
+        var c = this.className;
+        re.lastIndex = 0;
+        return re.test(c.baseVal != null ? c.baseVal : c);
+      });
+    }
+
+    /** @this {Element} */
+    function classedAdd() {
+      if (c = this.classList) return c.add(name);
+      var c = this.className,
+          cb = c.baseVal != null,
+          cv = cb ? c.baseVal : c;
+      re.lastIndex = 0;
+      if (!re.test(cv)) {
+        cv = d3_collapse(cv + " " + name);
+        if (cb) c.baseVal = cv;
+        else this.className = cv;
+      }
+    }
+
+    /** @this {Element} */
+    function classedRemove() {
+      if (c = this.classList) return c.remove(name);
+      var c = this.className,
+          cb = c.baseVal != null,
+          cv = cb ? c.baseVal : c;
+      cv = d3_collapse(cv.replace(re, " "));
+      if (cb) c.baseVal = cv;
+      else this.className = cv;
+    }
+
+    /** @this {Element} */
+    function classedFunction() {
+      (value.apply(this, arguments)
+          ? classedAdd
+          : classedRemove).call(this);
+    }
+
+    return groups.each(typeof value === "function"
+        ? classedFunction : value
+        ? classedAdd
+        : classedRemove);
+  };
+
+  groups.style = function(name, value, priority) {
+    if (arguments.length < 3) priority = "";
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 2) {
+      return first(function() {
+        return window.getComputedStyle(this, null).getPropertyValue(name);
+      });
+    }
+
+    /** @this {Element} */
+    function styleNull() {
+      this.style.removeProperty(name);
+    }
+
+    /** @this {Element} */
+    function styleConstant() {
+      this.style.setProperty(name, value, priority);
+    }
+
+    /** @this {Element} */
+    function styleFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.style.removeProperty(name);
+      else this.style.setProperty(name, x, priority);
+    }
+
+    return groups.each(value == null
+        ? styleNull : (typeof value === "function"
+        ? styleFunction : styleConstant));
+  };
+
+  groups.property = function(name, value) {
+    name = d3.ns.qualify(name);
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 2) {
+      return first(function() {
+        return this[name];
+      });
+    }
+
+    /** @this {Element} */
+    function propertyNull() {
+      delete this[name];
+    }
+
+    /** @this {Element} */
+    function propertyConstant() {
+      this[name] = value;
+    }
+
+    /** @this {Element} */
+    function propertyFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) delete this[name];
+      else this[name] = x;
+    }
+
+    return groups.each(value == null
+        ? propertyNull : (typeof value === "function"
+        ? propertyFunction : propertyConstant));
+  };
+
+  groups.text = function(value) {
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 1) {
+      return first(function() {
+        return this.textContent;
+      });
+    }
+
+    /** @this {Element} */
+    function textConstant() {
+      this.textContent = value;
+    }
+
+    /** @this {Element} */
+    function textFunction() {
+      this.textContent = value.apply(this, arguments);
+    }
+
+    return groups.each(typeof value === "function"
+        ? textFunction : textConstant);
+  };
+
+  groups.html = function(value) {
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 1) {
+      return first(function() {
+        return this.innerHTML;
+      });
+    }
+
+    /** @this {Element} */
+    function htmlConstant() {
+      this.innerHTML = value;
+    }
+
+    /** @this {Element} */
+    function htmlFunction() {
+      this.innerHTML = value.apply(this, arguments);
+    }
+
+    return groups.each(typeof value === "function"
+        ? htmlFunction : htmlConstant);
+  };
+
+  // TODO append(node)?
+  // TODO append(function)?
+  groups.append = function(name) {
+    name = d3.ns.qualify(name);
+
+    function append(node) {
+      return node.appendChild(document.createElement(name));
+    }
+
+    function appendNS(node) {
+      return node.appendChild(document.createElementNS(name.space, name.local));
+    }
+
+    return select(name.local ? appendNS : append);
+  };
+
+  // TODO insert(node, function)?
+  // TODO insert(function, string)?
+  // TODO insert(function, function)?
+  groups.insert = function(name, before) {
+    name = d3.ns.qualify(name);
+
+    function insert(node) {
+      return node.insertBefore(
+          document.createElement(name),
+          d3_select(before, node));
+    }
+
+    function insertNS(node) {
+      return node.insertBefore(
+          document.createElementNS(name.space, name.local),
+          d3_select(before, node));
+    }
+
+    return select(name.local ? insertNS : insert);
+  };
+
+  // TODO remove(selector)?
+  // TODO remove(node)?
+  // TODO remove(function)?
+  groups.remove = function() {
+    return groups.each(function() {
+      var parent = this.parentNode;
+      if (parent) parent.removeChild(this);
+    });
+  };
+
+  groups.sort = function(comparator) {
+    comparator = d3_selection_comparator.apply(this, arguments);
+    for (var j = 0, m = groups.length; j < m; j++) {
+      var group = groups[j];
+      group.sort(comparator);
+      for (var i = 1, n = group.length, prev = group[0]; i < n; i++) {
+        var node = group[i];
+        if (node) {
+          if (prev) prev.parentNode.insertBefore(node, prev.nextSibling);
+          prev = node;
+        }
+      }
+    }
+    return groups;
+  };
+
+  // type can be namespaced, e.g., "click.foo"
+  // listener can be null for removal
+  groups.on = function(type, listener, capture) {
+    if (arguments.length < 3) capture = false;
+
+    // parse the type specifier
+    var i = type.indexOf("."),
+        typo = i === -1 ? type : type.substring(0, i),
+        name = "__on" + type;
+
+    // remove the old event listener, and add the new event listener
+    return groups.each(function(d, i) {
+      if (this[name]) this.removeEventListener(typo, this[name], capture);
+      if (listener) this.addEventListener(typo, this[name] = l, capture);
+
+      // wrapped event listener that preserves i
+      var node = this;
+      function l(e) {
+        var o = d3.event; // Events can be reentrant (e.g., focus).
+        d3.event = e;
+        try {
+          listener.call(this, node.__data__, i);
+        } finally {
+          d3.event = o;
+        }
+      }
+    });
+  };
+
+  // TODO slice?
+
+  groups.transition = function() {
+    return d3_transition(groups);
+  };
+
+  groups.call = d3_call;
+
+  return groups;
+}
+
+function d3_selectionEnter(groups) {
+
+  function select(select) {
+    var subgroups = [],
+        subgroup,
+        subnode,
+        group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = group.parentNode;
+      for (var i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) {
+          subgroup.push(subnode = select(group.parentNode));
+          subnode.__data__ = node.__data__;
+        } else {
+          subgroup.push(null);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  }
+
+  // TODO append(node)?
+  // TODO append(function)?
+  groups.append = function(name) {
+    name = d3.ns.qualify(name);
+
+    function append(node) {
+      return node.appendChild(document.createElement(name));
+    }
+
+    function appendNS(node) {
+      return node.appendChild(document.createElementNS(name.space, name.local));
+    }
+
+    return select(name.local ? appendNS : append);
+  };
+
+  // TODO insert(node, function)?
+  // TODO insert(function, string)?
+  // TODO insert(function, function)?
+  groups.insert = function(name, before) {
+    name = d3.ns.qualify(name);
+
+    function insert(node) {
+      return node.insertBefore(
+          document.createElement(name),
+          d3_select(before, node));
+    }
+
+    function insertNS(node) {
+      return node.insertBefore(
+          document.createElementNS(name.space, name.local),
+          d3_select(before, node));
+    }
+
+    return select(name.local ? insertNS : insert);
+  };
+
+  return groups;
+}
+
+function d3_selection_comparator(comparator) {
+  if (!arguments.length) comparator = d3.ascending;
+  return function(a, b) {
+    return comparator(a && a.__data__, b && b.__data__);
+  };
+}
+
+function d3_selection_enterNode(data) {
+  return {__data__: data};
+}
+d3.transition = d3_root.transition;
+
+var d3_transitionId = 0,
+    d3_transitionInheritId = 0;
+
+function d3_transition(groups) {
+  var transition = {},
+      transitionId = d3_transitionInheritId || ++d3_transitionId,
+      tweens = {},
+      interpolators = [],
+      remove = false,
+      event = d3.dispatch("start", "end"),
+      stage = [],
+      delay = [],
+      duration = [],
+      durationMax,
+      ease = d3.ease("cubic-in-out");
+
+  //
+  // Be careful with concurrent transitions!
+  //
+  // Say transition A causes an exit. Before A finishes, a transition B is
+  // created, and believes it only needs to do an update, because the elements
+  // haven't been removed yet (which happens at the very end of the exit
+  // transition).
+  //
+  // Even worse, what if either transition A or B has a staggered delay? Then,
+  // some elements may be removed, while others remain. Transition B does not
+  // know to enter the elements because they were still present at the time
+  // the transition B was created (but not yet started).
+  //
+  // To prevent such confusion, we only trigger end events for transitions if
+  // the transition ending is the only one scheduled for the given element.
+  // Similarly, we only allow one transition to be active for any given
+  // element, so that concurrent transitions do not overwrite each other's
+  // properties.
+  //
+  // TODO Support transition namespaces, so that transitions can proceed
+  // concurrently on the same element if needed. Hopefully, this is rare!
+  //
+
+  groups.each(function() {
+    (this.__transition__ || (this.__transition__ = {})).owner = transitionId;
+  });
+
+  function step(elapsed) {
+    var clear = true,
+        k = -1;
+    groups.each(function() {
+      if (stage[++k] === 2) return; // ended
+      var t = (elapsed - delay[k]) / duration[k],
+          tx = this.__transition__,
+          te, // ease(t)
+          tk, // tween key
+          ik = interpolators[k];
+
+      // Check if the (un-eased) time is outside the range [0,1].
+      if (t < 1) {
+        clear = false;
+        if (t < 0) return;
+      } else {
+        t = 1;
+      }
+
+      // Determine the stage of this transition.
+      // 0 - Not yet started.
+      // 1 - In progress.
+      // 2 - Ended.
+      if (stage[k]) {
+        if (!tx || tx.active !== transitionId) {
+          stage[k] = 2;
+          return;
+        }
+      } else if (!tx || tx.active > transitionId) {
+        stage[k] = 2;
+        return;
+      } else {
+        stage[k] = 1;
+        event.start.dispatch.apply(this, arguments);
+        ik = interpolators[k] = {};
+        tx.active = transitionId;
+        for (tk in tweens) {
+          if (te = tweens[tk].apply(this, arguments)) {
+            ik[tk] = te;
+          }
+        }
+      }
+
+      // Apply the interpolators!
+      te = ease(t);
+      for (tk in ik) ik[tk].call(this, te);
+
+      // Handle ending transitions.
+      if (t === 1) {
+        stage[k] = 2;
+        if (tx.active === transitionId) {
+          var owner = tx.owner;
+          if (owner === transitionId) {
+            delete this.__transition__;
+            if (remove && this.parentNode) this.parentNode.removeChild(this);
+          }
+          d3_transitionInheritId = transitionId;
+          event.end.dispatch.apply(this, arguments);
+          d3_transitionInheritId = 0;
+          tx.owner = owner;
+        }
+      }
+    });
+    return clear;
+  }
+
+  transition.delay = function(value) {
+    var delayMin = Infinity,
+        k = -1;
+    if (typeof value === "function") {
+      groups.each(function(d, i) {
+        var x = delay[++k] = +value.apply(this, arguments);
+        if (x < delayMin) delayMin = x;
+      });
+    } else {
+      delayMin = +value;
+      groups.each(function(d, i) {
+        delay[++k] = delayMin;
+      });
+    }
+    d3_timer(step, delayMin);
+    return transition;
+  };
+
+  transition.duration = function(value) {
+    var k = -1;
+    if (typeof value === "function") {
+      durationMax = 0;
+      groups.each(function(d, i) {
+        var x = duration[++k] = +value.apply(this, arguments);
+        if (x > durationMax) durationMax = x;
+      });
+    } else {
+      durationMax = +value;
+      groups.each(function(d, i) {
+        duration[++k] = durationMax;
+      });
+    }
+    return transition;
+  };
+
+  transition.ease = function(value) {
+    ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
+    return transition;
+  };
+
+  transition.attrTween = function(name, tween) {
+
+    /** @this {Element} */
+    function attrTween(d, i) {
+      var f = tween.call(this, d, i, this.getAttribute(name));
+      return f && function(t) {
+        this.setAttribute(name, f(t));
+      };
+    }
+
+    /** @this {Element} */
+    function attrTweenNS(d, i) {
+      var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
+      return f && function(t) {
+        this.setAttributeNS(name.space, name.local, f(t));
+      };
+    }
+
+    tweens["attr." + name] = name.local ? attrTweenNS : attrTween;
+    return transition;
+  };
+
+  transition.attr = function(name, value) {
+    return transition.attrTween(name, d3_transitionTween(value));
+  };
+
+  transition.styleTween = function(name, tween, priority) {
+    if (arguments.length < 3) priority = null;
+
+    /** @this {Element} */
+    function styleTween(d, i) {
+      var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name));
+      return f && function(t) {
+        this.style.setProperty(name, f(t), priority);
+      };
+    }
+
+    tweens["style." + name] = styleTween;
+    return transition;
+  };
+
+  transition.style = function(name, value, priority) {
+    if (arguments.length < 3) priority = null;
+    return transition.styleTween(name, d3_transitionTween(value), priority);
+  };
+
+  transition.text = function(value) {
+    tweens.text = function(d, i) {
+      this.textContent = typeof value === "function"
+          ? value.call(this, d, i)
+          : value;
+    };
+    return transition;
+  };
+
+  transition.select = function(query) {
+    var k, t = d3_transition(groups.select(query)).ease(ease);
+    k = -1; t.delay(function(d, i) { return delay[++k]; });
+    k = -1; t.duration(function(d, i) { return duration[++k]; });
+    return t;
+  };
+
+  transition.selectAll = function(query) {
+    var k, t = d3_transition(groups.selectAll(query)).ease(ease);
+    k = -1; t.delay(function(d, i) { return delay[i ? k : ++k]; })
+    k = -1; t.duration(function(d, i) { return duration[i ? k : ++k]; });
+    return t;
+  };
+
+  transition.remove = function() {
+    remove = true;
+    return transition;
+  };
+
+  transition.each = function(type, listener) {
+    event[type].add(listener);
+    return transition;
+  };
+
+  transition.call = d3_call;
+
+  return transition.delay(0).duration(250);
+}
+
+function d3_transitionTween(b) {
+  return typeof b === "function"
+      ? function(d, i, a) { var v = b.call(this, d, i) + ""; return a != v && d3.interpolate(a, v); }
+      : (b = b + "", function(d, i, a) { return a != b && d3.interpolate(a, b); });
+}
+var d3_timer_queue = null,
+    d3_timer_interval, // is an interval (or frame) active?
+    d3_timer_timeout; // is a timeout active?
+
+// The timer will continue to fire until callback returns true.
+d3.timer = function(callback) {
+  d3_timer(callback, 0);
+};
+
+function d3_timer(callback, delay) {
+  var now = Date.now(),
+      found = false,
+      t0,
+      t1 = d3_timer_queue;
+
+  if (!isFinite(delay)) return;
+
+  // See if the callback's already in the queue.
+  while (t1) {
+    if (t1.callback === callback) {
+      t1.then = now;
+      t1.delay = delay;
+      found = true;
+      break;
+    }
+    t0 = t1;
+    t1 = t1.next;
+  }
+
+  // Otherwise, add the callback to the queue.
+  if (!found) d3_timer_queue = {
+    callback: callback,
+    then: now,
+    delay: delay,
+    next: d3_timer_queue
+  };
+
+  // Start animatin'!
+  if (!d3_timer_interval) {
+    d3_timer_timeout = clearTimeout(d3_timer_timeout);
+    d3_timer_interval = 1;
+    d3_timer_frame(d3_timer_step);
+  }
+}
+
+function d3_timer_step() {
+  var elapsed,
+      now = Date.now(),
+      t1 = d3_timer_queue;
+
+  while (t1) {
+    elapsed = now - t1.then;
+    if (elapsed > t1.delay) t1.flush = t1.callback(elapsed);
+    t1 = t1.next;
+  }
+
+  var delay = d3_timer_flush() - now;
+  if (delay > 24) {
+    if (isFinite(delay)) {
+      clearTimeout(d3_timer_timeout);
+      d3_timer_timeout = setTimeout(d3_timer_step, delay);
+    }
+    d3_timer_interval = 0;
+  } else {
+    d3_timer_interval = 1;
+    d3_timer_frame(d3_timer_step);
+  }
+}
+
+d3.timer.flush = function() {
+  var elapsed,
+      now = Date.now(),
+      t1 = d3_timer_queue;
+
+  while (t1) {
+    elapsed = now - t1.then;
+    if (!t1.delay) t1.flush = t1.callback(elapsed);
+    t1 = t1.next;
+  }
+
+  d3_timer_flush();
+};
+
+// Flush after callbacks, to avoid concurrent queue modification.
+function d3_timer_flush() {
+  var t0 = null,
+      t1 = d3_timer_queue,
+      then = Infinity;
+  while (t1) {
+    if (t1.flush) {
+      t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
+    } else {
+      then = Math.min(then, t1.then + t1.delay);
+      t1 = (t0 = t1).next;
+    }
+  }
+  return then;
+}
+
+var d3_timer_frame = window.requestAnimationFrame
+    || window.webkitRequestAnimationFrame
+    || window.mozRequestAnimationFrame
+    || window.oRequestAnimationFrame
+    || window.msRequestAnimationFrame
+    || function(callback) { setTimeout(callback, 17); };
+function d3_noop() {}
+d3.scale = {};
+
+function d3_scaleExtent(domain) {
+  var start = domain[0], stop = domain[domain.length - 1];
+  return start < stop ? [start, stop] : [stop, start];
+}
+function d3_scale_nice(domain, nice) {
+  var i0 = 0,
+      i1 = domain.length - 1,
+      x0 = domain[i0],
+      x1 = domain[i1],
+      dx;
+
+  if (x1 < x0) {
+    dx = i0; i0 = i1; i1 = dx;
+    dx = x0; x0 = x1; x1 = dx;
+  }
+
+  nice = nice(x1 - x0);
+  domain[i0] = nice.floor(x0);
+  domain[i1] = nice.ceil(x1);
+  return domain;
+}
+
+function d3_scale_niceDefault() {
+  return Math;
+}
+d3.scale.linear = function() {
+  var domain = [0, 1],
+      range = [0, 1],
+      interpolate = d3.interpolate,
+      clamp = false,
+      output,
+      input;
+
+  function rescale() {
+    var linear = domain.length == 2 ? d3_scale_bilinear : d3_scale_polylinear,
+        uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
+    output = linear(domain, range, uninterpolate, interpolate);
+    input = linear(range, domain, uninterpolate, d3.interpolate);
+    return scale;
+  }
+
+  function scale(x) {
+    return output(x);
+  }
+
+  // Note: requires range is coercible to number!
+  scale.invert = function(y) {
+    return input(y);
+  };
+
+  scale.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x.map(Number);
+    return rescale();
+  };
+
+  scale.range = function(x) {
+    if (!arguments.length) return range;
+    range = x;
+    return rescale();
+  };
+
+  scale.rangeRound = function(x) {
+    return scale.range(x).interpolate(d3.interpolateRound);
+  };
+
+  scale.clamp = function(x) {
+    if (!arguments.length) return clamp;
+    clamp = x;
+    return rescale();
+  };
+
+  scale.interpolate = function(x) {
+    if (!arguments.length) return interpolate;
+    interpolate = x;
+    return rescale();
+  };
+
+  scale.ticks = function(m) {
+    return d3_scale_linearTicks(domain, m);
+  };
+
+  scale.tickFormat = function(m) {
+    return d3_scale_linearTickFormat(domain, m);
+  };
+
+  scale.nice = function() {
+    d3_scale_nice(domain, d3_scale_linearNice);
+    return rescale();
+  };
+
+  return rescale();
+};
+
+function d3_scale_linearRebind(scale, linear) {
+  scale.range = d3.rebind(scale, linear.range);
+  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
+  scale.interpolate = d3.rebind(scale, linear.interpolate);
+  scale.clamp = d3.rebind(scale, linear.clamp);
+  return scale;
+}
+
+function d3_scale_linearNice(dx) {
+  dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
+  return {
+    floor: function(x) { return Math.floor(x / dx) * dx; },
+    ceil: function(x) { return Math.ceil(x / dx) * dx; }
+  };
+}
+
+// TODO Dates? Ugh.
+function d3_scale_linearTickRange(domain, m) {
+  var extent = d3_scaleExtent(domain),
+      span = extent[1] - extent[0],
+      step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
+      err = m / span * step;
+
+  // Filter ticks to get closer to the desired count.
+  if (err <= .15) step *= 10;
+  else if (err <= .35) step *= 5;
+  else if (err <= .75) step *= 2;
+
+  // Round start and stop values to step interval.
+  extent[0] = Math.ceil(extent[0] / step) * step;
+  extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
+  extent[2] = step;
+  return extent;
+}
+
+function d3_scale_linearTicks(domain, m) {
+  return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
+}
+
+function d3_scale_linearTickFormat(domain, m) {
+  return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
+}
+function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
+  var u = uninterpolate(domain[0], domain[1]),
+      i = interpolate(range[0], range[1]);
+  return function(x) {
+    return i(u(x));
+  };
+}
+function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
+  var u = [],
+      i = [],
+      j = 0,
+      n = domain.length;
+
+  while (++j < n) {
+    u.push(uninterpolate(domain[j - 1], domain[j]));
+    i.push(interpolate(range[j - 1], range[j]));
+  }
+
+  return function(x) {
+    var j = d3.bisect(domain, x, 1, domain.length - 1) - 1;
+    return i[j](u[j](x));
+  };
+}
+d3.scale.log = function() {
+  var linear = d3.scale.linear(),
+      log = d3_scale_log,
+      pow = log.pow;
+
+  function scale(x) {
+    return linear(log(x));
+  }
+
+  scale.invert = function(x) {
+    return pow(linear.invert(x));
+  };
+
+  scale.domain = function(x) {
+    if (!arguments.length) return linear.domain().map(pow);
+    log = x[0] < 0 ? d3_scale_logn : d3_scale_log;
+    pow = log.pow;
+    linear.domain(x.map(log));
+    return scale;
+  };
+
+  scale.nice = function() {
+    linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
+    return scale;
+  };
+
+  scale.ticks = function() {
+    var extent = d3_scaleExtent(linear.domain()),
+        ticks = [];
+    if (extent.every(isFinite)) {
+      var i = Math.floor(extent[0]),
+          j = Math.ceil(extent[1]),
+          u = pow(extent[0]),
+          v = pow(extent[1]);
+      if (log === d3_scale_logn) {
+        ticks.push(pow(i));
+        for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
+      } else {
+        for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
+        ticks.push(pow(i));
+      }
+      for (i = 0; ticks[i] < u; i++) {} // strip small values
+      for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
+      ticks = ticks.slice(i, j);
+    }
+    return ticks;
+  };
+
+  scale.tickFormat = function() {
+    return d3_scale_logTickFormat;
+  };
+
+  return d3_scale_linearRebind(scale, linear);
+};
+
+function d3_scale_log(x) {
+  return Math.log(x) / Math.LN10;
+}
+
+function d3_scale_logn(x) {
+  return -Math.log(-x) / Math.LN10;
+}
+
+d3_scale_log.pow = function(x) {
+  return Math.pow(10, x);
+};
+
+d3_scale_logn.pow = function(x) {
+  return -Math.pow(10, -x);
+};
+
+function d3_scale_logTickFormat(d) {
+  return d.toPrecision(1);
+}
+d3.scale.pow = function() {
+  var linear = d3.scale.linear(),
+      exponent = 1,
+      powp = Number,
+      powb = powp;
+
+  function scale(x) {
+    return linear(powp(x));
+  }
+
+  scale.invert = function(x) {
+    return powb(linear.invert(x));
+  };
+
+  scale.domain = function(x) {
+    if (!arguments.length) return linear.domain().map(powb);
+    powp = d3_scale_powPow(exponent);
+    powb = d3_scale_powPow(1 / exponent);
+    linear.domain(x.map(powp));
+    return scale;
+  };
+
+  scale.ticks = function(m) {
+    return d3_scale_linearTicks(scale.domain(), m);
+  };
+
+  scale.tickFormat = function(m) {
+    return d3_scale_linearTickFormat(scale.domain(), m);
+  };
+
+  scale.nice = function() {
+    return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
+  };
+
+  scale.exponent = function(x) {
+    if (!arguments.length) return exponent;
+    var domain = scale.domain();
+    exponent = x;
+    return scale.domain(domain);
+  };
+
+  return d3_scale_linearRebind(scale, linear);
+};
+
+function d3_scale_powPow(e) {
+  return function(x) {
+    return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
+  };
+}
+d3.scale.sqrt = function() {
+  return d3.scale.pow().exponent(.5);
+};
+d3.scale.ordinal = function() {
+  var domain = [],
+      index = {},
+      range = [],
+      rangeBand = 0,
+      rerange = d3_noop;
+
+  function scale(x) {
+    var i = x in index ? index[x] : (index[x] = domain.push(x) - 1);
+    return range[i % range.length];
+  }
+
+  scale.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x;
+    index = {};
+    var i = -1, j = -1, n = domain.length; while (++i < n) {
+      x = domain[i];
+      if (!(x in index)) index[x] = ++j;
+    }
+    rerange();
+    return scale;
+  };
+
+  scale.range = function(x) {
+    if (!arguments.length) return range;
+    range = x;
+    rerange = d3_noop;
+    return scale;
+  };
+
+  scale.rangePoints = function(x, padding) {
+    if (arguments.length < 2) padding = 0;
+    (rerange = function() {
+      var start = x[0],
+          stop = x[1],
+          step = (stop - start) / (domain.length - 1 + padding);
+      range = domain.length == 1
+          ? [(start + stop) / 2]
+          : d3.range(start + step * padding / 2, stop + step / 2, step);
+      rangeBand = 0;
+    })();
+    return scale;
+  };
+
+  scale.rangeBands = function(x, padding) {
+    if (arguments.length < 2) padding = 0;
+    (rerange = function() {
+      var start = x[0],
+          stop = x[1],
+          step = (stop - start) / (domain.length + padding);
+      range = d3.range(start + step * padding, stop, step);
+      rangeBand = step * (1 - padding);
+    })();
+    return scale;
+  };
+
+  scale.rangeRoundBands = function(x, padding) {
+    if (arguments.length < 2) padding = 0;
+    (rerange = function() {
+      var start = x[0],
+          stop = x[1],
+          diff = stop - start,
+          step = Math.floor(diff / (domain.length + padding)),
+          err = diff - (domain.length - padding) * step;
+      range = d3.range(start + Math.round(err / 2), stop, step);
+      rangeBand = Math.round(step * (1 - padding));
+    })();
+    return scale;
+  };
+
+  scale.rangeBand = function() {
+    return rangeBand;
+  };
+
+  return scale;
+};
+/*
+ * This product includes color specifications and designs developed by Cynthia
+ * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information.
+ */
+
+d3.scale.category10 = function() {
+  return d3.scale.ordinal().range(d3_category10);
+};
+
+d3.scale.category20 = function() {
+  return d3.scale.ordinal().range(d3_category20);
+};
+
+d3.scale.category20b = function() {
+  return d3.scale.ordinal().range(d3_category20b);
+};
+
+d3.scale.category20c = function() {
+  return d3.scale.ordinal().range(d3_category20c);
+};
+
+var d3_category10 = [
+  "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
+  "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
+];
+
+var d3_category20 = [
+  "#1f77b4", "#aec7e8",
+  "#ff7f0e", "#ffbb78",
+  "#2ca02c", "#98df8a",
+  "#d62728", "#ff9896",
+  "#9467bd", "#c5b0d5",
+  "#8c564b", "#c49c94",
+  "#e377c2", "#f7b6d2",
+  "#7f7f7f", "#c7c7c7",
+  "#bcbd22", "#dbdb8d",
+  "#17becf", "#9edae5"
+];
+
+var d3_category20b = [
+  "#393b79", "#5254a3", "#6b6ecf", "#9c9ede",
+  "#637939", "#8ca252", "#b5cf6b", "#cedb9c",
+  "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94",
+  "#843c39", "#ad494a", "#d6616b", "#e7969c",
+  "#7b4173", "#a55194", "#ce6dbd", "#de9ed6"
+];
+
+var d3_category20c = [
+  "#3182bd", "#6baed6", "#9ecae1", "#c6dbef",
+  "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2",
+  "#31a354", "#74c476", "#a1d99b", "#c7e9c0",
+  "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb",
+  "#636363", "#969696", "#bdbdbd", "#d9d9d9"
+];
+d3.scale.quantile = function() {
+  var domain = [],
+      range = [],
+      thresholds = [];
+
+  function rescale() {
+    var k = 0,
+        n = domain.length,
+        q = range.length;
+    thresholds.length = Math.max(0, q - 1);
+    while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
+  }
+
+  function scale(x) {
+    if (isNaN(x = +x)) return NaN;
+    return range[d3.bisect(thresholds, x)];
+  }
+
+  scale.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending);
+    rescale();
+    return scale;
+  };
+
+  scale.range = function(x) {
+    if (!arguments.length) return range;
+    range = x;
+    rescale();
+    return scale;
+  };
+
+  scale.quantiles = function() {
+    return thresholds;
+  };
+
+  return scale;
+};
+d3.scale.quantize = function() {
+  var x0 = 0,
+      x1 = 1,
+      kx = 2,
+      i = 1,
+      range = [0, 1];
+
+  function scale(x) {
+    return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
+  }
+
+  scale.domain = function(x) {
+    if (!arguments.length) return [x0, x1];
+    x0 = x[0];
+    x1 = x[1];
+    kx = range.length / (x1 - x0);
+    return scale;
+  };
+
+  scale.range = function(x) {
+    if (!arguments.length) return range;
+    range = x;
+    kx = range.length / (x1 - x0);
+    i = range.length - 1;
+    return scale;
+  };
+
+  return scale;
+};
+d3.svg = {};
+d3.svg.arc = function() {
+  var innerRadius = d3_svg_arcInnerRadius,
+      outerRadius = d3_svg_arcOuterRadius,
+      startAngle = d3_svg_arcStartAngle,
+      endAngle = d3_svg_arcEndAngle;
+
+  function arc() {
+    var r0 = innerRadius.apply(this, arguments),
+        r1 = outerRadius.apply(this, arguments),
+        a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
+        a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
+        da = a1 - a0,
+        df = da < Math.PI ? "0" : "1",
+        c0 = Math.cos(a0),
+        s0 = Math.sin(a0),
+        c1 = Math.cos(a1),
+        s1 = Math.sin(a1);
+    return da >= d3_svg_arcMax
+      ? (r0
+      ? "M0," + r1
+      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
+      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
+      + "M0," + r0
+      + "A" + r0 + "," + r0 + " 0 1,1 0," + (-r0)
+      + "A" + r0 + "," + r0 + " 0 1,1 0," + r0
+      + "Z"
+      : "M0," + r1
+      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
+      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
+      + "Z")
+      : (r0
+      ? "M" + r1 * c0 + "," + r1 * s0
+      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
+      + "L" + r0 * c1 + "," + r0 * s1
+      + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
+      + "Z"
+      : "M" + r1 * c0 + "," + r1 * s0
+      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
+      + "L0,0"
+      + "Z");
+  }
+
+  arc.innerRadius = function(v) {
+    if (!arguments.length) return innerRadius;
+    innerRadius = d3.functor(v);
+    return arc;
+  };
+
+  arc.outerRadius = function(v) {
+    if (!arguments.length) return outerRadius;
+    outerRadius = d3.functor(v);
+    return arc;
+  };
+
+  arc.startAngle = function(v) {
+    if (!arguments.length) return startAngle;
+    startAngle = d3.functor(v);
+    return arc;
+  };
+
+  arc.endAngle = function(v) {
+    if (!arguments.length) return endAngle;
+    endAngle = d3.functor(v);
+    return arc;
+  };
+
+  arc.centroid = function() {
+    var r = (innerRadius.apply(this, arguments)
+        + outerRadius.apply(this, arguments)) / 2,
+        a = (startAngle.apply(this, arguments)
+        + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
+    return [Math.cos(a) * r, Math.sin(a) * r];
+  };
+
+  return arc;
+};
+
+var d3_svg_arcOffset = -Math.PI / 2,
+    d3_svg_arcMax = 2 * Math.PI - 1e-6;
+
+function d3_svg_arcInnerRadius(d) {
+  return d.innerRadius;
+}
+
+function d3_svg_arcOuterRadius(d) {
+  return d.outerRadius;
+}
+
+function d3_svg_arcStartAngle(d) {
+  return d.startAngle;
+}
+
+function d3_svg_arcEndAngle(d) {
+  return d.endAngle;
+}
+function d3_svg_line(projection) {
+  var x = d3_svg_lineX,
+      y = d3_svg_lineY,
+      interpolate = "linear",
+      interpolator = d3_svg_lineInterpolators[interpolate],
+      tension = .7;
+
+  function line(d) {
+    return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
+  }
+
+  line.x = function(v) {
+    if (!arguments.length) return x;
+    x = v;
+    return line;
+  };
+
+  line.y = function(v) {
+    if (!arguments.length) return y;
+    y = v;
+    return line;
+  };
+
+  line.interpolate = function(v) {
+    if (!arguments.length) return interpolate;
+    interpolator = d3_svg_lineInterpolators[interpolate = v];
+    return line;
+  };
+
+  line.tension = function(v) {
+    if (!arguments.length) return tension;
+    tension = v;
+    return line;
+  };
+
+  return line;
+}
+
+d3.svg.line = function() {
+  return d3_svg_line(Object);
+};
+
+// Converts the specified array of data into an array of points
+// (x-y tuples), by evaluating the specified `x` and `y` functions on each
+// data point. The `this` context of the evaluated functions is the specified
+// "self" object; each function is passed the current datum and index.
+function d3_svg_linePoints(self, d, x, y) {
+  var points = [],
+      i = -1,
+      n = d.length,
+      fx = typeof x === "function",
+      fy = typeof y === "function",
+      value;
+  if (fx && fy) {
+    while (++i < n) points.push([
+      x.call(self, value = d[i], i),
+      y.call(self, value, i)
+    ]);
+  } else if (fx) {
+    while (++i < n) points.push([x.call(self, d[i], i), y]);
+  } else if (fy) {
+    while (++i < n) points.push([x, y.call(self, d[i], i)]);
+  } else {
+    while (++i < n) points.push([x, y]);
+  }
+  return points;
+}
+
+// The default `x` property, which references d[0].
+function d3_svg_lineX(d) {
+  return d[0];
+}
+
+// The default `y` property, which references d[1].
+function d3_svg_lineY(d) {
+  return d[1];
+}
+
+// The various interpolators supported by the `line` class.
+var d3_svg_lineInterpolators = {
+  "linear": d3_svg_lineLinear,
+  "step-before": d3_svg_lineStepBefore,
+  "step-after": d3_svg_lineStepAfter,
+  "basis": d3_svg_lineBasis,
+  "basis-open": d3_svg_lineBasisOpen,
+  "basis-closed": d3_svg_lineBasisClosed,
+  "bundle": d3_svg_lineBundle,
+  "cardinal": d3_svg_lineCardinal,
+  "cardinal-open": d3_svg_lineCardinalOpen,
+  "cardinal-closed": d3_svg_lineCardinalClosed,
+  "monotone": d3_svg_lineMonotone
+};
+
+// Linear interpolation; generates "L" commands.
+function d3_svg_lineLinear(points) {
+  var path = [],
+      i = 0,
+      n = points.length,
+      p = points[0];
+  path.push(p[0], ",", p[1]);
+  while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]);
+  return path.join("");
+}
+
+// Step interpolation; generates "H" and "V" commands.
+function d3_svg_lineStepBefore(points) {
+  var path = [],
+      i = 0,
+      n = points.length,
+      p = points[0];
+  path.push(p[0], ",", p[1]);
+  while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
+  return path.join("");
+}
+
+// Step interpolation; generates "H" and "V" commands.
+function d3_svg_lineStepAfter(points) {
+  var path = [],
+      i = 0,
+      n = points.length,
+      p = points[0];
+  path.push(p[0], ",", p[1]);
+  while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
+  return path.join("");
+}
+
+// Open cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinalOpen(points, tension) {
+  return points.length < 4
+      ? d3_svg_lineLinear(points)
+      : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1),
+        d3_svg_lineCardinalTangents(points, tension));
+}
+
+// Closed cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinalClosed(points, tension) {
+  return points.length < 3
+      ? d3_svg_lineLinear(points)
+      : points[0] + d3_svg_lineHermite((points.push(points[0]), points),
+        d3_svg_lineCardinalTangents([points[points.length - 2]]
+        .concat(points, [points[1]]), tension));
+}
+
+// Cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinal(points, tension, closed) {
+  return points.length < 3
+      ? d3_svg_lineLinear(points)
+      : points[0] + d3_svg_lineHermite(points,
+        d3_svg_lineCardinalTangents(points, tension));
+}
+
+// Hermite spline construction; generates "C" commands.
+function d3_svg_lineHermite(points, tangents) {
+  if (tangents.length < 1
+      || (points.length != tangents.length
+      && points.length != tangents.length + 2)) {
+    return d3_svg_lineLinear(points);
+  }
+
+  var quad = points.length != tangents.length,
+      path = "",
+      p0 = points[0],
+      p = points[1],
+      t0 = tangents[0],
+      t = t0,
+      pi = 1;
+
+  if (quad) {
+    path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3)
+        + "," + p[0] + "," + p[1];
+    p0 = points[1];
+    pi = 2;
+  }
+
+  if (tangents.length > 1) {
+    t = tangents[1];
+    p = points[pi];
+    pi++;
+    path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1])
+        + "," + (p[0] - t[0]) + "," + (p[1] - t[1])
+        + "," + p[0] + "," + p[1];
+    for (var i = 2; i < tangents.length; i++, pi++) {
+      p = points[pi];
+      t = tangents[i];
+      path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1])
+          + "," + p[0] + "," + p[1];
+    }
+  }
+
+  if (quad) {
+    var lp = points[pi];
+    path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3)
+        + "," + lp[0] + "," + lp[1];
+  }
+
+  return path;
+}
+
+// Generates tangents for a cardinal spline.
+function d3_svg_lineCardinalTangents(points, tension) {
+  var tangents = [],
+      a = (1 - tension) / 2,
+      p0,
+      p1 = points[0],
+      p2 = points[1],
+      i = 1,
+      n = points.length;
+  while (++i < n) {
+    p0 = p1;
+    p1 = p2;
+    p2 = points[i];
+    tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
+  }
+  return tangents;
+}
+
+// B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasis(points) {
+  if (points.length < 3) return d3_svg_lineLinear(points);
+  var path = [],
+      i = 1,
+      n = points.length,
+      pi = points[0],
+      x0 = pi[0],
+      y0 = pi[1],
+      px = [x0, x0, x0, (pi = points[1])[0]],
+      py = [y0, y0, y0, pi[1]];
+  path.push(x0, ",", y0);
+  d3_svg_lineBasisBezier(path, px, py);
+  while (++i < n) {
+    pi = points[i];
+    px.shift(); px.push(pi[0]);
+    py.shift(); py.push(pi[1]);
+    d3_svg_lineBasisBezier(path, px, py);
+  }
+  i = -1;
+  while (++i < 2) {
+    px.shift(); px.push(pi[0]);
+    py.shift(); py.push(pi[1]);
+    d3_svg_lineBasisBezier(path, px, py);
+  }
+  return path.join("");
+}
+
+// Open B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasisOpen(points) {
+  if (points.length < 4) return d3_svg_lineLinear(points);
+  var path = [],
+      i = -1,
+      n = points.length,
+      pi,
+      px = [0],
+      py = [0];
+  while (++i < 3) {
+    pi = points[i];
+    px.push(pi[0]);
+    py.push(pi[1]);
+  }
+  path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px)
+    + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
+  --i; while (++i < n) {
+    pi = points[i];
+    px.shift(); px.push(pi[0]);
+    py.shift(); py.push(pi[1]);
+    d3_svg_lineBasisBezier(path, px, py);
+  }
+  return path.join("");
+}
+
+// Closed B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasisClosed(points) {
+  var path,
+      i = -1,
+      n = points.length,
+      m = n + 4,
+      pi,
+      px = [],
+      py = [];
+  while (++i < 4) {
+    pi = points[i % n];
+    px.push(pi[0]);
+    py.push(pi[1]);
+  }
+  path = [
+    d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",",
+    d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)
+  ];
+  --i; while (++i < m) {
+    pi = points[i % n];
+    px.shift(); px.push(pi[0]);
+    py.shift(); py.push(pi[1]);
+    d3_svg_lineBasisBezier(path, px, py);
+  }
+  return path.join("");
+}
+
+function d3_svg_lineBundle(points, tension) {
+  var n = points.length - 1,
+      x0 = points[0][0],
+      y0 = points[0][1],
+      dx = points[n][0] - x0,
+      dy = points[n][1] - y0,
+      i = -1,
+      p,
+      t;
+  while (++i <= n) {
+    p = points[i];
+    t = i / n;
+    p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
+    p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
+  }
+  return d3_svg_lineBasis(points);
+}
+
+// Returns the dot product of the given four-element vectors.
+function d3_svg_lineDot4(a, b) {
+  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
+}
+
+// Matrix to transform basis (b-spline) control points to bezier
+// control points. Derived from FvD 11.2.8.
+var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
+    d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
+    d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
+
+// Pushes a "C" BÃ©zier curve onto the specified path array, given the
+// two specified four-element arrays which define the control points.
+function d3_svg_lineBasisBezier(path, x, y) {
+  path.push(
+      "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
+}
+
+// Computes the slope from points p0 to p1.
+function d3_svg_lineSlope(p0, p1) {
+  return (p1[1] - p0[1]) / (p1[0] - p0[0]);
+}
+
+// Compute three-point differences for the given points.
+// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference
+function d3_svg_lineFiniteDifferences(points) {
+  var i = 0,
+      j = points.length - 1,
+      m = [],
+      p0 = points[0],
+      p1 = points[1],
+      d = m[0] = d3_svg_lineSlope(p0, p1);
+  while (++i < j) {
+    m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]));
+  }
+  m[i] = d;
+  return m;
+}
+
+// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite
+// interpolation. Returns an array of tangent vectors. For details, see
+// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
+function d3_svg_lineMonotoneTangents(points) {
+  var tangents = [],
+      d,
+      a,
+      b,
+      s,
+      m = d3_svg_lineFiniteDifferences(points),
+      i = -1,
+      j = points.length - 1;
+
+  // The first two steps are done by computing finite-differences:
+  // 1. Compute the slopes of the secant lines between successive points.
+  // 2. Initialize the tangents at every point as the average of the secants.
+
+  // Then, for each segmentâŠ
+  while (++i < j) {
+    d = d3_svg_lineSlope(points[i], points[i + 1]);
+
+    // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set
+    // mk = m{k + 1} = 0 as the spline connecting these points must be flat to
+    // preserve monotonicity. Ignore step 4 and 5 for those k.
+
+    if (Math.abs(d) < 1e-6) {
+      m[i] = m[i + 1] = 0;
+    } else {
+      // 4. Let ak = mk / dk and bk = m{k + 1} / dk.
+      a = m[i] / d;
+      b = m[i + 1] / d;
+
+      // 5. Prevent overshoot and ensure monotonicity by restricting the
+      // magnitude of vector <ak, bk> to a circle of radius 3.
+      s = a * a + b * b;
+      if (s > 9) {
+        s = d * 3 / Math.sqrt(s);
+        m[i] = s * a;
+        m[i + 1] = s * b;
+      }
+    }
+  }
+
+  // Compute the normalized tangent vector from the slopes. Note that if x is
+  // not monotonic, it's possible that the slope will be infinite, so we protect
+  // against NaN by setting the coordinate to zero.
+  i = -1; while (++i <= j) {
+    s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0])
+      / (6 * (1 + m[i] * m[i]));
+    tangents.push([s || 0, m[i] * s || 0]);
+  }
+
+  return tangents;
+}
+
+function d3_svg_lineMonotone(points) {
+  return points.length < 3
+      ? d3_svg_lineLinear(points)
+      : points[0] +
+        d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
+}
+d3.svg.line.radial = function() {
+  var line = d3_svg_line(d3_svg_lineRadial);
+  line.radius = line.x, delete line.x;
+  line.angle = line.y, delete line.y;
+  return line;
+};
+
+function d3_svg_lineRadial(points) {
+  var point,
+      i = -1,
+      n = points.length,
+      r,
+      a;
+  while (++i < n) {
+    point = points[i];
+    r = point[0];
+    a = point[1] + d3_svg_arcOffset;
+    point[0] = r * Math.cos(a);
+    point[1] = r * Math.sin(a);
+  }
+  return points;
+}
+function d3_svg_area(projection) {
+  var x0 = d3_svg_lineX,
+      x1 = d3_svg_lineX,
+      y0 = 0,
+      y1 = d3_svg_lineY,
+      interpolate = "linear",
+      interpolator = d3_svg_lineInterpolators[interpolate],
+      tension = .7;
+
+  function area(d) {
+    if (d.length < 1) return null;
+    var points0 = d3_svg_linePoints(this, d, x0, y0),
+        points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
+    return "M" + interpolator(projection(points1), tension)
+         + "L" + interpolator(projection(points0.reverse()), tension)
+         + "Z";
+  }
+
+  area.x = function(x) {
+    if (!arguments.length) return x1;
+    x0 = x1 = x;
+    return area;
+  };
+
+  area.x0 = function(x) {
+    if (!arguments.length) return x0;
+    x0 = x;
+    return area;
+  };
+
+  area.x1 = function(x) {
+    if (!arguments.length) return x1;
+    x1 = x;
+    return area;
+  };
+
+  area.y = function(y) {
+    if (!arguments.length) return y1;
+    y0 = y1 = y;
+    return area;
+  };
+
+  area.y0 = function(y) {
+    if (!arguments.length) return y0;
+    y0 = y;
+    return area;
+  };
+
+  area.y1 = function(y) {
+    if (!arguments.length) return y1;
+    y1 = y;
+    return area;
+  };
+
+  area.interpolate = function(x) {
+    if (!arguments.length) return interpolate;
+    interpolator = d3_svg_lineInterpolators[interpolate = x];
+    return area;
+  };
+
+  area.tension = function(x) {
+    if (!arguments.length) return tension;
+    tension = x;
+    return area;
+  };
+
+  return area;
+}
+
+d3.svg.area = function() {
+  return d3_svg_area(Object);
+};
+
+function d3_svg_areaX(points) {
+  return function(d, i) {
+    return points[i][0];
+  };
+}
+
+function d3_svg_areaY(points) {
+  return function(d, i) {
+    return points[i][1];
+  };
+}
+d3.svg.area.radial = function() {
+  var area = d3_svg_area(d3_svg_lineRadial);
+  area.radius = area.x, delete area.x;
+  area.innerRadius = area.x0, delete area.x0;
+  area.outerRadius = area.x1, delete area.x1;
+  area.angle = area.y, delete area.y;
+  area.startAngle = area.y0, delete area.y0;
+  area.endAngle = area.y1, delete area.y1;
+  return area;
+};
+d3.svg.chord = function() {
+  var source = d3_svg_chordSource,
+      target = d3_svg_chordTarget,
+      radius = d3_svg_chordRadius,
+      startAngle = d3_svg_arcStartAngle,
+      endAngle = d3_svg_arcEndAngle;
+
+  // TODO Allow control point to be customized.
+
+  function chord(d, i) {
+    var s = subgroup(this, source, d, i),
+        t = subgroup(this, target, d, i);
+    return "M" + s.p0
+      + arc(s.r, s.p1) + (equals(s, t)
+      ? curve(s.r, s.p1, s.r, s.p0)
+      : curve(s.r, s.p1, t.r, t.p0)
+      + arc(t.r, t.p1)
+      + curve(t.r, t.p1, s.r, s.p0))
+      + "Z";
+  }
+
+  function subgroup(self, f, d, i) {
+    var subgroup = f.call(self, d, i),
+        r = radius.call(self, subgroup, i),
+        a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
+        a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
+    return {
+      r: r,
+      a0: a0,
+      a1: a1,
+      p0: [r * Math.cos(a0), r * Math.sin(a0)],
+      p1: [r * Math.cos(a1), r * Math.sin(a1)]
+    };
+  }
+
+  function equals(a, b) {
+    return a.a0 == b.a0 && a.a1 == b.a1;
+  }
+
+  function arc(r, p) {
+    return "A" + r + "," + r + " 0 0,1 " + p;
+  }
+
+  function curve(r0, p0, r1, p1) {
+    return "Q 0,0 " + p1;
+  }
+
+  chord.radius = function(v) {
+    if (!arguments.length) return radius;
+    radius = d3.functor(v);
+    return chord;
+  };
+
+  chord.source = function(v) {
+    if (!arguments.length) return source;
+    source = d3.functor(v);
+    return chord;
+  };
+
+  chord.target = function(v) {
+    if (!arguments.length) return target;
+    target = d3.functor(v);
+    return chord;
+  };
+
+  chord.startAngle = function(v) {
+    if (!arguments.length) return startAngle;
+    startAngle = d3.functor(v);
+    return chord;
+  };
+
+  chord.endAngle = function(v) {
+    if (!arguments.length) return endAngle;
+    endAngle = d3.functor(v);
+    return chord;
+  };
+
+  return chord;
+};
+
+function d3_svg_chordSource(d) {
+  return d.source;
+}
+
+function d3_svg_chordTarget(d) {
+  return d.target;
+}
+
+function d3_svg_chordRadius(d) {
+  return d.radius;
+}
+
+function d3_svg_chordStartAngle(d) {
+  return d.startAngle;
+}
+
+function d3_svg_chordEndAngle(d) {
+  return d.endAngle;
+}
+d3.svg.diagonal = function() {
+  var source = d3_svg_chordSource,
+      target = d3_svg_chordTarget,
+      projection = d3_svg_diagonalProjection;
+
+  function diagonal(d, i) {
+    var p0 = source.call(this, d, i),
+        p3 = target.call(this, d, i),
+        m = (p0.y + p3.y) / 2,
+        p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3];
+    p = p.map(projection);
+    return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
+  }
+
+  diagonal.source = function(x) {
+    if (!arguments.length) return source;
+    source = d3.functor(x);
+    return diagonal;
+  };
+
+  diagonal.target = function(x) {
+    if (!arguments.length) return target;
+    target = d3.functor(x);
+    return diagonal;
+  };
+
+  diagonal.projection = function(x) {
+    if (!arguments.length) return projection;
+    projection = x;
+    return diagonal;
+  };
+
+  return diagonal;
+};
+
+function d3_svg_diagonalProjection(d) {
+  return [d.x, d.y];
+}
+d3.svg.diagonal.radial = function() {
+  var diagonal = d3.svg.diagonal(),
+      projection = d3_svg_diagonalProjection,
+      projection_ = diagonal.projection;
+
+  diagonal.projection = function(x) {
+    return arguments.length
+        ? projection_(d3_svg_diagonalRadialProjection(projection = x))
+        : projection;
+  };
+
+  return diagonal;
+};
+
+function d3_svg_diagonalRadialProjection(projection) {
+  return function() {
+    var d = projection.apply(this, arguments),
+        r = d[0],
+        a = d[1] + d3_svg_arcOffset;
+    return [r * Math.cos(a), r * Math.sin(a)];
+  };
+}
+d3.svg.mouse = function(container) {
+  return d3_svg_mousePoint(container, d3.event);
+};
+
+// https://bugs.webkit.org/show_bug.cgi?id=44083
+var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0;
+
+function d3_svg_mousePoint(container, e) {
+  var point = (container.ownerSVGElement || container).createSVGPoint();
+  if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
+    var svg = d3.select(document.body)
+      .append("svg:svg")
+        .style("position", "absolute")
+        .style("top", 0)
+        .style("left", 0);
+    var ctm = svg[0][0].getScreenCTM();
+    d3_mouse_bug44083 = !(ctm.f || ctm.e);
+    svg.remove();
+  }
+  if (d3_mouse_bug44083) {
+    point.x = e.pageX;
+    point.y = e.pageY;
+  } else {
+    point.x = e.clientX;
+    point.y = e.clientY;
+  }
+  point = point.matrixTransform(container.getScreenCTM().inverse());
+  return [point.x, point.y];
+};
+d3.svg.touches = function(container) {
+  var touches = d3.event.touches;
+  return touches ? d3_array(touches).map(function(touch) {
+    var point = d3_svg_mousePoint(container, touch);
+    point.identifier = touch.identifier;
+    return point;
+  }) : [];
+};
+d3.svg.symbol = function() {
+  var type = d3_svg_symbolType,
+      size = d3_svg_symbolSize;
+
+  function symbol(d, i) {
+    return (d3_svg_symbols[type.call(this, d, i)]
+        || d3_svg_symbols.circle)
+        (size.call(this, d, i));
+  }
+
+  symbol.type = function(x) {
+    if (!arguments.length) return type;
+    type = d3.functor(x);
+    return symbol;
+  };
+
+  // size of symbol in square pixels
+  symbol.size = function(x) {
+    if (!arguments.length) return size;
+    size = d3.functor(x);
+    return symbol;
+  };
+
+  return symbol;
+};
+
+function d3_svg_symbolSize() {
+  return 64;
+}
+
+function d3_svg_symbolType() {
+  return "circle";
+}
+
+// TODO cross-diagonal?
+var d3_svg_symbols = {
+  "circle": function(size) {
+    var r = Math.sqrt(size / Math.PI);
+    return "M0," + r
+        + "A" + r + "," + r + " 0 1,1 0," + (-r)
+        + "A" + r + "," + r + " 0 1,1 0," + r
+        + "Z";
+  },
+  "cross": function(size) {
+    var r = Math.sqrt(size / 5) / 2;
+    return "M" + -3 * r + "," + -r
+        + "H" + -r
+        + "V" + -3 * r
+        + "H" + r
+        + "V" + -r
+        + "H" + 3 * r
+        + "V" + r
+        + "H" + r
+        + "V" + 3 * r
+        + "H" + -r
+        + "V" + r
+        + "H" + -3 * r
+        + "Z";
+  },
+  "diamond": function(size) {
+    var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
+        rx = ry * d3_svg_symbolTan30;
+    return "M0," + -ry
+        + "L" + rx + ",0"
+        + " 0," + ry
+        + " " + -rx + ",0"
+        + "Z";
+  },
+  "square": function(size) {
+    var r = Math.sqrt(size) / 2;
+    return "M" + -r + "," + -r
+        + "L" + r + "," + -r
+        + " " + r + "," + r
+        + " " + -r + "," + r
+        + "Z";
+  },
+  "triangle-down": function(size) {
+    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
+        ry = rx * d3_svg_symbolSqrt3 / 2;
+    return "M0," + ry
+        + "L" + rx +"," + -ry
+        + " " + -rx + "," + -ry
+        + "Z";
+  },
+  "triangle-up": function(size) {
+    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
+        ry = rx * d3_svg_symbolSqrt3 / 2;
+    return "M0," + -ry
+        + "L" + rx +"," + ry
+        + " " + -rx + "," + ry
+        + "Z";
+  }
+};
+
+d3.svg.symbolTypes = d3.keys(d3_svg_symbols);
+
+var d3_svg_symbolSqrt3 = Math.sqrt(3),
+    d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
+})();
Index: /Dev/trunk/d3/d3.layout.js
===================================================================
--- /Dev/trunk/d3/d3.layout.js	(revision 76)
+++ /Dev/trunk/d3/d3.layout.js	(revision 76)
@@ -0,0 +1,1923 @@
+(function(){d3.layout = {};
+// Implements hierarchical edge bundling using Holten's algorithm. For each
+// input link, a path is computed that travels through the tree, up the parent
+// hierarchy to the least common ancestor, and then back down to the destination
+// node. Each path is simply an array of nodes.
+d3.layout.bundle = function() {
+  return function(links) {
+    var paths = [],
+        i = -1,
+        n = links.length;
+    while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
+    return paths;
+  };
+};
+
+function d3_layout_bundlePath(link) {
+  var start = link.source,
+      end = link.target,
+      lca = d3_layout_bundleLeastCommonAncestor(start, end),
+      points = [start];
+  while (start !== lca) {
+    start = start.parent;
+    points.push(start);
+  }
+  var k = points.length;
+  while (end !== lca) {
+    points.splice(k, 0, end);
+    end = end.parent;
+  }
+  return points;
+}
+
+function d3_layout_bundleAncestors(node) {
+  var ancestors = [],
+      parent = node.parent;
+  while (parent != null) {
+    ancestors.push(node);
+    node = parent;
+    parent = parent.parent;
+  }
+  ancestors.push(node);
+  return ancestors;
+}
+
+function d3_layout_bundleLeastCommonAncestor(a, b) {
+  if (a === b) return a;
+  var aNodes = d3_layout_bundleAncestors(a),
+      bNodes = d3_layout_bundleAncestors(b),
+      aNode = aNodes.pop(),
+      bNode = bNodes.pop(),
+      sharedNode = null;
+  while (aNode === bNode) {
+    sharedNode = aNode;
+    aNode = aNodes.pop();
+    bNode = bNodes.pop();
+  }
+  return sharedNode;
+}
+d3.layout.chord = function() {
+  var chord = {},
+      chords,
+      groups,
+      matrix,
+      n,
+      padding = 0,
+      sortGroups,
+      sortSubgroups,
+      sortChords;
+
+  function relayout() {
+    var subgroups = {},
+        groupSums = [],
+        groupIndex = d3.range(n),
+        subgroupIndex = [],
+        k,
+        x,
+        x0,
+        i,
+        j;
+
+    chords = [];
+    groups = [];
+
+    // 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(d3.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 = (2 * Math.PI - padding * n) / k;
+
+    // Compute the start and end angle for each group and subgroup.
+    x = 0, i = -1; while (++i < n) {
+      x0 = x, j = -1; while (++j < n) {
+        var di = groupIndex[i],
+            dj = subgroupIndex[i][j],
+            v = matrix[di][dj];
+        subgroups[di + "-" + dj] = {
+          index: di,
+          subindex: dj,
+          startAngle: x,
+          endAngle: x += v * k,
+          value: v
+        };
+      }
+      groups.push({
+        index: di,
+        startAngle: x0,
+        endAngle: x,
+        value: (x - x0) / k
+      });
+      x += padding;
+    }
+
+    // Generate chords for each (non-empty) subgroup-subgroup link.
+    i = -1; while (++i < n) {
+      j = i - 1; while (++j < n) {
+        var source = subgroups[i + "-" + j],
+            target = subgroups[j + "-" + i];
+        if (source.value || target.value) {
+          chords.push(source.value < target.value
+              ? {source: target, target: source}
+              : {source: source, target: target})
+        }
+      }
+    }
+
+    if (sortChords) resort();
+  }
+
+  function resort() {
+    chords.sort(function(a, b) {
+      return sortChords(a.target.value, b.target.value);
+    });
+  }
+
+  chord.matrix = function(x) {
+    if (!arguments.length) return matrix;
+    n = (matrix = x) && matrix.length;
+    chords = groups = null;
+    return chord;
+  };
+
+  chord.padding = function(x) {
+    if (!arguments.length) return padding;
+    padding = x;
+    chords = groups = null;
+    return chord;
+  };
+
+  chord.sortGroups = function(x) {
+    if (!arguments.length) return sortGroups;
+    sortGroups = x;
+    chords = groups = null;
+    return chord;
+  };
+
+  chord.sortSubgroups = function(x) {
+    if (!arguments.length) return sortSubgroups;
+    sortSubgroups = x;
+    chords = null;
+    return chord;
+  };
+
+  chord.sortChords = function(x) {
+    if (!arguments.length) return sortChords;
+    sortChords = x;
+    if (chords) resort();
+    return chord;
+  };
+
+  chord.chords = function() {
+    if (!chords) relayout();
+    return chords;
+  };
+
+  chord.groups = function() {
+    if (!groups) relayout();
+    return groups;
+  };
+
+  return chord;
+};
+// A rudimentary force layout using Gauss-Seidel.
+d3.layout.force = function() {
+  var force = {},
+      event = d3.dispatch("tick"),
+      size = [1, 1],
+      alpha,
+      friction = .9,
+      linkDistance = d3_layout_forceLinkDistance,
+      linkStrength = d3_layout_forceLinkStrength,
+      charge = -30,
+      gravity = .1,
+      theta = .8,
+      interval,
+      nodes = [],
+      links = [],
+      distances,
+      strengths;
+
+  function repulse(node, kc) {
+    return function(quad, x1, y1, x2, y2) {
+      if (quad.point !== node) {
+        var dx = quad.cx - node.x,
+            dy = quad.cy - node.y,
+            dn = 1 / Math.sqrt(dx * dx + dy * dy);
+
+        /* Barnes-Hut criterion. */
+        if ((x2 - x1) * dn < theta) {
+          var k = kc * quad.count * dn * dn;
+          node.x += dx * k;
+          node.y += dy * k;
+          return true;
+        }
+
+        if (quad.point && isFinite(dn)) {
+          var k = kc * dn * dn;
+          node.x += dx * k;
+          node.y += dy * k;
+        }
+      }
+    };
+  }
+
+  function tick() {
+    var n = nodes.length,
+        m = links.length,
+        q = d3.geom.quadtree(nodes),
+        i, // current index
+        o, // current object
+        s, // current source
+        t, // current target
+        l, // current distance
+        x, // x-distance
+        y; // y-distance
+
+    // gauss-seidel relaxation for links
+    for (i = 0; i < m; ++i) {
+      o = links[i];
+      s = o.source;
+      t = o.target;
+      x = t.x - s.x;
+      y = t.y - s.y;
+      if (l = (x * x + y * y)) {
+        l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
+        x *= l;
+        y *= l;
+        t.x -= x;
+        t.y -= y;
+        s.x += x;
+        s.y += y;
+      }
+    }
+
+    // apply gravity forces
+    var kg = alpha * gravity;
+    x = size[0] / 2;
+    y = size[1] / 2;
+    i = -1; while (++i < n) {
+      o = nodes[i];
+      o.x += (x - o.x) * kg;
+      o.y += (y - o.y) * kg;
+    }
+
+    // compute quadtree center of mass
+    d3_layout_forceAccumulate(q);
+
+    // apply charge forces
+    var kc = alpha * charge;
+    i = -1; while (++i < n) {
+      q.visit(repulse(nodes[i], kc));
+    }
+
+    // position verlet integration
+    i = -1; while (++i < n) {
+      o = nodes[i];
+      if (o.fixed) {
+        o.x = o.px;
+        o.y = o.py;
+      } else {
+        o.x -= (o.px - (o.px = o.x)) * friction;
+        o.y -= (o.py - (o.py = o.y)) * friction;
+      }
+    }
+
+    event.tick.dispatch({type: "tick", alpha: alpha});
+
+    // simulated annealing, basically
+    return (alpha *= .99) < .005;
+  }
+
+  force.on = function(type, listener) {
+    event[type].add(listener);
+    return force;
+  };
+
+  force.nodes = function(x) {
+    if (!arguments.length) return nodes;
+    nodes = x;
+    return force;
+  };
+
+  force.links = function(x) {
+    if (!arguments.length) return links;
+    links = x;
+    return force;
+  };
+
+  force.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return force;
+  };
+
+  force.linkDistance = function(x) {
+    if (!arguments.length) return linkDistance;
+    linkDistance = d3.functor(x);
+    return force;
+  };
+
+  // For backwards-compatibility.
+  force.distance = force.linkDistance;
+
+  force.linkStrength = function(x) {
+    if (!arguments.length) return linkStrength;
+    linkStrength = d3.functor(x);
+    return force;
+  };
+
+  force.friction = function(x) {
+    if (!arguments.length) return friction;
+    friction = x;
+    return force;
+  };
+
+  force.charge = function(x) {
+    if (!arguments.length) return charge;
+    charge = x;
+    return force;
+  };
+
+  force.gravity = function(x) {
+    if (!arguments.length) return gravity;
+    gravity = x;
+    return force;
+  };
+
+  force.theta = function(x) {
+    if (!arguments.length) return theta;
+    theta = x;
+    return force;
+  };
+
+  force.start = function() {
+    var i,
+        j,
+        n = nodes.length,
+        m = links.length,
+        w = size[0],
+        h = size[1],
+        neighbors,
+        o;
+
+    for (i = 0; i < n; ++i) {
+      (o = nodes[i]).index = i;
+    }
+
+    distances = [];
+    strengths = [];
+    for (i = 0; i < m; ++i) {
+      o = links[i];
+      if (typeof o.source == "number") o.source = nodes[o.source];
+      if (typeof o.target == "number") o.target = nodes[o.target];
+      distances[i] = linkDistance.call(this, o, i);
+      strengths[i] = linkStrength.call(this, o, i);
+    }
+
+    for (i = 0; i < n; ++i) {
+      o = nodes[i];
+      if (isNaN(o.x)) o.x = position("x", w);
+      if (isNaN(o.y)) o.y = position("y", h);
+      if (isNaN(o.px)) o.px = o.x;
+      if (isNaN(o.py)) o.py = o.y;
+    }
+
+    // initialize node position based on first neighbor
+    function position(dimension, size) {
+      var neighbors = neighbor(i),
+          j = -1,
+          m = neighbors.length,
+          x;
+      while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
+      return Math.random() * size;
+    }
+
+    // initialize neighbors lazily
+    function neighbor() {
+      if (!neighbors) {
+        neighbors = [];
+        for (j = 0; j < n; ++j) {
+          neighbors[j] = [];
+        }
+        for (j = 0; j < m; ++j) {
+          var o = links[j];
+          neighbors[o.source.index].push(o.target);
+          neighbors[o.target.index].push(o.source);
+        }
+      }
+      return neighbors[i];
+    }
+
+    return force.resume();
+  };
+
+  force.resume = function() {
+    alpha = .1;
+    d3.timer(tick);
+    return force;
+  };
+
+  force.stop = function() {
+    alpha = 0;
+    return force;
+  };
+
+  // use `node.call(force.drag)` to make nodes draggable
+  force.drag = function() {
+
+    this
+      .on("mouseover.force", d3_layout_forceDragOver)
+      .on("mouseout.force", d3_layout_forceDragOut)
+      .on("mousedown.force", dragdown)
+      .on("touchstart.force", dragdown);
+
+    d3.select(window)
+      .on("mousemove.force", d3_layout_forceDragMove)
+      .on("touchmove.force", d3_layout_forceDragMove)
+      .on("mouseup.force", d3_layout_forceDragUp, true)
+      .on("touchend.force", d3_layout_forceDragUp, true)
+      .on("click.force", d3_layout_forceDragClick, true);
+
+    return force;
+  };
+
+  function dragdown(d, i) {
+    var m = d3_layout_forcePoint(this.parentNode);
+    (d3_layout_forceDragNode = d).fixed = true;
+    d3_layout_forceDragMoved = false;
+    d3_layout_forceDragElement = this;
+    d3_layout_forceDragForce = force;
+    d3_layout_forceDragOffset = [m[0] - d.x, m[1] - d.y];
+    d3_layout_forceCancel();
+  }
+
+  return force;
+};
+
+var d3_layout_forceDragForce,
+    d3_layout_forceDragNode,
+    d3_layout_forceDragMoved,
+    d3_layout_forceDragOffset,
+    d3_layout_forceStopClick,
+    d3_layout_forceDragElement;
+
+function d3_layout_forceDragOver(d) {
+  d.fixed = true;
+}
+
+function d3_layout_forceDragOut(d) {
+  if (d !== d3_layout_forceDragNode) {
+    d.fixed = false;
+  }
+}
+
+function d3_layout_forcePoint(container) {
+  return d3.event.touches
+      ? d3.svg.touches(container)[0]
+      : d3.svg.mouse(container);
+}
+
+function d3_layout_forceDragMove() {
+  if (!d3_layout_forceDragNode) return;
+  var parent = d3_layout_forceDragElement.parentNode;
+
+  // O NOES! The drag element was removed from the DOM.
+  if (!parent) {
+    d3_layout_forceDragNode.fixed = false;
+    d3_layout_forceDragOffset = d3_layout_forceDragNode = d3_layout_forceDragElement = null;
+    return;
+  }
+
+  var m = d3_layout_forcePoint(parent);
+  d3_layout_forceDragMoved = true;
+  d3_layout_forceDragNode.px = m[0] - d3_layout_forceDragOffset[0];
+  d3_layout_forceDragNode.py = m[1] - d3_layout_forceDragOffset[1];
+  d3_layout_forceCancel();
+  d3_layout_forceDragForce.resume(); // restart annealing
+}
+
+function d3_layout_forceDragUp() {
+  if (!d3_layout_forceDragNode) return;
+
+  // If the node was moved, prevent the mouseup from propagating.
+  // Also prevent the subsequent click from propagating (e.g., for anchors).
+  if (d3_layout_forceDragMoved) {
+    d3_layout_forceStopClick = true;
+    d3_layout_forceCancel();
+  }
+
+  // Don't trigger this for touchend.
+  if (d3.event.type === "mouseup") {
+    d3_layout_forceDragMove();
+  }
+
+  d3_layout_forceDragNode.fixed = false;
+  d3_layout_forceDragForce =
+  d3_layout_forceDragOffset =
+  d3_layout_forceDragNode =
+  d3_layout_forceDragElement = null;
+}
+
+function d3_layout_forceDragClick() {
+  if (d3_layout_forceStopClick) {
+    d3_layout_forceCancel();
+    d3_layout_forceStopClick = false;
+  }
+}
+
+function d3_layout_forceCancel() {
+  d3.event.stopPropagation();
+  d3.event.preventDefault();
+}
+
+function d3_layout_forceAccumulate(quad) {
+  var cx = 0,
+      cy = 0;
+  quad.count = 0;
+  if (!quad.leaf) {
+    var nodes = quad.nodes,
+        n = nodes.length,
+        i = -1,
+        c;
+    while (++i < n) {
+      c = nodes[i];
+      if (c == null) continue;
+      d3_layout_forceAccumulate(c);
+      quad.count += c.count;
+      cx += c.count * c.cx;
+      cy += c.count * c.cy;
+    }
+  }
+  if (quad.point) {
+    // jitter internal nodes that are coincident
+    if (!quad.leaf) {
+      quad.point.x += Math.random() - .5;
+      quad.point.y += Math.random() - .5;
+    }
+    quad.count++;
+    cx += quad.point.x;
+    cy += quad.point.y;
+  }
+  quad.cx = cx / quad.count;
+  quad.cy = cy / quad.count;
+}
+
+function d3_layout_forceLinkDistance(link) {
+  return 20;
+}
+
+function d3_layout_forceLinkStrength(link) {
+  return 1;
+}
+d3.layout.partition = function() {
+  var hierarchy = d3.layout.hierarchy(),
+      size = [1, 1]; // width, height
+
+  function position(node, x, dx, dy) {
+    var children = node.children;
+    node.x = x;
+    node.y = node.depth * dy;
+    node.dx = dx;
+    node.dy = dy;
+    if (children) {
+      var i = -1,
+          n = children.length,
+          c,
+          d;
+      dx /= node.value;
+      while (++i < n) {
+        position(c = children[i], x, d = c.value * dx, dy);
+        x += d;
+      }
+    }
+  }
+
+  function depth(node) {
+    var children = node.children,
+        d = 0;
+    if (children) {
+      var i = -1,
+          n = children.length;
+      while (++i < n) d = Math.max(d, depth(children[i]));
+    }
+    return 1 + d;
+  }
+
+  function partition(d, i) {
+    var nodes = hierarchy.call(this, d, i);
+    position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
+    return nodes;
+  }
+
+  partition.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return partition;
+  };
+
+  return d3_layout_hierarchyRebind(partition, hierarchy);
+};
+d3.layout.pie = function() {
+  var value = Number,
+      sort = null,
+      startAngle = 0,
+      endAngle = 2 * Math.PI;
+
+  function pie(data, i) {
+
+    // Compute the start angle.
+    var a = +(typeof startAngle === "function"
+        ? startAngle.apply(this, arguments)
+        : startAngle);
+
+    // Compute the angular range (end - start).
+    var k = (typeof endAngle === "function"
+        ? endAngle.apply(this, arguments)
+        : endAngle) - startAngle;
+
+    // Optionally sort the data.
+    var index = d3.range(data.length);
+    if (sort != null) index.sort(function(i, j) {
+      return sort(data[i], data[j]);
+    });
+
+    // Compute the numeric values for each data element.
+    var values = data.map(value);
+
+    // Convert k into a scale factor from value to angle, using the sum.
+    k /= values.reduce(function(p, d) { return p + d; }, 0);
+
+    // Compute the arcs!
+    var arcs = index.map(function(i) {
+      return {
+        data: data[i],
+        value: d = values[i],
+        startAngle: a,
+        endAngle: a += d * k
+      };
+    });
+
+    // Return the arcs in the original data's order.
+    return data.map(function(d, i) {
+      return arcs[index[i]];
+    });
+  }
+
+  /**
+   * Specifies the value function *x*, which returns a nonnegative numeric value
+   * for each datum. The default value function is `Number`. The value function
+   * is passed two arguments: the current datum and the current index.
+   */
+  pie.value = function(x) {
+    if (!arguments.length) return value;
+    value = x;
+    return pie;
+  };
+
+  /**
+   * Specifies a sort comparison operator *x*. The comparator is passed two data
+   * elements from the data array, a and b; it returns a negative value if a is
+   * less than b, a positive value if a is greater than b, and zero if a equals
+   * b.
+   */
+  pie.sort = function(x) {
+    if (!arguments.length) return sort;
+    sort = x;
+    return pie;
+  };
+
+  /**
+   * Specifies the overall start angle of the pie chart. Defaults to 0. The
+   * start angle can be specified either as a constant or as a function; in the
+   * case of a function, it is evaluated once per array (as opposed to per
+   * element).
+   */
+  pie.startAngle = function(x) {
+    if (!arguments.length) return startAngle;
+    startAngle = x;
+    return pie;
+  };
+
+  /**
+   * Specifies the overall end angle of the pie chart. Defaults to 2Ï. The
+   * end angle can be specified either as a constant or as a function; in the
+   * case of a function, it is evaluated once per array (as opposed to per
+   * element).
+   */
+  pie.endAngle = function(x) {
+    if (!arguments.length) return endAngle;
+    endAngle = x;
+    return pie;
+  };
+
+  return pie;
+};
+// data is two-dimensional array of x,y; we populate y0
+d3.layout.stack = function() {
+  var values = Object,
+      order = d3_layout_stackOrders["default"],
+      offset = d3_layout_stackOffsets["zero"],
+      out = d3_layout_stackOut,
+      x = d3_layout_stackX,
+      y = d3_layout_stackY;
+
+  function stack(data, index) {
+
+    // Convert series to canonical two-dimensional representation.
+    var series = data.map(function(d, i) {
+      return values.call(stack, d, i);
+    });
+
+    // Convert each series to canonical [[x,y]] representation.
+    var points = series.map(function(d, i) {
+      return d.map(function(v, i) {
+        return [x.call(stack, v, i), y.call(stack, v, i)];
+      });
+    });
+
+    // Compute the order of series, and permute them.
+    var orders = order.call(stack, points, index);
+    series = d3.permute(series, orders);
+    points = d3.permute(points, orders);
+
+    // Compute the baselineâŠ
+    var offsets = offset.call(stack, points, index);
+
+    // And propagate it to other series.
+    var n = series.length,
+        m = series[0].length,
+        i,
+        j,
+        o;
+    for (j = 0; j < m; ++j) {
+      out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
+      for (i = 1; i < n; ++i) {
+        out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
+      }
+    }
+
+    return data;
+  }
+
+  stack.values = function(x) {
+    if (!arguments.length) return values;
+    values = x;
+    return stack;
+  };
+
+  stack.order = function(x) {
+    if (!arguments.length) return order;
+    order = typeof x === "function" ? x : d3_layout_stackOrders[x];
+    return stack;
+  };
+
+  stack.offset = function(x) {
+    if (!arguments.length) return offset;
+    offset = typeof x === "function" ? x : d3_layout_stackOffsets[x];
+    return stack;
+  };
+
+  stack.x = function(z) {
+    if (!arguments.length) return x;
+    x = z;
+    return stack;
+  };
+
+  stack.y = function(z) {
+    if (!arguments.length) return y;
+    y = z;
+    return stack;
+  };
+
+  stack.out = function(z) {
+    if (!arguments.length) return out;
+    out = z;
+    return stack;
+  };
+
+  return stack;
+}
+
+function d3_layout_stackX(d) {
+  return d.x;
+}
+
+function d3_layout_stackY(d) {
+  return d.y;
+}
+
+function d3_layout_stackOut(d, y0, y) {
+  d.y0 = y0;
+  d.y = y;
+}
+
+var d3_layout_stackOrders = {
+
+  "inside-out": function(data) {
+    var n = data.length,
+        i,
+        j,
+        max = data.map(d3_layout_stackMaxIndex),
+        sums = data.map(d3_layout_stackReduceSum),
+        index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
+        top = 0,
+        bottom = 0,
+        tops = [],
+        bottoms = [];
+    for (i = 0; i < n; ++i) {
+      j = index[i];
+      if (top < bottom) {
+        top += sums[j];
+        tops.push(j);
+      } else {
+        bottom += sums[j];
+        bottoms.push(j);
+      }
+    }
+    return bottoms.reverse().concat(tops);
+  },
+
+  "reverse": function(data) {
+    return d3.range(data.length).reverse();
+  },
+
+  "default": function(data) {
+    return d3.range(data.length);
+  }
+
+};
+
+var d3_layout_stackOffsets = {
+
+  "silhouette": function(data) {
+    var n = data.length,
+        m = data[0].length,
+        sums = [],
+        max = 0,
+        i,
+        j,
+        o,
+        y0 = [];
+    for (j = 0; j < m; ++j) {
+      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+      if (o > max) max = o;
+      sums.push(o);
+    }
+    for (j = 0; j < m; ++j) {
+      y0[j] = (max - sums[j]) / 2;
+    }
+    return y0;
+  },
+
+  "wiggle": function(data) {
+    var n = data.length,
+        x = data[0],
+        m = x.length,
+        max = 0,
+        i,
+        j,
+        k,
+        s1,
+        s2,
+        s3,
+        dx,
+        o,
+        o0,
+        y0 = [];
+    y0[0] = o = o0 = 0;
+    for (j = 1; j < m; ++j) {
+      for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
+      for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
+        for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
+          s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
+        }
+        s2 += s3 * data[i][j][1];
+      }
+      y0[j] = o -= s1 ? s2 / s1 * dx : 0;
+      if (o < o0) o0 = o;
+    }
+    for (j = 0; j < m; ++j) y0[j] -= o0;
+    return y0;
+  },
+
+  "expand": function(data) {
+    var n = data.length,
+        m = data[0].length,
+        k = 1 / n,
+        i,
+        j,
+        o,
+        y0 = [];
+    for (j = 0; j < m; ++j) {
+      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+      if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
+      else for (i = 0; i < n; i++) data[i][j][1] = k;
+    }
+    for (j = 0; j < m; ++j) y0[j] = 0;
+    return y0;
+  },
+
+  "zero": function(data) {
+    var j = -1,
+        m = data[0].length,
+        y0 = [];
+    while (++j < m) y0[j] = 0;
+    return y0;
+  }
+
+};
+
+function d3_layout_stackMaxIndex(array) {
+  var i = 1,
+      j = 0,
+      v = array[0][1],
+      k,
+      n = array.length;
+  for (; i < n; ++i) {
+    if ((k = array[i][1]) > v) {
+      j = i;
+      v = k;
+    }
+  }
+  return j;
+}
+
+function d3_layout_stackReduceSum(d) {
+  return d.reduce(d3_layout_stackSum, 0);
+}
+
+function d3_layout_stackSum(p, d) {
+  return p + d[1];
+}
+d3.layout.histogram = function() {
+  var frequency = true,
+      valuer = Number,
+      ranger = d3_layout_histogramRange,
+      binner = d3_layout_histogramBinSturges;
+
+  function histogram(data, i) {
+    var bins = [],
+        values = data.map(valuer, this),
+        range = ranger.call(this, values, i),
+        thresholds = binner.call(this, range, values, i),
+        bin,
+        i = -1,
+        n = values.length,
+        m = thresholds.length - 1,
+        k = frequency ? 1 : 1 / n,
+        x;
+
+    // Initialize the bins.
+    while (++i < m) {
+      bin = bins[i] = [];
+      bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
+      bin.y = 0;
+    }
+
+    // Fill the bins, ignoring values outside the range.
+    i = -1; while(++i < n) {
+      x = values[i];
+      if ((x >= range[0]) && (x <= range[1])) {
+        bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
+        bin.y += k;
+        bin.push(data[i]);
+      }
+    }
+
+    return bins;
+  }
+
+  // Specifies how to extract a value from the associated data. The default
+  // value function is `Number`, which is equivalent to the identity function.
+  histogram.value = function(x) {
+    if (!arguments.length) return valuer;
+    valuer = x;
+    return histogram;
+  };
+
+  // Specifies the range of the histogram. Values outside the specified range
+  // will be ignored. The argument `x` may be specified either as a two-element
+  // array representing the minimum and maximum value of the range, or as a
+  // function that returns the range given the array of values and the current
+  // index `i`. The default range is the extent (minimum and maximum) of the
+  // values.
+  histogram.range = function(x) {
+    if (!arguments.length) return ranger;
+    ranger = d3.functor(x);
+    return histogram;
+  };
+
+  // Specifies how to bin values in the histogram. The argument `x` may be
+  // specified as a number, in which case the range of values will be split
+  // uniformly into the given number of bins. Or, `x` may be an array of
+  // threshold values, defining the bins; the specified array must contain the
+  // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
+  // may be a function which is evaluated, being passed the range, the array of
+  // values, and the current index `i`, returning an array of thresholds. The
+  // default bin function will divide the values into uniform bins using
+  // Sturges' formula.
+  histogram.bins = function(x) {
+    if (!arguments.length) return binner;
+    binner = typeof x === "number"
+        ? function(range) { return d3_layout_histogramBinFixed(range, x); }
+        : d3.functor(x);
+    return histogram;
+  };
+
+  // Specifies whether the histogram's `y` value is a count (frequency) or a
+  // probability (density). The default value is true.
+  histogram.frequency = function(x) {
+    if (!arguments.length) return frequency;
+    frequency = !!x;
+    return histogram;
+  };
+
+  return histogram;
+};
+
+function d3_layout_histogramBinSturges(range, values) {
+  return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
+}
+
+function d3_layout_histogramBinFixed(range, n) {
+  var x = -1,
+      b = +range[0],
+      m = (range[1] - b) / n,
+      f = [];
+  while (++x <= n) f[x] = m * x + b;
+  return f;
+}
+
+function d3_layout_histogramRange(values) {
+  return [d3.min(values), d3.max(values)];
+}
+d3.layout.hierarchy = function() {
+  var sort = d3_layout_hierarchySort,
+      children = d3_layout_hierarchyChildren,
+      value = d3_layout_hierarchyValue;
+
+  // Recursively compute the node depth and value.
+  // Also converts the data representation into a standard hierarchy structure.
+  function recurse(data, depth, nodes) {
+    var childs = children.call(hierarchy, data, depth),
+        node = d3_layout_hierarchyInline ? data : {data: data};
+    node.depth = depth;
+    nodes.push(node);
+    if (childs) {
+      var i = -1,
+          n = childs.length,
+          c = node.children = [],
+          v = 0,
+          j = depth + 1;
+      while (++i < n) {
+        d = recurse(childs[i], j, nodes);
+        d.parent = node;
+        c.push(d);
+        v += d.value;
+      }
+      if (sort) c.sort(sort);
+      if (value) node.value = v;
+    } else if (value) {
+      node.value = value.call(hierarchy, data, depth);
+    }
+    return node;
+  }
+
+  // Recursively re-evaluates the node value.
+  function revalue(node, depth) {
+    var children = node.children,
+        v = 0;
+    if (children) {
+      var i = -1,
+          n = children.length,
+          j = depth + 1;
+      while (++i < n) v += revalue(children[i], j);
+    } else if (value) {
+      v = value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth);
+    }
+    if (value) node.value = v;
+    return v;
+  }
+
+  function hierarchy(d) {
+    var nodes = [];
+    recurse(d, 0, nodes);
+    return nodes;
+  }
+
+  hierarchy.sort = function(x) {
+    if (!arguments.length) return sort;
+    sort = x;
+    return hierarchy;
+  };
+
+  hierarchy.children = function(x) {
+    if (!arguments.length) return children;
+    children = x;
+    return hierarchy;
+  };
+
+  hierarchy.value = function(x) {
+    if (!arguments.length) return value;
+    value = x;
+    return hierarchy;
+  };
+
+  // Re-evaluates the `value` property for the specified hierarchy.
+  hierarchy.revalue = function(root) {
+    revalue(root, 0);
+    return root;
+  };
+
+  return hierarchy;
+};
+
+// A method assignment helper for hierarchy subclasses.
+function d3_layout_hierarchyRebind(object, hierarchy) {
+  object.sort = d3.rebind(object, hierarchy.sort);
+  object.children = d3.rebind(object, hierarchy.children);
+  object.links = d3_layout_hierarchyLinks;
+  object.value = d3.rebind(object, hierarchy.value);
+
+  // If the new API is used, enabling inlining.
+  object.nodes = function(d) {
+    d3_layout_hierarchyInline = true;
+    return (object.nodes = object)(d);
+  };
+
+  return object;
+}
+
+function d3_layout_hierarchyChildren(d) {
+  return d.children;
+}
+
+function d3_layout_hierarchyValue(d) {
+  return d.value;
+}
+
+function d3_layout_hierarchySort(a, b) {
+  return b.value - a.value;
+}
+
+// Returns an array source+target objects for the specified nodes.
+function d3_layout_hierarchyLinks(nodes) {
+  return d3.merge(nodes.map(function(parent) {
+    return (parent.children || []).map(function(child) {
+      return {source: parent, target: child};
+    });
+  }));
+}
+
+// For backwards-compatibility, don't enable inlining by default.
+var d3_layout_hierarchyInline = false;
+d3.layout.pack = function() {
+  var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
+      size = [1, 1];
+
+  function pack(d, i) {
+    var nodes = hierarchy.call(this, d, i),
+        root = nodes[0];
+
+    // Recursively compute the layout.
+    root.x = 0;
+    root.y = 0;
+    d3_layout_packTree(root);
+
+    // Scale the layout to fit the requested size.
+    var w = size[0],
+        h = size[1],
+        k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
+    d3_layout_packTransform(root, w / 2, h / 2, k);
+
+    return nodes;
+  }
+
+  pack.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return pack;
+  };
+
+  return d3_layout_hierarchyRebind(pack, hierarchy);
+};
+
+function d3_layout_packSort(a, b) {
+  return a.value - b.value;
+}
+
+function d3_layout_packInsert(a, b) {
+  var c = a._pack_next;
+  a._pack_next = b;
+  b._pack_prev = a;
+  b._pack_next = c;
+  c._pack_prev = b;
+}
+
+function d3_layout_packSplice(a, b) {
+  a._pack_next = b;
+  b._pack_prev = a;
+}
+
+function d3_layout_packIntersects(a, b) {
+  var dx = b.x - a.x,
+      dy = b.y - a.y,
+      dr = a.r + b.r;
+  return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
+}
+
+function d3_layout_packCircle(nodes) {
+  var xMin = Infinity,
+      xMax = -Infinity,
+      yMin = Infinity,
+      yMax = -Infinity,
+      n = nodes.length,
+      a, b, c, j, k;
+
+  function bound(node) {
+    xMin = Math.min(node.x - node.r, xMin);
+    xMax = Math.max(node.x + node.r, xMax);
+    yMin = Math.min(node.y - node.r, yMin);
+    yMax = Math.max(node.y + node.r, yMax);
+  }
+
+  // Create node links.
+  nodes.forEach(d3_layout_packLink);
+
+  // Create first node.
+  a = nodes[0];
+  a.x = -a.r;
+  a.y = 0;
+  bound(a);
+
+  // Create second node.
+  if (n > 1) {
+    b = nodes[1];
+    b.x = b.r;
+    b.y = 0;
+    bound(b);
+
+    // Create third node and build chain.
+    if (n > 2) {
+      c = nodes[2];
+      d3_layout_packPlace(a, b, c);
+      bound(c);
+      d3_layout_packInsert(a, c);
+      a._pack_prev = c;
+      d3_layout_packInsert(c, b);
+      b = a._pack_next;
+
+      // Now iterate through the rest.
+      for (var i = 3; i < n; i++) {
+        d3_layout_packPlace(a, b, c = nodes[i]);
+
+        // Search for the closest intersection.
+        var isect = 0, s1 = 1, s2 = 1;
+        for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
+          if (d3_layout_packIntersects(j, c)) {
+            isect = 1;
+            break;
+          }
+        }
+        if (isect == 1) {
+          for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
+            if (d3_layout_packIntersects(k, c)) {
+              if (s2 < s1) {
+                isect = -1;
+                j = k;
+              }
+              break;
+            }
+          }
+        }
+
+        // Update node chain.
+        if (isect == 0) {
+          d3_layout_packInsert(a, c);
+          b = c;
+          bound(c);
+        } else if (isect > 0) {
+          d3_layout_packSplice(a, j);
+          b = j;
+          i--;
+        } else { // isect < 0
+          d3_layout_packSplice(j, b);
+          a = j;
+          i--;
+        }
+      }
+    }
+  }
+
+  // Re-center the circles and return the encompassing radius.
+  var cx = (xMin + xMax) / 2,
+      cy = (yMin + yMax) / 2,
+      cr = 0;
+  for (var i = 0; i < n; i++) {
+    var node = nodes[i];
+    node.x -= cx;
+    node.y -= cy;
+    cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
+  }
+
+  // Remove node links.
+  nodes.forEach(d3_layout_packUnlink);
+
+  return cr;
+}
+
+function d3_layout_packLink(node) {
+  node._pack_next = node._pack_prev = node;
+}
+
+function d3_layout_packUnlink(node) {
+  delete node._pack_next;
+  delete node._pack_prev;
+}
+
+function d3_layout_packTree(node) {
+  var children = node.children;
+  if (children) {
+    children.forEach(d3_layout_packTree);
+    node.r = d3_layout_packCircle(children);
+  } else {
+    node.r = Math.sqrt(node.value);
+  }
+}
+
+function d3_layout_packTransform(node, x, y, k) {
+  var children = node.children;
+  node.x = (x += k * node.x);
+  node.y = (y += k * node.y);
+  node.r *= k;
+  if (children) {
+    var i = -1, n = children.length;
+    while (++i < n) d3_layout_packTransform(children[i], x, y, k);
+  }
+}
+
+function d3_layout_packPlace(a, b, c) {
+  var da = b.r + c.r,
+      db = a.r + c.r,
+      dx = b.x - a.x,
+      dy = b.y - a.y,
+      dc = Math.sqrt(dx * dx + dy * dy),
+      cos = (db * db + dc * dc - da * da) / (2 * db * dc),
+      theta = Math.acos(cos),
+      x = cos * db,
+      h = Math.sin(theta) * db;
+  dx /= dc;
+  dy /= dc;
+  c.x = a.x + x * dx + h * dy;
+  c.y = a.y + x * dy - h * dx;
+}
+// Implements a hierarchical layout using the cluster (or dendogram) algorithm.
+d3.layout.cluster = function() {
+  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
+      separation = d3_layout_treeSeparation,
+      size = [1, 1]; // width, height
+
+  function cluster(d, i) {
+    var nodes = hierarchy.call(this, d, i),
+        root = nodes[0],
+        previousNode,
+        x = 0,
+        kx,
+        ky;
+
+    // First walk, computing the initial x & y values.
+    d3_layout_treeVisitAfter(root, function(node) {
+      if (node.children) {
+        node.x = d3_layout_clusterX(node.children);
+        node.y = d3_layout_clusterY(node.children);
+      } else {
+        node.x = previousNode ? x += separation(node, previousNode) : 0;
+        node.y = 0;
+        previousNode = node;
+      }
+    });
+
+    // Compute the left-most, right-most, and depth-most nodes for extents.
+    var left = d3_layout_clusterLeft(root),
+        right = d3_layout_clusterRight(root),
+        x0 = left.x - separation(left, right) / 2,
+        x1 = right.x + separation(right, left) / 2;
+
+    // Second walk, normalizing x & y to the desired size.
+    d3_layout_treeVisitAfter(root, function(node) {
+      node.x = (node.x - x0) / (x1 - x0) * size[0];
+      node.y = (1 - node.y / root.y) * size[1];
+    });
+
+    return nodes;
+  }
+
+  cluster.separation = function(x) {
+    if (!arguments.length) return separation;
+    separation = x;
+    return cluster;
+  };
+
+  cluster.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return cluster;
+  };
+
+  return d3_layout_hierarchyRebind(cluster, hierarchy);
+};
+
+function d3_layout_clusterY(children) {
+  return 1 + d3.max(children, function(child) {
+    return child.y;
+  });
+}
+
+function d3_layout_clusterX(children) {
+  return children.reduce(function(x, child) {
+    return x + child.x;
+  }, 0) / children.length;
+}
+
+function d3_layout_clusterLeft(node) {
+  var children = node.children;
+  return children ? d3_layout_clusterLeft(children[0]) : node;
+}
+
+function d3_layout_clusterRight(node) {
+  var children = node.children;
+  return children ? d3_layout_clusterRight(children[children.length - 1]) : node;
+}
+// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
+d3.layout.tree = function() {
+  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
+      separation = d3_layout_treeSeparation,
+      size = [1, 1]; // width, height
+
+  function tree(d, i) {
+    var nodes = hierarchy.call(this, d, i),
+        root = nodes[0];
+
+    function firstWalk(node, previousSibling) {
+      var children = node.children,
+          layout = node._tree;
+      if (children) {
+        var n = children.length,
+            firstChild = children[0],
+            previousChild,
+            ancestor = firstChild,
+            child,
+            i = -1;
+        while (++i < n) {
+          child = children[i];
+          firstWalk(child, previousChild);
+          ancestor = apportion(child, previousChild, ancestor);
+          previousChild = child;
+        }
+        d3_layout_treeShift(node);
+        var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
+        if (previousSibling) {
+          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
+          layout.mod = layout.prelim - midpoint;
+        } else {
+          layout.prelim = midpoint;
+        }
+      } else {
+        if (previousSibling) {
+          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
+        }
+      }
+    }
+
+    function secondWalk(node, x) {
+      node.x = node._tree.prelim + x;
+      var children = node.children;
+      if (children) {
+        var i = -1,
+            n = children.length;
+        x += node._tree.mod;
+        while (++i < n) {
+          secondWalk(children[i], x);
+        }
+      }
+    }
+
+    function apportion(node, previousSibling, ancestor) {
+      if (previousSibling) {
+        var vip = node,
+            vop = node,
+            vim = previousSibling,
+            vom = node.parent.children[0],
+            sip = vip._tree.mod,
+            sop = vop._tree.mod,
+            sim = vim._tree.mod,
+            som = vom._tree.mod,
+            shift;
+        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
+          vom = d3_layout_treeLeft(vom);
+          vop = d3_layout_treeRight(vop);
+          vop._tree.ancestor = node;
+          shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
+          if (shift > 0) {
+            d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
+            sip += shift;
+            sop += shift;
+          }
+          sim += vim._tree.mod;
+          sip += vip._tree.mod;
+          som += vom._tree.mod;
+          sop += vop._tree.mod;
+        }
+        if (vim && !d3_layout_treeRight(vop)) {
+          vop._tree.thread = vim;
+          vop._tree.mod += sim - sop;
+        }
+        if (vip && !d3_layout_treeLeft(vom)) {
+          vom._tree.thread = vip;
+          vom._tree.mod += sip - som;
+          ancestor = node;
+        }
+      }
+      return ancestor;
+    }
+
+    // Initialize temporary layout variables.
+    d3_layout_treeVisitAfter(root, function(node, previousSibling) {
+      node._tree = {
+        ancestor: node,
+        prelim: 0,
+        mod: 0,
+        change: 0,
+        shift: 0,
+        number: previousSibling ? previousSibling._tree.number + 1 : 0
+      };
+    });
+
+    // Compute the layout using Buchheim et al.'s algorithm.
+    firstWalk(root);
+    secondWalk(root, -root._tree.prelim);
+
+    // Compute the left-most, right-most, and depth-most nodes for extents.
+    var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
+        right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
+        deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
+        x0 = left.x - separation(left, right) / 2,
+        x1 = right.x + separation(right, left) / 2,
+        y1 = deep.depth || 1;
+
+    // Clear temporary layout variables; transform x and y.
+    d3_layout_treeVisitAfter(root, function(node) {
+      node.x = (node.x - x0) / (x1 - x0) * size[0];
+      node.y = node.depth / y1 * size[1];
+      delete node._tree;
+    });
+
+    return nodes;
+  }
+
+  tree.separation = function(x) {
+    if (!arguments.length) return separation;
+    separation = x;
+    return tree;
+  };
+
+  tree.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return tree;
+  };
+
+  return d3_layout_hierarchyRebind(tree, hierarchy);
+};
+
+function d3_layout_treeSeparation(a, b) {
+  return a.parent == b.parent ? 1 : 2;
+}
+
+// function d3_layout_treeSeparationRadial(a, b) {
+//   return (a.parent == b.parent ? 1 : 2) / a.depth;
+// }
+
+function d3_layout_treeLeft(node) {
+  return node.children ? node.children[0] : node._tree.thread;
+}
+
+function d3_layout_treeRight(node) {
+  return node.children ? node.children[node.children.length - 1] : node._tree.thread;
+}
+
+function d3_layout_treeSearch(node, compare) {
+  var children = node.children;
+  if (children) {
+    var child,
+        n = children.length,
+        i = -1;
+    while (++i < n) {
+      if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
+        node = child;
+      }
+    }
+  }
+  return node;
+}
+
+function d3_layout_treeRightmost(a, b) {
+  return a.x - b.x;
+}
+
+function d3_layout_treeLeftmost(a, b) {
+  return b.x - a.x;
+}
+
+function d3_layout_treeDeepest(a, b) {
+  return a.depth - b.depth;
+}
+
+function d3_layout_treeVisitAfter(node, callback) {
+  function visit(node, previousSibling) {
+    var children = node.children;
+    if (children) {
+      var child,
+          previousChild = null,
+          i = -1,
+          n = children.length;
+      while (++i < n) {
+        child = children[i];
+        visit(child, previousChild);
+        previousChild = child;
+      }
+    }
+    callback(node, previousSibling);
+  }
+  visit(node, null);
+}
+
+function d3_layout_treeShift(node) {
+  var shift = 0,
+      change = 0,
+      children = node.children,
+      i = children.length,
+      child;
+  while (--i >= 0) {
+    child = children[i]._tree;
+    child.prelim += shift;
+    child.mod += shift;
+    shift += child.shift + (change += child.change);
+  }
+}
+
+function d3_layout_treeMove(ancestor, node, shift) {
+  ancestor = ancestor._tree;
+  node = node._tree;
+  var change = shift / (node.number - ancestor.number);
+  ancestor.change += change;
+  node.change -= change;
+  node.shift += shift;
+  node.prelim += shift;
+  node.mod += shift;
+}
+
+function d3_layout_treeAncestor(vim, node, ancestor) {
+  return vim._tree.ancestor.parent == node.parent
+      ? vim._tree.ancestor
+      : ancestor;
+}
+// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
+// Modified to support a target aspect ratio by Jeff Heer
+d3.layout.treemap = function() {
+  var hierarchy = d3.layout.hierarchy(),
+      round = Math.round,
+      size = [1, 1], // width, height
+      padding = null,
+      pad = d3_layout_treemapPadNull,
+      sticky = false,
+      stickies,
+      ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
+
+  // Compute the area for each child based on value & scale.
+  function scale(children, k) {
+    var i = -1,
+        n = children.length,
+        child,
+        area;
+    while (++i < n) {
+      area = (child = children[i]).value * (k < 0 ? 0 : k);
+      child.area = isNaN(area) || area <= 0 ? 0 : area;
+    }
+  }
+
+  // Recursively arranges the specified node's children into squarified rows.
+  function squarify(node) {
+    if (!node.children) return;
+    var rect = pad(node),
+        row = [],
+        children = node.children.slice(), // copy-on-write
+        child,
+        best = Infinity, // the best row score so far
+        score, // the current row score
+        u = Math.min(rect.dx, rect.dy), // initial orientation
+        n;
+    scale(children, rect.dx * rect.dy / node.value);
+    row.area = 0;
+    while ((n = children.length) > 0) {
+      row.push(child = children[n - 1]);
+      row.area += child.area;
+      if ((score = worst(row, u)) <= best) { // continue with this orientation
+        children.pop();
+        best = score;
+      } else { // abort, and try a different orientation
+        row.area -= row.pop().area;
+        position(row, u, rect, false);
+        u = Math.min(rect.dx, rect.dy);
+        row.length = row.area = 0;
+        best = Infinity;
+      }
+    }
+    if (row.length) {
+      position(row, u, rect, true);
+      row.length = row.area = 0;
+    }
+    node.children.forEach(squarify);
+  }
+
+  // Recursively resizes the specified node's children into existing rows.
+  // Preserves the existing layout!
+  function stickify(node) {
+    if (!node.children) return;
+    var rect = pad(node),
+        children = node.children.slice(), // copy-on-write
+        child,
+        row = [];
+    scale(children, rect.dx * rect.dy / node.value);
+    row.area = 0;
+    while (child = children.pop()) {
+      row.push(child);
+      row.area += child.area;
+      if (child.z != null) {
+        position(row, child.z ? rect.dx : rect.dy, rect, !children.length);
+        row.length = row.area = 0;
+      }
+    }
+    node.children.forEach(stickify);
+  }
+
+  // Computes the score for the specified row, as the worst aspect ratio.
+  function worst(row, u) {
+    var s = row.area,
+        r,
+        rmax = 0,
+        rmin = Infinity,
+        i = -1,
+        n = row.length;
+    while (++i < n) {
+      if (!(r = row[i].area)) continue;
+      if (r < rmin) rmin = r;
+      if (r > rmax) rmax = r;
+    }
+    s *= s;
+    u *= u;
+    return s
+        ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
+        : Infinity;
+  }
+
+  // Positions the specified row of nodes. Modifies `rect`.
+  function position(row, u, rect, flush) {
+    var i = -1,
+        n = row.length,
+        x = rect.x,
+        y = rect.y,
+        v = u ? round(row.area / u) : 0,
+        o;
+    if (u == rect.dx) { // horizontal subdivision
+      if (flush || v > rect.dy) v = rect.dy; // over+underflow
+      while (++i < n) {
+        o = row[i];
+        o.x = x;
+        o.y = y;
+        o.dy = v;
+        x += o.dx = v ? round(o.area / v) : 0;
+      }
+      o.z = true;
+      o.dx += rect.x + rect.dx - x; // rounding error
+      rect.y += v;
+      rect.dy -= v;
+    } else { // vertical subdivision
+      if (flush || v > rect.dx) v = rect.dx; // over+underflow
+      while (++i < n) {
+        o = row[i];
+        o.x = x;
+        o.y = y;
+        o.dx = v;
+        y += o.dy = v ? round(o.area / v) : 0;
+      }
+      o.z = false;
+      o.dy += rect.y + rect.dy - y; // rounding error
+      rect.x += v;
+      rect.dx -= v;
+    }
+  }
+
+  function treemap(d) {
+    var nodes = stickies || hierarchy(d),
+        root = nodes[0];
+    root.x = 0;
+    root.y = 0;
+    root.dx = size[0];
+    root.dy = size[1];
+    if (stickies) hierarchy.revalue(root);
+    scale([root], root.dx * root.dy / root.value);
+    (stickies ? stickify : squarify)(root);
+    if (sticky) stickies = nodes;
+    return nodes;
+  }
+
+  treemap.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return treemap;
+  };
+
+  treemap.padding = function(x) {
+    if (!arguments.length) return padding;
+
+    function padFunction(node) {
+      var p = x.call(treemap, node, node.depth);
+      return p == null
+          ? d3_layout_treemapPadNull(node)
+          : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
+    }
+
+    function padConstant(node) {
+      return d3_layout_treemapPad(node, x);
+    }
+
+    var type;
+    pad = (padding = x) == null ? d3_layout_treemapPadNull
+        : (type = typeof x) === "function" ? padFunction
+        : type === "number" ? (x = [x, x, x, x], padConstant)
+        : padConstant;
+    return treemap;
+  };
+
+  treemap.round = function(x) {
+    if (!arguments.length) return round != Number;
+    round = x ? Math.round : Number;
+    return treemap;
+  };
+
+  treemap.sticky = function(x) {
+    if (!arguments.length) return sticky;
+    sticky = x;
+    stickies = null;
+    return treemap;
+  };
+
+  treemap.ratio = function(x) {
+    if (!arguments.length) return ratio;
+    ratio = x;
+    return treemap;
+  };
+
+  return d3_layout_hierarchyRebind(treemap, hierarchy);
+};
+
+function d3_layout_treemapPadNull(node) {
+  return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
+}
+
+function d3_layout_treemapPad(node, padding) {
+  var x = node.x + padding[3],
+      y = node.y + padding[0],
+      dx = node.dx - padding[1] - padding[3],
+      dy = node.dy - padding[0] - padding[2];
+  if (dx < 0) { x += dx / 2; dx = 0; }
+  if (dy < 0) { y += dy / 2; dy = 0; }
+  return {x: x, y: y, dx: dx, dy: dy};
+}
+})();
Index: /Dev/trunk/d3/d3.layout.min.js
===================================================================
--- /Dev/trunk/d3/d3.layout.min.js	(revision 76)
+++ /Dev/trunk/d3/d3.layout.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){function bj(a,b){var c=a.x+b[3],d=a.y+b[0],e=a.dx-b[1]-b[3],f=a.dy-b[0]-b[2];e<0&&(c+=e/2,e=0),f<0&&(d+=f/2,f=0);return{x:c,y:d,dx:e,dy:f}}function bi(a){return{x:a.x,y:a.y,dx:a.dx,dy:a.dy}}function bh(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function bg(a,b,c){a=a._tree,b=b._tree;var d=c/(b.number-a.number);a.change+=d,b.change-=d,b.shift+=c,b.prelim+=c,b.mod+=c}function bf(a){var b=0,c=0,d=a.children,e=d.length,f;while(--e>=0)f=d[e]._tree,f.prelim+=b,f.mod+=b,b+=f.shift+(c+=f.change)}function be(a,b){function c(a,d){var e=a.children;if(e){var f,g=null,h=-1,i=e.length;while(++h<i)f=e[h],c(f,g),g=f}b(a,d)}c(a,null)}function bd(a,b){return a.depth-b.depth}function bc(a,b){return b.x-a.x}function bb(a,b){return a.x-b.x}function ba(a,b){var c=a.children;if(c){var d,e=c.length,f=-1;while(++f<e)b(d=ba(c[f],b),a)>0&&(a=d)}return a}function _(a){return a.children?a.children[a.children.length-1]:a._tree.thread}function $(a){return a.children?a.children[0]:a._tree.thread}function Z(a,b){return a.parent==b.parent?1:2}function Y(a){var b=a.children;return b?Y(b[b.length-1]):a}function X(a){var b=a.children;return b?X(b[0]):a}function W(a){return a.reduce(function(a,b){return a+b.x},0)/a.length}function V(a){return 1+d3.max(a,function(a){return a.y})}function U(a,b,c){var d=b.r+c.r,e=a.r+c.r,f=b.x-a.x,g=b.y-a.y,h=Math.sqrt(f*f+g*g),i=(e*e+h*h-d*d)/(2*e*h),j=Math.acos(i),k=i*e,l=Math.sin(j)*e;f/=h,g/=h,c.x=a.x+k*f+l*g,c.y=a.y+k*g-l*f}function T(a,b,c,d){var e=a.children;a.x=b+=d*a.x,a.y=c+=d*a.y,a.r*=d;if(e){var f=-1,g=e.length;while(++f<g)T(e[f],b,c,d)}}function S(a){var b=a.children;b?(b.forEach(S),a.r=P(b)):a.r=Math.sqrt(a.value)}function R(a){delete a._pack_next,delete a._pack_prev}function Q(a){a._pack_next=a._pack_prev=a}function P(a){function l(a){b=Math.min(a.x-a.r,b),c=Math.max(a.x+a.r,c),d=Math.min(a.y-a.r,d),e=Math.max(a.y+a.r,e)}var b=Infinity,c=-Infinity,d=Infinity,e=-Infinity,f=a.length,g,h,i,j,k;a.forEach(Q),g=a[0],g.x=-g.r,g.y=0,l(g);if(f>1){h=a[1],h.x=h.r,h.y=0,l(h);if(f>2){i=a[2],U(g,h,i),l(i),M(g,i),g._pack_prev=i,M(i,h),h=g._pack_next;for(var m=3;m<f;m++){U(g,h,i=a[m]);var n=0,o=1,p=1;for(j=h._pack_next;j!==h;j=j._pack_next,o++)if(O(j,i)){n=1;break}if(n==1)for(k=g._pack_prev;k!==j._pack_prev;k=k._pack_prev,p++)if(O(k,i)){p<o&&(n=-1,j=k);break}n==0?(M(g,i),h=i,l(i)):n>0?(N(g,j),h=j,m--):(N(j,h),g=j,m--)}}}var q=(b+c)/2,r=(d+e)/2,s=0;for(var m=0;m<f;m++){var t=a[m];t.x-=q,t.y-=r,s=Math.max(s,t.r+Math.sqrt(t.x*t.x+t.y*t.y))}a.forEach(R);return s}function O(a,b){var c=b.x-a.x,d=b.y-a.y,e=a.r+b.r;return e*e-c*c-d*d>.001}function N(a,b){a._pack_next=b,b._pack_prev=a}function M(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function L(a,b){return a.value-b.value}function J(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function I(a,b){return b.value-a.value}function H(a){return a.value}function G(a){return a.children}function F(a,b){a.sort=d3.rebind(a,b.sort),a.children=d3.rebind(a,b.children),a.links=J,a.value=d3.rebind(a,b.value),a.nodes=function(b){K=!0;return(a.nodes=a)(b)};return a}function E(a){return[d3.min(a),d3.max(a)]}function D(a,b){var c=-1,d=+a[0],e=(a[1]-d)/b,f=[];while(++c<=b)f[c]=e*c+d;return f}function C(a,b){return D(a,Math.ceil(Math.log(b.length)/Math.LN2+1))}function B(a,b){return a+b[1]}function A(a){return a.reduce(B,0)}function z(a){var b=1,c=0,d=a[0][1],e,f=a.length;for(;b<f;++b)(e=a[b][1])>d&&(c=b,d=e);return c}function w(a,b,c){a.y0=b,a.y=c}function v(a){return a.y}function u(a){return a.x}function t(a){return 1}function s(a){return 20}function r(a){var b=0,c=0;a.count=0;if(!a.leaf){var d=a.nodes,e=d.length,f=-1,g;while(++f<e){g=d[f];if(g==null)continue;r(g),a.count+=g.count,b+=g.count*g.cx,c+=g.count*g.cy}}a.point&&(a.leaf||(a.point.x+=Math.random()-.5,a.point.y+=Math.random()-.5),a.count++,b+=a.point.x,c+=a.point.y),a.cx=b/a.count,a.cy=c/a.count}function q(){d3.event.stopPropagation(),d3.event.preventDefault()}function p(){i&&(q(),i=!1)}function o(){!f||(g&&(i=!0,q()),d3.event.type==="mouseup"&&n(),f.fixed=!1,e=h=f=j=null)}function n(){if(!!f){var a=j.parentNode;if(!a){f.fixed=!1,h=f=j=null;return}var b=m(a);g=!0,f.px=b[0]-h[0],f.py=b[1]-h[1],q(),e.resume()}}function m(a){return d3.event.touches?d3.svg.touches(a)[0]:d3.svg.mouse(a)}function l(a){a!==f&&(a.fixed=!1)}function k(a){a.fixed=!0}function c(a,c){if(a===c)return a;var d=b(a),e=b(c),f=d.pop(),g=e.pop(),h=null;while(f===g)h=f,f=d.pop(),g=e.pop();return h}function b(a){var b=[],c=a.parent;while(c!=null)b.push(a),a=c,c=c.parent;b.push(a);return b}function a(a){var b=a.source,d=a.target,e=c(b,d),f=[b];while(b!==e)b=b.parent,f.push(b);var g=f.length;while(d!==e)f.splice(g,0,d),d=d.parent;return f}d3.layout={},d3.layout.bundle=function(){return function(b){var c=[],d=-1,e=b.length;while(++d<e)c.push(a(b[d]));return c}},d3.layout.chord=function(){function k(){b.sort(function(a,b){return i(a.target.value,b.target.value)})}function j(){var a={},j=[],l=d3.range(e),m=[],n,o,p,q,r;b=[],c=[],n=0,q=-1;while(++q<e){o=0,r=-1;while(++r<e)o+=d[q][r];j.push(o),m.push(d3.range(e)),n+=o}g&&l.sort(function(a,b){return g(j[a],j[b])}),h&&m.forEach(function(a,b){a.sort(function(a,c){return h(d[b][a],d[b][c])})}),n=(2*Math.PI-f*e)/n,o=0,q=-1;while(++q<e){p=o,r=-1;while(++r<e){var s=l[q],t=m[q][r],u=d[s][t];a[s+"-"+t]={index:s,subindex:t,startAngle:o,endAngle:o+=u*n,value:u}}c.push({index:s,startAngle:p,endAngle:o,value:(o-p)/n}),o+=f}q=-1;while(++q<e){r=q-1;while(++r<e){var v=a[q+"-"+r],w=a[r+"-"+q];(v.value||w.value)&&b.push(v.value<w.value?{source:w,target:v}:{source:v,target:w})}}i&&k()}var a={},b,c,d,e,f=0,g,h,i;a.matrix=function(f){if(!arguments.length)return d;e=(d=f)&&d.length,b=c=null;return a},a.padding=function(d){if(!arguments.length)return f;f=d,b=c=null;return a},a.sortGroups=function(d){if(!arguments.length)return g;g=d,b=c=null;return a},a.sortSubgroups=function(c){if(!arguments.length)return h;h=c,b=null;return a},a.sortChords=function(c){if(!arguments.length)return i;i=c,b&&k();return a},a.chords=function(){b||j();return b},a.groups=function(){c||j();return c};return a},d3.layout.force=function(){function G(b,c){var d=m(this.parentNode);(f=b).fixed=!0,g=!1,j=this,e=a,h=[d[0]-b.x,d[1]-b.y],q()}function F(){var a=A.length,e=B.length,f=d3.geom.quadtree(A),g,h,j,k,l,m,n;for(g=0;g<e;++g){h=B[g],j=h.source,k=h.target,m=k.x-j.x,n=k.y-j.y;if(l=m*m+n*n)l=d*D[g]*((l=Math.sqrt(l))-C[g])/l,m*=l,n*=l,k.x-=m,k.y-=n,j.x+=m,j.y+=n}var o=d*x;m=c[0]/2,n=c[1]/2,g=-1;while(++g<a)h=A[g],h.x+=(m-h.x)*o,h.y+=(n-h.y)*o;r(f);var p=d*w;g=-1;while(++g<a)f.visit(E(A[g],p));g=-1;while(++g<a)h=A[g],h.fixed?(h.x=h.px,h.y=h.py):(h.x-=(h.px-(h.px=h.x))*i,h.y-=(h.py-(h.py=h.y))*i);b.tick.dispatch({type:"tick",alpha:d});return(d*=.99)<.005}function E(a,b){return function(c,d,e,f,g){if(c.point!==a){var h=c.cx-a.x,i=c.cy-a.y,j=1/Math.sqrt(h*h+i*i);if((f-d)*j<y){var k=b*c.count*j*j;a.x+=h*k,a.y+=i*k;return!0}if(c.point&&isFinite(j)){var k=b*j*j;a.x+=h*k,a.y+=i*k}}}}var a={},b=d3.dispatch("tick"),c=[1,1],d,i=.9,u=s,v=t,w=-30,x=.1,y=.8,z,A=[],B=[],C,D;a.on=function(c,d){b[c].add(d);return a},a.nodes=function(b){if(!arguments.length)return A;A=b;return a},a.links=function(b){if(!arguments.length)return B;B=b;return a},a.size=function(b){if(!arguments.length)return c;c=b;return a},a.linkDistance=function(b){if(!arguments.length)return u;u=d3.functor(b);return a},a.distance=a.linkDistance,a.linkStrength=function(b){if(!arguments.length)return v;v=d3.functor(b);return a},a.friction=function(b){if(!arguments.length)return i;i=b;return a},a.charge=function(b){if(!arguments.length)return w;w=b;return a},a.gravity=function(b){if(!arguments.length)return x;x=b;return a},a.theta=function(b){if(!arguments.length)return y;y=b;return a},a.start=function(){function l(){if(!i){i=[];for(d=0;d<e;++d)i[d]=[];for(d=0;d<f;++d){var a=B[d];i[a.source.index].push(a.target),i[a.target.index].push(a.source)}}return i[b]}function k(a,c){var d=l(b),e=-1,f=d.length,g;while(++e<f)if(!isNaN(g=d[e][a]))return g;return Math.random()*c}var b,d,e=A.length,f=B.length,g=c[0],h=c[1],i,j;for(b=0;b<e;++b)(j=A[b]).index=b;C=[],D=[];for(b=0;b<f;++b)j=B[b],typeof j.source=="number"&&(j.source=A[j.source]),typeof j.target=="number"&&(j.target=A[j.target]),C[b]=u.call(this,j,b),D[b]=v.call(this,j,b);for(b=0;b<e;++b)j=A[b],isNaN(j.x)&&(j.x=k("x",g)),isNaN(j.y)&&(j.y=k("y",h)),isNaN(j.px)&&(j.px=j.x),isNaN(j.py)&&(j.py=j.y);return a.resume()},a.resume=function(){d=.1,d3.timer(F);return a},a.stop=function(){d=0;return a},a.drag=function(){this.on("mouseover.force",k).on("mouseout.force",l).on("mousedown.force",G).on("touchstart.force",G),d3.select(window).on("mousemove.force",n).on("touchmove.force",n).on("mouseup.force",o,!0).on("touchend.force",o,!0).on("click.force",p,!0);return a};return a};var e,f,g,h,i,j;d3.layout.partition=function(){function e(e,f){var g=a.call(this,e,f);c(g[0],0,b[0],b[1]/d(g[0]));return g}function d(a){var b=a.children,c=0;if(b){var e=-1,f=b.length;while(++e<f)c=Math.max(c,d(b[e]))}return 1+c}function c(a,b,d,e){var f=a.children;a.x=b,a.y=a.depth*e,a.dx=d,a.dy=e;if(f){var g=-1,h=f.length,i,j;d/=a.value;while(++g<h)c(i=f[g],b,j=i.value*d,e),b+=j}}var a=d3.layout.hierarchy(),b=[1,1];e.size=function(a){if(!arguments.length)return b;b=a;return e};return F(e,a)},d3.layout.pie=function(){function f(f,g){var h=+(typeof c=="function"?c.apply(this,arguments):c),i=(typeof e=="function"?e.apply(this,arguments):e)-c,j=d3.range(f.length);b!=null&&j.sort(function(a,c){return b(f[a],f[c])});var k=f.map(a);i/=k.reduce(function(a,b){return a+b},0);var l=j.map(function(a){return{data:f[a],value:d=k[a],startAngle:h,endAngle:h+=d*i}});return f.map(function(a,b){return l[j[b]]})}var a=Number,b=null,c=0,e=2*Math.PI;f.value=function(b){if(!arguments.length)return a;a=b;return f},f.sort=function(a){if(!arguments.length)return b;b=a;return f},f.startAngle=function(a){if(!arguments.length)return c;c=a;return f},f.endAngle=function(a){if(!arguments.length)return e;e=a;return f};return f},d3.layout.stack=function(){function g(h,i){var j=h.map(function(b,c){return a.call(g,b,c)}),k=j.map(function(a,b){return a.map(function(a,b){return[e.call(g,a,b),f.call(g,a,b)]})}),l=b.call(g,k,i);j=d3.permute(j,l),k=d3.permute(k,l);var m=c.call(g,k,i),n=j.length,o=j[0].length,p,q,r;for(q=0;q<o;++q){d.call(g,j[0][q],r=m[q],k[0][q][1]);for(p=1;p<n;++p)d.call(g,j[p][q],r+=k[p-1][q][1],k[p][q][1])}return h}var a=Object,b=x["default"],c=y.zero,d=w,e=u,f=v;g.values=function(b){if(!arguments.length)return a;a=b;return g},g.order=function(a){if(!arguments.length)return b;b=typeof a=="function"?a:x[a];return g},g.offset=function(a){if(!arguments.length)return c;c=typeof a=="function"?a:y[a];return g},g.x=function(a){if(!arguments.length)return e;e=a;return g},g.y=function(a){if(!arguments.length)return f;f=a;return g},g.out=function(a){if(!arguments.length)return d;d=a;return g};return g};var x={"inside-out":function(a){var b=a.length,c,d,e=a.map(z),f=a.map(A),g=d3.range(b).sort(function(a,b){return e[a]-e[b]}),h=0,i=0,j=[],k=[];for(c=0;c<b;++c)d=g[c],h<i?(h+=f[d],j.push(d)):(i+=f[d],k.push(d));return k.reverse().concat(j)},reverse:function(a){return d3.range(a.length).reverse()},"default":function(a){return d3.range(a.length)}},y={silhouette:function(a){var b=a.length,c=a[0].length,d=[],e=0,f,g,h,i=[];for(g=0;g<c;++g){for(f=0,h=0;f<b;f++)h+=a[f][g][1];h>e&&(e=h),d.push(h)}for(g=0;g<c;++g)i[g]=(e-d[g])/2;return i},wiggle:function(a){var b=a.length,c=a[0],d=c.length,e=0,f,g,h,i,j,k,l,m,n,o=[];o[0]=m=n=0;for(g=1;g<d;++g){for(f=0,i=0;f<b;++f)i+=a[f][g][1];for(f=0,j=0,l=c[g][0]-c[g-1][0];f<b;++f){for(h=0,k=(a[f][g][1]-a[f][g-1][1])/(2*l);h<f;++h)k+=(a[h][g][1]-a[h][g-1][1])/l;j+=k*a[f][g][1]}o[g]=m-=i?j/i*l:0,m<n&&(n=m)}for(g=0;g<d;++g)o[g]-=n;return o},expand:function(a){var b=a.length,c=a[0].length,d=1/b,e,f,g,h=[];for(f=0;f<c;++f){for(e=0,g=0;e<b;e++)g+=a[e][f][1];if(g)for(e=0;e<b;e++)a[e][f][1]/=g;else for(e=0;e<b;e++)a[e][f][1]=d}for(f=0;f<c;++f)h[f]=0;return h},zero:function(a){var b=-1,c=a[0].length,d=[];while(++b<c)d[b]=0;return d}};d3.layout.histogram=function(){function e(e,f){var g=[],h=e.map(b,this),i=c.call(this,h,f),j=d.call(this,i,h,f),k,f=-1,l=h.length,m=j.length-1,n=a?1:1/l,o;while(++f<m)k=g[f]=[],k.dx=j[f+1]-(k.x=j[f]),k.y=0;f=-1;while(++f<l)o=h[f],o>=i[0]&&o<=i[1]&&(k=g[d3.bisect(j,o,1,m)-1],k.y+=n,k.push(e[f]));return g}var a=!0,b=Number,c=E,d=C;e.value=function(a){if(!arguments.length)return b;b=a;return e},e.range=function(a){if(!arguments.length)return c;c=d3.functor(a);return e},e.bins=function(a){if(!arguments.length)return d;d=typeof a=="number"?function(b){return D(b,a)}:d3.functor(a);return e},e.frequency=function(b){if(!arguments.length)return a;a=!!b;return e};return e},d3.layout.hierarchy=function(){function g(a){var b=[];e(a,0,b);return b}function f(a,b){var d=a.children,e=0;if(d){var h=-1,i=d.length,j=b+1;while(++h<i)e+=f(d[h],j)}else c&&(e=c.call(g,K?a:a.data,b));c&&(a.value=e);return e}function e(f,h,i){var j=b.call(g,f,h),k=K?f:{data:f};k.depth=h,i.push(k);if(j){var l=-1,m=j.length,n=k.children=[],o=0,p=h+1;while(++l<m)d=e(j[l],p,i),d.parent=k,n.push(d),o+=d.value;a&&n.sort(a),c&&(k.value=o)}else c&&(k.value=c.call(g,f,h));return k}var a=I,b=G,c=H;g.sort=function(b){if(!arguments.length)return a;a=b;return g},g.children=function(a){if(!arguments.length)return b;b=a;return g},g.value=function(a){if(!arguments.length)return c;c=a;return g},g.revalue=function(a){f(a,0);return a};return g};var K=!1;d3.layout.pack=function(){function c(c,d){var e=a.call(this,c,d),f=e[0];f.x=0,f.y=0,S(f);var g=b[0],h=b[1],i=1/Math.max(2*f.r/g,2*f.r/h);T(f,g/2,h/2,i);return e}var a=d3.layout.hierarchy().sort(L),b=[1,1];c.size=function(a){if(!arguments.length)return b;b=a;return c};return F(c,a)},d3.layout.cluster=function(){function d(d,e){var f=a.call(this,d,e),g=f[0],h,i=0,j,k;be(g,function(a){a.children?(a.x=W(a.children),a.y=V(a.children)):(a.x=h?i+=b(a,h):0,a.y=0,h=a)});var l=X(g),m=Y(g),n=l.x-b(l,m)/2,o=m.x+b(m,l)/2;be(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=(1-a.y/g.y)*c[1]});return f}var a=d3.layout.hierarchy().sort(null).value(null),b=Z,c=[1,1];d.separation=function(a){if(!arguments.length)return b;b=a;return d},d.size=function(a){if(!arguments.length)return c;c=a;return d};return F(d,a)},d3.layout.tree=function(){function d(d,e){function j(a,c,d){if(c){var e=a,f=a,g=c,h=a.parent.children[0],i=e._tree.mod,j=f._tree.mod,k=g._tree.mod,l=h._tree.mod,m;while(g=_(g),e=$(e),g&&e)h=$(h),f=_(f),f._tree.ancestor=a,m=g._tree.prelim+k-e._tree.prelim-i+b(g,e),m>0&&(bg(bh(g,a,d),a,m),i+=m,j+=m),k+=g._tree.mod,i+=e._tree.mod,l+=h._tree.mod,j+=f._tree.mod;g&&!_(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!$(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}function i(a,b){a.x=a._tree.prelim+b;var c=a.children;if(c){var d=-1,e=c.length;b+=a._tree.mod;while(++d<e)i(c[d],b)}}function h(a,c){var d=a.children,e=a._tree;if(d){var f=d.length,g=d[0],i,k=g,l,m=-1;while(++m<f)l=d[m],h(l,i),k=j(l,i,k),i=l;bf(a);var n=.5*(g._tree.prelim+l._tree.prelim);c?(e.prelim=c._tree.prelim+b(a,c),e.mod=e.prelim-n):e.prelim=n}else c&&(e.prelim=c._tree.prelim+b(a,c))}var f=a.call(this,d,e),g=f[0];be(g,function(a,b){a._tree={ancestor:a,prelim:0,mod:0,change:0,shift:0,number:b?b._tree.number+1:0}}),h(g),i(g,-g._tree.prelim);var k=ba(g,bc),l=ba(g,bb),m=ba(g,bd),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth||1;be(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=a.depth/p*c[1],delete a._tree});return f}var a=d3.layout.hierarchy().sort(null).value(null),b=Z,c=[1,1];d.separation=function(a){if(!arguments.length)return b;b=a;return d},d.size=function(a){if(!arguments.length)return c;c=a;return d};return F(d,a)},d3.layout.treemap=function(){function n(b){var d=g||a(b),e=d[0];e.x=0,e.y=0,e.dx=c[0],e.dy=c[1],g&&a.revalue(e),i([e],e.dx*e.dy/e.value),(g?k:j)(e),f&&(g=d);return d}function m(a,c,d,e){var f=-1,g=a.length,h=d.x,i=d.y,j=c?b(a.area/c):0,k;if(c==d.dx){if(e||j>d.dy)j=d.dy;while(++f<g)k=a[f],k.x=h,k.y=i,k.dy=j,h+=k.dx=j?b(k.area/j):0;k.z=!0,k.dx+=d.x+d.dx-h,d.y+=j,d.dy-=j}else{if(e||j>d.dx)j=d.dx;while(++f<g)k=a[f],k.x=h,k.y=i,k.dx=j,i+=k.dy=j?b(k.area/j):0;k.z=!1,k.dy+=d.y+d.dy-i,d.x+=j,d.dx-=j}}function l(a,b){var c=a.area,d,e=0,f=Infinity,g=-1,i=a.length;while(++g<i){if(!(d=a[g].area))continue;d<f&&(f=d),d>e&&(e=d)}c*=c,b*=b;return c?Math.max(b*e*h/c,c/(b*f*h)):Infinity}function k(a){if(!!a.children){var b=e(a),c=a.children.slice(),d,f=[];i(c,b.dx*b.dy/a.value),f.area=0;while(d=c.pop())f.push(d),f.area+=d.area,d.z!=null&&(m(f,d.z?b.dx:b.dy,b,!c.length),f.length=f.area=0);a.children.forEach(k)}}function j(a){if(!!a.children){var b=e(a),c=[],d=a.children.slice(),f,g=Infinity,h,k=Math.min(b.dx,b.dy),n;i(d,b.dx*b.dy/a.value),c.area=0;while((n=d.length)>0)c.push(f=d[n-1]),c.area+=f.area,(h=l(c,k))<=g?(d.pop(),g=h):(c.area-=c.pop().area,m(c,k,b,!1),k=Math.min(b.dx,b.dy),c.length=c.area=0,g=Infinity);c.length&&(m(c,k,b,!0),c.length=c.area=0),a.children.forEach(j)}}function i(a,b){var c=-1,d=a.length,e,f;while(++c<d)f=(e=a[c]).value*(b<0?0:b),e.area=isNaN(f)||f<=0?0:f}var a=d3.layout.hierarchy(),b=Math.round,c=[1,1],d=null,e=bi,f=!1,g,h=.5*(1+Math.sqrt(5));n.size=function(a){if(!arguments.length)return c;c=a;return n},n.padding=function(a){function c(b){return bj(b,a)}function b(b){var c=a.call(n,b,b.depth);return c==null?bi(b):bj(b,typeof c=="number"?[c,c,c,c]:c)}if(!arguments.length)return d;var f;e=(d=a)==null?bi:(f=typeof a)==="function"?b:f==="number"?(a=[a,a,a,a],c):c;return n},n.round=function(a){if(!arguments.length)return b!=Number;b=a?Math.round:Number;return n},n.sticky=function(a){if(!arguments.length)return f;f=a,g=null;return n},n.ratio=function(a){if(!arguments.length)return h;h=a;return n};return F(n,a)}})()
Index: /Dev/trunk/d3/d3.min.js
===================================================================
--- /Dev/trunk/d3/d3.min.js	(revision 76)
+++ /Dev/trunk/d3/d3.min.js	(revision 76)
@@ -0,0 +1,2 @@
+(function(){function ct(){return"circle"}function cs(){return 64}function cr(a,b){var c=(a.ownerSVGElement||a).createSVGPoint();if(cq<0&&(window.scrollX||window.scrollY)){var d=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),e=d[0][0].getScreenCTM();cq=!e.f&&!e.e,d.remove()}cq?(c.x=b.pageX,c.y=b.pageY):(c.x=b.clientX,c.y=b.clientY),c=c.matrixTransform(a.getScreenCTM().inverse());return[c.x,c.y]}function cp(a){return function(){var b=a.apply(this,arguments),c=b[0],d=b[1]+bB;return[c*Math.cos(d),c*Math.sin(d)]}}function co(a){return[a.x,a.y]}function cn(a){return a.endAngle}function cm(a){return a.startAngle}function cl(a){return a.radius}function ck(a){return a.target}function cj(a){return a.source}function ci(a){return function(b,c){return a[c][1]}}function ch(a){return function(b,c){return a[c][0]}}function cg(a){function i(f){if(f.length<1)return null;var i=bI(this,f,b,d),j=bI(this,f,b===c?ch(i):c,d===e?ci(i):e);return"M"+g(a(j),h)+"L"+g(a(i.reverse()),h)+"Z"}var b=bJ,c=bJ,d=0,e=bK,f="linear",g=bL[f],h=.7;i.x=function(a){if(!arguments.length)return c;b=c=a;return i},i.x0=function(a){if(!arguments.length)return b;b=a;return i},i.x1=function(a){if(!arguments.length)return c;c=a;return i},i.y=function(a){if(!arguments.length)return e;d=e=a;return i},i.y0=function(a){if(!arguments.length)return d;d=a;return i},i.y1=function(a){if(!arguments.length)return e;e=a;return i},i.interpolate=function(a){if(!arguments.length)return f;g=bL[f=a];return i},i.tension=function(a){if(!arguments.length)return h;h=a;return i};return i}function cf(a){var b,c=-1,d=a.length,e,f;while(++c<d)b=a[c],e=b[0],f=b[1]+bB,b[0]=e*Math.cos(f),b[1]=e*Math.sin(f);return a}function ce(a){return a.length<3?bM(a):a[0]+bS(a,cd(a))}function cd(a){var b=[],c,d,e,f,g=cc(a),h=-1,i=a.length-1;while(++h<i)c=cb(a[h],a[h+1]),Math.abs(c)<1e-6?g[h]=g[h+1]=0:(d=g[h]/c,e=g[h+1]/c,f=d*d+e*e,f>9&&(f=c*3/Math.sqrt(f),g[h]=f*d,g[h+1]=f*e));h=-1;while(++h<=i)f=(a[Math.min(i,h+1)][0]-a[Math.max(0,h-1)][0])/(6*(1+g[h]*g[h])),b.push([f||0,g[h]*f||0]);return b}function cc(a){var b=0,c=a.length-1,d=[],e=a[0],f=a[1],g=d[0]=cb(e,f);while(++b<c)d[b]=g+(g=cb(e=f,f=a[b+1]));d[b]=g;return d}function cb(a,b){return(b[1]-a[1])/(b[0]-a[0])}function ca(a,b,c){a.push("C",bY(bZ,b),",",bY(bZ,c),",",bY(b$,b),",",bY(b$,c),",",bY(b_,b),",",bY(b_,c))}function bY(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function bX(a,b){var c=a.length-1,d=a[0][0],e=a[0][1],f=a[c][0]-d,g=a[c][1]-e,h=-1,i,j;while(++h<=c)i=a[h],j=h/c,i[0]=b*i[0]+(1-b)*(d+j*f),i[1]=b*i[1]+(1-b)*(e+j*g);return bU(a)}function bW(a){var b,c=-1,d=a.length,e=d+4,f,g=[],h=[];while(++c<4)f=a[c%d],g.push(f[0]),h.push(f[1]);b=[bY(b_,g),",",bY(b_,h)],--c;while(++c<e)f=a[c%d],g.shift(),g.push(f[0]),h.shift(),h.push(f[1]),ca(b,g,h);return b.join("")}function bV(a){if(a.length<4)return bM(a);var b=[],c=-1,d=a.length,e,f=[0],g=[0];while(++c<3)e=a[c],f.push(e[0]),g.push(e[1]);b.push(bY(b_,f)+","+bY(b_,g)),--c;while(++c<d)e=a[c],f.shift(),f.push(e[0]),g.shift(),g.push(e[1]),ca(b,f,g);return b.join("")}function bU(a){if(a.length<3)return bM(a);var b=[],c=1,d=a.length,e=a[0],f=e[0],g=e[1],h=[f,f,f,(e=a[1])[0]],i=[g,g,g,e[1]];b.push(f,",",g),ca(b,h,i);while(++c<d)e=a[c],h.shift(),h.push(e[0]),i.shift(),i.push(e[1]),ca(b,h,i);c=-1;while(++c<2)h.shift(),h.push(e[0]),i.shift(),i.push(e[1]),ca(b,h,i);return b.join("")}function bT(a,b){var c=[],d=(1-b)/2,e,f=a[0],g=a[1],h=1,i=a.length;while(++h<i)e=f,f=g,g=a[h],c.push([d*(g[0]-e[0]),d*(g[1]-e[1])]);return c}function bS(a,b){if(b.length<1||a.length!=b.length&&a.length!=b.length+2)return bM(a);var c=a.length!=b.length,d="",e=a[0],f=a[1],g=b[0],h=g,i=1;c&&(d+="Q"+(f[0]-g[0]*2/3)+","+(f[1]-g[1]*2/3)+","+f[0]+","+f[1],e=a[1],i=2);if(b.length>1){h=b[1],f=a[i],i++,d+="C"+(e[0]+g[0])+","+(e[1]+g[1])+","+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1];for(var j=2;j<b.length;j++,i++)f=a[i],h=b[j],d+="S"+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1]}if(c){var k=a[i];d+="Q"+(f[0]+h[0]*2/3)+","+(f[1]+h[1]*2/3)+","+k[0]+","+k[1]}return d}function bR(a,b,c){return a.length<3?bM(a):a[0]+bS(a,bT(a,b))}function bQ(a,b){return a.length<3?bM(a):a[0]+bS((a.push(a[0]),a),bT([a[a.length-2]].concat(a,[a[1]]),b))}function bP(a,b){return a.length<4?bM(a):a[1]+bS(a.slice(1,a.length-1),bT(a,b))}function bO(a){var b=[],c=0,d=a.length,e=a[0];b.push(e[0],",",e[1]);while(++c<d)b.push("H",(e=a[c])[0],"V",e[1]);return b.join("")}function bN(a){var b=[],c=0,d=a.length,e=a[0];b.push(e[0],",",e[1]);while(++c<d)b.push("V",(e=a[c])[1],"H",e[0]);return b.join("")}function bM(a){var b=[],c=0,d=a.length,e=a[0];b.push(e[0],",",e[1]);while(++c<d)b.push("L",(e=a[c])[0],",",e[1]);return b.join("")}function bK(a){return a[1]}function bJ(a){return a[0]}function bI(a,b,c,d){var e=[],f=-1,g=b.length,h=typeof c=="function",i=typeof d=="function",j;if(h&&i)while(++f<g)e.push([c.call(a,j=b[f],f),d.call(a,j,f)]);else if(h)while(++f<g)e.push([c.call(a,b[f],f),d]);else if(i)while(++f<g)e.push([c,d.call(a,b[f],f)]);else while(++f<g)e.push([c,d]);return e}function bH(a){function g(d){return d.length<1?null:"M"+e(a(bI(this,d,b,c)),f)}var b=bJ,c=bK,d="linear",e=bL[d],f=.7;g.x=function(a){if(!arguments.length)return b;b=a;return g},g.y=function(a){if(!arguments.length)return c;c=a;return g},g.interpolate=function(a){if(!arguments.length)return d;e=bL[d=a];return g},g.tension=function(a){if(!arguments.length)return f;f=a;return g};return g}function bG(a){return a.endAngle}function bF(a){return a.startAngle}function bE(a){return a.outerRadius}function bD(a){return a.innerRadius}function bw(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function bv(a){return a.toPrecision(1)}function bu(a){return-Math.log(-a)/Math.LN10}function bt(a){return Math.log(a)/Math.LN10}function bs(a,b,c,d){var e=[],f=[],g=0,h=a.length;while(++g<h)e.push(c(a[g-1],a[g])),f.push(d(b[g-1],b[g]));return function(b){var c=d3.bisect(a,b,1,a.length-1)-1;return f[c](e[c](b))}}function br(a,b,c,d){var e=c(a[0],a[1]),f=d(b[0],b[1]);return function(a){return f(e(a))}}function bq(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(bo(a,b)[2])/Math.LN10+.01))+"f")}function bp(a,b){return d3.range.apply(d3,bo(a,b))}function bo(a,b){var c=bj(a),d=c[1]-c[0],e=Math.pow(10,Math.floor(Math.log(d/b)/Math.LN10)),f=b/d*e;f<=.15?e*=10:f<=.35?e*=5:f<=.75&&(e*=2),c[0]=Math.ceil(c[0]/e)*e,c[1]=Math.floor(c[1]/e)*e+e*.5,c[2]=e;return c}function bn(a){a=Math.pow(10,Math.round(Math.log(a)/Math.LN10)-1);return{floor:function(b){return Math.floor(b/a)*a},ceil:function(b){return Math.ceil(b/a)*a}}}function bm(a,b){a.range=d3.rebind(a,b.range),a.rangeRound=d3.rebind(a,b.rangeRound),a.interpolate=d3.rebind(a,b.interpolate),a.clamp=d3.rebind(a,b.clamp);return a}function bl(){return Math}function bk(a,b){var c=0,d=a.length-1,e=a[c],f=a[d],g;f<e&&(g=c,c=d,d=g,g=e,e=f,f=g),b=b(f-e),a[c]=b.floor(e),a[d]=b.ceil(f);return a}function bj(a){var b=a[0],c=a[a.length-1];return b<c?[b,c]:[c,b]}function bi(){}function bg(){var a=null,b=bb,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bb=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bf(){var a,b=Date.now(),c=bb;while(c)a=b-c.then,a>c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bg()-b;d>24?(isFinite(d)&&(clearTimeout(bd),bd=setTimeout(bf,d)),bc=0):(bc=1,bh(bf))}function be(a,b){var c=Date.now(),d=!1,e,f=bb;if(!!isFinite(b)){while(f){if(f.callback===a){f.then=c,f.delay=b,d=!0;break}e=f,f=f.next}d||(bb={callback:a,then:c,delay:b,next:bb}),bc||(bd=clearTimeout(bd),bc=1,bh(bf))}}function ba(a){return typeof a=="function"?function(b,c,d){var e=a.call(this,b,c)+"";return d!=e&&d3.interpolate(d,e)}:(a=a+"",function(b,c,d){return d!=a&&d3.interpolate(d,a)})}function _(a){function n(b){var h=!0,l=-1;a.each(function(){if(i[++l]!==2){var a=(b-j[l])/k[l],n=this.__transition__,o,p,q=e[l];if(a<1){h=!1;if(a<0)return}else a=1;if(i[l]){if(!n||n.active!==c){i[l]=2;return}}else{if(!n||n.active>c){i[l]=2;return}i[l]=1,g.start.dispatch.apply(this,arguments),q=e[l]={},n.active=c;for(p in d)if(o=d[p].apply(this,arguments))q[p]=o}o=m(a);for(p in q)q[p].call(this,o);if(a===1){i[l]=2;if(n.active===c){var r=n.owner;r===c&&(delete this.__transition__,f&&this.parentNode&&this.parentNode.removeChild(this)),$=c,g.end.dispatch.apply(this,arguments),$=0,n.owner=r}}}});return h}var b={},c=$||++Z,d={},e=[],f=!1,g=d3.dispatch("start","end"),i=[],j=[],k=[],l,m=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__={})).owner=c}),b.delay=function(c){var d=Infinity,e=-1;typeof c=="function"?a.each(function(a,b){var f=j[++e]=+c.apply(this,arguments);f<d&&(d=f)}):(d=+c,a.each(function(a,b){j[++e]=d})),be(n,d);return b},b.duration=function(c){var d=-1;typeof c=="function"?(l=0,a.each(function(a,b){var e=k[++d]=+c.apply(this,arguments);e>l&&(l=e)})):(l=+c,a.each(function(a,b){k[++d]=l}));return b},b.ease=function(a){m=typeof a=="function"?a:d3.ease.apply(d3,arguments);return b},b.attrTween=function(a,c){function f(b,d){var e=c.call(this,b,d,this.getAttributeNS(a.space,a.local));return e&&function(b){this.setAttributeNS(a.space,a.local,e(b))}}function e(b,d){var e=c.call(this,b,d,this.getAttribute(a));return e&&function(b){this.setAttribute(a,e(b))}}d["attr."+a]=a.local?f:e;return b},b.attr=function(a,c){return b.attrTween(a,ba(c))},b.styleTween=function(a,c,e){function f(b,d){var f=c.call(this,b,d,window.getComputedStyle(this,null).getPropertyValue(a));return f&&function(b){this.style.setProperty(a,f(b),e)}}arguments.length<3&&(e=null),d["style."+a]=f;return b},b.style=function(a,c,d){arguments.length<3&&(d=null);return b.styleTween(a,ba(c),d)},b.text=function(a){d.text=function(b,c){this.textContent=typeof a=="function"?a.call(this,b,c):a};return b},b.select=function(b){var c,d=_(a.select(b)).ease(m);c=-1,d.delay(function(a,b){return j[++c]}),c=-1,d.duration(function(a,b){return k[++c]});return d},b.selectAll=function(b){var c,d=_(a.selectAll(b)).ease(m);c=-1,d.delay(function(a,b){return j[b?c:++c]}),c=-1,d.duration(function(a,b){return k[b?c:++c]});return d},b.remove=function(){f=!0;return b},b.each=function(a,c){g[a].add(c);return b},b.call=h;return b.delay(0).duration(250)}function Y(a){return{__data__:a}}function X(a){arguments.length||(a=d3.ascending);return function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function W(a){function b(b){var c=[],d,e,f,g;for(var h=0,i=a.length;h<i;h++){f=a[h],c.push(d=[]),d.parentNode=f.parentNode;for(var j=0,k=f.length;j<k;j++)(g=f[j])?(d.push(e=b(f.parentNode)),e.__data__=g.__data__):d.push(null)}return V(c)}a.append=function(a){function d(b){return b.appendChild(document.createElementNS(a.space,a.local))}function c(b){return b.appendChild(document.createElement(a))}a=d3.ns.qualify(a);return b(a.local?d:c)},a.insert=function(a,c){function e(b){return b.insertBefore(document.createElementNS(a.space,a.local),S(c,b))}function d(b){return b.insertBefore(document.createElement(a),S(c,b))}a=d3.ns.qualify(a);return b(a.local?e:d)};return a}function V(a){function d(b){for(var c=0,d=a.length;c<d;c++){var e=a[c];for(var f=0,g=e.length;f<g;f++){var h=e[f];if(h)return b.call(h,h.__data__,f)}}return null}function c(b){var c=[],d,e,f;for(var g=0,h=a.length;g<h;g++){e=a[g];for(var i=0,j=e.length;i<j;i++)if(f=e[i])c.push(d=b(f)),d.parentNode=f}return V(c)}function b(b){var c=[],d,e,f,g;for(var h=0,i=a.length;h<i;h++){f=a[h],c.push(d=[]),d.parentNode=f.parentNode;for(var j=0,k=f.length;j<k;j++)(g=f[j])?(d.push(e=b(g)),e&&"__data__"in g&&(e.__data__=g.__data__)):d.push(null)}return V(c)}a.select=function(a){return b(function(b){return S(a,b)})},a.selectAll=function(a){return c(function(b){return T(a,b)})},a.filter=function(b){var c=[],d,e,f;for(var g=0,h=a.length;g<h;g++){e=a[g],c.push(d=[]),d.parentNode=e.parentNode;for(var i=0,j=e.length;i<j;i++)(f=e[i])&&b.call(f,f.__data__,i)&&d.push(f)}return V(c)},a.map=function(b){var c,d;for(var e=0,f=a.length;e<f;e++){c=a[e];for(var g=0,h=c.length;g<h;g++)if(d=c[g])d.__data__=b.call(d,d.__data__,g)}return a},a.data=function(b,c){function g(a,b){var g=0,h=a.length,i=b.length,j=Math.min(h,i),k=Math.max(h,i),l=[],m=[],n=[],o,p;if(c){var q={},r=[],s,t=b.length;for(g=0;g<h;g++)s=c.call(o=a[g],o.__data__,g),s in q?n[t++]=o:q[s]=o,r.push(s);for(g=0;g<i;g++)o=q[s=c.call(b,p=b[g],g)],o?(o.__data__=p,l[g]=o,m[g]=n[g]=null):(m[g]=Y(p),l[g]=n[g]=null),delete q[s];for(g=0;g<h;g++)r[g]in q&&(n[g]=a[g])}else{for(;g<j;g++)o=a[g],p=b[g],o?(o.__data__=p,l[g]=o,m[g]=n[g]=null):(m[g]=Y(p),l[g]=n[g]=null);for(;g<i;g++)m[g]=Y(b[g]),l[g]=n[g]=null;for(;g<k;g++)n[g]=a[g],m[g]=l[g]=null}m.parentNode=l.parentNode=n.parentNode=a.parentNode,d.push(m),e.push(l),f.push(n)}var d=[],e=[],f=[],h=-1,i=a.length,j;if(typeof b=="function")while(++h<i)g(j=a[h],b.call(j,j.parentNode.__data__,h));else while(++h<i)g(j=a[h],b);var k=V(e);k.enter=function(){return W(d)},k.exit=function(){return V(f)};return k},a.each=function(b){for(var c=0,d=a.length;c<d;c++){var e=a[c];for(var f=0,g=e.length;f<g;f++){var h=e[f];h&&b.call(h,h.__data__,f)}}return a},a.empty=function(){return!d(function(){return!0})},a.node=function(){return d(function(){return this})},a.attr=function(b,c){function j(){var a=c.apply(this,arguments);a==null?this.removeAttributeNS(b.space,b.local):this.setAttributeNS(b.space,b.local,a)}function i(){var a=c.apply(this,arguments);a==null?this.removeAttribute(b):this.setAttribute(b,a)}function h(){this.setAttributeNS(b.space,b.local,c)}function g(){this.setAttribute(b,c)}function f(){this.removeAttributeNS(b.space,b.local)}function e(){this.removeAttribute(b)}b=d3.ns.qualify(b);if(arguments.length<2)return d(b.local?function(){return this.getAttributeNS(b.space,b.local)}:function(){return this.getAttribute(b)});return a.each(c==null?b.local?f:e:typeof c=="function"?b.local?j:i:b.local?h:g)},a.classed=function(b,c){function i(){(c.apply(this,arguments)?f:h).call(this)}function h(){if(a=this.classList)return a.remove(b);var a=this.className,c=a.baseVal!=null,d=c?a.baseVal:a;d=g(d.replace(e," ")),c?a.baseVal=d:this.className=d}function f(){if(a=this.classList)return a.add(b);var a=this.className,c=a.baseVal!=null,d=c?a.baseVal:a;e.lastIndex=0,e.test(d)||(d=g(d+" "+b),c?a.baseVal=d:this.className=d)}var e=new RegExp("(^|\\s+)"+d3.requote(b)+"(\\s+|$)","g");if(arguments.length<2)return d(function(){if(a=this.classList)return a.contains(b);var a=this.className;e.lastIndex=0;return e.test(a.baseVal!=null?a.baseVal:a)});return a.each(typeof c=="function"?i:c?f:h)},a.style=function(b,c,e){function h(){var a=c.apply(this,arguments);a==null?this.style.removeProperty(b):this.style.setProperty(b,a,e)}function g(){this.style.setProperty(b,c,e)}function f(){this.style.removeProperty(b)}arguments.length<3&&(e="");if(arguments.length<2)return d(function(){return window.getComputedStyle(this,null).getPropertyValue(b)});return a.each(c==null?f:typeof c=="function"?h:g)},a.property=function(b,c){function g(){var a=c.apply(this,arguments);a==null?delete this[b]:this[b]=a}function f(){this[b]=c}function e(){delete this[b]}b=d3.ns.qualify(b);if(arguments.length<2)return d(function(){return this[b]});return a.each(c==null?e:typeof c=="function"?g:f)},a.text=function(b){function e(){this.textContent=b.apply(this,arguments)}function c(){this.textContent=b}if(arguments.length<1)return d(function(){return this.textContent});return a.each(typeof b=="function"?e:c)},a.html=function(b){function e(){this.innerHTML=b.apply(this,arguments)}function c(){this.innerHTML=b}if(arguments.length<1)return d(function(){return this.innerHTML});return a.each(typeof b=="function"?e:c)},a.append=function(a){function d(b){return b.appendChild(document.createElementNS(a.space,a.local))}function c(b){return b.appendChild(document.createElement(a))}a=d3.ns.qualify(a);return b(a.local?d:c)},a.insert=function(a,c){function e(b){return b.insertBefore(document.createElementNS(a.space,a.local),S(c,b))}function d(b){return b.insertBefore(document.createElement(a),S(c,b))}a=d3.ns.qualify(a);return b(a.local?e:d)},a.remove=function(){return a.each(function(){var a=this.parentNode;a&&a.removeChild(this)})},a.sort=function(b){b=X.apply(this,arguments);for(var c=0,d=a.length;c<d;c++){var e=a[c];e.sort(b);for(var f=1,g=e.length,h=e[0];f<g;f++){var i=e[f];i&&(h&&h.parentNode.insertBefore(i,h.nextSibling),h=i)}}return a},a.on=function(b,c,d){arguments.length<3&&(d=!1);var e=b.indexOf("."),f=e===-1?b:b.substring(0,e),g="__on"+b;return a.each(function(a,b){function h(a){var d=d3.event;d3.event=a;try{c.call(this,e.__data__,b)}finally{d3.event=d}}this[g]&&this.removeEventListener(f,this[g],d),c&&this.addEventListener(f,this[g]=h,d);var e=this})},a.transition=function(){return _(a)},a.call=h;return a}function R(a,b,c){function g(a){return Math.round(f(a)*255)}function f(a){a>360?a-=360:a<0&&(a+=360);if(a<60)return d+(e-d)*a/60;if(a<180)return e;if(a<240)return d+(e-d)*(240-a)/60;return d}var d,e;a=a%360,a<0&&(a+=360),b=b<0?0:b>1?1:b,c=c<0?0:c>1?1:c,e=c<=.5?c*(1+b):c+b-c*b,d=2*c-e;return H(g(a+120),g(a),g(a-120))}function Q(a,b,c){this.h=a,this.s=b,this.l=c}function P(a,b,c){return new Q(a,b,c)}function M(a){var b=parseFloat(a);return a.charAt(a.length-1)==="%"?Math.round(b*2.55):b}function L(a,b,c){var d=Math.min(a/=255,b/=255,c/=255),e=Math.max(a,b,c),f=e-d,g,h,i=(e+d)/2;f?(h=i<.5?f/(e+d):f/(2-e-d),a==e?g=(b-c)/f+(b<c?6:0):b==e?g=(c-a)/f+2:g=(a-b)/f+4,g*=60):h=g=0;return P(g,h,i)}function K(a,b,c){var d=0,e=0,f=0,g,h,i;g=/([a-z]+)\((.*)\)/i.exec(a);if(g){h=g[2].split(",");switch(g[1]){case"hsl":return c(parseFloat(h[0]),parseFloat(h[1])/100,parseFloat(h[2])/100);case"rgb":return b(M(h[0]),M(h[1]),M(h[2]))}}if(i=N[a])return b(i.r,i.g,i.b);a!=null&&a.charAt(0)==="#"&&(a.length===4?(d=a.charAt(1),d+=d,e=a.charAt(2),e+=e,f=a.charAt(3),f+=f):a.length===7&&(d=a.substring(1,3),e=a.substring(3,5),f=a.substring(5,7)),d=parseInt(d,16),e=parseInt(e,16),f=parseInt(f,16));return b(d,e,f)}function J(a){return a<16?"0"+a.toString(16):a.toString(16)}function I(a,b,c){this.r=a,this.g=b,this.b=c}function H(a,b,c){return new I(a,b,c)}function G(a,b){b=1/(b-(a=+a));return function(c){return Math.max(0,Math.min(1,(c-a)*b))}}function F(a,b){b=1/(b-(a=+a));return function(c){return(c-a)*b}}function E(a){return a in D||/\bcolor\b/.test(a)?d3.interpolateRgb:d3.interpolate}function B(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}function A(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}}function z(a,b){var c;arguments.length<2&&(b=.45),arguments.length<1?(a=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/a);return function(d){return 1+a*Math.pow(2,10*-d)*Math.sin((d-c)*2*Math.PI/b)}}function y(a){return 1-Math.sqrt(1-a*a)}function x(a){return a?Math.pow(2,10*(a-1))-.001:0}function w(a){return 1-Math.cos(a*Math.PI/2)}function v(a){return function(b){return Math.pow(b,a)}}function u(a){return a}function t(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function s(a){return function(b){return 1-a(1-b)}}function n(a){var b=a.lastIndexOf("."),c=b>=0?a.substring(b):(b=a.length,""),d=[];while(b>0)d.push(a.substring(b-=3,b+3));return d.reverse().join(",")+c}function m(a){return a+""}function j(a){var b={},c=[];b.add=function(a){for(var d=0;d<c.length;d++)if(c[d].listener==a)return b;c.push({listener:a,on:!0});return b},b.remove=function(a){for(var d=0;d<c.length;d++){var e=c[d];if(e.listener==a){e.on=!1,c=c.slice(0,d).concat(c.slice(d+1));break}}return b},b.dispatch=function(){var a=c;for(var b=0,d=a.length;b<d;b++){var e=a[b];e.on&&e.listener.apply(this,arguments)}};return b}function h(a){a.apply(this,(arguments[0]=this,arguments));return this}function g(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function f(a){return a==null}function e(a){return a.length}function c(a){return Array.prototype.slice.call(a)}function b(a){var b=-1,c=a.length,d=[];while(++b<c)d.push(a[b]);return d}d3={version:"1.29.1"},Date.now||(Date.now=function(){return+(new Date)}),Object.create||(Object.create=function(a){function b(){}b.prototype=a;return new b});var a=c;try{a(document.documentElement.childNodes)[0].nodeType}catch(d){a=b}d3.functor=function(a){return typeof a=="function"?a:function(){return a}},d3.rebind=function(a,b){return function(){var c=b.apply(a,arguments);return arguments.length?a:c}},d3.ascending=function(a,b){return a<b?-1:a>b?1:0},d3.descending=function(a,b){return b<a?-1:b>a?1:0},d3.min=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++c<d&&((e=a[c])==null||e!=e))e=undefined;while(++c<d)(f=a[c])!=null&&e>f&&(e=f)}else{while(++c<d&&((e=b.call(a,a[c],c))==null||e!=e))e=undefined;while(++c<d)(f=b.call(a,a[c],c))!=null&&e>f&&(e=f)}return e},d3.max=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++c<d&&((e=a[c])==null||e!=e))e=undefined;while(++c<d)(f=a[c])!=null&&f>e&&(e=f)}else{while(++c<d&&((e=b.call(a,a[c],c))==null||e!=e))e=undefined;while(++c<d)(f=b.call(a,a[c],c))!=null&&f>e&&(e=f)}return e},d3.sum=function(a,b){var c=0,d=a.length,e,f=-1;if(arguments.length===1)while(++f<d)isNaN(e=+a[f])||(c+=e);else while(++f<d)isNaN(e=+b.call(a,a[f],f))||(c+=e);return c},d3.quantile=function(a,b){var c=(a.length-1)*b+1,d=Math.floor(c),e=a[d-1],f=c-d;return f?e+f*(a[d]-e):e},d3.zip=function(){if(!(f=arguments.length))return[];for(var a=-1,b=d3.min(arguments,e),c=Array(b);++a<b;)for(var d=-1,f,g=c[a]=Array(f);++d<f;)g[d]=arguments[d][a];return c},d3.bisectLeft=function(a,b,c,d){arguments.length<3&&(c=0),arguments.length<4&&(d=a.length);while(c<d){var e=c+d>>1;a[e]<b?c=e+1:d=e}return c},d3.bisect=d3.bisectRight=function(a,b,c,d){arguments.length<3&&(c=0),arguments.length<4&&(d=a.length);while(c<d){var e=c+d>>1;b<a[e]?d=e:c=e+1}return c},d3.first=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c<d)b.call(a,e,f=a[c])>0&&(e=f);return e},d3.last=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c<d)b.call(a,e,f=a[c])<=0&&(e=f);return e},d3.nest=function(){function g(a,d){if(d>=b.length)return a;var e=[],f=c[d++],h;for(h in a)e.push({key:h,values:g(a[h],d)});f&&e.sort(function(a,b){return f(a.key,b.key)});return e}function f(c,g){if(g>=b.length)return e?e.call(a,c):d?c.sort(d):c;var h=-1,i=c.length,j=b[g++],k,l,m={};while(++h<i)(k=j(l=c[h]))in m?m[k].push(l):m[k]=[l];for(k in m)m[k]=f(m[k],g);return m}var a={},b=[],c=[],d,e;a.map=function(a){return f(a,0)},a.entries=function(a){return g(f(a,0),0)},a.key=function(c){b.push(c);return a},a.sortKeys=function(d){c[b.length-1]=d;return a},a.sortValues=function(b){d=b;return a},a.rollup=function(b){e=b;return a};return a},d3.keys=function(a){var b=[];for(var c in a)b.push(c);return b},d3.values=function(a){var b=[];for(var c in a)b.push(a[c]);return b},d3.entries=function(a){var b=[];for(var c in a)b.push({key:c,value:a[c]});return b},d3.permute=function(a,b){var c=[],d=-1,e=b.length;while(++d<e)c[d]=a[b[d]];return c},d3.merge=function(a){return Array.prototype.concat.apply([],a)},d3.split=function(a,b){var c=[],d=[],e,g=-1,h=a.length;arguments.length<2&&(b=f);while(++g<h)b.call(d,e=a[g],g)?d=[]:(d.length||c.push(d),d.push(e));return c},d3.range=function(a,b,c){arguments.length===1&&(b=a,a=0),c==null&&(c=1);if((b-a)/c==Infinity)throw new Error("infinite range");var d=[],e=-1,f;if(c<0)while((f=a+c*++e)>b)d.push(f);else while((f=a+c*++e)<b)d.push(f);return d},d3.requote=function(a){return a.replace(i,"\\$&")};var i=/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;d3.round=function(a,b){return b?Math.round(a*Math.pow(10,b))*Math.pow(10,-b):Math.round(a)},d3.xhr=function(a,b,c){var d=new XMLHttpRequest;arguments.length<3?c=b:b&&d.overrideMimeType&&d.overrideMimeType(b),d.open("GET",a,!0),d.onreadystatechange=function(){d.readyState===4&&c(d.status<300?d:null)},d.send(null)},d3.text=function(a,b,c){function d(a){c(a&&a.responseText)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)},d3.json=function(a,b){d3.text(a,"application/json",function(a){b(a?JSON.parse(a):null)})},d3.html=function(a,b){d3.text(a,"text/html",function(a){if(a!=null){var c=document.createRange();c.selectNode(document.body),a=c.createContextualFragment(a)}b(a)})},d3.xml=function(a,b,c){function d(a){c(a&&a.responseXML)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)},d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}},d3.dispatch=function(a){var b={},c;for(var d=0,e=arguments.length;d<e;d++)c=arguments[d],b[c]=j(c);return b},d3.format=function(a){var b=k.exec(a),c=b[1]||" ",d=b[3]||"",e=b[5],f=+b[6],g=b[7],h=b[8],i=b[9],j=!1,o=!1;h&&(h=h.substring(1)),e&&(c="0",g&&(f-=Math.floor((f-1)/4)));switch(i){case"n":g=!0,i="g";break;case"%":j=!0,i="f";break;case"p":j=!0,i="r";break;case"d":o=!0,h="0"}i=l[i]||m;return function(a){var b=j?a*100:+a,k=b<0&&(b=-b)?"â":d;if(o&&b%1)return"";a=i(b,h);if(e){var l=a.length+k.length;l<f&&(a=Array(f-l+1).join(c)+a),g&&(a=n(a)),a=k+a}else{g&&(a=n(a)),a=k+a;var l=a.length;l<f&&(a=Array(f-l+1).join(c)+a)}j&&(a+="%");return a}};var k=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,l={g:function(a,b){return a.toPrecision(b)},e:function(a,b){return a.toExponential(b)},f:function(a,b){return a.toFixed(b)},r:function(a,b){var c=1+Math.floor(1e-15+Math.log(a)/Math.LN10);return d3.round(a,b-c).toFixed(Math.max(0,b-c))}},o=v(2),p=v(3),q={linear:function(){return u},poly:v,quad:function(){return o},cubic:function(){return p},sin:function(){return w},exp:function(){return x},circle:function(){return y},elastic:z,back:A,bounce:function(){return B}},r={"in":function(a){return a},out:s,"in-out":t,"out-in":function(a){return t(s(a))}};d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a,d=b>=0?a.substring(b+1):"in";return r[d](q[c].apply(null,Array.prototype.slice.call(arguments,1)))},d3.event=null,d3.interpolate=function(a,b){var c=d3.interpolators.length,d;while(--c>=0&&!(d=d3.interpolators[c](a,b)));return d},d3.interpolateNumber=function(a,b){b-=a;return function(c){return a+b*c}},d3.interpolateRound=function(a,b){b-=a;return function(c){return Math.round(a+b*c)}},d3.interpolateString=function(a,b){var c,d,e,f=0,g=0,h=[],i=[],j,k;C.lastIndex=0;for(d=0;c=C.exec(b);++d)c.index&&h.push(b.substring(f,g=c.index)),i.push({i:h.length,x:c[0]}),h.push(null),f=C.lastIndex;f<b.length&&h.push(b.substring(f));for(d=0,j=i.length;(c=C.exec(a))&&d<j;++d){k=i[d];if(k.x==c[0]){if(k.i)if(h[k.i+1]==null){h[k.i-1]+=k.x,h.splice(k.i,1);for(e=d+1;e<j;++e)i[e].i--}else{h[k.i-1]+=k.x+h[k.i+1],h.splice(k.i,2);for(e=d+1;e<j;++e)i[e].i-=2}else if(h[k.i+1]==null)h[k.i]=k.x;else{h[k.i]=k.x+h[k.i+1],h.splice(k.i+1,1);for(e=d+1;e<j;++e)i[e].i--}i.splice(d,1),j--,d--}else k.x=d3.interpolateNumber(parseFloat(c[0]),parseFloat(k.x))}while(d<j)k=i.pop(),h[k.i+1]==null?h[k.i]=k.x:(h[k.i]=k.x+h[k.i+1],h.splice(k.i+1,1)),j--;if(h.length===1)return h[0]==null?i[0].x:function(){return b};return function(a){for(d=0;d<j;++d)h[(k=i[d]).i]=k.x(a);return h.join("")}},d3.interpolateRgb=function(a,b){a=d3.rgb(a),b=d3.rgb(b);var c=a.r,d=a.g,e=a.b,f=b.r-c,g=b.g-d,h=b.b-e;return function(a){return"rgb("+Math.round(c+f*a)+","+Math.round(d+g*a)+","+Math.round(e+h*a)+")"}},d3.interpolateHsl=function(a,b){a=d3.hsl(a),b=d3.hsl(b);var c=a.h,d=a.s,e=a.l,f=b.h-c,g=b.s-d,h=b.l-e;return function(a){return R(c+f*a,d+g*a,e+h*a).toString()}},d3.interpolateArray=function(a,b){var c=[],d=[],e=a.length,f=b.length,g=Math.min(a.length,b.length),h;for(h=0;h<g;++h)c.push(d3.interpolate(a[h],b[h]));for(;h<e;++h)d[h]=a[h];for(;h<f;++h)d[h]=b[h];return function(a){for(h=0;h<g;++h)d[h]=c[h](a);return d}},d3.interpolateObject=function(a,b){var c={},d={},e;for(e in a)e in b?c[e]=E(e)(a[e],b[e]):d[e]=a[e];for(e in b)e in a||(d[e]=b[e]);return function(a){for(e in c)d[e]=c[e](a);return d}};var C=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,D={background:1,fill:1,stroke:1};d3.interpolators=[d3.interpolateObject,function(a,b){return b instanceof Array&&d3.interpolateArray(a,b)},function(a,b){return typeof b=="string"&&d3.interpolateString(String(a),b)},function(a,b){return(b in N||/^(#|rgb\(|hsl\()/.test(b))&&d3.interpolateRgb(String(a),b)},function(a,b){return typeof b=="number"&&d3.interpolateNumber(+a,b)}],d3.rgb=function(a,b,c){return arguments.length===1?K(""+a,H,R):H(~~a,~~b,~~c)},I.prototype.brighter=function(a){a=Math.pow(.7,arguments.length?a:1);var b=this.r,c=this.g,d=this.b,e=30;if(!b&&!c&&!d)return H(e,e,e);b&&b<e&&(b=e),c&&c<e&&(c=e),d&&d<e&&(d=e);return H(Math.min(255,Math.floor(b/a)),Math.min(255,Math.floor(c/a)),Math.min(255,Math.floor(d/a)))},I.prototype.darker=function(a){a=Math.pow(.7,arguments.length?a:1);return H(Math.max(0,Math.floor(a*this.r)),Math.max(0,Math.floor(a*this.g)),Math.max(0,Math.floor(a*this.b)))},I.prototype.hsl=function(){return L(this.r,this.g,this.b)},I.prototype.toString=function(){return"#"+J(this.r)+J(this.g)+J(this.b)};var N={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};for(var O in N)N[O]=K(N[O],H,R);d3.hsl=function(a,b,c){return arguments.length===1?K(""+a,L,P):P(+a,+b,+c)},Q.prototype.brighter=function(a){a=Math.pow(.7,arguments.length?a:1);return P(this.h,this.s,this.l/a)},Q.prototype.darker=function(a){a=Math.pow(.7,arguments.length?a:1);return P(this.h,this.s,a*this.l)},Q.prototype.rgb=function(){return R(this.h,this.s,this.l)},Q.prototype.toString=function(){return"hsl("+this.h+","+this.s*100+"%,"+this.l*100+"%)"};var S=function(a,b){return b.querySelector(a)},T=function(b,c){return a(c.querySelectorAll(b))};typeof Sizzle=="function"&&(S=function(a,b){return Sizzle(a,b)[0]},T=function(a,b){return Sizzle.uniqueSort(Sizzle(a,b))});var U=V([[document
+]]);U[0].parentNode=document.documentElement,d3.select=function(a){return typeof a=="string"?U.select(a):V([[a]])},d3.selectAll=function(b){return typeof b=="string"?U.selectAll(b):V([a(b)])},d3.transition=U.transition;var Z=0,$=0,bb=null,bc,bd;d3.timer=function(a){be(a,0)},d3.timer.flush=function(){var a,b=Date.now(),c=bb;while(c)a=b-c.then,c.delay||(c.flush=c.callback(a)),c=c.next;bg()};var bh=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,17)};d3.scale={},d3.scale.linear=function(){function h(a){return e(a)}function g(){var g=a.length==2?br:bs,i=d?G:F;e=g(a,b,i,c),f=g(b,a,i,d3.interpolate);return h}var a=[0,1],b=[0,1],c=d3.interpolate,d=!1,e,f;h.invert=function(a){return f(a)},h.domain=function(b){if(!arguments.length)return a;a=b.map(Number);return g()},h.range=function(a){if(!arguments.length)return b;b=a;return g()},h.rangeRound=function(a){return h.range(a).interpolate(d3.interpolateRound)},h.clamp=function(a){if(!arguments.length)return d;d=a;return g()},h.interpolate=function(a){if(!arguments.length)return c;c=a;return g()},h.ticks=function(b){return bp(a,b)},h.tickFormat=function(b){return bq(a,b)},h.nice=function(){bk(a,bn);return g()};return g()},d3.scale.log=function(){function d(c){return a(b(c))}var a=d3.scale.linear(),b=bt,c=b.pow;d.invert=function(b){return c(a.invert(b))},d.domain=function(e){if(!arguments.length)return a.domain().map(c);b=e[0]<0?bu:bt,c=b.pow,a.domain(e.map(b));return d},d.nice=function(){a.domain(bk(a.domain(),bl));return d},d.ticks=function(){var d=bj(a.domain()),e=[];if(d.every(isFinite)){var f=Math.floor(d[0]),g=Math.ceil(d[1]),h=c(d[0]),i=c(d[1]);if(b===bu){e.push(c(f));for(;f++<g;)for(var j=9;j>0;j--)e.push(c(f)*j)}else{for(;f<g;f++)for(var j=1;j<10;j++)e.push(c(f)*j);e.push(c(f))}for(f=0;e[f]<h;f++);for(g=e.length;e[g-1]>i;g--);e=e.slice(f,g)}return e},d.tickFormat=function(){return bv};return bm(d,a)},bt.pow=function(a){return Math.pow(10,a)},bu.pow=function(a){return-Math.pow(10,-a)},d3.scale.pow=function(){function e(b){return a(c(b))}var a=d3.scale.linear(),b=1,c=Number,d=c;e.invert=function(b){return d(a.invert(b))},e.domain=function(f){if(!arguments.length)return a.domain().map(d);c=bw(b),d=bw(1/b),a.domain(f.map(c));return e},e.ticks=function(a){return bp(e.domain(),a)},e.tickFormat=function(a){return bq(e.domain(),a)},e.nice=function(){return e.domain(bk(e.domain(),bn))},e.exponent=function(a){if(!arguments.length)return b;var c=e.domain();b=a;return e.domain(c)};return bm(e,a)},d3.scale.sqrt=function(){return d3.scale.pow().exponent(.5)},d3.scale.ordinal=function(){function f(d){var e=d in b?b[d]:b[d]=a.push(d)-1;return c[e%c.length]}var a=[],b={},c=[],d=0,e=bi;f.domain=function(c){if(!arguments.length)return a;a=c,b={};var d=-1,g=-1,h=a.length;while(++d<h)c=a[d],c in b||(b[c]=++g);e();return f},f.range=function(a){if(!arguments.length)return c;c=a,e=bi;return f},f.rangePoints=function(b,g){arguments.length<2&&(g=0),(e=function(){var e=b[0],f=b[1],h=(f-e)/(a.length-1+g);c=a.length==1?[(e+f)/2]:d3.range(e+h*g/2,f+h/2,h),d=0})();return f},f.rangeBands=function(b,g){arguments.length<2&&(g=0),(e=function(){var e=b[0],f=b[1],h=(f-e)/(a.length+g);c=d3.range(e+h*g,f,h),d=h*(1-g)})();return f},f.rangeRoundBands=function(b,g){arguments.length<2&&(g=0),(e=function(){var e=b[0],f=b[1],h=f-e,i=Math.floor(h/(a.length+g)),j=h-(a.length-g)*i;c=d3.range(e+Math.round(j/2),f,i),d=Math.round(i*(1-g))})();return f},f.rangeBand=function(){return d};return f},d3.scale.category10=function(){return d3.scale.ordinal().range(bx)},d3.scale.category20=function(){return d3.scale.ordinal().range(by)},d3.scale.category20b=function(){return d3.scale.ordinal().range(bz)},d3.scale.category20c=function(){return d3.scale.ordinal().range(bA)};var bx=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],by=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],bz=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],bA=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){function e(a){if(isNaN(a=+a))return NaN;return b[d3.bisect(c,a)]}function d(){var d=0,e=a.length,f=b.length;c.length=Math.max(0,f-1);while(++d<f)c[d-1]=d3.quantile(a,d/f)}var a=[],b=[],c=[];e.domain=function(b){if(!arguments.length)return a;a=b.filter(function(a){return!isNaN(a)}).sort(d3.ascending),d();return e},e.range=function(a){if(!arguments.length)return b;b=a,d();return e},e.quantiles=function(){return c};return e},d3.scale.quantize=function(){function f(b){return e[Math.max(0,Math.min(d,Math.floor(c*(b-a))))]}var a=0,b=1,c=2,d=1,e=[0,1];f.domain=function(d){if(!arguments.length)return[a,b];a=d[0],b=d[1],c=e.length/(b-a);return f},f.range=function(g){if(!arguments.length)return e;e=g,c=e.length/(b-a),d=e.length-1;return f};return f},d3.svg={},d3.svg.arc=function(){function e(){var e=a.apply(this,arguments),f=b.apply(this,arguments),g=c.apply(this,arguments)+bB,h=d.apply(this,arguments)+bB,i=h-g,j=i<Math.PI?"0":"1",k=Math.cos(g),l=Math.sin(g),m=Math.cos(h),n=Math.sin(h);return i>=bC?e?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+e+"A"+e+","+e+" 0 1,1 0,"+ -e+"A"+e+","+e+" 0 1,1 0,"+e+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":e?"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L"+e*m+","+e*n+"A"+e+","+e+" 0 "+j+",0 "+e*k+","+e*l+"Z":"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L0,0"+"Z"}var a=bD,b=bE,c=bF,d=bG;e.innerRadius=function(b){if(!arguments.length)return a;a=d3.functor(b);return e},e.outerRadius=function(a){if(!arguments.length)return b;b=d3.functor(a);return e},e.startAngle=function(a){if(!arguments.length)return c;c=d3.functor(a);return e},e.endAngle=function(a){if(!arguments.length)return d;d=d3.functor(a);return e},e.centroid=function(){var e=(a.apply(this,arguments)+b.apply(this,arguments))/2,f=(c.apply(this,arguments)+d.apply(this,arguments))/2+bB;return[Math.cos(f)*e,Math.sin(f)*e]};return e};var bB=-Math.PI/2,bC=2*Math.PI-1e-6;d3.svg.line=function(){return bH(Object)};var bL={linear:bM,"step-before":bN,"step-after":bO,basis:bU,"basis-open":bV,"basis-closed":bW,bundle:bX,cardinal:bR,"cardinal-open":bP,"cardinal-closed":bQ,monotone:ce},bZ=[0,2/3,1/3,0],b$=[0,1/3,2/3,0],b_=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=bH(cf);a.radius=a.x,delete a.x,a.angle=a.y,delete a.y;return a},d3.svg.area=function(){return cg(Object)},d3.svg.area.radial=function(){var a=cg(cf);a.radius=a.x,delete a.x,a.innerRadius=a.x0,delete a.x0,a.outerRadius=a.x1,delete a.x1,a.angle=a.y,delete a.y,a.startAngle=a.y0,delete a.y0,a.endAngle=a.y1,delete a.y1;return a},d3.svg.chord=function(){function j(a,b,c,d){return"Q 0,0 "+d}function i(a,b){return"A"+a+","+a+" 0 0,1 "+b}function h(a,b){return a.a0==b.a0&&a.a1==b.a1}function g(a,b,f,g){var h=b.call(a,f,g),i=c.call(a,h,g),j=d.call(a,h,g)+bB,k=e.call(a,h,g)+bB;return{r:i,a0:j,a1:k,p0:[i*Math.cos(j),i*Math.sin(j)],p1:[i*Math.cos(k),i*Math.sin(k)]}}function f(c,d){var e=g(this,a,c,d),f=g(this,b,c,d);return"M"+e.p0+i(e.r,e.p1)+(h(e,f)?j(e.r,e.p1,e.r,e.p0):j(e.r,e.p1,f.r,f.p0)+i(f.r,f.p1)+j(f.r,f.p1,e.r,e.p0))+"Z"}var a=cj,b=ck,c=cl,d=bF,e=bG;f.radius=function(a){if(!arguments.length)return c;c=d3.functor(a);return f},f.source=function(b){if(!arguments.length)return a;a=d3.functor(b);return f},f.target=function(a){if(!arguments.length)return b;b=d3.functor(a);return f},f.startAngle=function(a){if(!arguments.length)return d;d=d3.functor(a);return f},f.endAngle=function(a){if(!arguments.length)return e;e=d3.functor(a);return f};return f},d3.svg.diagonal=function(){function d(d,e){var f=a.call(this,d,e),g=b.call(this,d,e),h=(f.y+g.y)/2,i=[f,{x:f.x,y:h},{x:g.x,y:h},g];i=i.map(c);return"M"+i[0]+"C"+i[1]+" "+i[2]+" "+i[3]}var a=cj,b=ck,c=co;d.source=function(b){if(!arguments.length)return a;a=d3.functor(b);return d},d.target=function(a){if(!arguments.length)return b;b=d3.functor(a);return d},d.projection=function(a){if(!arguments.length)return c;c=a;return d};return d},d3.svg.diagonal.radial=function(){var a=d3.svg.diagonal(),b=co,c=a.projection;a.projection=function(a){return arguments.length?c(cp(b=a)):b};return a},d3.svg.mouse=function(a){return cr(a,d3.event)};var cq=/WebKit/.test(navigator.userAgent)?-1:0;d3.svg.touches=function(b){var c=d3.event.touches;return c?a(c).map(function(a){var c=cr(b,a);c.identifier=a.identifier;return c}):[]},d3.svg.symbol=function(){function c(c,d){return(cu[a.call(this,c,d)]||cu.circle)(b.call(this,c,d))}var a=ct,b=cs;c.type=function(b){if(!arguments.length)return a;a=d3.functor(b);return c},c.size=function(a){if(!arguments.length)return b;b=d3.functor(a);return c};return c};var cu={circle:function(a){var b=Math.sqrt(a/Math.PI);return"M0,"+b+"A"+b+","+b+" 0 1,1 0,"+ -b+"A"+b+","+b+" 0 1,1 0,"+b+"Z"},cross:function(a){var b=Math.sqrt(a/5)/2;return"M"+ -3*b+","+ -b+"H"+ -b+"V"+ -3*b+"H"+b+"V"+ -b+"H"+3*b+"V"+b+"H"+b+"V"+3*b+"H"+ -b+"V"+b+"H"+ -3*b+"Z"},diamond:function(a){var b=Math.sqrt(a/(2*cw)),c=b*cw;return"M0,"+ -b+"L"+c+",0"+" 0,"+b+" "+ -c+",0"+"Z"},square:function(a){var b=Math.sqrt(a)/2;return"M"+ -b+","+ -b+"L"+b+","+ -b+" "+b+","+b+" "+ -b+","+b+"Z"},"triangle-down":function(a){var b=Math.sqrt(a/cv),c=b*cv/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/cv),c=b*cv/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}};d3.svg.symbolTypes=d3.keys(cu);var cv=Math.sqrt(3),cw=Math.tan(30*Math.PI/180)})()
Index: /Dev/trunk/d3/d3.time.js
===================================================================
--- /Dev/trunk/d3/d3.time.js	(revision 76)
+++ /Dev/trunk/d3/d3.time.js	(revision 76)
@@ -0,0 +1,660 @@
+(function(){d3.time = {};
+
+var d3_time = Date;
+d3.time.format = function(template) {
+  var n = template.length;
+
+  function format(date) {
+    var string = [],
+        i = -1,
+        j = 0,
+        c,
+        f;
+    while (++i < n) {
+      if (template.charCodeAt(i) == 37) {
+        string.push(
+            template.substring(j, i),
+            (f = d3_time_formats[c = template.charAt(++i)])
+            ? f(date) : c);
+        j = i + 1;
+      }
+    }
+    string.push(template.substring(j, i));
+    return string.join("");
+  }
+
+  format.parse = function(string) {
+    var date = new d3_time(1900, 0, 1),
+        i = d3_time_parse(date, template, string, 0);
+    if (i != string.length) return null;
+    if (date.hour12) {
+      var hours = date.getHours() % 12;
+      date.setHours(date.hour12pm ? hours + 12 : hours);
+    }
+    delete date.hour12;
+    delete date.hour12pm;
+    return date;
+  };
+
+  format.toString = function() {
+    return template;
+  };
+
+  return format;
+};
+
+function d3_time_parse(date, template, string, j) {
+  var c,
+      p,
+      i = 0,
+      n = template.length,
+      m = string.length;
+  while (i < n) {
+    if (j >= m) return -1;
+    c = template.charCodeAt(i++);
+    if (c == 37) {
+      p = d3_time_parsers[template.charAt(i++)];
+      if (!p || ((j = p(date, string, j)) < 0)) return -1;
+    } else if (c != string.charCodeAt(j++)) {
+      return -1;
+    }
+  }
+  return j;
+}
+
+var d3_time_zfill2 = d3.format("02d"),
+    d3_time_zfill3 = d3.format("03d"),
+    d3_time_zfill4 = d3.format("04d"),
+    d3_time_sfill2 = d3.format("2d");
+
+var d3_time_formats = {
+  a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
+  A: function(d) { return d3_time_weekdays[d.getDay()]; },
+  b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
+  B: function(d) { return d3_time_months[d.getMonth()]; },
+  c: d3.time.format("%a %b %e %H:%M:%S %Y"),
+  d: function(d) { return d3_time_zfill2(d.getDate()); },
+  e: function(d) { return d3_time_sfill2(d.getDate()); },
+  H: function(d) { return d3_time_zfill2(d.getHours()); },
+  I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
+  j: d3_time_dayOfYear,
+  m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
+  M: function(d) { return d3_time_zfill2(d.getMinutes()); },
+  p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
+  S: function(d) { return d3_time_zfill2(d.getSeconds()); },
+  U: d3_time_weekNumberSunday,
+  w: function(d) { return d.getDay(); },
+  W: d3_time_weekNumberMonday,
+  x: d3.time.format("%m/%d/%y"),
+  X: d3.time.format("%H:%M:%S"),
+  y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
+  Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
+  Z: d3_time_zone,
+  "%": function(d) { return "%"; }
+};
+
+var d3_time_parsers = {
+  a: d3_time_parseWeekdayAbbrev,
+  A: d3_time_parseWeekday,
+  b: d3_time_parseMonthAbbrev,
+  B: d3_time_parseMonth,
+  c: d3_time_parseLocaleFull,
+  d: d3_time_parseDay,
+  e: d3_time_parseDay,
+  H: d3_time_parseHour24,
+  I: d3_time_parseHour12,
+  // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
+  m: d3_time_parseMonthNumber,
+  M: d3_time_parseMinutes,
+  p: d3_time_parseAmPm,
+  S: d3_time_parseSeconds,
+  // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
+  // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
+  // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
+  x: d3_time_parseLocaleDate,
+  X: d3_time_parseLocaleTime,
+  y: d3_time_parseYear,
+  Y: d3_time_parseFullYear
+  // ,
+  // Z: function(d, s, i) { /*TODO time zone */ return i; },
+  // "%": function(d, s, i) { /*TODO literal % */ return i; }
+};
+
+// Note: weekday is validated, but does not set the date.
+function d3_time_parseWeekdayAbbrev(date, string, i) {
+  return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1;
+}
+
+var d3_time_weekdayAbbrevLookup = {
+  sun: 3,
+  mon: 3,
+  tue: 3,
+  wed: 3,
+  thu: 3,
+  fri: 3,
+  sat: 3
+};
+
+// Note: weekday is validated, but does not set the date.
+function d3_time_parseWeekday(date, string, i) {
+  d3_time_weekdayRe.lastIndex = 0;
+  var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
+  return n ? i += n[0].length : -1;
+}
+
+var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig;
+
+var d3_time_weekdays = [
+  "Sunday",
+  "Monday",
+  "Tuesday",
+  "Wednesday",
+  "Thursday",
+  "Friday",
+  "Saturday"
+];
+
+function d3_time_parseMonthAbbrev(date, string, i) {
+  var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()];
+  return n == null ? -1 : (date.setMonth(n), i);
+}
+
+var d3_time_monthAbbrevLookup = {
+  jan: 0,
+  feb: 1,
+  mar: 2,
+  apr: 3,
+  may: 4,
+  jun: 5,
+  jul: 6,
+  aug: 7,
+  sep: 8,
+  oct: 9,
+  nov: 10,
+  dec: 11
+};
+
+function d3_time_parseMonth(date, string, i) {
+  d3_time_monthRe.lastIndex = 0;
+  var n = d3_time_monthRe.exec(string.substring(i, i + 12));
+  return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1;
+}
+
+var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
+
+var d3_time_monthLookup = {
+  january: 0,
+  february: 1,
+  march: 2,
+  april: 3,
+  may: 4,
+  june: 5,
+  july: 6,
+  august: 7,
+  september: 8,
+  october: 9,
+  november: 10,
+  december: 11
+};
+
+var d3_time_months = [
+  "January",
+  "February",
+  "March",
+  "April",
+  "May",
+  "June",
+  "July",
+  "August",
+  "September",
+  "October",
+  "November",
+  "December"
+];
+
+function d3_time_parseLocaleFull(date, string, i) {
+  return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
+}
+
+function d3_time_parseLocaleDate(date, string, i) {
+  return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
+}
+
+function d3_time_parseLocaleTime(date, string, i) {
+  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
+}
+
+function d3_time_parseFullYear(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 4));
+  return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
+}
+
+function d3_time_parseYear(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
+}
+
+function d3_time_century() {
+  return ~~(new Date().getFullYear() / 1000) * 1000;
+}
+
+function d3_time_parseMonthNumber(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
+}
+
+function d3_time_parseDay(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
+}
+
+// Note: we don't validate that the hour is in the range [0,23].
+function d3_time_parseHour24(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
+}
+
+// Note: we don't validate that the hour is in the range [1,12].
+function d3_time_parseHour12(date, string, i) {
+  date.hour12 = true;
+  return d3_time_parseHour24(date, string, i);
+}
+
+function d3_time_parseMinutes(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
+}
+
+function d3_time_parseSeconds(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
+}
+
+// Note: we don't look at the next directive.
+var d3_time_numberRe = /\s*\d+/;
+
+function d3_time_parseAmPm(date, string, i) {
+  var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];
+  return n == null ? -1 : (date.hour12pm = n, i);
+}
+
+var d3_time_amPmLookup = {
+  am: 0,
+  pm: 1
+};
+
+function d3_time_year(d) {
+  return new d3_time(d.getFullYear(), 0, 1);
+}
+
+function d3_time_dayOfYear(d) {
+  return d3_time_zfill3(1 + ~~((d - d3_time_year(d)) / 864e5));
+}
+
+function d3_time_weekNumberSunday(d) {
+  var d0 = d3_time_year(d);
+  return d3_time_zfill2(~~(((d - d0) / 864e5 + d0.getDay()) / 7));
+}
+
+function d3_time_weekNumberMonday(d) {
+  var d0 = d3_time_year(d);
+  return d3_time_zfill2(~~(((d - d0) / 864e5 + (d0.getDay() + 6) % 7) / 7));
+}
+
+// TODO table of time zone offset names?
+function d3_time_zone(d) {
+  var z = d.getTimezoneOffset(),
+      zs = z > 0 ? "-" : "+",
+      zh = ~~(Math.abs(z) / 60),
+      zm = Math.abs(z) % 60;
+  return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
+}
+d3.time.format.utc = function(template) {
+  var local = d3.time.format(template);
+
+  function format(date) {
+    var utc = new d3_time_format_utc();
+    utc._ = date;
+    return local(utc);
+  }
+
+  format.parse = function(string) {
+    try {
+      d3_time = d3_time_format_utc;
+      var date = local.parse(string);
+      return date && date._;
+    } finally {
+      d3_time = Date;
+    }
+  };
+
+  format.toString = local.toString;
+
+  return format;
+};
+
+function d3_time_format_utc() {
+  this._ = new Date(Date.UTC.apply(this, arguments));
+}
+
+d3_time_format_utc.prototype = {
+  getDate: function() { return this._.getUTCDate(); },
+  getDay: function() { return this._.getUTCDay(); },
+  getFullYear: function() { return this._.getUTCFullYear(); },
+  getHours: function() { return this._.getUTCHours(); },
+  getMilliseconds: function() { return this._.getUTCMilliseconds(); },
+  getMinutes: function() { return this._.getUTCMinutes(); },
+  getMonth: function() { return this._.getUTCMonth(); },
+  getSeconds: function() { return this._.getUTCSeconds(); },
+  getTimezoneOffset: function() { return 0; },
+  valueOf: function() { return this._.getTime(); },
+  setDate: function(x) { this._.setUTCDate(x); },
+  setDay: function(x) { this._.setUTCDay(x); },
+  setFullYear: function(x) { this._.setUTCFullYear(x); },
+  setHours: function(x) { this._.setUTCHours(x); },
+  setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
+  setMinutes: function(x) { this._.setUTCMinutes(x); },
+  setMonth: function(x) { this._.setUTCMonth(x); },
+  setSeconds: function(x) { this._.setUTCSeconds(x); }
+};
+d3.time.format.iso = d3.time.format.utc("%Y-%m-%dT%H:%M:%SZ");
+function d3_time_range(floor, step, number) {
+  return function(t0, t1, dt) {
+    var time = floor(t0), times = [];
+    if (time < t0) step(time);
+    if (dt > 1) {
+      while (time < t1) {
+        var date = new Date(+time);
+        if (!(number(date) % dt)) times.push(date);
+        step(time);
+      }
+    } else {
+      while (time < t1) times.push(new Date(+time)), step(time);
+    }
+    return times;
+  };
+}
+d3.time.second = function(date) {
+  return new Date(~~(date / 1e3) * 1e3);
+};
+
+d3.time.second.utc = d3.time.second;
+d3.time.seconds = d3_time_range(d3.time.second, function(date) {
+  date.setTime(date.getTime() + 1e3);
+}, function(date) {
+  return date.getSeconds();
+});
+
+d3.time.seconds.utc = d3.time.seconds;
+d3.time.minute = function(date) {
+  return new Date(~~(date / 6e4) * 6e4);
+};
+
+d3.time.minute.utc = d3.time.minute;d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
+  return date.getMinutes();
+});
+
+d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
+  return date.getUTCMinutes();
+});
+
+function d3_time_minutesStep(date) {
+  date.setTime(date.getTime() + 6e4); // assumes no leap seconds
+}
+d3.time.hour = function(date) {
+  var offset = date.getTimezoneOffset() / 60;
+  return new Date((~~(date / 36e5 - offset) + offset) * 36e5);
+};
+
+d3.time.hour.utc = function(date) {
+  return new Date(~~(date / 36e5) * 36e5);
+};
+d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
+  return date.getHours();
+});
+
+d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) {
+  return date.getUTCHours();
+});
+
+function d3_time_hoursStep(date) {
+  date.setTime(date.getTime() + 36e5);
+}
+d3.time.day = function(date) {
+  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
+};
+
+d3.time.day.utc = function(date) {
+  return new Date(~~(date / 864e5) * 864e5);
+};
+d3.time.days = d3_time_range(d3.time.day, function(date) {
+  date.setDate(date.getDate() + 1);
+}, function(date) {
+  return date.getDate() - 1;
+});
+
+d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
+  date.setUTCDate(date.getUTCDate() + 1);
+}, function(date) {
+  return date.getUTCDate() - 1;
+});
+d3.time.week = function(date) {
+  (date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
+  return date;
+};
+
+d3.time.week.utc = function(date) {
+  (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay());
+  return date;
+};
+d3.time.weeks = d3_time_range(d3.time.week, function(date) {
+  date.setDate(date.getDate() + 7);
+}, function(date) {
+  return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5);
+});
+
+d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
+  date.setUTCDate(date.getUTCDate() + 7);
+}, function(date) {
+  return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5);
+});
+d3.time.month = function(date) {
+  return new Date(date.getFullYear(), date.getMonth(), 1);
+};
+
+d3.time.month.utc = function(date) {
+  return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));
+};
+d3.time.months = d3_time_range(d3.time.month, function(date) {
+  date.setMonth(date.getMonth() + 1);
+}, function(date) {
+  return date.getMonth();
+});
+
+d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
+  date.setUTCMonth(date.getUTCMonth() + 1);
+}, function(date) {
+  return date.getUTCMonth();
+});
+d3.time.year = function(date) {
+  return new Date(date.getFullYear(), 0, 1);
+};
+
+d3.time.year.utc = function(date) {
+  return new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
+};
+d3.time.years = d3_time_range(d3.time.year, function(date) {
+  date.setFullYear(date.getFullYear() + 1);
+}, function(date) {
+  return date.getFullYear();
+});
+
+d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) {
+  date.setUTCFullYear(date.getUTCFullYear() + 1);
+}, function(date) {
+  return date.getUTCFullYear();
+});
+// TODO nice
+function d3_time_scale(methods, format) {
+  var linear = d3.scale.linear();
+
+  function scale(x) {
+    return linear(x);
+  }
+
+  scale.invert = function(x) {
+    return d3_time_scaleDate(linear.invert(x));
+  };
+
+  scale.domain = function(x) {
+    if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
+    linear.domain(x);
+    return scale;
+  };
+
+  scale.ticks = function(m, k) {
+    var extent = d3_time_scaleExtent(scale.domain());
+    if (typeof m !== "function") {
+      var span = extent[1] - extent[0],
+          target = span / m,
+          i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
+      if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
+      m = methods[i];
+      k = m[1];
+      m = m[0];
+    }
+    return m(extent[0], extent[1], k);
+  };
+
+  scale.tickFormat = function() {
+    return format;
+  };
+
+  // TOOD expose d3_scale_linear_rebind?
+  scale.range = d3.rebind(scale, linear.range);
+  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
+  scale.interpolate = d3.rebind(scale, linear.interpolate);
+  scale.clamp = d3.rebind(scale, linear.clamp);
+
+  return scale;
+}
+
+// TODO expose d3_scaleExtent?
+function d3_time_scaleExtent(domain) {
+  var start = domain[0], stop = domain[domain.length - 1];
+  return start < stop ? [start, stop] : [stop, start];
+}
+
+function d3_time_scaleDate(t) {
+  return new Date(t);
+}
+
+function d3_time_scaleFormat(formats) {
+  return function(date) {
+    var i = formats.length - 1, f = formats[i];
+    while (!f[1](date)) f = formats[--i];
+    return f[0](date);
+  };
+}
+
+var d3_time_scaleSteps = [
+  1e3,    // 1-second
+  5e3,    // 5-second
+  15e3,   // 15-second
+  3e4,    // 30-second
+  6e4,    // 1-minute
+  3e5,    // 5-minute
+  9e5,    // 15-minute
+  18e5,   // 30-minute
+  36e5,   // 1-hour
+  108e5,  // 3-hour
+  216e5,  // 6-hour
+  432e5,  // 12-hour
+  864e5,  // 1-day
+  1728e5, // 2-day
+  6048e5, // 1-week
+  1728e6, // 1-month
+  7776e6, // 3-month
+  31536e6 // 1-year
+];
+
+var d3_time_scaleLocalMethods = [
+  [d3.time.seconds, 1],
+  [d3.time.seconds, 5],
+  [d3.time.seconds, 15],
+  [d3.time.seconds, 30],
+  [d3.time.minutes, 1],
+  [d3.time.minutes, 5],
+  [d3.time.minutes, 15],
+  [d3.time.minutes, 30],
+  [d3.time.hours, 1],
+  [d3.time.hours, 3],
+  [d3.time.hours, 6],
+  [d3.time.hours, 12],
+  [d3.time.days, 1],
+  [d3.time.days, 2],
+  [d3.time.weeks, 1],
+  [d3.time.months, 1],
+  [d3.time.months, 3],
+  [d3.time.years, 1]
+];
+
+var d3_time_scaleLocalFormats = [
+  [d3.time.format("%Y"), function(d) { return true; }],
+  [d3.time.format("%B"), function(d) { return d.getMonth(); }],
+  [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
+  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
+  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
+  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
+  [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
+];
+
+var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
+
+d3.time.scale = function() {
+  return d3_time_scale(d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
+};
+var d3_time_scaleUTCMethods = [
+  [d3.time.seconds.utc, 1],
+  [d3.time.seconds.utc, 5],
+  [d3.time.seconds.utc, 15],
+  [d3.time.seconds.utc, 30],
+  [d3.time.minutes.utc, 1],
+  [d3.time.minutes.utc, 5],
+  [d3.time.minutes.utc, 15],
+  [d3.time.minutes.utc, 30],
+  [d3.time.hours.utc, 1],
+  [d3.time.hours.utc, 3],
+  [d3.time.hours.utc, 6],
+  [d3.time.hours.utc, 12],
+  [d3.time.days.utc, 1],
+  [d3.time.days.utc, 2],
+  [d3.time.weeks.utc, 1],
+  [d3.time.months.utc, 1],
+  [d3.time.months.utc, 3],
+  [d3.time.years.utc, 1]
+];
+
+var d3_time_scaleUTCFormats = [
+  [d3.time.format.utc("%Y"), function(d) { return true; }],
+  [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
+  [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
+  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
+  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
+  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
+  [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
+];
+
+var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
+
+d3.time.scale.utc = function() {
+  return d3_time_scale(d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
+};
+})();
Index: /Dev/trunk/d3/d3.time.min.js
===================================================================
--- /Dev/trunk/d3/d3.time.min.js	(revision 76)
+++ /Dev/trunk/d3/d3.time.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){function U(a){return function(b){var c=a.length-1,d=a[c];while(!d[1](b))d=a[--c];return d[0](b)}}function T(a){return new Date(a)}function S(a){var b=a[0],c=a[a.length-1];return b<c?[b,c]:[c,b]}function R(a,b){function d(a){return c(a)}var c=d3.scale.linear();d.invert=function(a){return T(c.invert(a))},d.domain=function(a){if(!arguments.length)return c.domain().map(T);c.domain(a);return d},d.ticks=function(b,c){var e=S(d.domain());if(typeof b!="function"){var f=e[1]-e[0],g=f/b,h=d3.bisect(V,g,1,V.length-1);Math.log(g/V[h-1])<Math.log(V[h]/g)&&--h,b=a[h],c=b[1],b=b[0]}return b(e[0],e[1],c)},d.tickFormat=function(){return b},d.range=d3.rebind(d,c.range),d.rangeRound=d3.rebind(d,c.rangeRound),d.interpolate=d3.rebind(d,c.interpolate),d.clamp=d3.rebind(d,c.clamp);return d}function Q(a){a.setTime(a.getTime()+36e5)}function P(a){a.setTime(a.getTime()+6e4)}function O(a,b,c){return function(d,e,f){var g=a(d),h=[];g<d&&b(g);if(f>1)while(g<e){var i=new Date(+g);c(i)%f||h.push(i),b(g)}else while(g<e)h.push(new Date(+g)),b(g);return h}}function N(){this._=new Date(Date.UTC.apply(this,arguments))}function M(a){var b=a.getTimezoneOffset(),d=b>0?"-":"+",e=~~(Math.abs(b)/60),f=Math.abs(b)%60;return d+c(e)+c(f)}function L(a){var b=I(a);return c(~~(((a-b)/864e5+(b.getDay()+6)%7)/7))}function K(a){var b=I(a);return c(~~(((a-b)/864e5+b.getDay())/7))}function J(a){return d(1+~~((a-I(a))/864e5))}function I(b){return new a(b.getFullYear(),0,1)}function G(a,b,c){var d=H[b.substring(c,c+=2).toLowerCase()];return d==null?-1:(a.hour12pm=d,c)}function E(a,b,c){F.lastIndex=0;var d=F.exec(b.substring(c,c+2));return d?(a.setSeconds(+d[0]),c+=d[0].length):-1}function D(a,b,c){F.lastIndex=0;var d=F.exec(b.substring(c,c+2));return d?(a.setMinutes(+d[0]),c+=d[0].length):-1}function C(a,b,c){a.hour12=!0;return B(a,b,c)}function B(a,b,c){F.lastIndex=0;var d=F.exec(b.substring(c,c+2));return d?(a.setHours(+d[0]),c+=d[0].length):-1}function A(a,b,c){F.lastIndex=0;var d=F.exec(b.substring(c,c+2));return d?(a.setDate(+d[0]),c+=d[0].length):-1}function z(a,b,c){F.lastIndex=0;var d=F.exec(b.substring(c,c+2));return d?(a.setMonth(d[0]-1),c+=d[0].length):-1}function y(){return~~((new Date).getFullYear()/1e3)*1e3}function x(a,b,c){F.lastIndex=0;var d=F.exec(b.substring(c,c+2));return d?(a.setFullYear(y()+ +d[0]),c+=d[0].length):-1}function w(a,b,c){F.lastIndex=0;var d=F.exec(b.substring(c,c+4));return d?(a.setFullYear(d[0]),c+=d[0].length):-1}function v(a,c,d){return b(a,g.X.toString(),c,d)}function u(a,c,d){return b(a,g.x.toString(),c,d)}function t(a,c,d){return b(a,g.c.toString(),c,d)}function p(a,b,c){q.lastIndex=0;var d=q.exec(b.substring(c,c+12));return d?(a.setMonth(r[d[0].toLowerCase()]),c+=d[0].length):-1}function n(a,b,c){var d=o[b.substring(c,c+=3).toLowerCase()];return d==null?-1:(a.setMonth(d),c)}function k(a,b,c){l.lastIndex=0;var d=l.exec(b.substring(c,c+10));return d?c+=d[0].length:-1}function i(a,b,c){return b.substring(c,c+=3).toLowerCase()in j?c:-1}function b(a,b,c,d){var e,f,g=0,i=b.length,j=c.length;while(g<i){if(d>=j)return-1;e=b.charCodeAt(g++);if(e==37){f=h[b.charAt(g++)];if(!f||(d=f(a,c,d))<0)return-1}else if(e!=c.charCodeAt(d++))return-1}return d}d3.time={};var a=Date;d3.time.format=function(c){function e(a){var b=[],e=-1,f=0,h,i;while(++e<d)c.charCodeAt(e)==37&&(b.push(c.substring(f,e),(i=g[h=c.charAt(++e)])?i(a):h),f=e+1);b.push(c.substring(f,e));return b.join("")}var d=c.length;e.parse=function(d){var e=new a(1900,0,1),f=b(e,c,d,0);if(f!=d.length)return null;if(e.hour12){var g=e.getHours()%12;e.setHours(e.hour12pm?g+12:g)}delete e.hour12,delete e.hour12pm;return e},e.toString=function(){return c};return e};var c=d3.format("02d"),d=d3.format("03d"),e=d3.format("04d"),f=d3.format("2d"),g={a:function(a){return m[a.getDay()].substring(0,3)},A:function(a){return m[a.getDay()]},b:function(a){return s[a.getMonth()].substring(0,3)},B:function(a){return s[a.getMonth()]},c:d3.time.format("%a %b %e %H:%M:%S %Y"),d:function(a){return c(a.getDate())},e:function(a){return f(a.getDate())},H:function(a){return c(a.getHours())},I:function(a){return c(a.getHours()%12||12)},j:J,m:function(a){return c(a.getMonth()+1)},M:function(a){return c(a.getMinutes())},p:function(a){return a.getHours()>=12?"PM":"AM"},S:function(a){return c(a.getSeconds())},U:K,w:function(a){return a.getDay()},W:L,x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return c(a.getFullYear()%100)},Y:function(a){return e(a.getFullYear()%1e4)},Z:M,"%":function(a){return"%"}},h={a:i,A:k,b:n,B:p,c:t,d:A,e:A,H:B,I:C,m:z,M:D,p:G,S:E,x:u,X:v,y:x,Y:w},j={sun:3,mon:3,tue:3,wed:3,thu:3,fri:3,sat:3},l=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig,m=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],o={jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11},q=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,r={january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11},s=["January","February","March","April","May","June","July","August","September","October","November","December"],F=/\s*\d+/,H={am:0,pm:1};d3.time.format.utc=function(b){function d(a){var b=new N;b._=a;return c(b)}var c=d3.time.format(b);d.parse=function(b){try{a=N;var d=c.parse(b);return d&&d._}finally{a=Date}},d.toString=c.toString;return d},N.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.getTime()},setDate:function(a){this._.setUTCDate(a)},setDay:function(a){this._.setUTCDay(a)},setFullYear:function(a){this._.setUTCFullYear(a)},setHours:function(a){this._.setUTCHours(a)},setMilliseconds:function(a){this._.setUTCMilliseconds(a)},setMinutes:function(a){this._.setUTCMinutes(a)},setMonth:function(a){this._.setUTCMonth(a)},setSeconds:function(a){this._.setUTCSeconds(a)}},d3.time.format.iso=d3.time.format.utc("%Y-%m-%dT%H:%M:%SZ"),d3.time.second=function(a){return new Date(~~(a/1e3)*1e3)},d3.time.second.utc=d3.time.second,d3.time.seconds=O(d3.time.second,function(a){a.setTime(a.getTime()+1e3)},function(a){return a.getSeconds()}),d3.time.seconds.utc=d3.time.seconds,d3.time.minute=function(a){return new Date(~~(a/6e4)*6e4)},d3.time.minute.utc=d3.time.minute,d3.time.minutes=O(d3.time.minute,P,function(a){return a.getMinutes()}),d3.time.minutes.utc=O(d3.time.minute,P,function(a){return a.getUTCMinutes()}),d3.time.hour=function(a){var b=a.getTimezoneOffset()/60;return new Date((~~(a/36e5-b)+b)*36e5)},d3.time.hour.utc=function(a){return new Date(~~(a/36e5)*36e5)},d3.time.hours=O(d3.time.hour,Q,function(a){return a.getHours()}),d3.time.hours.utc=O(d3.time.hour.utc,Q,function(a){return a.getUTCHours()}),d3.time.day=function(a){return new Date(a.getFullYear(),a.getMonth(),a.getDate())},d3.time.day.utc=function(a){return new Date(~~(a/864e5)*864e5)},d3.time.days=O(d3.time.day,function(a){a.setDate(a.getDate()+1)},function(a){return a.getDate()-1}),d3.time.days.utc=O(d3.time.day.utc,function(a){a.setUTCDate(a.getUTCDate()+1)},function(a){return a.getUTCDate()-1}),d3.time.week=function(a){(a=d3.time.day(a)).setDate(a.getDate()-a.getDay());return a},d3.time.week.utc=function(a){(a=d3.time.day.utc(a)).setUTCDate(a.getUTCDate()-a.getUTCDay());return a},d3.time.weeks=O(d3.time.week,function(a){a.setDate(a.getDate()+7)},function(a){return~~((a-new Date(a.getFullYear(),0,1))/6048e5)}),d3.time.weeks.utc=O(d3.time.week.utc,function(a){a.setUTCDate(a.getUTCDate()+7)},function(a){return~~((a-Date.UTC(a.getUTCFullYear(),0,1))/6048e5)}),d3.time.month=function(a){return new Date(a.getFullYear(),a.getMonth(),1)},d3.time.month.utc=function(a){return new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),1))},d3.time.months=O(d3.time.month,function(a){a.setMonth(a.getMonth()+1)},function(a){return a.getMonth()}),d3.time.months.utc=O(d3.time.month.utc,function(a){a.setUTCMonth(a.getUTCMonth()+1)},function(a){return a.getUTCMonth()}),d3.time.year=function(a){return new Date(a.getFullYear(),0,1)},d3.time.year.utc=function(a){return new Date(Date.UTC(a.getUTCFullYear(),0,1))},d3.time.years=O(d3.time.year,function(a){a.setFullYear(a.getFullYear()+1)},function(a){return a.getFullYear()}),d3.time.years.utc=O(d3.time.year.utc,function(a){a.setUTCFullYear(a.getUTCFullYear()+1)},function(a){return a.getUTCFullYear()});var V=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,1728e6,7776e6,31536e6],W=[[d3.time.seconds,1],[d3.time.seconds,5],[d3.time.seconds,15],[d3.time.seconds,30],[d3.time.minutes,1],[d3.time.minutes,5],[d3.time.minutes,15],[d3.time.minutes,30],[d3.time.hours,1],[d3.time.hours,3],[d3.time.hours,6],[d3.time.hours,12],[d3.time.days,1],[d3.time.days,2],[d3.time.weeks,1],[d3.time.months,1],[d3.time.months,3],[d3.time.years,1]],X=[[d3.time.format("%Y"),function(a){return!0}],[d3.time.format("%B"),function(a){return a.getMonth()}],[d3.time.format("%b %d"),function(a){return a.getDate()!=1}],[d3.time.format("%a %d"),function(a){return a.getDay()&&a.getDate()!=1}],[d3.time.format("%I %p"),function(a){return a.getHours()}],[d3.time.format("%I:%M"),function(a){return a.getMinutes()}],[d3.time.format(":%S"),function(a){return a.getSeconds()||a.getMilliseconds()}]],Y=U(X);d3.time.scale=function(){return R(W,Y)};var Z=[[d3.time.seconds.utc,1],[d3.time.seconds.utc,5],[d3.time.seconds.utc,15],[d3.time.seconds.utc,30],[d3.time.minutes.utc,1],[d3.time.minutes.utc,5],[d3.time.minutes.utc,15],[d3.time.minutes.utc,30],[d3.time.hours.utc,1],[d3.time.hours.utc,3],[d3.time.hours.utc,6],[d3.time.hours.utc,12],[d3.time.days.utc,1],[d3.time.days.utc,2],[d3.time.weeks.utc,1],[d3.time.months.utc,1],[d3.time.months.utc,3],[d3.time.years.utc,1]],$=[[d3.time.format.utc("%Y"),function(a){return!0}],[d3.time.format.utc("%B"),function(a){return a.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(a){return a.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(a){return a.getUTCDay()&&a.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(a){return a.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(a){return a.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(a){return a.getUTCSeconds()||a.getUTCMilliseconds()}]],_=U($);d3.time.scale.utc=function(){return R(Z,_)}})()
Index: /Dev/trunk/d3/examples/albers/albers.html
===================================================================
--- /Dev/trunk/d3/examples/albers/albers.html	(revision 76)
+++ /Dev/trunk/d3/examples/albers/albers.html	(revision 76)
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Albers Projection</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <script type="text/javascript" src="../../lib/jquery/jquery.min.js"></script>
+    <script type="text/javascript" src="../../lib/jquery-ui/jquery-ui.min.js"></script>
+    <style type="text/css">
+
+@import url("../../lib/jquery-ui/jquery-ui.css");
+
+body, .ui-widget {
+  font: 14px Helvetica Neue;
+}
+
+svg {
+  width: 960px;
+  height: 500px;
+  border: solid 1px #ccc;
+  background: #eee;
+}
+
+#states path {
+  fill: #ccc;
+  stroke: #fff;
+}
+
+#states circle {
+  fill: #fcc;
+  stroke: #000;
+}
+
+div {
+  width: 960px;
+}
+
+    </style>
+  </head>
+  <body>
+    <h3>Albers Projection</h3>
+    <script type="text/javascript">
+
+// Our projection.
+var xy = d3.geo.albers(),
+    path = d3.geo.path().projection(xy);
+
+d3.select("body")
+  .append("svg:svg")
+  .append("svg:g")
+    .attr("id", "states");
+
+d3.json("../data/us-states.json", function(collection) {
+  d3.select("#states")
+    .selectAll("path")
+      .data(collection.features)
+    .enter().append("svg:path")
+      .attr("d", path);
+  d3.select("#states")
+    .append("svg:circle")
+      .attr("r", 10)
+      .attr("transform", "translate(" + xy(xy.origin()).join(",") + ")")
+});
+
+function refresh() {
+  d3.selectAll("#states path")
+      .attr("d", path);
+  d3.select("#states circle")
+      .attr("transform", "translate(" + xy(xy.origin()).join(",") + ")")
+  d3.select("#parallels span")
+      .text(xy.parallels());
+  d3.select("#lon span")
+      .text(xy.origin()[0]);
+  d3.select("#lat span")
+      .text(xy.origin()[1]);
+  d3.select("#scale span")
+      .text(xy.scale());
+  d3.select("#translate-x span")
+      .text(xy.translate()[0]);
+  d3.select("#translate-y span")
+      .text(xy.translate()[1]);
+}
+
+    </script><p>
+    <div id="lon">origin.longitude: <span>-98</span></div>
+    <div id="lat">origin.latitude: <span>38</span></div><p>
+    <div id="parallels">parallels: <span>29.5,45.5</span></div><p>
+    <div id="scale">scale: <span>1000</span></div><p>
+    <div id="translate-x">translate.x: <span>480</span></div>
+    <div id="translate-y">translate.y: <span>250</span></div>
+    <script type="text/javascript">
+
+$("#parallels").slider({
+  range: true,
+  min: -90,
+  max: 90,
+  step: 1e-1,
+  values: [29.5, 45.5],
+  slide: function(event, ui) {
+    xy.parallels(ui.values);
+    refresh();
+  }
+});
+
+$("#lon").slider({
+  min: -180,
+  max: 180,
+  step: 1e-1,
+  value: -98,
+  slide: function(event, ui) {
+    var origin = xy.origin();
+    origin[0] = ui.value;
+    xy.origin(origin);
+    refresh();
+  }
+});
+
+$("#lat").slider({
+  min: -90,
+  max: 90,
+  step: 1e-1,
+  value: 38,
+  slide: function(event, ui) {
+    var origin = xy.origin();
+    origin[1] = ui.value;
+    xy.origin(origin);
+    refresh();
+  }
+});
+
+$("#scale").slider({
+  min: 0,
+  max: 3000,
+  value: 1000,
+  slide: function(event, ui) {
+    xy.scale(ui.value);
+    refresh();
+  }
+});
+
+$("#translate-x").slider({
+  min: -2000,
+  max: 2000,
+  value: 480,
+  slide: function(event, ui) {
+    var translate = xy.translate();
+    translate[0] = ui.value;
+    xy.translate(translate);
+    refresh();
+  }
+});
+
+$("#translate-y").slider({
+  min: -2000,
+  max: 2000,
+  value: 250,
+  slide: function(event, ui) {
+    var translate = xy.translate();
+    translate[1] = ui.value;
+    xy.translate(translate);
+    refresh();
+  }
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/area/area-radial.html
===================================================================
--- /Dev/trunk/d3/examples/area/area-radial.html	(revision 76)
+++ /Dev/trunk/d3/examples/area/area-radial.html	(revision 76)
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Area Chart (Radial)</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+.area {
+  fill: lightsteelblue;
+}
+
+.line {
+  fill: none;
+  stroke: steelblue;
+  stroke-width: 1.5px;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var r = 960 / 2,
+    data = d3.range(361).map(function(i) { return .8 + Math.sin(i / 20 * Math.PI) / 6; });
+
+var svg = d3.select("body").append("svg:svg")
+    .data([data])
+    .attr("width", r * 2)
+    .attr("height", r * 2)
+  .append("svg:g")
+    .attr("transform", "translate(" + r + "," + r + ")");
+
+svg.append("svg:path")
+    .attr("class", "area")
+    .attr("d", d3.svg.area.radial()
+    .innerRadius(r / 2)
+    .outerRadius(function(d) { return r * d; })
+    .angle(function(d, i) { return i / 180 * Math.PI; }));
+
+svg.append("svg:path")
+    .attr("class", "line")
+    .attr("d", d3.svg.line.radial()
+    .radius(function(d) { return r * d; })
+    .angle(function(d, i) { return i / 180 * Math.PI; }));
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/area/area.html
===================================================================
--- /Dev/trunk/d3/examples/area/area.html	(revision 76)
+++ /Dev/trunk/d3/examples/area/area.html	(revision 76)
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Area Chart</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+.rule line {
+  stroke: #eee;
+  shape-rendering: crispEdges;
+}
+
+.rule line.axis {
+  stroke: #000;
+}
+
+.area {
+  fill: lightsteelblue;
+}
+
+.line, circle.area {
+  fill: none;
+  stroke: steelblue;
+  stroke-width: 1.5px;
+}
+
+circle.area {
+  fill: #fff;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var data = d3.range(20).map(function(i) {
+  return {x: i / 19, y: (Math.sin(i / 3) + 1) / 2};
+});
+
+var w = 450,
+    h = 275,
+    p = 20,
+    x = d3.scale.linear().domain([0, 1]).range([0, w]),
+    y = d3.scale.linear().domain([0, 1]).range([h, 0]);
+
+var vis = d3.select("body")
+  .append("svg:svg")
+    .data([data])
+    .attr("width", w + p * 2)
+    .attr("height", h + p * 2)
+  .append("svg:g")
+    .attr("transform", "translate(" + p + "," + p + ")");
+
+var rules = vis.selectAll("g.rule")
+    .data(x.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "rule");
+
+rules.append("svg:line")
+    .attr("x1", x)
+    .attr("x2", x)
+    .attr("y1", 0)
+    .attr("y2", h - 1);
+
+rules.append("svg:line")
+    .attr("class", function(d) { return d ? null : "axis"; })
+    .attr("y1", y)
+    .attr("y2", y)
+    .attr("x1", 0)
+    .attr("x2", w + 1);
+
+rules.append("svg:text")
+    .attr("x", x)
+    .attr("y", h + 3)
+    .attr("dy", ".71em")
+    .attr("text-anchor", "middle")
+    .text(x.tickFormat(10));
+
+rules.append("svg:text")
+    .attr("y", y)
+    .attr("x", -3)
+    .attr("dy", ".35em")
+    .attr("text-anchor", "end")
+    .text(y.tickFormat(10));
+
+vis.append("svg:path")
+    .attr("class", "area")
+    .attr("d", d3.svg.area()
+    .x(function(d) { return x(d.x); })
+    .y0(h - 1)
+    .y1(function(d) { return y(d.y); }));
+
+vis.append("svg:path")
+    .attr("class", "line")
+    .attr("d", d3.svg.line()
+    .x(function(d) { return x(d.x); })
+    .y(function(d) { return y(d.y); }));
+
+vis.selectAll("circle.area")
+    .data(data)
+  .enter().append("svg:circle")
+    .attr("class", "area")
+    .attr("cx", function(d) { return x(d.x); })
+    .attr("cy", function(d) { return y(d.y); })
+    .attr("r", 3.5);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/azimuthal/azimuthal.css
===================================================================
--- /Dev/trunk/d3/examples/azimuthal/azimuthal.css	(revision 76)
+++ /Dev/trunk/d3/examples/azimuthal/azimuthal.css	(revision 76)
@@ -0,0 +1,21 @@
+@import url("../../lib/jquery-ui/jquery-ui.css");
+
+body, .ui-widget {
+  font: 14px Helvetica Neue;
+}
+
+svg {
+  width: 960px;
+  height: 500px;
+  border: solid 1px #ccc;
+  background: #eee;
+}
+
+path {
+  fill: #ccc;
+  stroke: #fff;
+}
+
+div {
+  width: 960px;
+}
Index: /Dev/trunk/d3/examples/azimuthal/azimuthal.html
===================================================================
--- /Dev/trunk/d3/examples/azimuthal/azimuthal.html	(revision 76)
+++ /Dev/trunk/d3/examples/azimuthal/azimuthal.html	(revision 76)
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Polar Stereographic Projection</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <script type="text/javascript" src="../../lib/jquery/jquery.min.js"></script>
+    <script type="text/javascript" src="../../lib/jquery-ui/jquery-ui.min.js"></script>
+    <link type="text/css" rel="stylesheet" href="azimuthal.css"/>
+  </head>
+  <body>
+    <h3>Azimuthal Projection</h3>
+    <script type="text/javascript" src="azimuthal.js"></script><p>
+    <div id="lon">origin.longitude: <span>0</span></div>
+    <div id="lat">origin.latitude: <span>0</span></div><p>
+    <div id="scale">scale: <span>240</span></div><p>
+    <div id="translate-x">translate.x: <span>480</span></div>
+    <div id="translate-y">translate.y: <span>250</span></div>
+    <script type="text/javascript">
+
+$("#lon").slider({
+  min: -180,
+  max: 180,
+  step: 1e-1,
+  value: 0,
+  slide: function(event, ui) {
+    var origin = xy.origin();
+    origin[0] = ui.value;
+    xy.origin(origin);
+    refresh();
+  }
+});
+
+$("#lat").slider({
+  min: -90,
+  max: 90,
+  step: 1e-1,
+  value: 0,
+  slide: function(event, ui) {
+    var origin = xy.origin();
+    origin[1] = ui.value;
+    xy.origin(origin);
+    refresh();
+  }
+});
+
+$("#scale").slider({
+  min: 0,
+  max: 3000,
+  value: 240,
+  slide: function(event, ui) {
+    xy.scale(ui.value);
+    refresh();
+  }
+});
+
+$("#translate-x").slider({
+  min: -2000,
+  max: 2000,
+  value: 480,
+  slide: function(event, ui) {
+    var translate = xy.translate();
+    translate[0] = ui.value;
+    xy.translate(translate);
+    refresh();
+  }
+});
+
+$("#translate-y").slider({
+  min: -2000,
+  max: 2000,
+  value: 250,
+  slide: function(event, ui) {
+    var translate = xy.translate();
+    translate[1] = ui.value;
+    xy.translate(translate);
+    refresh();
+  }
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/azimuthal/azimuthal.js
===================================================================
--- /Dev/trunk/d3/examples/azimuthal/azimuthal.js	(revision 76)
+++ /Dev/trunk/d3/examples/azimuthal/azimuthal.js	(revision 76)
@@ -0,0 +1,27 @@
+var xy = d3.geo.azimuthal().scale(240).mode("stereographic"),
+    path = d3.geo.path().projection(xy),
+    svg = d3.select("body").append("svg:svg");
+
+d3.json("../data/world-countries.json", function(collection) {
+  svg.selectAll("path")
+      .data(collection.features)
+    .enter().append("svg:path")
+      .attr("d", path)
+    .append("svg:title")
+      .text(function(d) { return d.properties.name; });
+});
+
+function refresh() {
+  svg.selectAll("path")
+      .attr("d", path);
+  d3.select("#lon span")
+      .text(xy.origin()[0]);
+  d3.select("#lat span")
+      .text(xy.origin()[1]);
+  d3.select("#scale span")
+      .text(xy.scale());
+  d3.select("#translate-x span")
+      .text(xy.translate()[0]);
+  d3.select("#translate-y span")
+      .text(xy.translate()[1]);
+}
Index: /Dev/trunk/d3/examples/bar/bar.html
===================================================================
--- /Dev/trunk/d3/examples/bar/bar.html	(revision 76)
+++ /Dev/trunk/d3/examples/bar/bar.html	(revision 76)
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Bar Chart</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+svg {
+  shape-rendering: crispEdges;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var data = d3.range(10).map(Math.random);
+
+var w = 430,
+    h = 230,
+    x = d3.scale.linear().domain([0, 1]).range([0, w]),
+    y = d3.scale.ordinal().domain(d3.range(data.length)).rangeBands([0, h], .2);
+
+var vis = d3.select("body")
+  .append("svg:svg")
+    .attr("width", w + 40)
+    .attr("height", h + 20)
+  .append("svg:g")
+    .attr("transform", "translate(20,0)");
+
+var bars = vis.selectAll("g.bar")
+    .data(data)
+  .enter().append("svg:g")
+    .attr("class", "bar")
+    .attr("transform", function(d, i) { return "translate(0," + y(i) + ")"; });
+
+bars.append("svg:rect")
+    .attr("fill", "steelblue")
+    .attr("width", x)
+    .attr("height", y.rangeBand());
+
+bars.append("svg:text")
+    .attr("x", x)
+    .attr("y", y.rangeBand() / 2)
+    .attr("dx", -6)
+    .attr("dy", ".35em")
+    .attr("fill", "white")
+    .attr("text-anchor", "end")
+    .text(x.tickFormat(100));
+
+bars.append("svg:text")
+    .attr("x", 0)
+    .attr("y", y.rangeBand() / 2)
+    .attr("dx", -6)
+    .attr("dy", ".35em")
+    .attr("text-anchor", "end")
+    .text(function(d, i) { return String.fromCharCode(65 + i); });
+
+var rules = vis.selectAll("g.rule")
+    .data(x.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "rule")
+    .attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
+
+rules.append("svg:line")
+    .attr("y1", h)
+    .attr("y2", h + 6)
+    .attr("stroke", "black");
+
+rules.append("svg:line")
+    .attr("y1", 0)
+    .attr("y2", h)
+    .attr("stroke", "white")
+    .attr("stroke-opacity", .3);
+
+rules.append("svg:text")
+    .attr("y", h + 9)
+    .attr("dy", ".71em")
+    .attr("text-anchor", "middle")
+    .text(x.tickFormat(10));
+
+vis.append("svg:line")
+    .attr("y1", 0)
+    .attr("y2", h)
+    .attr("stroke", "black");
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/box/box.css
===================================================================
--- /Dev/trunk/d3/examples/box/box.css	(revision 76)
+++ /Dev/trunk/d3/examples/box/box.css	(revision 76)
@@ -0,0 +1,4 @@
+.box { font: 10px sans-serif; }
+.box line, .box rect, .box circle { stroke: #000; stroke-width: 1.5px; fill: #fff; }
+.box .center { stroke-dasharray: 3 3; }
+.box .outlier { stroke: #ccc; fill: none; }
Index: /Dev/trunk/d3/examples/box/box.html
===================================================================
--- /Dev/trunk/d3/examples/box/box.html	(revision 76)
+++ /Dev/trunk/d3/examples/box/box.html	(revision 76)
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Box Plot Charts</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.chart.js"></script>
+    <script type="text/javascript" src="../../d3.csv.js"></script>
+    <link type="text/css" rel="stylesheet" href="../button.css"/>
+    <link type="text/css" rel="stylesheet" href="box.css"/>
+  </head>
+  <body>
+    <div id="chart">
+      <button class="first last" onclick="transition()">
+        Update
+      </button><p>
+    </div>
+    <script type="text/javascript" src="box.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/box/box.js
===================================================================
--- /Dev/trunk/d3/examples/box/box.js	(revision 76)
+++ /Dev/trunk/d3/examples/box/box.js	(revision 76)
@@ -0,0 +1,68 @@
+var w = 120,
+    h = 500,
+    m = [10, 50, 20, 50], // top right bottom left
+    min = Infinity,
+    max = -Infinity;
+
+var chart = d3.chart.box()
+    .whiskers(iqr(1.5))
+    .width(w - m[1] - m[3])
+    .height(h - m[0] - m[2]);
+
+d3.csv("../data/morley.csv", function(csv) {
+  var data = [];
+
+  csv.forEach(function(x) {
+    var e = ~~x.Expt - 1,
+        r = ~~x.Run - 1,
+        s = ~~x.Speed,
+        d = data[e];
+    if (!d) d = data[e] = [s];
+    else d.push(s);
+    if (s > max) max = s;
+    if (s < min) min = s;
+  });
+
+  chart.domain([min, max]);
+
+  var vis = d3.select("#chart").selectAll("svg")
+      .data(data)
+    .enter().append("svg:svg")
+      .attr("class", "box")
+      .attr("width", w)
+      .attr("height", h)
+    .append("svg:g")
+      .attr("transform", "translate(" + m[3] + "," + m[0] + ")")
+      .call(chart);
+
+  chart.duration(1000);
+  window.transition = function() {
+    vis.map(randomize).call(chart);
+  };
+});
+
+function randomize(d) {
+  if (!d.randomizer) d.randomizer = randomizer(d);
+  return d.map(d.randomizer);
+}
+
+function randomizer(d) {
+  var k = d3.max(d) * .02;
+  return function(d) {
+    return Math.max(min, Math.min(max, d + k * (Math.random() - .5)));
+  };
+}
+
+// Returns a function to compute the interquartile range.
+function iqr(k) {
+  return function(d, i) {
+    var q1 = d.quartiles[0],
+        q3 = d.quartiles[2],
+        iqr = (q3 - q1) * k,
+        i = -1,
+        j = d.length;
+    while (d[++i] < q1 - iqr);
+    while (d[--j] > q3 + iqr);
+    return [i, j];
+  };
+}
Index: /Dev/trunk/d3/examples/bubble/bubble.css
===================================================================
--- /Dev/trunk/d3/examples/bubble/bubble.css	(revision 76)
+++ /Dev/trunk/d3/examples/bubble/bubble.css	(revision 76)
@@ -0,0 +1,8 @@
+circle {
+  stroke: #fff;
+  stroke-width: 1.5px;
+}
+
+text {
+  font: 10px sans-serif;
+}
Index: /Dev/trunk/d3/examples/bubble/bubble.html
===================================================================
--- /Dev/trunk/d3/examples/bubble/bubble.html	(revision 76)
+++ /Dev/trunk/d3/examples/bubble/bubble.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Bubble Chart</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="bubble.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="bubble.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/bubble/bubble.js
===================================================================
--- /Dev/trunk/d3/examples/bubble/bubble.js	(revision 76)
+++ /Dev/trunk/d3/examples/bubble/bubble.js	(revision 76)
@@ -0,0 +1,46 @@
+var r = 960,
+    format = d3.format(",d"),
+    fill = d3.scale.category20c();
+
+var bubble = d3.layout.pack()
+    .sort(null)
+    .size([r, r]);
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", r)
+    .attr("height", r)
+    .attr("class", "bubble");
+
+d3.json("../data/flare.json", function(json) {
+  var node = vis.selectAll("g.node")
+      .data(bubble.nodes(classes(json))
+      .filter(function(d) { return !d.children; }))
+    .enter().append("svg:g")
+      .attr("class", "node")
+      .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
+
+  node.append("svg:title")
+      .text(function(d) { return d.className + ": " + format(d.value); });
+
+  node.append("svg:circle")
+      .attr("r", function(d) { return d.r; })
+      .style("fill", function(d) { return fill(d.packageName); });
+
+  node.append("svg:text")
+      .attr("text-anchor", "middle")
+      .attr("dy", ".3em")
+      .text(function(d) { return d.className.substring(0, d.r / 3); });
+});
+
+// Returns a flattened hierarchy containing all leaf nodes under the root.
+function classes(root) {
+  var classes = [];
+
+  function recurse(name, node) {
+    if (node.children) node.children.forEach(function(child) { recurse(node.name, child); });
+    else classes.push({packageName: name, className: node.name, value: node.size});
+  }
+
+  recurse(null, root);
+  return {children: classes};
+}
Index: /Dev/trunk/d3/examples/bullet/bullet.css
===================================================================
--- /Dev/trunk/d3/examples/bullet/bullet.css	(revision 76)
+++ /Dev/trunk/d3/examples/bullet/bullet.css	(revision 76)
@@ -0,0 +1,10 @@
+.bullet { font: 10px sans-serif; }
+.bullet .marker { stroke: #000; stroke-width: 2px; }
+.bullet .tick line { stroke: #666; stroke-width: .5px; }
+.bullet .range.s0 { fill: #eee; }
+.bullet .range.s1 { fill: #ddd; }
+.bullet .range.s2 { fill: #ccc; }
+.bullet .measure.s0 { fill: lightsteelblue; }
+.bullet .measure.s1 { fill: steelblue; }
+.bullet .title { font-size: 14px; font-weight: bold; }
+.bullet .subtitle { fill: #999; }
Index: /Dev/trunk/d3/examples/bullet/bullet.html
===================================================================
--- /Dev/trunk/d3/examples/bullet/bullet.html	(revision 76)
+++ /Dev/trunk/d3/examples/bullet/bullet.html	(revision 76)
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Bullet Charts</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.chart.js"></script>
+    <link type="text/css" rel="stylesheet" href="../button.css"/>
+    <link type="text/css" rel="stylesheet" href="bullet.css"/>
+  </head>
+  <body>
+    <div id="chart">
+      <button class="first last" onclick="transition()">
+        Update
+      </button><p>
+    </div>
+    <script type="text/javascript" src="bullet.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/bullet/bullet.js
===================================================================
--- /Dev/trunk/d3/examples/bullet/bullet.js	(revision 76)
+++ /Dev/trunk/d3/examples/bullet/bullet.js	(revision 76)
@@ -0,0 +1,53 @@
+var w = 960,
+    h = 50,
+    m = [5, 40, 20, 120]; // top right bottom left
+
+var chart = d3.chart.bullet()
+    .width(w - m[1] - m[3])
+    .height(h - m[0] - m[2]);
+
+d3.json("bullets.json", function(data) {
+
+  var vis = d3.select("#chart").selectAll("svg")
+      .data(data)
+    .enter().append("svg:svg")
+      .attr("class", "bullet")
+      .attr("width", w)
+      .attr("height", h)
+    .append("svg:g")
+      .attr("transform", "translate(" + m[3] + "," + m[0] + ")")
+      .call(chart);
+
+  var title = vis.append("svg:g")
+      .attr("text-anchor", "end")
+      .attr("transform", "translate(-6," + (h - m[0] - m[2]) / 2 + ")");
+
+  title.append("svg:text")
+      .attr("class", "title")
+      .text(function(d) { return d.title; });
+
+  title.append("svg:text")
+      .attr("class", "subtitle")
+      .attr("dy", "1em")
+      .text(function(d) { return d.subtitle; });
+
+  chart.duration(1000);
+  window.transition = function() {
+    vis.map(randomize).call(chart);
+  };
+});
+
+function randomize(d) {
+  if (!d.randomizer) d.randomizer = randomizer(d);
+  d.ranges = d.ranges.map(d.randomizer);
+  d.markers = d.markers.map(d.randomizer);
+  d.measures = d.measures.map(d.randomizer);
+  return d;
+}
+
+function randomizer(d) {
+  var k = d3.max(d.ranges) * .2;
+  return function(d) {
+    return Math.max(0, d + k * (Math.random() - .5));
+  };
+}
Index: /Dev/trunk/d3/examples/bullet/bullets.json
===================================================================
--- /Dev/trunk/d3/examples/bullet/bullets.json	(revision 76)
+++ /Dev/trunk/d3/examples/bullet/bullets.json	(revision 76)
@@ -0,0 +1,7 @@
+[
+  {"title":"Revenue","subtitle":"US$, in thousands","ranges":[150,225,300],"measures":[220,270],"markers":[250]},
+  {"title":"Profit","subtitle":"%","ranges":[20,25,30],"measures":[21,23],"markers":[26]},
+  {"title":"Order Size","subtitle":"US$, average","ranges":[350,500,600],"measures":[100,320],"markers":[550]},
+  {"title":"New Customers","subtitle":"count","ranges":[1400,2000,2500],"measures":[1000,1650],"markers":[2100]},
+  {"title":"Satisfaction","subtitle":"out of 5","ranges":[3.5,4.25,5],"measures":[3.2,4.7],"markers":[4.4]}
+]
Index: /Dev/trunk/d3/examples/bundle/bundle-radial.css
===================================================================
--- /Dev/trunk/d3/examples/bundle/bundle-radial.css	(revision 76)
+++ /Dev/trunk/d3/examples/bundle/bundle-radial.css	(revision 76)
@@ -0,0 +1,9 @@
+.node {
+  font: 10px sans-serif;
+}
+
+.link {
+  stroke: steelblue;
+  stroke-opacity: .4;
+  fill: none;
+}
Index: /Dev/trunk/d3/examples/bundle/bundle-radial.html
===================================================================
--- /Dev/trunk/d3/examples/bundle/bundle-radial.html	(revision 76)
+++ /Dev/trunk/d3/examples/bundle/bundle-radial.html	(revision 76)
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Hierarchical Edge Bundling (Radial Tree)</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <script type="text/javascript" src="packages.js"></script>
+    <link type="text/css" rel="stylesheet" href="bundle-radial.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="bundle-radial.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/bundle/bundle-radial.js
===================================================================
--- /Dev/trunk/d3/examples/bundle/bundle-radial.js	(revision 76)
+++ /Dev/trunk/d3/examples/bundle/bundle-radial.js	(revision 76)
@@ -0,0 +1,50 @@
+var r = 960 / 2,
+    splines = [];
+
+var cluster = d3.layout.cluster()
+    .size([360, r - 120])
+    .sort(null)
+    .value(function(d) { return d.size; });
+
+var bundle = d3.layout.bundle();
+
+var line = d3.svg.line.radial()
+    .interpolate("bundle")
+    .tension(.85)
+    .radius(function(d) { return d.y; })
+    .angle(function(d) { return d.x / 180 * Math.PI; });
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", r * 2)
+    .attr("height", r * 2)
+  .append("svg:g")
+    .attr("transform", "translate(" + r + "," + r + ")");
+
+d3.json("../data/flare-imports.json", function(classes) {
+  var nodes = cluster.nodes(packages.root(classes)),
+      links = packages.imports(nodes);
+
+  vis.selectAll("path.link")
+      .data(splines = bundle(links))
+    .enter().append("svg:path")
+      .attr("class", "link")
+      .attr("d", line);
+
+  vis.selectAll("g.node")
+      .data(nodes.filter(function(n) { return !n.children; }))
+    .enter().append("svg:g")
+      .attr("class", "node")
+      .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; })
+    .append("svg:text")
+      .attr("dx", function(d) { return d.x < 180 ? 8 : -8; })
+      .attr("dy", ".31em")
+      .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
+      .attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; })
+      .text(function(d) { return d.key; });
+});
+
+d3.select(window).on("mousemove", function() {
+  vis.selectAll("path.link")
+      .data(splines)
+      .attr("d", line.tension(Math.min(1, d3.event.clientX / 960)));
+});
Index: /Dev/trunk/d3/examples/bundle/bundle-treemap.css
===================================================================
--- /Dev/trunk/d3/examples/bundle/bundle-treemap.css	(revision 76)
+++ /Dev/trunk/d3/examples/bundle/bundle-treemap.css	(revision 76)
@@ -0,0 +1,14 @@
+.cell {
+  border: solid 1px white;
+  font: 10px sans-serif;
+  line-height: 12px;
+  overflow: hidden;
+  position: absolute;
+  text-indent: 2px;
+}
+
+.link {
+  stroke: #000;
+  stroke-opacity: .5;
+  fill: none;
+}
Index: /Dev/trunk/d3/examples/bundle/bundle-treemap.html
===================================================================
--- /Dev/trunk/d3/examples/bundle/bundle-treemap.html	(revision 76)
+++ /Dev/trunk/d3/examples/bundle/bundle-treemap.html	(revision 76)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Hierarchical Edge Bundling (Treemap)</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <script type="text/javascript" src="../../lib/colorbrewer/colorbrewer.js"></script>
+    <script type="text/javascript" src="packages.js"></script>
+    <link type="text/css" rel="stylesheet" href="bundle-treemap.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="bundle-treemap.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/bundle/bundle-treemap.js
===================================================================
--- /Dev/trunk/d3/examples/bundle/bundle-treemap.js	(revision 76)
+++ /Dev/trunk/d3/examples/bundle/bundle-treemap.js	(revision 76)
@@ -0,0 +1,53 @@
+var w = 960,
+    h = 500,
+    fill = d3.scale.ordinal().range(colorbrewer.Greys[9].slice(1, 4)),
+    stroke = d3.scale.linear().domain([0, 1e4]).range(["brown", "steelblue"]);
+
+var treemap = d3.layout.treemap()
+    .size([w, h])
+    .value(function(d) { return d.size; });
+
+var bundle = d3.layout.bundle();
+
+var div = d3.select("#chart").append("div")
+    .style("position", "relative")
+    .style("width", w + "px")
+    .style("height", h + "px");
+
+var line = d3.svg.line()
+    .interpolate("bundle")
+    .tension(.85)
+    .x(function(d) { return d.x + d.dx / 2; })
+    .y(function(d) { return d.y + d.dy / 2; });
+
+d3.json("../data/flare-imports.json", function(classes) {
+  var nodes = treemap.nodes(packages.root(classes)),
+      links = packages.imports(nodes);
+
+  div.selectAll("div")
+      .data(nodes)
+    .enter().append("div")
+      .attr("class", "cell")
+      .style("background", function(d) { return d.children ? fill(d.key) : null; })
+      .call(cell)
+      .text(function(d) { return d.children ? null : d.key; });
+
+  div.append("svg:svg")
+      .attr("width", w)
+      .attr("height", h)
+      .style("position", "absolute")
+    .selectAll("path.link")
+      .data(bundle(links))
+    .enter().append("svg:path")
+      .style("stroke", function(d) { return stroke(d[0].value); })
+      .attr("class", "link")
+      .attr("d", line);
+});
+
+function cell() {
+  this
+      .style("left", function(d) { return d.x + "px"; })
+      .style("top", function(d) { return d.y + "px"; })
+      .style("width", function(d) { return d.dx - 1 + "px"; })
+      .style("height", function(d) { return d.dy - 1 + "px"; });
+}
Index: /Dev/trunk/d3/examples/bundle/packages.js
===================================================================
--- /Dev/trunk/d3/examples/bundle/packages.js	(revision 76)
+++ /Dev/trunk/d3/examples/bundle/packages.js	(revision 76)
@@ -0,0 +1,49 @@
+(function() {
+  packages = {
+
+    // Lazily construct the package hierarchy from class names.
+    root: function(classes) {
+      var map = {};
+
+      function find(name, data) {
+        var node = map[name], i;
+        if (!node) {
+          node = map[name] = data || {name: name, children: []};
+          if (name.length) {
+            node.parent = find(name.substring(0, i = name.lastIndexOf(".")));
+            node.parent.children.push(node);
+            node.key = name.substring(i + 1);
+          }
+        }
+        return node;
+      }
+
+      classes.forEach(function(d) {
+        find(d.name, d);
+      });
+
+      return map[""];
+    },
+
+    // Return a list of imports for the given array of nodes.
+    imports: function(nodes) {
+      var map = {},
+          imports = [];
+
+      // Compute a map from name to node.
+      nodes.forEach(function(d) {
+        map[d.name] = d;
+      });
+
+      // For each import, construct a link from the source to target node.
+      nodes.forEach(function(d) {
+        if (d.imports) d.imports.forEach(function(i) {
+          imports.push({source: map[d.name], target: map[i]});
+        });
+      });
+
+      return imports;
+    }
+
+  };
+})();
Index: /Dev/trunk/d3/examples/button.css
===================================================================
--- /Dev/trunk/d3/examples/button.css	(revision 76)
+++ /Dev/trunk/d3/examples/button.css	(revision 76)
@@ -0,0 +1,35 @@
+button {
+  font: 14px Helvetica Neue;
+  background-color: #222;
+  background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
+  background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
+  background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11));
+  color: #fff;
+  text-rendering: optimizeLegibility;
+  text-shadow: 0 -1px 1px #222;
+  padding: 6px 10px 6px 10px;
+  border: 0;
+  border-radius: 0;
+  border-bottom: 1px solid #222;
+  margin: 0;
+  -moz-box-shadow: 0 1px 3px #999;
+  -webkit-box-shadow: 0 1px 3px #999;
+}
+
+button.first {
+  border-top-left-radius: 5px;
+  border-bottom-left-radius: 5px;
+}
+
+button.last {
+  border-top-right-radius: 5px;
+  border-bottom-right-radius: 5px;
+}
+
+button.active {
+  background-color: rgb(65,102,133);
+}
+
+button:hover {
+  background-color: steelblue;
+}
Index: /Dev/trunk/d3/examples/calendar/calendar.css
===================================================================
--- /Dev/trunk/d3/examples/calendar/calendar.css	(revision 76)
+++ /Dev/trunk/d3/examples/calendar/calendar.css	(revision 76)
@@ -0,0 +1,16 @@
+#chart {
+  font: 10px sans-serif;
+}
+
+.day {
+  fill: #fff;
+  stroke: #ccc;
+  shape-rendering: crispEdges;
+}
+
+.month {
+  fill: none;
+  stroke: #000;
+  stroke-width: 2px;
+  shape-rendering: crispEdges;
+}
Index: /Dev/trunk/d3/examples/calendar/calendar.js
===================================================================
--- /Dev/trunk/d3/examples/calendar/calendar.js	(revision 76)
+++ /Dev/trunk/d3/examples/calendar/calendar.js	(revision 76)
@@ -0,0 +1,50 @@
+var calendar = {
+
+  format: d3.time.format("%Y-%m-%d"),
+
+  dates: function(year) {
+    var dates = [],
+        date = new Date(year, 0, 1),
+        week = 0,
+        day;
+    do {
+      dates.push({
+        day: day = date.getDay(),
+        week: week,
+        month: date.getMonth(),
+        Date: calendar.format(date)
+      });
+      date.setDate(date.getDate() + 1);
+      if (day === 6) week++;
+    } while (date.getFullYear() === year);
+    return dates;
+  },
+
+  months: function(year) {
+    var months = [],
+        date = new Date(year, 0, 1),
+        month,
+        firstDay,
+        firstWeek,
+        day,
+        week = 0;
+    do {
+      firstDay = date.getDay();
+      firstWeek = week;
+      month = date.getMonth();
+      do {
+        day = date.getDay();
+        if (day === 6) week++;
+        date.setDate(date.getDate() + 1);
+      } while (date.getMonth() === month);
+      months.push({
+        firstDay: firstDay,
+        firstWeek: firstWeek,
+        lastDay: day,
+        lastWeek: day === 6 ? week - 1 : week
+      });
+    } while (date.getFullYear() === year);
+    return months;
+  }
+
+};
Index: /Dev/trunk/d3/examples/calendar/dji.csv
===================================================================
--- /Dev/trunk/d3/examples/calendar/dji.csv	(revision 76)
+++ /Dev/trunk/d3/examples/calendar/dji.csv	(revision 76)
@@ -0,0 +1,5233 @@
+Date,Open,High,Low,Close,Volume,Adj Close
+2010-10-01,10789.72,10907.41,10759.14,10829.68,4298910000,10829.68
+2010-09-30,10835.96,10960.99,10732.27,10788.05,4284160000,10788.05
+2010-09-29,10857.98,10901.96,10759.75,10835.28,3990280000,10835.28
+2010-09-28,10809.85,10905.44,10714.03,10858.14,4025840000,10858.14
+2010-09-27,10860.03,10902.52,10776.44,10812.04,3587860000,10812.04
+2010-09-24,10664.39,10897.83,10664.39,10860.26,4123950000,10860.26
+2010-09-23,10738.48,10779.65,10610.12,10662.42,3847850000,10662.42
+2010-09-22,10761.11,10829.75,10682.40,10739.31,3911070000,10739.31
+2010-09-21,10753.39,10844.89,10674.83,10761.03,4175660000,10761.03
+2010-09-20,10608.08,10783.51,10594.38,10753.62,3364080000,10753.62
+2010-09-17,10595.44,10689.29,10529.67,10607.85,4086140000,10607.85
+2010-09-16,10571.75,10624.58,10499.43,10594.83,3364080000,10594.83
+2010-09-15,10526.42,10609.21,10453.15,10572.73,3369840000,10572.73
+2010-09-14,10544.81,10622.69,10460.34,10526.49,4521050000,10526.49
+2010-09-13,10458.60,10605.73,10458.45,10544.13,4521050000,10544.13
+2010-09-10,10415.01,10502.80,10376.34,10462.77,3061160000,10462.77
+2010-09-09,10388.22,10515.86,10359.23,10415.24,3387770000,10415.24
+2010-09-08,10338.57,10460.50,10318.93,10387.01,3224640000,10387.01
+2010-09-07,10446.80,10448.99,10304.44,10340.69,3107380000,10340.69
+2010-09-03,10321.92,10484.71,10321.92,10447.93,3534500000,10447.93
+2010-09-02,10270.08,10350.98,10211.80,10320.10,3704210000,10320.10
+2010-09-01,10016.01,10305.87,10016.01,10269.47,4396880000,10269.47
+2010-08-31,10006.42,10101.53,9915.73,10014.72,4038770000,10014.72
+2010-08-30,10145.58,10170.10,10005.56,10009.73,2917990000,10009.73
+2010-08-27,9982.40,10176.30,9925.11,10150.65,4102460000,10150.65
+2010-08-26,10059.83,10138.12,9959.17,9985.81,3646710000,9985.81
+2010-08-25,10040.15,10104.18,9925.34,10060.06,4360190000,10060.06
+2010-08-24,10170.86,10170.86,9975.86,10040.45,4436330000,10040.45
+2010-08-23,10215.51,10328.88,10146.18,10174.41,3210950000,10174.41
+2010-08-20,10270.98,10276.13,10131.88,10213.62,3761570000,10213.62
+2010-08-19,10411.15,10412.29,10202.34,10271.21,4290540000,10271.21
+2010-08-18,10398.59,10486.38,10308.83,10415.54,3724260000,10415.54
+2010-08-17,10297.55,10501.67,10297.55,10405.85,3968210000,10405.85
+2010-08-16,10303.07,10354.39,10193.26,10302.01,3142450000,10302.01
+2010-08-13,10320.33,10381.86,10254.18,10303.15,3328890000,10303.15
+2010-08-12,10361.58,10388.37,10222.85,10319.95,4521050000,10319.95
+2010-08-11,10631.82,10631.82,10339.63,10378.83,4511860000,10378.83
+2010-08-10,10696.63,10717.21,10522.63,10644.25,3979360000,10644.25
+2010-08-09,10654.62,10755.66,10618.26,10698.75,3191630000,10698.75
+2010-08-06,10668.55,10688.08,10491.37,10653.56,3857890000,10653.56
+2010-08-05,10679.67,10712.37,10571.60,10674.98,3685560000,10674.98
+2010-08-04,10630.20,10738.48,10583.10,10680.43,4057850000,10680.43
+2010-08-03,10673.92,10714.19,10564.18,10636.38,4071820000,10636.38
+2010-08-02,10468.82,10715.21,10468.82,10674.38,4144180000,10674.38
+2010-07-30,10465.19,10528.84,10327.37,10465.94,4006450000,10465.94
+2010-07-29,10498.94,10609.74,10383.45,10467.16,4612420000,10467.16
+2010-07-28,10537.01,10586.36,10445.17,10497.88,4002390000,10497.88
+2010-07-27,10525.28,10632.52,10460.65,10537.69,4725690000,10537.69
+2010-07-26,10424.17,10545.94,10391.02,10525.43,4009650000,10525.43
+2010-07-23,10321.16,10465.19,10237.84,10424.62,4524570000,10424.62
+2010-07-22,10121.81,10391.78,10121.81,10322.30,4826900000,10322.30
+2010-07-21,10226.02,10310.04,10053.85,10120.53,4747180000,10120.53
+2010-07-20,10151.48,10248.20,9973.17,10229.96,4713280000,10229.96
+2010-07-19,10098.12,10213.09,10051.28,10154.43,4089500000,10154.43
+2010-07-16,10356.20,10356.20,10071.63,10097.90,5297350000,10097.90
+2010-07-15,10367.10,10409.49,10216.04,10359.31,4552470000,10359.31
+2010-07-14,10370.96,10423.03,10265.16,10366.72,4521050000,10366.72
+2010-07-13,10217.55,10436.20,10217.55,10363.02,4640460000,10363.02
+2010-07-12,10199.24,10260.62,10121.13,10216.27,3426990000,10216.27
+2010-07-09,10137.93,10226.48,10079.05,10198.03,3506570000,10198.03
+2010-07-08,10019.26,10175.02,9987.02,10138.99,4548460000,10138.99
+2010-07-07,9736.85,10029.93,9716.38,10018.28,4931220000,10018.28
+2010-07-06,9689.21,9880.76,9648.26,9743.62,4691240000,9743.62
+2010-07-02,9732.23,9798.19,9603.80,9686.48,3968500000,9686.48
+2010-07-01,9773.27,9834.71,9596.04,9732.53,6435770000,9732.53
+2010-06-30,9868.34,9951.47,9741.07,9774.02,5067080000,9774.02
+2010-06-29,10135.72,10135.72,9786.45,9870.30,6136700000,9870.30
+2010-06-28,10143.05,10246.82,10070.12,10138.52,3896410000,10138.52
+2010-06-25,10153.48,10261.10,10039.97,10143.81,5128840000,10143.81
+2010-06-24,10297.08,10314.31,10112.60,10152.80,4814830000,10152.80
+2010-06-23,10293.30,10393.89,10195.81,10298.44,4526150000,10298.44
+2010-06-22,10441.95,10524.78,10276.14,10293.52,4514380000,10293.52
+2010-06-21,10452.46,10627.19,10387.54,10442.41,4514360000,10442.41
+2010-06-18,10435.00,10513.75,10379.60,10450.64,4555360000,10450.64
+2010-06-17,10409.98,10479.74,10293.49,10434.17,4557760000,10434.17
+2010-06-16,10404.24,10456.39,10289.37,10409.46,5002600000,10409.46
+2010-06-15,10192.40,10416.11,10192.40,10404.77,4644490000,10404.77
+2010-06-14,10211.83,10354.97,10175.02,10190.89,4425830000,10190.89
+2010-06-11,10166.78,10235.10,10038.31,10211.07,4059280000,10211.07
+2010-06-10,9901.67,10206.61,9901.67,10172.53,5144780000,10172.53
+2010-06-09,9941.57,10093.33,9859.04,9899.25,5983200000,9899.25
+2010-06-08,9812.94,9971.57,9726.33,9939.98,6192750000,9939.98
+2010-06-07,9931.75,10025.84,9798.73,9816.49,5467560000,9816.49
+2010-06-04,10249.61,10249.61,9881.11,9931.97,6180580000,9931.97
+2010-06-03,10250.67,10348.84,10158.92,10255.28,4995970000,10255.28
+2010-06-02,10025.61,10256.57,10007.09,10249.54,5026360000,10249.54
+2010-06-01,10133.94,10249.27,9976.56,10024.02,5271480000,10024.02
+2010-05-28,10258.00,10293.45,10078.66,10136.63,4871210000,10136.63
+2010-05-27,9971.73,10279.01,9971.73,10258.99,5698460000,10258.99
+2010-05-26,10045.11,10211.60,9937.79,9974.45,4521050000,9974.45
+2010-05-25,10061.43,10061.43,9756.11,10043.75,7329580000,10043.75
+2010-05-24,10193.46,10235.63,10028.78,10066.57,5224040000,10066.57
+2010-05-21,10063.93,10225.88,9860.93,10193.39,5452130000,10193.39
+2010-05-20,10440.21,10440.21,10042.46,10068.01,8328569600,10068.01
+2010-05-19,10505.70,10558.56,10306.22,10444.37,6765800000,10444.37
+2010-05-18,10625.45,10760.05,10463.15,10510.95,6170840000,10510.95
+2010-05-17,10616.98,10707.30,10424.72,10625.83,5922920000,10625.83
+2010-05-14,10780.68,10780.68,10509.89,10620.16,6126400000,10620.16
+2010-05-13,10896.61,10952.84,10752.72,10782.95,4870640000,10782.95
+2010-05-12,10742.15,10941.88,10725.81,10896.91,5225460000,10896.91
+2010-05-11,10780.00,10888.30,10653.71,10748.26,5842550000,10748.26
+2010-05-10,10386.18,10880.14,10386.18,10785.14,6893700000,10785.14
+2010-05-07,10519.42,10622.27,10221.50,10380.43,9472910400,10380.43
+2010-05-06,10862.22,10925.86,9787.17,10520.32,10617809600,10520.32
+2010-05-05,10918.40,10984.05,10754.30,10868.12,6795940000,10868.12
+2010-05-04,11149.48,11149.48,10843.71,10926.77,6594720000,10926.77
+2010-05-03,11009.60,11203.37,11004.15,11151.83,4938050000,11151.83
+2010-04-30,11168.23,11235.94,10984.35,11008.61,6048260000,11008.61
+2010-04-29,11045.64,11232.54,11045.64,11167.32,6059410000,11167.32
+2010-04-28,10988.87,11115.63,10938.48,11045.27,6342310000,11045.27
+2010-04-27,11203.67,11260.88,10962.81,10991.99,7454540000,10991.99
+2010-04-26,11205.11,11308.95,11150.01,11205.03,5647760000,11205.03
+2010-04-23,11132.18,11247.20,11058.87,11204.28,5326060000,11204.28
+2010-04-22,11119.78,11175.33,10975.66,11134.29,6035780000,11134.29
+2010-04-21,11116.91,11217.35,11018.59,11124.92,5724310000,11124.92
+2010-04-20,11093.11,11190.22,11045.80,11117.06,5316590000,11117.06
+2010-04-19,11018.36,11116.76,10940.60,11092.05,6597740000,11092.05
+2010-04-16,11143.66,11186.82,10947.55,11018.66,8108470400,11018.66
+2010-04-15,11122.96,11189.61,11051.31,11144.57,5995330000,11144.57
+2010-04-14,11020.70,11147.14,11004.61,11123.11,5760040000,11123.11
+2010-04-13,11006.72,11072.70,10925.86,11019.42,5403580000,11019.42
+2010-04-12,10996.75,11066.96,10957.22,11005.97,4607090000,11005.97
+2010-04-09,10926.92,11032.12,10894.19,10997.35,4511570000,10997.35
+2010-04-08,10896.99,10969.92,10810.15,10927.07,4726970000,10927.07
+2010-04-07,10961.95,11000.22,10835.77,10897.52,5101430000,10897.52
+2010-04-06,10972.49,11017.76,10893.89,10969.99,4086180000,10969.99
+2010-04-05,10927.45,11026.75,10880.36,10973.55,3881620000,10973.55
+2010-04-01,10857.31,10983.14,10851.57,10927.07,4006870000,10927.07
+2010-03-31,10907.34,10933.19,10802.22,10856.63,4484340000,10856.63
+2010-03-30,10895.02,10968.56,10837.21,10907.42,4085000000,10907.42
+2010-03-29,10849.23,10954.43,10827.91,10895.86,4375580000,10895.86
+2010-03-26,10841.29,10934.85,10801.84,10850.36,4708420000,10850.36
+2010-03-25,10837.51,10985.26,10818.77,10841.21,5668900000,10841.21
+2010-03-24,10887.62,10925.48,10788.77,10836.15,4705750000,10836.15
+2010-03-23,10787.18,10906.06,10752.41,10888.83,4411640000,10888.83
+2010-03-22,10741.00,10836.68,10672.23,10785.89,4261680000,10785.89
+2010-03-19,10780.00,10869.55,10665.35,10741.98,5212410000,10741.98
+2010-03-18,10733.44,10821.49,10686.89,10779.17,4234510000,10779.17
+2010-03-17,10686.36,10787.86,10658.10,10733.67,4963200000,10733.67
+2010-03-16,10642.53,10717.42,10594.16,10685.98,4369770000,10685.98
+2010-03-15,10623.41,10680.32,10540.65,10642.15,4164110000,10642.15
+2010-03-12,10611.77,10690.90,10561.66,10624.69,4928160000,10624.69
+2010-03-11,10560.98,10626.73,10489.87,10611.84,4669060000,10611.84
+2010-03-10,10560.13,10639.05,10502.64,10567.33,5469120000,10567.33
+2010-03-09,10552.24,10637.46,10493.49,10564.38,5185570000,10564.38
+2010-03-08,10563.78,10632.48,10500.90,10552.52,3774680000,10552.52
+2010-03-05,10445.13,10587.13,10445.13,10566.20,4133000000,10566.20
+2010-03-04,10396.53,10484.05,10363.88,10444.14,3945010000,10444.14
+2010-03-03,10406.28,10496.22,10359.58,10396.76,3951320000,10396.76
+2010-03-02,10404.16,10493.80,10359.80,10405.98,4134680000,10405.98
+2010-03-01,10326.10,10444.60,10320.05,10403.79,3847640000,10403.79
+2010-02-26,10321.41,10391.24,10250.45,10325.26,3945190000,10325.26
+2010-02-25,10366.60,10366.60,10155.75,10321.03,4521130000,10321.03
+2010-02-24,10284.00,10416.94,10271.61,10374.16,4168360000,10374.16
+2010-02-23,10383.16,10430.16,10239.34,10282.41,4521050000,10282.41
+2010-02-22,10402.43,10468.55,10333.05,10383.38,3814440000,10383.38
+2010-02-19,10387.77,10459.18,10316.50,10402.35,3944280000,10402.35
+2010-02-18,10309.39,10416.79,10255.58,10392.90,3878620000,10392.90
+2010-02-17,10261.48,10366.83,10223.16,10309.24,4259230000,10309.24
+2010-02-16,10100.81,10292.62,10100.81,10268.81,4080770000,10268.81
+2010-02-12,10137.23,10140.18,9962.13,10099.14,4160680000,10099.14
+2010-02-11,10037.85,10184.85,9963.19,10144.19,4400870000,10144.19
+2010-02-10,10055.46,10120.15,9946.26,10038.38,4251450000,10038.38
+2010-02-09,9910.28,10154.24,9910.28,10058.64,5114260000,10058.64
+2010-02-08,10005.43,10059.24,9882.85,9908.39,4089820000,9908.39
+2010-02-05,10003.69,10078.89,9822.84,10012.23,6438900000,10012.23
+2010-02-04,10273.12,10273.12,9984.35,10002.18,5859690000,10002.18
+2010-02-03,10291.73,10356.86,10192.03,10270.55,4285450000,10270.55
+2010-02-02,10186.13,10333.35,10138.75,10296.85,4749540000,10296.85
+2010-02-01,10068.99,10227.24,10068.99,10185.53,4077610000,10185.53
+2010-01-29,10122.04,10272.29,10014.35,10067.33,5412850000,10067.33
+2010-01-28,10236.92,10310.68,10023.80,10120.46,5452400000,10120.46
+2010-01-27,10194.29,10294.13,10060.98,10236.16,5319120000,10236.16
+2010-01-26,10195.35,10323.00,10102.17,10194.29,4731910000,10194.29
+2010-01-25,10175.10,10316.65,10135.95,10196.86,4481390000,10196.86
+2010-01-22,10389.58,10450.04,10133.15,10172.98,6208650000,10172.98
+2010-01-21,10603.91,10651.14,10334.18,10389.88,6874289600,10389.88
+2010-01-20,10719.69,10719.69,10492.36,10603.15,4810560000,10603.15
+2010-01-19,10608.37,10763.45,10555.47,10725.43,4724830000,10725.43
+2010-01-15,10706.99,10736.54,10529.09,10609.65,4758730000,10609.65
+2010-01-14,10680.16,10767.15,10619.02,10710.55,3915200000,10710.55
+2010-01-13,10628.09,10747.12,10569.07,10680.77,4170360000,10680.77
+2010-01-12,10662.86,10701.48,10523.35,10627.26,4716160000,10627.26
+2010-01-11,10620.31,10739.87,10538.91,10663.99,4255780000,10663.99
+2010-01-08,10606.40,10653.11,10509.74,10618.19,4389590000,10618.19
+2010-01-07,10571.11,10655.60,10471.73,10606.86,5270680000,10606.86
+2010-01-06,10564.72,10655.22,10488.28,10573.68,4972660000,10573.68
+2010-01-05,10584.56,10647.14,10468.86,10572.02,2491020000,10572.02
+2010-01-04,10430.69,10641.62,10430.69,10583.96,3991400000,10583.96
+2009-12-31,10548.51,10578.74,10420.56,10428.05,2076990000,10428.05
+2009-12-30,10544.36,10583.28,10470.75,10548.51,2277300000,10548.51
+2009-12-29,10547.83,10605.65,10518.59,10545.41,2491020000,10545.41
+2009-12-28,10517.91,10585.02,10477.25,10547.08,2716400000,10547.08
+2009-12-24,10467.12,10541.26,10450.95,10520.10,1267710000,10520.10
+2009-12-23,10464.32,10520.93,10409.00,10466.44,3166870000,10466.44
+2009-12-22,10414.67,10511.56,10399.33,10464.93,3641130000,10464.93
+2009-12-21,10330.10,10489.41,10330.10,10414.14,3977340000,10414.14
+2009-12-18,10309.39,10412.55,10237.75,10328.89,6325890000,10328.89
+2009-12-17,10439.99,10439.99,10279.39,10308.26,7615070400,10308.26
+2009-12-16,10449.81,10552.75,10401.90,10441.12,4829820000,10441.12
+2009-12-15,10499.31,10542.09,10380.96,10452.00,5045100000,10452.00
+2009-12-14,10471.28,10566.88,10431.60,10501.05,4548490000,10501.05
+2009-12-11,10403.41,10516.47,10385.42,10471.50,3791090000,10471.50
+2009-12-10,10336.00,10479.06,10332.14,10405.83,3996490000,10405.83
+2009-12-09,10282.85,10377.11,10207.29,10337.05,4115410000,10337.05
+2009-12-08,10385.42,10385.42,10216.44,10285.97,4748030000,10285.97
+2009-12-07,10386.86,10478.23,10321.11,10390.11,4103360000,10390.11
+2009-12-04,10368.57,10549.04,10285.44,10388.90,5781140000,10388.90
+2009-12-03,10455.63,10533.55,10338.49,10366.15,4810030000,10366.15
+2009-12-02,10470.44,10537.63,10386.03,10452.68,3941340000,10452.68
+2009-12-01,10343.82,10537.03,10343.82,10471.58,4249310000,10471.58
+2009-11-30,10309.77,10394.34,10238.05,10344.84,3895520000,10344.84
+2009-11-27,10452.23,10452.23,10179.33,10309.92,2362910000,10309.92
+2009-11-25,10432.96,10513.60,10385.65,10464.40,3036350000,10464.40
+2009-11-24,10451.25,10488.66,10335.62,10433.71,3700820000,10433.71
+2009-11-23,10320.13,10524.40,10320.13,10450.95,3827920000,10450.95
+2009-11-20,10327.91,10377.41,10237.60,10318.16,3751230000,10318.16
+2009-11-19,10425.33,10425.33,10226.41,10332.44,4178030000,10332.44
+2009-11-18,10426.27,10471.28,10330.33,10426.31,4293340000,10426.31
+2009-11-17,10404.77,10465.76,10318.69,10437.42,3824070000,10437.42
+2009-11-16,10267.53,10465.83,10267.53,10406.96,4565850000,10406.96
+2009-11-13,10197.85,10332.29,10162.93,10270.47,3792610000,10270.47
+2009-11-12,10289.82,10341.21,10157.64,10197.47,4160250000,10197.47
+2009-11-11,10247.42,10357.38,10217.19,10291.26,4286700000,10291.26
+2009-11-10,10223.01,10300.33,10148.12,10246.97,4394770000,10246.97
+2009-11-09,10020.62,10248.93,10020.62,10226.94,4460030000,10226.94
+2009-11-06,10001.35,10077.08,9898.49,10023.42,4277130000,10023.42
+2009-11-05,9807.80,10043.75,9807.80,10005.96,4848350000,10005.96
+2009-11-04,9767.30,9962.35,9745.76,9802.14,5635510000,9802.14
+2009-11-03,9787.47,9844.84,9649.78,9771.91,5487500000,9771.91
+2009-11-02,9712.13,9883.68,9647.06,9789.44,6202640000,9789.44
+2009-10-30,9961.52,9980.19,9664.89,9712.73,6512420000,9712.73
+2009-10-29,9762.91,9996.67,9762.91,9962.58,5595040000,9962.58
+2009-10-28,9881.11,9940.89,9723.31,9762.69,6600350000,9762.69
+2009-10-27,9868.34,9994.55,9802.36,9882.17,5337380000,9882.17
+2009-10-26,9972.33,10107.99,9817.55,9867.96,6363380000,9867.96
+2009-10-23,10099.90,10138.59,9908.70,9972.18,4767460000,9972.18
+2009-10-22,9946.18,10133.08,9879.07,10081.31,5192410000,10081.31
+2009-10-21,10038.84,10157.94,9909.83,9949.36,5616290000,9949.36
+2009-10-20,10092.42,10157.26,9952.98,10041.48,5396930000,10041.48
+2009-10-19,9996.67,10146.61,9967.49,10092.19,4619240000,10092.19
+2009-10-16,10061.36,10072.62,9884.51,9995.91,4894740000,9995.91
+2009-10-15,10014.88,10087.43,9916.93,10062.94,5369780000,10062.94
+2009-10-14,9873.55,10064.98,9873.55,10015.86,5406420000,10015.86
+2009-10-13,9883.98,9935.53,9780.90,9871.06,4320480000,9871.06
+2009-10-12,9865.24,9978.07,9814.45,9885.80,3710430000,9885.80
+2009-10-09,9786.04,9890.41,9731.32,9864.94,3763780000,9864.94
+2009-10-08,9728.22,9872.50,9709.78,9786.87,4988400000,9786.87
+2009-10-07,9725.69,9782.56,9634.96,9725.58,4238220000,9725.58
+2009-10-06,9601.26,9793.37,9601.26,9731.25,5029840000,9731.25
+2009-10-05,9488.73,9640.33,9449.81,9599.75,4313310000,9599.75
+2009-10-02,9507.62,9571.71,9378.77,9487.67,5583240000,9487.67
+2009-10-01,9711.60,9714.70,9482.98,9509.28,5791450000,9509.28
+2009-09-30,9741.83,9817.17,9583.04,9712.28,5998860000,9712.28
+2009-09-29,9789.74,9861.99,9705.10,9742.20,4949900000,9742.20
+2009-09-28,9663.23,9861.39,9658.09,9789.36,3726950000,9789.36
+2009-09-25,9706.68,9781.73,9605.19,9665.19,4507090000,9665.19
+2009-09-24,9749.99,9836.82,9637.53,9707.44,5505610000,9707.44
+2009-09-23,9830.63,9937.72,9724.90,9748.55,5531930000,9748.55
+2009-09-22,9779.61,9890.71,9742.96,9829.87,5246600000,9829.87
+2009-09-21,9818.61,9846.12,9688.40,9778.86,4615280000,9778.86
+2009-09-18,9784.75,9898.57,9751.27,9820.20,5607970000,9820.20
+2009-09-17,9789.82,9896.38,9706.23,9783.92,6668110000,9783.92
+2009-09-16,9683.71,9837.05,9648.95,9791.71,6793529600,9791.71
+2009-09-15,9626.42,9745.91,9553.80,9683.41,6185620000,9683.41
+2009-09-14,9598.08,9662.10,9492.96,9626.80,4979610000,9626.80
+2009-09-11,9625.44,9698.67,9532.11,9605.41,4922600000,9605.41
+2009-09-10,9546.54,9666.55,9479.20,9627.48,5191380000,9627.48
+2009-09-09,9496.59,9604.43,9435.45,9547.22,5202550000,9547.22
+2009-09-08,9440.13,9564.45,9402.80,9497.34,5235160000,9497.34
+2009-09-04,9345.36,9465.37,9302.28,9441.27,4097370000,9441.27
+2009-09-03,9282.03,9350.27,9252.93,9344.61,4624280000,9344.61
+2009-09-02,9306.21,9378.77,9223.08,9280.67,5842730000,9280.67
+2009-09-01,9492.32,9573.67,9275.15,9310.60,6862360000,9310.60
+2009-08-31,9542.91,9552.97,9389.27,9496.28,5004560000,9496.28
+2009-08-28,9582.74,9666.71,9476.63,9544.20,5785780000,9544.20
+2009-08-27,9541.63,9629.98,9440.43,9580.63,5785880000,9580.63
+2009-08-26,9538.61,9613.65,9446.71,9543.52,5080060000,9543.52
+2009-08-25,9509.21,9646.53,9485.70,9539.29,5768740000,9539.29
+2009-08-24,9506.18,9625.89,9442.17,9509.28,6302450000,9509.28
+2009-08-21,9347.86,9549.19,9347.86,9505.96,5885550000,9505.96
+2009-08-20,9278.55,9385.72,9237.52,9350.05,4893160000,9350.05
+2009-08-19,9208.68,9333.34,9099.14,9279.16,4257000000,9279.16
+2009-08-18,9134.36,9262.08,9124.08,9217.94,4198970000,9217.94
+2009-08-17,9313.85,9313.85,9078.28,9135.34,4854970000,9135.34
+2009-08-14,9398.04,9425.17,9214.47,9321.40,4940750000,9321.40
+2009-08-13,9362.29,9448.97,9269.26,9398.19,5250660000,9398.19
+2009-08-12,9236.06,9442.47,9199.80,9361.61,5498170000,9361.61
+2009-08-11,9334.33,9351.86,9180.23,9241.45,5773160000,9241.45
+2009-08-10,9368.41,9420.56,9249.99,9337.95,5406080000,9337.95
+2009-08-07,9258.45,9466.89,9258.45,9370.07,6827089600,9370.07
+2009-08-06,9277.19,9378.01,9168.44,9256.26,6753380000,9256.26
+2009-08-05,9315.36,9374.38,9173.20,9280.97,7242120000,9280.97
+2009-08-04,9285.05,9370.30,9207.21,9320.19,5713700000,9320.19
+2009-08-03,9173.65,9342.11,9162.09,9286.56,5603440000,9286.56
+2009-07-31,9154.61,9264.65,9081.30,9171.61,5139070000,9171.61
+2009-07-30,9072.84,9298.13,9072.84,9154.46,6035180000,9154.46
+2009-07-29,9092.34,9141.23,8967.26,9070.72,5178770000,9070.72
+2009-07-28,9106.92,9154.76,8980.03,9096.72,5490350000,9096.72
+2009-07-27,9093.09,9154.23,8996.58,9108.51,4631290000,9108.51
+2009-07-24,9066.11,9144.48,8955.77,9093.24,4458300000,9093.24
+2009-07-23,8882.31,9143.05,8837.95,9069.29,5761650000,9069.29
+2009-07-22,8912.39,8993.48,8802.13,8881.26,4634100000,8881.26
+2009-07-21,8848.15,8991.07,8780.82,8915.94,5309300000,8915.94
+2009-07-20,8746.05,8884.43,8717.26,8848.15,4853150000,8848.15
+2009-07-17,8711.89,8797.97,8638.81,8743.94,5141380000,8743.94
+2009-07-16,8612.66,8750.28,8543.97,8711.82,4898640000,8711.82
+2009-07-15,8363.95,8643.04,8363.95,8616.21,5238830000,8616.21
+2009-07-14,8331.37,8407.48,8255.27,8359.49,4149030000,8359.49
+2009-07-13,8146.82,8348.08,8106.16,8331.68,4499440000,8331.68
+2009-07-10,8182.49,8216.65,8057.57,8146.52,3912080000,8146.52
+2009-07-09,8179.01,8273.48,8117.27,8183.17,4347170000,8183.17
+2009-07-08,8157.02,8259.05,8057.94,8178.41,5721780000,8178.41
+2009-07-07,8324.95,8355.48,8138.51,8163.60,4673300000,8163.60
+2009-07-06,8279.30,8364.02,8156.49,8324.87,4712580000,8324.87
+2009-07-02,8503.00,8503.00,8260.41,8280.74,3931000000,8280.74
+2009-07-01,8447.53,8610.32,8447.00,8504.06,3919400000,8504.06
+2009-06-30,8528.93,8584.17,8369.99,8447.00,4627570000,8447.00
+2009-06-29,8440.13,8569.59,8406.57,8529.38,4211760000,8529.38
+2009-06-26,8468.54,8509.73,8364.17,8438.39,6076660000,8438.39
+2009-06-25,8299.25,8512.60,8236.07,8472.40,4911240000,8472.40
+2009-06-24,8323.51,8456.83,8246.20,8299.86,4636720000,8299.86
+2009-06-23,8340.44,8413.22,8239.17,8322.91,5071020000,8322.91
+2009-06-22,8538.52,8538.52,8306.66,8339.01,4903940000,8339.01
+2009-06-19,8556.96,8665.26,8476.02,8539.73,5713390000,8539.73
+2009-06-18,8496.73,8634.28,8438.61,8555.60,4684010000,8555.60
+2009-06-17,8504.36,8602.99,8421.46,8497.18,5523650000,8497.18
+2009-06-16,8612.44,8688.69,8483.58,8504.67,4951200000,8504.67
+2009-06-15,8798.50,8798.50,8540.87,8612.13,4697880000,8612.13
+2009-06-12,8770.01,8850.95,8671.61,8799.26,4528120000,8799.26
+2009-06-11,8736.23,8911.11,8697.99,8770.92,5500840000,8770.92
+2009-06-10,8763.66,8871.36,8625.21,8739.02,5379420000,8739.02
+2009-06-09,8764.83,8854.80,8688.99,8763.06,4439950000,8763.06
+2009-06-08,8759.35,8832.13,8593.84,8764.49,4483430000,8764.49
+2009-06-05,8751.75,8900.48,8673.41,8763.13,5277910000,8763.13
+2009-06-04,8665.72,8802.59,8609.17,8750.24,5352890000,8750.24
+2009-06-03,8740.07,8750.83,8556.90,8675.24,5323770000,8675.24
+2009-06-02,8721.60,8832.16,8635.25,8740.87,5987340000,8740.87
+2009-06-01,8501.53,8797.58,8501.53,8721.44,6370440000,8721.44
+2009-05-29,8404.04,8541.27,8323.91,8500.33,6050420000,8500.33
+2009-05-28,8300.50,8463.70,8221.65,8403.80,5738980000,8403.80
+2009-05-27,8473.65,8534.66,8280.82,8300.02,5698800000,8300.02
+2009-05-26,8275.33,8523.59,8194.33,8473.49,5667050000,8473.49
+2009-05-22,8292.21,8415.75,8218.86,8277.32,5155320000,8277.32
+2009-05-21,8416.07,8416.07,8185.25,8292.13,6019840000,8292.13
+2009-05-20,8471.82,8645.85,8376.40,8422.04,8205060000,8422.04
+2009-05-19,8502.48,8594.16,8402.61,8474.85,6616270000,8474.85
+2009-05-18,8270.15,8534.66,8270.15,8504.08,5702150000,8504.08
+2009-05-15,8326.22,8422.28,8206.67,8268.64,5439720000,8268.64
+2009-05-14,8285.92,8427.93,8218.94,8331.32,6134870000,8331.32
+2009-05-13,8461.80,8461.80,8208.74,8284.89,7091820000,8284.89
+2009-05-12,8419.17,8574.88,8306.47,8469.11,6871750400,8469.11
+2009-05-11,8569.23,8569.23,8347.41,8418.77,6150600000,8418.77
+2009-05-08,8410.73,8657.96,8388.11,8574.65,8163280000,8574.65
+2009-05-07,8513.56,8651.51,8296.04,8409.85,9120100000,8409.85
+2009-05-06,8403.48,8608.26,8350.12,8512.28,8555040000,8512.28
+2009-05-05,8425.55,8520.80,8321.37,8410.65,6882860000,8410.65
+2009-05-04,8213.60,8488.87,8213.60,8426.74,7038840000,8426.74
+2009-05-01,8167.41,8278.28,8047.54,8212.41,5312170000,8212.41
+2009-04-30,8188.51,8383.81,8083.62,8168.12,6862540000,8168.12
+2009-04-29,8018.31,8278.12,8018.31,8185.73,6101620000,8185.73
+2009-04-28,8023.56,8136.74,7898.75,8016.95,6328000000,8016.95
+2009-04-27,8073.82,8152.27,7920.42,8025.00,5613460000,8025.00
+2009-04-24,7957.45,8182.30,7905.60,8076.29,7114440000,8076.29
+2009-04-23,7886.81,8015.36,7762.80,7957.06,6563100000,7957.06
+2009-04-22,7964.78,8111.02,7802.46,7886.57,7327860000,7886.57
+2009-04-21,7841.73,8027.54,7699.79,7969.56,7436489600,7969.56
+2009-04-20,8128.94,8128.94,7801.58,7841.73,6973960000,7841.73
+2009-04-17,8125.43,8251.20,8024.92,8131.33,7352009600,8131.33
+2009-04-16,8029.14,8201.81,7933.08,8125.43,6598670000,8125.43
+2009-04-15,7914.92,8069.92,7808.19,8029.62,6241100000,8029.62
+2009-04-14,8057.41,8076.05,7840.53,7920.18,7569840000,7920.18
+2009-04-13,8082.02,8146.86,7888.96,8057.81,6434890000,8057.81
+2009-04-09,7839.89,8150.44,7839.89,8083.38,7600710400,8083.38
+2009-04-08,7788.68,7925.36,7715.09,7837.11,5938460000,7837.11
+2009-04-07,7968.92,7968.92,7733.56,7789.56,5155580000,7789.56
+2009-04-06,8016.16,8037.42,7830.66,7975.85,6210000000,7975.85
+2009-04-03,7980.63,8090.71,7850.33,8017.59,5855640000,8017.59
+2009-04-02,7763.99,8129.33,7763.99,7978.08,7542809600,7978.08
+2009-04-01,7606.13,7804.77,7450.74,7761.60,6034140000,7761.60
+2009-03-31,7523.77,7744.24,7502.98,7608.92,6089100000,7608.92
+2009-03-30,7773.31,7773.31,7406.85,7522.02,5912660000,7522.02
+2009-03-27,7922.57,7922.57,7695.97,7776.18,5600210000,7776.18
+2009-03-26,7752.36,7969.00,7709.19,7924.56,6992960000,7924.56
+2009-03-25,7659.81,7897.48,7539.54,7749.81,7687180000,7749.81
+2009-03-24,7773.47,7837.11,7585.98,7660.21,6767980000,7660.21
+2009-03-23,7279.25,7789.24,7279.25,7775.86,7715769600,7775.86
+2009-03-20,7402.31,7524.81,7215.77,7278.38,7643720000,7278.38
+2009-03-19,7489.68,7624.45,7325.13,7400.80,9033870400,7400.80
+2009-03-18,7395.70,7592.03,7218.24,7486.58,9098449600,7486.58
+2009-03-17,7218.00,7407.41,7129.60,7395.70,6156800000,7395.70
+2009-03-16,7225.33,7428.75,7171.41,7216.97,7883540000,7216.97
+2009-03-13,7219.20,7241.98,7106.34,7223.98,6787089600,7223.98
+2009-03-12,6932.39,7198.25,6840.79,7170.06,7326630400,7170.06
+2009-03-11,6923.13,7078.22,6804.55,6930.40,7287809600,6930.40
+2009-03-10,6547.01,6951.50,6547.01,6926.49,8618329600,6926.49
+2009-03-09,6625.74,6758.44,6440.08,6547.05,7277320000,6547.05
+2009-03-06,6595.16,6776.44,6443.27,6626.94,7331830400,6626.94
+2009-03-05,6874.01,6874.01,6531.28,6594.44,7507249600,6594.44
+2009-03-04,6726.50,7012.19,6715.11,6875.84,7673620000,6875.84
+2009-03-03,6764.81,6922.59,6661.74,6726.02,7583230400,6726.02
+2009-03-02,7056.48,7056.48,6736.69,6763.29,7868289600,6763.29
+2009-02-27,7180.97,7244.61,6952.06,7062.93,8926480000,7062.93
+2009-02-26,7269.06,7451.13,7135.25,7182.08,7599969600,7182.08
+2009-02-25,7349.58,7442.13,7123.94,7270.89,7483640000,7270.89
+2009-02-24,7115.34,7396.34,7077.35,7350.94,7234489600,7350.94
+2009-02-23,7365.99,7477.10,7092.64,7114.78,6509300000,7114.78
+2009-02-20,7461.49,7500.44,7226.29,7365.67,8210590400,7365.67
+2009-02-19,7555.23,7679.01,7420.63,7465.95,5746940000,7465.95
+2009-02-18,7546.35,7661.56,7451.37,7555.63,5740710000,7555.63
+2009-02-17,7845.63,7845.63,7502.59,7552.60,5907820000,7552.60
+2009-02-13,7933.00,8005.96,7811.38,7850.41,5296650000,7850.41
+2009-02-12,7931.97,7956.02,7662.04,7932.76,6476460000,7932.76
+2009-02-11,7887.05,8042.36,7820.14,7939.53,5926460000,7939.53
+2009-02-10,8269.36,8293.17,7835.83,7888.88,6770169600,7888.88
+2009-02-09,8281.38,8376.56,8137.70,8270.87,5574370000,8270.87
+2009-02-06,8056.38,8360.07,8044.03,8280.59,6484100000,8280.59
+2009-02-05,7954.83,8138.65,7811.70,8063.07,6624030000,8063.07
+2009-02-04,8070.32,8197.04,7899.79,7956.66,6420450000,7956.66
+2009-02-03,7936.99,8157.13,7855.19,8078.36,5886310000,8078.36
+2009-02-02,8000.62,8053.43,7796.17,7936.83,5673270000,7936.83
+2009-01-30,8149.01,8243.95,7924.88,8000.86,5350580000,8000.86
+2009-01-29,8373.06,8373.06,8092.14,8149.01,5067060000,8149.01
+2009-01-28,8175.93,8446.33,8175.93,8375.45,6199180000,8375.45
+2009-01-27,8117.39,8264.10,8042.60,8174.73,5353260000,8174.73
+2009-01-26,8078.04,8278.12,7971.15,8116.03,6039940000,8116.03
+2009-01-23,8108.79,8187.88,7856.86,8077.56,5832160000,8077.56
+2009-01-22,8224.43,8239.33,7925.75,8122.80,5843830000,8122.80
+2009-01-21,7949.17,8286.40,7890.63,8228.10,6467830000,8228.10
+2009-01-20,8279.63,8309.02,7920.66,7949.09,6375230000,7949.09
+2009-01-16,8215.67,8424.59,8086.01,8281.22,6786040000,8281.22
+2009-01-15,8196.24,8326.06,7949.65,8212.49,7807350400,8212.49
+2009-01-14,8446.01,8446.01,8097.95,8200.14,5407880000,8200.14
+2009-01-13,8474.61,8584.68,8325.59,8448.56,5567460000,8448.56
+2009-01-12,8599.26,8653.97,8391.85,8473.97,4725050000,8473.97
+2009-01-09,8738.80,8800.45,8541.75,8599.18,4716500000,8599.18
+2009-01-08,8769.94,8807.14,8593.52,8742.46,4991550000,8742.46
+2009-01-07,8996.94,8996.94,8690.45,8769.70,4704940000,8769.70
+2009-01-06,8954.57,9175.19,8868.07,9015.10,5392620000,9015.10
+2009-01-05,9027.13,9093.47,8841.70,8952.89,5413910000,8952.89
+2009-01-02,8772.25,9080.57,8725.10,9034.69,4048270000,9034.69
+2008-12-31,8666.48,8862.65,8634.06,8776.39,4172940000,8776.39
+2008-12-30,8487.51,8700.89,8463.70,8668.39,3627800000,8668.39
+2008-12-29,8515.87,8575.60,8349.24,8483.93,3323430000,8483.93
+2008-12-26,8468.71,8581.58,8434.94,8515.55,1880050000,8515.55
+2008-12-24,8428.17,8498.26,8417.02,8468.48,1546550000,8468.48
+2008-12-23,8518.65,8647.60,8376.80,8419.49,4051970000,8419.49
+2008-12-22,8573.37,8672.06,8351.79,8519.69,4869850000,8519.69
+2008-12-19,8606.50,8823.78,8499.06,8579.11,6705310000,8579.11
+2008-12-18,8823.94,8946.36,8516.02,8604.99,5675000000,8604.99
+2008-12-17,8921.91,9001.96,8701.13,8824.34,5907380000,8824.34
+2008-12-16,8565.65,8985.63,8534.03,8924.14,6009780000,8924.14
+2008-12-15,8628.81,8738.40,8431.04,8564.53,4982390000,8564.53
+2008-12-12,8563.10,8705.43,8272.22,8629.68,5959590000,8629.68
+2008-12-11,8750.13,8861.86,8480.18,8565.09,5513840000,8565.09
+2008-12-10,8693.00,8942.46,8589.86,8761.42,5942130000,8761.42
+2008-12-09,8934.10,8978.14,8591.69,8691.33,5693110000,8691.33
+2008-12-08,8637.65,9151.61,8637.65,8934.18,6553600000,8934.18
+2008-12-05,8376.08,8722.47,8084.25,8635.42,6165370000,8635.42
+2008-12-04,8587.07,8705.98,8222.84,8376.24,5860390000,8376.24
+2008-12-03,8409.14,8654.77,8170.19,8591.69,6221880000,8591.69
+2008-12-02,8153.75,8490.62,8072.47,8419.09,6170100000,8419.09
+2008-12-01,8826.89,8826.89,8123.04,8149.09,6052010000,8149.09
+2008-11-28,8690.24,8840.33,8687.05,8829.04,2740860000,8829.04
+2008-11-26,8464.49,8760.46,8250.80,8726.61,5793260000,8726.61
+2008-11-25,8445.14,8682.09,8244.43,8479.47,6952700000,8479.47
+2008-11-24,8048.09,8624.27,8023.32,8443.39,7879440000,8443.39
+2008-11-21,7552.37,8121.45,7392.27,8046.42,9495900000,8046.42
+2008-11-20,7995.53,8224.35,7464.51,7552.29,9093740000,7552.29
+2008-11-19,8420.69,8534.34,7967.33,7997.28,6548600000,7997.28
+2008-11-18,8273.34,8540.08,8075.81,8424.75,6679470000,8424.75
+2008-11-17,8494.84,8596.31,8197.12,8273.58,4927490000,8273.58
+2008-11-14,8822.19,8980.93,8421.08,8497.31,5881030000,8497.31
+2008-11-13,8281.14,8898.41,7947.74,8835.25,7849120000,8835.25
+2008-11-12,8684.52,8684.52,8235.66,8282.66,5764180000,8282.66
+2008-11-11,8864.32,8892.20,8499.62,8693.96,4998340000,8693.96
+2008-11-10,8946.60,9212.94,8735.61,8870.54,4572000000,8870.54
+2008-11-07,8696.03,9032.54,8661.22,8943.81,4931640000,8943.81
+2008-11-06,9134.01,9216.37,8607.14,8695.79,6102230000,8695.79
+2008-11-05,9616.60,9628.15,9086.06,9139.27,5426640000,9139.27
+2008-11-04,9323.89,9711.46,9323.89,9625.28,5531290000,9625.28
+2008-11-03,9326.04,9488.92,9175.03,9319.83,4492280000,9319.83
+2008-10-31,9179.09,9498.48,9014.78,9325.01,6394350000,9325.01
+2008-10-30,9004.66,9380.36,8916.81,9180.69,6175830000,9180.69
+2008-10-29,9062.33,9405.05,8800.61,8990.96,7077800000,8990.96
+2008-10-28,8178.72,9112.51,8153.79,9065.12,7096950400,9065.12
+2008-10-27,8375.92,8639.64,8085.37,8175.77,5558050000,8175.77
+2008-10-24,8683.21,8683.21,8088.63,8378.95,6550050000,8378.95
+2008-10-23,8519.77,8864.48,8200.06,8691.25,7189900000,8691.25
+2008-10-22,9027.84,9027.84,8324.07,8519.21,6147980000,8519.21
+2008-10-21,9179.11,9293.07,9017.30,9045.21,5121830000,9045.21
+2008-10-20,8852.30,9305.89,8799.49,9265.43,5175640000,9265.43
+2008-10-17,8975.35,9304.38,8640.83,8852.22,6581780000,8852.22
+2008-10-16,8577.04,9073.64,8176.17,8979.26,7984500000,8979.26
+2008-10-15,9301.91,9301.91,8516.50,8577.91,6542330000,8577.91
+2008-10-14,9388.97,9924.28,9050.06,9310.99,8161990400,9310.99
+2008-10-13,8462.42,9501.91,8462.42,9387.61,7263369600,9387.61
+2008-10-10,8568.67,8989.13,7773.71,8451.19,11456230400,8451.19
+2008-10-09,9261.69,9522.77,8523.27,8579.19,8285670400,8579.19
+2008-10-08,9437.23,9778.04,9042.97,9258.10,8716329600,9258.10
+2008-10-07,9955.42,10205.04,9391.67,9447.11,7069209600,9447.11
+2008-10-06,10322.52,10322.52,9503.10,9955.50,7956020000,9955.50
+2008-10-03,10483.96,10844.69,10261.75,10325.38,6716120000,10325.38
+2008-10-02,10825.54,10843.10,10368.08,10482.85,6285640000,10482.85
+2008-10-01,10847.40,11022.06,10495.99,10831.07,5782130000,10831.07
+2008-09-30,10371.58,10922.03,10371.58,10850.66,6065000000,10850.66
+2008-09-29,11139.62,11139.62,10266.76,10365.45,7305060000,10365.45
+2008-09-26,11019.04,11218.48,10781.37,11143.13,5383610000,11143.13
+2008-09-25,10827.17,11206.05,10799.77,11022.06,5877640000,11022.06
+2008-09-24,10850.02,11041.02,10696.38,10825.17,4820360000,10825.17
+2008-09-23,11015.69,11214.65,10763.77,10854.17,5185730000,10854.17
+2008-09-22,11394.42,11450.81,10956.43,11015.69,5368130000,11015.69
+2008-09-19,11027.51,11415.48,11027.51,11388.44,9387169600,11388.44
+2008-09-18,10609.01,11149.07,10403.75,11019.69,10082689600,11019.69
+2008-09-17,11056.58,11068.87,10521.81,10609.66,9431870400,10609.66
+2008-09-16,10905.62,11193.12,10604.70,11059.02,9459830400,11059.02
+2008-09-15,11416.37,11416.37,10849.85,10917.51,8279510400,10917.51
+2008-09-12,11429.32,11532.72,11191.08,11421.99,6273260000,11421.99
+2008-09-11,11264.44,11461.15,11018.72,11433.71,6869249600,11433.71
+2008-09-10,11233.91,11453.50,11135.64,11268.92,6543440000,11268.92
+2008-09-09,11514.73,11623.50,11209.81,11230.73,7380630400,11230.73
+2008-09-08,11224.87,11656.64,11224.87,11510.74,7351340000,11510.74
+2008-09-05,11185.63,11301.73,10998.77,11220.96,5017080000,11220.96
+2008-09-04,11532.48,11532.48,11130.26,11188.23,5212500000,11188.23
+2008-09-03,11506.01,11629.69,11328.84,11532.88,5056980000,11532.88
+2008-09-02,11545.63,11831.29,11444.79,11516.92,4783560000,11516.92
+2008-08-29,11713.23,11730.49,11508.78,11543.55,3288120000,11543.55
+2008-08-28,11499.87,11756.46,11493.72,11715.18,3854280000,11715.18
+2008-08-27,11412.46,11575.14,11349.69,11502.51,3499610000,11502.51
+2008-08-26,11383.56,11483.62,11284.47,11412.87,3587570000,11412.87
+2008-08-25,11626.19,11626.19,11336.82,11386.25,3420600000,11386.25
+2008-08-22,11426.79,11684.00,11426.79,11628.06,3741070000,11628.06
+2008-08-21,11415.23,11501.29,11263.63,11430.21,4032590000,11430.21
+2008-08-20,11345.94,11511.06,11240.18,11417.43,4555030000,11417.43
+2008-08-19,11478.09,11501.45,11260.53,11348.55,4159760000,11348.55
+2008-08-18,11659.65,11744.49,11410.18,11479.39,3829290000,11479.39
+2008-08-15,11611.21,11776.41,11540.05,11659.90,4041820000,11659.90
+2008-08-14,11532.07,11744.33,11399.84,11615.93,4064000000,11615.93
+2008-08-13,11632.81,11689.05,11377.37,11532.96,4787600000,11532.96
+2008-08-12,11781.70,11830.39,11541.43,11642.47,4711290000,11642.47
+2008-08-11,11729.67,11933.55,11580.19,11782.35,5067310000,11782.35
+2008-08-08,11432.09,11808.49,11344.23,11734.32,4966810000,11734.32
+2008-08-07,11655.42,11680.50,11355.63,11431.43,5319380000,11431.43
+2008-08-06,11603.64,11745.71,11454.64,11656.07,4873420000,11656.07
+2008-08-05,11286.02,11652.24,11286.02,11615.77,1219310000,11615.77
+2008-08-04,11326.32,11449.67,11144.59,11284.15,4562280000,11284.15
+2008-08-01,11379.89,11512.61,11205.41,11326.32,4684870000,11326.32
+2008-07-31,11577.99,11631.16,11317.69,11378.02,5346050000,11378.02
+2008-07-30,11397.56,11681.47,11328.68,11583.69,5631330000,11583.69
+2008-07-29,11133.44,11444.05,11086.13,11397.56,5414240000,11397.56
+2008-07-28,11369.47,11439.25,11094.76,11131.08,4282960000,11131.08
+2008-07-25,11341.14,11540.78,11252.47,11370.69,4672560000,11370.69
+2008-07-24,11630.34,11714.21,11288.79,11349.28,6127980000,11349.28
+2008-07-23,11603.39,11820.21,11410.02,11632.38,6705830000,11632.38
+2008-07-22,11457.90,11692.79,11273.32,11602.50,6180230000,11602.50
+2008-07-21,11495.02,11663.40,11339.02,11467.34,4630640000,11467.34
+2008-07-18,11436.56,11599.57,11290.50,11496.57,5653280000,11496.57
+2008-07-17,11238.39,11538.50,11118.46,11446.66,7365209600,11446.66
+2008-07-16,10961.89,11308.41,10831.61,11239.28,6738630400,11239.28
+2008-07-15,11050.80,11201.67,10731.96,10962.54,7363640000,10962.54
+2008-07-14,11103.64,11299.70,10972.63,11055.19,5434860000,11055.19
+2008-07-11,11226.17,11292.04,10908.64,11100.54,6742200000,11100.54
+2008-07-10,11148.01,11351.24,11006.01,11229.02,5840430000,11229.02
+2008-07-09,11381.93,11505.12,11115.61,11147.44,5181000000,11147.44
+2008-07-08,11225.03,11459.52,11101.19,11384.21,6034110000,11384.21
+2008-07-07,11289.19,11477.52,11094.44,11231.96,5265420000,11231.96
+2008-07-03,11297.33,11336.49,11158.02,11288.53,3247590000,11288.53
+2008-07-02,11382.34,11510.41,11180.58,11215.51,5276090000,11215.51
+2008-07-01,11344.64,11465.79,11106.65,11382.26,5846290000,11382.26
+2008-06-30,11345.70,11504.55,11226.34,11350.01,5032330000,11350.01
+2008-06-27,11452.85,11556.33,11248.48,11346.51,6208260000,11346.51
+2008-06-26,11808.57,11808.57,11431.92,11453.42,5231280000,11453.42
+2008-06-25,11805.31,12008.70,11683.75,11811.83,4825640000,11811.83
+2008-06-24,11842.36,11962.37,11668.53,11807.43,4705050000,11807.43
+2008-06-23,11843.83,11986.96,11731.06,11842.36,4186370000,11842.36
+2008-06-20,12062.19,12078.23,11785.04,11842.69,5324900000,11842.69
+2008-06-19,12022.54,12188.31,11881.03,12063.09,4811670000,12063.09
+2008-06-18,12158.68,12212.33,11947.07,12029.06,4573570000,12029.06
+2008-06-17,12269.65,12378.67,12114.14,12160.30,3801960000,12160.30
+2008-06-16,12306.86,12381.44,12139.79,12269.08,3706940000,12269.08
+2008-06-13,12144.59,12376.72,12096.23,12307.35,4080420000,12307.35
+2008-06-12,12089.63,12337.72,12041.43,12141.58,4734240000,12141.58
+2008-06-11,12286.34,12317.20,12029.46,12083.77,4779980000,12083.77
+2008-06-10,12277.71,12425.98,12116.58,12289.76,4635070000,12289.76
+2008-06-09,12210.13,12406.36,12102.50,12280.32,4404570000,12280.32
+2008-06-06,12602.74,12602.74,12180.50,12209.81,4771660000,12209.81
+2008-06-05,12388.81,12652.81,12358.07,12604.45,4350790000,12604.45
+2008-06-04,12391.86,12540.37,12283.74,12390.48,4338640000,12390.48
+2008-06-03,12503.20,12620.98,12317.61,12402.85,4396380000,12402.85
+2008-06-02,12637.67,12645.40,12385.76,12503.82,3714320000,12503.82
+2008-05-30,12647.36,12750.84,12555.60,12638.32,3845630000,12638.32
+2008-05-29,12593.87,12760.21,12493.47,12646.22,3894440000,12646.22
+2008-05-28,12542.90,12693.77,12437.38,12594.03,3927240000,12594.03
+2008-05-27,12479.63,12626.84,12397.56,12548.35,3588860000,12548.35
+2008-05-23,12620.90,12637.43,12420.20,12479.63,3516380000,12479.63
+2008-05-22,12597.69,12743.68,12515.78,12625.62,3955960000,12625.62
+2008-05-21,12824.94,12926.71,12550.39,12601.19,4517990000,12601.19
+2008-05-20,13026.04,13026.04,12742.29,12828.68,3854320000,12828.68
+2008-05-19,12985.41,13170.97,12899.19,13028.16,3683970000,13028.16
+2008-05-16,12992.74,13069.52,12860.60,12986.80,3842590000,12986.80
+2008-05-15,12891.29,13028.16,12798.39,12992.66,3836480000,12992.66
+2008-05-14,12825.12,13037.44,12806.21,12898.38,3979370000,12898.38
+2008-05-13,12872.08,12957.65,12716.16,12832.18,4018590000,12832.18
+2008-05-12,12768.38,12903.33,12746.36,12876.05,3370630000,12876.05
+2008-05-09,12860.68,12871.75,12648.09,12745.88,3518620000,12745.88
+2008-05-08,12814.84,12965.95,12727.56,12866.78,3827550000,12866.78
+2008-05-07,13010.82,13097.77,12756.14,12814.35,4075860000,12814.35
+2008-05-06,12968.89,13071.07,12817.53,13020.83,3924100000,13020.83
+2008-05-05,13056.57,13105.75,12896.50,12969.54,3410090000,12969.54
+2008-05-02,13012.53,13191.49,12931.35,13058.20,3953030000,13058.20
+2008-05-01,12818.34,13079.94,12721.94,13010.00,4448780000,13010.00
+2008-04-30,12831.45,13052.91,12746.45,12820.13,4508890000,12820.13
+2008-04-29,12870.37,12970.27,12737.82,12831.94,3815320000,12831.94
+2008-04-28,12890.76,13015.62,12791.55,12871.75,3607000000,12871.75
+2008-04-25,12848.38,12987.29,12703.70,12891.86,3891150000,12891.86
+2008-04-24,12764.68,12979.88,12651.51,12848.95,4461660000,12848.95
+2008-04-23,12721.45,12883.80,12627.00,12763.22,4103610000,12763.22
+2008-04-22,12825.02,12870.86,12604.53,12720.23,3821900000,12720.23
+2008-04-21,12850.91,12902.69,12666.08,12825.02,3420570000,12825.02
+2008-04-18,12626.76,12965.47,12626.76,12849.36,4222380000,12849.36
+2008-04-17,12617.40,12725.93,12472.71,12620.49,3713880000,12620.49
+2008-04-16,12371.51,12670.56,12371.51,12619.27,4260370000,12619.27
+2008-04-15,12303.60,12459.36,12223.97,12362.47,3581230000,12362.47
+2008-04-14,12324.77,12430.86,12208.42,12302.06,3565020000,12302.06
+2008-04-11,12579.78,12579.78,12280.89,12325.42,3723790000,12325.42
+2008-04-10,12526.78,12705.90,12447.96,12581.98,3686150000,12581.98
+2008-04-09,12574.65,12686.93,12416.53,12527.26,3556670000,12527.26
+2008-04-08,12602.66,12664.38,12440.55,12576.44,3602500000,12576.44
+2008-04-07,12612.59,12786.83,12550.22,12612.43,3747780000,12612.43
+2008-04-04,12626.35,12738.30,12489.40,12609.42,3703100000,12609.42
+2008-04-03,12604.69,12734.97,12455.04,12626.03,3920100000,12626.03
+2008-04-02,12651.67,12790.28,12488.22,12608.92,4320440000,12608.92
+2008-04-01,12266.64,12693.93,12266.64,12654.36,4745120000,12654.36
+2008-03-31,12215.92,12384.84,12095.18,12262.89,4188990000,12262.89
+2008-03-28,12303.92,12441.67,12164.22,12216.40,3686980000,12216.40
+2008-03-27,12421.88,12528.13,12264.76,12302.46,4037930000,12302.46
+2008-03-26,12531.79,12531.79,12309.62,12422.86,4055670000,12422.86
+2008-03-25,12547.34,12639.82,12397.62,12532.60,4145120000,12532.60
+2008-03-24,12361.97,12687.61,12346.17,12548.64,4499000000,12548.64
+2008-03-20,12102.43,12434.34,12024.68,12361.32,6145220000,12361.32
+2008-03-19,12391.52,12525.19,12077.27,12099.66,5358550000,12099.66
+2008-03-18,11975.92,12411.63,11975.92,12392.66,5335630000,12392.66
+2008-03-17,11946.45,12119.69,11650.44,11972.25,5683010000,11972.25
+2008-03-14,12146.39,12249.86,11781.43,11951.09,5153780000,11951.09
+2008-03-13,12096.49,12242.29,11832.88,12145.74,5073360000,12145.74
+2008-03-12,12148.61,12360.58,12037.79,12110.24,4414280000,12110.24
+2008-03-11,11741.33,12205.98,11741.33,12156.81,5109080000,12156.81
+2008-03-10,11893.04,11993.75,11691.47,11740.15,4261240000,11740.15
+2008-03-07,12039.09,12131.33,11778.66,11893.69,4565410000,11893.69
+2008-03-06,12254.59,12267.86,12010.03,12040.39,4323460000,12040.39
+2008-03-05,12204.93,12392.74,12105.36,12254.99,4277710000,12254.99
+2008-03-04,12259.14,12291.22,11991.06,12213.80,4757180000,12213.80
+2008-03-03,12264.36,12344.71,12101.29,12258.90,4117570000,12258.90
+2008-02-29,12579.58,12579.58,12210.30,12266.39,4426730000,12266.39
+2008-02-28,12689.28,12713.99,12463.32,12582.18,3938580000,12582.18
+2008-02-27,12683.54,12815.59,12527.64,12694.28,3904700000,12694.28
+2008-02-26,12569.48,12771.14,12449.08,12684.92,4096060000,12684.92
+2008-02-25,12380.77,12612.47,12292.03,12570.22,3866350000,12570.22
+2008-02-22,12281.09,12429.05,12116.92,12381.02,3572660000,12381.02
+2008-02-21,12426.85,12545.79,12225.36,12284.30,3696660000,12284.30
+2008-02-20,12333.31,12489.29,12159.42,12427.26,3870520000,12427.26
+2008-02-19,12349.59,12571.11,12276.81,12337.22,3613550000,12337.22
+2008-02-15,12376.66,12441.20,12216.68,12348.21,3583300000,12348.21
+2008-02-14,12551.51,12611.26,12332.03,12376.98,3644760000,12376.98
+2008-02-13,12368.12,12627.76,12354.22,12552.24,3856420000,12552.24
+2008-02-12,12241.56,12524.12,12207.90,12373.41,4044640000,12373.41
+2008-02-11,12181.89,12332.76,12006.79,12240.01,3593140000,12240.01
+2008-02-08,12248.47,12330.97,12058.01,12182.13,3768490000,12182.13
+2008-02-07,12196.20,12366.99,12045.00,12247.00,4589160000,12247.00
+2008-02-06,12257.25,12436.33,12142.14,12200.10,4008120000,12200.10
+2008-02-05,12631.85,12631.85,12234.97,12265.13,4315740000,12265.13
+2008-02-04,12743.11,12810.34,12557.61,12635.16,3495780000,12635.16
+2008-02-01,12638.17,12841.88,12510.05,12743.19,4650770000,12743.19
+2008-01-31,12438.28,12734.74,12197.09,12650.36,4970290000,12650.36
+2008-01-30,12480.14,12715.96,12311.55,12442.83,4742760000,12442.83
+2008-01-29,12385.19,12604.92,12262.29,12480.30,4232960000,12480.30
+2008-01-28,12205.71,12423.81,12061.42,12383.89,4100930000,12383.89
+2008-01-25,12391.70,12590.69,12103.61,12207.17,4882250000,12207.17
+2008-01-24,12272.69,12522.82,12114.83,12378.61,5735300000,12378.61
+2008-01-23,11969.08,12339.10,11530.12,12270.17,3241680000,12270.17
+2008-01-22,12092.72,12167.42,11508.74,11971.19,6544690000,11971.19
+2008-01-18,12159.94,12441.85,11953.71,12099.30,6004840000,12099.30
+2008-01-17,12467.05,12597.85,12089.38,12159.21,5303130000,12159.21
+2008-01-16,12476.81,12699.05,12294.48,12466.16,5440620000,12466.16
+2008-01-15,12777.50,12777.50,12425.92,12501.11,4601640000,12501.11
+2008-01-14,12613.78,12866.10,12596.95,12778.15,3682090000,12778.15
+2008-01-11,12850.74,12863.34,12495.91,12606.30,4495840000,12606.30
+2008-01-10,12733.11,12931.29,12632.15,12853.09,5170490000,12853.09
+2008-01-09,12590.21,12814.97,12431.53,12735.31,5351030000,12735.31
+2008-01-08,12820.90,12998.11,12511.03,12589.07,4705390000,12589.07
+2008-01-07,12801.15,12984.95,12640.44,12827.49,4221260000,12827.49
+2008-01-04,13046.56,13049.65,12740.51,12800.18,4166000000,12800.18
+2008-01-03,13044.12,13197.43,12968.44,13056.72,3429500000,13056.72
+2008-01-02,13261.82,13338.23,12969.42,13043.96,3452650000,13043.96
+2007-12-31,13364.16,13423.91,13197.35,13264.82,2440880000,13264.82
+2007-12-28,13361.23,13494.30,13272.14,13365.87,2420510000,13365.87
+2007-12-27,13549.17,13551.53,13325.71,13359.61,2365770000,13359.61
+2007-12-26,13547.95,13614.53,13440.16,13551.69,2010500000,13551.69
+2007-12-24,13487.12,13562.72,13451.35,13550.04,2200000,13550.04
+2007-12-21,13241.66,13518.20,13241.66,13450.65,4508590000,13450.65
+2007-12-20,13206.46,13354.00,13112.98,13245.64,3526890000,13245.64
+2007-12-19,13231.98,13368.79,13097.77,13207.27,3401300000,13207.27
+2007-12-18,13168.66,13346.84,13059.32,13232.47,3723690000,13232.47
+2007-12-17,13339.20,13378.38,13111.92,13167.20,3569030000,13167.20
+2007-12-14,13515.11,13557.54,13284.66,13339.85,3401050000,13339.85
+2007-12-13,13473.98,13586.73,13281.00,13517.96,3635170000,13517.96
+2007-12-12,13434.80,13778.98,13299.61,13473.90,4482120000,13473.90
+2007-12-11,13726.87,13850.92,13374.89,13432.77,4080180000,13432.77
+2007-12-10,13623.55,13807.02,13582.50,13727.03,2911760000,13727.03
+2007-12-07,13618.27,13744.02,13514.22,13625.58,3177710000,13625.58
+2007-12-06,13445.85,13652.49,13362.37,13619.89,3568570000,13619.89
+2007-12-05,13244.01,13513.00,13244.01,13444.96,3663660000,13444.96
+2007-12-04,13311.24,13395.21,13139.56,13248.73,3343620000,13248.73
+2007-12-03,13368.22,13490.24,13207.60,13314.57,3323250000,13314.57
+2007-11-30,13314.25,13570.31,13225.32,13371.72,4422200000,13371.72
+2007-11-29,13287.91,13399.03,13150.21,13311.73,3524730000,13311.73
+2007-11-28,12958.04,13353.51,12958.04,13289.45,4508020000,13289.45
+2007-11-27,12744.78,13040.38,12711.98,12958.44,4320720000,12958.44
+2007-11-26,12979.99,13104.44,12707.26,12743.44,3706470000,12743.44
+2007-11-23,12889.45,12981.56,12796.29,12980.88,1612720000,12980.88
+2007-11-21,13006.65,13055.59,12725.39,12799.04,4076230000,12799.04
+2007-11-20,12955.92,13179.23,12800.74,13010.14,4875150000,13010.14
+2007-11-19,13176.30,13195.48,12871.14,12958.44,4119650000,12958.44
+2007-11-16,13109.48,13293.44,12987.22,13176.79,4168870000,13176.79
+2007-11-15,13230.68,13333.59,13007.95,13110.05,3941010000,13110.05
+2007-11-14,13305.47,13465.20,13159.88,13231.01,4031470000,13231.01
+2007-11-13,12975.11,13357.57,12975.11,13307.09,4141310000,13307.09
+2007-11-12,13039.16,13238.73,12910.40,12987.55,4192520000,12987.55
+2007-11-09,13261.17,13321.81,12920.65,13042.74,4587050000,13042.74
+2007-11-08,13299.70,13463.66,13001.93,13266.29,5439720000,13266.29
+2007-11-07,13646.72,13646.72,13269.46,13300.02,4353160000,13300.02
+2007-11-06,13542.34,13716.55,13460.73,13660.94,3879160000,13660.94
+2007-11-05,13592.58,13666.15,13393.67,13543.40,3819330000,13543.40
+2007-11-02,13569.90,13708.58,13381.64,13595.10,4285990000,13595.10
+2007-11-01,13924.16,13924.16,13522.75,13567.87,4241470000,13567.87
+2007-10-31,13792.06,13990.65,13711.59,13930.01,3953070000,13930.01
+2007-10-30,13869.04,13930.91,13719.80,13792.47,3212520000,13792.47
+2007-10-29,13807.35,13966.18,13748.33,13870.26,3124480000,13870.26
+2007-10-26,13675.66,13885.95,13622.01,13806.70,3612120000,13806.70
+2007-10-25,13677.85,13819.78,13471.87,13671.92,4183960000,13671.92
+2007-10-24,13675.58,13751.50,13423.74,13675.25,4003300000,13675.25
+2007-10-23,13568.93,13754.91,13494.95,13676.23,3309120000,13676.23
+2007-10-22,13521.62,13636.80,13337.90,13566.97,3471830000,13566.97
+2007-10-19,13888.47,13888.47,13478.94,13522.02,4160970000,13522.02
+2007-10-18,13887.90,13984.39,13746.22,13888.96,3203210000,13888.96
+2007-10-17,13920.66,14075.84,13738.66,13892.54,3638070000,13892.54
+2007-10-16,13986.34,14061.37,13810.68,13912.94,3234560000,13912.94
+2007-10-15,14092.43,14157.38,13877.82,13984.80,3139290000,13984.80
+2007-10-12,14016.34,14168.51,13949.85,14093.08,2788690000,14093.08
+2007-10-11,14079.10,14279.96,13917.82,14015.12,3911260000,14015.12
+2007-10-10,14165.02,14225.66,13963.26,14078.69,3044760000,14078.69
+2007-10-09,14043.73,14198.83,13980.90,14164.53,2932040000,14164.53
+2007-10-08,14065.36,14134.05,13747.41,14043.73,2040650000,14043.73
+2007-10-05,13969.07,14169.49,13965.05,14066.01,2919030000,14066.01
+2007-10-04,13967.89,14074.54,13894.98,13974.31,2690430000,13974.31
+2007-10-03,14038.86,14090.48,13883.43,13968.05,3065320000,13968.05
+2007-10-02,14087.14,14166.16,13951.72,14047.31,3101910000,14047.31
+2007-10-01,13895.71,14147.30,13869.86,14087.55,3281990000,14087.55
+2007-09-28,13912.94,13994.64,13802.96,13895.63,2925350000,13895.63
+2007-09-27,13879.53,13991.63,13811.17,13912.94,2872180000,13912.94
+2007-09-26,13779.30,13962.61,13741.26,13878.15,3237390000,13878.15
+2007-09-25,13757.84,13847.10,13629.16,13778.65,3187770000,13778.65
+2007-09-24,13821.57,13930.74,13702.89,13759.06,3131310000,13759.06
+2007-09-21,13768.33,13948.95,13740.61,13820.19,3679460000,13820.19
+2007-09-20,13813.52,13893.02,13680.21,13766.70,2957700000,13766.70
+2007-09-19,13740.61,13936.68,13689.80,13815.56,3846750000,13815.56
+2007-09-18,13403.18,13772.15,13379.68,13739.39,3708940000,13739.39
+2007-09-17,13441.95,13514.71,13306.69,13403.42,2598390000,13403.42
+2007-09-14,13421.39,13507.55,13273.68,13442.52,2641740000,13442.52
+2007-09-13,13292.38,13519.91,13292.38,13424.88,2877080000,13424.88
+2007-09-12,13298.31,13408.62,13195.40,13291.65,2885720000,13291.65
+2007-09-11,13129.40,13369.77,13124.68,13308.39,3015330000,13308.39
+2007-09-10,13116.39,13280.67,12992.02,13127.85,2835720000,13127.85
+2007-09-07,13360.74,13360.74,13059.16,13113.38,3191080000,13113.38
+2007-09-06,13306.44,13464.79,13217.11,13363.35,2459590000,13363.35
+2007-09-05,13442.85,13442.85,13203.86,13305.47,2991600000,13305.47
+2007-09-04,13358.39,13521.86,13248.57,13448.86,2766600000,13448.86
+2007-08-31,13240.84,13472.35,13240.84,13357.74,2731610000,13357.74
+2007-08-30,13287.91,13355.46,13126.39,13238.73,2582960000,13238.73
+2007-08-29,13043.07,13336.93,13020.63,13289.29,2824070000,13289.29
+2007-08-28,13318.43,13319.61,13024.29,13041.85,3078090000,13041.85
+2007-08-27,13377.16,13438.46,13248.32,13322.13,2406180000,13322.13
+2007-08-24,13231.78,13402.20,13174.27,13378.87,2541400000,13378.87
+2007-08-23,13237.27,13358.22,13127.69,13235.88,3084390000,13235.88
+2007-08-22,13088.26,13304.33,13075.34,13236.13,3309120000,13236.13
+2007-08-21,13120.05,13228.57,12975.68,13090.86,3012150000,13090.86
+2007-08-20,13078.51,13245.80,12938.77,13121.35,3321340000,13121.35
+2007-08-17,12848.05,13289.70,12847.24,13079.08,3570040000,13079.08
+2007-08-16,12859.52,12996.73,12455.92,12845.78,6509300000,12845.78
+2007-08-15,13021.93,13184.51,12800.83,12861.47,4290930000,12861.47
+2007-08-14,13235.72,13309.04,12974.30,13028.92,3814630000,13028.92
+2007-08-13,13238.24,13440.08,13163.54,13236.53,3696280000,13236.53
+2007-08-10,13270.59,13386.43,12958.04,13239.54,5345780000,13239.54
+2007-08-09,13652.33,13675.66,13196.05,13270.68,5889600000,13270.68
+2007-08-08,13497.23,13769.63,13386.92,13657.86,5499560000,13657.86
+2007-08-07,13467.72,13635.09,13282.38,13504.30,4909390000,13504.30
+2007-08-06,13183.13,13501.86,13077.05,13468.78,5067200000,13468.78
+2007-08-03,13462.25,13539.50,13156.79,13181.91,4272110000,13181.91
+2007-08-02,13357.82,13547.47,13272.79,13463.33,4368850000,13463.33
+2007-08-01,13211.09,13431.06,13041.77,13362.37,5256780000,13362.37
+2007-07-31,13360.66,13579.41,13182.15,13211.99,4524520000,13211.99
+2007-07-30,13266.21,13445.12,13143.87,13358.31,4128780000,13358.31
+2007-07-27,13472.68,13589.17,13228.57,13265.47,4784650000,13265.47
+2007-07-26,13783.12,13793.61,13307.74,13473.57,4472550000,13473.57
+2007-07-25,13718.25,13919.77,13607.70,13785.07,4283200000,13785.07
+2007-07-24,13940.90,13967.65,13661.51,13716.95,4115830000,13716.95
+2007-07-23,13851.73,14039.59,13819.54,13943.42,3102700000,13943.42
+2007-07-20,14000.73,14039.67,13745.65,13851.08,3745780000,13851.08
+2007-07-19,13918.79,14121.04,13860.18,14000.41,3251450000,14000.41
+2007-07-18,13955.05,14020.89,13768.73,13918.22,3609220000,13918.22
+2007-07-17,13951.96,14095.60,13880.67,13971.55,3007140000,13971.55
+2007-07-16,13907.09,14053.57,13834.33,13950.98,2704110000,13950.98
+2007-07-13,13859.86,13982.93,13784.83,13907.25,2801120000,13907.25
+2007-07-12,13579.33,13889.45,13579.33,13861.73,3489600000,13861.73
+2007-07-11,13500.40,13638.75,13435.45,13577.87,3082920000,13577.87
+2007-07-10,13648.59,13685.90,13463.57,13501.70,3244280000,13501.70
+2007-07-09,13612.66,13739.06,13563.89,13649.97,2715330000,13649.97
+2007-07-06,13559.01,13670.46,13501.54,13611.68,2441520000,13611.68
+2007-07-05,13576.24,13637.78,13459.84,13565.84,2622950000,13565.84
+2007-07-03,13556.87,13592.07,13531.83,13577.30,1560790000,13577.30
+2007-07-02,13409.60,13586.97,13406.59,13535.43,2648990000,13535.43
+2007-06-29,13422.61,13556.16,13291.32,13408.62,3165410000,13408.62
+2007-06-28,13427.48,13537.47,13342.05,13422.28,3006710000,13422.28
+2007-06-27,13336.93,13455.36,13205.08,13427.73,3398150000,13427.73
+2007-06-26,13352.37,13491.70,13272.79,13337.66,3398530000,13337.66
+2007-06-25,13360.09,13519.34,13273.68,13352.05,3287250000,13352.05
+2007-06-22,13545.03,13564.13,13323.51,13360.26,4284320000,13360.26
+2007-06-21,13486.66,13596.56,13368.79,13545.84,3161110000,13545.84
+2007-06-20,13636.56,13735.08,13469.43,13489.42,3286900000,13489.42
+2007-06-19,13611.68,13705.41,13527.14,13635.42,2873590000,13635.42
+2007-06-18,13639.00,13720.29,13560.15,13612.98,2480240000,13612.98
+2007-06-15,13556.65,13741.18,13556.65,13639.48,3406030000,13639.48
+2007-06-14,13482.43,13622.66,13444.07,13553.73,2813630000,13553.73
+2007-06-13,13287.62,13502.76,13287.62,13482.35,3077930000,13482.35
+2007-06-12,13424.39,13474.12,13264.05,13295.01,3056200000,13295.01
+2007-06-11,13423.74,13519.88,13335.16,13424.96,2525280000,13424.96
+2007-06-08,13267.14,13445.19,13207.73,13424.39,2993460000,13424.39
+2007-06-07,13463.48,13517.85,13236.34,13266.73,3538470000,13266.73
+2007-06-06,13590.66,13606.75,13403.10,13465.67,2964190000,13465.67
+2007-06-05,13673.19,13689.40,13523.70,13595.46,2939450000,13595.46
+2007-06-04,13667.21,13723.37,13575.14,13676.32,2738930000,13676.32
+2007-06-01,13628.69,13756.69,13562.54,13668.11,2927020000,13668.11
+2007-05-31,13633.00,13718.82,13564.49,13627.64,3335530000,13627.64
+2007-05-30,13517.89,13650.64,13403.26,13633.08,2980210000,13633.08
+2007-05-29,13507.28,13603.26,13428.86,13521.34,2571790000,13521.34
+2007-05-25,13441.94,13571.48,13410.00,13507.28,2316250000,13507.28
+2007-05-24,13522.60,13645.52,13391.56,13441.13,3365530000,13441.13
+2007-05-23,13540.84,13648.69,13476.72,13525.65,3084260000,13525.65
+2007-05-22,13544.99,13632.03,13466.57,13539.95,2860500000,13539.95
+2007-05-21,13556.53,13636.98,13473.31,13542.88,3465360000,13542.88
+2007-05-18,13476.40,13611.95,13454.46,13556.53,2959050000,13556.53
+2007-05-17,13486.96,13558.24,13384.89,13476.72,2868640000,13476.72
+2007-05-16,13374.13,13526.54,13325.49,13487.53,2915350000,13487.53
+2007-05-15,13346.05,13518.33,13302.65,13383.84,3071020000,13383.84
+2007-05-14,13325.81,13432.84,13265.02,13346.78,2776130000,13346.78
+2007-05-11,13212.20,13373.35,13192.62,13326.22,2720780000,13326.22
+2007-05-10,13359.05,13376.20,13161.08,13215.13,3031240000,13215.13
+2007-05-09,13300.62,13410.17,13229.92,13362.87,2935550000,13362.87
+2007-05-08,13309.40,13359.05,13192.45,13309.07,2795720000,13309.07
+2007-05-07,13264.13,13385.06,13218.87,13312.97,2545090000,13312.97
+2007-05-04,13243.08,13340.60,13176.61,13264.62,2761930000,13264.62
+2007-05-03,13206.65,13306.55,13131.42,13241.38,3007970000,13241.38
+2007-05-02,13133.94,13291.60,13105.34,13211.88,3189800000,13211.88
+2007-05-01,13062.75,13188.96,12993.02,13136.14,3400350000,13136.14
+2007-04-30,13120.21,13226.99,13003.91,13062.91,3093420000,13062.91
+2007-04-27,13104.04,13195.05,13002.37,13120.94,2732810000,13120.94
+2007-04-26,13088.84,13197.49,13016.43,13105.50,3211800000,13105.50
+2007-04-25,12951.42,13142.31,12929.80,13089.89,3252590000,13089.89
+2007-04-24,12919.64,13033.66,12845.12,12953.94,3119750000,12953.94
+2007-04-23,12961.49,13029.59,12867.96,12919.40,2575020000,12919.40
+2007-04-20,12811.15,13035.77,12811.15,12961.98,3329940000,12961.98
+2007-04-19,12799.77,12889.17,12677.47,12808.63,2913610000,12808.63
+2007-04-18,12771.08,12871.21,12691.20,12803.84,2971330000,12803.84
+2007-04-17,12719.56,12837.40,12669.50,12773.04,2920570000,12773.04
+2007-04-16,12611.64,12770.60,12596.36,12720.46,2870140000,12720.46
+2007-04-13,12551.91,12654.47,12504.04,12612.13,2690020000,12612.13
+2007-04-12,12483.64,12580.92,12407.50,12552.96,2770570000,12552.96
+2007-04-11,12573.12,12618.63,12432.53,12484.62,2950190000,12484.62
+2007-04-10,12568.49,12641.87,12496.48,12573.85,2510110000,12573.85
+2007-04-09,12562.64,12641.22,12505.83,12569.14,2349410000,12569.14
+2007-04-05,12505.73,12573.02,12501.25,12560.83,2357230000,12560.83
+2007-04-04,12511.36,12591.81,12444.55,12530.05,2616320000,12530.05
+2007-04-03,12431.28,12534.49,12378.94,12510.93,2921760000,12510.93
+2007-04-02,12354.52,12450.81,12284.54,12382.30,2875880000,12382.30
+2007-03-30,12348.91,12442.40,12237.87,12354.35,2903960000,12354.35
+2007-03-29,12301.48,12424.77,12251.89,12348.75,2854710000,12348.75
+2007-03-28,12396.49,12415.56,12234.50,12300.36,3000440000,12300.36
+2007-03-27,12468.59,12484.54,12336.89,12397.29,2673040000,12397.29
+2007-03-26,12480.37,12526.27,12339.53,12469.07,2754660000,12469.07
+2007-03-23,12460.50,12550.07,12396.89,12481.01,2619020000,12481.01
+2007-03-22,12446.72,12524.03,12364.21,12461.14,3129970000,12461.14
+2007-03-21,12288.98,12489.02,12220.49,12447.52,3184770000,12447.52
+2007-03-20,12226.81,12324.31,12172.66,12288.10,2795940000,12288.10
+2007-03-19,12110.41,12273.52,12110.41,12226.17,2777180000,12226.17
+2007-03-16,12160.16,12226.01,12053.05,12110.41,3393640000,12110.41
+2007-03-15,12133.16,12228.42,12060.10,12159.68,2821900000,12159.68
+2007-03-14,12074.52,12187.88,11926.79,12133.40,3758350000,12133.40
+2007-03-13,12307.49,12319.66,12049.85,12075.96,3485570000,12075.96
+2007-03-12,12275.68,12385.44,12205.58,12318.62,2664000000,12318.62
+2007-03-09,12262.06,12379.51,12200.62,12276.32,2623050000,12276.32
+2007-03-08,12193.33,12355.47,12183.79,12260.70,3014850000,12260.70
+2007-03-07,12204.46,12315.18,12122.11,12192.45,3141350000,12192.45
+2007-03-06,12051.17,12252.61,12051.17,12207.59,3358160000,12207.59
+2007-03-05,12111.61,12220.16,11973.58,12050.41,3480520000,12050.41
+2007-03-02,12233.78,12293.15,12064.91,12114.10,3312260000,12114.10
+2007-03-01,12265.59,12338.89,11996.17,12234.34,3874910000,12234.34
+2007-02-28,12214.92,12396.81,12122.03,12268.63,3925250000,12268.63
+2007-02-27,12628.90,12628.90,12078.85,12216.24,4065230000,12216.24
+2007-02-26,12647.88,12746.34,12562.72,12632.26,2822170000,12632.26
+2007-02-23,12679.89,12726.79,12578.51,12647.48,2579950000,12647.48
+2007-02-22,12735.77,12792.97,12621.93,12686.02,1950770000,12686.02
+2007-02-21,12782.87,12813.88,12662.79,12738.41,2606980000,12738.41
+2007-02-20,12766.85,12845.76,12675.04,12786.64,2337860000,12786.64
+2007-02-16,12764.13,12829.42,12685.86,12767.57,2399450000,12767.57
+2007-02-15,12741.70,12828.38,12681.85,12765.01,2490920000,12765.01
+2007-02-14,12651.29,12793.29,12623.21,12741.86,2699290000,12741.86
+2007-02-13,12549.19,12702.36,12549.19,12654.85,2652150000,12654.85
+2007-02-12,12595.90,12605.11,12536.77,12552.55,2395680000,12552.55
+2007-02-09,12638.03,12725.59,12518.58,12580.83,2951810000,12580.83
+2007-02-08,12639.16,12666.88,12576.59,12637.63,2816180000,12637.63
+2007-02-07,12656.86,12748.99,12589.56,12666.87,2618820000,12666.87
+2007-02-06,12661.66,12738.41,12586.44,12666.31,2608710000,12666.31
+2007-02-05,12641.08,12681.06,12630.50,12661.74,2439430000,12661.74
+2007-02-02,12673.84,12740.65,12582.99,12653.49,2569450000,12653.49
+2007-02-01,12617.20,12741.30,12563.85,12673.68,2914890000,12673.68
+2007-01-31,12520.03,12685.54,12461.30,12621.69,2976690000,12621.69
+2007-01-30,12484.70,12538.06,12463.07,12523.31,2706250000,12523.31
+2007-01-29,12487.10,12599.74,12422.93,12490.78,2730480000,12490.78
+2007-01-26,12503.28,12582.67,12391.44,12487.02,2626620000,12487.02
+2007-01-25,12621.77,12670.48,12461.54,12502.56,2994330000,12502.56
+2007-01-24,12534.37,12659.42,12489.98,12621.77,2783180000,12621.77
+2007-01-23,12467.96,12553.44,12467.96,12533.80,2975070000,12533.80
+2007-01-22,12566.33,12619.04,12389.68,12477.16,2540120000,12477.16
+2007-01-19,12567.93,12649.89,12462.50,12565.53,2777480000,12565.53
+2007-01-18,12575.06,12674.16,12487.90,12567.93,2822430000,12567.93
+2007-01-17,12563.53,12613.28,12550.95,12577.15,2690270000,12577.15
+2007-01-16,12555.84,12638.27,12489.90,12582.59,2599530000,12582.59
+2007-01-12,12514.66,12616.08,12432.30,12556.08,2686480000,12556.08
+2007-01-11,12442.96,12586.12,12413.72,12514.98,2857870000,12514.98
+2007-01-10,12417.00,12487.18,12313.01,12442.16,2764660000,12442.16
+2007-01-09,12424.77,12516.66,12337.85,12416.60,3038380000,12416.60
+2007-01-08,12393.93,12445.37,12337.53,12423.49,2763340000,12423.49
+2007-01-05,12480.05,12504.40,12326.79,12398.01,2919400000,12398.01
+2007-01-04,12467.32,12510.26,12405.47,12480.69,3004460000,12480.69
+2007-01-03,12459.54,12630.34,12373.82,12474.52,3429160000,12474.52
+2006-12-29,12500.48,12560.16,12423.81,12463.15,1678200000,12463.15
+2006-12-28,12510.57,12566.17,12440.23,12501.52,1508570000,12501.52
+2006-12-27,12463.46,12518.34,12407.62,12510.57,1667370000,12510.57
+2006-12-26,12341.94,12439.19,12301.40,12407.63,1310310000,12407.63
+2006-12-22,12407.87,12417.96,12341.77,12343.21,1647590000,12343.21
+2006-12-21,12461.62,12526.59,12369.97,12421.25,2322410000,12421.25
+2006-12-20,12471.32,12549.35,12393.45,12463.87,2387630000,12463.87
+2006-12-19,12439.51,12517.78,12348.50,12471.32,2717060000,12471.32
+2006-12-18,12446.24,12545.74,12372.30,12441.27,2568140000,12441.27
+2006-12-15,12417.96,12536.37,12377.35,12445.52,3229580000,12445.52
+2006-12-14,12317.50,12472.76,12271.44,12416.76,2729700000,12416.76
+2006-12-13,12312.71,12411.55,12263.19,12317.50,2552260000,12317.50
+2006-12-12,12328.24,12396.01,12222.65,12315.58,2738170000,12315.58
+2006-12-11,12306.21,12399.54,12245.32,12328.48,2289900000,12328.48
+2006-12-08,12256.21,12332.16,12243.31,12307.48,2440460000,12307.48
+2006-12-07,12310.13,12396.33,12233.06,12278.41,2743150000,12278.41
+2006-12-06,12328.72,12390.88,12239.95,12309.25,2725280000,12309.25
+2006-12-05,12283.69,12398.57,12218.24,12331.60,2755700000,12331.60
+2006-12-04,12195.57,12349.87,12149.27,12283.85,2766320000,12283.85
+2006-12-01,12220.97,12289.30,12070.52,12194.13,2800980000,12194.13
+2006-11-30,12226.73,12317.10,12118.42,12221.93,4006230000,12221.93
+2006-11-29,12134.40,12283.05,12119.70,12226.73,2790970000,12226.73
+2006-11-28,12095.27,12148.78,12073.40,12136.44,2639750000,12136.44
+2006-11-27,12279.13,12303.32,12079.01,12121.71,2711210000,12121.71
+2006-11-24,12321.71,12340.89,12219.28,12280.17,832550000,12280.17
+2006-11-22,12321.91,12403.54,12238.43,12326.95,2237710000,12326.95
+2006-11-21,12312.13,12409.31,12233.94,12321.59,2597940000,12321.59
+2006-11-20,12340.71,12400.10,12257.34,12316.54,2546710000,12316.54
+2006-11-17,12293.49,12342.55,12278.20,12342.55,2726100000,12342.55
+2006-11-16,12250.05,12375.37,12204.00,12305.82,2835730000,12305.82
+2006-11-15,12214.37,12326.07,12156.37,12251.71,2831130000,12251.71
+2006-11-14,12132.44,12261.15,12051.68,12218.01,3027480000,12218.01
+2006-11-13,12084.89,12164.22,12084.89,12131.88,2386340000,12131.88
+2006-11-10,12102.74,12173.08,12074.01,12108.43,2290200000,12108.43
+2006-11-09,12174.70,12236.10,12039.59,12103.30,3012050000,12103.30
+2006-11-08,12147.38,12233.54,12051.60,12176.54,2814820000,12176.54
+2006-11-07,12104.75,12239.94,12065.20,12156.77,2636390000,12156.77
+2006-11-06,11985.16,12146.45,11973.23,12105.55,2533550000,12105.55
+2006-11-03,12018.30,12095.30,11928.97,11986.04,2419730000,11986.04
+2006-11-02,12023.98,12070.25,11938.89,12018.54,2646180000,12018.54
+2006-11-01,12080.25,12160.70,11972.99,12031.02,2821160000,12031.02
+2006-10-31,12086.18,12160.46,11986.84,12080.73,2803030000,12080.73
+2006-10-30,12074.01,12117.07,12050.23,12086.49,2770440000,12086.49
+2006-10-27,12164.78,12202.72,12024.78,12090.26,2458450000,12090.26
+2006-10-26,12134.84,12236.10,12037.99,12163.66,2793350000,12163.66
+2006-10-25,12127.24,12212.16,12017.66,12134.68,2953540000,12134.68
+2006-10-24,12116.51,12204.80,12028.14,12127.88,2876890000,12127.88
+2006-10-23,12001.33,12177.35,11940.41,12116.91,2480430000,12116.91
+2006-10-20,12013.01,12087.38,11881.34,12002.37,2526410000,12002.37
+2006-10-19,11988.92,12082.33,11911.44,12011.73,2619830000,12011.73
+2006-10-18,11947.62,12108.91,11900.79,11992.68,2658840000,11992.68
+2006-10-17,11977.40,12024.54,11849.16,11950.02,2519620000,11950.02
+2006-10-16,11957.70,11996.92,11945.70,11980.59,2305920000,11980.59
+2006-10-13,11947.22,12009.97,11862.29,11960.51,2482920000,11960.51
+2006-10-12,11896.63,11959.14,11852.12,11947.70,2514350000,11947.70
+2006-10-11,11865.49,11907.60,11762.72,11852.13,2521000000,11852.13
+2006-10-10,11857.73,11930.33,11778.09,11867.17,2376140000,11867.17
+2006-10-09,11849.56,11923.53,11759.36,11857.81,1935170000,11857.81
+2006-10-06,11865.49,11921.04,11743.35,11850.21,2523000000,11850.21
+2006-10-05,11832.51,11869.33,11821.55,11866.69,2817240000,11866.69
+2006-10-04,11722.94,11879.18,11654.02,11850.61,3019880000,11850.61
+2006-10-03,11670.11,11794.41,11608.23,11727.34,2682690000,11727.34
+2006-10-02,11678.99,11773.60,11608.79,11670.35,2154480000,11670.35
+2006-09-29,11718.05,11782.49,11642.17,11679.07,2273430000,11679.07
+2006-09-28,11689.40,11775.36,11625.92,11718.45,2397820000,11718.45
+2006-09-27,11670.19,11775.60,11595.75,11689.24,2749190000,11689.24
+2006-09-26,11575.73,11723.74,11517.54,11669.39,2673350000,11669.39
+2006-09-25,11536.67,11616.23,11486.00,11575.81,2710240000,11575.81
+2006-09-22,11532.91,11588.62,11423.57,11508.10,2162880000,11508.10
+2006-09-21,11611.67,11677.39,11471.76,11533.23,2627440000,11533.23
+2006-09-20,11542.28,11680.19,11514.50,11613.19,2543070000,11613.19
+2006-09-19,11554.60,11605.67,11450.30,11540.91,2390850000,11540.91
+2006-09-18,11538.35,11588.22,11528.43,11555.00,2325080000,11555.00
+2006-09-15,11528.75,11661.38,11504.57,11560.77,3198030000,11560.77
+2006-09-14,11508.82,11548.84,11495.77,11527.39,2351220000,11527.39
+2006-09-13,11487.69,11605.59,11423.73,11543.32,2597220000,11543.32
+2006-09-12,11412.52,11512.74,11396.83,11498.09,2791580000,11498.09
+2006-09-11,11389.87,11468.88,11295.90,11396.84,2506430000,11396.84
+2006-09-08,11332.24,11448.30,11295.18,11392.11,2132890000,11392.11
+2006-09-07,11405.16,11443.66,11273.89,11331.44,2325850000,11331.44
+2006-09-06,11421.33,11469.27,11395.15,11406.20,2329870000,11406.20
+2006-09-05,11461.83,11533.87,11385.95,11469.28,2114480000,11469.28
+2006-09-01,11427.41,11476.40,11381.14,11464.15,1800520000,11464.15
+2006-08-31,11383.47,11451.03,11326.80,11381.15,1974540000,11381.15
+2006-08-30,11365.98,11452.95,11309.99,11382.91,2060690000,11382.91
+2006-08-29,11352.65,11432.38,11255.88,11369.94,2093720000,11369.94
+2006-08-28,11285.33,11411.24,11240.91,11352.01,1834920000,11352.01
+2006-08-25,11301.22,11350.09,11218.66,11284.05,1667580000,11284.05
+2006-08-24,11297.82,11386.59,11232.83,11304.46,1930320000,11304.46
+2006-08-23,11337.12,11394.75,11238.67,11297.90,1893670000,11297.90
+2006-08-22,11344.41,11426.13,11279.25,11339.84,1908740000,11339.84
+2006-08-21,11353.29,11381.46,11322.31,11345.04,1759240000,11345.04
+2006-08-18,11333.76,11437.66,11273.49,11381.47,2033910000,11381.47
+2006-08-17,11321.19,11372.34,11298.54,11334.96,2458340000,11334.96
+2006-08-16,11224.91,11373.78,11207.85,11327.12,2554570000,11327.12
+2006-08-15,11098.03,11271.25,11098.03,11230.26,2334100000,11230.26
+2006-08-14,11089.07,11242.83,11049.68,11097.87,2118020000,11097.87
+2006-08-11,11103.55,11121.40,11042.88,11088.02,2004540000,11088.02
+2006-08-10,11073.14,11176.47,10998.06,11124.37,2402190000,11124.37
+2006-08-09,11168.47,11296.22,11044.64,11076.18,2555180000,11076.18
+2006-08-08,11218.18,11319.51,11117.80,11173.59,2457840000,11173.59
+2006-08-07,11239.47,11294.14,11143.02,11219.38,2045660000,11219.38
+2006-08-04,11244.59,11367.94,11165.11,11240.35,2530970000,11240.35
+2006-08-03,11195.28,11304.78,11101.55,11242.59,2728440000,11242.59
+2006-08-02,11167.91,11228.98,11124.52,11199.92,2610750000,11199.92
+2006-08-01,11184.80,11210.65,11035.92,11125.73,2527690000,11125.73
+2006-07-31,11218.90,11265.80,11115.24,11185.68,2461300000,11185.68
+2006-07-28,11102.11,11282.05,11102.11,11219.70,2480420000,11219.70
+2006-07-27,11104.19,11245.47,11040.80,11100.43,2776710000,11100.43
+2006-07-26,11102.91,11208.09,10987.41,11102.51,2667710000,11102.51
+2006-07-25,11037.59,11133.73,11000.05,11103.71,2563930000,11103.71
+2006-07-24,10868.70,11096.35,10868.70,11051.05,2312720000,11051.05
+2006-07-21,10937.94,10995.73,10778.58,10868.38,2704090000,10868.38
+2006-07-20,11007.26,11098.75,10884.47,10928.10,2345580000,10928.10
+2006-07-19,10854.22,11038.16,10796.74,11011.42,2701980000,11011.42
+2006-07-18,10745.84,10867.02,10658.35,10799.23,2481750000,10799.23
+2006-07-17,10739.35,10858.22,10668.35,10747.36,2146410000,10747.36
+2006-07-14,10846.53,10892.64,10664.43,10739.35,2467120000,10739.35
+2006-07-13,11012.62,11015.19,10790.82,10846.29,2545760000,10846.29
+2006-07-12,11133.97,11181.12,10973.37,11013.18,2250450000,11013.18
+2006-07-11,11102.59,11186.32,10987.33,11134.77,2310850000,11134.77
+2006-07-10,11130.53,11174.47,11090.10,11103.55,1854590000,11103.55
+2006-07-07,11224.18,11227.62,11040.32,11090.67,1988150000,11090.67
+2006-07-06,11147.12,11301.58,11117.16,11225.30,2009160000,11225.30
+2006-07-05,11225.06,11239.47,11083.94,11151.82,2165070000,11151.82
+2006-07-03,11149.34,11277.09,11146.06,11228.02,1114470000,11228.02
+2006-06-30,11190.80,11288.86,11100.11,11150.22,3049560000,11150.22
+2006-06-29,10974.36,11225.06,10974.36,11190.80,2621250000,11190.80
+2006-06-28,10925.30,11026.07,10869.02,10973.56,2085490000,10973.56
+2006-06-27,11048.24,11064.09,10920.73,10924.74,2203130000,10924.74
+2006-06-26,10990.29,11089.07,10937.06,11045.28,1878580000,11045.28
+2006-06-23,11019.19,11098.67,10932.82,10989.09,2017270000,10989.09
+2006-06-22,11077.78,11127.73,10954.83,11019.11,2148180000,11019.11
+2006-06-21,10975.24,11165.91,10952.43,11079.46,2361230000,11079.46
+2006-06-20,10942.03,11066.73,10895.28,10974.84,2232950000,10974.84
+2006-06-19,11014.87,11098.99,10886.63,10942.11,2517200000,10942.11
+2006-06-16,11009.10,11045.04,10984.29,11014.54,2783390000,11014.54
+2006-06-15,10817.48,11049.85,10788.34,11015.19,2775480000,11015.19
+2006-06-14,10713.10,10816.99,10699.25,10816.91,2667990000,10816.91
+2006-06-13,10783.14,10893.04,10653.23,10706.14,3215770000,10706.14
+2006-06-12,10892.00,10969.32,10767.61,10792.58,2247010000,10792.58
+2006-06-09,10939.14,11015.67,10842.89,10891.92,2214000000,10891.92
+2006-06-08,10929.70,11032.15,10726.15,10938.82,3543790000,10938.82
+2006-06-07,11002.06,11107.48,10897.76,10930.90,2644170000,10930.90
+2006-06-06,11048.24,11140.45,10890.24,11002.14,2697650000,11002.14
+2006-06-05,11247.55,11259.96,11025.75,11048.72,2313470000,11048.72
+2006-06-02,11260.52,11329.28,11158.06,11247.87,2295540000,11247.87
+2006-06-01,11169.03,11290.86,11115.40,11260.28,2360160000,11260.28
+2006-05-31,11091.15,11225.78,11050.40,11168.31,2692160000,11168.31
+2006-05-30,11277.25,11277.25,11071.70,11094.43,2176190000,11094.43
+2006-05-26,11211.69,11329.36,11177.43,11278.61,1814020000,11278.61
+2006-05-25,11114.96,11258.12,11089.55,11211.05,2372730000,11211.05
+2006-05-24,11100.11,11241.15,10980.29,11117.32,2999030000,11117.32
+2006-05-23,11126.29,11254.68,11068.49,11098.35,2605250000,11098.35
+2006-05-22,11092.90,11175.03,11040.16,11125.32,2773010000,11125.32
+2006-05-19,11124.37,11254.60,11009.98,11144.06,2982300000,11144.06
+2006-05-18,11206.17,11301.26,11096.35,11128.29,2537490000,11128.29
+2006-05-17,11410.13,11412.28,11139.17,11205.61,2830200000,11205.61
+2006-05-16,11428.21,11520.42,11334.64,11419.89,2386210000,11419.89
+2006-05-15,11380.43,11485.61,11273.65,11428.77,2505660000,11428.77
+2006-05-12,11500.01,11551.40,11336.96,11380.99,2567970000,11380.99
+2006-05-11,11639.29,11660.58,11449.74,11500.73,2531520000,11500.73
+2006-05-10,11630.48,11709.09,11545.64,11642.65,2268550000,11642.65
+2006-05-09,11584.62,11684.28,11535.71,11639.77,2157290000,11639.77
+2006-05-08,11576.37,11665.14,11504.09,11584.54,2151300000,11584.54
+2006-05-05,11440.62,11616.16,11440.62,11577.74,2294760000,11577.74
+2006-05-04,11401.80,11512.18,11366.82,11438.86,2431450000,11438.86
+2006-05-03,11414.69,11472.96,11308.55,11400.28,2395230000,11400.28
+2006-05-02,11372.74,11427.43,11343.28,11416.44,2403470000,11416.44
+2006-05-01,11367.78,11476.96,11304.30,11343.29,2437040000,11343.29
+2006-04-28,11358.33,11462.95,11278.13,11367.14,2419920000,11367.14
+2006-04-27,11349.53,11465.75,11220.74,11382.51,2772010000,11382.51
+2006-04-26,11283.25,11428.77,11256.12,11354.49,2502690000,11354.49
+2006-04-25,11336.56,11401.32,11213.05,11283.25,2366380000,11283.25
+2006-04-24,11346.81,11420.05,11246.35,11336.32,2117330000,11336.32
+2006-04-21,11343.45,11468.16,11272.61,11347.45,2392630000,11347.45
+2006-04-20,11278.53,11429.25,11221.30,11342.89,2512920000,11342.89
+2006-04-19,11265.40,11379.79,11181.84,11278.77,2447310000,11278.77
+2006-04-18,11074.58,11302.30,11064.01,11268.77,2595440000,11268.77
+2006-04-17,11137.33,11203.13,11017.43,11073.78,1794650000,11073.78
+2006-04-13,11130.13,11210.73,11053.29,11137.65,1891940000,11137.65
+2006-04-12,11089.47,11194.00,11052.17,11129.97,1938100000,11129.97
+2006-04-11,11141.33,11220.98,11017.99,11089.63,2232880000,11089.63
+2006-04-10,11119.88,11211.37,11083.06,11141.33,1898320000,11141.33
+2006-04-07,11228.10,11268.92,11108.75,11120.04,2082470000,11120.04
+2006-04-06,11233.01,11294.30,11137.57,11216.50,2281680000,11216.50
+2006-04-05,11203.21,11290.30,11141.82,11239.55,2420020000,11239.55
+2006-04-04,11142.54,11269.17,11094.03,11203.85,2147660000,11203.85
+2006-04-03,11113.00,11287.02,11101.07,11144.94,2494080000,11144.94
+2006-03-31,11151.34,11229.47,11069.78,11109.32,2236710000,11109.32
+2006-03-30,11195.36,11259.08,11118.12,11150.70,2294560000,11150.70
+2006-03-29,11154.94,11283.97,11117.48,11215.70,2143540000,11215.70
+2006-03-28,11250.11,11312.31,11132.05,11154.54,2148580000,11154.54
+2006-03-27,11280.13,11314.96,11194.07,11250.11,2029700000,11250.11
+2006-03-24,11270.61,11353.21,11197.21,11279.97,2326070000,11279.97
+2006-03-23,11317.35,11363.46,11207.85,11270.29,1980940000,11270.29
+2006-03-22,11234.51,11358.01,11200.22,11317.43,2039810000,11317.43
+2006-03-21,11275.89,11364.34,11188.56,11235.47,2147370000,11235.47
+2006-03-20,11278.93,11350.73,11208.33,11274.53,1976830000,11274.53
+2006-03-17,11294.94,11294.94,11253.23,11279.65,2549620000,11279.65
+2006-03-16,11210.97,11324.80,11176.07,11253.24,2292180000,11253.24
+2006-03-15,11149.76,11258.28,11097.23,11209.77,2293000000,11209.77
+2006-03-14,11076.02,11190.96,11030.23,11151.34,2165270000,11151.34
+2006-03-13,11067.61,11157.82,11019.75,11076.02,2070330000,11076.02
+2006-03-10,10972.92,11125.41,10948.43,11076.34,2123450000,11076.34
+2006-03-09,11005.66,11093.39,10923.86,10972.28,2140110000,10972.28
+2006-03-08,10977.08,11065.61,10885.99,11005.74,2442870000,11005.74
+2006-03-07,10957.31,11032.31,10885.35,10980.69,2268050000,10980.69
+2006-03-06,11022.47,11084.66,10899.76,10958.59,2280190000,10958.59
+2006-03-03,11024.23,11125.01,10942.99,11021.59,2152950000,11021.59
+2006-03-02,11052.57,11090.91,10951.71,11025.51,2494590000,11025.51
+2006-03-01,10993.25,11115.80,10960.60,11053.53,2308320000,11053.53
+2006-02-28,11096.75,11115.24,10947.07,10993.41,2370860000,10993.41
+2006-02-27,11062.81,11180.48,11038.72,11097.55,1975320000,11097.55
+2006-02-24,11068.33,11085.38,11010.46,11061.85,1933010000,11061.85
+2006-02-23,11133.52,11167.83,11017.27,11069.22,2144210000,11069.22
+2006-02-22,11086.98,11159.02,11064.25,11137.17,2222380000,11137.17
+2006-02-21,11115.48,11182.68,11011.18,11069.06,2104320000,11069.06
+2006-02-17,11119.56,11178.80,11035.44,11115.32,2128260000,11115.32
+2006-02-16,11059.05,11154.14,10997.66,11120.68,2251490000,11120.68
+2006-02-15,11025.67,11115.56,10940.18,11058.97,2317590000,11058.97
+2006-02-14,10890.72,11071.54,10873.62,11028.39,2437940000,11028.39
+2006-02-13,10915.21,10982.93,10824.60,10892.32,1850080000,10892.32
+2006-02-10,10883.51,10972.76,10787.62,10919.05,2290050000,10919.05
+2006-02-09,10859.42,11003.50,10800.91,10883.35,2441920000,10883.35
+2006-02-08,10742.16,10897.44,10712.30,10858.62,2456860000,10858.62
+2006-02-07,10796.42,10874.79,10691.97,10749.76,2366370000,10749.76
+2006-02-06,10793.30,10868.62,10725.91,10798.27,2132360000,10798.27
+2006-02-03,10849.57,10905.28,10725.35,10793.62,2282210000,10793.62
+2006-02-02,10950.11,10987.73,10800.35,10851.98,2565300000,10851.98
+2006-02-01,10862.14,11001.82,10815.39,10953.95,2589410000,10953.95
+2006-01-31,10900.40,10970.28,10807.55,10864.86,2708310000,10864.86
+2006-01-30,10913.13,10930.34,10887.67,10899.92,2282730000,10899.92
+2006-01-27,10815.32,10988.29,10766.01,10907.21,2623620000,10907.21
+2006-01-26,10768.17,10827.96,10709.73,10809.47,2856780000,10809.47
+2006-01-25,10713.26,10832.93,10615.20,10709.74,2617060000,10709.74
+2006-01-24,10690.21,10804.75,10624.49,10712.22,2608720000,10712.22
+2006-01-23,10668.75,10783.70,10607.36,10688.77,2256070000,10688.77
+2006-01-20,10880.71,10890.08,10637.21,10667.39,2845810000,10667.39
+2006-01-19,10855.18,10965.00,10796.66,10880.71,2444020000,10880.71
+2006-01-18,10890.08,10934.90,10778.33,10854.86,2233200000,10854.86
+2006-01-17,10957.55,10977.01,10841.17,10896.32,2179970000,10896.32
+2006-01-13,10961.48,11033.04,10888.88,10959.87,2206510000,10959.87
+2006-01-12,11043.12,11070.10,10918.09,10962.36,2318350000,10962.36
+2006-01-11,11011.66,11099.15,10939.86,11043.44,2406130000,11043.44
+2006-01-10,11010.46,11054.49,10902.96,11011.58,2373080000,11011.58
+2006-01-09,10959.47,11053.93,10906.33,11011.90,2301490000,11011.90
+2006-01-06,10875.45,11005.98,10846.21,10959.31,2446560000,10959.31
+2006-01-05,10880.39,10951.39,10797.55,10882.15,2433340000,10882.15
+2006-01-04,10843.97,10946.27,10772.89,10880.15,2515330000,10880.15
+2006-01-03,10718.30,10888.40,10650.18,10847.41,2554570000,10847.41
+2005-12-30,10783.86,10801.87,10675.64,10717.50,1443500000,10717.50
+2005-12-29,10795.70,10870.71,10747.76,10784.82,1382540000,10784.82
+2005-12-28,10778.25,10858.07,10750.40,10796.26,1422360000,10796.26
+2005-12-27,10883.75,10956.99,10754.16,10777.77,1540470000,10777.77
+2005-12-23,10901.68,10904.40,10869.98,10883.27,1285810000,10883.27
+2005-12-22,10831.56,10928.34,10785.93,10889.44,1888500000,10889.44
+2005-12-21,10805.63,10933.70,10776.01,10833.73,2065170000,10833.73
+2005-12-20,10836.93,10905.28,10754.56,10805.55,1996690000,10805.55
+2005-12-19,10875.51,10970.04,10781.70,10836.53,2208810000,10836.53
+2005-12-16,10881.67,10978.21,10830.84,10875.59,2584190000,10875.59
+2005-12-15,10883.43,10985.01,10803.55,10881.67,2180590000,10881.67
+2005-12-14,10821.32,10953.07,10786.34,10883.51,2145520000,10883.51
+2005-12-13,10765.69,10902.64,10694.29,10823.72,2390020000,10823.72
+2005-12-12,10778.66,10857.02,10707.18,10767.77,1876550000,10767.77
+2005-12-09,10751.76,10845.33,10694.05,10778.58,1896290000,10778.58
+2005-12-08,10808.43,10871.11,10705.17,10755.12,2178300000,10755.12
+2005-12-07,10856.86,10916.89,10737.27,10810.91,2093830000,10810.91
+2005-12-06,10835.41,10956.13,10809.15,10856.86,2110740000,10856.86
+2005-12-05,10876.95,10923.37,10766.57,10835.01,2325840000,10835.01
+2005-12-02,10912.01,10952.83,10818.36,10877.51,2125580000,10877.51
+2005-12-01,10806.03,10969.97,10806.03,10912.57,2614830000,10912.57
+2005-11-30,10883.91,10959.80,10789.38,10805.87,2374690000,10805.87
+2005-11-29,10888.48,10994.85,10850.29,10888.16,2268340000,10888.16
+2005-11-28,10932.74,10992.39,10839.37,10890.72,2016900000,10890.72
+2005-11-25,10915.13,10997.50,10883.55,10931.62,724940000,10931.62
+2005-11-23,10865.90,10950.59,10855.42,10916.09,1985400000,10916.09
+2005-11-22,10815.96,10907.77,10729.99,10871.43,2291420000,10871.43
+2005-11-21,10766.33,10871.11,10708.86,10820.28,2117350000,10820.28
+2005-11-18,10719.34,10865.58,10663.79,10766.33,2453290000,10766.33
+2005-11-17,10677.00,10778.50,10619.61,10720.22,2298040000,10720.22
+2005-11-16,10697.81,10710.78,10653.14,10674.76,2121580000,10674.76
+2005-11-15,10697.01,10783.62,10610.08,10686.44,2359370000,10686.44
+2005-11-14,10686.60,10756.88,10618.89,10697.17,1899780000,10697.17
+2005-11-11,10641.30,10725.99,10595.89,10686.04,1773140000,10686.04
+2005-11-10,10550.61,10655.22,10519.71,10640.10,2378460000,10640.10
+2005-11-09,10539.24,10637.78,10466.24,10546.21,2214460000,10546.21
+2005-11-08,10574.18,10606.80,10478.49,10539.72,1965050000,10539.72
+2005-11-07,10531.24,10632.34,10488.74,10586.23,1987580000,10586.23
+2005-11-04,10523.23,10593.51,10441.59,10530.76,2050510000,10530.76
+2005-11-03,10470.49,10613.84,10421.98,10522.59,2716630000,10522.59
+2005-11-02,10406.29,10527.32,10347.70,10472.73,2648090000,10472.73
+2005-11-01,10437.51,10510.03,10352.42,10406.77,2457850000,10406.77
+2005-10-31,10403.17,10539.16,10372.67,10440.07,2567470000,10440.07
+2005-10-28,10231.15,10433.51,10213.14,10402.77,2379400000,10402.77
+2005-10-27,10334.81,10348.66,10229.95,10229.95,2395370000,10229.95
+2005-10-26,10377.39,10474.18,10283.10,10344.98,2467750000,10344.98
+2005-10-25,10383.88,10457.52,10282.78,10377.87,2312470000,10377.87
+2005-10-24,10219.15,10411.57,10219.15,10385.00,2197790000,10385.00
+2005-10-21,10282.22,10354.02,10161.60,10215.22,2470920000,10215.22
+2005-10-20,10411.73,10483.21,10230.27,10281.10,2617250000,10281.10
+2005-10-19,10277.18,10444.15,10173.52,10414.13,2703590000,10414.13
+2005-10-18,10349.14,10412.85,10233.47,10285.26,2197010000,10285.26
+2005-10-17,10287.42,10419.58,10213.06,10348.10,2054570000,10348.10
+2005-10-14,10216.59,10327.21,10165.12,10287.34,2188940000,10287.34
+2005-10-13,10216.91,10309.20,10098.18,10216.59,2351150000,10216.59
+2005-10-12,10247.40,10308.23,10186.17,10216.90,2491280000,10216.90
+2005-10-11,10239.16,10361.15,10195.13,10253.17,2299040000,10253.17
+2005-10-10,10292.95,10378.19,10184.09,10238.76,2195990000,10238.76
+2005-10-07,10287.42,10387.48,10221.47,10292.31,2126080000,10292.31
+2005-10-06,10317.36,10425.98,10200.81,10287.10,2792030000,10287.10
+2005-10-05,10434.81,10477.21,10299.27,10317.36,2546780000,10317.36
+2005-10-04,10534.36,10618.41,10409.89,10441.11,2341420000,10441.11
+2005-10-03,10569.50,10637.00,10486.17,10535.48,2097490000,10535.48
+2005-09-30,10540.51,10569.81,10526.34,10568.70,2097520000,10568.70
+2005-09-29,10472.61,10583.43,10389.01,10552.78,2176120000,10552.78
+2005-09-28,10456.61,10560.02,10390.05,10473.08,2106980000,10473.08
+2005-09-27,10444.58,10534.31,10376.83,10456.21,1976270000,10456.21
+2005-09-26,10420.22,10544.98,10381.53,10443.63,2022220000,10443.63
+2005-09-23,10421.81,10494.42,10328.59,10419.59,1973020000,10419.59
+2005-09-22,10376.20,10489.64,10303.51,10422.05,2424720000,10422.05
+2005-09-21,10484.23,10512.02,10335.28,10378.03,2548150000,10378.03
+2005-09-20,10558.19,10642.26,10453.98,10481.52,2319250000,10481.52
+2005-09-19,10641.87,10656.75,10497.29,10557.63,2076540000,10557.63
+2005-09-16,10560.50,10696.24,10539.64,10641.94,3152470000,10641.94
+2005-09-15,10545.85,10627.85,10488.05,10558.75,2079340000,10558.75
+2005-09-14,10545.85,10627.85,10488.05,10558.75,1986750000,10558.75
+2005-09-13,10673.71,10701.57,10561.61,10597.44,2082360000,10597.44
+2005-09-12,10678.41,10743.77,10618.13,10682.94,1938050000,10682.94
+2005-09-09,10594.10,10727.53,10573.47,10678.56,1992560000,10678.56
+2005-09-08,10633.11,10670.60,10530.01,10595.93,1955380000,10595.93
+2005-09-07,10588.68,10667.10,10534.23,10633.50,2067700000,10633.50
+2005-09-06,10447.69,10621.96,10447.69,10589.24,1932090000,10589.24
+2005-09-02,10460.67,10536.14,10400.88,10447.37,1640160000,10447.37
+2005-09-01,10481.44,10557.47,10382.09,10459.63,2229860000,10459.63
+2005-08-31,10415.84,10484.55,10357.65,10481.60,2365510000,10481.60
+2005-08-30,10461.54,10476.83,10329.15,10412.82,1916470000,10412.82
+2005-08-29,10396.90,10508.35,10321.42,10463.05,1599450000,10463.05
+2005-08-26,10450.95,10480.01,10355.02,10397.29,1541090000,10397.29
+2005-08-25,10434.39,10506.60,10391.71,10450.63,1571110000,10450.63
+2005-08-24,10519.34,10584.30,10407.56,10434.87,1930800000,10434.87
+2005-08-23,10571.01,10604.29,10475.63,10519.58,1678620000,10519.58
+2005-08-22,10559.78,10669.81,10509.07,10569.89,1621330000,10569.89
+2005-08-19,10552.70,10656.59,10503.90,10559.23,1558790000,10559.23
+2005-08-18,10531.12,10592.34,10517.67,10554.92,1808170000,10554.92
+2005-08-17,10505.60,10625.86,10472.45,10550.71,1859150000,10550.71
+2005-08-16,10631.59,10650.14,10489.24,10513.45,1820410000,10513.45
+2005-08-15,10599.19,10687.72,10532.48,10634.38,1562880000,10634.38
+2005-08-12,10682.70,10688.68,10549.19,10600.30,1709300000,10600.30
+2005-08-11,10591.83,10721.56,10549.43,10685.89,1941560000,10685.89
+2005-08-10,10606.52,10746.87,10553.81,10594.41,2172320000,10594.41
+2005-08-09,10537.65,10662.80,10537.01,10615.67,1897520000,10615.67
+2005-08-08,10557.24,10635.65,10497.45,10536.93,1804140000,10536.93
+2005-08-05,10610.34,10643.46,10512.49,10558.03,1930280000,10558.03
+2005-08-04,10696.80,10709.77,10568.70,10610.10,1981220000,10610.10
+2005-08-03,10681.51,10735.17,10600.02,10697.59,1999980000,10697.59
+2005-08-02,10623.79,10729.60,10600.62,10683.74,2043120000,10683.74
+2005-08-01,10641.78,10713.51,10578.97,10623.15,1716870000,10623.15
+2005-07-29,10705.16,10754.60,10608.27,10640.91,1789600000,10640.91
+2005-07-28,10633.50,10745.68,10603.49,10705.55,2001680000,10705.55
+2005-07-27,10579.45,10689.31,10530.50,10637.09,1945800000,10637.09
+2005-07-26,10597.60,10667.90,10535.58,10579.77,1934180000,10579.77
+2005-07-25,10651.66,10709.69,10565.12,10596.48,1717580000,10596.48
+2005-07-22,10624.19,10702.21,10552.54,10651.18,1766990000,10651.18
+2005-07-21,10690.03,10735.33,10567.98,10627.77,2129840000,10627.77
+2005-07-20,10629.52,10726.81,10535.10,10689.15,2063340000,10689.15
+2005-07-19,10576.90,10718.69,10573.00,10646.56,2041280000,10646.56
+2005-07-18,10640.19,10681.99,10533.59,10574.99,1582100000,10574.99
+2005-07-15,10629.44,10698.07,10559.46,10640.83,1716400000,10640.83
+2005-07-14,10559.86,10696.96,10559.86,10628.88,2048710000,10628.88
+2005-07-13,10513.36,10596.98,10481.36,10557.39,1812500000,10557.39
+2005-07-12,10519.49,10583.02,10444.46,10513.89,1932010000,10513.89
+2005-07-11,10449.60,10570.67,10425.97,10519.72,1846300000,10519.72
+2005-07-08,10302.90,10486.50,10279.65,10449.14,1900810000,10449.14
+2005-07-07,10269.76,10337.84,10142.24,10302.29,1952440000,10302.29
+2005-07-06,10366.52,10413.23,10242.21,10270.68,1883470000,10270.68
+2005-07-05,10292.62,10388.91,10282.64,10371.80,1805820000,10371.80
+2005-07-01,10273.59,10380.78,10239.91,10303.44,1593820000,10303.44
+2005-06-30,10374.18,10458.19,10253.49,10274.97,2109490000,10274.97
+2005-06-29,10405.94,10472.46,10332.52,10374.48,1769280000,10374.48
+2005-06-28,10291.01,10434.18,10285.86,10405.63,1772410000,10405.63
+2005-06-27,10298.07,10377.55,10229.40,10290.78,1738620000,10290.78
+2005-06-24,10422.28,10452.82,10266.30,10297.83,2418800000,10297.83
+2005-06-23,10587.09,10617.39,10401.49,10421.44,2029920000,10421.44
+2005-06-22,10599.36,10676.24,10543.28,10587.93,1823250000,10587.93
+2005-06-21,10608.88,10670.56,10545.89,10599.67,1720700000,10599.67
+2005-06-20,10621.54,10656.66,10539.21,10609.10,1714530000,10609.10
+2005-06-17,10580.41,10710.38,10561.00,10623.07,2407370000,10623.07
+2005-06-16,10566.76,10632.20,10501.92,10578.65,1776040000,10578.65
+2005-06-15,10548.65,10628.67,10471.69,10566.37,1840440000,10566.37
+2005-06-14,10521.95,10617.01,10473.92,10547.57,1698150000,10547.57
+2005-06-13,10503.57,10611.10,10437.32,10522.56,1661350000,10522.56
+2005-06-10,10503.02,10581.13,10410.50,10512.63,1664180000,10512.63
+2005-06-09,10477.75,10556.90,10410.80,10503.02,1824120000,10503.02
+2005-06-08,10484.84,10575.81,10439.77,10476.86,1715490000,10476.86
+2005-06-07,10466.00,10603.15,10454.18,10483.07,1851370000,10483.07
+2005-06-06,10461.64,10519.79,10410.28,10467.03,1547120000,10467.03
+2005-06-03,10552.82,10572.18,10427.35,10460.97,1627520000,10460.97
+2005-06-02,10548.83,10590.07,10478.26,10553.49,1813790000,10553.49
+2005-06-01,10462.86,10616.15,10433.48,10549.87,1810100000,10549.87
+2005-05-31,10541.89,10574.92,10437.77,10467.48,1840680000,10467.48
+2005-05-27,10537.08,10579.94,10489.35,10542.55,1381430000,10542.55
+2005-05-26,10458.68,10581.87,10450.55,10537.60,1654110000,10537.60
+2005-05-25,10503.17,10516.17,10396.46,10457.80,1742180000,10457.80
+2005-05-24,10522.68,10550.24,10433.78,10503.68,1681000000,10503.68
+2005-05-23,10472.80,10589.92,10438.36,10523.56,1681170000,10523.56
+2005-05-20,10492.75,10535.24,10400.60,10471.91,1631750000,10471.91
+2005-05-19,10464.45,10538.71,10394.39,10493.19,1775860000,10493.19
+2005-05-18,10323.19,10518.17,10323.19,10464.45,2266320000,10464.45
+2005-05-17,10247.49,10357.30,10175.81,10331.88,1887260000,10331.88
+2005-05-16,10139.61,10274.39,10118.32,10252.29,1856860000,10252.29
+2005-05-13,10188.23,10268.85,10062.76,10140.12,2188590000,10140.12
+2005-05-12,10299.74,10357.37,10155.86,10189.48,1995290000,10189.48
+2005-05-11,10272.91,10355.31,10172.86,10300.25,1834970000,10300.25
+2005-05-10,10382.94,10389.96,10230.35,10281.11,1889660000,10281.11
+2005-05-09,10345.40,10416.56,10288.95,10384.34,1857020000,10384.34
+2005-05-06,10339.71,10454.40,10300.70,10345.40,1707200000,10345.40
+2005-05-05,10384.49,10447.08,10276.75,10340.38,1997100000,10340.38
+2005-05-04,10255.25,10412.20,10239.95,10384.64,2306480000,10384.64
+2005-05-03,10251.04,10327.37,10169.39,10256.95,2167020000,10256.95
+2005-05-02,10192.00,10309.86,10149.06,10251.70,1980040000,10251.70
+2005-04-29,10073.47,10231.31,10021.23,10192.51,2362360000,10192.51
+2005-04-28,10194.58,10229.09,10036.74,10070.37,2182270000,10070.37
+2005-04-27,10150.32,10250.23,10048.27,10198.80,2151520000,10198.80
+2005-04-26,10240.99,10298.85,10108.79,10151.13,1959740000,10151.13
+2005-04-25,10158.52,10305.87,10148.25,10242.47,1795030000,10242.47
+2005-04-22,10216.68,10266.48,10055.29,10157.71,2045880000,10157.71
+2005-04-21,10010.51,10250.30,10010.51,10218.60,2308560000,10218.60
+2005-04-20,10131.18,10232.34,9978.74,10012.36,2217050000,10012.36
+2005-04-19,10071.55,10220.21,10021.08,10127.41,2142700000,10127.41
+2005-04-18,10088.54,10183.50,9961.52,10071.25,2180670000,10071.25
+2005-04-15,10276.61,10311.26,10059.36,10087.51,2689960000,10087.51
+2005-04-14,10403.71,10457.06,10248.23,10278.75,2355040000,10278.75
+2005-04-13,10507.45,10567.38,10355.16,10403.93,2049740000,10403.93
+2005-04-12,10448.63,10552.60,10331.21,10507.97,1979830000,10507.97
+2005-04-11,10462.08,10530.58,10393.36,10448.56,1525310000,10448.56
+2005-04-08,10546.32,10584.60,10445.31,10461.34,1661330000,10461.34
+2005-04-07,10485.88,10589.99,10434.30,10546.32,1900620000,10546.32
+2005-04-06,10453.45,10557.18,10434.22,10486.02,1797400000,10486.02
+2005-04-05,10421.14,10530.14,10372.59,10458.46,1870800000,10458.46
+2005-04-04,10401.71,10496.44,10307.64,10421.14,2079770000,10421.14
+2005-04-01,10504.57,10600.56,10349.02,10404.30,2168690000,10404.30
+2005-03-31,10541.59,10586.15,10448.19,10503.76,2214230000,10503.76
+2005-03-30,10405.77,10564.80,10395.21,10540.93,2097110000,10540.93
+2005-03-29,10486.10,10565.46,10351.76,10405.70,2223250000,10405.70
+2005-03-28,10444.13,10568.05,10412.79,10485.65,1746220000,10485.65
+2005-03-24,10457.06,10554.60,10415.16,10442.87,1721720000,10442.87
+2005-03-23,10470.58,10558.51,10384.34,10456.02,2246870000,10456.02
+2005-03-22,10565.39,10651.41,10446.78,10470.51,2114470000,10470.51
+2005-03-21,10629.90,10662.93,10503.46,10565.39,1819440000,10565.39
+2005-03-18,10627.83,10709.85,10520.60,10629.67,2344370000,10629.67
+2005-03-17,10633.30,10707.86,10561.10,10626.35,1581930000,10626.35
+2005-03-16,10741.63,10764.16,10569.30,10633.07,1653190000,10633.07
+2005-03-15,10804.29,10884.76,10716.87,10745.10,1513530000,10745.10
+2005-03-14,10773.92,10859.12,10709.26,10804.51,1437430000,10804.51
+2005-03-11,10845.30,10897.68,10728.62,10774.36,1449820000,10774.36
+2005-03-10,10806.28,10907.45,10757.36,10851.51,1604020000,10851.51
+2005-03-09,10912.32,10949.20,10768.66,10805.62,1704970000,10805.62
+2005-03-08,10935.60,10996.56,10863.40,10912.62,1523090000,10912.62
+2005-03-07,10940.55,11027.15,10886.09,10936.86,1488830000,10936.86
+2005-03-04,10834.51,10996.93,10834.51,10940.55,1636820000,10940.55
+2005-03-03,10812.27,10904.34,10744.14,10833.03,1616240000,10833.03
+2005-03-02,10825.68,10896.66,10736.16,10811.97,1568540000,10811.97
+2005-03-01,10794.98,10849.14,10769.04,10830.00,1708060000,10830.00
+2005-02-28,10842.05,10877.07,10709.41,10766.23,1795480000,10766.23
+2005-02-25,10748.42,10871.53,10698.32,10841.60,1523680000,10841.60
+2005-02-24,10672.24,10779.39,10612.24,10748.79,1518750000,10748.79
+2005-02-23,10609.28,10735.42,10583.64,10673.79,1501090000,10673.79
+2005-02-22,10783.38,10806.36,10596.79,10611.20,1744940000,10611.20
+2005-02-18,10755.15,10854.98,10682.29,10785.22,1551200000,10785.22
+2005-02-17,10835.03,10873.60,10729.95,10754.26,1580120000,10754.26
+2005-02-16,10832.03,10889.78,10746.21,10834.88,1490100000,10834.88
+2005-02-15,10791.06,10886.31,10745.10,10837.32,1527080000,10837.32
+2005-02-14,10795.72,10853.80,10722.63,10791.13,1290180000,10791.13
+2005-02-11,10742.92,10865.69,10680.15,10796.01,1562300000,10796.01
+2005-02-10,10665.00,10803.92,10633.67,10749.61,1491670000,10749.61
+2005-02-09,10717.76,10781.38,10621.84,10664.11,1511040000,10664.11
+2005-02-08,10712.51,10783.97,10647.85,10724.63,1416170000,10724.63
+2005-02-07,10715.76,10774.80,10650.59,10715.76,1347270000,10715.76
+2005-02-04,10593.17,10750.94,10553.93,10716.13,1648160000,10716.13
+2005-02-03,10592.21,10640.69,10511.96,10593.10,1554460000,10593.10
+2005-02-02,10551.05,10638.25,10501.02,10596.79,1561740000,10596.79
+2005-02-01,10489.72,10609.73,10464.38,10551.94,1681980000,10551.94
+2005-01-31,10428.76,10559.77,10414.49,10489.94,1679800000,10489.94
+2005-01-28,10470.58,10520.61,10331.58,10427.20,1641800000,10427.20
+2005-01-27,10498.14,10535.16,10379.47,10467.40,1600600000,10467.40
+2005-01-26,10463.19,10571.66,10433.56,10498.59,1635900000,10498.59
+2005-01-25,10369.42,10534.72,10369.42,10461.56,1610400000,10461.56
+2005-01-24,10393.58,10491.71,10317.10,10368.61,1494600000,10368.61
+2005-01-21,10471.98,10541.30,10370.97,10392.99,1643500000,10392.99
+2005-01-20,10538.90,10582.09,10414.72,10471.47,1692000000,10471.47
+2005-01-19,10626.05,10668.40,10519.20,10539.97,1498700000,10539.97
+2005-01-18,10554.23,10665.44,10456.61,10628.79,1596800000,10628.79
+2005-01-14,10506.71,10606.47,10475.01,10558.00,1335400000,10558.00
+2005-01-13,10617.41,10650.96,10463.26,10505.83,1510300000,10505.83
+2005-01-12,10561.32,10648.52,10481.37,10617.78,1562100000,10617.78
+2005-01-11,10619.77,10632.63,10504.72,10556.22,1488800000,10556.22
+2005-01-10,10603.44,10696.85,10544.99,10621.03,1490400000,10621.03
+2005-01-07,10624.80,10697.81,10545.80,10603.96,1477900000,10603.96
+2005-01-06,10593.19,10708.37,10555.48,10622.88,1569100000,10622.88
+2005-01-05,10629.53,10736.16,10561.03,10597.83,1738900000,10597.83
+2005-01-04,10727.81,10803.62,10587.48,10630.78,1720200000,10630.78
+2005-01-03,10783.75,10892.67,10694.18,10729.43,1505900000,10729.43
+2004-12-31,10800.30,10849.81,10759.94,10783.01,786900000,10783.01
+2004-12-30,10829.12,10880.03,10781.67,10800.30,829800000,10800.30
+2004-12-29,10853.72,10872.71,10771.26,10829.19,924900000,10829.19
+2004-12-28,10776.06,10890.82,10774.51,10854.54,984200000,10854.54
+2004-12-27,10828.01,10892.52,10755.67,10776.13,922000000,10776.13
+2004-12-23,10815.00,10895.10,10780.12,10827.12,956100000,10827.12
+2004-12-22,10752.34,10861.33,10709.78,10815.89,1390800000,10815.89
+2004-12-21,10661.89,10789.66,10646.60,10759.43,1483700000,10759.43
+2004-12-20,10652.14,10769.13,10622.20,10661.60,1422800000,10661.60
+2004-12-17,10704.83,10766.01,10562.76,10649.92,2335000000,10649.92
+2004-12-16,10691.71,10776.43,10612.31,10705.64,1793900000,10705.64
+2004-12-15,10675.71,10749.53,10601.74,10691.45,1695800000,10691.45
+2004-12-14,10640.53,10715.76,10571.67,10676.45,1544400000,10676.45
+2004-12-13,10543.44,10678.52,10520.61,10638.32,1436100000,10638.32
+2004-12-10,10552.16,10616.23,10469.62,10543.22,1443700000,10543.22
+2004-12-09,10492.45,10579.94,10389.81,10552.82,1624700000,10552.82
+2004-12-08,10438.77,10550.16,10395.05,10494.23,1525200000,10494.23
+2004-12-07,10546.80,10612.90,10423.21,10440.58,1533900000,10440.58
+2004-12-06,10591.32,10614.82,10490.31,10547.06,1354400000,10547.06
+2004-12-03,10597.90,10670.47,10515.73,10592.21,1566700000,10592.21
+2004-12-02,10590.44,10670.02,10485.21,10585.12,1774900000,10585.12
+2004-12-01,10425.80,10618.59,10421.66,10590.22,1772800000,10590.22
+2004-11-30,10475.27,10530.80,10380.58,10428.02,1553500000,10428.02
+2004-11-29,10520.64,10590.73,10390.92,10475.90,1378500000,10475.90
+2004-11-26,10518.69,10574.70,10479.52,10522.23,504580000,10522.23
+2004-11-24,10493.86,10565.76,10451.66,10520.31,1149600000,10520.31
+2004-11-23,10486.69,10547.28,10407.18,10492.60,1428300000,10492.60
+2004-11-22,10455.73,10535.46,10380.95,10489.42,1392700000,10489.42
+2004-11-19,10571.63,10588.29,10419.89,10456.91,1526600000,10456.91
+2004-11-18,10549.20,10639.43,10499.62,10572.55,1456700000,10572.55
+2004-11-17,10481.83,10655.09,10470.21,10549.57,1684200000,10549.57
+2004-11-16,10549.79,10570.56,10445.31,10487.65,1364400000,10487.65
+2004-11-15,10541.89,10612.31,10463.34,10550.24,1453300000,10550.24
+2004-11-12,10469.21,10565.48,10419.77,10539.01,1531600000,10539.01
+2004-11-11,10386.95,10513.42,10364.10,10469.84,1393000000,10469.84
+2004-11-10,10378.59,10470.21,10330.54,10385.48,1504300000,10385.48
+2004-11-09,10387.62,10466.81,10327.00,10386.37,1450800000,10386.37
+2004-11-08,10385.15,10452.58,10313.51,10391.31,1358700000,10391.31
+2004-11-05,10317.05,10458.10,10279.96,10387.54,1724400000,10387.54
+2004-11-04,10132.48,10352.81,10076.36,10314.76,1782700000,10314.76
+2004-11-03,10137.05,10253.27,10062.80,10137.05,1767500000,10137.05
+2004-11-02,10053.87,10180.85,9976.29,10035.73,1659000000,10035.73
+2004-11-01,10028.73,10124.44,9953.29,10054.39,1395900000,10054.39
+2004-10-29,10004.69,10083.44,9936.77,10027.47,1500800000,10027.47
+2004-10-28,9998.94,10074.89,9900.42,10004.54,1628200000,10004.54
+2004-10-27,9888.25,10051.96,9807.80,10002.03,1741900000,10002.03
+2004-10-26,9750.59,9914.65,9718.94,9888.48,1685400000,9888.48
+2004-10-25,9757.22,9827.20,9660.18,9749.99,1380500000,9749.99
+2004-10-22,9863.85,9920.99,9732.81,9757.81,1469600000,9757.81
+2004-10-21,9884.65,9969.07,9769.16,9865.76,1673000000,9865.76
+2004-10-20,9895.19,9957.05,9766.95,9886.93,1685700000,9886.93
+2004-10-19,9958.38,10064.20,9854.19,9897.62,1737500000,9897.62
+2004-10-18,9932.98,10002.18,9816.73,9956.32,1373300000,9956.32
+2004-10-15,9895.63,10022.31,9845.56,9933.38,1645100000,9933.38
+2004-10-14,10002.54,10048.48,9837.22,9894.45,1489500000,9894.45
+2004-10-13,10085.21,10157.11,9935.08,10002.33,1546200000,10002.33
+2004-10-12,10080.42,10121.49,9985.44,10077.18,1320100000,10077.18
+2004-10-11,10056.09,10142.74,10017.67,10081.97,943800000,10081.97
+2004-10-08,10124.11,10177.53,10013.91,10055.20,1291600000,10055.20
+2004-10-07,10239.84,10267.57,10086.83,10125.40,1447500000,10125.40
+2004-10-06,10170.70,10267.14,10112.20,10239.92,1416700000,10239.92
+2004-10-05,10216.76,10253.93,10123.19,10177.68,1418400000,10177.68
+2004-10-04,10191.40,10313.81,10153.79,10216.54,1534000000,10216.54
+2004-10-01,10082.04,10237.05,10081.38,10192.65,1582200000,10192.65
+2004-09-30,10136.38,10155.49,9987.36,10080.27,1748000000,10080.27
+2004-09-29,10078.06,10160.50,10002.57,10136.24,1402900000,10136.24
+2004-09-28,9989.73,10132.04,9950.71,10077.40,1396600000,10077.40
+2004-09-27,10046.65,10077.32,9952.78,9988.54,1263500000,9988.54
+2004-09-24,10039.42,10111.39,9993.92,10047.24,1255400000,10047.24
+2004-09-23,10108.29,10134.84,9999.67,10038.90,1286300000,10038.90
+2004-09-22,10244.05,10244.05,10075.33,10109.18,1379900000,10109.18
+2004-09-21,10204.52,10291.39,10159.54,10244.93,1325000000,10244.93
+2004-09-20,10283.87,10293.23,10152.90,10204.89,1197600000,10204.89
+2004-09-17,10245.82,10352.37,10219.71,10284.46,1422600000,10284.46
+2004-09-16,10231.59,10315.72,10194.35,10244.49,1113900000,10244.49
+2004-09-15,10316.90,10324.87,10195.60,10231.36,1256000000,10231.36
+2004-09-14,10315.13,10374.79,10260.93,10318.16,1204500000,10318.16
+2004-09-13,10306.65,10380.47,10250.61,10314.76,1299800000,10314.76
+2004-09-10,10289.47,10348.68,10196.19,10313.07,1261200000,10313.07
+2004-09-09,10313.36,10337.33,10269.49,10289.10,1371300000,10289.10
+2004-09-08,10342.42,10390.64,10267.94,10313.36,1246300000,10313.36
+2004-09-07,10261.52,10388.95,10255.62,10341.16,1214400000,10341.16
+2004-09-03,10277.82,10346.99,10229.52,10260.20,924170000,10260.20
+2004-09-02,10168.39,10312.99,10129.01,10290.28,1118400000,10290.28
+2004-09-01,10170.12,10230.48,10092.37,10168.46,1142100000,10168.46
+2004-08-31,10121.97,10198.03,10056.09,10173.92,1138200000,10173.92
+2004-08-30,10193.83,10226.87,10110.43,10122.52,843100000,10122.52
+2004-08-27,10174.07,10235.49,10143.91,10195.01,845400000,10195.01
+2004-08-26,10181.07,10225.61,10124.88,10173.41,1023600000,10173.41
+2004-08-25,10098.49,10224.29,10041.93,10181.74,1192200000,10181.74
+2004-08-24,10074.89,10165.07,10044.66,10098.63,1092500000,10098.63
+2004-08-23,10111.10,10159.54,10046.72,10073.05,1021900000,10073.05
+2004-08-20,10040.81,10143.76,9989.65,10110.14,1199900000,10110.14
+2004-08-19,10082.78,10111.91,9972.39,10040.82,1249400000,10040.82
+2004-08-18,9964.22,10097.01,9910.82,10083.15,1282500000,10083.15
+2004-08-17,9955.50,10053.21,9916.05,9972.83,1267800000,9972.83
+2004-08-16,9825.35,9987.58,9807.44,9954.55,1206200000,9954.55
+2004-08-13,9814.11,9897.34,9746.60,9825.35,1175100000,9825.35
+2004-08-12,9936.48,9940.02,9780.52,9814.59,1405100000,9814.59
+2004-08-11,9931.24,9981.61,9804.63,9938.32,1410400000,9938.32
+2004-08-10,9815.55,9961.70,9798.44,9944.67,1245600000,9944.67
+2004-08-09,9816.14,9902.49,9773.74,9814.66,1086000000,9814.66
+2004-08-06,9960.67,9963.47,9767.54,9815.33,1521000000,9815.33
+2004-08-05,10127.10,10158.44,9945.84,9963.03,1397400000,9963.03
+2004-08-04,10117.96,10186.16,10029.02,10126.51,1369200000,10126.51
+2004-08-03,10178.27,10228.49,10064.57,10120.24,1338300000,10120.24
+2004-08-02,10138.45,10224.29,10063.75,10179.16,1276000000,10179.16
+2004-07-30,10129.12,10194.13,10045.76,10139.71,1298200000,10139.71
+2004-07-29,10115.52,10213.08,10049.74,10129.24,1530100000,10129.24
+2004-07-28,10084.03,10170.31,9966.34,10117.07,1554300000,10117.07
+2004-07-27,9963.54,10133.95,9942.75,10085.14,1610800000,10085.14
+2004-07-26,9964.71,10054.32,9874.38,9961.92,1413400000,9961.92
+2004-07-23,10045.46,10069.51,9893.93,9962.22,1337500000,9962.22
+2004-07-22,10047.60,10114.41,9906.62,10050.33,1680800000,10050.33
+2004-07-21,10156.30,10279.96,10027.92,10046.13,1679500000,10046.13
+2004-07-20,10094.43,10186.90,10031.24,10149.07,1445800000,10149.07
+2004-07-19,10140.95,10211.60,10027.33,10094.06,1319900000,10094.06
+2004-07-16,10162.34,10289.40,10095.32,10139.78,1450300000,10139.78
+2004-07-15,10208.20,10275.27,10115.81,10163.16,1408700000,10163.16
+2004-07-14,10232.84,10313.95,10129.31,10208.80,1462000000,10208.80
+2004-07-13,10238.37,10297.58,10188.45,10247.59,1199700000,10247.59
+2004-07-12,10211.75,10284.39,10130.42,10238.22,1114600000,10238.22
+2004-07-09,10173.12,10277.16,10150.32,10213.22,1186300000,10213.22
+2004-07-08,10238.52,10297.73,10134.99,10171.56,1401100000,10171.56
+2004-07-07,10211.92,10300.53,10156.45,10240.29,1328600000,10240.29
+2004-07-06,10280.26,10308.43,10163.60,10219.34,1283300000,10219.34
+2004-07-02,10334.00,10371.40,10228.71,10282.83,1085000000,10282.83
+2004-07-01,10434.00,10473.23,10255.55,10334.16,1495700000,10334.16
+2004-06-30,10413.43,10489.16,10348.98,10435.48,1473800000,10435.48
+2004-06-29,10356.35,10460.25,10315.65,10413.43,1375000000,10413.43
+2004-06-28,10377.52,10505.16,10317.64,10357.09,1354600000,10357.09
+2004-06-25,10444.24,10514.67,10329.88,10371.84,1812900000,10371.84
+2004-06-24,10477.43,10530.01,10398.16,10443.81,1394900000,10443.81
+2004-06-23,10395.14,10498.67,10323.32,10479.57,1444200000,10479.57
+2004-06-22,10370.21,10431.05,10284.24,10395.07,1382300000,10395.07
+2004-06-21,10417.82,10471.76,10336.44,10371.47,1123900000,10371.47
+2004-06-18,10375.82,10471.84,10328.20,10416.41,1500600000,10416.41
+2004-06-17,10378.59,10417.69,10308.25,10377.52,1296700000,10377.52
+2004-06-16,10380.23,10433.52,10320.60,10379.58,1168400000,10379.58
+2004-06-15,10336.51,10464.04,10319.89,10380.43,1345900000,10380.43
+2004-06-14,10401.23,10403.50,10283.48,10334.73,1179400000,10334.73
+2004-06-10,10367.80,10448.00,10333.94,10410.10,1160600000,10410.10
+2004-06-09,10431.10,10466.59,10325.07,10368.44,1276800000,10368.44
+2004-06-08,10389.41,10462.97,10323.94,10432.52,1190300000,10432.52
+2004-06-07,10243.31,10410.81,10243.31,10391.08,1211800000,10391.08
+2004-06-04,10196.83,10327.84,10196.83,10242.82,1115300000,10242.82
+2004-06-03,10261.85,10309.46,10163.40,10195.91,1232400000,10195.91
+2004-06-02,10199.78,10310.10,10170.57,10262.97,1251700000,10262.97
+2004-06-01,10187.18,10254.17,10104.07,10202.65,1238000000,10202.65
+2004-05-28,10205.83,10250.27,10137.14,10188.45,1172600000,10188.45
+2004-05-27,10109.89,10267.66,10106.13,10205.20,1447500000,10205.20
+2004-05-26,10116.84,10175.75,10034.16,10109.89,1369400000,10109.89
+2004-05-25,9958.08,10139.27,9895.41,10117.62,1545700000,10117.62
+2004-05-24,9968.02,10084.91,9891.22,9958.43,1227500000,9958.43
+2004-05-21,9939.34,10058.50,9910.81,9966.74,1258600000,9966.74
+2004-05-20,9939.12,10014.50,9867.73,9937.64,1211000000,9937.64
+2004-05-19,9962.55,10124.79,9919.90,9937.71,1548600000,9937.71
+2004-05-18,9906.71,10028.27,9895.77,9968.51,1353000000,9968.51
+2004-05-17,10009.92,10009.92,9827.21,9906.91,1430100000,9906.91
+2004-05-14,10008.43,10096.69,9912.45,10012.87,1335900000,10012.87
+2004-05-13,10044.31,10100.24,9924.94,10010.74,1411100000,10010.74
+2004-05-12,10011.52,10089.87,9822.10,10045.16,1697600000,10045.16
+2004-05-11,9989.24,10092.78,9928.91,10019.47,1533800000,10019.47
+2004-05-10,10116.28,10116.28,9881.86,9990.02,1918400000,9990.02
+2004-05-07,10240.62,10302.93,10086.94,10117.34,1653600000,10117.34
+2004-05-06,10308.20,10332.10,10147.21,10241.26,1509300000,10241.26
+2004-05-05,10316.98,10382.98,10249.63,10310.95,1469000000,10310.95
+2004-05-04,10314.32,10403.14,10232.31,10317.20,1662100000,10317.20
+2004-05-03,10227.27,10365.74,10199.67,10314.00,1571600000,10314.00
+2004-04-30,10273.06,10374.61,10198.39,10225.57,1634700000,10225.57
+2004-04-29,10339.41,10443.81,10199.31,10272.27,1859000000,10272.27
+2004-04-28,10476.67,10479.58,10301.65,10342.60,1855600000,10342.60
+2004-04-27,10445.38,10570.92,10410.52,10478.16,1518000000,10478.16
+2004-04-26,10472.91,10540.26,10396.75,10444.73,1290600000,10444.73
+2004-04-23,10463.11,10543.95,10362.97,10472.84,1396100000,10472.84
+2004-04-22,10314.99,10529.12,10255.88,10461.20,1826700000,10461.20
+2004-04-21,10311.87,10398.53,10200.38,10317.27,1738100000,10317.27
+2004-04-20,10437.85,10530.61,10297.39,10314.50,1508500000,10314.50
+2004-04-19,10451.62,10501.79,10351.97,10437.85,1194900000,10437.85
+2004-04-16,10398.32,10500.57,10343.74,10451.97,1487800000,10451.97
+2004-04-15,10377.95,10481.21,10279.37,10397.46,1568700000,10397.46
+2004-04-14,10378.10,10453.39,10259.35,10377.95,1547700000,10377.95
+2004-04-13,10516.05,10572.13,10343.17,10381.28,1423200000,10381.28
+2004-04-12,10444.38,10559.28,10439.27,10515.56,1102400000,10515.56
+2004-04-08,10482.77,10590.15,10383.84,10442.03,1199800000,10442.03
+2004-04-07,10569.26,10580.51,10422.74,10480.15,1458800000,10480.15
+2004-04-06,10553.76,10596.37,10467.26,10570.81,1397700000,10570.81
+2004-04-05,10470.59,10582.22,10423.33,10558.37,1413700000,10558.37
+2004-04-02,10375.33,10548.74,10375.33,10470.59,1629200000,10470.59
+2004-04-01,10357.52,10449.33,10299.48,10373.33,1560700000,10373.33
+2004-03-31,10380.89,10428.59,10287.11,10357.70,1560700000,10357.70
+2004-03-30,10327.63,10411.41,10264.15,10381.70,1332400000,10381.70
+2004-03-29,10212.91,10389.93,10212.91,10329.63,1405500000,10329.63
+2004-03-26,10218.37,10306.22,10145.63,10212.97,1319100000,10212.97
+2004-03-25,10049.56,10246.15,10049.56,10218.82,1471700000,10218.82
+2004-03-24,10065.41,10140.23,9975.86,10048.23,1527800000,10048.23
+2004-03-23,10066.67,10177.04,10020.75,10063.64,1458200000,10063.64
+2004-03-22,10185.93,10185.93,9985.19,10064.75,1452300000,10064.75
+2004-03-19,10295.85,10355.41,10163.71,10186.60,1457400000,10186.60
+2004-03-18,10298.96,10355.04,10187.78,10295.78,1369200000,10295.78
+2004-03-17,10184.30,10356.59,10184.30,10300.30,1490100000,10300.30
+2004-03-16,10103.41,10253.26,10085.34,10184.67,1500700000,10184.67
+2004-03-15,10238.45,10252.68,10066.08,10102.89,1600600000,10102.89
+2004-03-12,10130.67,10281.63,10097.04,10240.08,1388500000,10240.08
+2004-03-11,10288.85,10356.22,10102.75,10128.38,1889900000,10128.38
+2004-03-10,10457.59,10523.11,10259.34,10296.89,1648400000,10296.89
+2004-03-09,10529.52,10567.03,10391.48,10456.96,1499400000,10456.96
+2004-03-08,10595.37,10677.85,10505.85,10529.48,1254400000,10529.48
+2004-03-05,10582.59,10681.40,10497.11,10595.55,1398200000,10595.55
+2004-03-04,10593.48,10645.33,10522.59,10588.00,1265800000,10588.00
+2004-03-03,10588.59,10651.03,10506.66,10593.11,1334500000,10593.11
+2004-03-02,10678.36,10713.92,10539.40,10591.48,1476000000,10591.48
+2004-03-01,10582.25,10720.14,10568.74,10678.14,1497100000,10678.14
+2004-02-27,10581.55,10689.55,10519.03,10583.92,1540400000,10583.92
+2004-02-26,10598.14,10652.96,10493.70,10580.14,1383900000,10580.14
+2004-02-25,10566.59,10660.73,10509.40,10601.62,1360700000,10601.62
+2004-02-24,10609.55,10681.40,10479.33,10566.37,1543600000,10566.37
+2004-02-23,10619.55,10711.84,10508.89,10609.62,1380400000,10609.62
+2004-02-20,10666.29,10722.77,10559.11,10619.03,1479600000,10619.03
+2004-02-19,10674.59,10794.95,10626.44,10664.73,1562800000,10664.73
+2004-02-18,10706.68,10764.36,10623.62,10671.99,1382400000,10671.99
+2004-02-17,10628.88,10762.07,10628.88,10714.88,1396500000,10714.88
+2004-02-13,10696.22,10755.47,10578.66,10627.85,1329200000,10627.85
+2004-02-12,10735.18,10775.03,10636.44,10694.07,1464300000,10694.07
+2004-02-11,10605.48,10779.40,10561.55,10737.70,1699300000,10737.70
+2004-02-10,10578.74,10667.03,10511.18,10613.85,1403900000,10613.85
+2004-02-09,10592.00,10634.81,10433.70,10579.03,1303500000,10579.03
+2004-02-06,10494.89,10634.81,10433.70,10593.03,1477600000,10593.03
+2004-02-05,10469.33,10566.37,10399.92,10495.55,1566600000,10495.55
+2004-02-04,10503.11,10567.85,10394.81,10470.74,1634800000,10470.74
+2004-02-03,10499.48,10571.48,10414.15,10505.18,1476900000,10505.18
+2004-02-02,10487.78,10614.44,10395.55,10499.18,1599200000,10499.18
+2004-01-30,10510.22,10551.03,10385.56,10488.07,1635000000,10488.07
+2004-01-29,10467.41,10611.56,10369.92,10510.29,1921900000,10510.29
+2004-01-28,10610.07,10703.25,10412.44,10468.37,1842000000,10468.37
+2004-01-27,10701.10,10748.81,10579.33,10609.92,1673100000,10609.92
+2004-01-26,10568.00,10725.18,10510.44,10702.51,1480600000,10702.51
+2004-01-23,10625.25,10691.77,10490.14,10568.29,1561200000,10568.29
+2004-01-22,10624.22,10717.40,10545.03,10623.18,1693700000,10623.18
+2004-01-21,10522.77,10665.70,10453.11,10623.62,1757600000,10623.62
+2004-01-20,10601.40,10676.96,10447.92,10528.66,1698200000,10528.66
+2004-01-16,10556.37,10666.88,10503.70,10600.51,1721100000,10600.51
+2004-01-15,10534.52,10639.03,10454.52,10553.85,1695000000,10553.85
+2004-01-14,10428.67,10573.85,10426.89,10538.37,1514600000,10538.37
+2004-01-13,10485.18,10539.25,10341.19,10427.18,1595900000,10427.18
+2004-01-12,10461.55,10543.03,10389.85,10485.18,1510200000,10485.18
+2004-01-09,10589.25,10603.48,10420.52,10458.89,1720700000,10458.89
+2004-01-08,10530.07,10651.99,10480.59,10592.44,1868400000,10592.44
+2004-01-07,10535.46,10587.55,10432.00,10529.03,1704900000,10529.03
+2004-01-06,10543.85,10584.07,10454.37,10538.66,1494500000,10538.66
+2004-01-05,10411.85,10575.92,10411.85,10544.07,1578200000,10544.07
+2004-01-02,10452.74,10554.96,10367.41,10409.85,1153200000,10409.85
+2003-12-31,10426.30,10494.44,10382.89,10453.92,1027500000,10453.92
+2003-12-30,10449.70,10493.11,10374.52,10425.04,1012600000,10425.04
+2003-12-29,10321.35,10457.78,10319.70,10450.00,1058800000,10450.00
+2003-12-26,10305.85,10368.89,10282.22,10324.67,356070000,10324.67
+2003-12-24,10341.41,10365.63,10263.04,10305.19,518060000,10305.19
+2003-12-23,10337.56,10421.48,10265.71,10341.26,1145300000,10341.26
+2003-12-22,10276.48,10371.11,10216.08,10338.00,1251700000,10338.00
+2003-12-19,10249.48,10345.44,10189.63,10278.22,1657300000,10278.22
+2003-12-18,10141.41,10278.82,10117.78,10248.08,1579900000,10248.08
+2003-12-17,10128.75,10186.67,10040.08,10145.26,1441700000,10145.26
+2003-12-16,10023.34,10173.19,9986.23,10129.56,1547900000,10129.56
+2003-12-15,10046.53,10180.97,9994.38,10022.82,1520800000,10022.82
+2003-12-12,10008.75,10091.71,9946.60,10042.16,1223100000,10042.16
+2003-12-11,9922.45,10056.97,9896.16,10008.16,1441100000,10008.16
+2003-12-10,9922.38,10000.53,9848.97,9921.86,1444000000,9921.86
+2003-12-09,9966.45,10048.75,9887.57,9923.42,1465500000,9923.42
+2003-12-08,9862.01,9997.34,9824.83,9965.27,1218900000,9965.27
+2003-12-05,9923.27,9954.16,9819.05,9862.68,1265900000,9862.68
+2003-12-04,9874.83,9978.08,9814.97,9930.82,1463100000,9930.82
+2003-12-03,9851.94,9974.45,9824.31,9873.42,1441700000,9873.42
+2003-12-02,9899.64,9936.97,9798.83,9853.64,1383200000,9853.64
+2003-12-01,9785.35,9943.34,9777.64,9899.05,1375000000,9899.05
+2003-11-28,9779.72,9832.16,9733.20,9782.46,487220000,9782.46
+2003-11-26,9763.49,9838.01,9689.05,9779.57,1097700000,9779.57
+2003-11-25,9748.68,9821.94,9679.13,9763.94,1333700000,9763.94
+2003-11-24,9629.87,9788.60,9629.87,9747.79,1302800000,9747.79
+2003-11-21,9622.02,9692.53,9556.68,9628.53,1273800000,9628.53
+2003-11-20,9688.46,9756.09,9576.91,9619.42,1326700000,9619.42
+2003-11-19,9620.68,9731.94,9584.31,9690.46,1326200000,9690.46
+2003-11-18,9711.44,9792.16,9601.35,9624.16,1354300000,9624.16
+2003-11-17,9765.64,9775.35,9603.57,9710.83,1374300000,9710.83
+2003-11-14,9836.46,9919.19,9709.13,9768.68,1356100000,9768.68
+2003-11-13,9846.97,9895.71,9740.53,9837.94,1383000000,9837.94
+2003-11-12,9729.50,9882.60,9700.02,9848.83,1349300000,9848.83
+2003-11-11,9756.53,9801.21,9673.64,9737.79,1162500000,9737.79
+2003-11-10,9807.49,9861.05,9702.46,9756.53,1243600000,9756.53
+2003-11-07,9857.12,9945.71,9770.31,9809.79,1440500000,9809.79
+2003-11-06,9820.68,9888.90,9738.53,9856.97,1453900000,9856.97
+2003-11-05,9837.64,9883.86,9746.98,9820.83,1401800000,9820.83
+2003-11-04,9857.49,9905.94,9770.46,9838.83,1417600000,9838.83
+2003-11-03,9802.46,9936.31,9792.60,9858.46,1378200000,9858.46
+2003-10-31,9786.75,9880.08,9745.94,9801.12,1498900000,9801.12
+2003-10-30,9772.01,9882.97,9719.20,9786.61,1629700000,9786.61
+2003-10-29,9747.05,9830.23,9663.27,9774.53,1562600000,9774.53
+2003-10-28,9609.72,9769.57,9592.54,9748.31,1629200000,9748.31
+2003-10-27,9584.54,9696.98,9553.80,9608.16,1371800000,9608.16
+2003-10-24,9600.98,9631.50,9463.28,9582.46,1420300000,9582.46
+2003-10-23,9597.20,9661.05,9517.50,9613.13,1604300000,9613.13
+2003-10-22,9741.98,9741.98,9551.65,9598.24,1647200000,9598.24
+2003-10-21,9778.31,9824.90,9697.94,9747.64,1498000000,9747.64
+2003-10-20,9721.50,9816.97,9665.35,9777.94,1172600000,9777.94
+2003-10-17,9791.86,9833.12,9679.72,9721.79,1352000000,9721.79
+2003-10-16,9798.68,9838.53,9679.13,9791.72,1417700000,9791.72
+2003-10-15,9824.09,9901.64,9731.57,9803.05,1521100000,9803.05
+2003-10-14,9763.27,9833.42,9696.90,9812.98,1271900000,9812.98
+2003-10-13,9675.72,9814.97,9675.72,9764.38,1040500000,9764.38
+2003-10-10,9682.90,9743.12,9622.31,9674.68,1108100000,9674.68
+2003-10-09,9633.35,9798.08,9617.35,9680.01,1578700000,9680.01
+2003-10-08,9653.33,9699.35,9571.35,9630.90,1262500000,9630.90
+2003-10-07,9593.28,9672.68,9512.76,9654.61,1279500000,9654.61
+2003-10-06,9572.39,9656.09,9524.39,9594.98,1025800000,9594.98
+2003-10-03,9492.54,9701.87,9492.54,9572.31,1570500000,9572.31
+2003-10-02,9464.76,9539.20,9397.87,9487.80,1269300000,9487.80
+2003-10-01,9275.06,9472.69,9275.06,9469.20,1566300000,9469.20
+2003-09-30,9378.10,9393.35,9199.43,9275.06,1590500000,9275.06
+2003-09-29,9314.42,9431.54,9259.68,9380.24,1366500000,9380.24
+2003-09-26,9342.43,9407.89,9257.99,9313.08,1472500000,9313.08
+2003-09-25,9425.58,9493.44,9311.47,9343.96,1530000000,9343.96
+2003-09-24,9575.97,9612.53,9400.67,9425.51,1556000000,9425.51
+2003-09-23,9535.76,9623.34,9479.41,9576.04,1301700000,9576.04
+2003-09-22,9641.80,9641.87,9467.83,9535.41,1278800000,9535.41
+2003-09-19,9661.80,9719.49,9582.64,9644.82,1518600000,9644.82
+2003-09-18,9544.04,9691.55,9513.37,9659.13,1498800000,9659.13
+2003-09-17,9566.08,9641.45,9510.28,9545.65,1338210000,9545.65
+2003-09-16,9449.16,9587.90,9426.84,9567.34,1403200000,9567.34
+2003-09-15,9471.19,9541.02,9396.03,9448.81,1151300000,9448.81
+2003-09-12,9456.88,9517.37,9348.59,9471.55,1236700000,9471.55
+2003-09-11,9415.05,9540.60,9374.49,9459.76,1335900000,9459.76
+2003-09-10,9504.88,9545.51,9373.08,9420.46,1582100000,9420.46
+2003-09-09,9584.92,9617.02,9459.85,9507.20,1414800000,9507.20
+2003-09-08,9503.41,9638.57,9492.25,9586.29,1299300000,9586.29
+2003-09-05,9589.52,9602.22,9441.93,9503.34,1465200000,9503.34
+2003-09-04,9569.09,9661.80,9492.74,9587.90,1453900000,9587.90
+2003-09-03,9521.86,9632.75,9465.72,9568.46,1675600000,9568.46
+2003-09-02,9416.67,9563.83,9357.44,9523.27,1470500000,9523.27
+2003-08-29,9373.33,9444.25,9320.52,9415.82,945100000,9415.82
+2003-08-28,9334.35,9415.68,9246.48,9374.21,1165200000,9374.21
+2003-08-27,9339.82,9387.82,9280.03,9333.79,1051400000,9333.79
+2003-08-26,9316.03,9372.45,9203.54,9340.45,1178700000,9340.45
+2003-08-25,9349.44,9381.51,9242.56,9317.64,971700000,9317.64
+2003-08-22,9436.04,9535.97,9323.26,9348.87,1308900000,9348.87
+2003-08-21,9399.96,9517.37,9345.71,9423.68,1407100000,9423.68
+2003-08-20,9420.13,9454.49,9324.03,9397.51,1210800000,9397.51
+2003-08-19,9412.17,9490.60,9315.25,9428.90,1300600000,9428.90
+2003-08-18,9320.66,9466.79,9309.16,9412.45,1127600000,9412.45
+2003-08-15,9308.52,9360.27,9253.20,9321.69,636370000,9321.69
+2003-08-14,9272.25,9356.63,9193.33,9310.56,1186800000,9310.56
+2003-08-13,9303.69,9350.19,9213.43,9271.76,1208800000,9271.76
+2003-08-12,9218.12,9329.04,9163.29,9310.06,1132300000,9310.06
+2003-08-11,9189.62,9275.61,9124.00,9217.35,1022200000,9217.35
+2003-08-08,9127.36,9230.37,9097.74,9191.09,1086600000,9191.09
+2003-08-07,9060.48,9171.13,9003.63,9126.45,1389300000,9126.45
+2003-08-06,9032.96,9151.38,8964.13,9061.74,1491000000,9061.74
+2003-08-05,9185.27,9210.21,9024.77,9036.32,1351700000,9036.32
+2003-08-04,9154.18,9231.84,9033.66,9186.04,1318700000,9186.04
+2003-08-01,9232.68,9266.37,9100.12,9153.97,1390600000,9153.97
+2003-07-31,9199.35,9398.02,9183.80,9233.80,1608000000,9233.80
+2003-07-30,9204.39,9272.88,9131.70,9200.05,1391900000,9200.05
+2003-07-29,9268.19,9327.36,9135.62,9204.46,1508900000,9204.46
+2003-07-28,9284.92,9356.77,9182.96,9266.51,1328600000,9266.51
+2003-07-25,9113.85,9296.62,9062.38,9284.57,1397500000,9284.57
+2003-07-24,9196.56,9313.99,9092.98,9112.51,1559000000,9112.51
+2003-07-23,9159.08,9249.91,9064.69,9194.24,1362700000,9194.24
+2003-07-22,9098.65,9221.83,9008.60,9158.45,1439700000,9158.45
+2003-07-21,9187.80,9219.87,9025.12,9096.69,1254200000,9096.69
+2003-07-18,9052.29,9212.31,9034.36,9188.15,1365200000,9188.15
+2003-07-17,9089.34,9160.27,8968.82,9050.82,1661400000,9050.82
+2003-07-16,9133.70,9185.63,9005.23,9094.59,1662000000,9094.59
+2003-07-15,9179.18,9260.42,9054.60,9128.97,1518600000,9128.97
+2003-07-14,9126.45,9316.44,9126.45,9177.15,1448900000,9177.15
+2003-07-11,9036.39,9176.59,9009.01,9119.59,1212700000,9119.59
+2003-07-10,9154.53,9154.53,8978.13,9036.04,1465700000,9036.04
+2003-07-09,9221.90,9270.22,9077.91,9156.21,1618000000,9156.21
+2003-07-08,9213.48,9281.77,9122.24,9223.09,1565700000,9223.09
+2003-07-07,9073.92,9289.90,9073.92,9216.79,1429100000,9216.79
+2003-07-03,9141.16,9164.48,9014.06,9070.21,775900000,9070.21
+2003-07-02,9043.54,9168.82,9025.12,9142.84,1519300000,9142.84
+2003-07-01,8983.66,9068.05,8843.61,9040.95,1460200000,9040.95
+2003-06-30,8990.74,9100.12,8934.71,8985.44,1587200000,8985.44
+2003-06-27,9079.74,9135.91,8938.26,8989.05,1267800000,8989.05
+2003-06-26,9011.06,9118.82,8953.83,9079.04,1387400000,9079.04
+2003-06-25,9109.57,9195.20,8984.29,9011.53,1459200000,9011.53
+2003-06-24,9071.48,9179.25,9020.08,9109.85,1388300000,9109.85
+2003-06-23,9199.49,9215.32,9003.83,9072.95,1398100000,9072.95
+2003-06-20,9180.93,9306.36,9149.21,9200.75,1698000000,9200.75
+2003-06-19,9293.80,9346.34,9134.50,9179.53,1530100000,9179.53
+2003-06-18,9322.67,9363.15,9185.17,9293.80,1488900000,9293.80
+2003-06-17,9319.66,9406.50,9234.78,9323.02,1479700000,9323.02
+2003-06-16,9117.56,9335.49,9117.56,9318.96,1345900000,9318.96
+2003-06-13,9197.88,9234.23,9042.63,9117.12,1271600000,9117.12
+2003-06-12,9184.29,9270.64,9089.38,9196.55,1553100000,9196.55
+2003-06-11,9048.85,9202.08,9010.13,9183.22,1520000000,9183.22
+2003-06-10,8980.79,9111.11,8946.06,9054.89,1275400000,9054.89
+2003-06-09,9061.18,9109.43,8909.78,8980.00,1307000000,8980.00
+2003-06-06,9045.57,9248.71,9008.87,9062.79,1837200000,9062.79
+2003-06-05,9036.67,9106.70,8905.37,9041.30,1693100000,9041.30
+2003-06-04,8919.94,9076.94,8882.75,9038.98,1618700000,9038.98
+2003-06-03,8898.23,8973.02,8823.51,8922.95,1450200000,8922.95
+2003-06-02,8851.45,9040.46,8833.66,8897.81,1662500000,8897.81
+2003-05-30,8711.46,8897.04,8711.46,8850.26,1688800000,8850.26
+2003-05-29,8787.23,8895.99,8657.96,8711.18,1685800000,8711.18
+2003-05-28,8781.84,8885.34,8721.90,8793.12,1559000000,8793.12
+2003-05-27,8600.54,8812.30,8523.64,8781.35,1532000000,8781.35
+2003-05-23,8594.02,8668.47,8513.98,8601.38,1201000000,8601.38
+2003-05-22,8516.99,8650.33,8495.35,8594.02,1448500000,8594.02
+2003-05-21,8485.62,8577.64,8389.68,8516.43,1457800000,8516.43
+2003-05-20,8494.09,8593.61,8394.51,8491.36,1505300000,8491.36
+2003-05-19,8676.52,8676.52,8455.72,8493.39,1375700000,8493.39
+2003-05-16,8710.36,8766.36,8614.33,8678.97,1505500000,8678.97
+2003-05-15,8649.22,8766.58,8613.84,8713.14,1508700000,8713.14
+2003-05-14,8673.29,8744.94,8575.96,8647.82,1401800000,8647.82
+2003-05-13,8722.88,8757.40,8611.18,8679.25,1418100000,8679.25
+2003-05-12,8603.90,8764.12,8544.24,8726.73,1378800000,8726.73
+2003-05-09,8492.69,8637.58,8482.89,8604.60,1326100000,8604.60
+2003-05-08,8558.67,8591.01,8435.61,8491.22,1379600000,8491.22
+2003-05-07,8585.42,8650.82,8494.87,8560.63,1531900000,8560.63
+2003-05-06,8531.28,8658.18,8486.88,8588.36,1649600000,8588.36
+2003-05-05,8583.17,8643.11,8472.67,8531.57,1446300000,8531.57
+2003-05-02,8453.48,8612.86,8389.40,8582.68,1554300000,8582.68
+2003-05-01,8478.48,8519.09,8328.55,8454.25,1397500000,8454.25
+2003-04-30,8501.38,8557.62,8402.36,8480.09,1788510000,8480.09
+2003-04-29,8472.88,8578.55,8414.61,8502.99,1525600000,8502.99
+2003-04-28,8306.84,8515.80,8290.46,8471.61,1273000000,8471.61
+2003-04-25,8438.98,8453.06,8258.80,8306.35,1335800000,8306.35
+2003-04-24,8512.44,8527.99,8363.28,8440.04,1648100000,8440.04
+2003-04-23,8484.92,8587.72,8398.65,8515.66,1667200000,8515.66
+2003-04-22,8326.38,8509.43,8238.14,8484.99,1631200000,8484.99
+2003-04-21,8336.67,8423.09,8270.56,8328.90,1118700000,8328.90
+2003-04-17,8255.79,8388.28,8172.52,8337.65,1430600000,8337.65
+2003-04-16,8405.72,8459.15,8217.27,8257.61,1587600000,8257.61
+2003-04-15,8347.66,8443.11,8251.38,8402.36,1460200000,8402.36
+2003-04-14,8203.97,8375.19,8175.60,8351.10,1131000000,8351.10
+2003-04-11,8223.22,8360.76,8156.77,8203.41,1141600000,8203.41
+2003-04-10,8198.99,8274.56,8109.85,8221.33,1275300000,8221.33
+2003-04-09,8299.28,8404.25,8174.90,8197.94,1293700000,8197.94
+2003-04-08,8299.12,8382.43,8222.24,8298.92,1235400000,8298.92
+2003-04-07,8284.15,8550.40,8272.24,8300.41,1494000000,8300.41
+2003-04-04,8240.59,8348.29,8176.66,8277.15,1241200000,8277.15
+2003-04-03,8285.76,8378.76,8199.49,8240.38,1351500000,8240.38
+2003-04-02,8070.98,8342.27,8070.98,8285.06,1589800000,8285.06
+2003-04-01,7992.83,8133.03,7947.38,8069.86,1461600000,8069.86
+2003-03-31,8142.83,8142.83,7903.97,7992.13,1495500000,7992.13
+2003-03-28,8198.85,8224.83,8070.77,8145.77,1227000000,8145.77
+2003-03-27,8226.39,8272.03,8085.40,8201.45,1232900000,8201.45
+2003-03-26,8279.88,8323.01,8165.52,8229.88,1319700000,8229.88
+2003-03-25,8216.85,8355.93,8155.65,8280.23,1333400000,8280.23
+2003-03-24,8514.82,8514.82,8166.78,8214.68,1293000000,8214.68
+2003-03-21,8290.38,8552.08,8290.38,8521.97,1883710000,8521.97
+2003-03-20,8264.68,8335.20,8122.59,8286.60,1439100000,8286.60
+2003-03-19,8193.04,8304.04,8116.01,8265.45,1473400000,8265.45
+2003-03-18,8142.69,8253.48,8057.54,8194.23,1555100000,8194.23
+2003-03-17,7857.96,8163.56,7763.56,8141.92,1700420000,8141.92
+2003-03-14,7822.17,7961.60,7761.25,7859.71,1541900000,7859.71
+2003-03-13,7555.29,7847.03,7555.29,7821.75,1816300000,7821.75
+2003-03-12,7517.76,7582.96,7397.31,7552.07,1620000000,7552.07
+2003-03-11,7568.53,7673.98,7488.00,7524.06,1427700000,7524.06
+2003-03-10,7739.40,7739.40,7545.77,7568.18,1255000000,7568.18
+2003-03-07,7671.75,7780.57,7536.18,7740.03,1368500000,7740.03
+2003-03-06,7774.76,7795.07,7624.97,7673.99,1299200000,7673.99
+2003-03-05,7702.35,7801.79,7639.82,7775.60,1332700000,7775.60
+2003-03-04,7838.14,7859.08,7688.98,7704.87,1256600000,7704.87
+2003-03-03,7890.24,7997.66,7809.05,7837.86,1208900000,7837.86
+2003-02-28,7886.11,7987.80,7826.72,7891.08,1373300000,7891.08
+2003-02-27,7807.96,7950.46,7774.34,7884.99,1287800000,7884.99
+2003-02-26,7907.39,7944.93,7767.62,7806.98,1374400000,7806.98
+2003-02-25,7856.42,7931.14,7700.53,7909.50,1483700000,7909.50
+2003-02-24,8017.34,8017.34,7828.06,7858.24,1229200000,7858.24
+2003-02-21,7915.52,8055.79,7843.81,8018.11,1398200000,8018.11
+2003-02-20,8002.70,8051.37,7858.24,7914.96,1194100000,7914.96
+2003-02-19,8033.80,8079.11,7913.70,8000.60,1075600000,8000.60
+2003-02-18,7909.30,8114.82,7909.30,8041.15,1250800000,8041.15
+2003-02-14,7750.90,7936.56,7704.96,7908.80,1404600000,7908.80
+2003-02-13,7756.55,7817.88,7602.81,7749.87,1489300000,7749.87
+2003-02-12,7836.36,7892.96,7720.39,7758.17,1260500000,7758.17
+2003-02-11,7920.93,8010.89,7798.69,7843.11,1307000000,7843.11
+2003-02-10,7865.74,7963.03,7777.98,7920.11,1238200000,7920.11
+2003-02-07,7932.45,8019.46,7811.10,7864.23,1276800000,7864.23
+2003-02-06,7981.95,8031.66,7855.87,7929.30,1430900000,7929.30
+2003-02-05,8014.45,8162.96,7950.42,7985.18,1450800000,7985.18
+2003-02-04,8104.61,8104.61,7915.93,8013.29,1451600000,8013.29
+2003-02-03,8053.74,8189.35,8032.90,8109.82,1258500000,8109.82
+2003-01-31,7939.72,8121.37,7884.66,8053.81,1578530000,8053.81
+2003-01-30,8109.14,8169.81,7918.19,7945.13,1510300000,7945.13
+2003-01-29,8087.95,8173.31,7916.89,8110.71,1595400000,8110.71
+2003-01-28,7991.07,8153.36,7954.95,8088.84,1459100000,8088.84
+2003-01-27,8128.54,8167.41,7929.16,7989.56,1435900000,7989.56
+2003-01-24,8367.89,8367.89,8092.00,8131.01,1574800000,8131.01
+2003-01-23,8320.72,8437.69,8215.61,8369.47,1744550000,8369.47
+2003-01-22,8439.54,8493.50,8270.94,8318.73,1560800000,8318.73
+2003-01-21,8586.26,8650.43,8421.03,8442.90,1335200000,8442.90
+2003-01-17,8695.82,8695.82,8523.60,8586.74,1358200000,8586.74
+2003-01-16,8721.12,8837.47,8634.46,8697.87,1534600000,8697.87
+2003-01-15,8843.64,8865.65,8674.43,8723.18,1432100000,8723.18
+2003-01-14,8787.22,8865.41,8717.56,8842.62,1379400000,8842.62
+2003-01-13,8787.83,8896.09,8721.12,8785.98,1396300000,8785.98
+2003-01-10,8776.04,8846.25,8654.21,8784.89,1485400000,8784.89
+2003-01-09,8596.68,8814.09,8596.68,8776.18,1560300000,8776.18
+2003-01-08,8735.93,8749.44,8549.72,8595.31,1467600000,8595.31
+2003-01-07,8775.84,8843.37,8661.20,8740.59,1545200000,8740.59
+2003-01-06,8602.78,8826.71,8578.86,8773.57,1435900000,8773.57
+2003-01-03,8607.38,8669.91,8503.71,8601.69,1130800000,8601.69
+2003-01-02,8342.38,8633.02,8342.38,8607.52,1229200000,8607.52
+2002-12-31,8332.24,8400.46,8216.44,8341.63,1088500000,8341.63
+2002-12-30,8304.06,8405.67,8214.93,8332.85,1057800000,8332.85
+2002-12-27,8429.28,8470.05,8272.31,8303.78,758400000,8303.78
+2002-12-26,8448.86,8587.98,8392.23,8432.61,721100000,8432.61
+2002-12-24,8491.99,8522.98,8407.45,8448.11,458310000,8448.11
+2002-12-23,8511.39,8573.92,8418.90,8493.29,1112100000,8493.29
+2002-12-20,8367.41,8557.47,8367.41,8511.32,1782730000,8511.32
+2002-12-19,8441.94,8530.25,8302.41,8364.80,1385900000,8364.80
+2002-12-18,8531.31,8553.76,8367.89,8447.35,1446200000,8447.35
+2002-12-17,8626.99,8672.38,8495.21,8535.39,1251800000,8535.39
+2002-12-16,8436.59,8649.06,8421.58,8627.40,1271600000,8627.40
+2002-12-13,8536.07,8563.16,8374.68,8433.71,1330800000,8433.71
+2002-12-12,8590.99,8662.71,8466.21,8538.40,1255300000,8538.40
+2002-12-11,8571.52,8669.91,8452.84,8589.14,1285100000,8589.14
+2002-12-10,8473.61,8624.93,8419.86,8574.26,1286600000,8574.26
+2002-12-09,8643.99,8643.99,8438.24,8473.41,1320800000,8473.41
+2002-12-06,8620.88,8707.21,8469.16,8645.77,1241100000,8645.77
+2002-12-05,8740.66,8796.68,8572.00,8623.28,1250200000,8623.28
+2002-12-04,8734.22,8834.04,8600.93,8737.85,1588900000,8737.85
+2002-12-03,8861.13,8882.04,8649.89,8742.93,1488400000,8742.93
+2002-12-02,8902.95,9076.35,8757.60,8862.57,1612000000,8862.57
+2002-11-29,8933.67,8995.78,8847.42,8896.09,643460000,8896.09
+2002-11-27,8678.96,8975.08,8678.96,8931.68,1350300000,8931.68
+2002-11-26,8844.12,8845.01,8634.53,8676.42,1543600000,8676.42
+2002-11-25,8804.97,8918.03,8717.63,8849.40,1574000000,8849.40
+2002-11-22,8842.41,8944.16,8732.23,8804.84,1626800000,8804.84
+2002-11-21,8625.48,8910.83,8619.58,8845.15,2415100000,8845.15
+2002-11-20,8469.57,8675.12,8402.72,8623.01,1517300000,8623.01
+2002-11-19,8484.93,8566.45,8355.62,8474.78,1337400000,8474.78
+2002-11-18,8579.74,8671.41,8444.26,8486.57,1282600000,8486.57
+2002-11-15,8535.64,8622.30,8421.10,8579.09,1400100000,8579.09
+2002-11-14,8403.69,8596.50,8396.27,8542.13,1488100000,8542.13
+2002-11-13,8380.32,8523.47,8237.65,8398.49,1463400000,8398.49
+2002-11-12,8356.73,8557.25,8286.13,8386.00,1377100000,8386.00
+2002-11-11,8535.81,8541.09,8315.40,8358.95,1113000000,8358.95
+2002-11-08,8585.75,8688.96,8455.01,8537.13,1446500000,8537.13
+2002-11-07,8766.08,8766.08,8517.78,8586.24,1466900000,8586.24
+2002-11-06,8677.17,8841.61,8561.48,8771.01,1623700000,8771.01
+2002-11-05,8568.76,8730.92,8497.60,8678.27,1354100000,8678.27
+2002-11-04,8521.60,8787.30,8510.08,8571.60,1645900000,8571.60
+2002-11-01,8395.64,8569.24,8271.77,8517.64,1450400000,8517.64
+2002-10-31,8427.34,8538.17,8293.17,8397.03,1641300000,8397.03
+2002-10-30,8363.95,8502.32,8273.99,8427.41,1422300000,8427.41
+2002-10-29,8367.28,8456.19,8161.01,8368.94,1529700000,8368.94
+2002-10-28,8448.98,8601.01,8281.34,8368.04,1382600000,8368.04
+2002-10-25,8317.48,8474.92,8210.74,8443.99,1340400000,8443.99
+2002-10-24,8495.38,8607.04,8253.60,8317.34,1700570000,8317.34
+2002-10-23,8448.56,8546.57,8256.79,8494.27,1593900000,8494.27
+2002-10-22,8534.08,8543.65,8303.33,8450.16,1549200000,8450.16
+2002-10-21,8320.74,8580.13,8191.87,8538.24,1447000000,8538.24
+2002-10-18,8287.72,8383.16,8115.72,8322.40,1423100000,8322.40
+2002-10-17,8038.31,8395.99,8038.31,8275.04,1780390000,8275.04
+2002-10-16,8232.10,8232.10,7958.34,8036.03,1585000000,8036.03
+2002-10-15,7883.23,8304.58,7883.23,8255.68,1956000000,8255.68
+2002-10-14,7848.21,7948.91,7725.23,7877.40,1200300000,7877.40
+2002-10-11,7540.74,7919.57,7540.74,7850.29,1854130000,7850.29
+2002-10-10,7286.34,7588.25,7181.47,7533.95,2090230000,7533.95
+2002-10-09,7499.96,7500.03,7215.39,7286.27,1885030000,7286.27
+2002-10-08,7425.82,7680.57,7294.53,7501.49,1938430000,7501.49
+2002-10-07,7528.68,7685.42,7368.46,7422.84,1576500000,7422.84
+2002-10-04,7719.34,7817.06,7428.32,7528.40,1835930000,7528.40
+2002-10-03,7753.46,7943.64,7638.47,7717.19,1674500000,7717.19
+2002-10-02,7936.57,7996.77,7696.66,7755.61,1668900000,7755.61
+2002-10-01,7593.04,7964.24,7558.36,7938.79,1780900000,7938.79
+2002-09-30,7698.81,7729.53,7422.28,7591.93,1721870000,7591.93
+2002-09-27,7996.01,7997.12,7664.89,7701.45,1507300000,7701.45
+2002-09-26,7844.62,8086.86,7800.97,7997.12,1650000000,7997.12
+2002-09-25,7687.16,7939.90,7641.87,7841.82,1651500000,7841.82
+2002-09-24,7871.23,7893.36,7606.77,7683.13,1670240000,7683.13
+2002-09-23,7984.77,7984.77,7738.06,7872.15,1381100000,7872.15
+2002-09-20,7945.93,8081.04,7868.60,7986.02,1792800000,7986.02
+2002-09-19,8170.65,8170.65,7904.87,7942.39,1524000000,7942.39
+2002-09-18,8203.07,8283.49,8013.42,8172.45,1501000000,8172.45
+2002-09-17,8386.35,8508.61,8169.88,8207.55,1448600000,8207.55
+2002-09-16,8311.79,8435.04,8214.27,8380.18,1001400000,8380.18
+2002-09-13,8377.68,8414.79,8175.85,8312.69,1271000000,8312.69
+2002-09-12,8574.94,8574.94,8334.82,8379.41,1191600000,8379.41
+2002-09-11,8604.27,8767.82,8545.11,8581.17,846600000,8581.17
+2002-09-10,8520.14,8660.94,8447.73,8602.61,1186400000,8602.61
+2002-09-09,8425.88,8584.30,8288.28,8519.38,1130600000,8519.38
+2002-09-06,8296.46,8526.80,8296.46,8427.20,1184500000,8427.20
+2002-09-05,8420.20,8420.20,8173.56,8283.70,1401300000,8283.70
+2002-09-04,8308.53,8495.03,8216.98,8425.12,1372100000,8425.12
+2002-09-03,8659.27,8659.27,8282.87,8308.05,1323400000,8308.05
+2002-08-30,8669.26,8811.72,8572.85,8663.50,929900000,8663.50
+2002-08-29,8690.69,8769.34,8514.10,8670.99,1271100000,8670.99
+2002-08-28,8823.93,8832.18,8610.79,8694.09,1146600000,8694.09
+2002-08-27,8917.49,9040.04,8747.77,8824.41,1307700000,8824.41
+2002-08-26,8873.93,8981.23,8723.43,8919.01,1016900000,8919.01
+2002-08-23,9051.49,9051.49,8806.38,8872.96,1071500000,8872.96
+2002-08-22,8961.18,9129.10,8860.34,9053.64,1373000000,9053.64
+2002-08-21,8866.14,9033.52,8768.51,8957.23,1353100000,8957.23
+2002-08-20,8986.50,8989.69,8789.13,8872.07,1308500000,8872.07
+2002-08-19,8777.09,9037.38,8720.81,8990.79,1299800000,8990.79
+2002-08-16,8813.07,8899.42,8644.59,8778.06,1265300000,8778.06
+2002-08-15,8745.04,8914.37,8620.98,8818.14,1505100000,8818.14
+2002-08-14,8479.14,8778.89,8295.34,8743.31,1533800000,8743.31
+2002-08-13,8683.15,8801.87,8445.91,8482.39,1297700000,8482.39
+2002-08-12,8741.92,8753.14,8528.15,8688.89,1036500000,8688.89
+2002-08-09,8707.24,8824.92,8538.46,8745.45,1294900000,8745.45
+2002-08-08,8456.29,8755.70,8364.29,8712.02,1646700000,8712.02
+2002-08-07,8282.25,8520.95,8171.70,8456.15,1490400000,8456.15
+2002-08-06,8049.93,8472.28,8049.93,8274.09,1514100000,8274.09
+2002-08-05,8312.92,8371.00,7991.43,8043.63,1425500000,8043.63
+2002-08-02,8504.96,8566.36,8179.80,8313.13,1538100000,8313.13
+2002-08-01,8732.58,8758.40,8430.68,8506.62,1672200000,8506.62
+2002-07-31,8678.65,8793.36,8463.21,8736.59,2049360000,8736.59
+2002-07-30,8707.03,8806.86,8484.05,8680.03,1826090000,8680.03
+2002-07-29,8267.99,8749.12,8267.99,8711.88,1778650000,8711.88
+2002-07-26,8192.61,8350.10,8039.89,8264.39,1796100000,8264.39
+2002-07-25,8185.89,8390.39,7893.34,8186.31,2424700000,8186.31
+2002-07-24,7698.46,8243.07,7489.53,8191.29,2775560000,8191.29
+2002-07-23,7785.55,8007.91,7590.75,7702.34,2441020000,7702.34
+2002-07-22,8015.04,8173.08,7668.35,7784.58,2248060000,7784.58
+2002-07-19,8356.74,8356.74,7940.83,8019.26,2654100000,8019.26
+2002-07-18,8540.47,8683.84,8350.72,8409.49,1736300000,8409.49
+2002-07-17,8476.21,8765.39,8401.12,8542.48,2566500000,8542.48
+2002-07-16,8635.31,8697.69,8346.29,8473.11,1843700000,8473.11
+2002-07-15,8681.28,8720.18,8220.78,8639.19,2574800000,8639.19
+2002-07-12,8805.33,8903.00,8555.15,8684.53,1607400000,8684.53
+2002-07-11,8812.12,8937.87,8557.84,8801.53,2080480000,8801.53
+2002-07-10,9098.16,9188.71,8772.94,8813.50,1816900000,8813.50
+2002-07-09,9273.38,9357.35,9065.88,9096.09,1348900000,9096.09
+2002-07-08,9375.70,9433.08,9184.90,9274.90,1184400000,9274.90
+2002-07-05,9061.54,9399.65,9054.97,9379.50,699400000,9379.50
+2002-07-03,9006.37,9140.32,8832.89,9054.97,1527800000,9054.97
+2002-07-02,9104.95,9185.88,8918.11,9007.75,1823000000,9007.75
+2002-07-01,9239.25,9381.37,9059.88,9109.79,1425500000,9109.79
+2002-06-28,9270.33,9435.44,9131.49,9243.26,2117000000,9243.26
+2002-06-27,9122.12,9342.33,8992.32,9269.92,1908600000,9269.92
+2002-06-26,9108.22,9207.07,8831.92,9120.11,336570000,9120.11
+2002-06-25,9285.56,9457.38,9089.17,9126.82,1513700000,9126.82
+2002-06-24,9252.47,9417.23,9046.04,9281.82,1552600000,9281.82
+2002-06-21,9430.66,9456.76,9186.71,9253.79,1497200000,9253.79
+2002-06-20,9561.64,9628.11,9390.10,9431.77,1389700000,9431.77
+2002-06-19,9702.00,9760.20,9514.29,9561.57,1336100000,9561.57
+2002-06-18,9684.52,9775.83,9588.29,9706.12,1193100000,9706.12
+2002-06-17,9476.50,9736.58,9462.30,9687.42,1236600000,9687.42
+2002-06-14,9498.92,9538.93,9229.63,9474.21,1549000000,9474.21
+2002-06-13,9612.87,9671.64,9454.41,9502.80,1405500000,9502.80
+2002-06-12,9515.12,9682.37,9380.82,9617.71,1795720000,9617.71
+2002-06-11,9647.62,9794.17,9487.91,9517.26,1212400000,9517.26
+2002-06-10,9587.38,9744.33,9509.91,9645.40,1226200000,9645.40
+2002-06-07,9592.38,9668.18,9416.33,9589.67,1341300000,9589.67
+2002-06-06,9795.70,9820.41,9552.85,9624.64,1601500000,9624.64
+2002-06-05,9688.53,9860.91,9636.82,9796.80,1300100000,9796.80
+2002-06-04,9710.34,9798.74,9541.36,9687.84,1466600000,9687.84
+2002-06-03,9923.94,10016.04,9685.49,9709.79,1324300000,9709.79
+2002-05-31,9915.15,10074.16,9865.89,9925.25,1277300000,9925.25
+2002-05-30,9915.01,9995.76,9769.64,9911.69,1286600000,9911.69
+2002-05-29,9976.94,10056.31,9860.42,9923.04,1081800000,9923.04
+2002-05-28,10106.54,10144.53,9917.64,9981.58,996500000,9981.58
+2002-05-24,10211.92,10255.93,10054.58,10104.26,885400000,10104.26
+2002-05-23,10158.30,10268.87,10044.20,10216.08,1192900000,10216.08
+2002-05-22,10098.58,10200.78,10004.41,10157.88,1136300000,10157.88
+2002-05-21,10229.08,10322.15,10060.46,10105.71,1169200000,10105.71
+2002-05-20,10348.93,10357.44,10164.39,10229.50,989800000,10229.50
+2002-05-17,10291.05,10400.62,10209.49,10353.08,1274400000,10353.08
+2002-05-16,10242.11,10374.05,10168.64,10289.21,1256600000,10289.21
+2002-05-15,10288.56,10382.97,10152.97,10243.68,1420200000,10243.68
+2002-05-14,10119.34,10346.59,10119.34,10298.14,1414500000,10298.14
+2002-05-13,9938.82,10148.71,9892.73,10109.66,1088600000,10109.66
+2002-05-10,10040.25,10115.23,9891.04,9939.92,1171900000,9939.92
+2002-05-09,10137.96,10185.08,9966.63,10037.42,1153000000,10037.42
+2002-05-08,9847.96,10203.76,9847.96,10141.83,1502000000,10141.83
+2002-05-07,9810.53,9985.32,9749.73,9836.55,1354700000,9836.55
+2002-05-06,10005.80,10081.98,9780.29,9808.04,1122600000,9808.04
+2002-05-03,10091.73,10130.97,9891.49,10006.63,1284500000,10006.63
+2002-05-02,10057.62,10182.94,9970.92,10091.87,1364000000,10091.87
+2002-05-01,9944.90,10121.21,9778.42,10059.63,1451400000,10059.63
+2002-04-30,9818.90,10063.64,9775.10,9946.22,1628600000,9946.22
+2002-04-29,9910.52,10012.16,9767.15,9819.87,1314700000,9819.87
+2002-04-26,10037.42,10127.85,9875.44,9910.72,1374200000,9910.72
+2002-04-25,10028.70,10103.64,9864.08,10035.06,1517400000,10035.06
+2002-04-24,10090.07,10209.64,9984.00,10030.43,1373200000,10030.43
+2002-04-23,10137.20,10243.06,10003.84,10089.24,1388500000,10089.24
+2002-04-22,10256.00,10299.39,10056.45,10136.43,1181800000,10136.43
+2002-04-19,10212.69,10338.83,10151.52,10257.11,1185000000,10257.11
+2002-04-18,10219.47,10334.67,10010.22,10205.28,1359300000,10205.28
+2002-04-17,10299.66,10379.51,10137.47,10220.78,1376900000,10220.78
+2002-04-16,10100.38,10365.12,10100.38,10301.32,1341300000,10301.32
+2002-04-15,10189.57,10261.05,10037.90,10093.67,1120400000,10093.67
+2002-04-12,10178.57,10312.26,10083.92,10190.82,1282100000,10190.82
+2002-04-11,10378.89,10425.87,10116.37,10176.08,1505600000,10176.08
+2002-04-10,10210.40,10437.43,10175.18,10381.73,1447900000,10381.73
+2002-04-09,10249.84,10362.98,10156.57,10208.67,1235400000,10208.67
+2002-04-08,10258.91,10300.78,10049.94,10249.08,1095300000,10249.08
+2002-04-05,10235.80,10403.66,10169.79,10271.64,1110200000,10271.64
+2002-04-04,10199.54,10301.53,10118.10,10235.17,1283800000,10235.17
+2002-04-03,10311.81,10377.09,10116.02,10198.29,1219700000,10198.29
+2002-04-02,10352.46,10394.94,10204.66,10313.71,1176700000,10313.71
+2002-04-01,10402.07,10434.52,10226.59,10362.70,1050900000,10362.70
+2002-03-28,10429.68,10537.48,10341.59,10403.94,1147600000,10403.94
+2002-03-27,10351.28,10490.15,10300.29,10426.91,1180100000,10426.91
+2002-03-26,10280.51,10475.00,10233.65,10353.36,1223600000,10353.36
+2002-03-25,10428.43,10497.76,10255.59,10281.67,1057900000,10281.67
+2002-03-22,10477.70,10537.62,10324.23,10427.67,1243300000,10427.67
+2002-03-21,10501.99,10577.82,10326.99,10479.84,1339200000,10479.84
+2002-03-20,10626.85,10634.84,10455.56,10501.57,1304900000,10501.57
+2002-03-19,10578.38,10722.78,10530.63,10635.25,1255000000,10635.25
+2002-03-18,10608.54,10707.01,10488.84,10577.75,1169500000,10577.75
+2002-03-15,10516.45,10663.69,10452.10,10607.23,1493900000,10607.23
+2002-03-14,10501.29,10615.74,10421.17,10517.14,1208800000,10517.14
+2002-03-13,10620.17,10648.68,10427.67,10501.85,1354000000,10501.85
+2002-03-12,10604.32,10682.72,10462.34,10632.35,1304400000,10632.35
+2002-03-11,10570.07,10679.68,10470.85,10611.24,1210200000,10611.24
+2002-03-08,10531.67,10728.87,10480.33,10572.49,1412000000,10572.49
+2002-03-07,10578.10,10663.82,10405.95,10525.37,1517400000,10525.37
+2002-03-06,10431.96,10637.19,10393.84,10574.29,1541300000,10574.29
+2002-03-05,10591.38,10639.96,10349.90,10433.41,1549300000,10433.41
+2002-03-04,10368.10,10656.50,10313.01,10586.82,1594300000,10586.82
+2002-03-01,10111.04,10397.09,10086.51,10368.86,1456500000,10368.86
+2002-02-28,10130.28,10283.89,10055.34,10106.13,1392200000,10106.13
+2002-02-27,10117.65,10315.72,10025.86,10127.58,1393800000,10127.58
+2002-02-26,10145.86,10241.89,9986.84,10115.26,1309200000,10115.26
+2002-02-25,9969.75,10204.04,9934.94,10145.71,1367400000,10145.71
+2002-02-22,9834.89,10032.45,9726.67,9968.15,1411000000,9968.15
+2002-02-21,9933.56,10072.98,9788.11,9834.68,1381600000,9834.68
+2002-02-20,9742.37,9990.78,9674.91,9941.17,1438900000,9941.17
+2002-02-19,9899.24,9923.39,9704.03,9745.14,1189900000,9745.14
+2002-02-15,10000.83,10065.37,9843.54,9903.04,1359200000,9903.04
+2002-02-14,9989.67,10092.29,9905.95,10001.99,1272500000,10001.99
+2002-02-13,9856.99,10056.24,9839.18,9989.67,1215900000,9989.67
+2002-02-12,9880.35,9943.24,9766.18,9863.74,1094200000,9863.74
+2002-02-11,9739.81,9933.07,9668.34,9884.78,1159400000,9884.78
+2002-02-08,9627.65,9795.38,9503.52,9744.24,1371900000,9744.24
+2002-02-07,9650.97,9799.67,9562.12,9625.44,1441600000,9625.44
+2002-02-06,9682.04,9801.33,9558.18,9653.39,1665800000,9653.39
+2002-02-05,9684.74,9842.77,9553.96,9685.43,1778300000,9685.43
+2002-02-04,9905.46,9940.96,9648.55,9687.09,1437600000,9687.09
+2002-02-01,9923.04,10022.82,9795.45,9907.26,1367200000,9907.26
+2002-01-31,9763.20,9963.79,9701.76,9920.00,1557000000,9920.00
+2002-01-30,9619.14,9821.81,9443.32,9762.86,2019600000,9762.86
+2002-01-29,9865.54,9952.59,9576.65,9618.24,1812000000,9618.24
+2002-01-28,9843.05,9959.44,9746.66,9865.75,1186800000,9865.75
+2002-01-25,9793.23,9949.54,9697.47,9840.08,1345100000,9840.08
+2002-01-24,9734.21,9926.71,9670.99,9796.07,1552800000,9796.07
+2002-01-23,9710.96,9853.64,9588.49,9730.96,1479200000,9730.96
+2002-01-22,9772.34,9905.26,9652.01,9713.80,1311600000,9713.80
+2002-01-18,9830.94,9873.98,9673.11,9771.85,1333300000,9771.85
+2002-01-17,9712.21,9910.11,9684.39,9850.04,1380100000,9850.04
+2002-01-16,9916.54,9923.32,9661.00,9712.27,1482500000,9712.27
+2002-01-15,9892.73,10038.94,9805.33,9924.15,1386900000,9924.15
+2002-01-14,9985.38,10038.87,9831.98,9891.42,1286400000,9891.42
+2002-01-11,10069.52,10163.77,9938.12,9987.53,1211900000,9987.53
+2002-01-10,10092.50,10174.91,9956.67,10067.86,1299000000,10067.86
+2002-01-09,10153.18,10311.98,10049.25,10094.09,1452000000,10094.09
+2002-01-08,10195.76,10270.53,10063.43,10150.55,1258800000,10150.55
+2002-01-07,10261.33,10345.40,10137.61,10197.05,1308300000,10197.05
+2002-01-04,10176.84,10341.87,10132.14,10259.74,1513000000,10259.74
+2002-01-03,10073.88,10227.36,10002.54,10172.14,1398900000,10172.14
+2002-01-02,10021.71,10125.85,9889.69,10073.40,1171000000,10073.40
+2001-12-31,10136.36,10178.71,10002.96,10021.57,943600000,10021.57
+2001-12-28,10133.94,10220.78,10067.17,10136.99,917400000,10136.99
+2001-12-27,10088.71,10187.71,10036.10,10131.31,876300000,10131.31
+2001-12-26,10035.55,10203.28,10014.10,10088.14,791100000,10088.14
+2001-12-24,10036.59,10114.91,9987.39,10035.34,439670000,10035.34
+2001-12-21,9986.84,10148.13,9935.70,10035.34,1694000000,10035.34
+2001-12-20,10064.13,10141.21,9912.76,9985.18,1490500000,9985.18
+2001-12-19,9994.59,10142.95,9876.96,10070.49,1484900000,10070.49
+2001-12-18,9893.22,10066.27,9876.19,9998.39,1354000000,9998.39
+2001-12-17,9809.42,9996.25,9747.77,9891.97,1260400000,9891.97
+2001-12-14,9764.72,9888.44,9661.14,9811.15,1306800000,9811.15
+2001-12-13,9889.13,9927.95,9691.30,9766.45,1511500000,9766.45
+2001-12-12,9887.27,9985.59,9745.42,9894.81,1449700000,9894.81
+2001-12-11,9925.60,10063.98,9794.48,9888.37,1367200000,9888.37
+2001-12-10,10047.04,10123.78,9868.03,9921.45,1218700000,9921.45
+2001-12-07,10099.14,10160.24,9938.54,10049.46,1248200000,10049.46
+2001-12-06,10113.53,10220.23,9997.98,10099.14,1487900000,10099.14
+2001-12-05,9891.35,10195.04,9875.92,10114.29,1765300000,10114.29
+2001-12-04,9765.55,9937.29,9700.24,9893.84,1318500000,9893.84
+2001-12-03,9848.93,9861.94,9651.87,9763.96,1202900000,9763.96
+2001-11-30,9828.80,9945.80,9752.26,9851.56,1343600000,9851.56
+2001-11-29,9710.34,9873.29,9629.72,9829.42,1375700000,9829.42
+2001-11-28,9867.06,9889.13,9662.80,9711.86,1423700000,9711.86
+2001-11-27,9980.33,10021.48,9776.07,9872.60,1288000000,9872.60
+2001-11-26,9961.58,10054.58,9862.22,9982.75,1129800000,9982.75
+2001-11-23,9833.09,9983.24,9804.37,9959.71,410300000,9959.71
+2001-11-21,9894.19,9932.31,9746.45,9834.68,1029300000,9834.68
+2001-11-20,9968.64,10023.37,9825.06,9901.38,1330200000,9901.38
+2001-11-19,9870.45,10040.46,9826.96,9976.46,1316800000,9976.46
+2001-11-16,9871.51,9967.94,9754.07,9866.99,1337400000,9866.99
+2001-11-15,9824.65,9967.46,9745.43,9872.39,1454500000,9872.39
+2001-11-14,9751.13,9943.18,9683.97,9823.61,1443400000,9823.61
+2001-11-13,9551.43,9811.29,9551.43,9750.95,1370100000,9750.95
+2001-11-12,9606.13,9642.25,9347.76,9554.37,991600000,9554.37
+2001-11-09,9586.96,9692.35,9478.75,9608.00,1093800000,9608.00
+2001-11-08,9558.39,9765.00,9506.91,9587.52,1517500000,9587.52
+2001-11-07,9584.68,9695.67,9457.99,9554.37,1411300000,9554.37
+2001-11-06,9437.09,9627.44,9315.79,9591.12,1356000000,9591.12
+2001-11-05,9326.59,9534.58,9326.59,9441.03,1267700000,9441.03
+2001-11-02,9264.52,9406.93,9152.91,9323.54,1121900000,9323.54
+2001-11-01,9087.45,9320.77,8987.61,9263.90,1317400000,9263.90
+2001-10-31,9123.64,9281.68,9018.26,9075.14,1352500000,9075.14
+2001-10-30,9264.52,9265.34,9011.96,9121.98,1297400000,9121.98
+2001-10-29,9543.37,9543.37,9232.83,9269.50,1106100000,9269.50
+2001-10-26,9462.28,9626.54,9369.35,9545.17,1244500000,9545.17
+2001-10-25,9342.29,9491.48,9143.09,9462.90,1364400000,9462.90
+2001-10-24,9341.40,9456.40,9218.29,9345.62,1336200000,9345.62
+2001-10-23,9379.17,9499.78,9249.02,9340.08,1317300000,9340.08
+2001-10-22,9203.91,9438.75,9101.08,9377.03,1105700000,9377.03
+2001-10-19,9162.81,9278.36,9027.74,9204.11,1294900000,9204.11
+2001-10-18,9230.75,9310.33,9061.02,9163.22,1262900000,9163.22
+2001-10-17,9389.76,9539.22,9199.89,9232.97,1452200000,9232.97
+2001-10-16,9346.31,9479.37,9239.68,9384.23,1210500000,9384.23
+2001-10-15,9340.84,9417.51,9181.07,9347.62,1024700000,9347.62
+2001-10-12,9409.07,9426.30,9146.34,9344.16,1331400000,9344.16
+2001-10-11,9242.63,9522.61,9204.04,9410.45,1704580000,9410.45
+2001-10-10,9052.30,9305.97,8975.15,9240.86,1312400000,9240.86
+2001-10-09,9066.56,9168.42,8927.34,9052.44,1227800000,9052.44
+2001-10-08,9115.75,9187.85,8937.86,9067.94,979000000,9067.94
+2001-10-05,9058.83,9208.41,8894.47,9119.77,1301700000,9119.77
+2001-10-04,9127.24,9259.61,8982.28,9060.88,1609100000,9060.88
+2001-10-03,8946.02,9193.32,8800.99,9123.78,1650600000,9123.78
+2001-10-02,8836.69,9001.03,8737.61,8950.59,1289800000,8950.59
+2001-10-01,8845.97,8931.70,8659.90,8836.83,1175600000,8836.83
+2001-09-28,8679.07,8945.68,8633.75,8847.56,1727400000,8847.56
+2001-09-27,8567.46,8757.47,8398.14,8681.42,1467000000,8681.42
+2001-09-26,8660.06,8766.81,8457.37,8567.39,1519100000,8567.39
+2001-09-25,8605.59,8778.23,8435.56,8659.97,1613800000,8659.97
+2001-09-24,8242.32,8733.39,8242.32,8603.86,1746600000,8603.86
+2001-09-21,8356.56,8484.22,7926.93,8235.81,2317300000,8235.81
+2001-09-20,8375.72,8711.38,8304.45,8376.21,2004800000,8376.21
+2001-09-19,8903.54,8990.37,8453.01,8759.13,2120550000,8759.13
+2001-09-18,8922.70,9126.89,8743.91,8903.40,1650410000,8903.40
+2001-09-17,9294.55,9294.55,8755.46,8920.70,2330830000,8920.70
+2001-09-10,9603.36,9740.44,9431.07,9605.51,1276600000,9605.51
+2001-09-07,9841.25,9842.08,9507.04,9605.85,1424300000,9605.85
+2001-09-06,10028.35,10053.73,9762.03,9840.84,1359700000,9840.84
+2001-09-05,9998.12,10140.79,9820.98,10033.27,1384500000,10033.27
+2001-09-04,9946.98,10238.50,9858.34,9997.49,1178300000,9997.49
+2001-08-31,9918.96,10072.22,9846.72,9949.75,920100000,9949.75
+2001-08-30,10077.07,10149.10,9829.35,9919.58,1157000000,9919.58
+2001-08-29,10224.45,10292.60,10030.43,10090.90,963700000,10090.90
+2001-08-28,10382.56,10405.88,10175.60,10222.03,987100000,10222.03
+2001-08-27,10422.76,10498.03,10334.88,10382.35,842600000,10382.35
+2001-08-24,10232.48,10487.52,10190.34,10423.17,1043600000,10423.17
+2001-08-23,10276.41,10357.09,10142.66,10229.15,986200000,10229.15
+2001-08-22,10170.30,10340.76,10099.07,10276.90,1110800000,10276.90
+2001-08-21,10320.07,10436.39,10132.92,10174.14,1041600000,10174.14
+2001-08-20,10239.33,10388.23,10146.05,10320.07,897100000,10320.07
+2001-08-17,10385.46,10418.68,10143.49,10240.78,974300000,10240.78
+2001-08-16,10342.10,10460.82,10198.15,10392.52,1055400000,10392.52
+2001-08-15,10407.05,10530.36,10289.01,10345.95,1065600000,10345.95
+2001-08-14,10416.95,10513.68,10333.29,10412.17,964600000,10412.17
+2001-08-13,10411.90,10504.82,10314.95,10415.91,837600000,10415.91
+2001-08-10,10296.89,10473.34,10164.67,10416.25,960900000,10416.25
+2001-08-09,10291.15,10361.52,10160.51,10298.56,1104200000,10298.56
+2001-08-08,10456.18,10509.80,10245.68,10293.50,1124600000,10293.50
+2001-08-07,10399.03,10520.11,10324.50,10458.74,1012000000,10458.74
+2001-08-06,10504.13,10549.59,10337.23,10401.31,811700000,10401.31
+2001-08-03,10550.01,10592.98,10381.10,10512.78,939900000,10512.78
+2001-08-02,10513.47,10663.07,10454.53,10551.18,1218300000,10551.18
+2001-08-01,10527.38,10659.33,10423.31,10510.01,1340300000,10510.01
+2001-07-31,10403.18,10639.40,10364.84,10522.81,1129200000,10522.81
+2001-07-30,10418.68,10513.26,10301.05,10401.72,909100000,10401.72
+2001-07-27,10451.89,10516.38,10316.27,10416.67,1015300000,10416.67
+2001-07-26,10403.46,10498.73,10237.46,10455.63,1213900000,10455.63
+2001-07-25,10241.75,10466.28,10159.34,10405.67,1280700000,10405.67
+2001-07-24,10423.80,10469.40,10170.82,10241.12,1198700000,10241.12
+2001-07-23,10576.92,10644.73,10374.81,10424.42,986900000,10424.42
+2001-07-20,10606.19,10668.33,10456.25,10576.65,1170900000,10576.65
+2001-07-19,10574.33,10758.14,10480.54,10610.00,1343500000,10610.00
+2001-07-18,10594.54,10676.83,10374.55,10569.83,1316300000,10569.83
+2001-07-17,10468.62,10683.76,10363.51,10606.39,1238100000,10606.39
+2001-07-16,10537.98,10649.02,10374.55,10472.12,1039800000,10472.12
+2001-07-13,10478.39,10615.42,10374.01,10539.06,1121700000,10539.06
+2001-07-12,10269.31,10542.02,10249.58,10478.99,1394000000,10478.99
+2001-07-11,10174.70,10355.83,10049.38,10241.02,1384100000,10241.02
+2001-07-10,10300.82,10406.87,10104.06,10175.64,1263800000,10175.64
+2001-07-09,10253.62,10389.91,10166.55,10299.40,1045700000,10299.40
+2001-07-06,10476.73,10483.82,10176.26,10252.68,1056700000,10252.68
+2001-07-05,10566.23,10617.47,10403.57,10479.86,934900000,10479.86
+2001-07-03,10588.89,10648.00,10479.99,10571.11,622110000,10571.11
+2001-07-02,10504.95,10707.24,10397.20,10593.72,1128300000,10593.72
+2001-06-29,10565.27,10729.18,10374.32,10502.40,1832360000,10502.40
+2001-06-28,10438.73,10736.43,10429.74,10566.21,1327300000,10566.21
+2001-06-27,10470.35,10608.48,10351.10,10434.84,1162100000,10434.84
+2001-06-26,10497.30,10600.90,10313.40,10472.48,1198900000,10472.48
+2001-06-25,10607.88,10711.19,10417.93,10504.22,1050100000,10504.22
+2001-06-22,10716.50,10753.27,10513.61,10604.59,1189200000,10604.59
+2001-06-21,10646.39,10848.47,10512.67,10715.43,1546820000,10715.43
+2001-06-20,10593.79,10770.88,10480.20,10647.33,1350100000,10647.33
+2001-06-19,10654.30,10793.46,10514.74,10596.67,1184900000,10596.67
+2001-06-18,10622.50,10781.45,10531.78,10645.38,1111600000,10645.38
+2001-06-15,10690.13,10792.25,10495.69,10623.64,1635550000,10623.64
+2001-06-14,10868.27,10874.91,10604.45,10690.13,1242900000,10690.13
+2001-06-13,10942.00,11065.92,10817.21,10871.62,1063600000,10871.62
+2001-06-12,10914.67,11009.93,10744.99,10948.38,1136500000,10948.38
+2001-06-11,10974.79,11038.56,10819.29,10922.09,870100000,10922.09
+2001-06-08,11095.62,11096.46,10882.92,10977.00,726200000,10977.00
+2001-06-07,11069.58,11169.34,10940.11,11090.74,1089600000,11090.74
+2001-06-06,11177.73,11236.68,10998.48,11070.24,1061900000,11070.24
+2001-06-05,11061.39,11234.98,10973.10,11175.84,1116800000,11175.84
+2001-06-04,10991.77,11125.99,10898.80,11061.52,836500000,11061.52
+2001-06-01,10913.57,11063.61,10793.46,10990.41,1015000000,10990.41
+2001-05-31,10873.23,11023.25,10798.53,10911.94,1226600000,10911.94
+2001-05-30,11032.96,11089.89,10819.74,10872.64,1158600000,10872.64
+2001-05-29,11004.66,11162.96,10913.44,11039.14,1026000000,11039.14
+2001-05-25,11122.03,11166.92,10949.01,11005.37,828100000,11005.37
+2001-05-24,11107.07,11248.19,10977.20,11122.42,1100700000,11122.42
+2001-05-23,11257.76,11308.44,11033.16,11105.51,1134800000,11105.51
+2001-05-22,11339.80,11411.63,11162.83,11257.24,1260400000,11257.24
+2001-05-21,11299.14,11436.42,11149.82,11337.92,1174900000,11337.92
+2001-05-18,11245.78,11374.87,11123.01,11301.74,1130800000,11301.74
+2001-05-17,11218.65,11413.46,11104.34,11248.58,1355600000,11248.58
+2001-05-16,10864.74,11258.21,10779.66,11215.92,1405300000,11215.92
+2001-05-15,10877.46,10979.35,10752.73,10872.97,1071800000,10872.97
+2001-05-14,10819.55,10930.09,10730.74,10877.33,858200000,10877.33
+2001-05-11,10908.30,10969.39,10716.16,10821.31,906200000,10821.31
+2001-05-10,10868.87,11049.39,10826.90,10910.44,1056700000,10910.44
+2001-05-09,10875.96,10964.84,10739.78,10866.98,1132400000,10866.98
+2001-05-08,10936.66,11001.66,10755.07,10883.51,1006300000,10883.51
+2001-05-07,10952.35,11059.51,10822.74,10935.17,949000000,10935.17
+2001-05-04,10793.20,10989.95,10638.48,10951.24,1082100000,10951.24
+2001-05-03,10872.32,10911.06,10657.99,10796.65,1137900000,10796.65
+2001-05-02,10902.77,11024.31,10726.77,10876.68,1342200000,10876.68
+2001-05-01,10734.05,10966.07,10669.32,10898.34,1181300000,10898.34
+2001-04-30,10814.41,10973.15,10666.13,10734.97,1226000000,10734.97
+2001-04-27,10694.95,10894.60,10632.36,10810.05,1091300000,10810.05
+2001-04-26,10633.01,10820.72,10533.98,10692.35,1345200000,10692.35
+2001-04-25,10453.43,10675.95,10373.14,10625.20,1203600000,10625.20
+2001-04-24,10529.75,10694.61,10401.45,10454.34,1216500000,10454.34
+2001-04-23,10571.00,10669.71,10393.05,10532.23,1012600000,10532.23
+2001-04-20,10690.33,10755.46,10445.43,10579.85,1338700000,10579.85
+2001-04-19,10616.09,10768.28,10468.79,10693.71,1486800000,10693.71
+2001-04-18,10226.88,10806.41,10215.69,10615.83,1918900000,10615.83
+2001-04-17,10151.73,10286.61,9980.22,10216.73,1109600000,10216.73
+2001-04-16,10118.16,10282.38,9991.14,10158.56,913900000,10158.56
+2001-04-12,10013.08,10178.22,9862.71,10126.94,1102000000,10126.94
+2001-04-11,10109.05,10246.59,9898.77,10013.47,1290300000,10013.47
+2001-04-10,9850.35,10226.85,9850.35,10102.74,1349600000,10102.74
+2001-04-09,9793.58,9999.35,9699.92,9845.15,1062800000,9845.15
+2001-04-06,9913.94,9951.73,9600.91,9791.09,1266800000,9791.09
+2001-04-05,9527.21,9969.92,9527.21,9918.05,1368000000,9918.05
+2001-04-04,9480.95,9693.05,9303.48,9515.42,1425590000,9515.42
+2001-04-03,9774.78,9779.74,9385.43,9485.71,1386100000,9485.71
+2001-04-02,9877.16,10043.02,9638.35,9777.93,1204200000,9777.93
+2001-03-30,9799.47,9998.49,9685.07,9878.78,1280800000,9878.78
+2001-03-29,9784.94,9950.22,9583.67,9799.06,1234500000,9799.06
+2001-03-28,9939.68,9939.68,9607.06,9785.35,1333400000,9785.35
+2001-03-27,9687.93,10012.98,9584.29,9947.54,1314200000,9947.54
+2001-03-26,9509.25,9820.50,9489.75,9687.53,1114000000,9687.53
+2001-03-23,9395.58,9631.80,9249.63,9504.78,1364900000,9504.78
+2001-03-22,9490.66,9565.40,9047.56,9389.48,1723950000,9389.48
+2001-03-21,9717.46,9807.08,9391.42,9487.00,1346300000,9487.00
+2001-03-20,9961.14,10130.45,9675.51,9720.76,1235900000,9720.76
+2001-03-19,9820.05,10059.08,9720.94,9959.11,1126200000,9959.11
+2001-03-16,10023.55,10119.44,9720.17,9823.41,1543560000,9823.41
+2001-03-15,9982.92,10190.80,9887.68,10031.28,1259500000,10031.28
+2001-03-14,10279.42,10279.42,9817.74,9973.46,1397400000,9973.46
+2001-03-13,10206.89,10397.83,10021.60,10290.80,1360900000,10290.80
+2001-03-12,10638.52,10638.63,10138.90,10208.25,1229000000,10208.25
+2001-03-09,10850.11,10874.15,10520.42,10644.62,1085900000,10644.62
+2001-03-08,10727.16,10940.45,10625.95,10858.25,1114100000,10858.25
+2001-03-07,10591.86,10822.23,10524.76,10729.60,1132200000,10729.60
+2001-03-06,10570.17,10759.40,10508.43,10591.22,1091800000,10591.22
+2001-03-05,10468.93,10659.52,10393.59,10562.30,929200000,10562.30
+2001-03-02,10438.04,10645.57,10239.81,10466.31,1294000000,10466.31
+2001-03-01,10493.25,10605.23,10236.92,10450.14,1294900000,10450.14
+2001-02-28,10639.32,10750.23,10374.62,10495.28,1225300000,10495.28
+2001-02-27,10638.44,10787.29,10463.92,10636.88,1114100000,10636.88
+2001-02-26,10447.59,10701.92,10347.59,10642.53,1130800000,10642.53
+2001-02-23,10529.25,10595.01,10225.14,10441.90,1231300000,10441.90
+2001-02-22,10527.80,10694.50,10278.93,10526.81,1365900000,10526.81
+2001-02-21,10721.29,10828.48,10468.32,10526.58,1208500000,10526.58
+2001-02-20,10800.23,10988.29,10612.25,10730.88,1112200000,10730.88
+2001-02-16,10884.11,10946.11,10652.33,10799.82,1257200000,10799.82
+2001-02-15,10800.65,11023.44,10694.43,10891.02,1153700000,10891.02
+2001-02-14,10899.42,10989.61,10683.39,10795.41,1150300000,10795.41
+2001-02-13,10950.18,11114.44,10774.98,10903.32,1075200000,10903.32
+2001-02-12,10779.42,11024.92,10727.02,10946.77,1039100000,10946.77
+2001-02-09,10878.51,10979.12,10682.77,10781.45,1075500000,10781.45
+2001-02-08,10940.62,11080.42,10776.04,10880.55,1107200000,10880.55
+2001-02-07,10948.95,11140.09,10794.29,10946.72,1158300000,10946.72
+2001-02-06,10965.03,11117.80,10820.28,10957.42,1059600000,10957.42
+2001-02-05,10860.44,11061.42,10759.98,10965.85,1013000000,10965.85
+2001-02-02,10982.71,11093.01,10786.69,10864.10,1048400000,10864.10
+2001-02-01,10884.82,11063.95,10759.85,10983.63,1118800000,10983.63
+2001-01-31,10882.25,11072.28,10705.23,10887.36,1295300000,10887.36
+2001-01-30,10702.19,10950.38,10609.77,10881.20,1149800000,10881.20
+2001-01-29,10657.13,10832.56,10515.99,10702.19,1053100000,10702.19
+2001-01-26,10727.08,10874.28,10506.26,10659.98,1098000000,10659.98
+2001-01-25,10644.53,10882.42,10520.90,10729.52,1258000000,10729.52
+2001-01-24,10651.85,10795.80,10483.49,10646.97,1309000000,10646.97
+2001-01-23,10575.80,10773.94,10459.91,10649.81,1232600000,10649.81
+2001-01-22,10581.90,10749.44,10371.66,10578.24,1164000000,10578.24
+2001-01-19,10686.00,10792.14,10448.93,10587.59,1407800000,10587.59
+2001-01-18,10584.57,10834.43,10466.01,10678.28,1445000000,10678.28
+2001-01-17,10660.95,10817.35,10442.83,10584.34,1349100000,10584.34
+2001-01-16,10525.78,10751.48,10362.72,10652.66,1205700000,10652.66
+2001-01-12,10608.74,10743.75,10339.94,10525.38,1276000000,10525.38
+2001-01-11,10600.20,10808.00,10400.94,10609.55,1411200000,10609.55
+2001-01-10,10568.48,10728.30,10325.71,10604.27,1296500000,10604.27
+2001-01-09,10625.21,10801.09,10387.12,10572.55,1191300000,10572.55
+2001-01-08,10658.73,10818.98,10407.85,10621.35,1115500000,10621.35
+2001-01-05,10912.81,10990.59,10492.84,10662.01,1430800000,10662.01
+2001-01-04,10944.94,11224.41,10672.58,10912.41,216940000,10912.41
+2001-01-03,10637.42,11212.62,10367.19,10945.75,188070000,10945.75
+2001-01-02,10790.92,10916.98,10450.55,10646.15,1129400000,10646.15
+2000-12-29,10868.76,11031.05,10675.75,10787.99,1035500000,10787.99
+2000-12-28,10795.20,11009.44,10645.42,10868.76,1015300000,10868.76
+2000-12-27,10690.10,10944.60,10551.00,10803.16,1092700000,10803.16
+2000-12-26,10638.21,10813.78,10479.71,10692.44,806500000,10692.44
+2000-12-22,10495.26,10772.07,10364.06,10635.56,1087100000,10635.56
+2000-12-21,10314.38,10651.96,10158.16,10487.29,1449900000,10487.29
+2000-12-20,10580.97,10604.08,10197.59,10318.93,1421600000,10318.93
+2000-12-19,10643.14,10865.35,10441.41,10584.37,1324900000,10584.37
+2000-12-18,10433.34,10783.82,10417.43,10645.42,1189900000,10645.42
+2000-12-15,10647.98,10706.84,10324.24,10434.96,156110000,10434.96
+2000-12-14,10794.82,10864.49,10508.53,10674.99,1061300000,10674.99
+2000-12-13,10777.95,11002.23,10653.76,10794.44,1195100000,10794.44
+2000-12-12,10722.77,10968.77,10582.09,10768.27,1083400000,10768.27
+2000-12-11,10719.36,10931.33,10521.04,10725.80,1202400000,10725.80
+2000-12-08,10632.14,10896.82,10534.69,10712.91,1358300000,10712.91
+2000-12-07,10644.66,10791.40,10448.99,10617.36,1128000000,10617.36
+2000-12-06,10896.14,10995.41,10513.84,10664.38,1399300000,10664.38
+2000-12-05,10576.78,11044.70,10504.36,10898.72,900300000,10898.72
+2000-12-04,10377.33,10701.35,10227.17,10560.95,1103000000,10560.95
+2000-12-01,10416.76,10645.42,10238.54,10373.54,1195200000,10373.54
+2000-11-30,10610.53,10690.16,10204.80,10414.49,1186530000,10414.49
+2000-11-29,10502.74,10746.66,10383.02,10629.11,402100000,10629.11
+2000-11-28,10537.86,10730.35,10356.47,10507.58,1028200000,10507.58
+2000-11-27,10479.33,10758.04,10411.08,10546.07,946100000,10546.07
+2000-11-24,10403.87,10596.50,10354.20,10470.23,404870000,10470.23
+2000-11-22,10484.26,10589.67,10251.06,10399.32,963200000,10399.32
+2000-11-21,10465.57,10676.13,10303.39,10494.50,1137100000,10494.50
+2000-11-20,10624.18,10707.22,10331.45,10462.65,955800000,10462.65
+2000-11-17,10657.13,10824.77,10462.55,10629.87,1070400000,10629.87
+2000-11-16,10705.33,10857.38,10536.30,10656.03,956300000,10656.03
+2000-11-15,10681.21,10863.83,10544.17,10707.60,1066800000,10707.60
+2000-11-14,10528.25,10809.61,10484.64,10681.06,1118800000,10681.06
+2000-11-13,10595.35,10701.54,10273.24,10517.25,1129300000,10517.25
+2000-11-10,10813.78,10886.20,10497.53,10602.95,962500000,10602.95
+2000-11-09,10902.11,10989.34,10576.40,10834.25,1111000000,10834.25
+2000-11-08,10954.34,11152.02,10779.27,10907.06,909300000,10907.06
+2000-11-07,10978.72,11105.75,10825.15,10952.18,880900000,10952.18
+2000-11-06,10820.60,11092.10,10741.73,10977.21,930900000,10977.21
+2000-11-03,10883.17,10996.17,10650.72,10817.95,997700000,10817.95
+2000-11-02,10903.17,11071.06,10731.49,10880.51,1167700000,10880.51
+2000-11-01,10966.21,11103.10,10736.42,10899.47,1206800000,10899.47
+2000-10-31,10835.39,11108.79,10681.06,10971.14,1366400000,10971.14
+2000-10-30,10588.06,10944.98,10506.25,10835.77,1186500000,10835.77
+2000-10-27,10381.60,10696.43,10296.70,10590.62,1086300000,10590.62
+2000-10-26,10330.18,10563.25,10128.18,10380.12,1303800000,10380.12
+2000-10-25,10395.66,10563.99,10170.08,10326.48,1315600000,10326.48
+2000-10-24,10273.57,10583.96,10136.69,10393.07,1158600000,10393.07
+2000-10-23,10230.29,10496.28,10078.24,10271.72,1046800000,10271.72
+2000-10-20,10141.13,10406.76,9925.82,10226.59,1177400000,10226.59
+2000-10-19,10014.61,10317.23,9901.77,10142.98,1297900000,10142.98
+2000-10-18,10085.99,10171.47,9571.40,9975.02,1441700000,9975.02
+2000-10-17,10242.87,10402.32,9924.34,10089.71,1161500000,10089.71
+2000-10-16,10184.78,10428.95,10033.84,10238.80,1005400000,10238.80
+2000-10-13,10031.62,10325.37,9883.27,10192.18,1223900000,10192.18
+2000-10-12,10424.14,10462.25,9873.66,10034.58,1388600000,10034.58
+2000-10-11,10521.07,10647.23,10228.44,10413.79,1387500000,10413.79
+2000-10-10,10569.17,10744.52,10377.16,10524.40,1044000000,10524.40
+2000-10-09,10596.91,10762.10,10438.94,10568.43,716600000,10568.43
+2000-10-06,10726.76,10871.42,10440.05,10596.54,1150100000,10596.54
+2000-10-05,10783.72,10940.23,10570.28,10724.92,1176100000,10724.92
+2000-10-04,10723.33,10972.41,10596.54,10784.48,1167400000,10784.48
+2000-10-03,10709.84,10976.11,10561.03,10719.74,1098100000,10719.74
+2000-10-02,10659.06,10876.23,10479.27,10700.13,1051200000,10700.13
+2000-09-29,10821.40,10923.21,10552.15,10650.92,1197100000,10650.92
+2000-09-28,10629.84,10948.00,10539.48,10824.06,1206200000,10824.06
+2000-09-27,10634.45,10821.10,10439.31,10628.36,1174700000,10628.36
+2000-09-26,10806.30,10915.44,10499.61,10631.32,1106600000,10631.32
+2000-09-25,10847.37,11039.47,10664.24,10808.15,982400000,10808.15
+2000-09-22,10678.30,10936.53,10505.16,10847.37,1185500000,10847.37
+2000-09-21,10680.52,10902.12,10548.08,10765.52,1105400000,10765.52
+2000-09-20,10794.47,10906.93,10500.35,10687.92,1104000000,10687.92
+2000-09-19,10812.22,10960.95,10645.38,10789.29,1024900000,10789.29
+2000-09-18,10926.42,11053.80,10693.84,10808.52,962500000,10808.52
+2000-09-15,11087.84,11203.26,10857.73,10927.00,1268400000,10927.00
+2000-09-14,11189.58,11285.39,10986.47,11087.47,1014000000,11087.47
+2000-09-13,11225.03,11350.87,11020.14,11182.18,1068300000,11182.18
+2000-09-12,11197.71,11351.98,11015.70,11233.23,991200000,11233.23
+2000-09-11,11219.54,11367.15,11043.07,11195.49,899300000,11195.49
+2000-09-08,11261.72,11381.95,11059.72,11220.65,961000000,11220.65
+2000-09-07,11316.01,11444.84,11124.83,11259.87,985500000,11259.87
+2000-09-06,11253.58,11518.83,11186.25,11310.64,995100000,11310.64
+2000-09-05,11221.76,11382.69,11094.50,11260.61,838500000,11260.61
+2000-09-01,11219.54,11406.74,11130.01,11238.78,767700000,11238.78
+2000-08-31,11105.23,11415.99,11040.85,11215.10,1056600000,11215.10
+2000-08-30,11209.01,11282.06,11034.57,11103.01,818400000,11103.01
+2000-08-29,11249.27,11356.42,11100.79,11215.10,795600000,11215.10
+2000-08-28,11194.48,11410.44,11123.35,11252.84,733600000,11252.84
+2000-08-25,11180.54,11301.41,11073.59,11192.63,685600000,11192.63
+2000-08-24,11143.91,11302.51,11009.12,11182.74,837100000,11182.74
+2000-08-23,11130.55,11253.06,10990.44,11144.65,871000000,11144.65
+2000-08-22,11082.20,11274.67,11000.33,11139.15,818800000,11139.15
+2000-08-21,11058.85,11193.73,10945.39,11079.81,731600000,11079.81
+2000-08-18,11051.20,11180.54,10933.30,11046.48,821400000,11046.48
+2000-08-17,11010.95,11180.91,10899.24,11055.64,922400000,11055.64
+2000-08-16,11068.83,11171.02,10888.62,11008.39,929800000,11008.39
+2000-08-15,11175.05,11227.06,10965.54,11067.00,895900000,11067.00
+2000-08-14,11027.07,11232.92,10928.91,11176.14,783800000,11176.14
+2000-08-11,10905.98,11131.83,10841.37,11027.80,835500000,11027.80
+2000-08-10,10901.06,11069.93,10779.47,10908.76,940800000,10908.76
+2000-08-09,10970.94,11097.03,10780.02,10905.83,1054000000,10905.83
+2000-08-08,10865.15,11083.11,10741.38,10976.89,992200000,10976.89
+2000-08-07,10773.98,10973.23,10657.50,10867.01,854800000,10867.01
+2000-08-04,10713.36,10873.97,10555.68,10767.75,956000000,10767.75
+2000-08-03,10679.37,10844.30,10518.68,10706.58,1095600000,10706.58
+2000-08-02,10609.15,10818.66,10514.29,10687.53,986300000,10687.53
+2000-08-01,10523.81,10728.92,10428.58,10606.95,938700000,10606.95
+2000-07-31,10514.29,10727.09,10374.00,10521.98,952600000,10521.98
+2000-07-28,10594.97,10732.14,10367.28,10511.17,980000000,10511.17
+2000-07-27,10516.83,10745.93,10450.01,10586.13,1156400000,10586.13
+2000-07-26,10689.36,10790.13,10447.18,10516.48,1235800000,10516.48
+2000-07-25,10689.28,10867.20,10557.49,10699.97,969400000,10699.97
+2000-07-24,10731.44,10895.84,10545.47,10685.12,880300000,10685.12
+2000-07-21,10843.51,10949.58,10614.06,10733.56,968300000,10733.56
+2000-07-20,10700.68,10980.34,10671.33,10843.87,1064600000,10843.87
+2000-07-19,10724.15,10907.15,10587.89,10696.08,909400000,10696.08
+2000-07-18,10799.16,10895.57,10613.00,10739.92,908300000,10739.92
+2000-07-17,10812.40,10969.38,10653.30,10804.27,906000000,10804.27
+2000-07-14,10793.31,10935.44,10661.43,10812.75,960600000,10812.75
+2000-07-13,10774.92,10963.02,10643.40,10788.71,1026800000,10788.71
+2000-07-12,10722.24,10930.84,10639.51,10783.76,1001200000,10783.76
+2000-07-11,10649.06,10877.46,10544.76,10727.19,980500000,10727.19
+2000-07-10,10627.14,10792.25,10520.01,10646.58,838700000,10646.58
+2000-07-07,10483.33,10742.04,10419.25,10635.98,931700000,10635.98
+2000-07-06,10481.45,10644.11,10303.28,10481.47,947300000,10481.47
+2000-07-05,10538.23,10674.16,10362.33,10483.60,1019300000,10483.60
+2000-07-03,10450.36,10610.17,10353.66,10560.67,451900000,10560.67
+2000-06-30,10393.09,10626.79,10161.51,10447.89,1459700000,10447.89
+2000-06-29,10523.90,10582.94,10279.24,10398.04,1110900000,10398.04
+2000-06-28,10506.39,10712.70,10399.10,10527.79,1095100000,10527.79
+2000-06-27,10541.58,10741.69,10384.60,10504.46,1042500000,10504.46
+2000-06-26,10403.69,10680.26,10365.15,10542.99,889000000,10542.99
+2000-06-23,10376.47,10555.37,10283.13,10404.75,847600000,10404.75
+2000-06-22,10495.97,10596.73,10256.97,10376.12,1022700000,10376.12
+2000-06-21,10446.83,10607.69,10312.48,10497.74,1009600000,10497.74
+2000-06-20,10558.90,10632.09,10318.84,10435.16,1031500000,10435.16
+2000-06-19,10448.40,10733.56,10322.02,10557.84,921700000,10557.84
+2000-06-16,10717.76,10784.47,10393.44,10449.30,1250800000,10449.30
+2000-06-15,10689.63,10889.48,10552.89,10714.82,1011400000,10714.82
+2000-06-14,10632.46,10860.84,10542.99,10687.95,929700000,10687.95
+2000-06-13,10562.31,10751.86,10395.56,10621.84,935900000,10621.84
+2000-06-12,10615.12,10757.60,10476.88,10564.21,774100000,10564.21
+2000-06-09,10678.47,10848.38,10515.52,10614.06,786000000,10614.06
+2000-06-08,10818.78,10887.72,10524.92,10668.72,854300000,10668.72
+2000-06-07,10733.48,10974.07,10588.64,10812.86,854600000,10812.86
+2000-06-06,10822.61,10916.97,10592.82,10735.57,950100000,10735.57
+2000-06-05,10793.11,10951.79,10629.03,10815.30,838600000,10815.30
+2000-06-02,10660.09,11013.05,10600.46,10794.76,1162400000,10794.76
+2000-06-01,10532.27,10780.37,10422.95,10652.20,960100000,10652.20
+2000-05-31,10528.28,10692.73,10377.37,10522.33,960500000,10522.33
+2000-05-30,10302.31,10596.00,10287.94,10527.13,844200000,10527.13
+2000-05-26,10322.89,10487.72,10163.20,10299.24,722600000,10299.24
+2000-05-25,10529.87,10644.32,10207.75,10323.92,984500000,10323.92
+2000-05-24,10420.90,10679.53,10240.99,10535.35,1152300000,10535.35
+2000-05-23,10539.12,10671.74,10325.63,10422.27,869900000,10422.27
+2000-05-22,10624.79,10718.00,10308.15,10542.55,869000000,10542.55
+2000-05-19,10764.22,10821.83,10468.18,10626.85,853700000,10626.85
+2000-05-18,10771.80,10938.34,10669.00,10777.28,807900000,10777.28
+2000-05-17,10930.64,10947.25,10648.78,10769.74,820500000,10769.74
+2000-05-16,10816.01,11086.72,10723.48,10934.57,955500000,10934.57
+2000-05-15,10606.97,10902.36,10509.31,10807.78,854600000,10807.78
+2000-05-12,10549.06,10780.37,10444.54,10609.37,858200000,10609.37
+2000-05-11,10369.27,10676.88,10315.69,10545.97,953600000,10545.97
+2000-05-10,10533.09,10649.95,10169.77,10367.78,1006400000,10367.78
+2000-05-09,10607.54,10765.75,10435.96,10536.75,896600000,10536.75
+2000-05-08,10571.31,10744.22,10400.40,10603.63,787600000,10603.63
+2000-05-05,10409.70,10688.61,10312.91,10577.86,805500000,10577.86
+2000-05-04,10478.89,10631.53,10293.05,10412.49,925800000,10412.49
+2000-05-03,10732.21,10754.39,10345.17,10480.13,991600000,10480.13
+2000-05-02,10805.58,10932.47,10580.65,10731.12,1011500000,10731.12
+2000-05-01,10749.42,11001.34,10622.22,10811.78,966300000,10811.78
+2000-04-28,10892.76,11005.07,10632.46,10733.91,984600000,10733.91
+2000-04-27,10941.91,11024.61,10650.14,10888.10,1111000000,10888.10
+2000-04-26,11127.92,11246.75,10816.44,10945.50,999600000,10945.50
+2000-04-25,10916.65,11265.67,10764.62,11124.82,1071100000,11124.82
+2000-04-24,10822.33,11060.29,10579.10,10906.10,868700000,10906.10
+2000-04-20,10668.19,10941.47,10582.51,10844.05,896200000,10844.05
+2000-04-19,10748.97,10909.20,10503.40,10674.96,1001400000,10674.96
+2000-04-18,10584.02,10941.78,10424.90,10767.42,1109400000,10767.42
+2000-04-17,10303.29,10721.50,10128.62,10582.51,1204700000,10582.51
+2000-04-14,10922.85,10922.85,10173.92,10305.77,1279700000,10305.77
+2000-04-13,11132.58,11290.80,10806.51,10923.55,1032000000,10923.55
+2000-04-12,11283.05,11600.43,11026.47,11125.13,1175900000,11125.13
+2000-04-11,11180.98,11459.58,11024.22,11287.08,971400000,11287.08
+2000-04-10,11114.89,11404.35,10955.43,11186.56,853700000,11186.56
+2000-04-07,11122.03,11317.79,10932.78,11111.48,891600000,11111.48
+2000-04-06,11029.56,11303.83,10921.07,11114.27,1008000000,11114.27
+2000-04-05,11163.29,11326.79,10894.00,11033.92,1110300000,11033.92
+2000-04-04,11225.34,11531.24,10682.72,11164.84,1515460000,11164.84
+2000-04-03,10863.28,11344.17,10821.71,11221.93,1021700000,11221.93
+2000-03-31,10993.28,11244.58,10801.23,10921.92,1227400000,10921.92
+2000-03-30,11008.17,11258.23,10796.58,10980.25,1193400000,10980.25
+2000-03-29,10939.05,11214.48,10792.24,11018.72,1061900000,11018.72
+2000-03-28,11023.68,11192.76,10804.65,10936.11,959100000,10936.11
+2000-03-27,11093.25,11274.98,10881.90,11025.85,901000000,11025.85
+2000-03-24,11107.45,11311.28,10901.44,11112.72,1052200000,11112.72
+2000-03-23,10884.38,11224.72,10737.63,11119.86,1078300000,11119.86
+2000-03-22,10916.96,11054.71,10671.86,10866.70,1075000000,10866.70
+2000-03-21,10680.24,11012.20,10515.50,10907.34,1065900000,10907.34
+2000-03-20,10594.75,10866.08,10456.86,10680.24,920800000,10680.24
+2000-03-17,10629.98,10849.32,10399.15,10595.23,1295100000,10595.23
+2000-03-16,10139.58,10716.23,10139.58,10630.60,1482300000,10630.60
+2000-03-15,9808.15,10294.60,9676.90,10131.41,1302800000,10131.41
+2000-03-14,9957.67,10149.41,9747.33,9811.24,1094000000,9811.24
+2000-03-13,9911.22,10111.25,9670.07,9947.13,1016100000,9947.13
+2000-03-10,10008.55,10211.77,9792.93,9928.82,1138800000,9928.82
+2000-03-09,9855.29,10097.28,9667.28,10010.73,1123000000,10010.73
+2000-03-08,9800.69,10037.41,9611.75,9856.53,1203000000,9856.53
+2000-03-07,10197.61,10208.66,9651.77,9796.03,1314100000,9796.03
+2000-03-06,10358.96,10518.91,10038.65,10170.50,1029000000,10170.50
+2000-03-03,10171.12,10581.89,10148.16,10367.20,1150300000,10367.20
+2000-03-02,10135.44,10361.61,9986.53,10164.92,1198600000,10164.92
+2000-03-01,10128.11,10355.72,9935.96,10137.93,1274100000,10137.93
+2000-02-29,10039.58,10332.14,9926.65,10128.31,1204300000,10128.31
+2000-02-28,9854.66,10228.52,9760.36,10038.65,1026500000,10038.65
+2000-02-25,10090.77,10196.02,9767.80,9862.12,1065200000,9862.12
+2000-02-24,10242.48,10321.90,9877.94,10092.63,1215000000,10092.63
+2000-02-23,10294.82,10443.21,10077.74,10225.73,993700000,10225.73
+2000-02-22,10219.83,10446.62,10011.66,10304.84,980000000,10304.84
+2000-02-18,10514.57,10562.34,10129.24,10219.52,1042300000,10219.52
+2000-02-17,10565.76,10768.66,10348.66,10514.57,1034800000,10514.57
+2000-02-16,10711.82,10831.64,10468.65,10561.41,1018800000,10561.41
+2000-02-15,10520.15,10821.09,10377.44,10718.09,1092100000,10718.09
+2000-02-14,10431.65,10674.96,10327.56,10519.84,927300000,10519.84
+2000-02-11,10638.64,10763.38,10301.12,10425.21,1025700000,10425.21
+2000-02-10,10697.92,10853.67,10491.30,10643.63,1058800000,10643.63
+2000-02-09,10948.82,11016.54,10647.97,10699.16,1050500000,10699.16
+2000-02-08,10904.26,11139.40,10826.67,10957.60,1047700000,10957.60
+2000-02-07,10965.97,11097.52,10732.67,10905.79,918100000,10905.79
+2000-02-04,11014.37,11200.83,10847.54,10963.80,1045100000,10963.80
+2000-02-03,11010.48,11207.97,10799.68,11013.44,1146500000,11013.44
+2000-02-02,11037.64,11228.44,10876.00,11003.20,1038600000,11003.20
+2000-02-01,10937.74,11187.18,10798.44,11041.05,981000000,11041.05
+2000-01-31,10735.77,11059.67,10610.43,10940.53,993800000,10940.53
+2000-01-28,11024.92,11115.20,10649.21,10738.87,1095800000,10738.87
+2000-01-27,11035.55,11274.36,10818.30,11028.02,1129500000,11028.02
+2000-01-26,11025.85,11280.87,10870.73,11032.99,1117300000,11032.99
+2000-01-25,11010.96,11228.75,10779.83,11029.89,1073700000,11029.89
+2000-01-24,11251.94,11501.15,10849.01,11008.17,1115800000,11008.17
+2000-01-21,11356.26,11513.87,11113.65,11251.71,1209800000,11251.71
+2000-01-20,11490.29,11654.72,11194.32,11351.30,1100700000,11351.30
+2000-01-19,11535.24,11710.57,11320.28,11489.36,1087800000,11489.36
+2000-01-18,11719.19,11834.67,11397.22,11560.72,1056700000,11560.72
+2000-01-14,11619.35,11908.50,11506.42,11722.98,1085900000,11722.98
+2000-01-13,11558.24,11761.14,11421.42,11582.43,1030400000,11582.43
+2000-01-12,11506.73,11751.83,11385.74,11551.10,974600000,11551.10
+2000-01-11,11568.47,11748.11,11398.30,11511.08,1014000000,11511.08
+2000-01-10,11532.48,11765.17,11427.00,11572.20,1064800000,11572.20
+2000-01-07,11247.06,11655.65,11168.26,11522.56,1225200000,11522.56
+2000-01-06,11113.37,11447.79,10963.18,11253.26,1092300000,11253.26
+2000-01-05,10989.37,11337.65,10862.66,11122.65,1085500000,11122.65
+2000-01-04,11349.75,11358.44,10907.03,10997.93,1009000000,10997.93
+2000-01-03,11501.85,11641.07,11180.98,11357.51,931800000,11357.51
+1999-12-31,11453.48,11598.26,11368.05,11497.12,374050000,11497.12
+1999-12-30,11484.36,11640.33,11388.94,11452.86,554680000,11452.86
+1999-12-29,11472.88,11658.68,11367.53,11484.66,567860000,11484.66
+1999-12-28,11389.24,11613.72,11302.08,11476.71,655400000,11476.71
+1999-12-27,11410.65,11603.02,11253.15,11391.08,722600000,11391.08
+1999-12-23,11202.07,11506.38,11202.07,11405.76,728600000,11405.76
+1999-12-22,11199.45,11375.17,11075.76,11203.60,850000000,11203.60
+1999-12-21,11142.43,11336.03,10973.61,11200.54,963500000,11200.54
+1999-12-20,11254.50,11417.38,11026.22,11144.27,904600000,11144.27
+1999-12-17,11259.26,11497.20,11103.59,11257.43,1349800000,11257.43
+1999-12-16,11224.40,11396.89,11016.13,11244.89,1070300000,11244.89
+1999-12-15,11158.78,11400.48,11014.60,11225.32,1033900000,11225.32
+1999-12-14,11195.34,11336.33,11027.13,11160.17,1027800000,11160.17
+1999-12-13,11217.46,11379.46,11024.38,11192.59,977600000,11192.59
+1999-12-10,11137.85,11358.66,11042.12,11224.70,987200000,11224.70
+1999-12-09,11073.62,11327.46,10962.60,11134.79,1122100000,11134.79
+1999-12-08,11107.26,11273.33,10957.41,11068.12,957000000,11068.12
+1999-12-07,11221.65,11351.32,10993.49,11106.65,1085800000,11106.65
+1999-12-06,11286.79,11412.79,11100.53,11225.01,916800000,11225.01
+1999-12-03,11046.10,11423.50,11046.10,11286.18,1006400000,11286.18
+1999-12-02,10995.02,11183.72,10896.24,11039.06,900700000,11039.06
+1999-12-01,10876.47,11111.24,10798.07,10998.39,884000000,10998.39
+1999-11-30,10945.49,11142.13,10785.22,10877.81,951500000,10877.81
+1999-11-29,10985.73,11059.25,10813.97,10947.92,866100000,10947.92
+1999-11-26,11007.26,11115.83,10938.44,10988.91,312120000,10988.91
+1999-11-24,11000.22,11131.12,10859.23,11008.17,734800000,11008.17
+1999-11-23,11090.29,11178.83,10899.60,10995.63,926100000,10995.63
+1999-11-22,11008.78,11195.34,10887.67,11089.52,873500000,11089.52
+1999-11-19,11033.25,11146.41,10871.77,11003.89,893800000,11003.89
+1999-11-18,10887.67,11147.02,10859.92,11035.70,1022800000,11035.70
+1999-11-17,10929.00,11040.90,10774.21,10883.09,960000000,10883.09
+1999-11-16,10762.89,10992.88,10691.94,10932.33,942200000,10932.33
+1999-11-15,10764.73,10899.22,10626.80,10760.75,795700000,10760.75
+1999-11-12,10593.51,10845.16,10513.03,10769.32,900200000,10769.32
+1999-11-11,10603.25,10716.71,10485.20,10595.30,891300000,10595.30
+1999-11-10,10611.94,10713.04,10449.42,10597.74,984700000,10597.74
+1999-11-09,10715.10,10806.02,10506.61,10617.32,854300000,10617.32
+1999-11-08,10668.42,10838.74,10548.20,10718.85,806800000,10718.85
+1999-11-05,10639.95,10885.53,10636.59,10704.48,1007300000,10704.48
+1999-11-04,10612.42,10817.95,10523.43,10639.64,981700000,10639.64
+1999-11-03,10582.54,10759.22,10485.50,10609.06,914400000,10609.06
+1999-11-02,10653.71,10816.11,10508.14,10581.84,904500000,10581.84
+1999-11-01,10730.78,10828.96,10568.08,10648.51,861000000,10648.51
+1999-10-29,10629.18,10883.10,10580.11,10729.86,1120500000,10729.86
+1999-10-28,10397.67,10726.70,10397.67,10622.53,1135100000,10622.53
+1999-10-27,10302.76,10515.21,10172.32,10394.89,950100000,10394.89
+1999-10-26,10350.88,10486.39,10208.73,10302.13,878300000,10302.13
+1999-10-25,10468.98,10518.37,10225.82,10349.93,777000000,10349.93
+1999-10-22,10581.69,10581.69,10301.18,10470.25,959200000,10470.25
+1999-10-21,10390.71,10414.52,10047.57,10297.69,1012500000,10297.69
+1999-10-20,10203.31,10485.13,10144.46,10392.36,928800000,10392.36
+1999-10-19,10117.54,10418.01,10093.80,10204.93,905700000,10204.93
+1999-10-18,10018.45,10221.08,9884.20,10116.28,818700000,10116.28
+1999-10-15,10286.61,10286.61,9911.43,10019.71,912600000,10019.71
+1999-10-14,10230.89,10416.74,10071.64,10286.61,892300000,10286.61
+1999-10-13,10412.31,10495.89,10173.58,10232.16,821500000,10232.16
+1999-10-12,10648.81,10659.58,10366.08,10417.06,778300000,10417.06
+1999-10-11,10649.76,10781.16,10545.60,10648.18,655900000,10648.18
+1999-10-08,10534.52,10743.48,10423.71,10649.76,897300000,10649.76
+1999-10-07,10588.34,10687.12,10430.99,10537.05,827800000,10537.05
+1999-10-06,10399.77,10655.46,10340.75,10588.34,895200000,10588.34
+1999-10-05,10401.23,10578.21,10250.20,10400.59,965700000,10400.59
+1999-10-04,10274.58,10538.32,10220.44,10401.23,803300000,10401.23
+1999-10-01,10335.69,10425.92,10108.05,10273.00,896200000,10273.00
+1999-09-30,10214.11,10456.32,10156.85,10336.95,1017600000,10336.95
+1999-09-29,10274.27,10408.51,10119.76,10213.48,856000000,10213.48
+1999-09-28,10300.51,10386.03,10055.17,10275.53,885400000,10275.53
+1999-09-27,10279.33,10498.74,10201.76,10303.39,780600000,10303.39
+1999-09-24,10311.94,10428.14,10128.63,10279.33,872800000,10279.33
+1999-09-23,10524.07,10643.75,10260.33,10318.59,890800000,10318.59
+1999-09-22,10599.42,10688.39,10407.56,10524.07,822200000,10524.07
+1999-09-21,10822.95,10822.95,10517.10,10598.47,817300000,10598.47
+1999-09-20,10801.87,10918.88,10715.93,10823.90,568000000,10823.90
+1999-09-17,10745.38,10946.74,10690.61,10803.63,861900000,10803.63
+1999-09-16,10795.77,10876.46,10592.46,10737.46,739000000,10737.46
+1999-09-15,10910.40,11049.96,10757.41,10801.42,787300000,10801.42
+1999-09-14,11028.74,11061.04,10815.67,10910.33,734500000,10910.33
+1999-09-13,11027.40,11146.52,10886.90,11030.33,657900000,11030.33
+1999-09-10,11087.00,11218.39,10965.74,11028.43,808500000,11028.43
+1999-09-09,11031.28,11172.17,10900.83,11079.40,773900000,11079.40
+1999-09-08,11034.13,11164.89,10898.62,11036.34,791200000,11036.34
+1999-09-07,11079.08,11191.80,10910.65,11034.13,715300000,11034.13
+1999-09-03,10922.36,11155.70,10922.36,11078.45,663200000,11078.45
+1999-09-02,10923.95,10923.95,10669.71,10843.21,687100000,10843.21
+1999-09-01,10828.44,11013.55,10784.32,10937.88,708200000,10937.88
+1999-08-31,10909.70,11079.08,10725.43,10829.28,861700000,10829.28
+1999-08-30,11087.69,11176.60,10869.81,10914.13,597900000,10914.13
+1999-08-27,11198.45,11295.33,11021.14,11090.17,570050000,11090.17
+1999-08-26,11326.04,11393.48,11133.86,11198.45,719000000,11198.45
+1999-08-25,11282.38,11428.94,11106.31,11326.04,864600000,11326.04
+1999-08-24,11297.54,11404.87,11135.76,11283.30,732700000,11283.30
+1999-08-23,11099.66,11344.09,11087.95,11299.76,682600000,11299.76
+1999-08-20,10963.84,11155.07,10916.35,11100.61,661200000,11100.61
+1999-08-19,10988.85,11037.29,10809.65,10963.84,684200000,10963.84
+1999-08-18,11109.66,11153.49,10913.50,10991.38,682800000,10991.38
+1999-08-17,11049.64,11180.08,10963.52,11117.08,691500000,11117.08
+1999-08-16,10980.11,11105.05,10853.98,11046.79,583550000,11046.79
+1999-08-13,10822.00,11049.64,10822.00,10973.65,691700000,10973.65
+1999-08-12,10785.65,10967.64,10688.07,10789.39,745600000,10789.39
+1999-08-11,10650.59,10878.99,10596.26,10787.80,792300000,10787.80
+1999-08-10,10704.22,10812.82,10487.34,10655.15,836200000,10655.15
+1999-08-09,10714.03,10854.61,10571.56,10707.70,684300000,10707.70
+1999-08-06,10792.58,10896.08,10584.54,10714.03,698900000,10714.03
+1999-08-05,10675.41,10876.77,10509.19,10793.82,859300000,10793.82
+1999-08-04,10675.66,10901.78,10585.17,10674.77,789300000,10674.77
+1999-08-03,10645.96,10812.82,10538.00,10677.31,739600000,10677.31
+1999-08-02,10654.83,10849.23,10551.30,10645.96,649550000,10645.96
+1999-07-30,10791.29,10897.98,10594.99,10655.15,736800000,10655.15
+1999-07-29,10920.15,10920.15,10672.24,10791.29,770100000,10791.29
+1999-07-28,10979.04,11090.48,10851.13,10972.07,690900000,10972.07
+1999-07-27,10863.16,11079.40,10834.35,10979.04,723800000,10979.04
+1999-07-26,10910.96,11014.50,10748.86,10863.16,613450000,10863.16
+1999-07-23,10979.67,11069.59,10813.77,10910.96,630580000,10910.96
+1999-07-22,11002.78,11140.51,10796.67,10969.22,771700000,10969.22
+1999-07-21,10998.94,11142.72,10865.69,11002.78,785500000,11002.78
+1999-07-20,11130.06,11245.62,10914.13,10996.13,754800000,10996.13
+1999-07-19,11209.84,11321.61,11069.90,11187.68,642330000,11187.68
+1999-07-16,11188.63,11300.08,11069.27,11209.84,714100000,11209.84
+1999-07-15,11200.03,11313.37,11072.75,11186.41,818800000,11186.41
+1999-07-14,11202.24,11289.95,11051.86,11148.10,756100000,11148.10
+1999-07-13,11106.31,11277.60,11013.55,11175.02,736000000,11175.02
+1999-07-12,11234.22,11314.64,11087.95,11200.98,685300000,11200.98
+1999-07-09,11142.72,11284.25,11050.59,11193.70,701000000,11193.70
+1999-07-08,11118.66,11290.58,10985.68,11126.89,830600000,11126.89
+1999-07-07,11129.74,11268.42,11008.16,11187.36,791200000,11187.36
+1999-07-06,11119.93,11291.21,11021.78,11135.12,722900000,11135.12
+1999-07-02,11089.53,11205.41,10995.50,11139.24,613570000,11139.24
+1999-07-01,10972.39,11156.65,10841.63,11066.42,843400000,11066.42
+1999-06-30,10805.22,11120.24,10657.36,10970.80,1117000000,10970.80
+1999-06-29,10673.83,10855.56,10589.61,10815.35,820100000,10815.35
+1999-06-28,10633.93,10792.24,10535.15,10655.15,652910000,10655.15
+1999-06-25,10586.44,10719.42,10477.21,10552.56,623460000,10552.56
+1999-06-24,10620.32,10736.83,10404.07,10534.83,690400000,10534.83
+1999-06-23,10702.32,10791.29,10542.75,10666.86,731800000,10666.86
+1999-06-22,10768.49,10879.94,10639.63,10721.63,716500000,10721.63
+1999-06-21,10865.06,10960.36,10684.91,10815.98,686600000,10815.98
+1999-06-18,10885.00,10978.09,10751.39,10855.56,914500000,10855.56
+1999-06-17,10732.71,10936.61,10642.80,10841.63,700300000,10841.63
+1999-06-16,10709.92,10883.74,10608.92,10784.95,806800000,10784.95
+1999-06-15,10612.09,10740.00,10500.01,10594.99,696600000,10594.99
+1999-06-14,10490.83,10691.24,10414.52,10563.33,669400000,10563.33
+1999-06-11,10619.69,10744.11,10386.98,10490.51,698200000,10490.51
+1999-06-10,10621.58,10736.20,10452.52,10621.27,716500000,10621.27
+1999-06-09,10780.84,10871.39,10602.59,10690.29,662000000,10690.29
+1999-06-08,10878.35,10954.66,10671.93,10765.64,685900000,10765.64
+1999-06-07,10805.20,11016.40,10718.47,10909.38,664300000,10909.38
+1999-06-04,10702.64,10892.60,10558.26,10799.84,694500000,10799.84
+1999-06-03,10629.18,10767.86,10515.52,10663.69,719600000,10663.69
+1999-06-02,10591.82,10694.09,10388.24,10577.89,728000000,10577.89
+1999-06-01,10549.08,10717.20,10334.42,10596.26,683800000,10596.26
+1999-05-28,10489.56,10690.07,10389.94,10559.74,649960000,10559.74
+1999-05-27,10643.04,10734.21,10372.96,10466.93,811400000,10466.93
+1999-05-26,10580.94,10818.08,10416.06,10702.16,870800000,10702.16
+1999-05-25,10651.73,10818.96,10494.52,10531.09,826700000,10531.09
+1999-05-24,10829.87,10924.26,10568.85,10654.67,754700000,10654.67
+1999-05-21,10879.13,10974.69,10728.12,10829.28,686600000,10829.28
+1999-05-20,10892.40,11020.70,10773.83,10866.74,752200000,10866.74
+1999-05-19,10836.67,10988.85,10722.81,10887.39,801100000,10887.39
+1999-05-18,10895.94,11017.75,10678.86,10836.95,753400000,10836.95
+1999-05-17,10864.35,10976.32,10677.64,10853.47,665500000,10853.47
+1999-05-14,10950.26,11076.55,10787.03,10913.32,727800000,10913.32
+1999-05-13,11087.71,11244.36,10931.36,11107.19,796900000,11107.19
+1999-05-12,11002.38,11146.71,10759.54,11000.37,825500000,11000.37
+1999-05-11,11059.65,11185.08,10882.11,11026.15,836100000,11026.15
+1999-05-10,11029.25,11173.05,10876.38,11007.25,773300000,11007.25
+1999-05-07,10967.16,11135.54,10838.29,11031.59,814900000,11031.59
+1999-05-06,10909.02,11093.44,10730.33,10946.82,875400000,10946.82
+1999-05-05,10902.72,11055.36,10711.15,10955.41,913500000,10955.41
+1999-05-04,11012.11,11140.12,10787.32,10886.11,933100000,10886.11
+1999-05-03,10788.75,11083.13,10701.12,11014.69,811400000,11014.69
+1999-04-30,10933.94,11072.25,10603.76,10789.04,936500000,10789.04
+1999-04-29,10864.64,11052.49,10710.00,10878.38,1003600000,10878.38
+1999-04-28,10806.22,11050.77,10665.90,10845.45,951700000,10845.45
+1999-04-27,10781.88,10977.46,10647.29,10831.71,891700000,10831.71
+1999-04-26,10721.17,10854.33,10540.47,10718.59,712000000,10718.59
+1999-04-23,10646.71,10858.34,10530.45,10689.67,744900000,10689.67
+1999-04-22,10735.77,10896.42,10517.85,10727.18,927900000,10727.18
+1999-04-21,10462.58,10702.56,10309.09,10581.42,920000000,10581.42
+1999-04-20,10440.53,10610.06,10212.87,10448.55,985400000,10448.55
+1999-04-19,10566.07,10879.76,10284.39,10440.53,1214400000,10440.53
+1999-04-16,10497.26,10632.90,10299.55,10493.89,1002300000,10493.89
+1999-04-15,10411.66,10673.90,10201.31,10462.72,1089800000,10462.72
+1999-04-14,10436.91,10692.49,10196.87,10411.66,952000000,10411.66
+1999-04-13,10340.62,10512.11,10239.33,10395.01,810900000,10395.01
+1999-04-12,10094.19,10384.46,10042.02,10339.51,810800000,10339.51
+1999-04-09,10166.62,10298.71,10035.09,10173.84,716100000,10173.84
+1999-04-08,10083.93,10282.62,9980.69,10197.70,850500000,10197.70
+1999-04-07,10023.43,10166.62,9859.98,10085.31,816400000,10085.31
+1999-04-06,9985.69,10097.25,9862.48,9963.49,787500000,9963.49
+1999-04-05,9893.84,10080.87,9826.40,10007.33,695800000,10007.33
+1999-04-01,9825.29,9927.69,9707.91,9832.51,703000000,9832.51
+1999-03-31,9968.21,10025.10,9744.82,9786.16,924300000,9786.16
+1999-03-30,10003.84,10035.36,9812.53,9913.26,729000000,9913.26
+1999-03-29,9879.41,10089.48,9837.78,10006.78,747900000,10006.78
+1999-03-26,9795.88,9923.53,9700.69,9822.24,707200000,9822.24
+1999-03-25,9735.66,9916.59,9666.28,9836.39,784200000,9836.39
+1999-03-24,9702.08,9803.09,9547.23,9666.84,761900000,9666.84
+1999-03-23,9846.66,9897.72,9593.85,9671.83,811300000,9671.83
+1999-03-22,9901.88,10005.95,9796.99,9890.51,658200000,9890.51
+1999-03-19,10107.79,10158.57,9856.37,9903.55,914700000,9903.55
+1999-03-18,9958.59,10060.62,9776.17,9997.62,831000000,9997.62
+1999-03-17,9939.90,10024.54,9792.55,9879.41,752300000,9879.41
+1999-03-16,9969.32,10062.84,9857.48,9930.47,751900000,9930.47
+1999-03-15,9880.24,10027.59,9807.53,9958.77,727200000,9958.77
+1999-03-12,9927.14,10042.58,9779.78,9876.35,825800000,9876.35
+1999-03-11,9815.86,9992.35,9742.32,9897.44,904800000,9897.44
+1999-03-10,9735.10,9849.71,9624.94,9772.84,841900000,9772.84
+1999-03-09,9703.47,9856.65,9586.08,9693.76,803700000,9693.76
+1999-03-08,9728.72,9825.02,9616.33,9727.61,714600000,9727.61
+1999-03-05,9636.65,9799.92,9558.41,9736.08,834900000,9736.08
+1999-03-04,9339.18,9549.99,9272.08,9467.40,770900000,9467.40
+1999-03-03,9311.74,9397.86,9163.41,9275.88,751700000,9275.88
+1999-03-02,9382.10,9494.57,9216.66,9297.61,753600000,9297.61
+1999-03-01,9315.27,9419.32,9167.76,9324.78,699500000,9324.78
+1999-02-26,9382.64,9459.52,9177.54,9306.58,784600000,9306.58
+1999-02-25,9395.66,9446.32,9200.27,9366.34,740500000,9366.34
+1999-02-24,9547.88,9662.77,9357.81,9399.67,782000000,9399.67
+1999-02-23,9549.21,9659.58,9425.26,9544.42,781100000,9544.42
+1999-02-22,9346.62,9596.13,9289.04,9552.68,718500000,9552.68
+1999-02-19,9284.51,9430.59,9218.13,9339.95,700000000,9339.95
+1999-02-18,9239.72,9368.48,9145.09,9298.63,742400000,9298.63
+1999-02-17,9240.79,9409.53,9124.03,9195.47,735100000,9195.47
+1999-02-16,9333.34,9458.46,9187.10,9297.03,653760000,9297.03
+1999-02-12,9346.47,9437.35,9161.35,9274.89,691500000,9274.89
+1999-02-11,9176.28,9423.19,9088.49,9363.46,815800000,9363.46
+1999-02-10,9135.86,9267.68,9025.41,9177.31,721400000,9177.31
+1999-02-09,9268.46,9361.92,9076.13,9133.03,736000000,9133.03
+1999-02-08,9318.66,9427.83,9148.99,9291.11,705400000,9291.11
+1999-02-05,9317.12,9457.43,9141.27,9304.24,872000000,9304.24
+1999-02-04,9389.72,9511.50,9178.60,9304.50,854400000,9304.50
+1999-02-03,9275.41,9454.09,9176.80,9366.81,876500000,9366.81
+1999-02-02,9318.40,9394.10,9146.16,9274.12,845500000,9274.12
+1999-02-01,9405.43,9513.05,9266.91,9345.70,799400000,9345.70
+1999-01-29,9317.37,9457.18,9172.16,9358.83,917000000,9358.83
+1999-01-28,9220.57,9384.83,9134.57,9281.33,848800000,9281.33
+1999-01-27,9378.65,9461.04,9135.86,9200.23,893800000,9200.23
+1999-01-26,9210.78,9408.77,9118.35,9324.58,896400000,9324.58
+1999-01-25,9117.58,9273.09,8994.26,9203.32,723900000,9203.32
+1999-01-22,9149.51,9289.31,8998.89,9120.67,785900000,9120.67
+1999-01-21,9371.96,9479.83,9150.28,9264.08,871800000,9264.08
+1999-01-20,9395.64,9555.01,9230.35,9335.91,905700000,9335.91
+1999-01-19,9408.52,9499.14,9165.73,9355.22,785500000,9355.22
+1999-01-15,9200.74,9381.74,9124.02,9340.55,798100000,9340.55
+1999-01-14,9315.06,9380.20,9052.44,9120.93,797200000,9120.93
+1999-01-13,9213.62,9485.24,9134.06,9349.56,931500000,9349.56
+1999-01-12,9599.55,9680.40,9394.87,9474.68,800200000,9474.68
+1999-01-11,9613.97,9751.46,9446.36,9619.89,818000000,9619.89
+1999-01-08,9612.17,9759.44,9447.91,9643.32,937800000,9643.32
+1999-01-07,9445.33,9616.29,9369.12,9537.76,863000000,9537.76
+1999-01-06,9399.25,9608.05,9331.02,9544.97,986900000,9544.97
+1999-01-05,9201.00,9389.46,9137.66,9311.19,775000000,9311.19
+1999-01-04,9212.84,9393.84,9089.00,9184.27,877000000,9184.27
+1998-12-31,9271.55,9343.64,9106.77,9181.43,719200000,9181.43
+1998-12-30,9310.17,9390.75,9211.30,9274.64,594220000,9274.64
+1998-12-29,9222.63,9375.30,9152.34,9320.98,586490000,9320.98
+1998-12-28,9251.21,9330.50,9133.54,9226.75,531560000,9226.75
+1998-12-24,9202.29,9289.57,9146.42,9217.99,246980000,9217.99
+1998-12-23,9085.91,9255.84,9022.58,9202.03,697500000,9202.03
+1998-12-22,9000.95,9122.99,8909.29,9044.46,680500000,9044.46
+1998-12-21,8903.89,9150.54,8874.28,8988.85,744800000,8988.85
+1998-12-18,8902.86,9012.28,8789.31,8903.63,839600000,8903.63
+1998-12-17,8787.55,8959.76,8725.21,8875.82,739400000,8875.82
+1998-12-16,8843.38,8922.94,8675.52,8790.60,725500000,8790.60
+1998-12-15,8725.72,8878.40,8614.75,8823.30,777900000,8823.30
+1998-12-14,8767.95,8868.10,8610.63,8695.60,741800000,8695.60
+1998-12-11,8814.29,8916.24,8680.41,8821.76,688900000,8821.76
+1998-12-10,9008.42,9034.42,8795.24,8841.58,748600000,8841.58
+1998-12-09,9025.41,9138.18,8881.23,9009.19,694200000,9009.19
+1998-12-08,9038.03,9153.63,8903.37,9027.98,727700000,9027.98
+1998-12-07,9031.59,9146.93,8946.11,9070.47,671200000,9070.47
+1998-12-04,8964.91,9078.70,8873.76,9016.14,709700000,9016.14
+1998-12-03,9031.33,9112.69,8839.78,8879.68,799100000,8879.68
+1998-12-02,9039.57,9154.40,8922.94,9064.54,727400000,9064.54
+1998-12-01,9039.57,9214.65,8934.52,9133.54,789200000,9133.54
+1998-11-30,9292.40,9348.53,9074.07,9116.55,687900000,9116.55
+1998-11-27,9333.85,9403.62,9263.82,9333.08,256950000,9333.08
+1998-11-25,9292.91,9387.66,9199.20,9314.28,583580000,9314.28
+1998-11-24,9327.93,9457.95,9219.28,9301.15,766200000,9301.15
+1998-11-23,9225.72,9425.77,9137.92,9374.27,774100000,9374.27
+1998-11-20,9129.94,9215.93,9048.32,9159.55,721200000,9159.55
+1998-11-19,9081.02,9147.96,8967.22,9056.05,671000000,9056.05
+1998-11-18,8988.85,9095.70,8897.96,9041.11,652510000,9041.11
+1998-11-17,8991.17,9158.26,8870.42,8986.28,705200000,8986.28
+1998-11-16,8921.14,9093.12,8885.09,9011.25,615580000,9011.25
+1998-11-13,8863.21,8982.16,8782.62,8919.59,602270000,8919.59
+1998-11-12,8823.04,8951.26,8733.70,8829.74,662300000,8829.74
+1998-11-11,8922.42,8980.35,8759.19,8823.82,715700000,8823.82
+1998-11-10,8895.17,9020.00,8760.99,8863.98,671300000,8863.98
+1998-11-09,8980.87,9024.89,8813.00,8897.96,592990000,8897.96
+1998-11-06,8902.86,9042.40,8831.02,8975.46,683100000,8975.46
+1998-11-05,8782.11,8943.79,8676.55,8915.47,770200000,8915.47
+1998-11-04,8801.93,8933.49,8660.33,8783.14,861100000,8783.14
+1998-11-03,8708.99,8819.18,8601.88,8706.15,704300000,8706.15
+1998-11-02,8645.65,8804.51,8573.56,8706.15,753800000,8706.15
+1998-10-30,8591.58,8718.25,8481.39,8592.10,785000000,8592.10
+1998-10-29,8371.22,8539.83,8305.54,8495.03,699400000,8495.03
+1998-10-28,8372.74,8504.04,8271.55,8371.97,677500000,8371.97
+1998-10-27,8503.79,8586.69,8309.92,8366.04,764500000,8366.04
+1998-10-26,8483.96,8564.03,8349.57,8432.21,609910000,8432.21
+1998-10-23,8531.34,8589.01,8366.04,8452.29,637640000,8452.29
+1998-10-22,8519.03,8629.17,8334.12,8533.14,754900000,8533.14
+1998-10-21,8504.67,8641.02,8380.72,8519.23,745100000,8519.23
+1998-10-20,8540.09,8713.62,8419.08,8505.85,958200000,8505.85
+1998-10-19,8415.48,8591.07,8321.50,8466.45,738600000,8466.45
+1998-10-16,8384.84,8521.29,8244.26,8416.76,1042200000,8416.76
+1998-10-15,7953.07,8375.57,7885.62,8299.36,937600000,8299.36
+1998-10-14,7925.01,8107.29,7812.75,7968.78,791200000,7968.78
+1998-10-13,7982.68,8093.90,7805.29,7938.14,733300000,7938.14
+1998-10-12,8038.03,8162.65,7931.19,8001.47,691100000,8001.47
+1998-10-09,7806.57,7976.76,7628.15,7899.52,878100000,7899.52
+1998-10-08,7734.48,7822.02,7399.78,7731.91,1114600000,7731.91
+1998-10-07,7754.82,7913.94,7558.89,7741.69,977000000,7741.69
+1998-10-06,7733.97,7951.53,7646.43,7742.98,845700000,7742.98
+1998-10-05,7760.75,7866.82,7507.14,7726.24,817500000,7726.24
+1998-10-02,7631.50,7866.31,7496.84,7784.69,902900000,7784.69
+1998-10-01,7749.42,7856.26,7540.87,7632.53,899700000,7632.53
+1998-09-30,8025.42,8097.51,7775.42,7842.62,800100000,7842.62
+1998-09-29,8141.28,8253.79,7946.63,8080.52,760100000,8080.52
+1998-09-28,8114.76,8239.37,7986.80,8108.84,690500000,8108.84
+1998-09-25,7911.10,8127.89,7849.06,8028.77,736800000,8028.77
+1998-09-24,8117.33,8227.53,7906.73,8001.99,805900000,8001.99
+1998-09-23,7988.60,8198.43,7891.79,8154.41,899700000,8154.41
+1998-09-22,7987.83,8038.29,7816.87,7897.20,694900000,7897.20
+1998-09-21,7739.12,8008.43,7653.64,7933.25,609880000,7933.25
+1998-09-18,7942.77,8012.03,7759.97,7895.66,794700000,7895.66
+1998-09-17,7905.96,8001.99,7795.50,7873.77,694500000,7873.77
+1998-09-16,8061.46,8159.30,7923.46,8089.78,797500000,8089.78
+1998-09-15,7918.83,8087.21,7840.30,8024.39,724600000,8024.39
+1998-09-14,7936.08,8081.29,7848.03,7945.35,714400000,7945.35
+1998-09-11,7583.61,7866.31,7497.10,7795.50,819100000,7795.50
+1998-09-10,7680.42,7761.00,7469.04,7615.54,880300000,7615.54
+1998-09-09,7995.04,8094.16,7796.79,7865.02,704300000,7865.02
+1998-09-08,7964.91,8103.69,7779.03,8020.78,814800000,8020.78
+1998-09-04,7737.32,7831.29,7450.24,7640.25,780300000,7640.25
+1998-09-03,7679.13,7841.59,7499.68,7682.22,880500000,7682.22
+1998-09-02,7901.06,8036.23,7710.54,7782.37,894600000,7782.37
+1998-09-01,7583.09,7937.37,7379.70,7827.43,1216600000,7827.43
+1998-08-31,8078.97,8149.00,7517.70,7539.07,917500000,7539.07
+1998-08-28,8193.54,8301.68,7951.27,8051.68,840300000,8051.68
+1998-08-27,8377.89,8448.69,8062.24,8165.99,938600000,8165.99
+1998-08-26,8492.97,8639.47,8396.68,8523.35,674100000,8523.35
+1998-08-25,8632.00,8740.91,8510.22,8602.65,664900000,8602.65
+1998-08-24,8584.63,8680.66,8452.29,8566.61,558100000,8566.61
+1998-08-21,8600.34,8600.34,8307.60,8533.65,725700000,8533.65
+1998-08-20,8639.47,8726.75,8538.29,8611.41,621630000,8611.41
+1998-08-19,8745.80,8797.81,8635.61,8693.28,633630000,8693.28
+1998-08-18,8593.90,8767.69,8551.93,8714.65,690600000,8714.65
+1998-08-17,8404.66,8613.98,8350.34,8574.85,584380000,8574.85
+1998-08-14,8531.85,8635.87,8342.10,8425.00,644030000,8425.00
+1998-08-13,8535.46,8656.46,8399.51,8459.50,660700000,8459.50
+1998-08-12,8528.76,8621.71,8437.10,8552.96,711700000,8552.96
+1998-08-11,8431.44,8538.29,8263.32,8462.85,774400000,8462.85
+1998-08-10,8585.40,8689.16,8491.17,8574.85,579180000,8574.85
+1998-08-07,8610.63,8745.03,8490.40,8598.02,759100000,8598.02
+1998-08-06,8513.83,8671.14,8415.22,8577.68,768400000,8577.68
+1998-08-05,8493.75,8641.79,8316.10,8546.78,851600000,8546.78
+1998-08-04,8859.86,8896.68,8463.37,8487.31,852600000,8487.31
+1998-08-03,8868.10,8948.17,8729.58,8786.74,620400000,8786.74
+1998-07-31,9024.64,9109.34,8810.94,8883.29,645910000,8883.29
+1998-07-30,8962.85,9113.20,8884.83,9026.95,687400000,9026.95
+1998-07-29,8976.49,9039.57,8831.28,8914.96,644350000,8914.96
+1998-07-28,8982.16,9065.57,8786.48,8934.78,703600000,8934.78
+1998-07-27,8905.17,9084.63,8806.05,9028.24,619990000,9028.24
+1998-07-24,9002.24,9077.67,8814.29,8937.36,698600000,8937.36
+1998-07-23,9130.46,9196.11,8892.56,8932.98,741600000,8932.98
+1998-07-22,9185.71,9264.85,8996.83,9128.91,739800000,9128.91
+1998-07-21,9296.26,9369.12,9145.65,9190.19,659700000,9190.19
+1998-07-20,9340.55,9408.26,9206.15,9295.75,560580000,9295.75
+1998-07-17,9328.19,9412.64,9259.96,9337.97,618030000,9337.97
+1998-07-16,9233.23,9368.35,9173.19,9328.19,677800000,9328.19
+1998-07-15,9246.57,9388.69,9165.99,9234.47,723900000,9234.47
+1998-07-14,9100.07,9314.54,9087.20,9245.54,700300000,9245.54
+1998-07-13,9107.03,9186.58,9020.52,9096.21,574880000,9096.21
+1998-07-10,9098.53,9194.82,8976.23,9105.74,576080000,9105.74
+1998-07-09,9135.36,9217.07,9014.30,9089.78,663600000,9089.78
+1998-07-08,9107.96,9231.27,9041.70,9174.97,607230000,9174.97
+1998-07-07,9094.76,9209.85,9001.84,9085.04,624890000,9085.04
+1998-07-06,9017.53,9137.11,8965.97,9091.77,514750000,9091.77
+1998-07-02,9037.71,9094.01,8956.25,9025.26,510210000,9025.26
+1998-07-01,9011.56,9103.23,8918.64,9048.67,701600000,9048.67
+1998-06-30,9010.81,9085.79,8868.57,8952.02,757200000,8952.02
+1998-06-29,9002.34,9099.24,8930.84,8997.36,564350000,8997.36
+1998-06-26,8948.28,9047.93,8879.78,8944.54,520050000,8944.54
+1998-06-25,8950.52,9079.56,8863.58,8935.58,669900000,8935.58
+1998-06-24,8828.46,8970.20,8740.52,8923.87,714900000,8923.87
+1998-06-23,8789.35,8877.78,8724.83,8828.46,657100000,8828.46
+1998-06-22,8705.65,8805.04,8639.38,8711.13,531550000,8711.13
+1998-06-19,8844.90,8885.01,8664.79,8712.87,715500000,8712.87
+1998-06-18,8825.72,8900.20,8740.77,8813.01,590440000,8813.01
+1998-06-17,8745.51,8932.34,8695.43,8829.46,744400000,8829.46
+1998-06-16,8666.04,8751.24,8524.55,8665.29,664600000,8665.29
+1998-06-15,8723.34,8818.99,8588.32,8627.93,595820000,8627.93
+1998-06-12,8812.77,8891.24,8660.56,8834.94,633300000,8834.94
+1998-06-11,8975.43,9015.54,8774.40,8811.77,627470000,8811.77
+1998-06-10,9031.98,9145.08,8891.98,8971.70,609410000,8971.70
+1998-06-09,9074.58,9130.13,8966.72,9049.92,563610000,9049.92
+1998-06-08,9052.66,9155.04,8994.12,9069.60,543390000,9069.60
+1998-06-05,8920.88,9057.39,8866.57,9037.71,558440000,9037.71
+1998-06-04,8798.07,8916.64,8719.85,8870.56,577470000,8870.56
+1998-06-03,8909.42,8970.20,8769.67,8803.80,584480000,8803.80
+1998-06-02,8961.48,9014.05,8838.92,8891.24,590930000,8891.24
+1998-06-01,8907.93,9023.01,8805.04,8922.37,537660000,8922.37
+1998-05-29,9004.83,9060.13,8859.60,8899.95,556780000,8899.95
+1998-05-28,8947.53,9040.70,8861.59,8970.20,588900000,8970.20
+1998-05-27,8902.45,9015.04,8760.95,8936.57,682040000,8936.57
+1998-05-26,9167.00,9201.63,8949.78,8963.73,541410000,8963.73
+1998-05-22,9153.05,9209.35,9040.70,9114.44,444070000,9114.44
+1998-05-21,9173.48,9248.96,9058.64,9132.37,551970000,9132.37
+1998-05-20,9101.98,9219.06,9010.56,9171.48,587240000,9171.48
+1998-05-19,9097.00,9164.51,8997.36,9054.65,566020000,9054.65
+1998-05-18,9088.53,9171.23,8972.20,9050.91,519100000,9050.91
+1998-05-15,9161.52,9240.74,9051.91,9096.00,621990000,9096.00
+1998-05-14,9136.86,9266.89,9077.07,9172.23,578380000,9172.23
+1998-05-13,9178.06,9283.09,9119.67,9211.84,600010000,9211.84
+1998-05-12,9098.00,9214.08,9023.51,9161.77,604420000,9161.77
+1998-05-11,9125.65,9231.52,9045.43,9091.52,560840000,9091.52
+1998-05-08,8981.91,9143.09,8951.27,9055.15,567890000,9055.15
+1998-05-07,9044.44,9102.98,8914.90,8976.68,582240000,8976.68
+1998-05-06,9174.72,9223.80,9017.28,9054.65,606540000,9054.65
+1998-05-05,9189.92,9251.95,9062.37,9147.57,583630000,9147.57
+1998-05-04,9201.38,9311.98,9134.86,9192.66,551700000,9192.66
+1998-05-01,9106.47,9211.84,9015.54,9147.07,581970000,9147.07
+1998-04-30,9018.28,9169.99,8970.95,9063.37,695600000,9063.37
+1998-04-29,8899.21,9036.47,8857.85,8951.52,638790000,8951.52
+1998-04-28,8920.88,9051.16,8828.71,8898.96,678600000,8898.96
+1998-04-27,8937.07,9026.25,8796.08,8917.64,685960000,8917.64
+1998-04-24,9143.83,9206.36,8983.65,9064.62,633890000,9064.62
+1998-04-23,9176.96,9269.88,9061.88,9143.33,653190000,9143.33
+1998-04-22,9184.93,9287.32,9083.80,9176.72,696740000,9176.72
+1998-04-21,9137.85,9250.20,9051.41,9184.94,675640000,9184.94
+1998-04-20,9166.75,9245.22,9027.25,9141.84,595190000,9141.84
+1998-04-17,9077.57,9213.58,9010.06,9167.50,672290000,9167.50
+1998-04-16,9162.27,9204.12,8978.92,9076.57,699570000,9076.57
+1998-04-15,9110.45,9249.95,9017.53,9162.27,685020000,9162.27
+1998-04-14,9014.30,9177.96,8971.45,9110.20,613730000,9110.20
+1998-04-13,8997.11,9107.21,8870.31,9012.30,564480000,9012.30
+1998-04-09,8891.48,9062.12,8891.48,8994.86,548940000,8994.86
+1998-04-08,8951.52,9023.51,8821.73,8891.48,616330000,8891.48
+1998-04-07,8995.36,9072.34,8862.34,8956.50,670760000,8956.50
+1998-04-06,9051.16,9170.74,8958.49,9033.23,625810000,9033.23
+1998-04-03,8986.64,9085.79,8896.22,8983.41,653880000,8983.41
+1998-04-02,8900.20,9025.26,8829.21,8986.64,674340000,8986.64
+1998-04-01,8818.50,8935.33,8715.61,8868.32,677310000,8868.32
+1998-03-31,8852.12,8937.57,8726.32,8799.81,674930000,8799.81
+1998-03-30,8802.30,8877.04,8701.66,8782.12,497400000,8782.12
+1998-03-27,8835.68,8941.31,8741.77,8796.08,582190000,8796.08
+1998-03-26,8847.89,8931.09,8769.92,8846.89,606770000,8846.89
+1998-03-25,8943.05,8997.11,8780.88,8872.80,676550000,8872.80
+1998-03-24,8887.00,8962.48,8815.01,8904.44,605720000,8904.44
+1998-03-23,8839.42,8939.31,8758.71,8816.25,631350000,8816.25
+1998-03-20,8814.01,8957.25,8766.43,8906.43,717310000,8906.43
+1998-03-19,8776.89,8855.11,8708.64,8803.05,598240000,8803.05
+1998-03-18,8749.24,8825.72,8655.83,8775.40,632690000,8775.40
+1998-03-17,8706.64,8812.52,8633.41,8749.99,680960000,8749.99
+1998-03-16,8647.36,8760.45,8573.37,8718.85,548980000,8718.85
+1998-03-13,8669.28,8733.30,8563.90,8602.52,597800000,8602.52
+1998-03-12,8622.20,8725.58,8576.86,8659.56,594940000,8659.56
+1998-03-11,8682.73,8740.52,8599.28,8675.75,655260000,8675.75
+1998-03-10,8623.19,8688.71,8550.45,8643.12,631920000,8643.12
+1998-03-09,8601.02,8661.56,8482.45,8567.14,624700000,8567.14
+1998-03-06,8505.86,8610.49,8432.62,8569.39,665500000,8569.39
+1998-03-05,8480.20,8536.80,8377.32,8444.33,648270000,8444.33
+1998-03-04,8524.55,8609.99,8454.79,8539.24,644280000,8539.24
+1998-03-03,8532.77,8632.16,8464.26,8584.83,612360000,8584.83
+1998-03-02,8528.78,8649.35,8427.89,8550.45,591470000,8550.45
+1998-02-27,8532.77,8616.72,8426.15,8545.72,574480000,8545.72
+1998-02-26,8471.48,8541.98,8377.82,8490.67,646280000,8490.67
+1998-02-25,8455.29,8510.60,8362.37,8457.78,611350000,8457.78
+1998-02-24,8370.10,8457.78,8303.83,8370.10,589880000,8370.10
+1998-02-23,8381.31,8490.92,8331.98,8410.20,550730000,8410.20
+1998-02-20,8350.67,8449.06,8291.88,8413.94,594300000,8413.94
+1998-02-19,8379.56,8463.26,8327.25,8375.58,581820000,8375.58
+1998-02-18,8419.17,8503.12,8326.75,8451.06,606000000,8451.06
+1998-02-17,8439.35,8483.94,8335.97,8398.50,605890000,8398.50
+1998-02-13,8346.68,8416.43,8269.21,8370.10,531940000,8370.10
+1998-02-12,8260.49,8412.20,8206.93,8369.60,611480000,8369.60
+1998-02-11,8298.60,8367.61,8223.87,8314.55,599300000,8314.55
+1998-02-10,8241.81,8368.10,8149.88,8295.61,642800000,8295.61
+1998-02-09,8185.26,8256.75,8104.55,8180.52,524810000,8180.52
+1998-02-06,8178.28,8255.26,8102.30,8189.49,569650000,8189.49
+1998-02-05,8129.71,8215.65,8037.54,8117.25,703980000,8117.25
+1998-02-04,8160.35,8188.00,8050.99,8129.71,695420000,8129.71
+1998-02-03,8107.78,8193.23,8010.63,8160.35,692120000,8160.35
+1998-02-02,7987.46,8157.86,7987.46,8107.78,724320000,8107.78
+1998-01-30,7973.02,8023.83,7850.95,7906.50,613380000,7906.50
+1998-01-29,7915.47,8015.12,7883.09,7973.02,750760000,7973.02
+1998-01-28,7815.08,7985.97,7761.52,7915.47,708470000,7915.47
+1998-01-27,7712.94,7890.56,7677.07,7815.08,679140000,7815.08
+1998-01-26,7700.74,7813.59,7629.99,7712.94,555080000,7712.94
+1998-01-23,7730.88,7814.08,7609.31,7700.74,635770000,7700.74
+1998-01-22,7794.40,7833.26,7637.71,7730.88,646570000,7730.88
+1998-01-21,7873.12,7874.87,7707.96,7794.40,626160000,7794.40
+1998-01-20,7753.55,7908.00,7696.01,7873.12,644790000,7873.12
+1998-01-16,7691.77,7846.47,7687.04,7753.55,670080000,7753.55
+1998-01-15,7784.69,7803.87,7651.66,7691.77,569050000,7691.77
+1998-01-14,7732.13,7836.25,7669.10,7784.69,603280000,7784.69
+1998-01-13,7647.18,7791.17,7610.31,7732.13,646740000,7732.13
+1998-01-12,7580.42,7706.22,7391.59,7647.18,705450000,7647.18
+1998-01-09,7802.62,7815.08,7513.41,7580.42,746420000,7580.42
+1998-01-08,7902.27,7935.40,7733.12,7802.62,652140000,7802.62
+1998-01-07,7906.25,7943.87,7751.56,7902.27,667390000,7902.27
+1998-01-06,7978.99,7999.17,7832.52,7906.25,618360000,7906.25
+1998-01-05,7965.04,8072.91,7865.40,7978.99,628070000,7978.99
+1998-01-02,7908.25,8001.41,7845.47,7965.04,366730000,7965.04
+1997-12-31,7915.97,7995.93,7833.76,7908.25,467280000,7908.25
+1997-12-30,7792.41,7958.32,7787.68,7915.97,499500000,7915.97
+1997-12-29,7712.94,7835.01,7712.94,7792.41,443160000,7792.41
+1997-12-26,7660.13,7743.34,7634.72,7679.31,154900000,7679.31
+1997-12-24,7691.77,7767.75,7624.26,7660.13,265980000,7660.13
+1997-12-23,7819.31,7874.12,7667.11,7691.77,515070000,7691.77
+1997-12-22,7756.29,7892.05,7710.45,7819.31,530670000,7819.31
+1997-12-19,7846.50,7878.60,7563.23,7756.29,793200000,7756.29
+1997-12-18,7957.41,7991.48,7781.35,7846.50,618870000,7846.50
+1997-12-17,7976.31,8068.81,7879.08,7957.41,618900000,7957.41
+1997-12-16,7922.59,8069.06,7889.52,7976.31,623320000,7976.31
+1997-12-15,7838.30,7992.72,7807.96,7922.59,597150000,7922.59
+1997-12-12,7848.99,7947.21,7756.73,7838.30,579280000,7838.30
+1997-12-11,7961.64,7961.64,7778.37,7848.99,631770000,7848.99
+1997-12-10,8049.66,8077.27,7881.07,7978.79,602290000,7978.79
+1997-12-09,8110.84,8142.67,7990.98,8049.66,539130000,8049.66
+1997-12-08,8149.13,8195.88,8057.37,8110.84,490320000,8110.84
+1997-12-05,8050.16,8209.56,7980.04,8149.13,563590000,8149.13
+1997-12-04,8032.01,8159.58,7978.30,8050.16,633470000,8050.16
+1997-12-03,8018.83,8118.30,7915.63,8032.01,624610000,8032.01
+1997-12-02,8013.11,8096.66,7935.03,8018.83,576120000,8018.83
+1997-12-01,7823.62,8048.92,7823.62,8013.11,590300000,8013.11
+1997-11-28,7794.78,7872.86,7786.08,7823.13,189070000,7823.13
+1997-11-26,7808.95,7893.50,7749.77,7794.78,487750000,7794.78
+1997-11-25,7767.92,7880.32,7706.00,7808.95,587890000,7808.95
+1997-11-24,7881.07,7887.28,7723.41,7767.92,514920000,7767.92
+1997-11-21,7826.61,7934.53,7758.47,7881.07,611000000,7881.07
+1997-11-20,7724.74,7889.77,7718.19,7826.61,602610000,7826.61
+1997-11-19,7650.82,7779.75,7599.50,7724.74,542720000,7724.74
+1997-11-18,7698.22,7772.62,7607.11,7650.82,521380000,7650.82
+1997-11-17,7613.49,7781.71,7613.49,7698.22,576540000,7698.22
+1997-11-14,7487.76,7634.61,7431.03,7572.48,635760000,7572.48
+1997-11-13,7401.32,7546.45,7334.77,7487.76,653960000,7487.76
+1997-11-12,7558.73,7573.22,7359.32,7401.32,585340000,7401.32
+1997-11-11,7552.59,7599.74,7518.21,7558.73,435660000,7558.73
+1997-11-10,7581.32,7687.90,7511.83,7552.59,464140000,7552.59
+1997-11-07,7646.89,7646.89,7460.99,7581.32,569980000,7581.32
+1997-11-06,7692.57,7758.63,7597.78,7683.24,522890000,7683.24
+1997-11-05,7689.13,7791.78,7628.96,7692.57,565680000,7692.57
+1997-11-04,7674.39,7757.15,7583.29,7689.13,541590000,7689.13
+1997-11-03,7443.07,7674.39,7443.07,7674.39,564740000,7674.39
+1997-10-31,7381.67,7544.24,7329.61,7442.08,638070000,7442.08
+1997-10-30,7506.67,7569.78,7340.42,7381.67,712230000,7381.67
+1997-10-29,7498.32,7664.08,7409.67,7506.67,777660000,7506.67
+1997-10-28,7161.15,7553.57,6936.45,7498.32,1202550000,7498.32
+1997-10-27,7715.41,7717.37,7150.10,7161.15,693730000,7161.15
+1997-10-24,7847.77,7975.47,7645.91,7715.41,677630000,7715.41
+1997-10-23,7957.05,7957.05,7767.22,7847.77,673270000,7847.77
+1997-10-22,8060.44,8124.78,7941.33,8034.65,613490000,8034.65
+1997-10-21,7921.44,8090.40,7909.41,8060.44,582310000,8060.44
+1997-10-20,7847.03,7966.63,7774.83,7921.44,483880000,7921.44
+1997-10-17,7938.88,7953.61,7731.12,7847.03,624980000,7847.03
+1997-10-16,8057.98,8146.14,7880.18,7938.88,597010000,7938.88
+1997-10-15,8096.29,8127.48,7997.57,8057.98,505310000,8057.98
+1997-10-14,8072.22,8168.24,7990.20,8096.29,510330000,8096.29
+1997-10-13,8045.21,8150.31,8026.30,8072.22,354800000,8072.22
+1997-10-10,8061.42,8091.38,7961.96,8045.21,500680000,8045.21
+1997-10-09,8095.06,8127.72,7980.87,8061.42,551840000,8061.42
+1997-10-08,8178.31,8208.52,8019.92,8095.06,573110000,8095.06
+1997-10-07,8100.22,8218.34,8058.96,8178.31,551970000,8178.31
+1997-10-06,8038.58,8160.63,8017.71,8100.22,495620000,8100.22
+1997-10-03,8027.53,8183.22,7937.89,8038.58,623370000,8038.58
+1997-10-02,8015.50,8087.45,7943.79,8027.53,474760000,8027.53
+1997-10-01,7945.26,8081.06,7909.41,8015.50,598660000,8015.50
+1997-09-30,7991.43,8045.70,7900.08,7945.26,587500000,7945.26
+1997-09-29,7922.18,8030.48,7862.99,7991.43,477100000,7991.43
+1997-09-26,7853.66,7970.80,7853.66,7922.18,505340000,7922.18
+1997-09-25,7906.71,7962.45,7802.34,7848.01,524880000,7848.01
+1997-09-24,7970.06,8065.84,7866.43,7906.71,639460000,7906.71
+1997-09-23,7996.83,8048.16,7885.34,7970.06,522930000,7970.06
+1997-09-22,7917.27,8078.36,7889.27,7996.83,490900000,7996.83
+1997-09-19,7922.72,7972.29,7821.69,7917.27,631040000,7917.27
+1997-09-18,7886.44,8049.36,7858.93,7922.72,566830000,7922.72
+1997-09-17,7895.92,7981.54,7816.47,7886.44,590550000,7886.44
+1997-09-16,7721.14,7951.18,7709.75,7895.92,636380000,7895.92
+1997-09-15,7742.97,7832.86,7680.95,7721.14,468030000,7721.14
+1997-09-12,7660.98,7779.67,7584.56,7742.97,544150000,7742.97
+1997-09-11,7719.28,7745.29,7556.23,7660.98,575020000,7660.98
+1997-09-10,7851.91,7868.16,7686.30,7719.28,517620000,7719.28
+1997-09-09,7835.18,7922.05,7768.52,7851.91,502200000,7851.91
+1997-09-08,7822.41,7921.35,7795.00,7835.18,466430000,7835.18
+1997-09-05,7867.24,7952.01,7765.27,7822.41,536400000,7822.41
+1997-09-04,7894.64,7936.45,7788.50,7867.24,559310000,7867.24
+1997-09-03,7879.78,7972.22,7828.45,7894.64,549060000,7894.64
+1997-09-02,7650.99,7903.47,7650.99,7879.78,491870000,7879.78
+1997-08-29,7694.43,7729.73,7580.85,7622.42,413910000,7622.42
+1997-08-28,7787.33,7831.70,7634.50,7694.43,486300000,7694.43
+1997-08-27,7782.22,7850.51,7666.55,7787.33,492150000,7787.33
+1997-08-26,7859.57,7891.62,7734.61,7782.22,449110000,7782.22
+1997-08-25,7887.91,7974.08,7791.75,7859.57,388990000,7859.57
+1997-08-22,7893.95,7904.86,7695.36,7887.91,460160000,7887.91
+1997-08-21,8021.23,8043.06,7834.02,7893.95,499000000,7893.95
+1997-08-20,7918.10,8037.95,7870.95,8021.23,521270000,8021.23
+1997-08-19,7803.36,7947.37,7776.65,7918.10,545630000,7918.10
+1997-08-18,7694.66,7847.49,7588.28,7803.36,514330000,7803.36
+1997-08-15,7919.26,7919.26,7685.14,7694.66,537820000,7694.66
+1997-08-14,7928.32,8027.73,7843.54,7942.03,530460000,7942.03
+1997-08-13,7960.84,8075.58,7848.19,7928.32,587210000,7928.32
+1997-08-12,8062.11,8132.49,7926.46,7960.84,499310000,7960.84
+1997-08-11,8031.22,8122.27,7922.52,8062.11,480340000,8062.11
+1997-08-08,8170.58,8170.58,7961.07,8031.22,563420000,8031.22
+1997-08-07,8259.31,8340.14,8158.73,8188.00,576030000,8188.00
+1997-08-06,8187.54,8302.05,8130.63,8259.31,565200000,8259.31
+1997-08-05,8198.45,8251.88,8129.93,8187.54,525710000,8187.54
+1997-08-04,8194.04,8261.40,8097.65,8198.45,456000000,8198.45
+1997-08-01,8222.61,8287.65,8062.11,8194.04,513750000,8194.04
+1997-07-31,8254.89,8328.99,8160.36,8222.61,547830000,8222.61
+1997-07-30,8174.53,8313.19,8156.88,8254.89,568470000,8254.89
+1997-07-29,8121.11,8232.36,8049.34,8174.53,544540000,8174.53
+1997-07-28,8113.44,8221.68,8051.89,8121.11,466920000,8121.11
+1997-07-25,8116.93,8200.31,8037.95,8113.44,521510000,8113.44
+1997-07-24,8088.36,8174.53,7968.51,8116.93,571020000,8116.93
+1997-07-23,8061.65,8199.15,8024.95,8088.36,616930000,8088.36
+1997-07-22,7906.72,8093.93,7870.72,8061.65,579590000,8061.65
+1997-07-21,7890.46,7981.51,7783.85,7906.72,459500000,7906.72
+1997-07-18,8020.77,8057.23,7829.61,7890.46,589710000,7890.46
+1997-07-17,8038.88,8136.67,7910.67,8020.77,629250000,8020.77
+1997-07-16,7975.71,8108.10,7919.73,8038.88,647390000,8038.88
+1997-07-15,7922.98,8037.03,7843.78,7975.71,598370000,7975.71
+1997-07-14,7921.82,8001.26,7831.00,7922.98,485960000,7922.98
+1997-07-11,7886.76,7984.02,7837.68,7921.82,500050000,7921.82
+1997-07-10,7842.43,7953.94,7777.06,7886.76,551340000,7886.76
+1997-07-09,7962.31,8027.68,7775.48,7842.43,589110000,7842.43
+1997-07-08,7858.49,8000.08,7824.33,7962.31,526010000,7962.31
+1997-07-07,7895.81,7983.79,7805.34,7858.49,518780000,7858.49
+1997-07-03,7805.79,7952.35,7805.79,7895.81,374680000,7895.81
+1997-07-02,7722.33,7814.38,7648.14,7795.38,526970000,7795.38
+1997-07-01,7672.79,7801.04,7613.53,7722.33,544190000,7722.33
+1997-06-30,7687.72,7768.01,7571.46,7672.79,561540000,7672.79
+1997-06-27,7654.25,7793.12,7627.33,7687.72,472540000,7687.72
+1997-06-26,7689.98,7754.22,7581.64,7654.25,499780000,7654.25
+1997-06-25,7758.06,7832.48,7615.57,7689.98,603040000,7689.98
+1997-06-24,7787.01,7787.01,7602.90,7758.06,542650000,7758.06
+1997-06-23,7796.51,7816.87,7592.04,7604.26,492940000,7604.26
+1997-06-20,7777.06,7868.44,7733.64,7796.51,653110000,7796.51
+1997-06-19,7718.71,7834.51,7697.45,7777.06,536940000,7777.06
+1997-06-18,7760.78,7789.28,7651.30,7718.71,491740000,7718.71
+1997-06-17,7772.09,7834.97,7680.71,7760.78,543010000,7760.78
+1997-06-16,7782.04,7829.99,7712.37,7772.09,414280000,7772.09
+1997-06-13,7711.47,7829.08,7683.42,7782.04,575810000,7782.04
+1997-06-12,7575.83,7741.42,7569.66,7711.47,592730000,7711.47
+1997-06-11,7539.27,7633.96,7476.29,7575.83,513740000,7575.83
+1997-06-10,7478.50,7599.61,7459.12,7539.27,526980000,7539.27
+1997-06-09,7435.78,7548.52,7412.44,7478.50,465810000,7478.50
+1997-06-06,7305.29,7473.98,7290.26,7435.78,488940000,7435.78
+1997-06-05,7269.66,7376.97,7241.33,7305.29,452610000,7305.29
+1997-06-04,7312.15,7350.36,7214.29,7269.66,466690000,7269.66
+1997-06-03,7289.40,7379.98,7225.02,7312.15,527120000,7312.15
+1997-06-02,7331.04,7383.84,7244.76,7289.40,435950000,7289.40
+1997-05-30,7330.18,7385.99,7203.99,7331.04,537200000,7331.04
+1997-05-29,7357.23,7404.44,7272.24,7330.18,462600000,7330.18
+1997-05-28,7383.41,7430.20,7287.26,7357.23,487340000,7357.23
+1997-05-27,7345.91,7421.32,7276.68,7383.41,436150000,7383.41
+1997-05-23,7260.61,7382.58,7260.61,7345.91,417030000,7345.91
+1997-05-22,7290.69,7348.79,7210.33,7258.13,426940000,7258.13
+1997-05-21,7303.46,7385.47,7218.99,7290.69,540730000,7290.69
+1997-05-20,7228.88,7336.02,7123.38,7303.46,450850000,7303.46
+1997-05-19,7194.67,7274.21,7140.69,7228.88,345140000,7228.88
+1997-05-16,7332.31,7332.31,7192.61,7194.67,486780000,7194.67
+1997-05-15,7286.16,7363.63,7225.99,7333.55,458180000,7333.55
+1997-05-14,7274.21,7381.76,7238.35,7286.16,504960000,7286.16
+1997-05-13,7292.75,7350.85,7211.16,7274.21,489760000,7274.21
+1997-05-12,7169.53,7317.47,7156.35,7292.75,459370000,7292.75
+1997-05-09,7136.62,7235.76,7079.63,7169.53,455690000,7169.53
+1997-05-08,7085.65,7236.96,7040.30,7136.62,534120000,7136.62
+1997-05-07,7225.32,7246.60,7064.78,7085.65,500580000,7085.65
+1997-05-06,7213.68,7299.98,7139.43,7225.32,603680000,7225.32
+1997-05-05,7071.20,7220.91,7029.46,7213.68,549410000,7213.68
+1997-05-02,6976.48,7104.51,6935.54,7071.20,499770000,7071.20
+1997-05-01,7008.99,7041.90,6891.39,6976.48,460380000,6976.48
+1997-04-30,6962.03,7081.23,6912.26,7008.99,562830000,7008.99
+1997-04-29,6820.75,6998.15,6820.75,6962.03,547690000,6962.03
+1997-04-28,6738.87,6826.37,6691.51,6783.02,404470000,6783.02
+1997-04-25,6792.25,6826.77,6681.08,6738.87,414350000,6738.87
+1997-04-24,6812.72,6923.90,6742.89,6792.25,493640000,6792.25
+1997-04-23,6833.59,6902.23,6746.50,6812.72,489350000,6812.72
+1997-04-22,6660.21,6858.08,6628.50,6833.59,507500000,6833.59
+1997-04-21,6703.55,6768.17,6594.38,6660.21,397300000,6660.21
+1997-04-18,6658.60,6749.71,6616.46,6703.55,468940000,6703.55
+1997-04-17,6679.87,6750.91,6600.80,6658.60,503760000,6658.60
+1997-04-16,6587.16,6708.77,6506.08,6679.87,498820000,6679.87
+1997-04-15,6457.92,6626.09,6457.92,6587.16,507370000,6587.16
+1997-04-14,6391.69,6487.22,6315.84,6451.90,406800000,6451.90
+1997-04-11,6529.48,6529.48,6358.42,6391.69,444380000,6391.69
+1997-04-10,6563.84,6626.91,6495.48,6540.05,421790000,6540.05
+1997-04-09,6609.16,6662.41,6521.16,6563.84,451500000,6563.84
+1997-04-08,6555.91,6638.62,6491.71,6609.16,450790000,6609.16
+1997-04-07,6526.07,6639.00,6508.70,6555.91,453790000,6555.91
+1997-04-04,6477.35,6561.57,6376.90,6526.07,544580000,6526.07
+1997-04-03,6517.01,6540.43,6379.16,6477.35,498010000,6477.35
+1997-04-02,6611.05,6636.73,6476.60,6517.01,478210000,6517.01
+1997-04-01,6583.48,6667.70,6482.64,6611.05,515770000,6611.05
+1997-03-31,6740.59,6743.23,6532.49,6583.48,555880000,6583.48
+1997-03-27,6880.70,6918.47,6654.86,6740.59,476790000,6740.59
+1997-03-26,6876.17,6954.72,6811.21,6880.70,506670000,6880.70
+1997-03-25,6905.25,6984.94,6832.74,6876.17,487520000,6876.17
+1997-03-24,6804.79,6933.58,6746.63,6905.25,451970000,6905.25
+1997-03-21,6820.28,6890.52,6742.85,6804.79,544830000,6804.79
+1997-03-20,6877.68,6901.47,6765.14,6820.28,497480000,6820.28
+1997-03-19,6896.56,6944.15,6794.22,6877.68,539200000,6877.68
+1997-03-18,6955.48,6997.40,6841.05,6896.56,467490000,6896.56
+1997-03-17,6935.46,7004.20,6820.28,6955.48,495260000,6955.48
+1997-03-14,6878.89,6996.27,6851.19,6935.46,491540000,6935.46
+1997-03-13,7023.59,7023.59,6852.72,6878.89,507560000,6878.89
+1997-03-12,7085.16,7111.72,6988.96,7039.37,490200000,7039.37
+1997-03-11,7079.39,7158.28,7026.28,7085.16,493250000,7085.16
+1997-03-10,7000.89,7103.25,6970.10,7079.39,468780000,7079.39
+1997-03-07,6944.70,7047.07,6927.00,7000.89,508270000,7000.89
+1997-03-06,6945.85,7017.05,6896.60,6944.70,540310000,6944.70
+1997-03-05,6852.72,6966.64,6836.95,6945.85,532500000,6945.85
+1997-03-04,6918.92,6983.95,6814.63,6852.72,537890000,6852.72
+1997-03-03,6877.74,6957.01,6798.46,6918.92,437220000,6918.92
+1997-02-28,6925.07,6978.18,6820.78,6877.74,508280000,6877.74
+1997-02-27,6983.18,7028.59,6885.44,6925.07,467190000,6925.07
+1997-02-26,7037.83,7076.31,6878.12,6983.18,573920000,6983.18
+1997-02-25,7008.20,7099.79,6935.08,7037.83,527450000,7037.83
+1997-02-24,6931.62,7049.76,6868.50,7008.20,462450000,7008.20
+1997-02-21,6927.38,6984.72,6869.27,6931.62,478450000,6931.62
+1997-02-20,7020.13,7035.91,6890.82,6927.38,492220000,6927.38
+1997-02-19,7067.46,7112.87,6980.87,7020.13,519350000,7020.13
+1997-02-18,6988.96,7084.39,6946.62,7067.46,474110000,7067.46
+1997-02-14,7022.44,7074.77,6935.85,6988.96,491540000,6988.96
+1997-02-13,6961.63,7074.39,6924.30,7022.44,593710000,7022.44
+1997-02-12,6858.11,6976.64,6844.26,6961.63,563890000,6961.63
+1997-02-11,6806.54,6887.36,6756.90,6858.11,483090000,6858.11
+1997-02-10,6855.80,6908.14,6771.14,6806.54,471590000,6806.54
+1997-02-07,6773.06,6906.22,6747.28,6855.80,540910000,6855.80
+1997-02-06,6746.90,6821.17,6683.40,6773.06,519660000,6773.06
+1997-02-05,6833.48,6913.14,6704.56,6746.90,580520000,6746.90
+1997-02-04,6806.16,6859.65,6738.43,6833.48,506530000,6833.48
+1997-02-03,6813.09,6858.11,6733.04,6806.16,463600000,6806.16
+1997-01-31,6823.86,6912.37,6769.99,6813.09,578550000,6813.09
+1997-01-30,6740.74,6845.03,6719.96,6823.86,524160000,6823.86
+1997-01-29,6656.08,6766.91,6627.98,6740.74,498390000,6740.74
+1997-01-28,6660.69,6823.48,6612.20,6656.08,541580000,6656.08
+1997-01-27,6696.48,6748.82,6598.73,6660.69,445760000,6660.69
+1997-01-24,6755.75,6798.08,6629.91,6696.48,542920000,6696.48
+1997-01-23,6850.03,6953.55,6724.19,6755.75,685070000,6755.75
+1997-01-22,6883.90,6913.14,6801.16,6850.03,587300000,6850.03
+1997-01-21,6843.87,6934.69,6771.14,6883.90,571280000,6883.90
+1997-01-20,6833.10,6893.13,6777.30,6843.87,440470000,6843.87
+1997-01-17,6765.37,6863.88,6732.66,6833.10,534640000,6833.10
+1997-01-16,6726.88,6818.47,6688.40,6765.37,537290000,6765.37
+1997-01-15,6762.29,6800.77,6669.93,6726.88,524990000,6726.88
+1997-01-14,6709.18,6816.17,6689.94,6762.29,531600000,6762.29
+1997-01-13,6703.79,6773.45,6647.99,6709.18,445400000,6709.18
+1997-01-10,6625.67,6725.35,6530.62,6703.79,545860000,6703.79
+1997-01-09,6549.48,6677.24,6520.23,6625.67,555370000,6625.67
+1997-01-08,6600.66,6650.30,6509.84,6549.48,557510000,6549.48
+1997-01-07,6567.18,6621.82,6481.75,6600.66,538220000,6600.66
+1997-01-06,6544.09,6647.22,6508.30,6567.18,531350000,6567.18
+1997-01-03,6442.49,6586.42,6437.10,6544.09,452970000,6544.09
+1997-01-02,6448.27,6511.38,6318.96,6442.49,463230000,6442.49
+1996-12-31,6549.37,6580.90,6421.74,6448.27,399760000,6448.27
+1996-12-30,6560.91,6623.96,6518.23,6549.37,339060000,6549.37
+1996-12-27,6546.68,6607.81,6510.93,6560.91,253810000,6560.91
+1996-12-26,6522.85,6594.74,6495.94,6546.68,254630000,6546.68
+1996-12-24,6489.02,6546.68,6467.10,6522.85,165140000,6522.85
+1996-12-23,6484.40,6539.76,6428.27,6489.02,343280000,6489.02
+1996-12-20,6473.64,6597.43,6445.19,6484.40,654340000,6484.40
+1996-12-19,6352.15,6499.40,6352.15,6473.64,526410000,6473.64
+1996-12-18,6308.33,6399.06,6272.96,6346.77,500490000,6346.77
+1996-12-17,6268.35,6354.46,6206.83,6308.33,519840000,6308.33
+1996-12-16,6304.87,6388.68,6227.98,6268.35,447560000,6268.35
+1996-12-13,6303.71,6377.14,6227.59,6304.87,458540000,6304.87
+1996-12-12,6402.52,6465.57,6283.72,6303.71,492920000,6303.71
+1996-12-11,6457.88,6457.88,6317.94,6402.52,494210000,6402.52
+1996-12-10,6463.94,6545.56,6427.04,6473.25,446120000,6473.25
+1996-12-09,6381.94,6496.73,6375.98,6463.94,381570000,6463.94
+1996-12-06,6437.10,6441.20,6274.24,6381.94,500860000,6381.94
+1996-12-05,6422.94,6491.14,6363.31,6437.10,483710000,6437.10
+1996-12-04,6442.69,6482.20,6339.46,6422.94,498240000,6422.94
+1996-12-03,6521.70,6577.23,6422.94,6442.69,516160000,6442.69
+1996-12-02,6521.70,6553.01,6439.34,6521.70,412520000,6521.70
+1996-11-29,6499.34,6551.15,6490.40,6521.70,151550000,6521.70
+1996-11-27,6528.41,6566.43,6457.97,6499.34,377780000,6499.34
+1996-11-26,6547.79,6606.30,6475.49,6528.41,527380000,6528.41
+1996-11-25,6471.76,6565.68,6443.44,6547.79,475260000,6547.79
+1996-11-22,6418.47,6498.22,6402.44,6471.76,525210000,6471.76
+1996-11-21,6430.02,6463.56,6370.02,6418.47,464430000,6418.47
+1996-11-20,6397.60,6482.20,6370.02,6430.02,497900000,6430.02
+1996-11-19,6346.91,6428.16,6323.06,6397.60,461980000,6397.60
+1996-11-18,6348.03,6407.66,6297.34,6346.91,388520000,6346.91
+1996-11-15,6313.00,6414.37,6277.22,6348.03,529100000,6348.03
+1996-11-14,6274.24,6350.64,6232.50,6313.00,480350000,6313.00
+1996-11-13,6266.04,6317.10,6206.78,6274.24,429840000,6274.24
+1996-11-12,6255.60,6314.49,6199.70,6266.04,472940000,6266.04
+1996-11-11,6219.82,6292.87,6198.58,6255.60,353960000,6255.60
+1996-11-08,6206.04,6247.40,6151.62,6219.82,402320000,6219.82
+1996-11-07,6177.71,6238.83,6130.38,6206.04,502530000,6206.04
+1996-11-06,6081.18,6200.44,6060.69,6177.71,509600000,6177.71
+1996-11-05,6041.68,6125.53,6029.01,6081.18,492860000,6081.18
+1996-11-04,6021.93,6083.05,5981.30,6041.68,398790000,6041.68
+1996-11-01,6029.38,6082.67,5975.34,6021.93,465510000,6021.93
+1996-10-31,5993.23,6063.67,5955.59,6029.38,488500000,6029.38
+1996-10-30,6007.02,6055.84,5956.71,5993.23,437770000,5993.23
+1996-10-29,5972.73,6054.72,5938.82,6007.02,443890000,6007.02
+1996-10-28,6007.02,6063.67,5952.61,5972.73,383630000,5972.73
+1996-10-25,5992.48,6047.64,5954.47,6007.02,367640000,6007.02
+1996-10-24,6036.46,6080.07,5953.72,5992.48,418970000,5992.48
+1996-10-23,6061.80,6081.93,5965.65,6036.46,442170000,6036.46
+1996-10-22,6090.87,6114.73,6015.59,6061.80,410790000,6061.80
+1996-10-21,6094.23,6162.80,6027.89,6090.87,414630000,6090.87
+1996-10-18,6059.20,6119.57,6011.49,6094.23,473020000,6094.23
+1996-10-17,6020.81,6101.31,5994.72,6059.20,478550000,6059.20
+1996-10-16,6004.78,6056.21,5943.66,6020.81,441410000,6020.81
+1996-10-15,6010.00,6077.83,5951.12,6004.78,458980000,6004.78
+1996-10-14,5969.38,6043.91,5952.61,6010.00,322000000,6010.00
+1996-10-11,5921.67,5999.56,5912.36,5969.38,396050000,5969.38
+1996-10-10,5930.62,5956.71,5876.58,5921.67,394950000,5921.67
+1996-10-09,5966.77,5985.03,5892.23,5930.62,408450000,5930.62
+1996-10-08,5979.81,6032.36,5930.24,5966.77,435070000,5966.77
+1996-10-07,5992.86,6025.28,5945.15,5979.81,380750000,5979.81
+1996-10-04,5932.85,6023.79,5917.20,5992.86,463940000,5992.86
+1996-10-03,5933.97,5972.36,5887.76,5932.85,386500000,5932.85
+1996-10-02,5904.90,5966.02,5888.88,5933.97,440130000,5933.97
+1996-10-01,5882.17,5942.17,5833.72,5904.90,421550000,5904.90
+1996-09-30,5845.18,5934.32,5845.18,5882.17,394260000,5882.17
+1996-09-27,5868.85,5903.99,5819.65,5872.92,414760000,5872.92
+1996-09-26,5877.36,5928.04,5828.90,5868.85,500870000,5868.85
+1996-09-25,5874.03,5928.77,5827.42,5877.36,451710000,5877.36
+1996-09-24,5894.74,5952.08,5831.86,5874.03,460150000,5874.03
+1996-09-23,5888.46,5913.24,5820.39,5894.74,297760000,5894.74
+1996-09-20,5867.74,5925.82,5840.74,5888.46,519420000,5888.46
+1996-09-19,5877.36,5908.80,5818.17,5867.74,398580000,5867.74
+1996-09-18,5888.83,5919.90,5838.15,5877.36,396600000,5877.36
+1996-09-17,5889.20,5929.51,5830.38,5888.83,449850000,5888.83
+1996-09-16,5838.52,5920.64,5823.72,5889.20,430080000,5889.20
+1996-09-13,5786.73,5871.44,5786.73,5838.52,488360000,5838.52
+1996-09-12,5754.92,5815.59,5739.76,5771.94,398820000,5771.94
+1996-09-11,5727.18,5777.49,5696.85,5754.92,376880000,5754.92
+1996-09-10,5733.84,5767.87,5681.68,5727.18,372960000,5727.18
+1996-09-09,5662.08,5756.40,5662.08,5733.84,311530000,5733.84
+1996-09-06,5606.96,5696.48,5585.51,5659.86,348710000,5659.86
+1996-09-05,5656.90,5669.47,5592.53,5606.96,361430000,5606.96
+1996-09-04,5648.39,5682.05,5608.81,5656.90,351290000,5656.90
+1996-09-03,5616.21,5667.99,5550.37,5648.39,345740000,5648.39
+1996-08-30,5647.65,5659.86,5571.45,5616.21,258380000,5616.21
+1996-08-29,5712.38,5716.82,5615.47,5647.65,321120000,5647.65
+1996-08-28,5711.27,5747.89,5678.72,5712.38,296440000,5712.38
+1996-08-27,5693.89,5735.32,5670.58,5711.27,310520000,5711.27
+1996-08-26,5722.74,5742.71,5665.41,5693.89,281430000,5693.89
+1996-08-23,5733.47,5761.58,5679.09,5722.74,308010000,5722.74
+1996-08-22,5689.82,5761.95,5662.45,5733.47,354950000,5733.47
+1996-08-21,5721.26,5734.95,5648.76,5689.82,348820000,5689.82
+1996-08-20,5699.44,5747.52,5670.21,5721.26,334960000,5721.26
+1996-08-19,5689.45,5728.66,5664.30,5699.44,294080000,5699.44
+1996-08-16,5665.78,5722.74,5646.54,5689.45,337650000,5689.45
+1996-08-15,5666.88,5701.66,5633.22,5665.78,323950000,5665.78
+1996-08-14,5647.28,5695.00,5614.36,5666.88,343470000,5666.88
+1996-08-13,5618.06,5713.86,5618.06,5647.28,362470000,5647.28
+1996-08-12,5681.31,5746.04,5625.83,5704.98,312170000,5704.98
+1996-08-09,5713.49,5747.15,5654.31,5681.31,327280000,5681.31
+1996-08-08,5718.67,5746.41,5661.34,5713.49,334570000,5713.49
+1996-08-07,5696.11,5754.55,5659.12,5718.67,394340000,5718.67
+1996-08-06,5674.28,5716.45,5630.26,5696.11,347290000,5696.11
+1996-08-05,5679.83,5719.04,5639.14,5674.28,307240000,5674.28
+1996-08-02,5601.41,5703.51,5601.41,5679.83,442080000,5679.83
+1996-08-01,5528.91,5628.79,5507.83,5594.75,439110000,5594.75
+1996-07-31,5481.93,5558.13,5460.48,5528.91,403560000,5528.91
+1996-07-30,5434.59,5503.73,5403.52,5481.93,341090000,5481.93
+1996-07-29,5473.06,5497.47,5414.61,5434.59,281560000,5434.59
+1996-07-26,5422.01,5503.02,5397.97,5473.06,349900000,5473.06
+1996-07-25,5355.80,5469.36,5355.80,5422.01,405390000,5422.01
+1996-07-24,5346.55,5402.04,5244.83,5354.69,463030000,5354.69
+1996-07-23,5390.94,5447.90,5313.63,5346.55,421900000,5346.55
+1996-07-22,5426.82,5446.05,5346.92,5390.94,327300000,5390.94
+1996-07-19,5464.18,5490.44,5393.53,5426.82,408070000,5426.82
+1996-07-18,5376.88,5500.43,5352.10,5464.18,474460000,5464.18
+1996-07-17,5358.76,5465.29,5325.10,5376.88,513830000,5376.88
+1996-07-16,5349.51,5438.66,5170.11,5358.76,68290000,5358.76
+1996-07-15,5510.56,5527.93,5326.98,5349.51,419020000,5349.51
+1996-07-12,5520.54,5562.65,5455.16,5510.56,397790000,5510.56
+1996-07-11,5600.33,5600.33,5447.77,5520.54,520470000,5520.54
+1996-07-10,5581.86,5628.03,5515.00,5603.65,421350000,5603.65
+1996-07-09,5550.83,5622.49,5540.12,5581.86,379200000,5581.86
+1996-07-08,5588.14,5622.12,5519.80,5550.83,367560000,5550.83
+1996-07-05,5657.58,5657.58,5570.77,5588.14,181470000,5588.14
+1996-07-03,5720.38,5749.93,5656.47,5703.02,336260000,5703.02
+1996-07-02,5729.98,5769.88,5668.29,5720.38,388000000,5720.38
+1996-07-01,5654.63,5749.19,5637.26,5729.98,345750000,5729.98
+1996-06-28,5677.53,5724.44,5625.81,5654.63,470460000,5654.63
+1996-06-27,5682.70,5715.21,5616.21,5677.53,405580000,5677.53
+1996-06-26,5719.27,5739.22,5652.04,5682.70,386520000,5682.70
+1996-06-25,5717.79,5760.27,5668.66,5719.27,391900000,5719.27
+1996-06-24,5705.23,5770.61,5688.61,5717.79,333840000,5717.79
+1996-06-21,5659.43,5722.22,5639.11,5705.23,520340000,5705.23
+1996-06-20,5648.35,5709.30,5606.97,5659.43,441060000,5659.43
+1996-06-19,5628.03,5693.78,5600.70,5648.35,383610000,5648.35
+1996-06-18,5652.78,5683.44,5607.71,5628.03,373290000,5628.03
+1996-06-17,5649.45,5689.72,5614.36,5652.78,298410000,5652.78
+1996-06-14,5657.95,5687.13,5609.93,5649.45,390630000,5649.45
+1996-06-13,5668.29,5714.84,5622.86,5657.95,397620000,5657.95
+1996-06-12,5668.66,5725.55,5637.63,5668.29,397190000,5668.29
+1996-06-11,5687.87,5747.71,5637.63,5668.66,405390000,5668.66
+1996-06-10,5697.11,5727.03,5643.54,5687.87,337480000,5687.87
+1996-06-07,5667.19,5708.93,5559.69,5697.11,445710000,5697.11
+1996-06-06,5697.48,5750.67,5639.48,5667.19,464800000,5667.19
+1996-06-05,5665.71,5718.53,5631.35,5697.48,380360000,5697.48
+1996-06-04,5624.71,5697.84,5616.58,5665.71,386040000,5665.71
+1996-06-03,5643.18,5662.75,5587.40,5624.71,318470000,5624.71
+1996-05-31,5693.41,5712.62,5614.36,5643.18,351750000,5643.18
+1996-05-30,5673.83,5734.41,5625.07,5693.41,381960000,5693.41
+1996-05-29,5709.67,5743.65,5632.46,5673.83,346730000,5673.83
+1996-05-28,5762.86,5798.69,5680.48,5709.67,341480000,5709.67
+1996-05-24,5762.12,5815.68,5722.59,5762.86,329150000,5762.86
+1996-05-23,5778.00,5833.04,5704.12,5762.12,431850000,5762.12
+1996-05-22,5736.26,5803.49,5687.87,5778.00,423670000,5778.00
+1996-05-21,5748.82,5794.63,5698.21,5736.26,409610000,5736.26
+1996-05-20,5687.50,5778.74,5657.58,5748.82,385000000,5748.82
+1996-05-17,5635.05,5729.61,5631.35,5687.50,429140000,5687.50
+1996-05-16,5625.44,5677.53,5577.42,5635.05,392070000,5635.05
+1996-05-15,5624.71,5691.57,5590.72,5625.44,447790000,5625.44
+1996-05-14,5582.60,5663.12,5566.71,5624.71,460440000,5624.71
+1996-05-13,5518.14,5601.80,5495.42,5582.60,394180000,5582.60
+1996-05-10,5478.03,5559.68,5478.03,5518.14,428370000,5518.14
+1996-05-09,5474.06,5534.76,5419.87,5475.14,404310000,5475.14
+1996-05-08,5420.95,5486.34,5327.74,5474.06,495460000,5474.06
+1996-05-07,5464.31,5486.34,5392.05,5420.95,410770000,5420.95
+1996-05-06,5478.03,5528.97,5397.83,5464.31,375820000,5464.31
+1996-05-03,5498.27,5555.71,5439.74,5478.03,434010000,5478.03
+1996-05-02,5575.22,5578.11,5455.27,5498.27,442960000,5498.27
+1996-05-01,5569.08,5619.29,5523.56,5575.22,404620000,5575.22
+1996-04-30,5573.41,5606.29,5522.83,5569.08,393390000,5569.08
+1996-04-29,5567.99,5611.71,5515.25,5573.41,344030000,5573.41
+1996-04-26,5566.91,5618.57,5517.78,5567.99,402530000,5567.99
+1996-04-25,5553.90,5601.23,5490.68,5566.91,461120000,5566.91
+1996-04-24,5588.59,5619.29,5512.36,5553.90,494220000,5553.90
+1996-04-23,5564.74,5621.82,5534.76,5588.59,452690000,5588.59
+1996-04-22,5535.48,5610.62,5516.33,5564.74,397460000,5564.74
+1996-04-19,5551.74,5593.64,5504.41,5535.48,435690000,5535.48
+1996-04-18,5549.93,5600.51,5493.93,5551.74,415150000,5551.74
+1996-04-17,5620.02,5653.25,5500.07,5549.93,465200000,5549.93
+1996-04-16,5592.92,5656.14,5554.99,5620.02,453310000,5620.02
+1996-04-15,5532.59,5614.60,5517.41,5592.92,346370000,5592.92
+1996-04-12,5487.07,5577.39,5445.16,5532.59,413270000,5532.59
+1996-04-11,5485.98,5540.17,5382.66,5487.07,519710000,5487.07
+1996-04-10,5560.41,5601.23,5452.02,5485.98,475150000,5485.98
+1996-04-09,5594.37,5644.58,5530.06,5560.41,426790000,5560.41
+1996-04-08,5624.71,5624.71,5518.14,5594.37,411810000,5594.37
+1996-04-04,5689.74,5737.07,5633.02,5682.88,383400000,5682.88
+1996-04-03,5671.68,5712.50,5619.29,5689.74,386620000,5689.74
+1996-04-02,5637.72,5706.72,5597.26,5671.68,406640000,5671.68
+1996-04-01,5587.14,5670.23,5562.57,5637.72,392120000,5637.72
+1996-03-29,5630.85,5682.88,5550.29,5587.14,413510000,5587.14
+1996-03-28,5626.88,5664.45,5564.74,5630.85,370750000,5630.85
+1996-03-27,5670.60,5703.47,5596.53,5626.88,406280000,5626.88
+1996-03-26,5643.86,5701.30,5595.81,5670.60,400090000,5670.60
+1996-03-25,5636.64,5712.14,5592.92,5643.86,336700000,5643.86
+1996-03-22,5626.88,5681.07,5589.67,5636.64,329390000,5636.64
+1996-03-21,5655.42,5696.25,5590.03,5626.88,367180000,5626.88
+1996-03-20,5669.51,5724.06,5590.39,5655.42,409780000,5655.42
+1996-03-19,5683.60,5755.86,5619.66,5669.51,438300000,5669.51
+1996-03-18,5584.97,5706.00,5573.41,5683.60,437100000,5683.60
+1996-03-15,5586.06,5628.69,5523.56,5584.97,529970000,5584.97
+1996-03-14,5568.72,5662.29,5536.56,5586.06,492630000,5586.06
+1996-03-13,5583.89,5626.52,5513.80,5568.72,413030000,5568.72
+1996-03-12,5581.00,5622.55,5464.67,5583.89,454980000,5583.89
+1996-03-11,5470.45,5605.20,5425.29,5581.00,449500000,5581.00
+1996-03-08,5612.79,5612.79,5395.30,5470.45,546550000,5470.45
+1996-03-07,5629.77,5667.34,5572.33,5641.69,425790000,5641.69
+1996-03-06,5642.42,5700.22,5585.70,5629.77,428220000,5629.77
+1996-03-05,5600.15,5655.78,5558.24,5642.42,445700000,5642.42
+1996-03-04,5536.56,5646.39,5511.99,5600.15,417270000,5600.15
+1996-03-01,5485.62,5573.41,5424.20,5536.56,471480000,5536.56
+1996-02-29,5506.21,5562.21,5440.46,5485.62,453170000,5485.62
+1996-02-28,5549.21,5625.07,5487.07,5506.21,447790000,5506.21
+1996-02-27,5565.10,5597.26,5478.76,5549.21,431340000,5549.21
+1996-02-26,5630.49,5647.83,5530.42,5565.10,399330000,5565.10
+1996-02-23,5608.46,5693.36,5546.32,5630.49,443130000,5630.49
+1996-02-22,5515.97,5638.44,5511.63,5608.46,494750000,5608.46
+1996-02-21,5458.53,5548.12,5440.82,5515.97,431220000,5515.97
+1996-02-20,5503.32,5515.97,5393.50,5458.53,395910000,5458.53
+1996-02-16,5551.37,5563.30,5470.45,5503.32,445570000,5503.32
+1996-02-15,5579.55,5623.27,5514.88,5551.37,415320000,5551.37
+1996-02-14,5601.23,5633.02,5534.39,5579.55,421790000,5579.55
+1996-02-13,5600.15,5644.94,5530.06,5601.23,441540000,5601.23
+1996-02-12,5541.62,5643.50,5531.14,5600.15,401490000,5600.15
+1996-02-09,5539.45,5603.76,5474.06,5541.62,477640000,5541.62
+1996-02-08,5492.12,5559.68,5441.55,5539.45,474970000,5539.45
+1996-02-07,5459.61,5520.30,5423.84,5492.12,462730000,5492.12
+1996-02-06,5407.59,5483.82,5371.82,5459.61,465940000,5459.61
+1996-02-05,5373.99,5433.96,5319.43,5407.59,377760000,5407.59
+1996-02-02,5405.06,5442.99,5338.94,5373.99,420020000,5373.99
+1996-02-01,5395.30,5438.29,5335.69,5405.06,461610000,5405.06
+1996-01-31,5381.21,5433.24,5314.38,5395.30,472210000,5395.30
+1996-01-30,5304.98,5409.75,5288.73,5381.21,464350000,5381.21
+1996-01-29,5271.75,5338.22,5246.82,5304.98,363330000,5304.98
+1996-01-26,5216.83,5293.78,5187.21,5271.75,385700000,5271.75
+1996-01-25,5242.84,5289.45,5173.84,5216.83,453270000,5216.83
+1996-01-24,5192.27,5297.04,5176.73,5242.84,476380000,5242.84
+1996-01-23,5219.36,5241.76,5141.33,5192.27,416910000,5192.27
+1996-01-22,5184.68,5254.77,5133.02,5219.36,398040000,5219.36
+1996-01-19,5124.35,5214.66,5087.49,5184.68,497720000,5184.68
+1996-01-18,5066.90,5166.98,5032.58,5124.35,450410000,5124.35
+1996-01-17,5088.22,5133.38,5028.61,5066.90,458720000,5066.90
+1996-01-16,5043.78,5116.04,5000.79,5088.22,425220000,5088.22
+1996-01-15,5061.12,5099.42,5012.71,5043.78,306180000,5043.78
+1996-01-12,5065.10,5114.23,5000.07,5061.12,383400000,5061.12
+1996-01-11,5032.94,5099.78,5002.96,5065.10,408800000,5065.10
+1996-01-10,5130.13,5151.69,5000.07,5032.94,496830000,5032.94
+1996-01-09,5197.70,5239.23,5100.86,5130.13,417400000,5130.13
+1996-01-08,5181.43,5207.08,5179.98,5197.70,130360000,5197.70
+1996-01-05,5173.84,5217.55,5107.00,5181.43,437110000,5181.43
+1996-01-04,5194.07,5259.46,5114.23,5173.84,512580000,5173.84
+1996-01-03,5177.45,5252.60,5143.13,5194.07,468950000,5194.07
+1996-01-02,5117.12,5208.16,5087.13,5177.45,364180000,5177.45
+1995-12-29,5095.80,5144.58,5063.65,5117.12,319680000,5117.12
+1995-12-28,5105.92,5132.65,5062.21,5095.80,288470000,5095.80
+1995-12-27,5110.26,5146.74,5077.74,5105.92,252270000,5105.92
+1995-12-26,5097.97,5149.27,5072.32,5110.26,217030000,5110.26
+1995-12-22,5096.53,5146.74,5064.01,5097.97,289600000,5097.97
+1995-12-21,5059.32,5135.91,5031.50,5096.53,415780000,5096.53
+1995-12-20,5109.89,5173.48,5047.39,5059.32,437650000,5059.32
+1995-12-19,5075.21,5146.02,5016.68,5109.89,18440000,5109.89
+1995-12-18,5159.39,5159.39,5042.70,5075.21,426230000,5075.21
+1995-12-15,5182.15,5217.55,5135.54,5176.73,636780000,5176.73
+1995-12-14,5216.47,5266.69,5148.55,5182.15,461960000,5182.15
+1995-12-13,5174.92,5246.10,5144.22,5216.47,414680000,5216.47
+1995-12-12,5184.32,5226.23,5132.29,5174.92,349410000,5174.92
+1995-12-11,5156.86,5225.50,5122.18,5184.32,342050000,5184.32
+1995-12-08,5159.39,5200.21,5115.31,5156.86,327500000,5156.86
+1995-12-07,5199.13,5211.05,5124.35,5159.39,379260000,5159.39
+1995-12-06,5177.45,5234.53,5147.47,5199.13,417750000,5199.13
+1995-12-05,5139.52,5216.83,5108.45,5177.45,434000000,5177.45
+1995-12-04,5087.13,5157.58,5057.87,5139.52,405080000,5139.52
+1995-12-01,5074.49,5133.02,5038.36,5087.13,392650000,5087.13
+1995-11-30,5105.56,5143.13,5033.17,5074.49,439470000,5074.49
+1995-11-29,5078.10,5126.51,5047.03,5105.56,398230000,5105.56
+1995-11-28,5070.88,5105.56,5006.21,5078.10,408860000,5078.10
+1995-11-27,5048.84,5114.23,5034.03,5070.88,356180000,5070.88
+1995-11-24,5041.61,5072.68,5028.61,5048.84,125870000,5048.84
+1995-11-22,5023.55,5096.17,4982.72,5041.61,404900000,5041.61
+1995-11-21,4983.09,5050.28,4948.04,5023.55,405860000,5023.55
+1995-11-20,4989.95,5030.77,4946.60,4983.09,333110000,4983.09
+1995-11-17,4969.36,5022.10,4934.31,4989.95,429990000,4989.95
+1995-11-16,4922.75,5003.68,4902.16,4969.36,418430000,4969.36
+1995-11-15,4871.81,4939.73,4835.69,4922.75,373090000,4922.75
+1995-11-14,4872.90,4923.11,4826.29,4871.81,353650000,4871.81
+1995-11-13,4870.37,4909.75,4821.23,4872.90,292390000,4872.90
+1995-11-10,4864.23,4896.02,4820.51,4870.37,297950000,4870.37
+1995-11-09,4852.67,4902.52,4811.84,4864.23,379500000,4864.23
+1995-11-08,4797.03,4877.59,4775.71,4852.67,359770000,4852.67
+1995-11-07,4814.01,4839.30,4770.66,4797.03,365720000,4797.03
+1995-11-06,4825.57,4862.78,4779.33,4814.01,309090000,4814.01
+1995-11-03,4808.59,4858.81,4774.63,4825.57,344360000,4825.57
+1995-11-02,4766.68,4833.16,4745.00,4808.59,396150000,4808.59
+1995-11-01,4755.48,4801.73,4719.72,4766.68,377930000,4766.68
+1995-10-31,4756.57,4821.96,4735.97,4755.48,377350000,4755.48
+1995-10-30,4741.75,4798.84,4716.46,4756.57,318840000,4756.57
+1995-10-27,4703.82,4766.68,4653.24,4741.75,378820000,4741.75
+1995-10-26,4753.68,4777.88,4655.05,4703.82,464190000,4703.82
+1995-10-25,4783.66,4824.49,4708.88,4753.68,433570000,4753.68
+1995-10-24,4755.48,4819.07,4730.92,4783.66,415400000,4783.66
+1995-10-23,4794.86,4805.70,4724.41,4755.48,329720000,4755.48
+1995-10-20,4802.45,4836.41,4758.37,4794.86,388140000,4794.86
+1995-10-19,4777.52,4830.27,4744.28,4802.45,406620000,4802.45
+1995-10-18,4795.95,4837.49,4747.53,4777.52,411270000,4777.52
+1995-10-17,4784.38,4831.35,4747.90,4795.95,352940000,4795.95
+1995-10-16,4793.78,4823.04,4751.51,4784.38,299520000,4784.38
+1995-10-13,4764.88,4845.08,4749.70,4793.78,373970000,4793.78
+1995-10-12,4735.25,4790.16,4709.24,4764.88,343930000,4764.88
+1995-10-11,4720.80,4773.91,4686.43,4735.25,343060000,4735.25
+1995-10-10,4726.22,4745.73,4638.43,4720.80,412670000,4720.80
+1995-10-09,4769.21,4781.13,4691.54,4726.22,275280000,4726.22
+1995-10-06,4762.71,4805.70,4731.64,4769.21,314170000,4769.21
+1995-10-05,4740.67,4794.86,4705.63,4762.71,367410000,4762.71
+1995-10-04,4749.70,4787.27,4689.01,4740.67,339350000,4740.67
+1995-10-03,4761.26,4791.61,4702.74,4749.70,385890000,4749.70
+1995-10-02,4789.08,4817.98,4732.72,4761.26,304990000,4761.26
+1995-09-29,4787.64,4834.96,4757.65,4789.08,337670000,4789.08
+1995-09-28,4762.35,4810.03,4731.64,4787.64,367610000,4787.64
+1995-09-27,4765.60,4790.16,4692.98,4762.35,410970000,4762.35
+1995-09-26,4769.93,4816.54,4738.86,4765.60,362550000,4765.60
+1995-09-25,4764.15,4804.62,4728.02,4769.93,273110000,4769.93
+1995-09-22,4767.40,4789.44,4706.35,4764.15,370750000,4764.15
+1995-09-21,4792.69,4820.15,4728.75,4767.40,367060000,4767.40
+1995-09-20,4767.04,4828.46,4746.45,4792.69,402530000,4792.69
+1995-09-19,4780.41,4798.11,4734.53,4767.04,371080000,4767.04
+1995-09-18,4797.57,4814.01,4729.47,4780.41,328630000,4780.41
+1995-09-15,4801.80,4839.48,4762.35,4797.57,459370000,4797.57
+1995-09-14,4765.52,4830.32,4731.36,4801.80,382860000,4801.80
+1995-09-13,4747.21,4801.09,4697.55,4765.52,381450000,4765.52
+1995-09-12,4704.94,4762.35,4689.45,4747.21,342580000,4747.21
+1995-09-11,4700.72,4744.04,4672.54,4704.94,296820000,4704.94
+1995-09-08,4669.72,4722.91,4648.59,4700.72,317260000,4700.72
+1995-09-07,4683.81,4710.58,4640.14,4669.72,321710000,4669.72
+1995-09-06,4670.08,4716.21,4648.95,4683.81,369510000,4683.81
+1995-09-05,4647.54,4697.90,4625.70,4670.08,332660000,4670.08
+1995-09-01,4610.56,4672.19,4594.71,4647.54,255710000,4647.54
+1995-08-31,4604.57,4634.51,4582.38,4610.56,300890000,4610.56
+1995-08-30,4608.44,4639.79,4582.38,4604.57,329780000,4604.57
+1995-08-29,4594.00,4625.35,4554.21,4608.44,311290000,4608.44
+1995-08-28,4601.40,4632.39,4566.53,4594.00,267860000,4594.00
+1995-08-25,4580.62,4629.93,4569.70,4601.40,255990000,4601.40
+1995-08-24,4584.85,4618.30,4552.80,4580.62,299200000,4580.62
+1995-08-23,4620.42,4636.27,4571.81,4584.85,291380000,4584.85
+1995-08-22,4614.78,4646.13,4580.62,4620.42,290350000,4620.42
+1995-08-21,4617.60,4676.42,4593.65,4614.78,303200000,4614.78
+1995-08-18,4630.63,4665.15,4597.88,4617.60,312030000,4617.60
+1995-08-17,4639.08,4659.16,4587.66,4630.63,354460000,4630.63
+1995-08-16,4640.84,4673.60,4593.30,4639.08,390070000,4639.08
+1995-08-15,4659.86,4672.89,4602.10,4640.84,330040000,4640.84
+1995-08-14,4618.30,4677.12,4601.75,4659.86,263750000,4659.86
+1995-08-11,4643.66,4659.51,4584.85,4618.30,267850000,4618.30
+1995-08-10,4671.49,4698.96,4621.47,4643.66,306660000,4643.66
+1995-08-09,4693.32,4712.34,4649.30,4671.49,303390000,4671.49
+1995-08-08,4693.32,4722.55,4654.23,4693.32,305150000,4693.32
+1995-08-07,4683.46,4727.84,4667.26,4693.32,276040000,4693.32
+1995-08-04,4701.42,4728.54,4660.57,4683.46,314730000,4683.46
+1995-08-03,4690.15,4720.44,4632.04,4701.42,353110000,4701.42
+1995-08-02,4700.37,4772.56,4667.96,4690.15,374310000,4690.15
+1995-08-01,4708.47,4742.98,4648.59,4700.37,334770000,4700.37
+1995-07-31,4715.51,4753.55,4671.13,4708.47,291950000,4708.47
+1995-07-28,4732.77,4762.70,4686.28,4715.51,311580000,4715.51
+1995-07-27,4707.06,4767.99,4691.56,4732.77,356570000,4732.77
+1995-07-26,4714.45,4750.73,4665.15,4707.06,393460000,4707.06
+1995-07-25,4668.67,4743.69,4651.76,4714.45,373210000,4714.45
+1995-07-24,4641.55,4701.42,4620.42,4668.67,315170000,4668.67
+1995-07-21,4641.55,4676.06,4596.82,4641.55,427770000,4641.55
+1995-07-20,4628.87,4684.52,4578.51,4641.55,383380000,4641.55
+1995-07-19,4686.28,4698.60,4530.26,4628.87,489850000,4628.87
+1995-07-18,4734.53,4734.53,4648.24,4686.28,372230000,4686.28
+1995-07-17,4708.82,4767.63,4681.35,4736.29,322540000,4736.29
+1995-07-14,4727.48,4736.99,4664.79,4708.82,312930000,4708.82
+1995-07-13,4727.29,4766.58,4676.06,4727.48,387470000,4727.48
+1995-07-12,4680.60,4747.00,4654.66,4727.29,416000000,4727.29
+1995-07-11,4702.39,4724.52,4647.74,4680.60,376770000,4680.60
+1995-07-10,4702.73,4747.69,4670.91,4702.39,409700000,4702.39
+1995-07-07,4664.00,4740.77,4628.38,4702.73,466540000,4702.73
+1995-07-06,4615.23,4681.98,4587.91,4664.00,420470000,4664.00
+1995-07-05,4585.15,4652.24,4561.63,4615.23,357810000,4615.23
+1995-07-03,4556.10,4594.83,4536.04,4585.15,117870000,4585.15
+1995-06-30,4550.56,4606.24,4513.90,4556.10,311320000,4556.10
+1995-06-29,4556.79,4592.76,4510.45,4550.56,313060000,4550.56
+1995-06-28,4542.61,4587.22,4512.87,4556.79,368060000,4556.79
+1995-06-27,4551.25,4592.41,4511.48,4542.61,346950000,4542.61
+1995-06-26,4585.84,4600.02,4536.38,4551.25,296720000,4551.25
+1995-06-23,4589.64,4609.70,4549.18,4585.84,321530000,4585.84
+1995-06-22,4547.10,4614.20,4535.35,4589.64,420950000,4589.64
+1995-06-21,4550.56,4583.07,4517.02,4547.10,398210000,4547.10
+1995-06-20,4553.68,4587.22,4497.99,4550.56,382290000,4550.56
+1995-06-19,4510.79,4577.19,4498.69,4553.68,322620000,4553.68
+1995-06-16,4496.27,4533.96,4482.43,4510.79,442740000,4510.79
+1995-06-15,4491.08,4527.74,4466.87,4496.27,334640000,4496.27
+1995-06-14,4484.51,4510.79,4449.23,4491.08,330750000,4491.08
+1995-06-13,4446.46,4504.91,4440.24,4484.51,339620000,4484.51
+1995-06-12,4423.99,4482.09,4415.69,4446.46,287830000,4446.46
+1995-06-09,4458.57,4466.87,4394.59,4423.99,328960000,4423.99
+1995-06-08,4462.03,4492.12,4431.59,4458.57,289880000,4458.57
+1995-06-07,4485.20,4497.65,4432.29,4462.03,327790000,4462.03
+1995-06-06,4476.55,4520.47,4446.46,4485.20,340470000,4485.20
+1995-06-05,4444.39,4510.45,4417.76,4476.55,337520000,4476.55
+1995-06-02,4472.75,4496.27,4406.35,4444.39,366000000,4444.39
+1995-06-01,4465.14,4499.72,4421.56,4472.75,345890000,4472.75
+1995-05-31,4378.68,4467.91,4360.70,4465.14,358160000,4465.14
+1995-05-30,4369.00,4412.92,4334.41,4378.68,283020000,4378.68
+1995-05-26,4412.23,4423.64,4338.91,4369.00,290730000,4369.00
+1995-05-25,4427.44,4451.31,4375.91,4412.23,341820000,4412.23
+1995-05-24,4436.44,4480.70,4390.78,4438.16,391750000,4438.16
+1995-05-23,4395.63,4451.65,4372.46,4436.44,362690000,4436.44
+1995-05-22,4341.33,4416.03,4337.87,4395.63,285600000,4395.63
+1995-05-19,4340.64,4368.65,4287.38,4341.33,354010000,4341.33
+1995-05-18,4422.60,4426.41,4330.95,4340.64,351850000,4340.64
+1995-05-17,4435.05,4452.69,4386.63,4422.60,347930000,4422.60
+1995-05-16,4437.47,4464.10,4408.08,4435.05,366180000,4435.05
+1995-05-15,4430.56,4468.94,4398.74,4437.47,316240000,4437.47
+1995-05-12,4411.19,4463.07,4371.07,4430.56,361000000,4430.56
+1995-05-11,4404.62,4446.12,4365.19,4411.19,339900000,4411.19
+1995-05-10,4390.78,4440.24,4347.55,4404.62,381990000,4404.62
+1995-05-09,4383.87,4421.22,4360.00,4390.78,361430000,4390.78
+1995-05-08,4343.40,4407.04,4316.43,4383.87,291810000,4383.87
+1995-05-05,4359.66,4389.75,4310.55,4343.40,342380000,4343.40
+1995-05-04,4373.15,4426.41,4329.92,4359.66,434920000,4359.66
+1995-05-03,4328.88,4392.51,4312.28,4373.15,392290000,4373.15
+1995-05-02,4316.08,4348.25,4288.42,4328.88,300660000,4328.88
+1995-05-01,4321.27,4352.74,4278.73,4316.08,296830000,4316.08
+1995-04-28,4314.70,4348.94,4270.78,4321.27,320270000,4321.27
+1995-04-27,4299.83,4335.10,4269.05,4314.70,350850000,4314.70
+1995-04-26,4300.17,4324.73,4267.32,4299.83,350790000,4299.83
+1995-04-25,4303.98,4337.18,4267.32,4300.17,351790000,4300.17
+1995-04-24,4270.09,4328.88,4239.65,4303.98,325760000,4303.98
+1995-04-21,4230.66,4296.37,4214.41,4270.09,403210000,4270.09
+1995-04-20,4207.49,4263.86,4186.39,4230.66,368440000,4230.66
+1995-04-19,4179.13,4232.39,4143.51,4207.49,377520000,4207.49
+1995-04-18,4195.38,4221.67,4152.15,4179.13,344680000,4179.13
+1995-04-17,4208.18,4260.06,4174.63,4195.38,333930000,4195.38
+1995-04-13,4197.81,4243.46,4173.94,4208.18,301510000,4208.18
+1995-04-12,4187.08,4221.67,4163.57,4197.81,327880000,4197.81
+1995-04-11,4198.15,4229.97,4168.06,4187.08,309710000,4187.08
+1995-04-10,4192.62,4219.94,4163.91,4198.15,260980000,4198.15
+1995-04-07,4205.41,4226.86,4154.23,4192.62,314750000,4192.62
+1995-04-06,4200.57,4239.31,4179.13,4205.41,320460000,4205.41
+1995-04-05,4201.61,4229.62,4166.33,4200.57,315170000,4200.57
+1995-04-04,4168.41,4220.98,4154.23,4201.61,330550000,4201.61
+1995-04-03,4157.69,4202.30,4129.68,4168.41,287380000,4168.41
+1995-03-31,4172.56,4194.00,4100.28,4157.69,352940000,4157.69
+1995-03-30,4160.80,4213.37,4128.29,4172.56,362020000,4172.56
+1995-03-29,4151.81,4213.71,4121.72,4160.80,385910000,4160.80
+1995-03-28,4157.34,4176.02,4120.68,4151.81,320360000,4151.81
+1995-03-27,4138.67,4177.40,4113.08,4157.34,296160000,4157.34
+1995-03-24,4087.83,4155.27,4087.14,4138.67,358370000,4138.67
+1995-03-23,4082.99,4107.89,4046.33,4087.83,318490000,4087.83
+1995-03-22,4072.61,4107.54,4039.07,4082.99,313120000,4082.99
+1995-03-21,4083.68,4122.41,4046.67,4072.61,367110000,4072.61
+1995-03-20,4073.65,4115.15,4051.17,4083.68,301720000,4083.68
+1995-03-17,4069.15,4101.66,4044.94,4073.65,415810000,4073.65
+1995-03-16,4038.37,4095.78,4021.77,4069.15,336330000,4069.15
+1995-03-15,4048.75,4070.19,4008.63,4038.37,309540000,4038.37
+1995-03-14,4025.23,4087.14,4014.86,4048.75,346140000,4048.75
+1995-03-13,4035.61,4060.85,3999.29,4025.23,275280000,4025.23
+1995-03-10,3983.39,4054.97,3978.20,4035.61,383000000,4035.61
+1995-03-09,3979.23,4011.40,3953.99,3983.39,319100000,3983.39
+1995-03-08,3962.63,4002.41,3944.65,3979.23,349700000,3979.23
+1995-03-07,3997.56,4009.67,3935.31,3962.63,355550000,3962.63
+1995-03-06,3989.61,4015.89,3944.31,3997.56,298850000,3997.56
+1995-03-03,3979.93,4004.83,3946.03,3989.61,330840000,3989.61
+1995-03-02,3994.80,4009.67,3947.07,3979.93,329430000,3979.93
+1995-03-01,4011.05,4033.19,3960.56,3994.80,362590000,3994.80
+1995-02-28,3988.57,4021.43,3967.48,4011.05,317120000,4011.05
+1995-02-27,4011.74,4033.19,3966.78,3988.57,285790000,3988.57
+1995-02-24,4003.33,4033.61,3974.06,4011.74,302850000,4011.74
+1995-02-23,3979.45,4034.62,3979.45,4003.33,394100000,4003.33
+1995-02-22,3963.97,4002.32,3944.46,3973.05,339140000,3973.05
+1995-02-21,3953.54,3989.88,3930.66,3963.97,308060000,3963.97
+1995-02-17,3987.52,4001.99,3937.05,3953.54,350560000,3953.54
+1995-02-16,3986.17,4011.07,3948.16,3987.52,360990000,3987.52
+1995-02-15,3958.25,4019.15,3937.73,3986.17,377940000,3986.17
+1995-02-14,3954.21,3984.83,3930.66,3958.25,300720000,3958.25
+1995-02-13,3939.07,3974.74,3920.57,3954.21,256210000,3954.21
+1995-02-10,3932.68,3962.96,3908.46,3939.07,295550000,3939.07
+1995-02-09,3935.37,3967.33,3904.76,3932.68,325570000,3932.68
+1995-02-08,3937.39,3967.67,3909.13,3935.37,317910000,3935.37
+1995-02-07,3937.73,3960.27,3907.45,3937.39,317110000,3937.39
+1995-02-06,3928.64,3964.31,3900.04,3937.73,325660000,3937.73
+1995-02-03,3876.16,3959.60,3876.16,3928.64,440950000,3928.64
+1995-02-02,3847.56,3884.23,3828.38,3870.77,322030000,3870.77
+1995-02-01,3843.86,3886.25,3809.21,3847.56,395300000,3847.56
+1995-01-31,3832.08,3872.12,3809.54,3843.86,411570000,3843.86
+1995-01-30,3857.99,3881.20,3794.40,3832.08,318530000,3832.08
+1995-01-27,3870.44,3914.18,3827.37,3857.99,339490000,3857.99
+1995-01-26,3871.45,3903.41,3839.15,3870.44,304650000,3870.44
+1995-01-25,3862.70,3908.79,3832.08,3871.45,342240000,3871.45
+1995-01-24,3867.41,3898.36,3840.16,3862.70,315410000,3862.70
+1995-01-23,3869.43,3885.58,3815.26,3867.41,325810000,3867.41
+1995-01-20,3882.21,3898.70,3826.70,3869.43,376870000,3869.43
+1995-01-19,3928.98,3929.99,3866.74,3882.21,297220000,3882.21
+1995-01-18,3930.66,3950.85,3889.95,3928.98,343100000,3928.98
+1995-01-17,3932.34,3953.88,3895.33,3930.66,330890000,3930.66
+1995-01-16,3908.46,3955.56,3889.95,3932.34,315800000,3932.34
+1995-01-13,3859.00,3924.27,3852.61,3908.46,336740000,3908.46
+1995-01-12,3862.03,3886.59,3831.41,3859.00,313040000,3859.00
+1995-01-11,3866.74,3899.71,3824.68,3862.03,346310000,3862.03
+1995-01-10,3861.35,3912.49,3844.87,3866.74,352440000,3866.74
+1995-01-09,3867.41,3889.28,3834.44,3861.35,278710000,3861.35
+1995-01-06,3850.92,3902.40,3823.67,3867.41,308070000,3867.41
+1995-01-05,3857.65,3876.83,3825.35,3850.92,309140000,3850.92
+1995-01-04,3838.48,3876.83,3815.26,3857.65,319510000,3857.65
+1995-01-03,3834.44,3864.72,3805.50,3838.48,262450000,3838.48
+1994-12-30,3833.43,3874.48,3812.91,3834.44,256260000,3834.44
+1994-12-29,3839.49,3867.41,3812.91,3833.43,250650000,3833.43
+1994-12-28,3861.69,3871.45,3816.94,3839.49,246260000,3839.49
+1994-12-27,3833.43,3882.21,3832.08,3861.69,211180000,3861.69
+1994-12-23,3814.92,3860.01,3808.53,3833.43,196540000,3833.43
+1994-12-22,3801.80,3850.59,3780.61,3814.92,339670000,3814.92
+1994-12-21,3767.15,3836.46,3761.77,3801.80,378790000,3801.80
+1994-12-20,3790.70,3807.19,3752.35,3767.15,325510000,3767.15
+1994-12-19,3807.19,3815.26,3764.46,3790.70,271850000,3790.70
+1994-12-16,3765.47,3817.95,3758.07,3807.19,481860000,3807.19
+1994-12-15,3746.29,3794.07,3729.13,3765.47,332790000,3765.47
+1994-12-14,3715.34,3772.20,3700.53,3746.29,355000000,3746.29
+1994-12-13,3718.37,3749.32,3690.78,3715.34,307110000,3715.34
+1994-12-12,3691.11,3734.52,3667.90,3718.37,285730000,3718.37
+1994-12-09,3685.73,3713.32,3638.97,3691.11,336440000,3691.11
+1994-12-08,3735.52,3757.39,3670.25,3685.73,362280000,3685.73
+1994-12-07,3745.95,3758.07,3700.87,3735.52,283490000,3735.52
+1994-12-06,3741.92,3762.10,3703.56,3745.95,298890000,3745.95
+1994-12-05,3745.62,3779.93,3715.67,3741.92,258480000,3741.92
+1994-12-02,3700.87,3755.04,3680.68,3745.62,284740000,3745.62
+1994-12-01,3739.23,3755.37,3680.68,3700.87,285920000,3700.87
+1994-11-30,3738.55,3783.30,3718.37,3739.23,300800000,3739.23
+1994-11-29,3739.56,3755.04,3703.90,3738.55,286580000,3738.55
+1994-11-28,3708.27,3759.41,3693.13,3739.56,265020000,3739.56
+1994-11-25,3675.97,3722.40,3675.97,3708.27,118290000,3708.27
+1994-11-23,3677.99,3704.91,3612.05,3674.63,430730000,3674.63
+1994-11-22,3769.51,3787.34,3669.58,3677.99,387270000,3677.99
+1994-11-21,3815.26,3845.20,3758.74,3769.51,293030000,3769.51
+1994-11-18,3828.05,3844.87,3773.21,3815.26,356730000,3815.26
+1994-11-17,3845.20,3868.08,3797.77,3828.05,323190000,3828.05
+1994-11-16,3826.36,3864.38,3803.82,3845.20,296980000,3845.20
+1994-11-15,3829.73,3871.45,3794.40,3826.36,336330000,3826.36
+1994-11-14,3801.47,3849.91,3795.07,3829.73,260380000,3829.73
+1994-11-11,3821.99,3830.06,3779.93,3801.47,220800000,3801.47
+1994-11-10,3831.75,3873.47,3821.99,3821.99,280910000,3821.99
+1994-11-09,3830.74,3882.89,3798.44,3831.75,341500000,3831.75
+1994-11-08,3808.87,3857.65,3798.75,3830.74,290860000,3830.74
+1994-11-07,3807.52,3830.40,3781.62,3808.87,255030000,3808.87
+1994-11-04,3845.88,3879.52,3802.81,3807.52,280560000,3807.52
+1994-11-03,3837.13,3872.46,3814.25,3845.88,284480000,3845.88
+1994-11-02,3863.37,3888.94,3820.31,3837.13,331360000,3837.13
+1994-11-01,3908.12,3919.90,3836.79,3863.37,314940000,3863.37
+1994-10-31,3930.66,3956.90,3889.28,3908.12,302810000,3908.12
+1994-10-28,3875.15,3953.54,3863.37,3930.66,381450000,3930.66
+1994-10-27,3848.23,3893.99,3834.44,3875.15,327790000,3875.15
+1994-10-26,3850.59,3891.97,3816.61,3848.23,322560000,3848.23
+1994-10-25,3855.30,3883.56,3803.49,3850.59,326100000,3850.59
+1994-10-24,3891.30,3925.61,3840.16,3855.30,282800000,3855.30
+1994-10-21,3911.15,3921.58,3861.35,3891.30,309410000,3891.30
+1994-10-20,3936.04,3954.89,3873.13,3911.15,326100000,3911.15
+1994-10-19,3917.54,3958.25,3887.93,3936.04,317030000,3936.04
+1994-10-18,3923.93,3945.46,3892.64,3917.54,259730000,3917.54
+1994-10-17,3910.47,3949.84,3883.22,3923.93,238490000,3923.93
+1994-10-14,3889.95,3927.97,3862.03,3910.47,251770000,3910.47
+1994-10-13,3878.18,3944.12,3878.18,3889.95,337900000,3889.95
+1994-10-12,3876.83,3903.07,3844.87,3875.15,269550000,3875.15
+1994-10-11,3828.96,3898.36,3828.96,3876.83,355540000,3876.83
+1994-10-10,3797.43,3843.19,3789.36,3821.32,213110000,3821.32
+1994-10-07,3775.56,3826.03,3754.37,3797.43,284230000,3797.43
+1994-10-06,3787.34,3810.89,3752.01,3775.56,272620000,3775.56
+1994-10-05,3801.13,3811.56,3736.20,3787.34,359670000,3787.34
+1994-10-04,3846.89,3873.47,3788.35,3801.13,325620000,3801.13
+1994-10-03,3843.19,3872.79,3809.21,3846.89,269130000,3846.89
+1994-09-30,3854.63,3891.30,3825.69,3843.19,292060000,3843.19
+1994-09-29,3878.18,3892.64,3834.78,3854.63,302280000,3854.63
+1994-09-28,3863.04,3904.76,3854.29,3878.18,330020000,3878.18
+1994-09-27,3849.24,3891.63,3828.72,3863.04,290330000,3863.04
+1994-09-26,3831.75,3869.43,3804.50,3849.24,272530000,3849.24
+1994-09-23,3837.13,3872.46,3806.51,3831.75,300060000,3831.75
+1994-09-22,3851.60,3882.55,3818.29,3837.13,305210000,3837.13
+1994-09-21,3869.09,3886.92,3806.85,3851.60,355330000,3851.60
+1994-09-20,3932.01,3932.01,3859.67,3869.09,326050000,3869.09
+1994-09-19,3933.35,3972.72,3909.80,3936.72,272920000,3936.72
+1994-09-16,3953.88,3955.22,3894.66,3933.35,410750000,3933.35
+1994-09-15,3895.33,3959.93,3883.90,3953.88,281890000,3953.88
+1994-09-14,3879.86,3918.55,3856.64,3895.33,297480000,3895.33
+1994-09-13,3860.34,3905.76,3854.29,3879.86,293370000,3879.86
+1994-09-12,3874.81,3897.02,3843.86,3860.34,244680000,3860.34
+1994-09-09,3902.06,3902.06,3844.20,3874.81,293330000,3874.81
+1994-09-08,3886.25,3926.96,3872.46,3908.46,295010000,3908.46
+1994-09-07,3898.70,3920.90,3860.68,3886.25,292110000,3886.25
+1994-09-06,3885.58,3918.55,3860.01,3898.70,199670000,3898.70
+1994-09-02,3901.44,3928.64,3871.98,3885.58,216150000,3885.58
+1994-09-01,3913.42,3927.99,3871.66,3901.44,285670000,3901.44
+1994-08-31,3917.30,3954.54,3878.78,3913.42,354650000,3913.42
+1994-08-30,3898.85,3934.14,3875.87,3917.30,294520000,3917.30
+1994-08-29,3881.05,3927.34,3869.39,3898.85,266080000,3898.85
+1994-08-26,3836.69,3903.38,3836.69,3881.05,305120000,3881.05
+1994-08-25,3846.73,3872.63,3810.47,3829.89,284200000,3829.89
+1994-08-24,3775.83,3852.56,3767.41,3846.73,309780000,3846.73
+1994-08-23,3751.22,3804.64,3745.07,3775.83,307240000,3775.83
+1994-08-22,3755.11,3771.94,3722.41,3751.22,235870000,3751.22
+1994-08-19,3755.43,3785.22,3727.59,3755.11,276630000,3755.11
+1994-08-18,3776.48,3793.63,3736.98,3755.43,287330000,3755.43
+1994-08-17,3784.57,3812.09,3754.46,3776.48,309250000,3776.48
+1994-08-16,3760.29,3804.64,3732.45,3784.57,306640000,3784.57
+1994-08-15,3768.71,3798.17,3742.16,3760.29,223210000,3760.29
+1994-08-12,3750.90,3792.66,3738.27,3768.71,249270000,3768.71
+1994-08-11,3766.76,3785.86,3728.56,3750.90,275690000,3750.90
+1994-08-10,3755.76,3793.97,3738.27,3766.76,279470000,3766.76
+1994-08-09,3753.81,3773.89,3728.56,3755.76,259130000,3755.76
+1994-08-08,3747.02,3780.68,3732.77,3753.81,217670000,3753.81
+1994-08-05,3765.79,3769.68,3725.00,3747.02,230270000,3747.02
+1994-08-04,3792.66,3807.23,3752.52,3765.79,289150000,3765.79
+1994-08-03,3796.22,3815.00,3762.88,3792.66,283840000,3792.66
+1994-08-02,3798.17,3829.25,3776.48,3796.22,294740000,3796.22
+1994-08-01,3764.50,3809.50,3749.28,3798.17,258180000,3798.17
+1994-07-29,3730.83,3782.63,3726.30,3764.50,269560000,3764.50
+1994-07-28,3720.47,3757.05,3701.69,3730.83,247560000,3730.83
+1994-07-27,3735.68,3753.17,3693.27,3720.47,251680000,3720.47
+1994-07-26,3741.84,3764.50,3706.22,3735.68,232670000,3735.68
+1994-07-25,3735.04,3762.56,3713.67,3741.84,213470000,3741.84
+1994-07-22,3732.45,3765.15,3707.19,3735.04,261090000,3735.04
+1994-07-21,3727.27,3763.20,3684.86,3732.45,292080000,3732.45
+1994-07-20,3748.31,3763.85,3706.22,3727.27,267740000,3727.27
+1994-07-19,3755.43,3777.45,3726.30,3748.31,251530000,3748.31
+1994-07-18,3753.81,3779.39,3725.00,3755.43,227480000,3755.43
+1994-07-15,3739.25,3769.35,3712.37,3753.81,275860000,3753.81
+1994-07-14,3704.28,3763.53,3697.48,3739.25,319950000,3739.25
+1994-07-13,3702.66,3738.27,3683.89,3704.28,265840000,3704.28
+1994-07-12,3702.99,3725.32,3660.90,3702.66,252250000,3702.66
+1994-07-11,3709.14,3735.36,3671.26,3702.99,222580000,3702.99
+1994-07-08,3688.42,3728.56,3660.90,3709.14,236520000,3709.14
+1994-07-07,3674.50,3714.32,3656.04,3688.42,258500000,3688.42
+1994-07-06,3652.48,3698.13,3631.11,3674.50,233640000,3674.50
+1994-07-05,3646.65,3680.65,3621.73,3652.48,193030000,3652.48
+1994-07-01,3624.96,3675.79,3611.04,3646.65,199030000,3646.65
+1994-06-30,3667.05,3683.56,3610.72,3624.96,294110000,3624.96
+1994-06-29,3669.64,3711.73,3645.68,3667.05,263890000,3667.05
+1994-06-28,3685.50,3705.58,3630.47,3669.64,265880000,3669.64
+1994-06-27,3636.94,3694.89,3603.92,3685.50,250110000,3685.50
+1994-06-24,3699.09,3704.80,3616.65,3636.94,261260000,3636.94
+1994-06-23,3724.77,3752.04,3685.14,3699.09,256480000,3699.09
+1994-06-22,3707.97,3748.87,3694.65,3724.77,251110000,3724.77
+1994-06-21,3741.90,3756.80,3674.68,3707.97,298730000,3707.97
+1994-06-20,3771.07,3771.07,3716.21,3741.90,229520000,3741.90
+1994-06-17,3811.34,3821.48,3764.09,3776.78,373400000,3776.78
+1994-06-16,3790.41,3830.68,3771.39,3811.34,254880000,3811.34
+1994-06-15,3814.83,3838.29,3772.02,3790.41,269740000,3790.41
+1994-06-14,3783.12,3839.88,3769.17,3814.83,288550000,3814.83
+1994-06-13,3773.45,3808.17,3741.26,3783.12,242810000,3783.12
+1994-06-10,3753.14,3798.68,3739.60,3773.45,222480000,3773.45
+1994-06-09,3749.45,3776.83,3721.45,3753.14,252870000,3753.14
+1994-06-08,3755.91,3780.83,3721.45,3749.45,256000000,3749.45
+1994-06-07,3768.52,3788.52,3733.14,3755.91,234680000,3755.91
+1994-06-06,3772.22,3812.83,3749.75,3768.52,259080000,3768.52
+1994-06-03,3758.99,3792.22,3732.52,3772.22,271490000,3772.22
+1994-06-02,3760.83,3791.60,3732.83,3758.99,271150000,3758.99
+1994-06-01,3758.37,3785.14,3717.76,3760.83,279910000,3760.83
+1994-05-31,3757.14,3783.29,3725.45,3758.37,216700000,3758.37
+1994-05-27,3753.46,3772.18,3723.68,3757.14,186430000,3757.14
+1994-05-26,3755.30,3785.07,3722.76,3753.46,255740000,3753.46
+1994-05-25,3745.17,3768.19,3710.79,3755.30,254410000,3755.30
+1994-05-24,3742.41,3786.30,3707.11,3745.17,280040000,3745.17
+1994-05-23,3766.35,3770.65,3711.40,3742.41,249390000,3742.41
+1994-05-20,3758.98,3788.76,3721.84,3766.35,295180000,3766.35
+1994-05-19,3732.89,3782.92,3707.72,3758.98,303680000,3758.98
+1994-05-18,3720.61,3761.74,3683.16,3732.89,339280000,3732.89
+1994-05-17,3671.50,3735.04,3653.70,3720.61,311280000,3720.61
+1994-05-16,3659.68,3694.21,3628.52,3671.50,234680000,3671.50
+1994-05-13,3652.84,3690.32,3626.37,3659.68,252070000,3659.68
+1994-05-12,3629.04,3682.58,3624.58,3652.84,272770000,3652.84
+1994-05-11,3656.41,3678.42,3609.71,3629.04,277400000,3629.04
+1994-05-10,3629.04,3684.67,3627.56,3656.41,297660000,3656.41
+1994-05-09,3669.50,3676.93,3612.39,3629.04,250870000,3629.04
+1994-05-06,3695.97,3702.51,3625.77,3669.50,291910000,3669.50
+1994-05-05,3697.75,3731.07,3675.45,3695.97,255690000,3695.97
+1994-05-04,3714.41,3730.17,3670.09,3697.75,267940000,3697.75
+1994-05-03,3701.02,3736.12,3669.79,3714.41,288270000,3714.41
+1994-05-02,3681.69,3734.04,3648.97,3701.02,296130000,3701.02
+1994-04-29,3668.31,3707.87,3642.13,3681.69,293970000,3681.69
+1994-04-28,3699.54,3723.93,3640.35,3668.31,325200000,3668.31
+1994-04-26,3705.78,3733.15,3669.79,3699.54,288110000,3699.54
+1994-04-25,3648.68,3721.25,3635.29,3705.78,262220000,3705.78
+1994-04-22,3652.54,3690.32,3621.01,3648.68,295710000,3648.68
+1994-04-21,3598.71,3673.96,3582.94,3652.54,378760000,3652.54
+1994-04-20,3619.82,3662.66,3546.65,3598.71,366540000,3598.71
+1994-04-19,3620.42,3670.39,3567.18,3619.82,323280000,3619.82
+1994-04-18,3661.47,3679.61,3593.35,3620.42,271450000,3620.42
+1994-04-15,3663.25,3699.24,3631.13,3661.47,309550000,3661.47
+1994-04-14,3661.47,3693.59,3625.77,3663.25,275130000,3663.25
+1994-04-13,3681.69,3704.30,3616.85,3661.47,278030000,3661.47
+1994-04-12,3688.83,3722.14,3661.17,3681.69,256250000,3681.69
+1994-04-11,3674.26,3720.66,3651.35,3688.83,243180000,3688.83
+1994-04-08,3693.26,3717.15,3644.03,3674.26,264090000,3674.26
+1994-04-07,3679.73,3712.83,3642.59,3693.26,289280000,3693.26
+1994-04-06,3675.41,3722.34,3643.16,3679.73,302000000,3679.73
+1994-04-05,3625.02,3698.15,3625.02,3675.41,366890000,3675.41
+1994-04-04,3633.08,3633.08,3520.80,3593.35,344390000,3593.35
+1994-03-31,3626.75,3673.10,3544.12,3635.96,403580000,3635.96
+1994-03-30,3699.02,3718.88,3612.36,3626.75,390520000,3626.75
+1994-03-29,3762.35,3771.86,3689.23,3699.02,301630000,3699.02
+1994-03-28,3774.73,3793.45,3719.74,3762.35,287360000,3762.35
+1994-03-25,3821.09,3845.85,3764.66,3774.73,249670000,3774.73
+1994-03-24,3865.42,3865.42,3792.58,3821.09,303800000,3821.09
+1994-03-23,3862.55,3901.41,3839.80,3869.46,284600000,3869.46
+1994-03-22,3864.85,3896.23,3840.66,3862.55,283090000,3862.55
+1994-03-21,3895.65,3898.25,3838.65,3864.85,247390000,3864.85
+1994-03-18,3865.14,3911.78,3838.65,3895.65,462240000,3895.65
+1994-03-17,3848.15,3891.34,3821.66,3865.14,303950000,3865.14
+1994-03-16,3849.59,3879.53,3819.94,3848.15,306820000,3848.15
+1994-03-15,3862.98,3888.46,3826.85,3849.59,329260000,3849.59
+1994-03-14,3862.70,3894.21,3835.96,3862.98,260160000,3862.98
+1994-03-11,3830.62,3872.83,3806.69,3862.70,303250000,3862.70
+1994-03-10,3853.41,3865.51,3801.63,3830.62,369370000,3830.62
+1994-03-09,3851.72,3874.52,3817.95,3853.41,309810000,3853.41
+1994-03-08,3856.22,3881.55,3822.45,3851.72,298110000,3851.72
+1994-03-07,3832.30,3882.40,3824.71,3856.22,285580000,3856.22
+1994-03-04,3824.42,3868.04,3800.50,3832.30,311850000,3832.30
+1994-03-03,3831.74,3862.13,3784.74,3824.42,291960000,3824.42
+1994-03-02,3809.23,3845.25,3741.69,3831.74,361130000,3831.74
+1994-03-01,3832.02,3848.34,3772.93,3809.23,304450000,3809.23
+1994-02-28,3838.78,3874.52,3817.95,3832.02,267610000,3832.02
+1994-02-25,3839.90,3868.89,3811.76,3838.78,273680000,3838.78
+1994-02-24,3891.68,3895.62,3823.86,3839.90,342940000,3839.90
+1994-02-23,3911.66,3931.36,3872.83,3891.68,309910000,3891.68
+1994-02-22,3887.46,3928.83,3873.39,3911.66,270900000,3911.66
+1994-02-18,3922.64,3931.92,3869.73,3887.46,293210000,3887.46
+1994-02-17,3937.27,3975.82,3894.21,3922.64,340030000,3922.64
+1994-02-16,3928.27,3964.85,3906.32,3937.27,295450000,3937.27
+1994-02-15,3904.06,3950.50,3891.40,3928.27,306790000,3928.27
+1994-02-14,3894.78,3935.86,3873.67,3904.06,263190000,3904.06
+1994-02-11,3895.34,3920.95,3855.94,3894.78,213740000,3894.78
+1994-02-10,3931.92,3953.59,3882.96,3895.34,327250000,3895.34
+1994-02-09,3906.03,3956.97,3887.74,3931.92,332670000,3931.92
+1994-02-08,3906.32,3951.34,3873.67,3906.03,318180000,3906.03
+1994-02-07,3871.42,3923.48,3840.75,3906.32,348270000,3906.32
+1994-02-04,3967.66,3979.76,3857.63,3871.42,378380000,3871.42
+1994-02-03,3975.54,3995.52,3932.77,3967.66,318350000,3967.66
+1994-02-02,3964.01,3997.78,3937.27,3975.54,328960000,3975.54
+1994-02-01,3978.36,3998.06,3938.12,3964.01,322510000,3964.01
+1994-01-31,3945.43,4002.84,3937.27,3978.36,322870000,3978.36
+1994-01-28,3926.30,3971.89,3919.54,3945.43,313140000,3945.43
+1994-01-27,3908.00,3951.34,3876.77,3926.30,346500000,3926.30
+1994-01-26,3895.34,3934.74,3863.82,3908.00,304660000,3908.00
+1994-01-25,3912.79,3937.55,3863.82,3895.34,326120000,3895.34
+1994-01-24,3914.48,3947.68,3882.11,3912.79,296900000,3912.79
+1994-01-21,3891.96,3933.33,3875.36,3914.48,346220000,3914.48
+1994-01-20,3884.37,3915.60,3857.91,3891.96,310450000,3891.96
+1994-01-19,3870.29,3909.97,3839.34,3884.37,311370000,3884.37
+1994-01-18,3870.29,3905.19,3840.75,3870.29,309730000,3870.29
+1994-01-17,3867.20,3896.75,3833.71,3870.29,233980000,3870.29
+1994-01-14,3842.43,3891.96,3830.62,3867.20,304910000,3867.20
+1994-01-13,3848.63,3864.67,3808.38,3842.43,277970000,3842.43
+1994-01-12,3850.31,3876.49,3809.79,3848.63,310690000,3848.63
+1994-01-11,3865.51,3885.21,3823.02,3850.31,305490000,3850.31
+1994-01-10,3820.77,3874.52,3804.72,3865.51,319490000,3865.51
+1994-01-07,3803.88,3842.15,3778.83,3820.77,324920000,3820.77
+1994-01-06,3798.82,3843.84,3771.52,3803.88,367880000,3803.88
+1994-01-05,3783.90,3821.33,3750.41,3798.82,400030000,3798.82
+1994-01-04,3756.60,3798.25,3718.89,3783.90,326600000,3783.90
+1994-01-03,3754.09,3790.70,3715.24,3756.60,270140000,3756.60
+1993-12-31,3775.88,3804.11,3745.15,3754.09,168590000,3754.09
+1993-12-30,3794.33,3806.34,3759.96,3775.88,195860000,3775.88
+1993-12-29,3793.77,3818.92,3764.43,3794.33,269570000,3794.33
+1993-12-28,3792.93,3813.33,3766.10,3793.77,200960000,3793.77
+1993-12-27,3757.72,3804.95,3750.46,3792.93,171200000,3792.93
+1993-12-23,3762.19,3791.81,3739.56,3757.72,227240000,3757.72
+1993-12-22,3745.15,3780.64,3725.86,3762.19,272440000,3762.19
+1993-12-21,3755.21,3774.77,3719.72,3745.15,273370000,3745.15
+1993-12-20,3751.57,3777.84,3728.66,3755.21,255900000,3755.21
+1993-12-17,3726.14,3768.90,3706.30,3751.57,363750000,3751.57
+1993-12-16,3716.92,3756.60,3694.29,3726.14,284620000,3726.14
+1993-12-15,3742.63,3776.44,3689.82,3716.92,331770000,3716.92
+1993-12-14,3764.43,3785.94,3726.70,3742.63,275050000,3742.63
+1993-12-13,3740.67,3780.64,3711.33,3764.43,256580000,3764.43
+1993-12-10,3729.78,3758.84,3704.91,3740.67,245620000,3740.67
+1993-12-09,3734.53,3764.43,3709.94,3729.78,287570000,3729.78
+1993-12-08,3718.88,3756.60,3693.73,3734.53,314460000,3734.53
+1993-12-07,3710.21,3746.82,3689.26,3718.88,285690000,3718.88
+1993-12-06,3704.07,3738.44,3687.30,3710.21,292370000,3710.21
+1993-12-03,3702.11,3726.98,3677.80,3704.07,268780000,3704.07
+1993-12-02,3697.08,3725.30,3674.17,3702.11,256370000,3702.11
+1993-12-01,3683.95,3731.73,3673.33,3697.08,293870000,3697.08
+1993-11-30,3677.80,3713.57,3654.88,3683.95,290250000,3683.95
+1993-11-29,3683.95,3721.67,3654.33,3677.80,272710000,3677.80
+1993-11-26,3687.58,3703.23,3660.75,3683.95,90220000,3683.95
+1993-11-24,3674.17,3709.94,3654.33,3687.58,230630000,3687.58
+1993-11-23,3670.25,3702.67,3649.57,3674.17,261590000,3674.17
+1993-11-22,3694.01,3697.92,3627.78,3670.25,280130000,3670.25
+1993-11-19,3685.34,3711.05,3640.07,3694.01,302970000,3694.01
+1993-11-18,3704.35,3721.95,3649.57,3685.34,313480000,3685.34
+1993-11-17,3710.77,3749.90,3660.19,3704.35,319560000,3704.35
+1993-11-16,3677.52,3723.91,3653.77,3710.77,303980000,3710.77
+1993-11-15,3684.51,3705.74,3653.49,3677.52,251030000,3677.52
+1993-11-12,3662.43,3707.42,3648.74,3684.51,326240000,3684.51
+1993-11-11,3663.55,3700.43,3638.40,3662.43,287110000,3662.43
+1993-11-10,3640.07,3683.39,3616.60,3663.55,283450000,3663.55
+1993-11-09,3647.90,3689.82,3623.03,3640.07,278290000,3640.07
+1993-11-08,3643.43,3674.17,3621.91,3647.90,232340000,3647.90
+1993-11-05,3624.98,3663.83,3585.86,3643.43,336900000,3643.43
+1993-11-04,3661.87,3681.99,3609.61,3624.98,323430000,3624.98
+1993-11-03,3697.64,3714.69,3638.40,3661.87,342110000,3661.87
+1993-11-02,3692.61,3724.75,3656.00,3697.64,304780000,3697.64
+1993-11-01,3680.59,3708.26,3656.84,3692.61,256030000,3692.61
+1993-10-29,3687.86,3712.45,3656.84,3680.59,270570000,3680.59
+1993-10-28,3664.66,3713.57,3657.96,3687.86,301220000,3687.86
+1993-10-27,3672.49,3692.33,3634.76,3664.66,279830000,3664.66
+1993-10-26,3673.61,3701.55,3636.16,3672.49,284530000,3672.49
+1993-10-25,3649.30,3694.01,3618.28,3673.61,260310000,3673.61
+1993-10-22,3636.16,3697.92,3612.13,3649.30,301440000,3649.30
+1993-10-21,3645.10,3678.36,3610.45,3636.16,288820000,3636.16
+1993-10-20,3635.32,3667.74,3611.85,3645.10,305670000,3645.10
+1993-10-19,3642.31,3669.97,3601.79,3635.32,304400000,3635.32
+1993-10-18,3629.73,3675.84,3595.92,3642.31,329570000,3642.31
+1993-10-15,3621.63,3664.66,3596.20,3629.73,366110000,3629.73
+1993-10-14,3603.19,3652.09,3574.40,3621.63,353820000,3621.63
+1993-10-13,3593.13,3628.34,3574.12,3603.19,290930000,3603.19
+1993-10-12,3593.41,3619.39,3575.24,3593.13,263970000,3593.13
+1993-10-11,3584.74,3611.01,3565.46,3593.41,183190000,3593.41
+1993-10-08,3583.63,3610.45,3550.37,3584.74,243590000,3584.74
+1993-10-07,3598.99,3616.32,3564.90,3583.63,255210000,3583.63
+1993-10-06,3587.26,3620.79,3570.21,3598.99,277070000,3598.99
+1993-10-05,3577.76,3616.88,3553.72,3587.26,294570000,3587.26
+1993-10-04,3581.11,3603.19,3550.65,3577.76,229380000,3577.76
+1993-10-01,3555.12,3605.14,3541.71,3581.11,256870000,3581.11
+1993-09-30,3566.30,3583.63,3528.57,3555.12,282740000,3555.12
+1993-09-29,3566.02,3596.48,3538.91,3566.30,277690000,3566.30
+1993-09-28,3567.70,3589.49,3542.27,3566.02,243320000,3566.02
+1993-09-27,3543.11,3589.49,3539.47,3567.70,244920000,3567.70
+1993-09-24,3539.75,3568.54,3507.90,3543.11,248270000,3543.11
+1993-09-23,3547.02,3567.70,3513.48,3539.75,276660000,3539.75
+1993-09-22,3537.24,3577.20,3516.56,3547.02,288960000,3547.02
+1993-09-21,3575.80,3592.57,3501.47,3537.24,301740000,3537.24
+1993-09-20,3613.25,3632.81,3567.98,3575.80,228040000,3575.80
+1993-09-17,3630.85,3637.28,3580.83,3613.25,369600000,3613.25
+1993-09-16,3633.65,3651.25,3601.79,3630.85,229700000,3630.85
+1993-09-15,3615.76,3644.82,3573.84,3633.65,294410000,3633.65
+1993-09-14,3634.21,3639.51,3590.61,3615.76,258620000,3615.76
+1993-09-13,3621.63,3655.16,3607.66,3634.21,244970000,3634.21
+1993-09-10,3589.49,3636.16,3576.64,3621.63,269950000,3621.63
+1993-09-09,3588.93,3616.04,3556.52,3589.49,258070000,3589.49
+1993-09-08,3607.10,3623.31,3561.27,3588.93,283100000,3588.93
+1993-09-07,3633.93,3649.02,3592.57,3607.10,229500000,3607.10
+1993-09-03,3626.10,3651.53,3603.75,3633.93,197160000,3633.93
+1993-09-02,3645.10,3660.19,3610.17,3626.10,259870000,3626.10
+1993-09-01,3651.25,3665.50,3619.67,3645.10,245040000,3645.10
+1993-08-31,3643.99,3662.99,3619.67,3651.25,252830000,3651.25
+1993-08-30,3640.63,3667.46,3621.63,3643.99,194180000,3643.99
+1993-08-27,3648.18,3656.28,3606.54,3640.63,196140000,3640.63
+1993-08-26,3652.09,3681.71,3620.23,3648.18,247800000,3648.18
+1993-08-25,3638.96,3674.17,3620.51,3652.09,301640000,3652.09
+1993-08-24,3605.98,3648.18,3590.89,3638.96,270700000,3638.96
+1993-08-23,3615.48,3630.57,3578.87,3605.98,212500000,3605.98
+1993-08-20,3612.13,3633.37,3580.55,3615.48,276800000,3615.48
+1993-08-19,3604.86,3632.25,3581.11,3612.13,293330000,3612.13
+1993-08-18,3586.98,3638.96,3577.48,3604.86,312940000,3604.86
+1993-08-17,3579.15,3611.29,3554.00,3586.98,261320000,3586.98
+1993-08-16,3569.65,3606.54,3547.86,3579.15,229190000,3579.15
+1993-08-13,3569.09,3594.52,3547.58,3569.65,214370000,3569.65
+1993-08-12,3583.35,3607.66,3537.24,3569.09,278530000,3569.09
+1993-08-11,3572.73,3607.94,3550.93,3583.35,268330000,3583.35
+1993-08-10,3576.08,3599.83,3547.02,3572.73,255520000,3572.73
+1993-08-09,3560.43,3599.83,3541.15,3576.08,232750000,3576.08
+1993-08-06,3548.97,3583.35,3536.12,3560.43,221150000,3560.43
+1993-08-05,3552.05,3574.12,3523.54,3548.97,249650000,3548.97
+1993-08-04,3561.27,3579.99,3530.25,3552.05,230040000,3552.05
+1993-08-03,3560.99,3588.10,3530.81,3561.27,254540000,3561.27
+1993-08-02,3539.47,3578.32,3524.94,3560.99,230380000,3560.99
+1993-07-30,3567.42,3581.11,3515.72,3539.47,254420000,3539.47
+1993-07-29,3553.45,3593.41,3531.37,3567.42,261240000,3567.42
+1993-07-28,3565.46,3588.38,3524.38,3553.45,270530000,3553.45
+1993-07-27,3567.70,3604.86,3533.60,3565.46,256750000,3565.46
+1993-07-26,3546.74,3584.74,3541.43,3567.70,223280000,3567.70
+1993-07-23,3525.22,3569.37,3508.17,3546.74,222170000,3546.74
+1993-07-22,3555.40,3566.86,3514.32,3525.22,249630000,3525.22
+1993-07-21,3544.78,3573.84,3516.84,3555.40,278590000,3555.40
+1993-07-20,3535.28,3567.98,3500.63,3544.78,275130000,3544.78
+1993-07-19,3528.29,3563.23,3502.87,3535.28,216370000,3535.28
+1993-07-16,3550.93,3571.61,3505.94,3528.29,263100000,3528.29
+1993-07-15,3542.55,3573.01,3509.85,3550.93,277810000,3550.93
+1993-07-14,3515.44,3562.39,3507.34,3542.55,285890000,3542.55
+1993-07-13,3524.38,3544.22,3491.13,3515.44,236720000,3515.44
+1993-07-12,3521.06,3545.97,3495.04,3524.38,202310000,3524.38
+1993-07-09,3514.42,3544.03,3490.89,3521.06,235210000,3521.06
+1993-07-08,3475.67,3532.41,3462.38,3514.42,282910000,3514.42
+1993-07-07,3449.93,3495.32,3443.28,3475.67,253170000,3475.67
+1993-07-06,3483.97,3502.52,3443.28,3449.93,233420000,3449.93
+1993-07-02,3510.54,3511.65,3468.47,3483.97,220750000,3483.97
+1993-07-01,3516.08,3542.10,3487.29,3510.54,292040000,3510.54
+1993-06-30,3518.85,3543.48,3493.11,3516.08,281120000,3516.08
+1993-06-29,3530.20,3544.87,3491.44,3518.85,276310000,3518.85
+1993-06-28,3490.89,3542.10,3486.74,3530.20,242090000,3530.20
+1993-06-25,3490.61,3512.76,3473.18,3490.89,210430000,3490.89
+1993-06-24,3466.81,3504.73,3449.10,3490.61,267450000,3490.61
+1993-06-23,3497.53,3514.14,3445.77,3466.81,278260000,3466.81
+1993-06-22,3510.82,3530.47,3474.28,3497.53,259530000,3497.53
+1993-06-21,3494.77,3531.86,3477.05,3510.82,223650000,3510.82
+1993-06-18,3521.89,3539.88,3478.44,3494.77,300500000,3494.77
+1993-06-17,3511.65,3539.61,3488.68,3521.89,239810000,3521.89
+1993-06-16,3492.00,3527.43,3460.17,3511.65,264500000,3511.65
+1993-06-15,3514.69,3531.86,3471.24,3492.00,234110000,3492.00
+1993-06-14,3505.01,3538.22,3486.74,3514.69,210440000,3514.69
+1993-06-11,3491.72,3536.01,3479.27,3505.01,255200000,3505.01
+1993-06-10,3511.93,3538.22,3461.83,3491.72,231760000,3491.72
+1993-06-09,3510.54,3541.54,3490.89,3511.93,249030000,3511.93
+1993-06-08,3532.13,3543.48,3494.21,3510.54,238170000,3510.54
+1993-06-07,3545.14,3570.33,3510.82,3532.13,236930000,3532.13
+1993-06-04,3544.87,3563.13,3516.63,3545.14,226440000,3545.14
+1993-06-03,3553.45,3569.50,3516.08,3544.87,285770000,3544.87
+1993-06-02,3552.34,3576.14,3530.47,3553.45,287120000,3553.45
+1993-06-01,3527.43,3577.25,3518.02,3552.34,229690000,3552.34
+1993-05-28,3554.83,3563.41,3503.62,3527.43,207820000,3527.43
+1993-05-27,3540.16,3582.23,3523.28,3554.83,300810000,3554.83
+1993-05-26,3516.63,3558.98,3498.64,3540.16,274230000,3540.16
+1993-05-25,3507.78,3534.35,3486.46,3516.63,222090000,3516.63
+1993-05-24,3492.83,3526.60,3472.35,3507.78,197990000,3507.78
+1993-05-21,3523.28,3532.96,3468.47,3492.83,279120000,3492.83
+1993-05-20,3500.03,3539.88,3475.39,3523.28,289160000,3523.28
+1993-05-19,3444.39,3511.10,3405.09,3500.03,342420000,3500.03
+1993-05-18,3449.93,3468.47,3409.79,3444.39,264300000,3444.39
+1993-05-17,3443.01,3465.98,3421.42,3449.93,227580000,3449.93
+1993-05-14,3447.99,3472.62,3421.14,3443.01,252910000,3443.01
+1993-05-13,3482.31,3486.74,3428.89,3447.99,289860000,3447.99
+1993-05-12,3468.75,3501.69,3441.07,3482.31,255680000,3482.31
+1993-05-11,3443.28,3481.76,3421.42,3468.75,218480000,3468.75
+1993-05-10,3437.19,3485.36,3420.31,3443.28,235580000,3443.28
+1993-05-07,3441.90,3468.47,3413.67,3437.19,223570000,3437.19
+1993-05-06,3449.10,3475.67,3418.93,3441.90,255460000,3441.90
+1993-05-05,3446.19,3478.44,3420.86,3449.10,270960000,3449.10
+1993-05-04,3446.46,3477.26,3424.04,3446.19,268310000,3446.19
+1993-05-03,3427.55,3462.94,3402.42,3446.46,220860000,3446.46
+1993-04-30,3425.12,3466.18,3405.39,3427.55,247460000,3427.55
+1993-04-29,3413.50,3444.57,3377.57,3425.12,249760000,3425.12
+1993-04-28,3415.93,3445.65,3372.16,3413.50,267980000,3413.50
+1993-04-27,3398.37,3433.76,3364.06,3415.93,284140000,3415.93
+1993-04-26,3413.77,3442.14,3369.46,3398.37,281180000,3398.37
+1993-04-23,3429.17,3448.08,3385.67,3413.77,259810000,3413.77
+1993-04-22,3439.44,3488.33,3399.99,3429.17,310390000,3429.17
+1993-04-21,3443.49,3480.77,3401.34,3439.44,287300000,3439.44
+1993-04-20,3466.99,3486.71,3400.26,3443.49,317990000,3443.49
+1993-04-19,3478.61,3499.41,3436.73,3466.99,244710000,3466.99
+1993-04-16,3455.92,3498.60,3437.54,3478.61,305160000,3478.61
+1993-04-15,3455.64,3484.28,3419.17,3455.92,259500000,3455.92
+1993-04-14,3444.03,3482.93,3424.85,3455.64,257340000,3455.64
+1993-04-13,3428.09,3469.42,3408.37,3444.03,286690000,3444.03
+1993-04-12,3396.48,3452.67,3391.08,3428.09,259610000,3428.09
+1993-04-08,3397.02,3429.44,3357.58,3396.48,282470000,3396.48
+1993-04-07,3377.57,3417.55,3355.41,3397.02,296290000,3397.02
+1993-04-06,3379.19,3417.55,3339.75,3377.57,289640000,3377.57
+1993-04-05,3370.81,3411.61,3338.39,3379.19,238630000,3379.19
+1993-04-02,3439.44,3439.44,3344.88,3370.81,323330000,3370.81
+1993-04-01,3435.11,3466.45,3419.98,3439.44,231950000,3439.44
+1993-03-31,3457.27,3484.82,3424.85,3435.11,275710000,3435.11
+1993-03-30,3455.10,3481.58,3422.14,3457.27,233330000,3457.27
+1993-03-29,3439.98,3487.52,3431.87,3455.10,199890000,3455.10
+1993-03-26,3461.32,3484.28,3428.63,3439.98,219130000,3439.98
+1993-03-25,3445.38,3485.36,3429.44,3461.32,250040000,3461.32
+1993-03-24,3461.86,3489.14,3417.55,3445.38,271980000,3445.38
+1993-03-23,3463.48,3488.60,3438.08,3461.86,231900000,3461.86
+1993-03-22,3471.58,3483.20,3429.71,3463.48,231900000,3463.48
+1993-03-19,3465.64,3493.20,3446.46,3471.58,295510000,3471.58
+1993-03-18,3427.01,3486.17,3427.01,3465.64,240490000,3465.64
+1993-03-17,3442.95,3458.35,3408.91,3426.74,237850000,3426.74
+1993-03-16,3442.41,3466.72,3423.77,3442.95,217730000,3442.95
+1993-03-15,3427.82,3460.51,3412.96,3442.41,192690000,3442.41
+1993-03-12,3447.81,3447.81,3385.40,3427.82,244740000,3427.82
+1993-03-11,3478.34,3493.74,3437.27,3457.00,250720000,3457.00
+1993-03-10,3472.12,3497.25,3432.68,3478.34,255190000,3478.34
+1993-03-09,3469.42,3495.63,3443.76,3472.12,290120000,3472.12
+1993-03-08,3404.58,3476.99,3401.34,3469.42,274560000,3469.42
+1993-03-05,3398.91,3447.81,3373.25,3404.58,247130000,3404.58
+1993-03-04,3404.04,3423.77,3372.43,3398.91,230780000,3398.91
+1993-03-03,3400.53,3437.00,3368.92,3404.04,272290000,3404.04
+1993-03-02,3355.41,3406.21,3334.07,3400.53,269640000,3400.53
+1993-03-01,3370.81,3404.58,3336.23,3355.41,232090000,3355.41
+1993-02-26,3365.14,3396.21,3336.23,3370.81,234160000,3370.81
+1993-02-25,3356.50,3387.02,3326.78,3365.14,252790000,3365.14
+1993-02-24,3323.27,3371.89,3311.92,3356.50,298940000,3356.50
+1993-02-23,3342.99,3373.52,3296.79,3323.27,321050000,3323.27
+1993-02-22,3322.18,3367.30,3297.06,3342.99,311510000,3342.99
+1993-02-19,3302.19,3347.04,3270.04,3322.18,307960000,3322.18
+1993-02-18,3312.19,3362.98,3262.48,3302.19,309570000,3302.19
+1993-02-17,3309.49,3338.12,3273.56,3312.19,287240000,3312.19
+1993-02-16,3391.62,3391.62,3285.98,3309.49,325350000,3309.49
+1993-02-12,3422.69,3436.19,3378.11,3392.43,215750000,3392.43
+1993-02-11,3412.42,3455.64,3395.94,3422.69,252780000,3422.69
+1993-02-10,3414.58,3438.08,3379.19,3412.42,248480000,3412.42
+1993-02-09,3437.54,3449.16,3394.86,3414.58,233670000,3414.58
+1993-02-08,3442.14,3472.94,3408.91,3437.54,240350000,3437.54
+1993-02-05,3416.74,3463.21,3391.62,3442.14,320960000,3442.14
+1993-02-04,3373.79,3441.33,3367.03,3416.74,346480000,3416.74
+1993-02-03,3328.67,3397.83,3322.73,3373.79,342530000,3373.79
+1993-02-02,3332.18,3355.68,3300.30,3328.67,269250000,3328.67
+1993-02-01,3310.03,3343.80,3300.30,3332.18,238260000,3332.18
+1993-01-29,3306.25,3331.10,3287.06,3310.03,247010000,3310.03
+1993-01-28,3291.39,3327.86,3270.58,3306.25,255550000,3306.25
+1993-01-27,3298.95,3318.67,3260.05,3291.39,276880000,3291.39
+1993-01-26,3292.20,3331.91,3272.47,3298.95,311450000,3298.95
+1993-01-25,3256.81,3324.89,3243.84,3292.20,288010000,3292.20
+1993-01-22,3253.02,3292.74,3225.74,3256.81,293250000,3256.81
+1993-01-21,3241.95,3269.77,3219.25,3253.02,257350000,3253.02
+1993-01-20,3255.99,3278.96,3231.41,3241.95,267740000,3241.95
+1993-01-19,3274.91,3299.49,3239.52,3255.99,283110000,3255.99
+1993-01-18,3271.12,3296.52,3244.65,3274.91,195980000,3274.91
+1993-01-15,3267.88,3300.03,3238.70,3271.12,306140000,3271.12
+1993-01-14,3263.56,3297.06,3230.87,3267.88,280020000,3267.88
+1993-01-13,3264.64,3283.01,3225.47,3263.56,245020000,3263.56
+1993-01-12,3262.75,3287.06,3229.79,3264.64,239250000,3264.64
+1993-01-11,3251.67,3284.09,3228.98,3262.75,217150000,3262.75
+1993-01-08,3268.96,3280.31,3221.68,3251.67,262620000,3251.67
+1993-01-07,3305.16,3333.51,3250.30,3268.96,303140000,3268.96
+1993-01-06,3307.87,3330.29,3276.53,3305.16,282850000,3305.16
+1993-01-05,3309.22,3338.12,3279.23,3307.87,240550000,3307.87
+1993-01-04,3301.11,3335.69,3282.74,3309.22,199680000,3309.22
+1992-12-31,3321.10,3340.29,3294.36,3301.11,165910000,3301.11
+1992-12-30,3310.84,3340.54,3298.93,3321.10,183870000,3321.10
+1992-12-29,3333.26,3364.87,3295.71,3310.84,213660000,3310.84
+1992-12-28,3326.24,3352.17,3297.33,3333.26,143800000,3333.26
+1992-12-24,3313.54,3339.48,3303.27,3326.24,95240000,3326.24
+1992-12-23,3321.10,3350.55,3293.01,3313.54,227980000,3313.54
+1992-12-22,3312.46,3347.04,3286.52,3321.10,249670000,3321.10
+1992-12-21,3313.27,3335.15,3280.85,3312.46,224680000,3312.46
+1992-12-18,3269.23,3325.97,3261.94,3313.27,371080000,3313.27
+1992-12-17,3255.18,3289.22,3229.79,3269.23,248590000,3269.23
+1992-12-16,3284.36,3303.00,3238.70,3255.18,241910000,3255.18
+1992-12-15,3292.20,3313.27,3260.32,3284.36,225880000,3284.36
+1992-12-14,3304.08,3324.89,3279.50,3292.20,183510000,3292.20
+1992-12-11,3312.19,3324.89,3280.85,3304.08,164450000,3304.08
+1992-12-10,3323.81,3335.69,3285.17,3312.19,240570000,3312.19
+1992-12-09,3322.18,3345.42,3295.98,3323.81,229980000,3323.81
+1992-12-08,3307.33,3331.64,3288.41,3322.18,234300000,3322.18
+1992-12-07,3288.68,3320.56,3274.37,3307.33,217700000,3307.33
+1992-12-04,3276.53,3312.46,3261.40,3288.68,227410000,3288.68
+1992-12-03,3286.25,3302.73,3252.48,3276.53,238200000,3276.53
+1992-12-02,3294.36,3310.84,3265.18,3286.25,241860000,3286.25
+1992-12-01,3305.16,3321.64,3268.15,3294.36,259020000,3294.36
+1992-11-30,3282.20,3326.51,3270.31,3305.16,230190000,3305.16
+1992-11-27,3266.26,3304.62,3259.24,3282.20,106010000,3282.20
+1992-11-25,3248.70,3285.71,3243.57,3266.26,206700000,3266.26
+1992-11-24,3223.04,3277.88,3209.26,3248.70,241520000,3248.70
+1992-11-23,3227.36,3251.13,3196.83,3223.04,190490000,3223.04
+1992-11-20,3209.53,3249.78,3197.64,3227.36,256340000,3227.36
+1992-11-19,3207.37,3231.14,3190.35,3209.53,218700000,3209.53
+1992-11-18,3193.32,3227.09,3176.84,3207.37,218660000,3207.37
+1992-11-17,3205.74,3223.31,3178.19,3193.32,185460000,3193.32
+1992-11-16,3233.03,3241.41,3191.16,3205.74,173500000,3205.74
+1992-11-13,3239.79,3252.48,3211.69,3233.03,192320000,3233.03
+1992-11-12,3240.33,3264.91,3214.39,3239.79,224580000,3239.79
+1992-11-11,3225.47,3258.70,3203.31,3240.33,240160000,3240.33
+1992-11-10,3240.87,3268.15,3212.50,3225.47,221990000,3225.47
+1992-11-09,3240.06,3268.69,3220.33,3240.87,197490000,3240.87
+1992-11-06,3243.84,3264.64,3216.82,3240.06,204870000,3240.06
+1992-11-05,3223.04,3259.78,3203.58,3243.84,219580000,3243.84
+1992-11-04,3252.48,3274.10,3211.15,3223.04,193980000,3223.04
+1992-11-03,3262.21,3285.44,3226.82,3252.48,209740000,3252.48
+1992-11-02,3226.28,3274.64,3211.42,3262.21,201620000,3262.21
+1992-10-30,3246.27,3260.59,3208.45,3226.28,196740000,3226.28
+1992-10-29,3251.40,3268.96,3224.39,3246.27,206300000,3246.27
+1992-10-28,3235.73,3262.48,3210.34,3251.40,203040000,3251.40
+1992-10-27,3244.11,3270.31,3210.88,3235.73,201650000,3235.73
+1992-10-26,3207.64,3256.00,3190.08,3244.11,187950000,3244.11
+1992-10-23,3200.88,3233.57,3175.76,3207.64,197400000,3207.64
+1992-10-22,3187.10,3221.14,3162.79,3200.88,216080000,3200.88
+1992-10-21,3186.02,3211.69,3163.33,3187.10,218990000,3187.10
+1992-10-20,3188.45,3223.31,3166.30,3186.02,258220000,3186.02
+1992-10-19,3174.41,3211.15,3154.14,3188.45,218670000,3188.45
+1992-10-16,3174.68,3203.85,3123.89,3174.41,234480000,3174.41
+1992-10-15,3195.48,3207.37,3147.66,3174.68,206990000,3174.68
+1992-10-14,3201.42,3225.74,3167.11,3195.48,175440000,3195.48
+1992-10-13,3174.41,3222.77,3159.28,3201.42,184120000,3201.42
+1992-10-12,3140.10,3186.29,3140.10,3174.41,126590000,3174.41
+1992-10-09,3176.03,3176.57,3120.37,3136.58,178910000,3136.58
+1992-10-08,3152.25,3195.48,3135.77,3176.03,203780000,3176.03
+1992-10-07,3178.19,3200.88,3136.85,3152.25,183100000,3152.25
+1992-10-06,3179.00,3205.20,3147.93,3178.19,196660000,3178.19
+1992-10-05,3197.10,3197.10,3087.41,3179.00,284380000,3179.00
+1992-10-02,3254.37,3259.51,3193.59,3200.61,187400000,3200.61
+1992-10-01,3271.66,3291.39,3237.35,3254.37,203670000,3254.37
+1992-09-30,3266.80,3291.66,3247.89,3271.66,184220000,3271.66
+1992-09-29,3276.26,3295.98,3247.08,3266.80,170350000,3266.80
+1992-09-28,3250.32,3283.01,3226.55,3276.26,157480000,3276.26
+1992-09-25,3287.87,3292.20,3226.82,3250.32,213650000,3250.32
+1992-09-24,3278.69,3310.84,3267.07,3287.87,187770000,3287.87
+1992-09-23,3280.85,3302.19,3252.48,3278.69,204350000,3278.69
+1992-09-22,3320.83,3327.05,3270.58,3280.85,186990000,3280.85
+1992-09-21,3327.05,3341.91,3295.71,3320.83,153900000,3320.83
+1992-09-18,3315.70,3340.56,3297.87,3327.05,236080000,3327.05
+1992-09-17,3319.21,3347.04,3292.20,3315.70,188270000,3315.70
+1992-09-16,3327.32,3353.52,3288.95,3319.21,229380000,3319.21
+1992-09-15,3372.98,3372.98,3317.86,3327.32,200220000,3327.32
+1992-09-14,3326.51,3391.35,3326.51,3376.22,250900000,3376.22
+1992-09-11,3305.16,3327.32,3285.44,3305.70,180640000,3305.70
+1992-09-10,3271.39,3318.94,3261.67,3305.16,221970000,3305.16
+1992-09-09,3260.59,3284.09,3244.92,3271.39,172890000,3271.39
+1992-09-08,3281.93,3292.20,3245.73,3260.59,160930000,3260.59
+1992-09-04,3292.20,3306.23,3265.16,3281.93,124340000,3281.93
+1992-09-03,3290.31,3325.95,3268.94,3292.20,212540000,3292.20
+1992-09-02,3266.26,3301.90,3249.76,3290.31,187010000,3290.31
+1992-09-01,3257.35,3279.21,3239.77,3266.26,172650000,3266.26
+1992-08-31,3267.61,3287.04,3244.90,3257.35,160230000,3257.35
+1992-08-28,3254.64,3280.56,3237.88,3267.61,152230000,3267.61
+1992-08-27,3246.81,3285.69,3237.06,3254.64,178490000,3254.64
+1992-08-26,3232.22,3261.38,3217.07,3246.81,171840000,3246.81
+1992-08-25,3228.17,3253.00,3200.86,3232.22,201630000,3232.22
+1992-08-24,3254.09,3258.41,3207.08,3228.17,165130000,3228.17
+1992-08-21,3304.89,3330.27,3243.55,3254.09,202640000,3254.09
+1992-08-20,3307.06,3326.22,3285.69,3304.89,183390000,3304.89
+1992-08-19,3329.48,3347.56,3302.44,3307.06,186710000,3307.06
+1992-08-18,3324.89,3343.80,3309.22,3329.48,169880000,3329.48
+1992-08-17,3328.94,3350.28,3310.03,3324.89,152750000,3324.89
+1992-08-14,3313.27,3342.16,3300.82,3328.94,166180000,3328.94
+1992-08-13,3320.83,3347.29,3294.07,3313.27,185700000,3313.27
+1992-08-12,3331.10,3349.72,3304.88,3320.83,176440000,3320.83
+1992-08-11,3337.58,3356.48,3304.34,3331.10,173810000,3331.10
+1992-08-10,3332.18,3350.26,3305.14,3337.58,142440000,3337.58
+1992-08-07,3340.56,3378.38,3318.40,3332.18,188340000,3332.18
+1992-08-06,3365.14,3374.33,3327.05,3340.56,181390000,3340.56
+1992-08-05,3384.32,3391.35,3347.58,3365.14,172410000,3365.14
+1992-08-04,3395.40,3405.12,3367.03,3384.32,166740000,3384.32
+1992-08-03,3393.78,3413.23,3365.14,3395.40,164360000,3395.40
+1992-07-31,3391.89,3414.85,3371.89,3393.78,172920000,3393.78
+1992-07-30,3379.19,3409.16,3351.07,3391.89,193280000,3391.89
+1992-07-29,3345.13,3399.70,3345.13,3379.19,275760000,3379.19
+1992-07-28,3282.20,3345.67,3277.59,3334.07,217950000,3334.07
+1992-07-27,3285.71,3311.38,3265.99,3282.20,164680000,3282.20
+1992-07-24,3290.04,3305.68,3261.94,3285.71,163870000,3285.71
+1992-07-23,3277.61,3308.39,3255.43,3290.04,175460000,3290.04
+1992-07-22,3308.41,3310.28,3262.19,3277.61,190130000,3277.61
+1992-07-21,3303.00,3335.94,3292.45,3308.41,173800000,3308.41
+1992-07-20,3318.38,3318.38,3271.11,3303.00,165730000,3303.00
+1992-07-17,3359.74,3359.74,3308.14,3331.64,187520000,3331.64
+1992-07-16,3345.42,3375.66,3318.65,3361.63,206040000,3361.63
+1992-07-15,3358.39,3381.87,3319.73,3345.42,206550000,3345.42
+1992-07-14,3337.31,3371.88,3315.95,3358.39,195310000,3358.39
+1992-07-13,3330.56,3357.55,3315.41,3337.31,148820000,3337.31
+1992-07-10,3324.08,3355.93,3304.88,3330.56,164750000,3330.56
+1992-07-09,3293.28,3345.40,3292.45,3324.08,207970000,3324.08
+1992-07-08,3295.17,3322.98,3258.70,3293.28,200020000,3293.28
+1992-07-07,3339.21,3360.80,3285.69,3295.17,218740000,3295.17
+1992-07-06,3330.29,3367.57,3295.96,3339.21,186410000,3339.21
+1992-07-02,3354.10,3385.43,3303.30,3330.29,220130000,3330.29
+1992-07-01,3318.52,3366.43,3305.45,3354.10,214240000,3354.10
+1992-06-30,3319.86,3347.71,3295.01,3318.52,195520000,3318.52
+1992-06-29,3282.41,3330.32,3278.16,3319.86,176710000,3319.86
+1992-06-26,3284.01,3303.04,3254.89,3282.41,154430000,3282.41
+1992-06-25,3290.70,3319.62,3261.31,3284.01,182310000,3284.01
+1992-06-24,3285.62,3317.75,3262.11,3290.70,193850000,3290.70
+1992-06-23,3280.80,3312.13,3263.45,3285.62,189170000,3285.62
+1992-06-22,3285.35,3298.22,3242.32,3280.80,169340000,3280.80
+1992-06-19,3274.12,3313.20,3264.79,3285.35,233440000,3285.35
+1992-06-18,3287.76,3313.74,3245.53,3274.12,215080000,3274.12
+1992-06-17,3329.49,3347.98,3271.21,3287.76,227650000,3287.76
+1992-06-16,3354.90,3379.01,3321.76,3329.49,178850000,3329.49
+1992-06-15,3354.36,3371.79,3327.11,3354.90,159100000,3354.90
+1992-06-12,3351.51,3397.68,3339.62,3354.36,181830000,3354.36
+1992-06-11,3343.22,3374.61,3301.51,3351.51,192940000,3351.51
+1992-06-10,3369.92,3385.76,3328.99,3343.22,206380000,3343.22
+1992-06-09,3404.14,3412.98,3350.25,3369.92,190780000,3369.92
+1992-06-08,3398.69,3422.83,3370.21,3404.14,161130000,3404.14
+1992-06-05,3399.73,3424.64,3356.98,3398.69,199050000,3398.69
+1992-06-04,3406.99,3428.02,3376.43,3399.73,204360000,3399.73
+1992-06-03,3396.10,3431.13,3378.76,3406.99,215730000,3406.99
+1992-06-02,3413.21,3435.27,3380.84,3396.10,200660000,3396.10
+1992-06-01,3396.88,3424.39,3365.02,3413.21,180780000,3413.21
+1992-05-29,3398.43,3433.98,3384.20,3396.88,202730000,3396.88
+1992-05-28,3370.44,3408.31,3354.91,3398.43,195230000,3398.43
+1992-05-27,3364.21,3396.65,3337.29,3370.44,179980000,3370.44
+1992-05-26,3386.77,3410.91,3338.84,3364.21,196950000,3364.21
+1992-05-22,3378.71,3408.49,3364.08,3386.77,146640000,3386.77
+1992-05-21,3393.84,3402.88,3354.80,3378.71,182190000,3378.71
+1992-05-20,3397.99,3421.42,3376.04,3393.84,198170000,3393.84
+1992-05-19,3376.03,3413.37,3350.41,3397.99,187030000,3397.99
+1992-05-18,3353.09,3398.24,3349.93,3376.03,149830000,3376.03
+1992-05-15,3368.88,3380.30,3330.43,3353.09,192040000,3353.09
+1992-05-14,3391.98,3397.46,3347.59,3368.88,187700000,3368.88
+1992-05-13,3385.12,3414.17,3362.93,3391.98,171610000,3391.98
+1992-05-12,3397.58,3414.81,3361.51,3385.12,192810000,3385.12
+1992-05-11,3369.41,3410.11,3363.82,3397.58,155730000,3397.58
+1992-05-08,3363.37,3388.41,3344.59,3369.41,168670000,3369.41
+1992-05-07,3369.41,3390.65,3343.25,3363.37,168910000,3363.37
+1992-05-06,3359.35,3398.70,3346.60,3369.41,199070000,3369.41
+1992-05-05,3378.13,3393.78,3346.15,3359.35,198860000,3359.35
+1992-05-04,3340.79,3394.68,3340.79,3378.13,174520000,3378.13
+1992-05-01,3359.12,3375.67,3316.64,3336.09,177360000,3336.09
+1992-04-30,3333.18,3377.01,3314.40,3359.12,223160000,3359.12
+1992-04-29,3307.92,3353.75,3295.39,3333.18,199740000,3333.18
+1992-04-28,3304.56,3329.83,3273.03,3307.92,186740000,3307.92
+1992-04-27,3324.46,3340.79,3284.66,3304.56,172820000,3304.56
+1992-04-24,3348.61,3381.48,3305.23,3324.46,198740000,3324.46
+1992-04-23,3338.77,3376.34,3298.52,3348.61,235740000,3348.61
+1992-04-22,3343.25,3366.72,3309.48,3338.77,218790000,3338.77
+1992-04-21,3336.31,3366.50,3305.68,3343.25,214400000,3343.25
+1992-04-20,3366.50,3375.67,3300.98,3336.31,191910000,3336.31
+1992-04-16,3353.76,3387.97,3321.33,3366.50,232480000,3366.50
+1992-04-15,3306.13,3370.08,3296.51,3353.76,228400000,3353.76
+1992-04-14,3269.90,3336.54,3259.39,3306.13,232040000,3306.13
+1992-04-13,3255.37,3293.60,3230.77,3269.90,143100000,3269.90
+1992-04-10,3227.64,3280.86,3227.64,3255.37,199450000,3255.37
+1992-04-09,3181.35,3245.08,3171.06,3224.96,231330000,3224.96
+1992-04-08,3213.55,3221.38,3141.77,3181.35,249210000,3181.35
+1992-04-07,3275.49,3291.81,3207.51,3213.55,205110000,3213.55
+1992-04-06,3249.11,3295.84,3238.37,3275.49,179330000,3275.49
+1992-04-03,3234.12,3271.91,3201.92,3249.11,188530000,3249.11
+1992-04-02,3249.33,3277.06,3209.08,3234.12,185110000,3234.12
+1992-04-01,3235.47,3262.52,3202.37,3249.33,186260000,3249.33
+1992-03-31,3235.24,3272.81,3216.46,3235.47,182200000,3235.47
+1992-03-30,3231.44,3260.06,3215.79,3235.24,133980000,3235.24
+1992-03-27,3267.67,3272.58,3218.92,3231.44,166140000,3231.44
+1992-03-26,3259.39,3288.91,3245.08,3267.67,176690000,3267.67
+1992-03-25,3260.96,3290.47,3238.15,3259.39,192080000,3259.39
+1992-03-24,3272.14,3296.96,3242.84,3260.96,191580000,3260.96
+1992-03-23,3276.39,3288.68,3249.33,3272.14,156620000,3272.14
+1992-03-20,3261.40,3292.48,3240.83,3276.39,246170000,3276.39
+1992-03-19,3254.25,3286.22,3240.38,3261.40,197240000,3261.40
+1992-03-18,3256.04,3281.98,3230.10,3254.25,190800000,3254.25
+1992-03-17,3236.36,3272.58,3222.27,3256.04,187240000,3256.04
+1992-03-16,3235.91,3249.11,3201.25,3236.36,151280000,3236.36
+1992-03-13,3208.63,3252.23,3203.71,3235.91,176000000,3235.91
+1992-03-12,3208.63,3232.33,3176.21,3208.63,180240000,3208.63
+1992-03-11,3230.99,3242.17,3189.85,3208.63,185320000,3208.63
+1992-03-10,3215.12,3259.17,3207.29,3230.99,194530000,3230.99
+1992-03-09,3221.60,3242.62,3188.95,3215.12,160620000,3215.12
+1992-03-06,3241.50,3262.97,3204.61,3221.60,185040000,3221.60
+1992-03-05,3268.56,3283.54,3226.74,3241.50,205730000,3241.50
+1992-03-04,3290.25,3318.42,3256.04,3268.56,206770000,3268.56
+1992-03-03,3275.27,3313.28,3258.50,3290.25,200860000,3290.25
+1992-03-02,3267.67,3298.97,3242.39,3275.27,180380000,3275.27
+1992-02-28,3269.45,3304.11,3247.09,3267.67,202130000,3267.67
+1992-02-27,3283.32,3300.54,3251.79,3269.45,215050000,3269.45
+1992-02-26,3257.83,3305.01,3246.20,3283.32,240690000,3283.32
+1992-02-25,3282.42,3293.60,3226.74,3257.83,208400000,3257.83
+1992-02-24,3280.19,3305.01,3253.58,3282.42,177470000,3282.42
+1992-02-21,3280.64,3307.47,3242.17,3280.19,258700000,3280.19
+1992-02-20,3230.32,3304.34,3224.28,3280.64,270550000,3280.64
+1992-02-19,3224.73,3259.17,3199.02,3230.32,232900000,3230.32
+1992-02-18,3245.97,3280.19,3195.66,3224.73,234270000,3224.73
+1992-02-14,3246.65,3271.91,3208.63,3245.97,214840000,3245.97
+1992-02-13,3276.83,3296.73,3226.07,3246.65,229360000,3246.65
+1992-02-12,3251.57,3291.37,3233.68,3276.83,230230000,3276.83
+1992-02-11,3245.08,3277.28,3222.49,3251.57,200110000,3251.57
+1992-02-10,3225.40,3269.00,3208.85,3245.08,184390000,3245.08
+1992-02-07,3255.59,3283.09,3199.91,3225.40,230950000,3225.40
+1992-02-06,3257.60,3285.55,3224.95,3255.59,238210000,3255.59
+1992-02-05,3272.81,3299.87,3233.68,3257.60,261960000,3257.60
+1992-02-04,3234.12,3283.09,3208.63,3272.81,231530000,3272.81
+1992-02-03,3223.39,3261.40,3193.42,3234.12,182150000,3234.12
+1992-01-31,3244.86,3274.37,3207.96,3223.39,197060000,3223.39
+1992-01-30,3224.96,3269.68,3200.58,3244.86,194670000,3244.86
+1992-01-29,3272.14,3313.51,3204.16,3224.96,248900000,3224.96
+1992-01-28,3240.61,3298.30,3230.99,3272.14,217070000,3272.14
+1992-01-27,3232.78,3267.44,3216.23,3240.61,190430000,3240.61
+1992-01-24,3226.74,3264.31,3203.71,3232.78,213600000,3232.78
+1992-01-23,3255.81,3279.52,3205.95,3226.74,229680000,3226.74
+1992-01-22,3223.39,3272.80,3190.96,3255.81,225030000,3255.81
+1992-01-21,3254.03,3275.49,3194.09,3223.39,218650000,3223.39
+1992-01-20,3264.98,3283.32,3230.99,3254.03,180870000,3254.03
+1992-01-17,3249.55,3297.63,3224.28,3264.98,284560000,3264.98
+1992-01-16,3258.50,3289.13,3200.80,3249.55,333750000,3249.55
+1992-01-15,3246.20,3299.19,3207.73,3258.50,312400000,3258.50
+1992-01-14,3185.60,3255.81,3167.93,3246.20,264540000,3246.20
+1992-01-13,3199.46,3215.56,3161.67,3185.60,200270000,3185.60
+1992-01-10,3209.53,3235.91,3165.92,3199.46,236060000,3199.46
+1992-01-09,3203.94,3246.64,3173.75,3209.53,291780000,3209.53
+1992-01-08,3204.83,3245.53,3164.58,3203.94,289690000,3203.94
+1992-01-07,3200.13,3224.73,3165.25,3204.83,251280000,3204.83
+1992-01-06,3201.48,3230.32,3166.37,3200.13,241980000,3200.13
+1992-01-03,3172.41,3221.38,3156.30,3201.48,219170000,3201.48
+1992-01-02,3168.83,3184.70,3119.86,3172.41,203610000,3172.41
+1991-12-31,3163.91,3204.61,3121.20,3168.83,247670000,3168.83
+1991-12-30,3101.52,3174.64,3090.79,3163.91,245450000,3163.91
+1991-12-27,3082.96,3121.65,3063.73,3101.52,157940000,3101.52
+1991-12-26,3050.98,3101.97,3036.23,3082.96,149200000,3082.96
+1991-12-24,3022.58,3087.88,3015.65,3050.98,162300000,3050.98
+1991-12-23,2934.48,3037.57,2919.05,3022.58,228730000,3022.58
+1991-12-20,2914.36,2965.79,2907.65,2934.48,313810000,2934.48
+1991-12-19,2908.09,2927.10,2881.48,2914.36,199830000,2914.36
+1991-12-18,2902.28,2921.29,2870.30,2908.09,192350000,2908.09
+1991-12-17,2919.05,2936.27,2886.40,2902.28,191280000,2902.28
+1991-12-16,2914.36,2946.33,2900.49,2919.05,173010000,2919.05
+1991-12-13,2895.13,2936.72,2893.34,2914.36,195790000,2914.36
+1991-12-12,2865.38,2911.67,2861.14,2895.13,192930000,2895.13
+1991-12-11,2863.82,2889.53,2832.29,2865.38,207410000,2865.38
+1991-12-10,2871.65,2891.10,2841.23,2863.82,191800000,2863.82
+1991-12-09,2886.40,2913.46,2856.22,2871.65,174700000,2871.65
+1991-12-06,2889.09,2924.87,2854.65,2886.40,198170000,2886.40
+1991-12-05,2911.67,2923.75,2874.77,2889.09,165660000,2889.09
+1991-12-04,2929.56,2945.66,2892.22,2911.67,186380000,2911.67
+1991-12-03,2935.38,2958.18,2904.74,2929.56,187160000,2929.56
+1991-12-02,2894.68,2941.64,2855.32,2935.38,188050000,2935.38
+1991-11-29,2900.04,2913.46,2877.46,2894.68,77420000,2894.68
+1991-11-27,2916.14,2929.11,2883.72,2900.04,159790000,2900.04
+1991-11-26,2902.06,2942.31,2861.14,2916.14,213650000,2916.14
+1991-11-25,2902.73,2921.96,2870.30,2902.06,173520000,2902.06
+1991-11-22,2932.69,2940.30,2880.81,2902.73,188110000,2902.73
+1991-11-21,2930.01,2953.94,2902.28,2932.69,195060000,2932.69
+1991-11-20,2931.57,2973.61,2912.12,2930.01,192670000,2930.01
+1991-11-19,2960.20,2960.20,2883.72,2931.57,243880000,2931.57
+1991-11-18,2943.20,2990.61,2923.30,2972.72,238170000,2972.72
+1991-11-15,3063.51,3069.54,2936.05,2943.20,236000000,2943.20
+1991-11-14,3065.30,3084.97,3037.34,3063.51,200030000,3063.51
+1991-11-13,3054.11,3075.58,3023.70,3065.30,184080000,3065.30
+1991-11-12,3042.26,3078.71,3028.62,3054.11,198600000,3054.11
+1991-11-11,3045.62,3057.69,3025.27,3042.26,128910000,3042.26
+1991-11-08,3054.11,3080.95,3034.66,3045.62,183260000,3045.62
+1991-11-07,3038.46,3066.19,3020.35,3054.11,205440000,3054.11
+1991-11-06,3031.31,3056.57,3010.51,3038.46,167370000,3038.46
+1991-11-05,3045.62,3062.84,3015.88,3031.31,171950000,3031.31
+1991-11-04,3056.35,3061.27,3019.01,3045.62,155530000,3045.62
+1991-11-01,3069.10,3091.91,3031.75,3056.35,205750000,3056.35
+1991-10-31,3071.78,3091.01,3045.62,3069.10,179490000,3069.10
+1991-10-30,3061.94,3090.12,3038.24,3071.78,195340000,3071.78
+1991-10-29,3045.62,3077.82,3020.13,3061.94,192700000,3061.94
+1991-10-28,3004.92,3055.23,3001.57,3045.62,160220000,3045.62
+1991-10-25,3016.32,3034.44,2983.01,3004.92,167260000,3004.92
+1991-10-24,3040.92,3047.63,2991.73,3016.32,178990000,3016.32
+1991-10-23,3039.80,3065.52,3015.21,3040.92,185340000,3040.92
+1991-10-22,3060.38,3084.53,3020.57,3039.80,194120000,3039.80
+1991-10-21,3077.15,3085.20,3042.49,3060.38,153770000,3060.38
+1991-10-18,3053.00,3089.45,3045.62,3077.15,204030000,3077.15
+1991-10-17,3061.72,3077.15,3027.06,3053.00,202780000,3053.00
+1991-10-16,3041.37,3082.29,3016.10,3061.72,225290000,3061.72
+1991-10-15,3019.45,3057.69,3000.22,3041.37,213440000,3041.37
+1991-10-14,2983.68,3026.39,2975.85,3019.45,130110000,3019.45
+1991-10-11,2976.52,3000.89,2957.51,2983.68,146560000,2983.68
+1991-10-10,2946.33,2985.47,2930.23,2976.52,164120000,2976.52
+1991-10-09,2963.77,2984.79,2925.54,2946.33,186590000,2946.33
+1991-10-08,2942.75,2983.68,2927.77,2963.77,170000000,2963.77
+1991-10-07,2961.76,2973.17,2926.21,2942.75,148430000,2942.75
+1991-10-04,2984.79,3007.16,2956.17,2961.76,163930000,2961.76
+1991-10-03,3012.52,3021.24,2972.50,2984.79,174230000,2984.79
+1991-10-02,3018.34,3040.25,2992.40,3012.52,166290000,3012.52
+1991-10-01,3016.77,3043.60,3002.46,3018.34,163520000,3018.34
+1991-09-30,3006.04,3032.87,2982.78,3016.77,146740000,3016.77
+1991-09-27,3017.22,3040.70,2989.49,3006.04,160430000,3006.04
+1991-09-26,3021.02,3040.70,2996.87,3017.22,160190000,3017.22
+1991-09-25,3029.07,3048.52,3004.92,3021.02,153800000,3021.02
+1991-09-24,3010.51,3043.38,2995.97,3029.07,170300000,3029.07
+1991-09-23,3019.23,3037.79,2997.76,3010.51,145530000,3010.51
+1991-09-20,3024.37,3045.39,3002.46,3019.23,241340000,3019.23
+1991-09-19,3017.89,3050.76,3002.91,3024.37,210770000,3024.37
+1991-09-18,3013.19,3025.49,2993.52,3017.89,141280000,3017.89
+1991-09-17,3015.21,3036.00,2992.62,3013.19,168310000,3013.19
+1991-09-16,2985.69,3023.03,2973.61,3015.21,171960000,3015.21
+1991-09-13,3007.83,3021.47,2963.10,2985.69,167800000,2985.69
+1991-09-12,2987.03,3023.26,2977.64,3007.83,160310000,3007.83
+1991-09-11,2982.56,3004.70,2964.67,2987.03,147910000,2987.03
+1991-09-10,3007.16,3012.97,2967.80,2982.56,146730000,2982.56
+1991-09-09,3011.63,3025.49,2987.70,3007.16,109250000,3007.16
+1991-09-06,3008.50,3033.32,2987.48,3011.63,166410000,3011.63
+1991-09-05,3008.50,3031.98,2989.71,3008.50,162250000,3008.50
+1991-09-04,3017.67,3034.66,2990.83,3008.50,156770000,3008.50
+1991-09-03,3043.60,3066.64,3013.64,3017.67,153550000,3017.67
+1991-08-30,3049.64,3059.26,3024.82,3043.60,125830000,3043.60
+1991-08-29,3055.23,3068.65,3030.86,3049.64,150180000,3049.64
+1991-08-28,3026.16,3064.85,3018.11,3055.23,169590000,3055.23
+1991-08-27,3039.36,3047.41,3007.83,3026.16,143920000,3026.16
+1991-08-26,3040.25,3057.02,3020.80,3039.36,128400000,3039.36
+1991-08-23,3007.38,3065.97,2999.11,3040.25,187010000,3040.25
+1991-08-22,3001.79,3029.96,2989.94,3007.38,172900000,3007.38
+1991-08-21,2941.64,3009.17,2941.64,3001.79,231720000,3001.79
+1991-08-20,2898.03,2937.39,2886.85,2913.69,184090000,2913.69
+1991-08-19,2924.42,2924.42,2836.31,2898.03,229590000,2898.03
+1991-08-16,2998.43,3013.64,2945.89,2968.02,188360000,2968.02
+1991-08-15,3005.37,3029.96,2985.24,2998.43,174310000,2998.43
+1991-08-14,3008.72,3036.67,2988.60,3005.37,195890000,3005.37
+1991-08-13,3001.34,3041.14,2989.27,3008.72,211890000,3008.72
+1991-08-12,2996.20,3013.42,2974.06,3001.34,145280000,3001.34
+1991-08-09,3013.86,3036.45,2986.81,2996.20,143610000,2996.20
+1991-08-08,3026.61,3045.17,2995.30,3013.86,163620000,3013.86
+1991-08-07,3027.28,3050.54,3008.50,3026.61,170820000,3026.61
+1991-08-06,2989.04,3034.88,2970.48,3027.28,174340000,3027.28
+1991-08-05,3006.26,3019.68,2978.76,2989.04,125790000,2989.04
+1991-08-02,3017.67,3042.26,2994.41,3006.26,162050000,3006.26
+1991-08-01,3024.82,3037.12,2997.76,3017.67,169920000,3017.67
+1991-07-31,3016.32,3039.58,2999.11,3024.82,166650000,3024.82
+1991-07-30,2985.24,3029.07,2983.68,3016.32,168950000,3016.32
+1991-07-29,2972.50,2996.20,2957.07,2985.24,135240000,2985.24
+1991-07-26,2980.10,2994.86,2953.26,2972.50,127690000,2972.50
+1991-07-25,2966.23,2999.11,2947.23,2980.10,145510000,2980.10
+1991-07-24,2983.23,3003.13,2950.80,2966.23,158530000,2966.23
+1991-07-23,3012.97,3038.24,2972.94,2983.23,160010000,2983.23
+1991-07-22,3016.32,3034.44,2990.83,3012.97,148880000,3012.97
+1991-07-19,3016.32,3036.23,2989.49,3016.32,187290000,3016.32
+1991-07-18,2978.76,3026.61,2970.93,3016.32,199470000,3016.32
+1991-07-17,2983.90,3011.18,2961.54,2978.76,194150000,2978.76
+1991-07-16,2990.61,3012.52,2962.88,2983.90,182740000,2983.90
+1991-07-15,2980.77,3007.38,2965.79,2990.61,159340000,2990.61
+1991-07-12,2959.75,3003.35,2942.98,2980.77,173060000,2980.77
+1991-07-11,2944.77,2975.63,2933.36,2959.75,157680000,2959.75
+1991-07-10,2947.23,2990.83,2927.77,2944.77,178170000,2944.77
+1991-07-09,2961.99,2980.10,2934.03,2947.23,151430000,2947.23
+1991-07-08,2932.47,2966.23,2897.36,2961.99,138210000,2961.99
+1991-07-05,2934.70,2953.26,2917.71,2932.47,69790000,2932.47
+1991-07-03,2957.07,2957.07,2915.03,2934.70,139290000,2934.70
+1991-07-02,2958.41,2987.03,2939.62,2972.72,157140000,2972.72
+1991-07-01,2911.67,2971.15,2911.67,2958.41,166880000,2958.41
+1991-06-28,2934.03,2934.03,2879.25,2906.75,162670000,2906.75
+1991-06-27,2913.01,2946.56,2909.21,2934.93,155820000,2934.93
+1991-06-26,2910.11,2934.03,2879.25,2913.01,186830000,2913.01
+1991-06-25,2913.01,2938.51,2887.97,2910.11,155450000,2910.11
+1991-06-24,2957.29,2957.29,2904.29,2913.01,137700000,2913.01
+1991-06-21,2953.94,2977.64,2937.84,2965.56,193110000,2965.56
+1991-06-20,2955.50,2969.81,2927.33,2953.94,163780000,2953.94
+1991-06-19,2978.31,2978.31,2933.59,2955.50,156070000,2955.50
+1991-06-18,2993.96,3022.14,2970.48,2986.81,154900000,2986.81
+1991-06-17,3000.45,3021.69,2977.86,2993.96,133910000,2993.96
+1991-06-14,2967.58,3014.98,2967.58,3000.45,167530000,3000.45
+1991-06-13,2961.99,2982.11,2942.53,2965.12,144870000,2965.12
+1991-06-12,2985.91,2987.25,2928.89,2961.99,165720000,2961.99
+1991-06-11,2975.40,3012.08,2963.10,2985.91,161240000,2985.91
+1991-06-10,2976.74,2992.84,2958.41,2975.40,127420000,2975.40
+1991-06-07,2994.86,3005.14,2954.61,2976.74,167830000,2976.74
+1991-06-06,3005.37,3027.06,2975.63,2994.86,168050000,2994.86
+1991-06-05,3027.95,3042.93,2989.49,3005.37,186300000,3005.37
+1991-06-04,3035.33,3042.04,2992.62,3027.95,180170000,3027.95
+1991-06-03,3027.50,3057.47,3000.67,3035.33,173710000,3035.33
+1991-05-31,3000.45,3044.50,2972.94,3027.50,231680000,3027.50
+1991-05-30,2969.59,3022.81,2950.58,3000.45,234090000,3000.45
+1991-05-29,2958.86,2987.92,2940.74,2969.59,188150000,2969.59
+1991-05-28,2913.91,2965.12,2903.85,2958.86,161950000,2958.86
+1991-05-24,2900.04,2931.13,2893.78,2913.91,124500000,2913.91
+1991-05-23,2910.33,2935.38,2881.04,2900.04,173080000,2900.04
+1991-05-22,2906.08,2930.01,2881.93,2910.33,159310000,2910.33
+1991-05-21,2892.22,2931.80,2875.00,2906.08,186860000,2906.08
+1991-05-20,2886.63,2910.78,2872.76,2892.22,109510000,2892.22
+1991-05-17,2894.01,2908.54,2860.02,2886.63,174210000,2886.63
+1991-05-16,2865.38,2905.64,2863.82,2894.01,154460000,2894.01
+1991-05-15,2886.85,2901.83,2834.53,2865.38,193110000,2865.38
+1991-05-14,2922.85,2922.85,2870.08,2886.85,207910000,2886.85
+1991-05-13,2920.17,2945.44,2896.24,2924.42,129620000,2924.42
+1991-05-10,2971.15,2986.14,2906.08,2920.17,172730000,2920.17
+1991-05-09,2930.90,2983.68,2926.88,2971.15,180210000,2971.15
+1991-05-08,2917.49,2945.21,2898.70,2930.90,157240000,2930.90
+1991-05-07,2941.64,2962.66,2906.53,2917.49,153290000,2917.49
+1991-05-06,2938.86,2956.84,2911.45,2941.64,128360000,2941.64
+1991-05-03,2938.61,2959.90,2906.93,2938.86,158160000,2938.86
+1991-05-02,2930.20,2966.34,2917.33,2938.61,187090000,2938.61
+1991-05-01,2887.87,2945.30,2882.43,2930.20,181900000,2930.20
+1991-04-30,2876.98,2929.21,2859.41,2887.87,204930000,2887.87
+1991-04-29,2912.38,2941.09,2869.55,2876.98,149860000,2876.98
+1991-04-26,2921.04,2934.90,2888.61,2912.38,154550000,2912.38
+1991-04-25,2949.51,2958.42,2905.20,2921.04,166940000,2921.04
+1991-04-24,2930.45,2965.10,2913.37,2949.51,166800000,2949.51
+1991-04-23,2927.72,2957.92,2905.94,2930.45,167840000,2930.45
+1991-04-22,2962.13,2962.13,2911.63,2927.72,164410000,2927.72
+1991-04-19,2999.26,3000.25,2943.56,2965.59,195510000,2965.59
+1991-04-18,3004.46,3027.72,2976.24,2999.26,217410000,2999.26
+1991-04-17,2986.88,3030.45,2963.12,3004.46,246930000,3004.46
+1991-04-16,2933.17,2995.79,2912.13,2986.88,214480000,2986.88
+1991-04-15,2920.79,2957.18,2896.29,2933.17,161800000,2933.17
+1991-04-12,2905.45,2946.53,2884.16,2920.79,198610000,2920.79
+1991-04-11,2877.72,2937.62,2877.72,2905.45,196570000,2905.45
+1991-04-10,2873.02,2902.48,2848.51,2874.50,167940000,2874.50
+1991-04-09,2918.56,2932.42,2863.36,2873.02,169940000,2873.02
+1991-04-08,2896.78,2929.21,2877.72,2918.56,138580000,2918.56
+1991-04-05,2924.50,2949.26,2876.98,2896.78,187410000,2896.78
+1991-04-04,2926.73,2959.41,2899.75,2924.50,198120000,2924.50
+1991-04-03,2945.05,2970.54,2915.84,2926.73,213720000,2926.73
+1991-04-02,2881.19,2951.98,2878.22,2945.05,189530000,2945.05
+1991-04-01,2913.86,2919.31,2868.32,2881.19,144010000,2881.19
+1991-03-28,2917.57,2942.08,2893.32,2913.86,150750000,2913.86
+1991-03-27,2914.85,2956.93,2886.14,2917.57,201830000,2917.57
+1991-03-26,2865.84,2924.01,2848.02,2914.85,198720000,2914.85
+1991-03-25,2858.91,2897.52,2837.87,2865.84,153920000,2865.84
+1991-03-22,2855.45,2879.95,2829.21,2858.91,160890000,2858.91
+1991-03-21,2872.03,2907.92,2841.58,2855.45,199830000,2855.45
+1991-03-20,2867.82,2897.03,2840.84,2872.03,196810000,2872.03
+1991-03-19,2908.17,2908.17,2840.84,2867.82,177070000,2867.82
+1991-03-18,2948.27,2960.64,2899.75,2929.95,163100000,2929.95
+1991-03-15,2952.23,2966.58,2918.81,2948.27,237660000,2948.27
+1991-03-14,2955.20,3000.00,2925.74,2952.23,231000000,2952.23
+1991-03-13,2922.52,2967.82,2910.89,2955.20,176000000,2955.20
+1991-03-12,2939.36,2962.13,2906.68,2922.52,176440000,2922.52
+1991-03-11,2955.20,2975.50,2923.27,2939.36,161600000,2939.36
+1991-03-08,2963.37,3003.47,2934.90,2955.20,206850000,2955.20
+1991-03-07,2973.27,2998.51,2948.51,2963.37,197060000,2963.37
+1991-03-06,2972.52,3017.82,2957.67,2973.27,262290000,2973.27
+1991-03-05,2914.11,2995.54,2913.86,2972.52,253700000,2972.52
+1991-03-04,2909.90,2950.74,2897.03,2914.11,199830000,2914.11
+1991-03-01,2882.18,2923.51,2846.78,2909.90,221510000,2909.90
+1991-02-28,2889.11,2923.51,2858.42,2882.18,223010000,2882.18
+1991-02-27,2864.60,2915.35,2839.85,2889.11,211410000,2889.11
+1991-02-26,2887.87,2895.30,2840.10,2864.60,164170000,2864.60
+1991-02-25,2889.36,2935.89,2865.35,2887.87,193820000,2887.87
+1991-02-22,2891.83,2945.79,2860.40,2889.36,218760000,2889.36
+1991-02-21,2899.01,2927.72,2871.29,2891.83,180770000,2891.83
+1991-02-20,2923.76,2923.76,2879.46,2899.01,185680000,2899.01
+1991-02-19,2934.65,2955.20,2895.30,2932.18,189900000,2932.18
+1991-02-15,2877.23,2947.28,2868.07,2934.65,222370000,2934.65
+1991-02-14,2909.16,2942.08,2852.48,2877.23,230750000,2877.23
+1991-02-13,2874.75,2918.32,2848.51,2909.16,209960000,2909.16
+1991-02-12,2902.23,2923.02,2848.27,2874.75,256160000,2874.75
+1991-02-11,2830.69,2910.64,2822.52,2902.23,265930000,2902.23
+1991-02-08,2810.64,2847.28,2787.13,2830.69,187830000,2830.69
+1991-02-07,2830.94,2875.50,2790.59,2810.64,292190000,2810.64
+1991-02-06,2788.37,2844.80,2760.15,2830.94,276940000,2830.94
+1991-02-05,2772.28,2805.20,2742.82,2788.37,290570000,2788.37
+1991-02-04,2730.69,2791.83,2714.85,2772.28,250750000,2772.28
+1991-02-01,2736.39,2764.60,2694.31,2730.69,246670000,2730.69
+1991-01-31,2713.12,2747.28,2691.58,2736.39,204240000,2736.39
+1991-01-30,2662.62,2725.99,2654.70,2713.12,226790000,2713.12
+1991-01-29,2654.46,2677.23,2627.23,2662.62,155740000,2662.62
+1991-01-28,2659.41,2688.61,2635.15,2654.46,141270000,2654.46
+1991-01-25,2643.07,2679.46,2623.27,2659.41,194350000,2659.41
+1991-01-24,2619.06,2667.33,2615.10,2643.07,223150000,2643.07
+1991-01-23,2603.22,2645.54,2584.65,2619.06,169440000,2619.06
+1991-01-22,2629.21,2645.05,2586.39,2603.22,175590000,2603.22
+1991-01-21,2646.29,2646.29,2602.97,2629.21,136290000,2629.21
+1991-01-18,2623.51,2663.37,2600.25,2646.78,226770000,2646.78
+1991-01-17,2571.78,2635.40,2571.78,2623.51,318890000,2623.51
+1991-01-16,2490.59,2525.25,2475.99,2508.91,134560000,2508.91
+1991-01-15,2483.91,2504.46,2470.05,2490.59,109980000,2490.59
+1991-01-14,2500.99,2500.99,2447.03,2483.91,120830000,2483.91
+1991-01-11,2498.76,2516.09,2472.77,2501.49,123050000,2501.49
+1991-01-10,2470.30,2512.13,2467.08,2498.76,124510000,2498.76
+1991-01-09,2509.41,2562.38,2456.19,2470.30,191100000,2470.30
+1991-01-08,2522.77,2544.06,2493.07,2509.41,143390000,2509.41
+1991-01-07,2563.37,2563.37,2514.11,2522.77,130610000,2522.77
+1991-01-04,2573.51,2601.98,2540.84,2566.09,140820000,2566.09
+1991-01-03,2610.64,2622.28,2567.57,2573.51,141450000,2573.51
+1991-01-02,2633.66,2651.73,2600.99,2610.64,126280000,2610.64
+1990-12-31,2629.21,2641.09,2611.14,2633.66,114130000,2633.66
+1990-12-28,2625.50,2639.11,2607.92,2629.21,111030000,2629.21
+1990-12-27,2637.13,2652.23,2616.58,2625.50,102900000,2625.50
+1990-12-26,2621.29,2653.96,2613.37,2637.13,78730000,2637.13
+1990-12-24,2633.66,2638.12,2609.65,2621.29,57200000,2621.29
+1990-12-21,2629.46,2662.62,2619.55,2633.66,233400000,2633.66
+1990-12-20,2626.73,2645.81,2591.58,2629.46,174700000,2629.46
+1990-12-19,2626.73,2648.51,2602.48,2626.73,180380000,2626.73
+1990-12-18,2593.32,2639.36,2583.17,2626.73,176460000,2626.73
+1990-12-17,2593.81,2600.74,2563.61,2593.32,118560000,2593.32
+1990-12-14,2614.36,2617.82,2572.03,2593.81,150880000,2593.81
+1990-12-13,2622.28,2640.59,2598.76,2614.36,162110000,2614.36
+1990-12-12,2586.14,2630.69,2578.22,2622.28,182270000,2622.28
+1990-12-11,2596.78,2606.93,2565.59,2586.14,145330000,2586.14
+1990-12-10,2590.10,2609.40,2566.58,2596.78,138650000,2596.78
+1990-12-07,2602.48,2618.07,2571.78,2590.10,164950000,2590.10
+1990-12-06,2610.40,2656.44,2589.36,2602.48,256380000,2602.48
+1990-12-05,2579.70,2615.84,2558.42,2610.40,205820000,2610.40
+1990-12-04,2565.59,2592.08,2534.65,2579.70,185820000,2579.70
+1990-12-03,2559.65,2589.60,2543.56,2565.59,177010000,2565.59
+1990-11-30,2518.81,2577.23,2498.51,2559.65,192350000,2559.65
+1990-11-29,2535.15,2544.31,2501.23,2518.81,140920000,2518.81
+1990-11-28,2543.81,2564.60,2521.04,2535.15,145490000,2535.15
+1990-11-27,2533.17,2562.62,2516.09,2543.81,147590000,2543.81
+1990-11-26,2527.23,2541.58,2489.85,2533.17,131540000,2533.17
+1990-11-23,2539.36,2557.92,2521.04,2527.23,63350000,2527.23
+1990-11-21,2530.20,2552.23,2502.72,2539.36,140660000,2539.36
+1990-11-20,2565.35,2574.50,2524.01,2530.20,161170000,2530.20
+1990-11-19,2550.25,2580.69,2543.07,2565.35,140950000,2565.35
+1990-11-16,2545.05,2570.79,2522.28,2550.25,165440000,2550.25
+1990-11-15,2559.65,2567.33,2528.71,2545.05,151370000,2545.05
+1990-11-14,2535.40,2581.19,2522.77,2559.65,179310000,2559.65
+1990-11-13,2540.35,2559.90,2512.38,2535.40,160240000,2535.40
+1990-11-12,2490.10,2550.99,2490.10,2540.35,161390000,2540.35
+1990-11-09,2443.81,2500.74,2438.61,2488.61,145160000,2488.61
+1990-11-08,2440.84,2468.81,2415.84,2443.81,155570000,2443.81
+1990-11-07,2485.15,2490.35,2430.94,2440.84,149130000,2440.84
+1990-11-06,2502.23,2516.83,2471.53,2485.15,141130000,2485.15
+1990-11-05,2490.84,2519.06,2472.77,2502.23,147510000,2502.23
+1990-11-02,2454.95,2501.73,2447.28,2490.84,168700000,2490.84
+1990-11-01,2442.33,2473.02,2415.59,2454.95,159270000,2454.95
+1990-10-31,2448.02,2475.99,2419.55,2442.33,156060000,2442.33
+1990-10-30,2430.20,2462.87,2400.50,2448.02,153450000,2448.02
+1990-10-29,2436.14,2470.30,2407.67,2430.20,133980000,2430.20
+1990-10-26,2482.18,2482.18,2429.21,2436.14,130190000,2436.14
+1990-10-25,2504.21,2525.99,2464.11,2484.41,141460000,2484.41
+1990-10-24,2494.06,2523.02,2470.54,2504.21,149290000,2504.21
+1990-10-23,2516.09,2527.97,2480.20,2494.06,146300000,2494.06
+1990-10-22,2520.79,2535.40,2476.73,2516.09,152650000,2516.09
+1990-10-19,2453.47,2536.88,2453.47,2520.79,221480000,2520.79
+1990-10-18,2391.83,2461.63,2391.83,2452.72,204110000,2452.72
+1990-10-17,2381.19,2418.56,2358.17,2387.87,161260000,2387.87
+1990-10-16,2416.34,2434.41,2366.83,2381.19,149570000,2381.19
+1990-10-15,2398.02,2451.24,2354.95,2416.34,164980000,2416.34
+1990-10-12,2365.10,2428.71,2349.75,2398.02,187940000,2398.02
+1990-10-11,2407.92,2427.23,2344.31,2365.10,180060000,2365.10
+1990-10-10,2445.54,2472.03,2388.36,2407.92,167890000,2407.92
+1990-10-09,2514.60,2514.60,2437.87,2445.54,145610000,2445.54
+1990-10-08,2510.64,2548.02,2507.18,2523.76,99470000,2523.76
+1990-10-05,2516.83,2544.55,2453.47,2510.64,153380000,2510.64
+1990-10-04,2489.36,2528.22,2464.85,2516.83,145410000,2516.83
+1990-10-03,2505.20,2534.65,2470.79,2489.36,135490000,2489.36
+1990-10-02,2515.84,2565.35,2487.62,2505.20,188360000,2505.20
+1990-10-01,2452.48,2534.65,2446.53,2515.84,202210000,2515.84
+1990-09-28,2427.48,2465.59,2367.82,2452.48,201010000,2452.48
+1990-09-27,2459.65,2492.33,2396.29,2427.48,182690000,2427.48
+1990-09-26,2485.64,2496.04,2435.40,2459.65,155570000,2459.65
+1990-09-25,2452.97,2501.24,2437.38,2485.64,155940000,2485.64
+1990-09-24,2498.02,2498.02,2438.12,2452.97,162210000,2452.97
+1990-09-21,2518.32,2538.37,2479.95,2512.38,201050000,2512.38
+1990-09-20,2549.01,2549.01,2495.54,2518.32,145100000,2518.32
+1990-09-19,2571.29,2594.55,2534.41,2557.43,147530000,2557.43
+1990-09-18,2567.33,2587.87,2524.26,2571.29,141130000,2571.29
+1990-09-17,2564.11,2585.89,2537.13,2567.33,110600000,2567.33
+1990-09-14,2582.67,2585.15,2545.54,2564.11,133390000,2564.11
+1990-09-13,2625.74,2629.21,2570.54,2582.67,123370000,2582.67
+1990-09-12,2612.62,2639.11,2592.33,2625.74,129890000,2625.74
+1990-09-11,2615.59,2635.64,2586.88,2612.62,113220000,2612.62
+1990-09-10,2619.55,2665.35,2600.99,2615.59,119730000,2615.59
+1990-09-07,2596.29,2635.89,2577.72,2619.55,123800000,2619.55
+1990-09-06,2628.22,2633.17,2575.99,2596.29,125620000,2596.29
+1990-09-05,2613.37,2643.07,2588.61,2628.22,120610000,2628.22
+1990-09-04,2614.36,2618.07,2573.02,2613.37,92940000,2613.37
+1990-08-31,2593.32,2624.50,2569.31,2614.36,96480000,2614.36
+1990-08-30,2632.43,2641.34,2578.47,2593.32,120890000,2593.32
+1990-08-29,2614.85,2651.24,2596.53,2632.43,134240000,2632.43
+1990-08-28,2611.63,2629.95,2582.92,2614.85,127660000,2614.85
+1990-08-27,2590.59,2645.05,2590.59,2611.63,160150000,2611.63
+1990-08-24,2483.42,2555.69,2480.45,2532.92,199040000,2532.92
+1990-08-23,2539.60,2539.60,2459.41,2483.42,250440000,2483.42
+1990-08-22,2603.96,2630.69,2553.22,2560.15,175550000,2560.15
+1990-08-21,2645.53,2645.53,2566.09,2603.96,194630000,2603.96
+1990-08-20,2644.80,2679.21,2632.43,2656.44,129630000,2656.44
+1990-08-17,2679.21,2679.21,2598.02,2644.80,212560000,2644.80
+1990-08-16,2746.53,2746.53,2676.24,2681.44,138850000,2681.44
+1990-08-15,2747.77,2778.71,2736.38,2748.27,135210000,2748.27
+1990-08-14,2746.78,2773.02,2720.54,2747.77,130320000,2747.77
+1990-08-13,2716.58,2752.23,2676.73,2746.78,122820000,2746.78
+1990-08-10,2758.91,2763.61,2692.82,2716.58,145340000,2716.58
+1990-08-09,2734.90,2774.26,2716.58,2758.91,155810000,2758.91
+1990-08-08,2710.64,2763.37,2691.34,2734.90,190400000,2734.90
+1990-08-07,2716.34,2763.86,2676.24,2710.64,231580000,2710.64
+1990-08-06,2758.42,2758.42,2683.17,2716.34,240400000,2716.34
+1990-08-03,2863.86,2863.86,2722.03,2809.65,292360000,2809.65
+1990-08-02,2899.26,2903.71,2833.17,2864.60,253090000,2864.60
+1990-08-01,2905.20,2931.19,2875.00,2899.26,176810000,2899.26
+1990-07-31,2917.33,2940.10,2878.47,2905.20,173810000,2905.20
+1990-07-30,2898.51,2922.52,2861.14,2917.33,146470000,2917.33
+1990-07-27,2920.79,2938.36,2877.72,2898.51,149070000,2898.51
+1990-07-26,2930.94,2945.79,2888.12,2920.79,155040000,2920.79
+1990-07-25,2922.52,2946.53,2896.78,2930.94,163530000,2930.94
+1990-07-24,2904.70,2939.60,2866.83,2922.52,181920000,2922.52
+1990-07-23,2961.14,2961.39,2833.17,2904.70,209030000,2904.70
+1990-07-20,2993.81,3019.31,2953.71,2961.14,177810000,2961.14
+1990-07-19,2981.68,3006.19,2948.27,2993.81,161990000,2993.81
+1990-07-18,2999.75,3009.65,2963.61,2981.68,168760000,2981.68
+1990-07-17,2999.75,3024.26,2970.05,2999.75,176790000,2999.75
+1990-07-16,2980.20,3017.08,2971.78,2999.75,149450000,2999.75
+1990-07-13,2969.80,3012.38,2956.68,2980.20,215600000,2980.20
+1990-07-12,2932.67,2980.69,2917.82,2969.80,211510000,2969.80
+1990-07-11,2890.84,2942.33,2890.10,2932.67,162220000,2932.67
+1990-07-10,2914.11,2928.22,2882.18,2890.84,147630000,2890.84
+1990-07-09,2904.95,2927.97,2890.84,2914.11,119390000,2914.11
+1990-07-06,2879.21,2919.80,2867.57,2904.95,111730000,2904.95
+1990-07-05,2906.44,2906.44,2863.61,2879.21,128320000,2879.21
+1990-07-03,2899.26,2925.74,2891.09,2911.63,130050000,2911.63
+1990-07-02,2880.69,2908.66,2869.80,2899.26,130200000,2899.26
+1990-06-29,2878.71,2901.98,2865.84,2880.69,145510000,2880.69
+1990-06-28,2862.13,2896.04,2850.50,2878.71,136120000,2878.71
+1990-06-27,2842.33,2878.96,2821.53,2862.13,146620000,2862.13
+1990-06-26,2845.05,2882.92,2832.67,2842.33,141420000,2842.33
+1990-06-25,2857.18,2882.18,2834.90,2845.05,133100000,2845.05
+1990-06-22,2901.73,2931.93,2848.02,2857.18,172570000,2857.18
+1990-06-21,2895.30,2916.58,2870.05,2901.73,138570000,2901.73
+1990-06-20,2893.56,2914.60,2868.81,2895.30,137420000,2895.30
+1990-06-19,2882.18,2907.92,2866.58,2893.56,134930000,2893.56
+1990-06-18,2930.45,2930.45,2877.48,2882.18,133470000,2882.18
+1990-06-15,2928.22,2947.77,2902.72,2935.89,205130000,2935.89
+1990-06-14,2929.95,2943.56,2902.97,2928.22,135770000,2928.22
+1990-06-13,2933.42,2956.93,2910.15,2929.95,158910000,2929.95
+1990-06-12,2892.57,2947.52,2877.97,2933.42,157100000,2933.42
+1990-06-11,2862.38,2901.98,2852.97,2892.57,119550000,2892.57
+1990-06-08,2897.33,2908.50,2850.73,2862.38,142600000,2862.38
+1990-06-07,2911.65,2930.58,2880.34,2897.33,160360000,2897.33
+1990-06-06,2925.00,2936.65,2891.99,2911.65,164030000,2911.65
+1990-06-05,2935.19,2956.55,2911.89,2925.00,199720000,2925.00
+1990-06-04,2900.97,2943.69,2883.98,2935.19,175520000,2935.19
+1990-06-01,2876.66,2919.90,2868.69,2900.97,187860000,2900.97
+1990-05-31,2878.56,2900.62,2854.64,2876.66,165690000,2876.66
+1990-05-30,2870.49,2908.21,2853.89,2878.56,199540000,2878.56
+1990-05-29,2820.92,2876.19,2812.62,2870.49,137410000,2870.49
+1990-05-25,2855.55,2856.50,2806.69,2820.92,120250000,2820.92
+1990-05-24,2856.26,2878.08,2828.04,2855.55,155140000,2855.55
+1990-05-23,2852.23,2869.07,2824.95,2856.26,172330000,2856.26
+1990-05-22,2844.68,2877.13,2828.51,2852.23,203350000,2852.23
+1990-05-21,2819.91,2859.72,2802.08,2844.68,166280000,2844.68
+1990-05-18,2831.71,2838.43,2804.63,2819.91,162520000,2819.91
+1990-05-17,2819.68,2856.25,2811.57,2831.71,164770000,2831.71
+1990-05-16,2822.45,2841.44,2800.23,2819.68,159810000,2819.68
+1990-05-15,2821.53,2840.74,2798.15,2822.45,165730000,2822.45
+1990-05-14,2801.58,2857.87,2793.75,2821.53,225410000,2821.53
+1990-05-11,2743.02,2810.36,2743.02,2801.58,234040000,2801.58
+1990-05-10,2732.88,2755.63,2716.44,2738.51,158460000,2738.51
+1990-05-09,2733.56,2745.50,2710.14,2732.88,152220000,2732.88
+1990-05-08,2721.62,2739.41,2710.36,2733.56,144230000,2733.56
+1990-05-07,2710.36,2739.19,2698.87,2721.62,132760000,2721.62
+1990-05-04,2696.17,2718.92,2682.43,2710.36,140550000,2710.36
+1990-05-03,2689.64,2716.22,2682.88,2696.17,145560000,2696.17
+1990-05-02,2668.92,2697.30,2659.01,2689.64,141610000,2689.64
+1990-05-01,2656.76,2687.39,2651.35,2668.92,149020000,2668.92
+1990-04-30,2645.05,2667.79,2627.70,2656.76,122750000,2656.76
+1990-04-27,2676.58,2687.39,2639.19,2645.05,130630000,2645.05
+1990-04-26,2666.44,2691.89,2650.22,2676.58,141330000,2676.58
+1990-04-25,2654.50,2685.36,2649.32,2666.44,133480000,2666.44
+1990-04-24,2666.67,2686.04,2643.69,2654.50,137360000,2654.50
+1990-04-23,2690.77,2690.77,2650.90,2666.67,136150000,2666.67
+1990-04-20,2711.94,2722.07,2668.47,2695.95,174260000,2695.95
+1990-04-19,2732.88,2742.12,2700.00,2711.94,152930000,2711.94
+1990-04-18,2765.77,2775.68,2722.75,2732.88,147130000,2732.88
+1990-04-17,2763.06,2774.77,2738.29,2765.77,127990000,2765.77
+1990-04-16,2751.80,2793.47,2748.87,2763.06,142810000,2763.06
+1990-04-12,2729.73,2763.96,2729.50,2751.80,142470000,2751.80
+1990-04-11,2731.08,2751.35,2713.29,2729.73,141080000,2729.73
+1990-04-10,2722.07,2741.67,2707.88,2731.08,136020000,2731.08
+1990-04-09,2717.12,2737.39,2701.35,2722.07,114970000,2722.07
+1990-04-06,2721.17,2732.43,2695.50,2717.12,137490000,2717.12
+1990-04-05,2719.37,2746.17,2709.01,2721.17,144170000,2721.17
+1990-04-04,2736.71,2755.86,2708.56,2719.37,159540000,2719.37
+1990-04-03,2700.45,2747.30,2699.55,2736.71,154310000,2736.71
+1990-04-02,2707.21,2708.78,2668.69,2700.45,124360000,2700.45
+1990-03-30,2727.70,2736.71,2692.34,2707.21,139340000,2707.21
+1990-03-29,2743.69,2753.38,2711.49,2727.70,132190000,2727.70
+1990-03-28,2736.94,2755.63,2716.21,2743.69,142300000,2743.69
+1990-03-27,2707.66,2738.96,2691.89,2736.94,131610000,2736.94
+1990-03-26,2704.28,2735.81,2697.97,2707.66,116110000,2707.66
+1990-03-23,2695.72,2722.75,2688.06,2704.28,132070000,2704.28
+1990-03-22,2727.93,2734.01,2674.32,2695.72,175930000,2695.72
+1990-03-21,2738.74,2759.68,2718.24,2727.93,130990000,2727.93
+1990-03-20,2755.63,2775.00,2724.10,2738.74,177320000,2738.74
+1990-03-19,2741.22,2761.71,2706.53,2755.63,142300000,2755.63
+1990-03-16,2699.32,2745.50,2699.32,2741.22,222520000,2741.22
+1990-03-15,2687.84,2714.86,2677.93,2695.72,144410000,2695.72
+1990-03-14,2674.55,2705.18,2662.39,2687.84,145060000,2687.84
+1990-03-13,2686.71,2699.55,2657.88,2674.55,145440000,2674.55
+1990-03-12,2683.33,2698.65,2661.94,2686.71,114790000,2686.71
+1990-03-09,2696.17,2705.63,2665.54,2683.33,150410000,2683.33
+1990-03-08,2669.59,2705.18,2661.26,2696.17,170900000,2696.17
+1990-03-07,2676.80,2696.85,2656.08,2669.59,163580000,2669.59
+1990-03-06,2649.55,2684.46,2638.06,2676.80,143640000,2676.80
+1990-03-05,2660.36,2675.22,2636.71,2649.55,140110000,2649.55
+1990-03-02,2635.59,2669.82,2630.18,2660.36,164330000,2660.36
+1990-03-01,2627.25,2655.63,2607.88,2635.59,157930000,2635.59
+1990-02-28,2617.12,2652.48,2603.60,2627.25,184410000,2627.25
+1990-02-27,2602.48,2637.84,2592.12,2617.12,152590000,2617.12
+1990-02-26,2564.19,2606.30,2560.13,2602.48,148910000,2602.48
+1990-02-23,2574.77,2591.44,2540.99,2564.19,148490000,2564.19
+1990-02-22,2583.56,2622.30,2568.02,2574.77,184320000,2574.77
+1990-02-21,2596.85,2602.48,2556.31,2583.56,159240000,2583.56
+1990-02-20,2619.14,2619.14,2579.05,2596.85,147300000,2596.85
+1990-02-16,2649.55,2669.37,2623.65,2635.59,166840000,2635.59
+1990-02-15,2624.32,2658.78,2614.86,2649.55,174630000,2649.55
+1990-02-14,2624.10,2643.69,2608.11,2624.32,138530000,2624.32
+1990-02-13,2619.14,2639.19,2592.57,2624.10,144490000,2624.10
+1990-02-12,2648.20,2652.48,2610.59,2619.14,118390000,2619.14
+1990-02-09,2644.37,2666.67,2628.15,2648.20,146910000,2648.20
+1990-02-08,2640.09,2674.32,2622.30,2644.37,176240000,2644.37
+1990-02-07,2606.31,2651.35,2579.28,2640.09,186710000,2640.09
+1990-02-06,2622.52,2629.50,2588.29,2606.31,134070000,2606.31
+1990-02-05,2602.70,2633.56,2592.12,2622.52,130950000,2622.52
+1990-02-02,2586.26,2623.65,2577.03,2602.70,164400000,2602.70
+1990-02-01,2590.54,2611.49,2571.85,2586.26,154580000,2586.26
+1990-01-31,2546.85,2600.90,2546.85,2590.54,189660000,2590.54
+1990-01-30,2553.38,2576.13,2513.06,2543.24,186030000,2543.24
+1990-01-29,2559.23,2583.56,2522.97,2553.38,150770000,2553.38
+1990-01-26,2561.04,2591.67,2516.89,2559.23,198190000,2559.23
+1990-01-25,2604.50,2628.83,2546.17,2561.04,172270000,2561.04
+1990-01-24,2615.32,2619.59,2534.23,2604.50,207830000,2604.50
+1990-01-23,2600.45,2639.64,2584.01,2615.32,179300000,2615.32
+1990-01-22,2677.90,2683.33,2595.27,2600.45,148380000,2600.45
+1990-01-19,2666.38,2696.89,2657.85,2677.90,185590000,2677.90
+1990-01-18,2659.13,2678.11,2625.85,2666.38,178590000,2666.38
+1990-01-17,2692.62,2711.39,2643.77,2659.13,170470000,2659.13
+1990-01-16,2669.37,2698.38,2634.17,2692.62,186070000,2692.62
+1990-01-15,2689.21,2698.11,2656.36,2669.37,140590000,2669.37
+1990-01-12,2735.92,2735.92,2675.98,2689.21,183880000,2689.21
+1990-01-11,2750.64,2783.27,2748.29,2760.67,154390000,2760.67
+1990-01-10,2766.00,2772.82,2725.47,2750.64,175990000,2750.64
+1990-01-09,2794.37,2810.79,2760.03,2766.00,155210000,2766.00
+1990-01-08,2773.25,2803.97,2753.41,2794.37,140110000,2794.37
+1990-01-05,2796.08,2810.15,2758.11,2773.25,158530000,2773.25
+1990-01-04,2809.73,2821.46,2766.42,2796.08,177000000,2796.08
+1990-01-03,2810.15,2834.04,2786.26,2809.73,192330000,2809.73
+1990-01-02,2753.20,2811.65,2732.51,2810.15,162070000,2810.15
Index: /Dev/trunk/d3/examples/calendar/dji.html
===================================================================
--- /Dev/trunk/d3/examples/calendar/dji.html	(revision 76)
+++ /Dev/trunk/d3/examples/calendar/dji.html	(revision 76)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>DJI</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.csv.js"></script>
+    <script type="text/javascript" src="../../d3.time.js"></script>
+    <script type="text/javascript" src="calendar.js"></script>
+    <link type="text/css" rel="stylesheet" href="../../lib/colorbrewer/colorbrewer.css"/>
+    <link type="text/css" rel="stylesheet" href="calendar.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="dji.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/calendar/dji.js
===================================================================
--- /Dev/trunk/d3/examples/calendar/dji.js	(revision 76)
+++ /Dev/trunk/d3/examples/calendar/dji.js	(revision 76)
@@ -0,0 +1,61 @@
+var w = 960,
+    pw = 14,
+    z = ~~((w - pw * 2) / 53),
+    ph = z >> 1,
+    h = z * 7;
+
+var vis = d3.select("#chart")
+  .selectAll("svg")
+    .data(d3.range(1990, 2011))
+  .enter().append("svg:svg")
+    .attr("width", w)
+    .attr("height", h + ph * 2)
+    .attr("class", "RdYlGn")
+  .append("svg:g")
+    .attr("transform", "translate(" + pw + "," + ph + ")");
+
+vis.append("svg:text")
+    .attr("transform", "translate(-6," + h / 2 + ")rotate(-90)")
+    .attr("text-anchor", "middle")
+    .text(function(d) { return d; });
+
+vis.selectAll("rect.day")
+    .data(calendar.dates)
+  .enter().append("svg:rect")
+    .attr("x", function(d) { return d.week * z; })
+    .attr("y", function(d) { return d.day * z; })
+    .attr("class", "day")
+    .attr("width", z)
+    .attr("height", z);
+
+vis.selectAll("path.month")
+    .data(calendar.months)
+  .enter().append("svg:path")
+    .attr("class", "month")
+    .attr("d", function(d) {
+      return "M" + (d.firstWeek + 1) * z + "," + d.firstDay * z
+          + "H" + d.firstWeek * z
+          + "V" + 7 * z
+          + "H" + d.lastWeek * z
+          + "V" + (d.lastDay + 1) * z
+          + "H" + (d.lastWeek + 1) * z
+          + "V" + 0
+          + "H" + (d.firstWeek + 1) * z
+          + "Z";
+    });
+
+d3.csv("dji.csv", function(csv) {
+  var data = d3.nest()
+      .key(function(d) { return d.Date; })
+      .rollup(function(d) { return (d[0].Close - d[0].Open) / d[0].Open; })
+      .map(csv);
+
+  var color = d3.scale.quantize()
+      .domain([-.05, .05])
+      .range(d3.range(9));
+
+  vis.selectAll("rect.day")
+      .attr("class", function(d) { return "day q" + color(data[d.Date]) + "-9"; })
+    .append("svg:title")
+      .text(function(d) { return d.Date + ": " + (data[d.Date] * 100).toFixed(1) + "%"; });
+});
Index: /Dev/trunk/d3/examples/calendar/vix.csv
===================================================================
--- /Dev/trunk/d3/examples/calendar/vix.csv	(revision 76)
+++ /Dev/trunk/d3/examples/calendar/vix.csv	(revision 76)
@@ -0,0 +1,5231 @@
+Date,Open,High,Low,Close,Volume,Adj Close
+2010-10-04,23.63,24.34,23.30,23.53,000,23.53
+2010-10-01,22.90,23.67,22.46,22.50,000,22.50
+2010-09-30,22.85,24.52,22.39,23.70,000,23.70
+2010-09-29,23.14,23.45,22.72,23.25,000,23.25
+2010-09-28,22.92,24.28,22.40,22.60,000,22.60
+2010-09-27,22.58,22.75,21.97,22.54,000,22.54
+2010-09-24,22.61,22.61,21.71,21.71,000,21.71
+2010-09-23,23.91,24.06,22.56,23.87,000,23.87
+2010-09-22,22.56,23.19,21.91,22.51,000,22.51
+2010-09-21,21.54,22.59,21.42,22.35,000,22.35
+2010-09-20,22.47,22.58,21.25,21.50,000,21.50
+2010-09-17,21.65,22.56,21.63,22.01,000,22.01
+2010-09-16,22.65,22.83,21.71,21.72,000,21.72
+2010-09-15,22.55,22.80,22.10,22.10,000,22.10
+2010-09-14,21.69,21.97,20.85,21.56,000,21.56
+2010-09-13,21.06,22.05,20.93,21.21,000,21.21
+2010-09-10,22.64,22.87,21.76,21.99,000,21.99
+2010-09-09,22.22,23.24,22.14,22.81,000,22.81
+2010-09-08,23.51,23.56,22.92,23.25,000,23.25
+2010-09-07,22.77,23.94,22.77,23.80,000,23.80
+2010-09-03,21.99,22.78,21.24,21.31,000,21.31
+2010-09-02,24.23,24.31,23.15,23.19,000,23.19
+2010-09-01,25.13,25.13,23.86,23.89,000,23.89
+2010-08-31,27.58,27.83,25.93,26.05,000,26.05
+2010-08-30,25.88,27.21,25.41,27.21,000,27.21
+2010-08-27,26.50,28.11,24.41,24.45,000,24.45
+2010-08-26,26.45,27.55,25.86,27.37,000,27.37
+2010-08-25,28.30,28.92,26.46,26.70,000,26.70
+2010-08-24,27.91,28.77,26.32,27.46,000,27.46
+2010-08-23,25.97,25.97,24.62,25.66,000,25.66
+2010-08-20,26.73,27.00,25.49,25.49,000,25.49
+2010-08-19,24.48,26.78,24.26,26.44,000,26.44
+2010-08-18,24.30,25.23,23.40,24.59,000,24.59
+2010-08-17,24.72,24.89,23.71,24.33,000,24.33
+2010-08-16,27.41,28.10,25.38,26.10,000,26.10
+2010-08-13,26.08,26.26,25.45,26.24,000,26.24
+2010-08-12,27.21,27.21,25.18,25.73,000,25.73
+2010-08-11,24.96,26.10,24.96,25.39,000,25.39
+2010-08-10,23.30,24.24,22.17,22.37,000,22.37
+2010-08-09,21.85,22.87,21.36,22.14,000,22.14
+2010-08-06,23.34,23.89,21.72,21.74,000,21.74
+2010-08-05,23.04,23.13,22.07,22.10,000,22.10
+2010-08-04,22.69,23.69,22.16,22.21,000,22.21
+2010-08-03,22.44,23.06,21.98,22.63,000,22.63
+2010-08-02,23.07,23.24,21.74,22.01,000,22.01
+2010-07-30,25.47,27.32,23.35,23.50,000,23.50
+2010-07-29,23.40,25.54,23.04,24.13,000,24.13
+2010-07-28,23.93,24.54,22.24,24.25,000,24.25
+2010-07-27,21.89,23.57,21.86,23.19,000,23.19
+2010-07-26,24.37,24.61,22.70,22.73,000,22.73
+2010-07-23,24.79,25.17,23.32,23.47,000,23.47
+2010-07-22,24.37,24.85,23.72,24.63,000,24.63
+2010-07-21,23.61,26.63,23.59,25.64,000,25.64
+2010-07-20,27.35,27.40,23.79,23.93,000,23.93
+2010-07-19,27.02,27.30,25.12,25.97,000,25.97
+2010-07-16,25.77,28.16,25.71,26.25,000,26.25
+2010-07-15,25.08,27.24,24.74,25.14,000,25.14
+2010-07-14,24.61,25.80,24.18,24.89,000,24.89
+2010-07-13,23.29,24.57,23.12,24.56,000,24.56
+2010-07-12,24.66,25.14,23.53,24.43,000,24.43
+2010-07-09,25.35,25.67,24.37,24.98,000,24.98
+2010-07-08,26.50,27.42,24.22,25.71,000,25.71
+2010-07-07,29.56,29.56,26.84,26.84,000,26.84
+2010-07-06,28.82,31.15,27.96,29.65,000,29.65
+2010-07-02,31.71,31.88,29.35,30.12,000,30.12
+2010-07-01,34.41,37.58,32.72,32.86,000,32.86
+2010-06-30,33.95,34.63,31.74,34.54,000,34.54
+2010-06-29,31.22,35.39,31.22,34.13,000,34.13
+2010-06-28,29.20,29.90,28.47,29.00,000,29.00
+2010-06-25,29.64,30.41,28.07,28.53,000,28.53
+2010-06-24,27.61,30.27,27.53,29.74,000,29.74
+2010-06-23,26.93,28.55,26.54,26.91,000,26.91
+2010-06-22,25.14,27.05,24.41,27.05,000,27.05
+2010-06-21,22.90,25.64,22.87,24.88,000,24.88
+2010-06-18,24.87,24.88,23.30,23.95,000,23.95
+2010-06-17,25.59,26.64,25.05,25.05,000,25.05
+2010-06-16,26.72,26.72,25.34,25.92,000,25.92
+2010-06-15,27.68,27.84,25.68,25.87,000,25.87
+2010-06-14,27.94,28.72,26.98,28.58,000,28.58
+2010-06-11,31.79,31.79,28.60,28.79,000,28.79
+2010-06-10,31.00,31.77,29.69,30.57,000,30.57
+2010-06-09,32.33,34.12,30.23,33.73,000,33.73
+2010-06-08,36.53,37.38,33.36,33.70,000,33.70
+2010-06-07,35.66,36.80,34.43,36.57,000,36.57
+2010-06-04,32.93,36.12,31.81,35.48,000,35.48
+2010-06-03,29.65,31.20,29.12,29.46,000,29.46
+2010-06-02,34.39,34.57,29.94,30.17,000,30.17
+2010-06-01,34.87,35.68,31.82,35.54,000,35.54
+2010-05-28,30.23,33.30,29.53,32.07,000,32.07
+2010-05-27,30.24,31.03,29.54,29.68,000,29.68
+2010-05-26,32.54,35.02,29.39,35.02,000,35.02
+2010-05-25,43.15,43.74,34.59,34.61,000,34.61
+2010-05-24,41.74,41.74,35.57,38.32,000,38.32
+2010-05-21,47.66,48.20,38.95,40.10,000,40.10
+2010-05-20,41.79,46.37,40.30,45.79,000,45.79
+2010-05-19,34.65,38.42,33.07,35.32,000,35.32
+2010-05-18,28.67,34.17,28.09,33.55,000,33.55
+2010-05-17,31.33,35.25,30.76,30.84,000,30.84
+2010-05-14,28.40,33.24,28.40,31.24,000,31.24
+2010-05-13,26.17,26.85,24.30,26.68,000,26.68
+2010-05-12,26.56,26.67,24.98,25.52,000,25.52
+2010-05-11,31.04,31.04,25.86,28.32,000,28.32
+2010-05-10,28.65,30.89,25.68,28.84,000,28.84
+2010-05-07,32.76,42.15,31.71,40.95,000,40.95
+2010-05-06,25.88,40.71,24.43,32.80,000,32.80
+2010-05-05,25.96,27.23,23.75,24.91,000,24.91
+2010-05-04,22.46,25.70,22.46,23.84,000,23.84
+2010-05-03,22.41,22.41,19.61,20.19,000,20.19
+2010-04-30,18.75,22.39,18.41,22.05,000,22.05
+2010-04-29,20.37,20.37,18.44,18.44,000,18.44
+2010-04-28,22.08,23.03,20.86,21.08,000,21.08
+2010-04-27,18.13,23.20,17.94,22.81,000,22.81
+2010-04-26,17.52,17.53,17.07,17.47,000,17.47
+2010-04-23,16.62,16.71,16.12,16.62,000,16.62
+2010-04-22,17.48,18.19,16.20,16.47,000,16.47
+2010-04-21,15.94,16.85,15.50,16.32,000,16.32
+2010-04-20,16.84,16.89,15.73,15.73,000,15.73
+2010-04-19,19.14,19.55,17.34,17.34,000,17.34
+2010-04-16,16.19,19.70,16.11,18.36,000,18.36
+2010-04-15,15.87,16.50,15.68,15.89,000,15.89
+2010-04-14,15.80,16.38,15.55,15.59,000,15.59
+2010-04-13,15.98,16.77,15.81,16.20,000,16.20
+2010-04-12,15.67,16.00,15.23,15.58,000,15.58
+2010-04-09,16.32,16.65,16.06,16.14,000,16.14
+2010-04-08,17.21,17.80,16.30,16.48,000,16.48
+2010-04-07,16.72,17.21,16.16,16.62,000,16.62
+2010-04-06,17.39,17.54,16.08,16.23,000,16.23
+2010-04-05,17.96,18.16,17.02,17.02,000,17.02
+2010-04-01,17.01,18.09,16.79,17.47,000,17.47
+2010-03-31,17.66,17.92,17.29,17.59,000,17.59
+2010-03-30,17.64,18.08,17.13,17.13,000,17.13
+2010-03-29,18.17,18.28,17.57,17.59,000,17.59
+2010-03-26,18.27,18.69,17.35,17.77,000,17.77
+2010-03-25,17.07,18.54,16.62,18.40,000,18.40
+2010-03-24,16.85,17.92,16.83,17.55,000,17.55
+2010-03-23,16.84,17.09,16.21,16.35,000,16.35
+2010-03-22,18.30,18.34,16.77,16.87,000,16.87
+2010-03-19,16.17,17.57,16.17,16.97,000,16.97
+2010-03-18,16.96,16.99,16.31,16.62,000,16.62
+2010-03-17,16.97,17.17,16.52,16.91,000,16.91
+2010-03-16,17.78,18.01,17.42,17.69,000,17.69
+2010-03-15,18.28,18.78,17.96,18.00,000,18.00
+2010-03-12,17.97,18.53,17.58,17.58,000,17.58
+2010-03-11,18.90,19.34,18.06,18.06,000,18.06
+2010-03-10,18.00,18.60,17.43,18.57,000,18.57
+2010-03-09,18.18,18.19,17.51,17.92,000,17.92
+2010-03-08,17.95,17.96,17.56,17.79,000,17.79
+2010-03-05,18.06,18.15,17.23,17.42,000,17.42
+2010-03-04,18.86,19.27,18.58,18.72,000,18.72
+2010-03-03,18.95,19.30,18.42,18.83,000,18.83
+2010-03-02,18.83,19.36,18.60,19.06,000,19.06
+2010-03-01,19.93,19.94,19.18,19.26,000,19.26
+2010-02-26,19.88,20.53,19.32,19.50,000,19.50
+2010-02-25,22.03,22.68,20.06,20.10,000,20.10
+2010-02-24,21.23,21.58,20.22,20.27,000,20.27
+2010-02-23,20.39,21.94,20.06,21.37,000,21.37
+2010-02-22,20.16,21.00,19.59,19.94,000,19.94
+2010-02-19,21.07,21.14,19.71,20.02,000,20.02
+2010-02-18,21.72,22.21,20.60,20.63,000,20.63
+2010-02-17,22.47,22.60,21.70,21.72,000,21.72
+2010-02-16,23.51,23.57,22.13,22.25,000,22.25
+2010-02-12,23.96,25.54,22.73,22.73,000,22.73
+2010-02-11,25.82,26.11,23.87,23.96,000,23.96
+2010-02-10,26.36,26.77,24.80,25.40,000,25.40
+2010-02-09,26.51,26.56,24.78,26.00,000,26.00
+2010-02-08,26.11,27.11,25.48,26.51,000,26.51
+2010-02-05,25.69,29.22,25.37,26.11,000,26.11
+2010-02-04,22.63,26.32,22.63,26.08,000,26.08
+2010-02-03,22.11,22.11,21.33,21.60,000,21.60
+2010-02-02,22.59,22.99,21.08,21.48,000,21.48
+2010-02-01,24.33,24.33,22.58,22.59,000,22.59
+2010-01-29,23.73,25.03,22.11,24.62,000,24.62
+2010-01-28,22.79,25.30,22.69,23.73,000,23.73
+2010-01-27,24.81,25.69,23.14,23.14,000,23.14
+2010-01-26,26.03,26.22,22.77,24.55,000,24.55
+2010-01-25,27.32,27.32,24.61,25.41,000,25.41
+2010-01-22,22.27,28.01,22.27,27.31,000,27.31
+2010-01-21,18.59,22.30,18.27,22.27,000,22.27
+2010-01-20,18.51,19.69,18.44,18.68,000,18.68
+2010-01-19,18.63,18.85,17.33,17.58,000,17.58
+2010-01-15,17.63,19.02,17.63,17.91,000,17.91
+2010-01-14,18.16,18.27,17.38,17.63,000,17.63
+2010-01-13,17.94,18.72,17.56,17.85,000,17.85
+2010-01-12,17.95,19.46,17.95,18.25,000,18.25
+2010-01-11,16.93,17.74,16.86,17.55,000,17.55
+2010-01-08,19.27,19.27,18.11,18.13,000,18.13
+2010-01-07,19.68,19.71,18.70,19.06,000,19.06
+2010-01-06,19.59,19.68,18.77,19.16,000,19.16
+2010-01-05,20.05,20.13,19.34,19.35,000,19.35
+2010-01-04,21.68,21.68,20.03,20.04,000,20.04
+2009-12-31,19.96,21.83,19.89,21.68,000,21.68
+2009-12-30,20.36,20.44,19.93,19.96,000,19.96
+2009-12-29,19.87,20.12,19.62,20.01,000,20.01
+2009-12-28,20.29,20.53,19.90,19.93,000,19.93
+2009-12-24,19.67,19.67,19.25,19.47,000,19.47
+2009-12-23,19.54,19.97,19.35,19.71,000,19.71
+2009-12-22,20.39,20.40,19.54,19.54,000,19.54
+2009-12-21,21.46,21.51,20.28,20.49,000,20.49
+2009-12-18,21.84,23.02,21.68,21.68,000,21.68
+2009-12-17,21.89,22.86,21.40,22.57,000,22.57
+2009-12-16,21.50,21.50,20.46,20.54,000,20.54
+2009-12-15,21.09,21.87,20.91,21.50,000,21.50
+2009-12-14,21.59,21.59,20.57,21.15,000,21.15
+2009-12-11,21.45,22.31,21.39,21.59,000,21.59
+2009-12-10,22.66,22.66,21.77,22.32,000,22.32
+2009-12-09,23.21,24.20,22.54,22.66,000,22.66
+2009-12-08,23.28,23.97,22.84,23.69,000,23.69
+2009-12-07,22.32,22.46,21.60,22.10,000,22.10
+2009-12-04,21.18,22.76,20.62,21.25,000,21.25
+2009-12-03,21.15,22.50,20.61,22.46,000,22.46
+2009-12-02,21.89,22.19,21.01,21.12,000,21.12
+2009-12-01,24.51,24.51,21.88,21.92,000,21.92
+2009-11-30,24.95,25.57,24.19,24.51,000,24.51
+2009-11-27,25.75,25.93,23.12,24.74,000,24.74
+2009-11-25,20.23,20.57,20.05,20.48,000,20.48
+2009-11-24,21.28,21.87,20.35,20.47,000,20.47
+2009-11-23,21.98,21.98,20.90,21.16,000,21.16
+2009-11-20,23.45,23.45,22.14,22.19,000,22.19
+2009-11-19,21.63,24.20,21.63,22.63,000,22.63
+2009-11-18,22.35,22.65,21.63,21.63,000,21.63
+2009-11-17,22.81,23.33,22.27,22.41,000,22.41
+2009-11-16,23.36,23.42,22.02,22.89,000,22.89
+2009-11-13,24.25,24.43,23.22,23.36,000,23.36
+2009-11-12,23.04,24.61,22.91,24.24,000,24.24
+2009-11-11,22.84,23.68,21.61,23.00,000,23.00
+2009-11-10,23.15,23.53,22.78,22.84,000,22.84
+2009-11-09,24.19,24.24,22.78,23.15,000,23.15
+2009-11-06,26.17,26.17,24.06,24.19,000,24.19
+2009-11-05,27.28,27.39,25.41,25.43,000,25.43
+2009-11-04,28.81,28.81,26.61,27.72,000,27.72
+2009-11-03,30.62,30.80,28.77,28.81,000,28.81
+2009-11-02,30.70,31.84,28.07,29.78,000,29.78
+2009-10-30,24.76,31.59,24.76,30.69,000,30.69
+2009-10-29,27.16,27.19,24.68,24.76,000,24.76
+2009-10-28,24.83,27.94,24.83,27.91,000,27.91
+2009-10-27,24.38,25.22,24.03,24.83,000,24.83
+2009-10-26,23.06,24.86,21.89,24.31,000,24.31
+2009-10-23,20.70,22.59,20.34,22.27,000,22.27
+2009-10-22,22.22,22.77,20.33,20.69,000,20.69
+2009-10-21,20.90,22.48,20.10,22.22,000,22.22
+2009-10-20,21.55,21.76,20.90,20.90,000,20.90
+2009-10-19,21.41,22.46,20.91,21.49,000,21.49
+2009-10-16,21.72,22.60,20.98,21.43,000,21.43
+2009-10-15,23.51,23.53,21.49,21.72,000,21.72
+2009-10-14,22.08,22.89,21.55,22.86,000,22.86
+2009-10-13,23.00,24.07,22.74,22.99,000,22.99
+2009-10-12,23.12,23.53,22.67,23.01,000,23.01
+2009-10-09,24.39,24.54,22.99,23.12,000,23.12
+2009-10-08,24.68,24.69,23.90,24.18,000,24.18
+2009-10-07,25.78,25.82,24.57,24.68,000,24.68
+2009-10-06,26.39,26.41,25.19,25.70,000,25.70
+2009-10-05,29.34,29.34,26.57,26.84,000,26.84
+2009-10-02,29.34,29.56,27.98,28.68,000,28.68
+2009-10-01,25.98,28.42,25.98,28.27,000,28.27
+2009-09-30,25.19,26.45,24.76,25.61,000,25.61
+2009-09-29,24.88,25.28,24.54,25.19,000,25.19
+2009-09-28,26.26,26.40,24.85,24.88,000,24.88
+2009-09-25,25.18,26.34,24.81,25.61,000,25.61
+2009-09-24,23.67,25.37,23.44,24.95,000,24.95
+2009-09-23,22.90,23.69,22.19,23.49,000,23.49
+2009-09-22,23.81,23.98,23.06,23.08,000,23.08
+2009-09-21,25.34,25.51,23.71,24.06,000,24.06
+2009-09-18,23.65,24.43,23.14,23.92,000,23.92
+2009-09-17,23.99,24.07,22.79,23.65,000,23.65
+2009-09-16,23.29,23.92,22.78,23.69,000,23.69
+2009-09-15,23.90,24.27,23.07,23.42,000,23.42
+2009-09-14,25.39,25.39,23.32,23.86,000,23.86
+2009-09-11,23.49,24.33,22.48,24.15,000,24.15
+2009-09-10,24.40,24.76,22.82,23.55,000,23.55
+2009-09-09,25.66,25.93,24.23,24.32,000,24.32
+2009-09-08,25.26,26.15,25.26,25.62,000,25.62
+2009-09-04,26.98,26.98,24.86,25.26,000,25.26
+2009-09-03,28.90,28.90,26.98,27.10,000,27.10
+2009-09-02,29.14,29.57,28.41,28.90,000,28.90
+2009-09-01,26.01,29.23,26.00,29.15,000,29.15
+2009-08-31,24.76,27.01,24.76,26.01,000,26.01
+2009-08-28,24.44,25.50,24.28,24.76,000,24.76
+2009-08-27,25.13,25.89,24.43,24.68,000,24.68
+2009-08-26,24.91,25.56,24.69,24.95,000,24.95
+2009-08-25,25.13,25.13,22.58,24.92,000,24.92
+2009-08-24,25.01,25.70,25.01,25.14,000,25.14
+2009-08-21,24.49,25.06,23.91,25.01,000,25.01
+2009-08-20,26.45,26.45,24.75,25.09,000,25.09
+2009-08-19,28.08,28.14,26.14,26.26,000,26.26
+2009-08-18,27.89,27.89,26.08,26.18,000,26.18
+2009-08-17,24.27,28.39,24.27,27.89,000,27.89
+2009-08-14,24.77,25.94,24.26,24.27,000,24.27
+2009-08-13,25.34,26.15,24.71,24.71,000,24.71
+2009-08-12,25.99,26.50,25.11,25.45,000,25.45
+2009-08-11,24.98,26.98,24.98,25.99,000,25.99
+2009-08-10,24.76,25.82,24.76,24.99,000,24.99
+2009-08-07,24.71,24.95,23.98,24.76,000,24.76
+2009-08-06,24.90,26.15,24.47,25.67,000,25.67
+2009-08-05,24.91,25.85,24.86,24.90,000,24.90
+2009-08-04,25.55,26.16,24.89,24.89,000,24.89
+2009-08-03,25.92,26.49,25.56,25.56,000,25.56
+2009-07-31,25.40,26.22,24.93,25.92,000,25.92
+2009-07-30,25.40,25.76,24.85,25.40,000,25.40
+2009-07-29,25.47,26.18,25.41,25.61,000,25.61
+2009-07-28,24.28,25.61,24.28,25.01,000,25.01
+2009-07-27,24.06,24.86,24.02,24.28,000,24.28
+2009-07-24,23.87,23.87,23.00,23.09,000,23.09
+2009-07-23,23.71,24.05,23.21,23.43,000,23.43
+2009-07-22,24.05,24.14,23.24,23.47,000,23.47
+2009-07-21,24.28,25.14,23.81,23.87,000,23.87
+2009-07-20,25.06,25.42,24.26,24.40,000,24.40
+2009-07-17,25.42,25.55,23.88,24.34,000,24.34
+2009-07-16,25.96,26.18,24.51,25.42,000,25.42
+2009-07-15,25.05,26.06,23.83,25.89,000,25.89
+2009-07-14,26.31,26.84,24.99,25.02,000,25.02
+2009-07-13,28.36,29.24,25.42,26.31,000,26.31
+2009-07-10,29.78,30.34,28.82,29.02,000,29.02
+2009-07-09,30.23,30.49,29.28,29.78,000,29.78
+2009-07-08,30.85,33.05,30.43,31.30,000,31.30
+2009-07-07,29.00,30.94,28.90,30.85,000,30.85
+2009-07-06,30.32,30.60,28.99,29.00,000,29.00
+2009-07-02,26.22,28.62,26.22,27.95,000,27.95
+2009-07-01,25.73,26.31,24.80,26.22,000,26.22
+2009-06-30,25.36,27.38,25.02,26.35,000,26.35
+2009-06-29,25.93,27.18,25.29,25.35,000,25.35
+2009-06-26,27.09,27.22,25.76,25.93,000,25.93
+2009-06-25,29.45,29.56,26.30,26.36,000,26.36
+2009-06-24,30.58,30.58,28.79,29.05,000,29.05
+2009-06-23,31.30,31.54,27.83,30.58,000,30.58
+2009-06-22,30.40,32.05,30.30,31.17,000,31.17
+2009-06-19,29.16,29.32,27.56,27.99,000,27.99
+2009-06-18,31.54,31.54,29.60,30.03,000,30.03
+2009-06-17,31.19,32.77,30.64,31.54,000,31.54
+2009-06-16,30.81,32.75,30.07,32.68,000,32.68
+2009-06-15,29.70,31.09,29.64,30.81,000,30.81
+2009-06-12,28.08,28.50,27.73,28.15,000,28.15
+2009-06-11,27.36,28.11,26.81,28.11,000,28.11
+2009-06-10,26.90,29.74,26.90,28.46,000,28.46
+2009-06-09,29.77,29.77,27.79,28.27,000,28.27
+2009-06-08,30.84,31.82,26.41,29.77,000,29.77
+2009-06-05,29.39,30.81,28.85,29.62,000,29.62
+2009-06-04,31.02,31.02,29.92,30.18,000,30.18
+2009-06-03,29.62,31.79,29.62,31.02,000,31.02
+2009-06-02,30.04,30.13,28.30,29.63,000,29.63
+2009-06-01,28.70,30.05,28.45,30.04,000,30.04
+2009-05-29,31.67,31.67,28.85,28.92,000,28.92
+2009-05-28,31.54,33.32,31.10,31.67,000,31.67
+2009-05-27,30.80,32.53,29.62,32.36,000,32.36
+2009-05-26,34.57,34.57,30.38,30.62,000,30.62
+2009-05-22,31.36,32.71,30.57,32.63,000,32.63
+2009-05-21,29.03,32.77,29.03,31.35,000,31.35
+2009-05-20,27.47,29.16,26.57,29.03,000,29.03
+2009-05-19,30.23,30.32,28.35,28.80,000,28.80
+2009-05-18,32.91,32.91,30.00,30.24,000,30.24
+2009-05-15,31.36,33.61,30.59,33.12,000,33.12
+2009-05-14,33.65,33.96,31.32,31.37,000,31.37
+2009-05-13,32.97,33.99,32.56,33.65,000,33.65
+2009-05-12,32.68,33.29,31.57,31.80,000,31.80
+2009-05-11,32.05,34.08,32.05,32.87,000,32.87
+2009-05-08,32.36,32.72,31.19,32.05,000,32.05
+2009-05-07,32.10,34.56,31.91,33.44,000,33.44
+2009-05-06,33.36,33.70,32.43,32.45,000,32.45
+2009-05-05,34.54,35.14,33.36,33.36,000,33.36
+2009-05-04,35.30,36.24,34.31,34.53,000,34.53
+2009-05-01,36.50,36.88,34.88,35.30,000,35.30
+2009-04-30,36.09,36.71,34.50,36.50,000,36.50
+2009-04-29,37.95,37.95,35.37,36.08,000,36.08
+2009-04-28,39.43,39.64,37.42,37.95,000,37.95
+2009-04-27,39.46,39.52,37.97,38.32,000,38.32
+2009-04-24,36.86,37.53,36.37,36.82,000,36.82
+2009-04-23,38.10,38.52,37.01,37.15,000,37.15
+2009-04-22,37.14,38.19,36.01,38.10,000,38.10
+2009-04-21,40.27,40.29,36.95,37.14,000,37.14
+2009-04-20,33.94,39.58,33.94,39.18,000,39.18
+2009-04-17,35.36,35.52,33.68,33.94,000,33.94
+2009-04-16,36.04,36.80,34.88,35.79,000,35.79
+2009-04-15,37.85,38.06,36.10,36.17,000,36.17
+2009-04-14,37.95,38.50,36.88,37.67,000,37.67
+2009-04-13,38.32,38.91,37.51,37.81,000,37.81
+2009-04-09,37.22,37.74,36.53,36.53,000,36.53
+2009-04-08,40.39,40.86,38.70,38.85,000,38.85
+2009-04-07,41.48,42.50,40.36,40.39,000,40.39
+2009-04-06,41.96,43.02,40.83,40.93,000,40.93
+2009-04-03,42.03,42.03,39.64,39.70,000,39.70
+2009-04-02,42.28,42.68,40.30,42.04,000,42.04
+2009-04-01,45.42,45.60,42.26,42.28,000,42.28
+2009-03-31,45.54,45.54,42.27,44.14,000,44.14
+2009-03-30,44.86,46.28,44.86,45.54,000,45.54
+2009-03-27,40.36,42.13,40.36,41.04,000,41.04
+2009-03-26,42.25,42.25,40.17,40.36,000,40.36
+2009-03-25,42.35,44.20,40.81,42.25,000,42.25
+2009-03-24,43.24,44.00,41.63,42.93,000,42.93
+2009-03-23,45.89,45.89,41.27,43.23,000,43.23
+2009-03-20,43.60,47.63,43.07,45.89,000,45.89
+2009-03-19,40.06,44.17,38.79,43.68,000,43.68
+2009-03-18,41.14,42.39,38.98,40.06,000,40.06
+2009-03-17,44.23,44.59,40.74,40.80,000,40.80
+2009-03-16,42.36,44.23,42.36,43.74,000,43.74
+2009-03-13,40.99,43.52,40.03,42.36,000,42.36
+2009-03-12,43.53,43.98,40.75,41.18,000,41.18
+2009-03-11,43.35,44.26,42.36,43.61,000,43.61
+2009-03-10,49.68,49.68,43.88,44.37,000,44.37
+2009-03-09,49.35,51.34,48.40,49.68,000,49.68
+2009-03-06,50.17,51.95,47.65,49.33,000,49.33
+2009-03-05,47.56,51.95,46.98,50.17,000,50.17
+2009-03-04,48.02,48.83,45.02,47.56,000,47.56
+2009-03-03,52.65,52.76,48.50,50.93,000,50.93
+2009-03-02,49.96,53.25,48.35,52.65,000,52.65
+2009-02-27,44.66,47.34,44.46,46.35,000,46.35
+2009-02-26,43.75,45.33,41.91,44.66,000,44.66
+2009-02-25,45.73,47.23,42.84,44.67,000,44.67
+2009-02-24,52.50,52.56,44.28,45.49,000,45.49
+2009-02-23,49.30,53.16,48.97,52.62,000,52.62
+2009-02-20,47.08,52.04,42.02,49.30,000,49.30
+2009-02-19,48.54,48.54,44.81,47.08,000,47.08
+2009-02-18,48.66,50.29,46.00,48.46,000,48.46
+2009-02-17,48.14,51.18,46.96,48.66,000,48.66
+2009-02-13,41.60,43.02,40.73,42.93,000,42.93
+2009-02-12,44.52,48.63,41.21,41.25,000,41.25
+2009-02-11,46.67,46.67,44.50,44.53,000,44.53
+2009-02-10,45.14,48.12,44.18,46.67,000,46.67
+2009-02-09,45.40,45.45,43.04,43.64,000,43.64
+2009-02-06,43.71,43.71,41.20,43.37,000,43.37
+2009-02-05,43.83,46.23,42.32,43.73,000,43.73
+2009-02-04,43.06,44.52,41.39,43.85,000,43.85
+2009-02-03,45.52,45.52,42.43,43.06,000,43.06
+2009-02-02,49.42,49.54,45.26,45.52,000,45.52
+2009-01-30,42.63,45.53,42.09,44.84,000,44.84
+2009-01-29,41.34,43.03,41.12,42.63,000,42.63
+2009-01-28,42.25,42.25,33.76,39.66,000,39.66
+2009-01-27,45.11,45.93,42.20,42.25,000,42.25
+2009-01-26,47.89,47.93,44.29,45.69,000,45.69
+2009-01-23,50.39,51.11,46.43,47.27,000,47.27
+2009-01-22,50.65,51.76,46.51,47.29,000,47.29
+2009-01-21,51.52,54.12,46.15,46.42,000,46.42
+2009-01-20,50.12,57.36,49.27,56.65,000,56.65
+2009-01-16,51.00,51.00,45.96,46.11,000,46.11
+2009-01-15,49.14,55.16,49.14,51.00,000,51.00
+2009-01-14,46.24,51.55,46.14,49.14,000,49.14
+2009-01-13,45.84,47.08,43.23,43.27,000,43.27
+2009-01-12,42.06,46.62,41.94,45.84,000,45.84
+2009-01-09,41.18,43.13,41.05,42.82,000,42.82
+2009-01-08,43.38,44.60,42.56,42.56,000,42.56
+2009-01-07,40.29,43.82,40.12,43.39,000,43.39
+2009-01-06,38.06,39.33,37.34,38.56,000,38.56
+2009-01-05,39.24,40.22,38.30,39.08,000,39.08
+2009-01-02,39.58,39.82,36.88,39.19,000,39.19
+2008-12-31,41.63,41.63,37.96,40.00,000,40.00
+2008-12-30,43.99,44.29,41.63,41.63,000,41.63
+2008-12-29,43.35,46.24,42.16,43.90,000,43.90
+2008-12-26,44.27,44.36,42.92,43.38,000,43.38
+2008-12-24,45.02,45.02,44.15,44.21,000,44.21
+2008-12-23,43.19,45.39,41.68,45.02,000,45.02
+2008-12-22,44.93,46.69,42.75,44.56,000,44.56
+2008-12-19,46.01,46.01,41.29,44.93,000,44.93
+2008-12-18,49.84,49.84,44.50,47.34,000,47.34
+2008-12-17,52.00,52.19,49.36,49.84,000,49.84
+2008-12-16,56.76,56.76,50.91,52.37,000,52.37
+2008-12-15,55.68,58.49,55.68,56.76,000,56.76
+2008-12-12,55.78,58.84,54.26,54.28,000,54.28
+2008-12-11,55.08,56.44,52.94,55.78,000,55.78
+2008-12-10,58.91,58.91,53.79,55.73,000,55.73
+2008-12-09,59.48,59.57,56.37,58.91,000,58.91
+2008-12-08,58.86,59.87,57.35,58.49,000,58.49
+2008-12-05,63.64,66.54,59.26,59.93,000,59.93
+2008-12-04,62.19,65.08,60.21,63.64,000,63.64
+2008-12-03,62.98,65.37,60.18,60.72,000,60.72
+2008-12-02,66.68,67.01,62.31,62.98,000,62.98
+2008-12-01,60.47,68.60,60.36,68.51,000,68.51
+2008-11-28,56.02,56.82,50.50,55.28,000,55.28
+2008-11-26,60.90,62.50,54.62,54.92,000,54.92
+2008-11-25,64.76,65.49,60.25,60.90,000,60.90
+2008-11-24,71.19,71.35,61.81,64.70,000,64.70
+2008-11-21,80.74,80.74,71.63,72.67,000,72.67
+2008-11-20,74.26,81.48,72.76,80.86,000,80.86
+2008-11-19,68.46,75.00,67.34,74.26,000,74.26
+2008-11-18,70.09,73.13,67.18,67.64,000,67.64
+2008-11-17,69.57,69.59,65.10,69.15,000,69.15
+2008-11-14,62.60,66.31,59.75,66.31,000,66.31
+2008-11-13,66.45,69.99,58.66,59.83,000,59.83
+2008-11-12,61.52,67.19,61.52,66.46,000,66.46
+2008-11-11,59.98,64.73,58.58,61.44,000,61.44
+2008-11-10,56.09,62.09,54.63,59.98,000,59.98
+2008-11-07,63.68,63.68,56.03,56.10,000,56.10
+2008-11-06,56.71,64.78,55.60,63.68,000,63.68
+2008-11-05,47.73,55.62,46.87,54.56,000,54.56
+2008-11-04,53.68,53.68,44.25,47.73,000,47.73
+2008-11-03,60.17,60.77,53.63,53.68,000,53.68
+2008-10-31,62.93,65.85,56.73,59.89,000,59.89
+2008-10-30,69.83,69.83,62.67,62.90,000,62.90
+2008-10-29,66.96,71.14,62.72,69.96,000,69.96
+2008-10-28,73.30,78.98,65.66,66.96,000,66.96
+2008-10-27,79.13,81.65,65.90,80.06,000,80.06
+2008-10-24,67.80,89.53,67.80,79.13,000,79.13
+2008-10-23,68.03,79.43,51.83,67.80,000,67.80
+2008-10-22,53.00,80.64,53.00,69.65,000,69.65
+2008-10-21,52.95,56.37,50.91,53.11,000,53.11
+2008-10-20,70.40,70.40,52.70,52.97,000,52.97
+2008-10-17,67.65,74.48,59.82,70.33,000,70.33
+2008-10-16,69.21,81.17,66.51,67.61,000,67.61
+2008-10-15,55.69,69.47,55.69,69.25,000,69.25
+2008-10-14,55.10,59.81,47.29,55.13,000,55.13
+2008-10-13,69.95,71.42,54.69,54.99,000,54.99
+2008-10-10,65.85,76.94,59.96,69.95,000,69.95
+2008-10-09,57.57,64.92,52.54,63.92,000,63.92
+2008-10-08,53.68,59.06,51.90,57.53,000,57.53
+2008-10-07,52.05,54.19,47.03,53.68,000,53.68
+2008-10-06,45.12,58.24,45.12,52.05,000,52.05
+2008-10-03,45.22,45.52,41.51,45.14,000,45.14
+2008-10-02,39.82,46.48,39.82,45.26,000,45.26
+2008-10-01,39.39,42.38,39.39,39.81,000,39.81
+2008-09-30,43.77,43.80,38.86,39.39,000,39.39
+2008-09-29,36.92,48.40,36.92,46.72,000,46.72
+2008-09-26,32.82,36.40,32.82,34.74,000,34.74
+2008-09-25,35.19,35.19,32.45,32.82,000,32.82
+2008-09-24,35.70,36.71,34.16,35.19,000,35.19
+2008-09-23,33.85,36.08,32.63,35.72,000,35.72
+2008-09-22,32.40,34.22,30.81,33.85,000,33.85
+2008-09-19,33.07,33.08,27.95,32.07,000,32.07
+2008-09-18,36.10,42.16,33.10,33.10,000,33.10
+2008-09-17,30.25,36.40,30.25,36.22,000,36.22
+2008-09-16,31.70,33.70,30.24,30.30,000,30.30
+2008-09-15,25.66,31.87,25.66,31.70,000,31.70
+2008-09-12,24.80,26.67,24.80,25.66,000,25.66
+2008-09-11,25.38,26.25,24.39,24.39,000,24.39
+2008-09-10,25.47,25.48,23.80,24.52,000,24.52
+2008-09-09,22.69,25.68,22.58,25.47,000,25.47
+2008-09-08,22.22,24.06,22.12,22.64,000,22.64
+2008-09-05,24.54,24.71,22.97,23.06,000,23.06
+2008-09-04,22.02,24.15,21.91,24.03,000,24.03
+2008-09-03,21.99,22.30,21.39,21.43,000,21.43
+2008-09-02,20.65,22.30,20.47,21.99,000,21.99
+2008-08-29,19.43,20.71,19.43,20.65,000,20.65
+2008-08-28,19.36,19.66,19.22,19.43,000,19.43
+2008-08-27,20.48,20.67,19.53,19.76,000,19.76
+2008-08-26,20.98,21.27,20.48,20.49,000,20.49
+2008-08-25,18.78,21.22,18.78,20.97,000,20.97
+2008-08-22,19.83,19.83,18.64,18.81,000,18.81
+2008-08-21,20.43,21.08,18.94,19.82,000,19.82
+2008-08-20,21.30,21.67,20.39,20.42,000,20.42
+2008-08-19,21.76,22.14,21.28,21.28,000,21.28
+2008-08-18,19.58,21.44,19.58,20.98,000,20.98
+2008-08-15,20.24,20.65,19.57,19.58,000,19.58
+2008-08-14,22.30,22.30,20.07,20.34,000,20.34
+2008-08-13,21.57,22.11,20.80,21.55,000,21.55
+2008-08-12,20.64,21.51,20.38,21.17,000,21.17
+2008-08-11,20.66,20.96,19.66,20.12,000,20.12
+2008-08-08,21.15,21.69,20.11,20.66,000,20.66
+2008-08-07,20.23,21.46,20.23,21.15,000,21.15
+2008-08-06,21.14,21.66,19.75,20.23,000,20.23
+2008-08-05,22.99,22.99,20.06,21.14,000,21.14
+2008-08-04,23.77,23.86,22.94,23.49,000,23.49
+2008-08-01,22.66,23.37,22.35,22.57,000,22.57
+2008-07-31,22.33,22.96,21.45,22.94,000,22.94
+2008-07-30,22.03,22.31,20.99,21.21,000,21.21
+2008-07-29,24.20,24.22,21.96,22.03,000,22.03
+2008-07-28,22.91,24.62,19.65,24.23,000,24.23
+2008-07-25,23.45,23.45,22.31,22.91,000,22.91
+2008-07-24,21.31,23.61,21.31,23.44,000,23.44
+2008-07-23,21.23,22.08,20.73,21.31,000,21.31
+2008-07-22,24.02,24.08,21.05,21.18,000,21.18
+2008-07-21,24.05,24.58,23.04,23.05,000,23.05
+2008-07-18,25.01,25.19,23.78,24.05,000,24.05
+2008-07-17,24.58,25.50,23.99,25.01,000,25.01
+2008-07-16,28.19,28.19,24.87,25.10,000,25.10
+2008-07-15,28.47,30.81,27.01,28.54,000,28.54
+2008-07-14,27.49,29.30,26.90,28.48,000,28.48
+2008-07-11,25.56,29.44,25.56,27.49,000,27.49
+2008-07-10,25.22,26.62,25.07,25.59,000,25.59
+2008-07-09,23.16,25.39,22.59,25.23,000,25.23
+2008-07-08,25.72,26.05,23.02,23.15,000,23.15
+2008-07-07,25.48,26.91,24.73,25.78,000,25.78
+2008-07-03,25.92,26.08,24.44,24.79,000,24.79
+2008-07-02,23.40,25.96,22.70,25.92,000,25.92
+2008-07-01,25.14,25.57,23.64,23.65,000,23.65
+2008-06-30,24.25,24.26,23.27,23.95,000,23.95
+2008-06-27,23.75,24.56,23.30,23.44,000,23.44
+2008-06-26,22.23,23.99,22.15,23.93,000,23.93
+2008-06-25,22.42,22.42,20.34,21.14,000,21.14
+2008-06-24,22.69,23.48,21.68,22.42,000,22.42
+2008-06-23,22.89,23.14,22.52,22.64,000,22.64
+2008-06-20,21.58,23.70,21.58,22.87,000,22.87
+2008-06-19,22.24,22.61,20.91,21.58,000,21.58
+2008-06-18,21.67,22.86,21.26,22.24,000,22.24
+2008-06-17,20.96,21.42,20.02,21.13,000,21.13
+2008-06-16,21.22,22.84,20.73,20.95,000,20.95
+2008-06-13,23.02,23.14,21.04,21.22,000,21.22
+2008-06-12,23.61,23.98,21.91,23.33,000,23.33
+2008-06-11,23.44,24.30,22.86,24.12,000,24.12
+2008-06-10,24.37,24.42,22.31,23.18,000,23.18
+2008-06-09,23.56,24.47,20.78,23.12,000,23.12
+2008-06-06,18.63,23.79,18.63,23.56,000,23.56
+2008-06-05,20.54,20.59,18.62,18.63,000,18.63
+2008-06-04,20.64,21.31,19.76,20.80,000,20.80
+2008-06-03,19.80,21.00,18.89,20.24,000,20.24
+2008-06-02,17.83,20.45,17.83,19.83,000,19.83
+2008-05-30,18.14,18.21,17.56,17.83,000,17.83
+2008-05-29,19.08,19.17,17.54,18.14,000,18.14
+2008-05-28,19.64,20.03,19.01,19.07,000,19.07
+2008-05-27,20.78,20.95,19.42,19.64,000,19.64
+2008-05-23,18.58,19.80,18.38,19.55,000,19.55
+2008-05-22,18.92,19.11,17.82,18.05,000,18.05
+2008-05-21,17.64,18.89,17.01,18.59,000,18.59
+2008-05-20,17.02,18.42,17.02,17.58,000,17.58
+2008-05-19,16.47,17.89,15.82,17.01,000,17.01
+2008-05-16,16.30,17.92,16.30,16.47,000,16.47
+2008-05-15,17.65,17.84,16.25,16.30,000,16.30
+2008-05-14,17.98,17.98,16.19,17.66,000,17.66
+2008-05-13,17.79,18.63,17.76,17.98,000,17.98
+2008-05-12,19.17,19.48,16.92,17.79,000,17.79
+2008-05-09,19.98,20.01,19.30,19.41,000,19.41
+2008-05-08,19.73,19.92,18.62,19.40,000,19.40
+2008-05-07,18.48,19.98,18.42,19.73,000,19.73
+2008-05-06,18.90,19.57,18.11,18.21,000,18.21
+2008-05-05,18.68,19.29,18.68,18.90,000,18.90
+2008-05-02,18.87,19.11,17.97,18.18,000,18.18
+2008-05-01,20.78,20.83,18.87,18.88,000,18.88
+2008-04-30,20.24,20.81,19.69,20.79,000,20.79
+2008-04-29,19.86,20.54,19.63,20.24,000,20.24
+2008-04-28,20.14,20.25,19.37,19.64,000,19.64
+2008-04-25,19.60,20.36,19.28,19.59,000,19.59
+2008-04-24,20.26,20.77,19.21,20.06,000,20.06
+2008-04-23,20.63,20.95,19.88,20.26,000,20.26
+2008-04-22,20.47,21.60,20.47,20.87,000,20.87
+2008-04-21,20.15,21.12,20.15,20.50,000,20.50
+2008-04-18,20.37,20.37,19.21,20.13,000,20.13
+2008-04-17,21.13,21.54,20.35,20.37,000,20.37
+2008-04-16,22.03,22.09,20.50,20.53,000,20.53
+2008-04-15,23.84,23.99,22.72,22.78,000,22.78
+2008-04-14,23.46,24.35,23.46,23.82,000,23.82
+2008-04-11,23.03,23.59,22.65,23.46,000,23.46
+2008-04-10,22.80,23.22,21.63,21.98,000,21.98
+2008-04-09,22.36,23.57,22.36,22.81,000,22.81
+2008-04-08,22.42,23.16,22.36,22.36,000,22.36
+2008-04-07,22.45,22.73,21.21,22.42,000,22.42
+2008-04-04,23.00,23.31,21.75,22.45,000,22.45
+2008-04-03,23.84,24.15,23.00,23.21,000,23.21
+2008-04-02,22.64,23.65,22.39,23.43,000,23.43
+2008-04-01,25.61,25.61,22.52,22.68,000,22.68
+2008-03-31,25.71,26.77,25.35,25.61,000,25.61
+2008-03-28,25.81,25.96,25.04,25.71,000,25.71
+2008-03-27,25.55,25.98,24.91,25.88,000,25.88
+2008-03-26,25.75,26.85,25.51,26.08,000,26.08
+2008-03-25,25.75,26.42,25.17,25.72,000,25.72
+2008-03-24,26.64,27.04,24.75,25.73,000,25.73
+2008-03-20,29.84,29.84,25.80,26.62,000,26.62
+2008-03-19,25.78,29.95,25.16,29.84,000,29.84
+2008-03-18,32.24,32.24,25.58,25.79,000,25.79
+2008-03-17,35.14,35.60,31.10,32.24,000,32.24
+2008-03-14,27.31,32.89,26.02,31.16,000,31.16
+2008-03-13,27.22,29.62,25.65,27.29,000,27.29
+2008-03-12,26.39,27.25,24.90,27.22,000,27.22
+2008-03-11,27.25,28.64,26.35,26.36,000,26.36
+2008-03-10,28.13,29.73,27.92,29.38,000,29.38
+2008-03-07,28.52,29.29,26.48,27.49,000,27.49
+2008-03-06,25.45,27.90,25.04,27.55,000,27.55
+2008-03-05,25.52,25.77,23.30,24.60,000,24.60
+2008-03-04,27.19,27.42,25.51,25.52,000,25.52
+2008-03-03,27.54,28.13,26.27,26.28,000,26.28
+2008-02-29,23.54,26.91,23.54,26.54,000,26.54
+2008-02-28,22.69,23.79,22.69,23.53,000,23.53
+2008-02-27,21.90,23.01,21.83,22.69,000,22.69
+2008-02-26,23.44,23.45,21.64,21.90,000,21.90
+2008-02-25,24.06,25.07,22.69,23.03,000,23.03
+2008-02-22,24.99,25.93,23.62,24.06,000,24.06
+2008-02-21,24.42,25.45,23.74,25.12,000,25.12
+2008-02-20,25.60,26.95,24.21,24.40,000,24.40
+2008-02-19,25.39,26.59,24.73,25.59,000,25.59
+2008-02-15,25.58,25.67,24.45,25.02,000,25.02
+2008-02-14,24.64,25.64,23.98,25.54,000,25.54
+2008-02-13,25.67,26.06,24.57,24.88,000,24.88
+2008-02-12,26.56,27.17,25.25,26.33,000,26.33
+2008-02-11,29.14,29.57,27.32,27.60,000,27.60
+2008-02-08,27.98,28.89,27.22,28.01,000,28.01
+2008-02-07,29.51,29.70,26.78,27.66,000,27.66
+2008-02-06,27.75,29.31,27.04,28.97,000,28.97
+2008-02-05,27.20,28.49,27.20,28.24,000,28.24
+2008-02-04,25.09,26.03,24.85,25.99,000,25.99
+2008-02-01,25.66,25.75,24.02,24.02,000,24.02
+2008-01-31,28.78,28.81,25.45,26.20,000,26.20
+2008-01-30,27.53,28.34,24.74,27.62,000,27.62
+2008-01-29,26.61,27.96,26.55,27.32,000,27.32
+2008-01-28,29.67,30.26,27.57,27.78,000,27.78
+2008-01-25,26.19,29.76,25.93,29.08,000,29.08
+2008-01-24,28.07,28.48,27.03,27.78,000,27.78
+2008-01-23,33.84,34.42,22.82,29.02,000,29.02
+2008-01-22,35.12,37.57,29.71,31.01,000,31.01
+2008-01-18,27.55,29.30,26.27,27.18,000,27.18
+2008-01-17,24.11,28.51,23.87,28.46,000,28.46
+2008-01-16,23.90,24.38,22.85,24.38,000,24.38
+2008-01-15,24.10,24.59,22.97,23.34,000,23.34
+2008-01-14,23.76,23.93,22.65,22.90,000,22.90
+2008-01-11,24.04,24.41,23.22,23.68,000,23.68
+2008-01-10,24.56,24.61,22.62,23.45,000,23.45
+2008-01-09,25.61,25.95,23.90,24.12,000,24.12
+2008-01-08,23.27,25.60,22.63,25.43,000,25.43
+2008-01-07,24.62,24.88,23.30,23.79,000,23.79
+2008-01-04,23.50,24.30,23.25,23.94,000,23.94
+2008-01-03,23.11,23.27,22.11,22.49,000,22.49
+2008-01-02,22.58,24.05,22.40,23.17,000,23.17
+2007-12-31,21.87,22.75,21.79,22.50,000,22.50
+2007-12-28,19.59,21.05,19.44,20.74,000,20.74
+2007-12-27,19.15,20.51,19.15,20.26,000,20.26
+2007-12-26,19.37,19.47,18.60,18.66,000,18.66
+2007-12-24,19.08,19.42,18.48,18.60,000,18.60
+2007-12-21,19.82,19.82,18.28,18.47,000,18.47
+2007-12-20,21.02,21.67,20.58,20.58,000,20.58
+2007-12-19,22.62,22.68,21.30,21.68,000,21.68
+2007-12-18,23.70,24.60,22.41,22.64,000,22.64
+2007-12-17,24.13,24.86,23.42,24.52,000,24.52
+2007-12-14,23.53,23.53,22.26,23.27,000,23.27
+2007-12-13,23.53,24.04,22.41,22.56,000,22.56
+2007-12-12,20.82,24.22,20.49,22.47,000,22.47
+2007-12-11,20.69,23.70,19.77,23.59,000,23.59
+2007-12-10,21.16,21.46,20.36,20.74,000,20.74
+2007-12-07,20.69,21.01,20.29,20.85,000,20.85
+2007-12-06,22.68,22.75,19.65,20.96,000,20.96
+2007-12-05,22.72,23.03,21.87,22.53,000,22.53
+2007-12-04,24.30,24.59,23.32,23.79,000,23.79
+2007-12-03,23.59,24.49,23.40,23.61,000,23.61
+2007-11-30,22.67,23.39,22.00,22.87,000,22.87
+2007-11-29,24.59,24.61,23.35,23.97,000,23.97
+2007-11-28,25.14,25.14,23.55,24.11,000,24.11
+2007-11-27,28.14,28.24,26.23,26.28,000,26.28
+2007-11-26,26.46,28.95,25.84,28.91,000,28.91
+2007-11-23,26.42,26.42,25.35,25.96,000,25.96
+2007-11-21,26.30,27.77,24.55,26.84,000,26.84
+2007-11-20,26.12,27.35,23.62,24.88,000,24.88
+2007-11-19,26.74,27.18,25.74,26.01,000,26.01
+2007-11-16,27.04,28.12,25.12,25.49,000,25.49
+2007-11-15,26.96,29.31,25.98,28.06,000,28.06
+2007-11-14,23.35,27.03,23.07,25.94,000,25.94
+2007-11-13,27.47,27.50,23.82,24.10,000,24.10
+2007-11-12,30.57,31.09,24.47,31.09,000,31.09
+2007-11-09,27.96,28.84,26.21,28.50,000,28.50
+2007-11-08,26.45,29.15,25.32,26.16,000,26.16
+2007-11-07,23.15,26.85,22.75,26.49,000,26.49
+2007-11-06,23.50,23.74,21.24,21.39,000,21.39
+2007-11-05,25.25,25.46,23.61,24.31,000,24.31
+2007-11-02,22.56,25.17,22.56,23.01,000,23.01
+2007-11-01,19.89,24.15,17.38,23.21,000,23.21
+2007-10-31,20.53,22.09,18.30,18.53,000,18.53
+2007-10-30,20.46,21.15,20.31,21.07,000,21.07
+2007-10-29,19.93,20.24,16.84,19.87,000,19.87
+2007-10-26,19.84,20.97,19.48,19.56,000,19.56
+2007-10-25,20.84,22.40,20.04,21.17,000,21.17
+2007-10-24,21.16,24.15,20.59,20.80,000,20.80
+2007-10-23,21.29,21.43,20.13,20.41,000,20.41
+2007-10-22,23.89,23.94,21.38,21.64,000,21.64
+2007-10-19,19.15,22.96,19.02,22.96,000,22.96
+2007-10-18,19.16,19.56,17.73,18.50,000,18.50
+2007-10-17,18.76,20.11,18.28,18.54,000,18.54
+2007-10-16,20.07,20.75,19.73,20.02,000,20.02
+2007-10-15,18.14,20.01,17.95,19.25,000,19.25
+2007-10-12,18.68,18.74,17.49,17.73,000,17.73
+2007-10-11,16.15,19.73,16.08,18.88,000,18.88
+2007-10-10,16.42,17.35,16.39,16.67,000,16.67
+2007-10-09,17.15,17.28,16.09,16.12,000,16.12
+2007-10-08,17.73,17.83,17.32,17.46,000,17.46
+2007-10-05,17.55,17.56,16.44,16.91,000,16.91
+2007-10-04,18.65,18.65,18.26,18.44,000,18.44
+2007-10-03,18.88,18.99,18.31,18.80,000,18.80
+2007-10-02,17.67,18.89,17.60,18.49,000,18.49
+2007-10-01,18.44,18.44,17.11,17.84,000,17.84
+2007-09-28,17.23,18.22,16.91,18.00,000,18.00
+2007-09-27,17.12,17.47,16.95,17.00,000,17.00
+2007-09-26,17.92,18.18,17.30,17.63,000,17.63
+2007-09-25,20.25,20.46,18.44,18.60,000,18.60
+2007-09-24,19.04,19.62,18.32,19.37,000,19.37
+2007-09-21,19.44,19.81,18.37,19.00,000,19.00
+2007-09-20,20.47,20.82,19.55,20.45,000,20.45
+2007-09-19,19.96,20.57,19.17,20.03,000,20.03
+2007-09-18,25.79,26.23,20.27,20.35,000,20.35
+2007-09-17,26.45,27.08,25.80,26.48,000,26.48
+2007-09-14,26.38,26.48,24.68,24.92,000,24.92
+2007-09-13,25.01,25.32,23.83,24.76,000,24.76
+2007-09-12,25.97,26.21,24.57,24.96,000,24.96
+2007-09-11,27.11,27.21,25.19,25.27,000,25.27
+2007-09-10,26.91,28.82,26.56,27.38,000,27.38
+2007-09-07,25.98,26.97,25.60,26.23,000,26.23
+2007-09-06,24.43,25.14,23.66,23.99,000,23.99
+2007-09-05,24.03,25.45,23.80,24.58,000,24.58
+2007-09-04,21.93,24.81,21.71,22.78,000,22.78
+2007-08-31,23.53,24.07,22.47,23.38,000,23.38
+2007-08-30,25.40,25.58,23.69,25.06,000,25.06
+2007-08-29,25.87,26.02,23.44,23.81,000,23.81
+2007-08-28,23.87,26.57,23.72,26.30,000,26.30
+2007-08-27,22.24,22.83,21.96,22.72,000,22.72
+2007-08-24,22.75,23.03,20.44,20.72,000,20.72
+2007-08-23,22.47,23.61,22.05,22.62,000,22.62
+2007-08-22,24.33,24.44,22.87,22.89,000,22.89
+2007-08-21,26.39,26.72,24.77,25.25,000,25.25
+2007-08-20,29.87,29.95,25.80,26.33,000,26.33
+2007-08-17,25.25,31.46,25.23,29.99,000,29.99
+2007-08-16,32.68,37.50,30.44,30.83,000,30.83
+2007-08-15,28.22,31.76,26.16,30.67,000,30.67
+2007-08-14,25.56,28.29,25.31,27.68,000,27.68
+2007-08-13,28.02,28.02,25.48,26.57,000,26.57
+2007-08-10,28.04,29.84,26.91,28.30,000,28.30
+2007-08-09,24.46,26.90,23.84,26.48,000,26.48
+2007-08-08,20.97,22.95,19.33,21.45,000,21.45
+2007-08-07,23.33,23.74,21.37,21.56,000,21.56
+2007-08-06,25.32,26.47,22.44,22.60,000,22.60
+2007-08-03,21.52,25.55,21.09,25.16,000,25.16
+2007-08-02,22.94,23.00,21.20,21.22,000,21.22
+2007-08-01,23.71,26.22,23.26,23.67,000,23.67
+2007-07-31,20.08,23.93,19.68,23.52,000,23.52
+2007-07-30,23.64,23.64,20.86,20.87,000,20.87
+2007-07-27,20.34,24.17,19.60,24.17,000,24.17
+2007-07-26,19.41,23.36,19.30,20.74,000,20.74
+2007-07-25,17.77,19.46,17.38,18.10,000,18.10
+2007-07-24,17.63,19.09,17.48,18.55,000,18.55
+2007-07-23,16.62,17.09,16.39,16.81,000,16.81
+2007-07-20,15.39,18.53,15.36,16.95,000,16.95
+2007-07-19,15.43,15.62,15.06,15.23,000,15.23
+2007-07-18,16.38,17.06,15.95,16.00,000,16.00
+2007-07-17,15.58,15.78,15.31,15.63,000,15.63
+2007-07-16,15.57,15.83,15.27,15.59,000,15.59
+2007-07-13,15.39,15.51,14.79,15.15,000,15.15
+2007-07-12,16.39,16.39,14.93,15.54,000,15.54
+2007-07-11,17.69,17.91,16.64,16.64,000,16.64
+2007-07-10,15.88,17.68,15.83,17.57,000,17.57
+2007-07-09,15.34,15.69,15.03,15.16,000,15.16
+2007-07-06,15.36,15.59,14.67,14.72,000,14.72
+2007-07-05,15.37,15.95,15.17,15.48,000,15.48
+2007-07-03,15.29,15.40,14.85,15.29,000,15.29
+2007-07-02,16.48,16.48,15.31,15.40,000,15.40
+2007-06-29,15.25,17.13,14.62,16.23,000,16.23
+2007-06-28,15.70,15.71,14.98,15.54,000,15.54
+2007-06-27,18.87,18.98,15.44,15.53,000,15.53
+2007-06-26,16.46,18.89,16.21,18.89,000,18.89
+2007-06-25,16.50,17.24,15.41,16.65,000,16.65
+2007-06-22,14.45,16.58,14.31,15.75,000,15.75
+2007-06-21,14.80,15.56,14.17,14.21,000,14.21
+2007-06-20,12.77,14.76,12.75,14.67,000,14.67
+2007-06-19,13.78,13.80,12.79,12.85,000,12.85
+2007-06-18,14.42,14.51,13.35,13.42,000,13.42
+2007-06-15,13.01,13.97,12.58,13.94,000,13.94
+2007-06-14,14.76,14.82,13.59,13.64,000,13.64
+2007-06-13,16.05,16.10,14.67,14.73,000,14.73
+2007-06-12,15.46,16.70,14.77,16.67,000,16.67
+2007-06-11,15.31,15.47,14.24,14.71,000,14.71
+2007-06-08,16.75,17.06,14.73,14.84,000,14.84
+2007-06-07,15.08,17.09,14.89,17.06,000,17.06
+2007-06-06,14.07,15.06,13.63,14.87,000,14.87
+2007-06-05,13.58,14.17,13.29,13.63,000,13.63
+2007-06-04,13.47,13.54,12.78,13.29,000,13.29
+2007-06-01,12.77,13.01,12.43,12.78,000,12.78
+2007-05-31,12.78,13.18,12.62,13.05,000,13.05
+2007-05-30,14.18,14.29,12.82,12.83,000,12.83
+2007-05-29,13.86,13.95,13.31,13.53,000,13.53
+2007-05-25,13.81,13.87,13.23,13.34,000,13.34
+2007-05-24,13.15,14.36,12.92,14.08,000,14.08
+2007-05-23,12.77,13.28,12.55,13.24,000,13.24
+2007-05-22,13.29,13.38,12.70,13.02,000,13.02
+2007-05-21,13.24,13.30,12.70,13.30,000,13.30
+2007-05-18,13.01,13.22,12.69,12.76,000,12.76
+2007-05-17,13.62,13.82,13.25,13.51,000,13.51
+2007-05-16,14.02,14.18,13.47,13.50,000,13.50
+2007-05-15,13.88,14.30,13.27,14.01,000,14.01
+2007-05-14,13.26,14.43,13.01,13.96,000,13.96
+2007-05-11,13.47,13.47,12.63,12.95,000,12.95
+2007-05-10,13.31,13.85,12.88,13.60,000,13.60
+2007-05-09,13.43,13.50,12.54,12.88,000,12.88
+2007-05-08,13.48,13.69,13.15,13.21,000,13.21
+2007-05-07,13.34,13.37,12.91,13.15,000,13.15
+2007-05-04,12.91,13.36,12.59,12.91,000,12.91
+2007-05-03,13.01,13.36,12.89,13.09,000,13.09
+2007-05-02,13.52,13.52,12.55,13.08,000,13.08
+2007-05-01,14.10,14.60,13.48,13.51,000,13.51
+2007-04-30,12.90,14.31,12.45,14.22,000,14.22
+2007-04-27,13.12,13.26,12.41,12.45,000,12.45
+2007-04-26,13.16,13.67,12.67,12.79,000,12.79
+2007-04-25,12.74,13.23,12.58,13.21,000,13.21
+2007-04-24,13.12,13.89,13.04,13.12,000,13.12
+2007-04-23,12.60,13.08,12.07,13.04,000,13.04
+2007-04-20,12.03,12.67,11.97,12.07,000,12.07
+2007-04-19,13.16,13.27,12.41,12.54,000,12.54
+2007-04-18,12.48,12.57,11.95,12.42,000,12.42
+2007-04-17,11.70,12.17,11.50,12.14,000,12.14
+2007-04-16,11.86,12.10,11.46,11.98,000,11.98
+2007-04-13,12.67,13.00,12.13,12.20,000,12.20
+2007-04-12,13.65,14.15,12.58,12.71,000,12.71
+2007-04-11,12.72,14.08,12.68,13.49,000,13.49
+2007-04-10,13.33,13.33,12.56,12.68,000,12.68
+2007-04-09,13.26,13.56,12.89,13.14,000,13.14
+2007-04-05,13.57,13.66,12.69,13.23,000,13.23
+2007-04-04,13.82,13.91,13.20,13.24,000,13.24
+2007-04-03,14.02,14.53,12.81,13.46,000,13.46
+2007-04-02,14.91,15.46,14.40,14.53,000,14.53
+2007-03-30,15.14,15.82,14.14,14.64,000,14.64
+2007-03-29,14.98,16.05,14.34,15.14,1988300,15.14
+2007-03-28,14.28,15.51,14.22,14.98,000,14.98
+2007-03-27,13.56,13.90,13.40,13.48,000,13.48
+2007-03-26,13.39,14.70,12.91,13.11,000,13.11
+2007-03-23,13.13,13.18,12.46,12.95,000,12.95
+2007-03-22,12.29,12.95,12.04,12.93,000,12.93
+2007-03-21,13.27,13.67,11.21,12.19,000,12.19
+2007-03-20,15.01,15.16,13.25,13.27,000,13.27
+2007-03-19,15.82,15.82,14.58,14.59,000,14.59
+2007-03-16,15.38,17.71,15.29,16.79,000,16.79
+2007-03-15,16.91,16.91,15.27,16.43,000,16.43
+2007-03-14,17.63,21.25,16.75,17.27,000,17.27
+2007-03-13,14.87,18.42,14.60,18.13,000,18.13
+2007-03-12,14.96,14.96,13.76,13.99,000,13.99
+2007-03-09,13.70,14.62,13.67,14.09,000,14.09
+2007-03-08,14.34,14.70,13.48,14.29,000,14.29
+2007-03-07,16.25,16.27,14.52,15.24,000,15.24
+2007-03-06,18.31,18.34,15.76,15.96,000,15.96
+2007-03-05,20.40,20.41,18.13,19.63,000,19.63
+2007-03-02,16.70,18.63,16.04,18.61,000,18.61
+2007-03-01,17.76,19.40,15.36,15.82,000,15.82
+2007-02-28,17.21,17.29,14.50,15.42,000,15.42
+2007-02-27,12.12,19.01,12.10,18.31,000,18.31
+2007-02-26,10.59,11.44,10.52,11.15,000,11.15
+2007-02-23,10.41,10.70,10.36,10.58,000,10.58
+2007-02-22,10.23,10.52,10.01,10.18,000,10.18
+2007-02-21,10.48,10.53,10.17,10.20,000,10.20
+2007-02-20,10.62,10.72,10.14,10.24,000,10.24
+2007-02-16,10.42,10.44,9.98,10.02,000,10.02
+2007-02-15,10.28,10.32,10.05,10.22,000,10.22
+2007-02-14,10.19,10.26,9.70,10.23,000,10.23
+2007-02-13,11.42,11.42,10.33,10.34,000,10.34
+2007-02-12,11.33,11.88,11.30,11.61,000,11.61
+2007-02-09,10.42,11.56,10.25,11.10,000,11.10
+2007-02-08,10.49,10.91,10.40,10.44,000,10.44
+2007-02-07,10.31,10.56,10.24,10.32,000,10.32
+2007-02-06,10.55,10.88,10.44,10.65,000,10.65
+2007-02-05,10.53,10.70,10.44,10.55,000,10.55
+2007-02-02,10.30,10.36,9.96,10.08,000,10.08
+2007-02-01,10.32,10.43,10.14,10.31,000,10.31
+2007-01-31,11.09,11.26,10.27,10.42,000,10.42
+2007-01-30,11.28,11.49,10.95,10.96,000,10.96
+2007-01-29,11.50,11.60,10.92,11.45,000,11.45
+2007-01-26,10.95,11.60,10.92,11.13,000,11.13
+2007-01-25,9.99,11.38,9.95,11.22,000,11.22
+2007-01-24,10.41,10.41,9.87,9.89,000,9.89
+2007-01-23,10.77,10.94,10.22,10.34,000,10.34
+2007-01-22,10.77,11.08,10.62,10.77,000,10.77
+2007-01-19,10.80,11.03,10.24,10.40,000,10.40
+2007-01-18,10.65,11.04,10.45,10.85,000,10.85
+2007-01-17,10.90,10.90,10.35,10.59,000,10.59
+2007-01-16,10.64,10.89,10.40,10.74,000,10.74
+2007-01-12,10.93,10.93,10.14,10.15,000,10.15
+2007-01-11,11.42,11.48,10.50,10.87,000,10.87
+2007-01-10,12.34,12.50,11.43,11.47,000,11.47
+2007-01-09,11.86,12.47,11.69,11.91,000,11.91
+2007-01-08,12.48,12.83,11.78,12.00,000,12.00
+2007-01-05,11.84,12.25,11.68,12.14,000,12.14
+2007-01-04,12.40,12.42,11.28,11.51,000,11.51
+2007-01-03,12.16,12.75,11.53,12.04,000,12.04
+2006-12-29,10.95,11.65,10.71,11.56,000,11.56
+2006-12-28,10.84,11.06,10.73,10.99,000,10.99
+2006-12-27,11.12,11.12,10.59,10.64,000,10.64
+2006-12-26,12.03,12.03,11.24,11.26,000,11.26
+2006-12-22,10.59,11.46,10.59,11.36,000,11.36
+2006-12-21,10.36,10.89,10.13,10.53,000,10.53
+2006-12-20,10.30,10.33,10.03,10.26,000,10.26
+2006-12-19,11.06,11.31,10.27,10.30,000,10.30
+2006-12-18,10.64,10.91,10.46,10.60,000,10.60
+2006-12-15,9.68,10.07,9.39,10.05,000,10.05
+2006-12-14,10.74,10.75,9.64,9.97,000,9.97
+2006-12-13,10.45,10.58,10.15,10.18,000,10.18
+2006-12-12,11.20,11.39,10.35,10.65,000,10.65
+2006-12-11,11.88,11.93,10.71,10.71,000,10.71
+2006-12-08,12.58,12.67,11.91,12.08,000,12.08
+2006-12-07,11.35,12.68,11.17,12.67,000,12.67
+2006-12-06,11.39,11.55,11.19,11.33,000,11.33
+2006-12-05,11.13,11.59,10.85,11.27,000,11.27
+2006-12-04,12.01,12.01,10.98,11.23,000,11.23
+2006-12-01,11.07,12.28,10.96,11.66,000,11.66
+2006-11-30,10.88,11.30,10.58,10.91,000,10.91
+2006-11-29,11.41,11.43,10.67,10.83,000,10.83
+2006-11-28,12.48,12.55,11.56,11.62,000,11.62
+2006-11-27,11.26,12.33,11.14,12.30,000,12.30
+2006-11-24,10.81,10.86,10.56,10.73,000,10.73
+2006-11-22,10.02,10.15,9.81,10.14,000,10.14
+2006-11-21,10.05,10.06,9.84,9.90,000,9.90
+2006-11-20,10.42,10.48,9.91,9.97,000,9.97
+2006-11-17,10.37,10.48,10.05,10.05,000,10.05
+2006-11-16,10.13,10.35,10.04,10.16,000,10.16
+2006-11-15,10.47,10.61,10.13,10.31,000,10.31
+2006-11-14,10.89,11.31,10.14,10.50,000,10.50
+2006-11-13,11.19,11.26,10.69,10.86,000,10.86
+2006-11-10,11.01,11.12,10.77,10.79,000,10.79
+2006-11-09,10.65,11.07,10.57,11.01,000,11.01
+2006-11-08,11.41,11.49,10.70,10.75,000,10.75
+2006-11-07,11.06,11.19,10.87,11.09,000,11.09
+2006-11-06,11.39,11.41,10.99,11.16,000,11.16
+2006-11-03,11.16,11.43,10.34,11.16,000,11.16
+2006-11-02,11.61,11.76,11.41,11.42,000,11.42
+2006-11-01,10.93,11.68,10.89,11.51,000,11.51
+2006-10-31,11.10,11.39,10.99,11.10,000,11.10
+2006-10-30,11.36,11.43,10.92,11.20,000,11.20
+2006-10-27,10.66,10.99,10.53,10.80,000,10.80
+2006-10-26,10.56,10.96,10.47,10.56,000,10.56
+2006-10-25,10.88,10.88,10.60,10.66,000,10.66
+2006-10-24,11.25,11.27,10.78,10.78,000,10.78
+2006-10-23,11.15,11.25,10.62,11.08,000,11.08
+2006-10-20,11.06,11.23,10.44,10.63,000,10.63
+2006-10-19,11.51,11.57,10.78,10.90,000,10.90
+2006-10-18,11.44,11.83,11.33,11.34,000,11.34
+2006-10-17,11.36,12.03,11.35,11.75,000,11.75
+2006-10-16,11.07,11.20,10.91,11.09,000,11.09
+2006-10-13,11.17,11.35,10.75,10.75,000,10.75
+2006-10-12,11.50,11.51,11.09,11.09,000,11.09
+2006-10-11,11.75,12.03,11.31,11.62,000,11.62
+2006-10-10,11.77,11.89,11.47,11.52,000,11.52
+2006-10-09,12.07,12.09,11.58,11.68,000,11.68
+2006-10-06,11.99,12.17,11.55,11.56,000,11.56
+2006-10-05,11.94,12.06,11.65,11.98,000,11.98
+2006-10-04,12.64,12.64,11.62,11.86,000,11.86
+2006-10-03,12.68,12.91,11.97,12.24,000,12.24
+2006-10-02,12.45,12.72,12.11,12.57,000,12.57
+2006-09-29,11.75,12.10,11.72,11.98,000,11.98
+2006-09-28,11.64,12.06,11.59,11.72,000,11.72
+2006-09-27,11.65,11.90,11.42,11.58,000,11.58
+2006-09-26,12.23,12.23,11.51,11.53,000,11.53
+2006-09-25,12.97,13.41,11.93,12.12,000,12.12
+2006-09-22,12.47,13.28,12.47,12.59,000,12.59
+2006-09-21,11.43,12.60,11.28,12.25,000,12.25
+2006-09-20,11.75,11.75,11.34,11.39,000,11.39
+2006-09-19,11.96,12.69,11.86,11.98,000,11.98
+2006-09-18,12.28,12.41,11.58,11.78,000,11.78
+2006-09-15,11.49,12.54,11.40,11.76,000,11.76
+2006-09-14,11.36,12.02,10.74,11.55,000,11.55
+2006-09-13,11.40,11.56,10.99,11.18,000,11.18
+2006-09-12,13.04,13.14,11.55,11.92,000,11.92
+2006-09-11,13.95,13.95,12.75,12.99,000,12.99
+2006-09-08,13.79,13.80,13.05,13.16,000,13.16
+2006-09-07,14.07,14.49,13.67,13.88,000,13.88
+2006-09-06,13.06,13.88,13.06,13.74,000,13.74
+2006-09-05,12.80,12.86,12.43,12.63,000,12.63
+2006-09-01,12.14,12.33,11.91,11.96,000,11.96
+2006-08-31,12.23,12.33,12.07,12.31,000,12.31
+2006-08-30,12.14,12.35,12.10,12.22,000,12.22
+2006-08-29,12.27,12.83,12.21,12.28,000,12.28
+2006-08-28,12.92,12.92,12.07,12.18,000,12.18
+2006-08-25,12.41,12.47,12.08,12.31,000,12.31
+2006-08-24,12.24,12.58,12.21,12.40,000,12.40
+2006-08-23,12.26,12.73,12.16,12.40,000,12.40
+2006-08-22,12.42,12.42,11.93,12.19,000,12.19
+2006-08-21,12.40,12.62,12.21,12.22,000,12.22
+2006-08-18,12.11,12.52,11.57,11.64,000,11.64
+2006-08-17,12.69,12.72,12.21,12.24,000,12.24
+2006-08-16,12.69,12.95,12.11,12.41,000,12.41
+2006-08-15,13.57,13.72,13.15,13.42,000,13.42
+2006-08-14,14.15,14.43,13.41,14.26,000,14.26
+2006-08-11,14.72,14.85,14.30,14.30,000,14.30
+2006-08-10,15.56,15.73,14.45,14.46,000,14.46
+2006-08-09,14.76,15.41,14.07,15.20,000,15.20
+2006-08-08,15.20,15.55,14.86,15.23,000,15.23
+2006-08-07,14.98,15.53,14.97,15.23,000,15.23
+2006-08-04,14.03,14.91,13.65,14.34,000,14.34
+2006-08-03,15.10,15.19,14.20,14.46,000,14.46
+2006-08-02,14.93,14.93,13.92,14.34,000,14.34
+2006-08-01,15.49,16.15,15.03,15.05,000,15.05
+2006-07-31,15.01,15.13,14.86,14.95,000,14.95
+2006-07-28,14.73,14.75,14.06,14.33,000,14.33
+2006-07-27,14.26,15.39,14.07,14.94,000,14.94
+2006-07-26,15.04,15.21,14.09,14.62,000,14.62
+2006-07-25,15.44,15.68,14.31,14.85,000,14.85
+2006-07-24,17.08,17.08,14.89,14.98,000,14.98
+2006-07-21,16.23,17.56,16.23,17.40,000,17.40
+2006-07-20,15.10,16.37,14.87,16.21,000,16.21
+2006-07-19,17.62,17.62,14.47,15.55,000,15.55
+2006-07-18,18.20,19.58,17.66,17.74,000,17.74
+2006-07-17,18.73,18.76,17.75,18.64,000,18.64
+2006-07-14,17.57,18.79,17.28,18.05,000,18.05
+2006-07-13,15.17,17.83,15.17,17.79,000,17.79
+2006-07-12,13.39,14.85,13.26,14.49,000,14.49
+2006-07-11,14.31,14.68,13.10,13.14,000,13.14
+2006-07-10,14.17,14.50,13.67,14.02,000,14.02
+2006-07-07,13.90,14.45,13.43,13.97,000,13.97
+2006-07-06,14.04,14.04,13.25,13.65,000,13.65
+2006-07-05,13.92,14.77,13.86,14.15,000,14.15
+2006-07-03,13.29,13.51,12.77,13.05,000,13.05
+2006-06-30,12.90,13.47,12.74,13.08,000,13.08
+2006-06-29,15.28,15.30,12.93,13.03,000,13.03
+2006-06-28,16.02,17.00,15.78,15.79,000,15.79
+2006-06-27,15.58,16.55,15.27,16.40,000,16.40
+2006-06-26,16.55,16.61,15.49,15.62,000,15.62
+2006-06-23,16.41,16.58,14.94,15.89,000,15.89
+2006-06-22,15.95,16.66,15.56,15.88,000,15.88
+2006-06-21,16.67,16.72,14.88,15.52,000,15.52
+2006-06-20,17.52,17.65,16.39,16.69,000,16.69
+2006-06-19,16.06,18.10,15.73,17.83,000,17.83
+2006-06-16,16.56,18.13,16.52,17.25,000,17.25
+2006-06-15,21.05,21.14,15.65,15.90,000,15.90
+2006-06-14,23.45,23.49,21.45,21.46,000,21.46
+2006-06-13,20.95,23.81,20.27,23.81,000,23.81
+2006-06-12,18.13,21.25,17.89,20.96,000,20.96
+2006-06-09,17.90,18.45,17.07,18.12,000,18.12
+2006-06-08,17.92,20.75,17.88,18.35,000,18.35
+2006-06-07,17.21,17.86,16.07,17.80,000,17.80
+2006-06-06,16.72,18.56,16.65,17.34,000,17.34
+2006-06-05,14.97,17.14,14.97,16.65,000,16.65
+2006-06-02,14.17,14.97,13.92,14.32,000,14.32
+2006-06-01,16.47,16.56,14.48,14.52,000,14.52
+2006-05-31,18.09,18.09,16.41,16.44,000,16.44
+2006-05-30,15.39,18.72,15.39,18.66,000,18.66
+2006-05-26,14.92,15.04,14.26,14.26,000,14.26
+2006-05-25,16.67,16.67,15.31,15.50,000,15.50
+2006-05-24,17.87,19.87,17.13,17.36,000,17.36
+2006-05-23,16.70,18.26,15.36,18.26,000,18.26
+2006-05-22,18.55,19.62,16.73,17.72,000,17.72
+2006-05-19,16.16,18.01,15.90,17.18,000,17.18
+2006-05-18,15.54,17.09,14.96,16.99,000,16.99
+2006-05-17,13.83,16.26,13.39,16.26,000,16.26
+2006-05-16,13.49,13.61,12.98,13.35,000,13.35
+2006-05-15,15.12,15.13,13.44,13.57,000,13.57
+2006-05-12,12.71,14.26,12.71,14.19,000,14.19
+2006-05-11,12.33,12.92,11.99,12.49,000,12.49
+2006-05-10,12.22,12.32,11.78,11.78,000,11.78
+2006-05-09,12.10,12.15,11.88,11.99,000,11.99
+2006-05-08,11.98,12.06,11.81,12.00,000,12.00
+2006-05-05,11.39,11.62,11.18,11.62,000,11.62
+2006-05-04,11.92,12.16,11.71,11.86,000,11.86
+2006-05-03,12.21,12.45,11.95,11.99,000,11.99
+2006-05-02,12.20,12.27,11.93,11.99,000,11.99
+2006-05-01,11.83,12.59,11.75,12.54,000,12.54
+2006-04-28,12.13,12.13,11.42,11.59,000,11.59
+2006-04-27,12.27,12.52,11.55,11.84,000,11.84
+2006-04-26,11.76,11.79,11.34,11.76,000,11.76
+2006-04-25,11.71,12.19,11.59,11.75,000,11.75
+2006-04-24,12.26,12.42,11.67,11.75,000,11.75
+2006-04-21,11.24,11.98,11.19,11.59,000,11.59
+2006-04-20,11.30,11.67,11.02,11.64,000,11.64
+2006-04-19,11.52,11.80,11.23,11.32,000,11.32
+2006-04-18,12.55,12.55,11.31,11.40,000,11.40
+2006-04-17,12.80,13.02,12.27,12.58,000,12.58
+2006-04-13,12.93,13.00,12.28,12.38,000,12.38
+2006-04-12,13.08,13.09,12.66,12.76,000,12.76
+2006-04-11,12.09,13.06,12.06,13.00,000,13.00
+2006-04-10,12.44,12.49,12.04,12.19,000,12.19
+2006-04-07,11.44,12.31,11.20,12.26,000,12.26
+2006-04-06,11.34,11.74,11.25,11.45,000,11.45
+2006-04-05,11.24,11.36,11.06,11.13,000,11.13
+2006-04-04,11.66,11.80,11.09,11.14,000,11.14
+2006-04-03,11.47,11.62,11.03,11.57,000,11.57
+2006-03-31,11.42,11.65,11.27,11.39,000,11.39
+2006-03-30,11.03,11.73,10.70,11.57,000,11.57
+2006-03-29,11.46,11.57,10.79,10.95,000,10.95
+2006-03-28,11.69,11.90,11.38,11.58,000,11.58
+2006-03-27,11.46,11.72,11.41,11.46,000,11.46
+2006-03-24,11.23,11.48,11.09,11.19,000,11.19
+2006-03-23,11.19,11.57,11.11,11.17,000,11.17
+2006-03-22,11.71,11.79,11.11,11.21,000,11.21
+2006-03-21,11.71,11.89,11.17,11.62,000,11.62
+2006-03-20,12.11,12.21,10.79,11.79,000,11.79
+2006-03-17,11.56,12.20,11.53,12.12,000,12.12
+2006-03-16,10.59,12.05,10.57,11.98,000,11.98
+2006-03-15,11.17,11.54,10.98,11.35,000,11.35
+2006-03-14,11.61,11.72,10.53,10.74,000,10.74
+2006-03-13,11.72,11.75,10.89,11.37,000,11.37
+2006-03-10,12.52,12.60,11.79,11.85,000,11.85
+2006-03-09,12.21,12.69,12.01,12.68,000,12.68
+2006-03-08,12.83,13.34,12.26,12.32,000,12.32
+2006-03-07,12.92,13.34,12.64,12.66,000,12.66
+2006-03-06,12.22,12.91,12.22,12.74,000,12.74
+2006-03-03,12.03,12.10,11.36,11.96,000,11.96
+2006-03-02,11.79,11.95,11.56,11.72,000,11.72
+2006-03-01,12.05,12.07,11.52,11.54,000,11.54
+2006-02-28,11.74,12.36,11.71,12.34,000,12.34
+2006-02-27,11.79,11.83,11.40,11.59,000,11.59
+2006-02-24,11.94,12.06,11.42,11.46,000,11.46
+2006-02-23,11.86,11.97,11.58,11.87,000,11.87
+2006-02-22,12.27,12.30,11.68,11.88,000,11.88
+2006-02-21,12.36,12.64,12.28,12.41,000,12.41
+2006-02-17,11.64,12.21,11.52,12.01,000,12.01
+2006-02-16,12.19,12.29,11.13,11.48,000,11.48
+2006-02-15,12.43,12.95,12.21,12.31,000,12.31
+2006-02-14,13.09,13.15,12.01,12.25,000,12.25
+2006-02-13,13.34,13.70,13.05,13.35,000,13.35
+2006-02-10,13.35,13.73,12.69,12.87,000,12.87
+2006-02-09,12.56,13.15,12.27,13.12,000,13.12
+2006-02-08,13.41,13.61,12.76,12.83,000,12.83
+2006-02-07,13.20,13.67,12.97,13.59,000,13.59
+2006-02-06,13.43,13.43,12.99,13.04,000,13.04
+2006-02-03,13.37,13.70,12.64,12.96,000,12.96
+2006-02-02,12.54,13.47,12.48,13.23,000,13.23
+2006-02-01,13.03,13.03,12.34,12.36,000,12.36
+2006-01-31,12.45,13.06,12.45,12.95,000,12.95
+2006-01-30,12.22,12.46,12.07,12.39,000,12.39
+2006-01-27,12.27,12.33,11.72,11.97,000,11.97
+2006-01-26,12.89,12.91,12.19,12.42,000,12.42
+2006-01-25,12.95,13.38,12.62,12.87,000,12.87
+2006-01-24,13.79,13.83,13.14,13.31,000,13.31
+2006-01-23,14.44,14.48,13.58,13.93,000,13.93
+2006-01-20,12.10,14.56,11.89,14.56,000,14.56
+2006-01-19,12.12,12.34,11.65,11.98,000,11.98
+2006-01-18,12.62,12.70,12.20,12.25,000,12.25
+2006-01-17,12.13,12.46,11.87,11.91,000,11.91
+2006-01-13,11.40,11.61,11.11,11.23,000,11.23
+2006-01-12,10.98,11.38,10.94,11.20,000,11.20
+2006-01-11,11.03,11.16,10.83,10.94,000,10.94
+2006-01-10,11.39,11.39,10.84,10.86,000,10.86
+2006-01-09,11.35,11.35,10.98,11.13,000,11.13
+2006-01-06,11.23,11.50,10.81,11.00,000,11.00
+2006-01-05,11.43,11.84,11.31,11.31,000,11.31
+2006-01-04,11.22,11.71,10.97,11.37,000,11.37
+2006-01-03,12.25,12.51,10.99,11.14,000,11.14
+2005-12-30,11.96,12.07,11.55,12.07,000,12.07
+2005-12-29,11.36,11.67,11.14,11.61,000,11.61
+2005-12-28,11.55,11.64,11.26,11.35,000,11.35
+2005-12-27,10.97,11.65,10.83,11.57,000,11.57
+2005-12-23,10.37,10.48,10.24,10.27,000,10.27
+2005-12-22,10.82,10.89,10.28,10.29,000,10.29
+2005-12-21,10.71,11.07,10.34,10.81,000,10.81
+2005-12-20,11.32,11.45,11.00,11.19,000,11.19
+2005-12-19,11.11,11.38,10.65,11.38,000,11.38
+2005-12-16,10.70,10.75,10.15,10.68,000,10.68
+2005-12-15,10.66,11.11,10.37,10.73,000,10.73
+2005-12-14,10.75,10.79,10.39,10.48,000,10.48
+2005-12-13,10.57,11.42,10.57,11.11,000,11.11
+2005-12-12,10.86,11.81,10.83,11.47,000,11.47
+2005-12-09,11.91,12.20,11.56,11.69,000,11.69
+2005-12-08,11.88,12.41,11.73,12.21,000,12.21
+2005-12-07,11.49,12.44,11.45,12.18,000,12.18
+2005-12-06,11.16,11.59,10.96,11.52,000,11.52
+2005-12-05,11.45,11.68,11.40,11.60,000,11.60
+2005-12-02,11.10,11.23,10.94,11.01,000,11.01
+2005-12-01,12.09,12.23,11.14,11.24,000,11.24
+2005-11-30,11.84,12.13,11.55,12.06,000,12.06
+2005-11-29,11.77,11.96,11.61,11.89,000,11.89
+2005-11-28,11.34,11.99,11.33,11.84,000,11.84
+2005-11-25,11.04,11.24,10.88,10.88,000,10.88
+2005-11-23,10.96,11.03,10.67,10.96,000,10.96
+2005-11-22,11.01,11.10,10.50,10.60,000,10.60
+2005-11-21,11.18,11.38,10.71,10.82,000,10.82
+2005-11-18,11.19,11.67,10.96,11.12,000,11.12
+2005-11-17,11.92,12.20,11.25,11.25,000,11.25
+2005-11-16,12.22,12.68,12.17,12.26,000,12.26
+2005-11-15,12.16,12.69,11.70,12.23,000,12.23
+2005-11-14,11.99,12.34,11.77,12.18,000,12.18
+2005-11-11,11.82,11.96,11.63,11.63,000,11.63
+2005-11-10,12.68,13.17,11.73,11.90,000,11.90
+2005-11-09,13.14,13.36,12.42,12.80,000,12.80
+2005-11-08,13.61,13.61,13.04,13.08,000,13.08
+2005-11-07,13.11,13.65,12.76,13.10,000,13.10
+2005-11-04,12.88,13.62,12.69,13.17,000,13.17
+2005-11-03,13.12,13.23,12.50,13.00,000,13.00
+2005-11-02,14.99,14.99,13.38,13.48,000,13.48
+2005-11-01,14.85,15.66,14.65,14.85,000,14.85
+2005-10-31,14.04,15.39,13.93,15.32,000,15.32
+2005-10-28,15.45,15.61,14.11,14.25,000,14.25
+2005-10-27,14.73,16.30,14.57,16.02,000,16.02
+2005-10-26,14.80,14.88,13.72,14.59,000,14.59
+2005-10-25,14.96,15.30,14.20,14.53,000,14.53
+2005-10-24,16.18,16.44,14.61,14.74,000,14.74
+2005-10-21,15.53,16.27,15.26,16.13,000,16.13
+2005-10-20,14.18,16.19,13.98,16.11,000,16.11
+2005-10-19,15.63,15.86,13.47,13.50,000,13.50
+2005-10-18,14.92,15.40,14.79,15.33,000,15.33
+2005-10-17,15.30,15.30,14.58,14.67,000,14.67
+2005-10-14,15.99,16.03,14.83,14.87,000,14.87
+2005-10-13,16.32,17.19,15.98,16.47,000,16.47
+2005-10-12,15.56,16.27,15.04,16.22,000,16.22
+2005-10-11,15.35,15.70,15.06,15.63,000,15.63
+2005-10-10,14.93,15.61,14.87,15.55,000,15.55
+2005-10-07,14.56,14.82,14.30,14.59,000,14.59
+2005-10-06,14.53,15.63,14.04,14.96,000,14.96
+2005-10-05,13.15,14.58,12.97,14.55,000,14.55
+2005-10-04,12.50,13.21,12.11,13.20,000,13.20
+2005-10-03,12.37,12.62,11.98,12.46,000,12.46
+2005-09-30,12.42,12.44,11.92,11.92,000,11.92
+2005-09-29,12.92,13.23,12.15,12.24,000,12.24
+2005-09-28,12.60,12.98,12.37,12.63,000,12.63
+2005-09-27,13.06,13.46,12.51,12.76,000,12.76
+2005-09-26,13.27,13.47,12.64,13.04,000,13.04
+2005-09-23,13.64,13.88,12.75,12.96,000,12.96
+2005-09-22,13.85,14.39,13.31,13.33,000,13.33
+2005-09-21,13.07,13.91,12.96,13.79,000,13.79
+2005-09-20,12.23,12.96,11.83,12.64,000,12.64
+2005-09-19,12.17,12.46,12.04,12.14,000,12.14
+2005-09-16,11.89,11.93,11.07,11.22,000,11.22
+2005-09-15,12.72,13.17,12.28,12.49,000,12.49
+2005-09-14,12.79,13.26,12.67,12.91,000,12.91
+2005-09-13,11.76,12.48,11.75,12.39,000,12.39
+2005-09-12,11.66,11.89,11.45,11.65,000,11.65
+2005-09-09,12.46,12.65,11.96,11.98,000,11.98
+2005-09-08,12.72,12.94,12.37,12.93,000,12.93
+2005-09-07,13.06,13.20,12.44,12.52,000,12.52
+2005-09-06,14.17,14.18,12.90,12.93,000,12.93
+2005-09-02,13.21,13.72,13.03,13.57,000,13.57
+2005-09-01,12.86,13.37,12.31,13.15,000,13.15
+2005-08-31,13.37,13.63,12.56,12.60,000,12.60
+2005-08-30,13.49,14.18,13.47,13.65,000,13.65
+2005-08-29,14.34,14.41,13.38,13.52,000,13.52
+2005-08-26,13.79,14.20,13.65,13.72,000,13.72
+2005-08-25,13.92,14.12,13.66,13.73,000,13.73
+2005-08-24,13.56,14.18,13.00,14.17,000,14.17
+2005-08-23,13.63,14.05,13.30,13.34,000,13.34
+2005-08-22,13.67,13.89,13.20,13.42,000,13.42
+2005-08-19,12.84,13.85,12.61,13.42,000,13.42
+2005-08-18,13.47,13.88,13.01,13.42,000,13.42
+2005-08-17,13.35,13.76,12.78,13.30,000,13.30
+2005-08-16,12.37,13.89,12.28,13.52,000,13.52
+2005-08-15,12.87,12.99,12.08,12.26,000,12.26
+2005-08-12,12.36,12.98,12.18,12.74,000,12.74
+2005-08-11,12.34,12.94,11.88,12.42,000,12.42
+2005-08-10,12.03,12.56,11.51,12.38,000,12.38
+2005-08-09,12.25,12.78,12.24,12.40,000,12.40
+2005-08-08,12.56,13.29,12.56,13.21,000,13.21
+2005-08-05,11.82,12.92,11.82,12.48,000,12.48
+2005-08-04,12.12,12.57,11.99,12.52,000,12.52
+2005-08-03,11.90,12.01,11.62,11.83,000,11.83
+2005-08-02,12.00,12.03,11.69,11.75,000,11.75
+2005-08-01,11.75,12.23,11.36,12.08,000,12.08
+2005-07-29,10.24,11.73,10.24,11.57,000,11.57
+2005-07-28,10.40,10.58,10.27,10.52,000,10.52
+2005-07-27,11.03,11.03,10.34,10.36,000,10.36
+2005-07-26,11.11,11.25,10.92,10.99,000,10.99
+2005-07-25,11.12,11.28,10.70,11.10,000,11.10
+2005-07-22,11.01,11.05,10.51,10.52,161600,10.52
+2005-07-21,10.23,11.21,10.23,10.97,161600,10.97
+2005-07-20,10.80,10.94,9.88,10.23,161700,10.23
+2005-07-19,10.63,10.79,10.36,10.45,161600,10.45
+2005-07-18,11.09,11.09,10.77,10.77,111400,10.77
+2005-07-15,10.61,10.90,10.13,10.33,161100,10.33
+2005-07-14,10.87,11.13,10.50,10.81,161600,10.81
+2005-07-13,11.09,11.44,10.80,10.84,161500,10.84
+2005-07-12,11.03,11.37,10.85,10.95,161600,10.95
+2005-07-11,10.96,11.41,10.53,11.28,161500,11.28
+2005-07-08,12.24,12.29,11.09,11.45,161600,11.45
+2005-07-07,13.91,13.92,12.48,12.49,161300,12.49
+2005-07-06,11.67,12.33,11.54,12.27,161600,12.27
+2005-07-05,12.41,12.41,11.53,11.68,161400,11.68
+2005-07-01,11.75,11.92,11.38,11.40,158400,11.40
+2005-06-30,11.72,12.10,11.50,12.04,161600,12.04
+2005-06-29,11.54,11.78,11.44,11.77,161600,11.77
+2005-06-28,12.31,12.31,11.55,11.58,161200,11.58
+2005-06-27,12.73,12.78,12.38,12.52,000,12.52
+2005-06-24,12.27,12.32,11.95,12.18,161600,12.18
+2005-06-23,11.19,12.13,10.96,12.13,161600,12.13
+2005-06-22,10.96,11.31,10.81,11.05,161600,11.05
+2005-06-21,11.52,11.67,11.01,11.08,161600,11.08
+2005-06-20,12.51,12.53,11.31,11.47,161600,11.47
+2005-06-17,10.83,11.64,10.78,11.48,161600,11.48
+2005-06-16,11.24,11.36,11.04,11.15,161600,11.15
+2005-06-15,11.22,11.96,11.05,11.46,161600,11.46
+2005-06-14,11.65,12.02,11.52,11.79,161600,11.79
+2005-06-13,12.12,12.12,11.31,11.65,161600,11.65
+2005-06-10,12.16,12.40,11.90,11.96,158900,11.96
+2005-06-09,12.69,13.07,12.06,12.08,161500,12.08
+2005-06-08,12.05,12.83,12.05,12.70,000,12.70
+2005-06-07,12.22,12.43,11.47,12.39,161300,12.39
+2005-06-06,12.68,13.00,12.21,12.28,161200,12.28
+2005-06-03,11.78,12.49,11.52,12.15,161600,12.15
+2005-06-02,12.35,12.43,11.80,11.84,161600,11.84
+2005-06-01,13.34,13.34,12.17,12.36,161500,12.36
+2005-05-31,12.69,13.45,12.67,13.29,161100,13.29
+2005-05-27,12.06,12.43,12.06,12.15,161600,12.15
+2005-05-26,12.23,12.38,11.65,12.24,161200,12.24
+2005-05-25,12.83,13.11,12.58,12.58,161600,12.58
+2005-05-24,13.12,13.30,12.53,12.69,161600,12.69
+2005-05-23,13.38,13.45,12.75,12.95,161600,12.95
+2005-05-20,13.57,13.73,13.07,13.14,159500,13.14
+2005-05-19,13.35,14.02,13.25,13.32,161600,13.32
+2005-05-18,14.11,14.13,13.30,13.63,000,13.63
+2005-05-17,15.92,16.21,14.45,14.57,161600,14.57
+2005-05-16,16.87,16.87,15.67,15.68,161600,15.68
+2005-05-13,15.88,17.70,15.40,16.32,161600,16.32
+2005-05-12,14.43,16.23,14.16,16.12,161500,16.12
+2005-05-11,14.69,15.80,14.31,14.45,160700,14.45
+2005-05-10,14.05,15.11,14.03,14.91,161600,14.91
+2005-05-09,14.11,14.56,13.53,13.75,161600,13.75
+2005-05-06,13.29,14.06,13.11,14.05,161600,14.05
+2005-05-05,13.48,15.82,13.43,13.98,161600,13.98
+2005-05-04,14.44,15.38,13.70,13.85,161600,13.85
+2005-05-03,15.19,15.31,14.53,14.53,000,14.53
+2005-05-02,15.45,16.01,15.08,15.12,161600,15.12
+2005-04-29,15.75,16.92,15.26,15.31,149200,15.31
+2005-04-28,14.19,16.87,14.19,16.86,161600,16.86
+2005-04-27,14.62,15.93,14.43,14.87,161600,14.87
+2005-04-26,14.27,15.15,14.27,14.91,161600,14.91
+2005-04-25,15.29,15.47,14.60,14.62,161600,14.62
+2005-04-22,14.54,16.32,14.20,15.38,161600,15.38
+2005-04-21,16.22,16.22,14.26,14.41,161600,14.41
+2005-04-20,14.86,17.25,14.52,16.92,160700,16.92
+2005-04-19,15.28,15.97,14.81,14.96,161600,14.96
+2005-04-18,18.33,18.59,16.41,16.56,161600,16.56
+2005-04-15,14.92,18.05,14.71,17.74,161200,17.74
+2005-04-14,13.40,14.60,12.67,14.53,161500,14.53
+2005-04-13,11.68,13.44,11.27,13.31,161600,13.31
+2005-04-12,12.12,12.83,11.20,11.30,000,11.30
+2005-04-11,12.09,12.46,11.82,11.98,161600,11.98
+2005-04-08,12.06,12.65,11.52,12.62,161600,12.62
+2005-04-07,12.92,12.96,12.30,12.33,161600,12.33
+2005-04-06,13.75,13.76,12.89,13.15,161500,13.15
+2005-04-05,14.10,14.11,13.66,13.68,161600,13.68
+2005-04-04,14.53,14.76,13.96,14.11,161600,14.11
+2005-04-01,13.64,14.38,12.92,14.09,160900,14.09
+2005-03-31,13.71,14.10,13.57,14.02,160900,14.02
+2005-03-30,14.47,14.47,13.64,13.64,161600,13.64
+2005-03-29,13.96,14.68,13.38,14.49,161600,14.49
+2005-03-28,14.01,14.01,13.44,13.75,161500,13.75
+2005-03-24,13.86,13.88,12.97,13.42,161600,13.42
+2005-03-23,14.61,14.89,13.88,14.06,161600,14.06
+2005-03-22,13.76,14.28,13.15,14.27,161600,14.27
+2005-03-21,13.62,13.98,13.33,13.61,161600,13.61
+2005-03-18,13.65,13.67,13.08,13.14,161600,13.14
+2005-03-17,13.25,13.67,13.20,13.29,161600,13.29
+2005-03-16,13.30,13.81,13.19,13.49,161600,13.49
+2005-03-15,12.44,13.22,12.33,13.15,161600,13.15
+2005-03-14,12.82,12.99,12.36,12.39,161600,12.39
+2005-03-11,12.29,12.98,12.11,12.80,161600,12.80
+2005-03-10,12.62,12.97,12.42,12.49,160400,12.49
+2005-03-09,12.23,12.72,12.20,12.70,161600,12.70
+2005-03-08,12.06,12.50,11.95,12.40,161500,12.40
+2005-03-07,12.36,12.60,12.05,12.26,161600,12.26
+2005-03-04,12.49,12.50,11.94,11.94,161600,11.94
+2005-03-03,12.28,13.07,12.23,12.93,161600,12.93
+2005-03-02,12.88,12.91,12.20,12.50,161400,12.50
+2005-03-01,11.95,12.10,11.66,12.04,161400,12.04
+2005-02-28,11.89,12.50,11.73,12.08,161600,12.08
+2005-02-25,11.75,11.78,10.92,11.49,159000,11.49
+2005-02-24,12.51,12.51,11.48,11.57,161600,11.57
+2005-02-23,12.94,12.94,12.30,12.39,161500,12.39
+2005-02-22,12.18,13.20,12.09,13.14,161600,13.14
+2005-02-18,11.99,12.12,11.18,11.18,161400,11.18
+2005-02-17,11.25,11.91,11.21,11.77,161500,11.77
+2005-02-16,11.40,11.50,11.03,11.10,161600,11.10
+2005-02-15,11.57,11.76,11.13,11.27,161600,11.27
+2005-02-14,11.28,11.86,11.18,11.52,161400,11.52
+2005-02-11,11.64,11.82,11.25,11.43,161600,11.43
+2005-02-10,11.98,11.99,11.38,11.51,161500,11.51
+2005-02-09,11.52,12.02,11.41,12.00,161600,12.00
+2005-02-08,11.66,11.67,11.45,11.60,161600,11.60
+2005-02-07,11.53,11.75,11.36,11.73,161500,11.73
+2005-02-04,11.97,11.97,10.90,11.21,161600,11.21
+2005-02-03,12.03,12.12,11.72,11.79,161500,11.79
+2005-02-02,12.01,12.06,11.52,11.66,161600,11.66
+2005-02-01,12.80,13.02,12.02,12.03,000,12.03
+2005-01-31,13.63,13.63,12.79,12.82,161600,12.82
+2005-01-28,13.15,13.56,12.83,13.24,160800,13.24
+2005-01-27,13.50,13.57,12.96,13.24,159600,13.24
+2005-01-26,13.84,13.84,13.06,13.44,000,13.44
+2005-01-25,14.34,14.36,13.88,14.06,000,14.06
+2005-01-24,14.38,14.75,14.17,14.65,000,14.65
+2005-01-21,13.75,14.46,13.40,14.36,1000,14.36
+2005-01-20,13.37,14.11,13.28,13.83,000,13.83
+2005-01-19,12.47,13.21,12.41,13.18,000,13.18
+2005-01-18,13.13,13.15,12.30,12.47,000,12.47
+2005-01-14,12.68,12.82,12.29,12.43,000,12.43
+2005-01-13,12.70,12.86,12.37,12.84,000,12.84
+2005-01-12,13.94,13.94,12.54,12.56,000,12.56
+2005-01-11,13.44,13.68,13.05,13.19,000,13.19
+2005-01-10,13.92,13.93,12.94,13.23,000,13.23
+2005-01-07,13.47,13.51,12.94,13.49,000,13.49
+2005-01-06,14.09,14.09,13.33,13.58,000,13.58
+2005-01-05,13.98,14.09,13.26,14.09,000,14.09
+2005-01-04,14.01,14.45,13.93,13.98,000,13.98
+2005-01-03,13.39,14.23,13.25,14.08,000,14.08
+2004-12-31,12.42,13.29,12.42,13.29,000,13.29
+2004-12-30,12.25,12.61,12.18,12.56,000,12.56
+2004-12-29,11.61,11.79,11.61,11.62,000,11.62
+2004-12-28,12.25,12.40,11.97,12.00,000,12.00
+2004-12-27,11.53,12.16,11.53,12.14,000,12.14
+2004-12-23,11.41,11.64,11.14,11.23,000,11.23
+2004-12-22,11.42,11.71,11.37,11.45,000,11.45
+2004-12-21,11.78,12.00,11.37,11.55,000,11.55
+2004-12-20,12.26,12.34,11.77,11.83,000,11.83
+2004-12-17,12.34,12.75,11.87,11.95,000,11.95
+2004-12-16,12.34,12.59,11.96,12.27,000,12.27
+2004-12-15,12.41,12.88,12.23,12.35,000,12.35
+2004-12-14,12.55,12.97,12.21,12.73,000,12.73
+2004-12-13,12.37,12.61,12.13,12.54,000,12.54
+2004-12-10,13.05,13.15,12.68,12.76,000,12.76
+2004-12-09,13.52,13.71,12.77,12.88,000,12.88
+2004-12-08,13.52,13.68,13.18,13.19,000,13.19
+2004-12-07,13.07,13.74,12.96,13.67,000,13.67
+2004-12-06,12.95,13.40,12.93,13.19,1300,13.19
+2004-12-03,13.02,13.06,12.40,12.96,000,12.96
+2004-12-02,12.97,13.04,12.72,12.98,000,12.98
+2004-12-01,13.10,13.12,12.77,12.97,000,12.97
+2004-11-30,13.27,13.38,13.07,13.24,1300,13.24
+2004-11-29,12.99,13.69,12.93,13.30,000,13.30
+2004-11-26,12.76,12.90,12.59,12.78,000,12.78
+2004-11-24,12.58,12.89,12.56,12.72,000,12.72
+2004-11-23,12.78,12.91,12.57,12.67,000,12.67
+2004-11-22,13.71,13.71,12.94,12.97,000,12.97
+2004-11-19,12.79,13.83,12.77,13.50,000,13.50
+2004-11-18,13.22,13.29,12.96,12.98,000,12.98
+2004-11-17,13.20,13.39,12.77,13.21,000,13.21
+2004-11-16,13.41,13.67,13.20,13.21,000,13.21
+2004-11-15,14.05,14.06,13.25,13.38,000,13.38
+2004-11-12,13.24,13.48,13.04,13.33,000,13.33
+2004-11-11,13.11,13.12,12.64,13.04,1300,13.04
+2004-11-10,13.16,13.51,12.79,13.08,000,13.08
+2004-11-09,12.89,13.96,12.89,13.61,000,13.61
+2004-11-08,14.11,14.48,13.68,13.80,000,13.80
+2004-11-05,13.67,14.10,13.23,13.84,000,13.84
+2004-11-04,13.83,14.02,12.95,13.97,000,13.97
+2004-11-03,15.05,15.18,13.79,14.04,000,14.04
+2004-11-02,15.99,16.32,15.21,16.18,000,16.18
+2004-11-01,16.43,16.76,16.18,16.27,000,16.27
+2004-10-29,15.83,16.29,14.96,16.27,000,16.27
+2004-10-28,16.02,16.05,15.36,15.39,000,15.39
+2004-10-27,16.48,16.53,15.66,15.72,000,15.72
+2004-10-26,16.72,16.87,15.97,16.39,000,16.39
+2004-10-25,16.07,16.71,16.02,16.58,000,16.58
+2004-10-22,14.59,15.41,14.31,15.28,000,15.28
+2004-10-21,14.98,15.19,14.28,14.54,000,14.54
+2004-10-20,15.46,15.53,14.80,14.85,1200,14.85
+2004-10-19,16.32,16.32,14.32,15.13,000,15.13
+2004-10-18,16.16,16.16,14.64,14.71,000,14.71
+2004-10-15,16.28,16.49,14.72,15.04,000,15.04
+2004-10-14,15.22,16.56,15.22,16.43,000,16.43
+2004-10-13,13.92,15.63,13.92,15.42,000,15.42
+2004-10-12,15.21,15.69,14.91,15.05,000,15.05
+2004-10-11,14.69,15.27,14.28,14.71,000,14.71
+2004-10-08,14.70,15.52,13.78,15.05,000,15.05
+2004-10-07,13.33,14.66,13.32,14.50,000,14.50
+2004-10-06,14.01,14.10,13.24,13.28,000,13.28
+2004-10-05,13.51,14.19,13.51,13.95,000,13.95
+2004-10-04,13.05,13.45,12.99,13.41,000,13.41
+2004-10-01,13.11,13.11,12.60,12.75,000,12.75
+2004-09-30,13.49,13.67,13.20,13.34,000,13.34
+2004-09-29,14.09,14.14,13.20,13.21,000,13.21
+2004-09-28,14.73,14.84,13.69,13.83,000,13.83
+2004-09-27,14.86,15.09,14.55,14.62,000,14.62
+2004-09-24,14.93,14.94,14.08,14.28,000,14.28
+2004-09-23,14.85,15.08,14.61,14.80,000,14.80
+2004-09-22,15.28,15.30,13.95,14.74,000,14.74
+2004-09-21,15.98,15.98,13.38,13.66,000,13.66
+2004-09-20,13.98,15.29,13.98,14.43,000,14.43
+2004-09-17,14.11,14.43,13.93,14.03,000,14.03
+2004-09-16,14.29,14.66,14.27,14.39,000,14.39
+2004-09-15,13.88,14.67,13.68,14.64,000,14.64
+2004-09-14,13.50,13.89,13.50,13.56,000,13.56
+2004-09-13,13.64,13.78,13.16,13.17,000,13.17
+2004-09-10,13.90,14.23,13.69,13.76,000,13.76
+2004-09-09,14.12,14.41,13.70,14.01,000,14.01
+2004-09-08,14.16,14.31,13.88,14.06,000,14.06
+2004-09-07,14.52,14.64,14.03,14.07,1400,14.07
+2004-09-03,14.36,14.38,13.79,13.91,1500,13.91
+2004-09-02,14.97,15.05,14.18,14.28,000,14.28
+2004-09-01,15.39,15.39,14.72,14.91,000,14.91
+2004-08-31,15.64,15.85,15.28,15.29,000,15.29
+2004-08-30,15.35,15.58,15.30,15.44,000,15.44
+2004-08-27,14.91,15.02,14.67,14.71,000,14.71
+2004-08-26,15.22,15.22,14.76,14.91,000,14.91
+2004-08-25,15.40,15.76,14.81,14.98,000,14.98
+2004-08-24,15.63,15.81,15.33,15.33,000,15.33
+2004-08-23,16.68,16.71,15.79,15.88,000,15.88
+2004-08-20,16.99,17.04,15.78,16.00,000,16.00
+2004-08-19,16.54,17.55,16.31,16.96,000,16.96
+2004-08-18,17.55,17.55,16.13,16.23,1400,16.23
+2004-08-17,16.58,17.28,16.16,17.02,000,17.02
+2004-08-16,19.28,19.28,17.42,17.57,1500,17.57
+2004-08-13,18.91,19.25,17.97,17.98,000,17.98
+2004-08-12,18.61,19.30,18.36,19.08,000,19.08
+2004-08-11,18.15,18.49,17.84,18.04,000,18.04
+2004-08-10,18.80,18.86,17.25,17.47,000,17.47
+2004-08-09,19.97,19.97,18.63,18.89,000,18.89
+2004-08-06,18.21,19.68,18.18,19.34,000,19.34
+2004-08-05,16.19,18.41,16.17,18.32,000,18.32
+2004-08-04,16.33,16.65,15.82,16.21,000,16.21
+2004-08-03,15.56,16.05,15.28,16.03,000,16.03
+2004-08-02,16.42,16.58,15.22,15.37,000,15.37
+2004-07-30,15.85,15.89,15.27,15.32,000,15.32
+2004-07-29,16.00,16.12,15.42,15.68,000,15.68
+2004-07-28,16.77,17.41,15.94,16.15,000,16.15
+2004-07-27,17.24,17.34,16.30,16.55,000,16.55
+2004-07-26,17.22,17.93,16.98,17.30,000,17.30
+2004-07-23,15.82,16.94,15.82,16.50,000,16.50
+2004-07-22,16.65,17.10,15.29,15.75,000,15.75
+2004-07-21,14.00,16.46,13.91,16.41,000,16.41
+2004-07-20,15.53,15.57,13.98,14.17,000,14.17
+2004-07-19,15.17,15.83,14.86,15.17,000,15.17
+2004-07-16,14.27,14.58,13.95,14.34,000,14.34
+2004-07-15,13.94,14.73,13.60,14.71,000,14.71
+2004-07-14,14.90,16.59,13.34,13.76,000,13.76
+2004-07-13,14.86,15.08,14.28,14.46,000,14.46
+2004-07-12,15.25,15.61,14.61,14.96,000,14.96
+2004-07-09,16.01,16.03,15.71,15.78,000,15.78
+2004-07-08,15.86,16.36,15.50,16.20,000,16.20
+2004-07-07,16.36,16.47,15.59,15.81,000,15.81
+2004-07-06,16.25,16.75,16.13,16.25,000,16.25
+2004-07-02,15.23,15.45,14.80,15.08,000,15.08
+2004-07-01,14.74,15.57,14.41,15.20,000,15.20
+2004-06-30,15.27,15.73,14.25,14.34,000,14.34
+2004-06-29,15.22,16.28,15.22,15.47,000,15.47
+2004-06-28,15.28,16.13,15.19,16.07,000,16.07
+2004-06-25,14.78,15.29,14.47,15.19,000,15.19
+2004-06-24,14.39,14.97,14.16,14.81,000,14.81
+2004-06-23,14.60,14.82,13.75,13.98,000,13.98
+2004-06-22,15.44,15.64,14.31,14.31,000,14.31
+2004-06-21,15.61,15.62,14.96,15.26,000,15.26
+2004-06-18,14.74,15.25,14.51,14.99,000,14.99
+2004-06-17,15.06,15.58,15.00,15.15,000,15.15
+2004-06-16,14.83,15.22,14.48,14.79,000,14.79
+2004-06-15,15.34,15.35,14.72,15.05,000,15.05
+2004-06-14,15.54,16.36,15.54,16.07,000,16.07
+2004-06-10,15.33,15.35,14.92,15.04,000,15.04
+2004-06-09,14.56,15.46,14.56,15.39,000,15.39
+2004-06-08,15.79,15.88,15.00,15.01,000,15.01
+2004-06-07,16.60,16.70,15.33,15.39,1600,15.39
+2004-06-04,16.24,16.90,15.82,16.78,000,16.78
+2004-06-03,16.43,17.04,16.16,17.03,000,17.03
+2004-06-02,16.05,16.70,15.95,16.08,000,16.08
+2004-06-01,16.60,16.96,16.19,16.30,000,16.30
+2004-05-28,15.44,15.65,15.39,15.50,000,15.50
+2004-05-27,15.74,15.86,15.19,15.28,000,15.28
+2004-05-26,16.09,16.30,15.78,15.97,000,15.97
+2004-05-25,18.41,18.42,15.73,15.96,000,15.96
+2004-05-24,18.79,18.82,17.96,18.08,000,18.08
+2004-05-21,18.73,18.74,18.00,18.49,000,18.49
+2004-05-20,18.60,19.25,18.55,18.67,000,18.67
+2004-05-19,18.48,18.93,17.58,18.93,000,18.93
+2004-05-18,19.60,19.70,19.14,19.33,000,19.33
+2004-05-17,19.70,20.45,19.65,19.96,000,19.96
+2004-05-14,18.66,19.27,18.06,18.47,000,18.47
+2004-05-13,18.78,18.92,17.97,18.86,000,18.86
+2004-05-12,18.79,20.41,18.14,18.14,1400,18.14
+2004-05-11,19.23,19.28,17.94,18.57,000,18.57
+2004-05-10,19.44,20.20,18.99,19.77,000,19.77
+2004-05-07,17.22,18.17,16.44,18.13,000,18.13
+2004-05-06,16.45,17.67,16.45,17.05,000,17.05
+2004-05-05,16.43,16.55,15.64,15.77,000,15.77
+2004-05-04,16.80,17.13,15.97,16.55,000,16.55
+2004-05-03,17.69,17.72,16.61,16.62,000,16.62
+2004-04-30,16.27,17.23,16.14,17.19,000,17.19
+2004-04-29,16.36,17.27,15.87,16.60,000,16.60
+2004-04-28,15.55,16.54,15.55,16.29,000,16.29
+2004-04-27,15.05,15.17,14.37,15.07,000,15.07
+2004-04-26,14.75,15.22,14.39,14.77,1600,14.77
+2004-04-23,14.42,14.56,13.89,14.01,000,14.01
+2004-04-22,15.89,15.98,13.86,14.61,000,14.61
+2004-04-21,16.61,16.94,15.55,15.60,000,15.60
+2004-04-20,15.24,16.72,14.79,16.67,000,16.67
+2004-04-19,15.73,16.08,15.33,15.42,000,15.42
+2004-04-16,15.59,15.69,14.77,14.94,1500,14.94
+2004-04-15,16.02,16.78,15.22,15.74,000,15.74
+2004-04-14,17.29,17.71,15.60,15.62,000,15.62
+2004-04-13,15.29,17.98,15.29,17.26,000,17.26
+2004-04-12,15.71,16.12,15.00,15.28,000,15.28
+2004-04-08,14.96,16.82,14.96,16.26,000,16.26
+2004-04-07,15.41,16.36,15.34,15.76,000,15.76
+2004-04-06,15.35,15.53,15.07,15.32,000,15.32
+2004-04-05,16.17,16.64,14.81,14.97,1700,14.97
+2004-04-02,15.21,16.55,15.21,15.64,000,15.64
+2004-04-01,16.76,17.25,16.65,16.65,000,16.65
+2004-03-31,16.33,16.96,16.23,16.74,000,16.74
+2004-03-30,16.68,16.80,16.13,16.28,000,16.28
+2004-03-29,17.11,17.17,16.29,16.50,000,16.50
+2004-03-26,18.19,18.23,16.67,17.33,000,17.33
+2004-03-25,19.58,19.58,17.61,17.88,000,17.88
+2004-03-24,20.24,20.83,19.45,19.81,000,19.81
+2004-03-23,21.06,21.33,20.01,20.67,000,20.67
+2004-03-22,20.61,22.67,20.61,21.58,000,21.58
+2004-03-19,17.98,19.25,17.89,19.15,000,19.15
+2004-03-18,18.38,19.23,18.35,18.53,000,18.53
+2004-03-17,19.54,19.55,17.98,18.11,000,18.11
+2004-03-16,20.27,20.94,19.86,20.34,000,20.34
+2004-03-15,18.98,21.39,18.86,21.13,000,21.13
+2004-03-12,19.94,20.08,18.06,18.30,000,18.30
+2004-03-11,18.81,20.69,17.63,20.67,000,20.67
+2004-03-10,16.12,18.70,16.11,18.67,000,18.67
+2004-03-09,15.57,16.74,15.56,16.60,000,16.60
+2004-03-08,14.83,15.83,14.54,15.79,000,15.79
+2004-03-05,14.81,14.82,13.83,14.48,000,14.48
+2004-03-04,14.45,14.50,14.19,14.40,000,14.40
+2004-03-03,14.73,15.27,14.47,14.55,000,14.55
+2004-03-02,14.59,14.89,14.18,14.86,000,14.86
+2004-03-01,14.91,15.05,14.40,14.44,000,14.44
+2004-02-27,13.80,14.77,13.80,14.55,000,14.55
+2004-02-26,15.32,15.33,14.69,14.83,000,14.83
+2004-02-25,15.58,16.05,14.93,14.93,000,14.93
+2004-02-24,16.38,16.76,15.77,15.90,000,15.90
+2004-02-23,16.50,16.78,16.25,16.29,000,16.29
+2004-02-20,15.85,16.55,15.82,16.04,000,16.04
+2004-02-19,15.33,15.97,15.20,15.80,000,15.80
+2004-02-18,15.51,15.76,15.30,15.59,000,15.59
+2004-02-17,15.63,15.96,15.32,15.40,000,15.40
+2004-02-13,15.12,16.03,14.86,15.58,000,15.58
+2004-02-12,15.36,15.72,15.23,15.31,000,15.31
+2004-02-11,15.90,16.16,15.26,15.39,1600,15.39
+2004-02-10,16.41,16.76,15.84,15.94,000,15.94
+2004-02-09,16.54,16.82,16.12,16.39,000,16.39
+2004-02-06,17.71,17.71,15.94,16.00,000,16.00
+2004-02-05,17.91,17.99,17.60,17.71,000,17.71
+2004-02-04,17.84,18.06,17.46,17.87,000,17.87
+2004-02-03,17.29,17.78,17.17,17.34,000,17.34
+2004-02-02,17.45,17.56,16.67,17.11,000,17.11
+2004-01-30,16.55,17.35,16.55,16.63,000,16.63
+2004-01-29,16.88,17.66,16.79,17.14,000,17.14
+2004-01-28,15.37,17.06,15.29,16.78,000,16.78
+2004-01-27,15.28,15.44,14.74,15.35,000,15.35
+2004-01-26,15.78,15.78,14.52,14.55,000,14.55
+2004-01-23,14.73,15.05,14.56,14.84,000,14.84
+2004-01-22,14.20,14.87,14.01,14.71,000,14.71
+2004-01-21,15.63,15.63,14.24,14.34,000,14.34
+2004-01-20,15.77,16.13,15.09,15.21,000,15.21
+2004-01-16,15.40,15.44,14.90,15.00,000,15.00
+2004-01-15,17.07,17.31,15.49,15.56,000,15.56
+2004-01-14,17.29,17.30,16.40,16.75,000,16.75
+2004-01-13,16.60,18.33,16.53,18.04,000,18.04
+2004-01-12,17.32,17.46,16.79,16.82,000,16.82
+2004-01-09,16.15,16.88,15.57,16.75,000,16.75
+2004-01-08,15.42,15.68,15.32,15.61,000,15.61
+2004-01-07,16.72,16.75,15.50,15.50,000,15.50
+2004-01-06,17.66,17.67,16.19,16.73,000,16.73
+2004-01-05,18.45,18.49,17.44,17.49,000,17.49
+2004-01-02,17.96,18.68,17.54,18.22,000,18.22
+2003-12-31,17.49,18.86,17.41,18.31,000,18.31
+2003-12-30,17.32,17.97,17.20,17.68,000,17.68
+2003-12-29,17.81,17.86,17.07,17.09,000,17.09
+2003-12-26,16.76,17.49,16.63,17.45,000,17.45
+2003-12-24,16.65,16.77,16.24,16.66,000,16.66
+2003-12-23,17.32,17.40,16.29,16.49,000,16.49
+2003-12-22,17.06,17.31,16.63,16.94,000,16.94
+2003-12-19,16.66,16.81,15.71,16.42,000,16.42
+2003-12-18,15.59,16.19,14.66,16.16,000,16.16
+2003-12-17,16.12,16.27,15.52,15.58,000,15.58
+2003-12-16,17.27,17.42,15.90,15.93,000,15.93
+2003-12-15,15.80,17.42,15.79,17.23,000,17.23
+2003-12-12,16.19,16.98,16.09,16.41,000,16.41
+2003-12-11,17.95,17.95,16.51,16.73,000,16.73
+2003-12-10,17.66,18.27,17.58,17.87,000,17.87
+2003-12-09,16.63,17.80,16.56,17.63,000,17.63
+2003-12-08,17.55,17.59,16.52,16.54,000,16.54
+2003-12-05,16.76,17.32,16.50,17.09,000,17.09
+2003-12-04,16.48,16.83,16.29,16.30,000,16.30
+2003-12-03,16.08,16.68,15.77,16.63,000,16.63
+2003-12-02,16.89,16.89,16.17,16.27,000,16.27
+2003-12-01,16.74,17.00,16.17,16.77,000,16.77
+2003-11-28,16.51,16.62,16.16,16.32,000,16.32
+2003-11-26,16.11,17.26,16.02,16.23,000,16.23
+2003-11-25,17.40,17.87,16.40,16.71,000,16.71
+2003-11-24,18.91,18.98,17.19,17.44,000,17.44
+2003-11-21,19.10,19.40,18.82,18.98,000,18.98
+2003-11-20,19.09,19.61,18.46,19.48,000,19.48
+2003-11-19,19.14,19.51,18.65,18.80,000,18.80
+2003-11-18,18.09,19.17,17.78,19.11,000,19.11
+2003-11-17,18.14,19.36,18.04,18.60,000,18.60
+2003-11-14,16.63,17.00,16.17,16.94,000,16.94
+2003-11-13,17.05,17.12,16.43,16.47,000,16.47
+2003-11-12,17.78,17.85,16.55,16.75,000,16.75
+2003-11-11,18.14,18.53,17.50,17.54,000,17.54
+2003-11-10,17.79,17.88,17.53,17.62,1600,17.62
+2003-11-07,16.63,16.93,16.50,16.93,000,16.93
+2003-11-06,17.00,17.37,16.62,16.74,1600,16.74
+2003-11-05,16.99,17.32,16.55,16.86,000,16.86
+2003-11-04,16.57,16.78,16.45,16.55,000,16.55
+2003-11-03,16.33,16.70,16.22,16.55,000,16.55
+2003-10-31,16.11,16.18,15.79,16.10,000,16.10
+2003-10-30,18.45,18.45,16.01,16.33,000,16.33
+2003-10-29,16.85,17.02,16.34,16.43,000,16.43
+2003-10-28,17.79,17.89,16.77,16.82,000,16.82
+2003-10-27,17.97,18.18,17.74,18.05,000,18.05
+2003-10-24,18.25,18.68,17.67,17.71,000,17.71
+2003-10-23,18.51,18.51,17.48,17.68,000,17.68
+2003-10-22,17.10,17.98,17.10,17.67,000,17.67
+2003-10-21,17.16,17.20,16.19,16.55,000,16.55
+2003-10-20,17.84,18.07,17.04,17.04,000,17.04
+2003-10-17,16.97,17.85,16.97,17.62,000,17.62
+2003-10-16,17.58,18.05,16.86,17.19,1600,17.19
+2003-10-15,17.73,17.96,17.10,17.69,000,17.69
+2003-10-14,17.40,17.79,17.20,17.37,000,17.37
+2003-10-13,17.67,17.91,17.42,17.55,000,17.55
+2003-10-10,18.92,18.92,18.42,18.45,000,18.45
+2003-10-09,18.53,19.28,18.26,18.82,000,18.82
+2003-10-08,19.31,19.61,19.08,19.18,000,19.18
+2003-10-07,20.11,20.14,19.40,19.41,000,19.41
+2003-10-06,20.69,20.69,19.45,19.51,000,19.51
+2003-10-03,19.94,20.09,18.95,19.50,000,19.50
+2003-10-02,21.23,21.44,20.71,20.80,000,20.80
+2003-10-01,22.81,22.82,20.99,21.07,000,21.07
+2003-09-30,22.04,23.26,22.03,22.72,000,22.72
+2003-09-29,22.85,22.85,21.64,21.67,000,21.67
+2003-09-26,22.28,22.73,21.85,22.23,000,22.23
+2003-09-25,21.11,22.27,21.04,22.26,000,22.26
+2003-09-24,19.53,21.26,19.44,21.22,000,21.22
+2003-09-23,19.91,19.97,19.31,19.47,000,19.47
+2003-09-22,19.08,20.03,19.03,19.65,000,19.65
+2003-09-19,17.54,17.54,17.54,17.54,000,17.54
+2003-09-18,17.57,17.57,17.57,17.57,000,17.57
+2003-09-17,18.15,18.15,18.15,18.15,000,18.15
+2003-09-16,18.03,18.03,18.03,18.03,000,18.03
+2003-09-15,19.28,19.28,19.28,19.28,000,19.28
+2003-09-12,18.68,18.68,18.68,18.68,000,18.68
+2003-09-11,19.25,19.25,19.25,19.25,000,19.25
+2003-09-10,20.01,20.01,20.01,20.01,000,20.01
+2003-09-09,18.85,18.85,18.85,18.85,000,18.85
+2003-09-08,18.26,18.26,18.26,18.26,000,18.26
+2003-09-05,18.17,18.17,18.17,18.17,000,18.17
+2003-09-04,18.71,18.71,18.71,18.71,000,18.71
+2003-09-03,19.44,19.44,19.44,19.44,000,19.44
+2003-09-02,19.02,19.02,19.02,19.02,000,19.02
+2003-08-29,18.63,18.63,18.63,18.63,000,18.63
+2003-08-28,18.48,18.48,18.48,18.48,000,18.48
+2003-08-27,19.13,19.13,19.13,19.13,000,19.13
+2003-08-26,19.49,19.49,19.49,19.49,000,19.49
+2003-08-25,19.53,19.53,19.53,19.53,000,19.53
+2003-08-22,18.55,18.55,18.55,18.55,000,18.55
+2003-08-21,17.84,17.84,17.84,17.84,000,17.84
+2003-08-20,17.82,17.82,17.82,17.82,000,17.82
+2003-08-19,17.86,17.86,17.86,17.86,000,17.86
+2003-08-18,18.18,18.18,18.18,18.18,000,18.18
+2003-08-15,18.27,18.27,18.27,18.27,000,18.27
+2003-08-14,18.47,18.47,18.47,18.47,000,18.47
+2003-08-13,18.77,18.77,18.77,18.77,000,18.77
+2003-08-12,17.94,17.94,17.94,17.94,000,17.94
+2003-08-11,19.75,19.75,19.75,19.75,000,19.75
+2003-08-08,19.59,19.59,19.59,19.59,000,19.59
+2003-08-07,20.26,20.26,20.26,20.26,000,20.26
+2003-08-06,21.50,21.50,21.50,21.50,000,21.50
+2003-08-05,22.68,22.68,22.68,22.68,000,22.68
+2003-08-04,21.27,21.27,21.27,21.27,000,21.27
+2003-08-01,20.75,20.75,20.75,20.75,000,20.75
+2003-07-31,19.49,19.49,19.49,19.49,000,19.49
+2003-07-30,18.85,18.85,18.85,18.85,000,18.85
+2003-07-29,18.67,18.67,18.67,18.67,000,18.67
+2003-07-28,18.36,18.36,18.36,18.36,000,18.36
+2003-07-25,17.75,17.75,17.75,17.75,000,17.75
+2003-07-24,18.60,18.60,18.60,18.60,000,18.60
+2003-07-23,18.64,18.64,18.64,18.64,000,18.64
+2003-07-22,19.17,19.17,19.17,19.17,000,19.17
+2003-07-21,19.78,19.78,19.78,19.78,000,19.78
+2003-07-18,19.11,19.11,19.11,19.11,000,19.11
+2003-07-17,20.22,20.22,20.22,20.22,000,20.22
+2003-07-16,19.76,19.76,19.76,19.76,000,19.76
+2003-07-15,19.55,19.55,19.55,19.55,000,19.55
+2003-07-14,19.59,19.59,19.59,19.59,000,19.59
+2003-07-11,18.47,18.47,18.47,18.47,000,18.47
+2003-07-10,19.19,19.19,19.19,19.19,000,19.19
+2003-07-09,18.93,18.93,18.93,18.93,000,18.93
+2003-07-08,19.48,19.48,19.48,19.48,000,19.48
+2003-07-07,20.06,20.06,20.06,20.06,000,20.06
+2003-07-03,19.39,19.39,19.39,19.39,000,19.39
+2003-07-02,19.03,19.03,19.03,19.03,000,19.03
+2003-07-01,19.46,19.46,19.46,19.46,000,19.46
+2003-06-30,19.52,19.52,19.52,19.52,000,19.52
+2003-06-27,19.16,19.16,19.16,19.16,000,19.16
+2003-06-26,19.40,19.40,19.40,19.40,000,19.40
+2003-06-25,20.81,20.81,20.81,20.81,000,20.81
+2003-06-24,20.75,20.75,20.75,20.75,000,20.75
+2003-06-23,20.58,20.58,20.58,20.58,000,20.58
+2003-06-20,19.14,19.14,19.14,19.14,000,19.14
+2003-06-19,19.80,19.80,19.80,19.80,000,19.80
+2003-06-18,19.76,19.76,19.76,19.76,000,19.76
+2003-06-17,20.01,20.01,20.01,20.01,000,20.01
+2003-06-16,20.22,20.22,20.22,20.22,000,20.22
+2003-06-13,20.66,20.66,20.66,20.66,000,20.66
+2003-06-12,20.41,20.41,20.41,20.41,000,20.41
+2003-06-11,20.21,20.21,20.21,20.21,000,20.21
+2003-06-10,20.64,20.64,20.64,20.64,000,20.64
+2003-06-09,22.15,22.15,22.15,22.15,000,22.15
+2003-06-06,21.25,21.25,21.25,21.25,000,21.25
+2003-06-05,20.83,20.83,20.83,20.83,000,20.83
+2003-06-04,20.62,20.62,20.62,20.62,000,20.62
+2003-06-03,20.84,20.84,20.84,20.84,000,20.84
+2003-06-02,20.85,20.85,20.85,20.85,000,20.85
+2003-05-30,19.47,19.47,19.47,19.47,000,19.47
+2003-05-29,20.43,20.43,20.43,20.43,000,20.43
+2003-05-28,20.03,20.03,20.03,20.03,000,20.03
+2003-05-27,19.99,19.99,19.99,19.99,000,19.99
+2003-05-23,19.17,19.17,19.17,19.17,000,19.17
+2003-05-22,19.78,19.78,19.78,19.78,000,19.78
+2003-05-21,21.21,21.21,21.21,21.21,000,21.21
+2003-05-20,21.29,21.29,21.29,21.29,000,21.29
+2003-05-19,20.51,20.51,20.51,20.51,000,20.51
+2003-05-16,18.40,18.40,18.40,18.40,000,18.40
+2003-05-15,19.24,19.24,19.24,19.24,000,19.24
+2003-05-14,20.00,20.00,20.00,20.00,000,20.00
+2003-05-13,19.91,19.91,19.91,19.91,000,19.91
+2003-05-12,19.52,19.52,19.52,19.52,000,19.52
+2003-05-09,19.69,19.69,19.69,19.69,000,19.69
+2003-05-08,21.24,21.24,21.24,21.24,000,21.24
+2003-05-07,21.00,21.00,21.00,21.00,000,21.00
+2003-05-06,20.80,20.80,20.80,20.80,000,20.80
+2003-05-05,21.13,21.13,21.13,21.13,000,21.13
+2003-05-02,20.63,20.63,20.63,20.63,000,20.63
+2003-05-01,21.59,21.59,21.59,21.59,000,21.59
+2003-04-30,21.21,21.21,21.21,21.21,000,21.21
+2003-04-29,20.76,20.76,20.76,20.76,000,20.76
+2003-04-28,20.84,20.84,20.84,20.84,000,20.84
+2003-04-25,20.80,20.80,20.80,20.80,000,20.80
+2003-04-24,20.33,20.33,20.33,20.33,000,20.33
+2003-04-23,20.80,20.80,20.80,20.80,000,20.80
+2003-04-22,20.70,20.70,20.70,20.70,000,20.70
+2003-04-21,21.95,21.95,21.95,21.95,000,21.95
+2003-04-17,21.50,21.50,21.50,21.50,000,21.50
+2003-04-16,22.52,22.52,22.52,22.52,000,22.52
+2003-04-15,22.56,22.56,22.56,22.56,000,22.56
+2003-04-14,23.41,23.41,23.41,23.41,000,23.41
+2003-04-11,24.44,24.44,24.44,24.44,000,24.44
+2003-04-10,25.60,25.60,25.60,25.60,000,25.60
+2003-04-09,27.11,27.11,27.11,27.11,000,27.11
+2003-04-08,27.13,27.13,27.13,27.13,000,27.13
+2003-04-07,28.45,28.45,28.45,28.45,000,28.45
+2003-04-04,29.13,29.13,29.13,29.13,000,29.13
+2003-04-03,28.21,28.21,28.21,28.21,000,28.21
+2003-04-02,28.02,28.02,28.02,28.02,000,28.02
+2003-04-01,28.36,28.36,28.36,28.36,000,28.36
+2003-03-31,29.15,29.15,29.15,29.15,000,29.15
+2003-03-28,27.75,27.75,27.75,27.75,000,27.75
+2003-03-27,27.96,27.96,27.96,27.96,000,27.96
+2003-03-26,28.23,28.23,28.23,28.23,000,28.23
+2003-03-25,28.75,28.75,28.75,28.75,000,28.75
+2003-03-24,30.39,30.39,30.39,30.39,000,30.39
+2003-03-21,28.67,28.67,28.67,28.67,000,28.67
+2003-03-20,30.44,30.44,30.44,30.44,000,30.44
+2003-03-19,31.54,31.54,31.54,31.54,000,31.54
+2003-03-18,30.43,30.43,30.43,30.43,000,30.43
+2003-03-17,31.75,31.75,31.75,31.75,000,31.75
+2003-03-14,30.98,30.98,30.98,30.98,000,30.98
+2003-03-13,31.76,31.76,31.76,31.76,000,31.76
+2003-03-12,33.51,33.51,33.51,33.51,000,33.51
+2003-03-11,33.61,33.61,33.61,33.61,000,33.61
+2003-03-10,33.31,33.31,33.31,33.31,000,33.31
+2003-03-07,31.08,31.08,31.08,31.08,000,31.08
+2003-03-06,31.37,31.37,31.37,31.37,000,31.37
+2003-03-05,30.38,30.38,30.38,30.38,000,30.38
+2003-03-04,31.83,31.83,31.83,31.83,000,31.83
+2003-03-03,30.43,30.43,30.43,30.43,000,30.43
+2003-02-28,29.63,29.63,29.63,29.63,000,29.63
+2003-02-27,30.53,30.53,30.53,30.53,000,30.53
+2003-02-26,31.94,31.94,31.94,31.94,000,31.94
+2003-02-25,31.74,31.74,31.74,31.74,000,31.74
+2003-02-24,31.98,31.98,31.98,31.98,000,31.98
+2003-02-21,30.25,30.25,30.25,30.25,000,30.25
+2003-02-20,31.16,31.16,31.16,31.16,000,31.16
+2003-02-19,31.31,31.31,31.31,31.31,000,31.31
+2003-02-18,31.11,31.11,31.11,31.11,000,31.11
+2003-02-14,32.62,32.62,32.62,32.62,000,32.62
+2003-02-13,33.70,33.70,33.70,33.70,000,33.70
+2003-02-12,34.33,34.33,34.33,34.33,000,34.33
+2003-02-11,33.68,33.68,33.68,33.68,000,33.68
+2003-02-10,33.99,33.99,33.99,33.99,000,33.99
+2003-02-07,34.01,34.01,34.01,34.01,000,34.01
+2003-02-06,33.35,33.35,33.35,33.35,000,33.35
+2003-02-05,33.04,33.04,33.04,33.04,000,33.04
+2003-02-04,32.76,32.76,32.76,32.76,000,32.76
+2003-02-03,31.02,31.02,31.02,31.02,000,31.02
+2003-01-31,31.17,31.17,31.17,31.17,000,31.17
+2003-01-30,31.32,31.32,31.32,31.32,000,31.32
+2003-01-29,31.26,31.26,31.26,31.26,000,31.26
+2003-01-28,31.93,31.93,31.93,31.93,000,31.93
+2003-01-27,34.69,34.69,34.69,34.69,000,34.69
+2003-01-24,31.51,31.51,31.51,31.51,000,31.51
+2003-01-23,27.53,27.53,27.53,27.53,000,27.53
+2003-01-22,29.01,29.01,29.01,29.01,000,29.01
+2003-01-21,27.59,27.59,27.59,27.59,000,27.59
+2003-01-17,25.70,25.70,25.70,25.70,000,25.70
+2003-01-16,25.01,25.01,25.01,25.01,000,25.01
+2003-01-15,25.51,25.51,25.51,25.51,000,25.51
+2003-01-14,24.57,24.57,24.57,24.57,000,24.57
+2003-01-13,24.90,24.90,24.90,24.90,000,24.90
+2003-01-10,24.32,24.32,24.32,24.32,000,24.32
+2003-01-09,24.25,24.25,24.25,24.25,000,24.25
+2003-01-08,25.53,25.53,25.53,25.53,000,25.53
+2003-01-07,25.13,25.13,25.13,25.13,000,25.13
+2003-01-06,24.91,24.91,24.91,24.91,000,24.91
+2003-01-03,24.68,24.68,24.68,24.68,000,24.68
+2003-01-02,25.39,25.39,25.39,25.39,000,25.39
+2002-12-31,28.62,28.62,28.62,28.62,000,28.62
+2002-12-30,29.62,29.62,29.62,29.62,000,29.62
+2002-12-27,29.55,29.55,29.55,29.55,000,29.55
+2002-12-26,27.37,27.37,27.37,27.37,000,27.37
+2002-12-24,26.49,26.49,26.49,26.49,000,26.49
+2002-12-23,26.20,26.20,26.20,26.20,000,26.20
+2002-12-20,26.71,26.71,26.71,26.71,000,26.71
+2002-12-19,30.21,30.21,30.21,30.21,000,30.21
+2002-12-18,28.29,28.29,28.29,28.29,000,28.29
+2002-12-17,26.66,26.66,26.66,26.66,000,26.66
+2002-12-16,26.24,26.24,26.24,26.24,000,26.24
+2002-12-13,28.18,28.18,28.18,28.18,000,28.18
+2002-12-12,27.29,27.29,27.29,27.29,000,27.29
+2002-12-11,27.76,27.76,27.76,27.76,000,27.76
+2002-12-10,28.76,28.76,28.76,28.76,000,28.76
+2002-12-09,30.78,30.78,30.78,30.78,000,30.78
+2002-12-06,28.88,28.88,28.88,28.88,000,28.88
+2002-12-05,30.10,30.10,30.10,30.10,000,30.10
+2002-12-04,28.92,28.92,28.92,28.92,000,28.92
+2002-12-03,28.33,28.33,28.33,28.33,000,28.33
+2002-12-02,27.46,27.46,27.46,27.46,000,27.46
+2002-11-29,27.50,27.50,27.50,27.50,000,27.50
+2002-11-27,27.25,27.25,27.25,27.25,000,27.25
+2002-11-26,25.97,25.97,25.97,25.97,000,25.97
+2002-11-25,24.07,24.07,24.07,24.07,000,24.07
+2002-11-22,23.16,23.16,23.16,23.16,000,23.16
+2002-11-21,23.81,23.81,23.81,23.81,000,23.81
+2002-11-20,25.32,25.32,25.32,25.32,000,25.32
+2002-11-19,27.41,27.41,27.41,27.41,000,27.41
+2002-11-18,27.66,27.66,27.66,27.66,000,27.66
+2002-11-15,26.65,26.65,26.65,26.65,000,26.65
+2002-11-14,28.67,28.67,28.67,28.67,000,28.67
+2002-11-13,31.24,31.24,31.24,31.24,000,31.24
+2002-11-12,30.58,30.58,30.58,30.58,000,30.58
+2002-11-11,31.30,31.30,31.30,31.30,000,31.30
+2002-11-08,29.41,29.41,29.41,29.41,000,29.41
+2002-11-07,30.26,30.26,30.26,30.26,000,30.26
+2002-11-06,30.31,30.31,30.31,30.31,000,30.31
+2002-11-05,31.23,31.23,31.23,31.23,000,31.23
+2002-11-04,30.82,30.82,30.82,30.82,000,30.82
+2002-11-01,29.30,29.30,29.30,29.30,000,29.30
+2002-10-31,31.14,31.14,31.14,31.14,000,31.14
+2002-10-30,31.23,31.23,31.23,31.23,000,31.23
+2002-10-29,32.27,32.27,32.27,32.27,000,32.27
+2002-10-28,31.07,31.07,31.07,31.07,000,31.07
+2002-10-25,30.00,30.00,30.00,30.00,000,30.00
+2002-10-24,34.03,34.03,34.03,34.03,000,34.03
+2002-10-23,33.20,33.20,33.20,33.20,000,33.20
+2002-10-22,34.09,34.09,34.09,34.09,000,34.09
+2002-10-21,33.11,33.11,33.11,33.11,000,33.11
+2002-10-18,33.53,33.53,33.53,33.53,000,33.53
+2002-10-17,34.10,34.10,34.10,34.10,000,34.10
+2002-10-16,36.00,36.00,36.00,36.00,000,36.00
+2002-10-15,34.02,34.02,34.02,34.02,000,34.02
+2002-10-14,36.04,36.04,36.04,36.04,000,36.04
+2002-10-11,35.70,35.70,35.70,35.70,000,35.70
+2002-10-10,37.55,37.55,37.55,37.55,000,37.55
+2002-10-09,42.13,42.13,42.13,42.13,000,42.13
+2002-10-08,41.02,41.02,41.02,41.02,000,41.02
+2002-10-07,42.64,42.64,42.64,42.64,000,42.64
+2002-10-04,39.46,39.46,39.46,39.46,000,39.46
+2002-10-03,37.31,37.31,37.31,37.31,000,37.31
+2002-10-02,36.83,36.83,36.83,36.83,000,36.83
+2002-10-01,34.12,34.12,34.12,34.12,000,34.12
+2002-09-30,39.69,39.69,39.69,39.69,000,39.69
+2002-09-27,36.97,36.97,36.97,36.97,000,36.97
+2002-09-26,34.60,34.60,34.60,34.60,000,34.60
+2002-09-25,37.33,37.33,37.33,37.33,000,37.33
+2002-09-24,40.52,40.52,40.52,40.52,000,40.52
+2002-09-23,39.68,39.68,39.68,39.68,000,39.68
+2002-09-20,38.98,38.98,38.98,38.98,000,38.98
+2002-09-19,40.65,40.65,40.65,40.65,000,40.65
+2002-09-18,37.52,37.52,37.52,37.52,000,37.52
+2002-09-17,38.01,38.01,38.01,38.01,000,38.01
+2002-09-16,36.74,36.74,36.74,36.74,000,36.74
+2002-09-13,35.82,35.82,35.82,35.82,000,35.82
+2002-09-12,37.50,37.50,37.50,37.50,000,37.50
+2002-09-11,34.81,34.81,34.81,34.81,000,34.81
+2002-09-10,35.08,35.08,35.08,35.08,000,35.08
+2002-09-09,36.45,36.45,36.45,36.45,000,36.45
+2002-09-06,36.33,36.33,36.33,36.33,000,36.33
+2002-09-05,38.86,38.86,38.86,38.86,000,38.86
+2002-09-04,37.44,37.44,37.44,37.44,000,37.44
+2002-09-03,39.97,39.97,39.97,39.97,000,39.97
+2002-08-30,32.64,32.64,32.64,32.64,000,32.64
+2002-08-29,33.67,33.67,33.67,33.67,000,33.67
+2002-08-28,33.32,33.32,33.32,33.32,000,33.32
+2002-08-27,30.11,30.11,30.11,30.11,000,30.11
+2002-08-26,29.89,29.89,29.89,29.89,000,29.89
+2002-08-23,29.32,29.32,29.32,29.32,000,29.32
+2002-08-22,27.75,27.75,27.75,27.75,000,27.75
+2002-08-21,28.23,28.23,28.23,28.23,000,28.23
+2002-08-20,29.59,29.59,29.59,29.59,000,29.59
+2002-08-19,28.61,28.61,28.61,28.61,000,28.61
+2002-08-16,28.81,28.81,28.81,28.81,000,28.81
+2002-08-15,29.43,29.43,29.43,29.43,000,29.43
+2002-08-14,32.36,32.36,32.36,32.36,000,32.36
+2002-08-13,35.82,35.82,35.82,35.82,000,35.82
+2002-08-12,37.05,37.05,37.05,37.05,000,37.05
+2002-08-09,35.33,35.33,35.33,35.33,000,35.33
+2002-08-08,36.33,36.33,36.33,36.33,000,36.33
+2002-08-07,38.73,38.73,38.73,38.73,000,38.73
+2002-08-06,42.03,42.03,42.03,42.03,000,42.03
+2002-08-05,45.08,45.08,45.08,45.08,000,45.08
+2002-08-02,41.29,41.29,41.29,41.29,000,41.29
+2002-08-01,36.95,36.95,36.95,36.95,000,36.95
+2002-07-31,32.03,32.03,32.03,32.03,000,32.03
+2002-07-30,31.92,31.92,31.92,31.92,000,31.92
+2002-07-29,31.33,31.33,31.33,31.33,000,31.33
+2002-07-26,35.51,35.51,35.51,35.51,000,35.51
+2002-07-25,39.27,39.27,39.27,39.27,000,39.27
+2002-07-24,39.86,39.86,39.86,39.86,000,39.86
+2002-07-23,44.92,44.92,44.92,44.92,000,44.92
+2002-07-22,41.87,41.87,41.87,41.87,000,41.87
+2002-07-19,38.17,38.17,38.17,38.17,000,38.17
+2002-07-18,35.12,35.12,35.12,35.12,000,35.12
+2002-07-17,35.45,35.45,35.45,35.45,000,35.45
+2002-07-16,36.65,36.65,36.65,36.65,000,36.65
+2002-07-15,35.03,35.03,35.03,35.03,000,35.03
+2002-07-12,32.94,32.94,32.94,32.94,000,32.94
+2002-07-11,33.85,33.85,33.85,33.85,000,33.85
+2002-07-10,34.10,34.10,34.10,34.10,000,34.10
+2002-07-09,30.22,30.22,30.22,30.22,000,30.22
+2002-07-08,28.25,28.25,28.25,28.25,000,28.25
+2002-07-05,27.11,27.11,27.11,27.11,000,27.11
+2002-07-03,29.42,29.42,29.42,29.42,000,29.42
+2002-07-02,28.96,28.96,28.96,28.96,000,28.96
+2002-07-01,27.11,27.11,27.11,27.11,000,27.11
+2002-06-28,25.40,25.40,25.40,25.40,000,25.40
+2002-06-27,26.29,26.29,26.29,26.29,000,26.29
+2002-06-26,28.42,28.42,28.42,28.42,000,28.42
+2002-06-25,27.84,27.84,27.84,27.84,000,27.84
+2002-06-24,26.98,26.98,26.98,26.98,000,26.98
+2002-06-21,27.23,27.23,27.23,27.23,000,27.23
+2002-06-20,27.48,27.48,27.48,27.48,000,27.48
+2002-06-19,26.06,26.06,26.06,26.06,000,26.06
+2002-06-18,24.24,24.24,24.24,24.24,000,24.24
+2002-06-17,24.64,24.64,24.64,24.64,000,24.64
+2002-06-14,25.96,25.96,25.96,25.96,000,25.96
+2002-06-13,25.02,25.02,25.02,25.02,000,25.02
+2002-06-12,24.15,24.15,24.15,24.15,000,24.15
+2002-06-11,24.45,24.45,24.45,24.45,000,24.45
+2002-06-10,23.72,23.72,23.72,23.72,000,23.72
+2002-06-07,23.51,23.51,23.51,23.51,000,23.51
+2002-06-06,24.16,24.16,24.16,24.16,000,24.16
+2002-06-05,22.61,22.61,22.61,22.61,000,22.61
+2002-06-04,23.89,23.89,23.89,23.89,000,23.89
+2002-06-03,23.37,23.37,23.37,23.37,000,23.37
+2002-05-31,19.98,19.98,19.98,19.98,000,19.98
+2002-05-30,20.61,20.61,20.61,20.61,000,20.61
+2002-05-29,20.39,20.39,20.39,20.39,000,20.39
+2002-05-28,20.31,20.31,20.31,20.31,000,20.31
+2002-05-24,18.90,18.90,18.90,18.90,000,18.90
+2002-05-23,18.23,18.23,18.23,18.23,000,18.23
+2002-05-22,19.58,19.58,19.58,19.58,000,19.58
+2002-05-21,20.05,20.05,20.05,20.05,000,20.05
+2002-05-20,19.24,19.24,19.24,19.24,000,19.24
+2002-05-17,17.70,17.70,17.70,17.70,000,17.70
+2002-05-16,18.50,18.50,18.50,18.50,000,18.50
+2002-05-15,19.19,19.19,19.19,19.19,000,19.19
+2002-05-14,19.35,19.35,19.35,19.35,000,19.35
+2002-05-13,20.72,20.72,20.72,20.72,000,20.72
+2002-05-10,22.41,22.41,22.41,22.41,000,22.41
+2002-05-09,21.56,21.56,21.56,21.56,000,21.56
+2002-05-08,20.39,20.39,20.39,20.39,000,20.39
+2002-05-07,21.94,21.94,21.94,21.94,000,21.94
+2002-05-06,22.56,22.56,22.56,22.56,000,22.56
+2002-05-03,20.19,20.19,20.19,20.19,000,20.19
+2002-05-02,20.07,20.07,20.07,20.07,000,20.07
+2002-05-01,20.06,20.06,20.06,20.06,000,20.06
+2002-04-30,21.91,21.91,21.91,21.91,000,21.91
+2002-04-29,24.05,24.05,24.05,24.05,000,24.05
+2002-04-26,22.14,22.14,22.14,22.14,000,22.14
+2002-04-25,20.95,20.95,20.95,20.95,000,20.95
+2002-04-24,20.77,20.77,20.77,20.77,000,20.77
+2002-04-23,20.28,20.28,20.28,20.28,000,20.28
+2002-04-22,19.77,19.77,19.77,19.77,000,19.77
+2002-04-19,18.30,18.30,18.30,18.30,000,18.30
+2002-04-18,19.29,19.29,19.29,19.29,000,19.29
+2002-04-17,18.43,18.43,18.43,18.43,000,18.43
+2002-04-16,18.11,18.11,18.11,18.11,000,18.11
+2002-04-15,19.82,19.82,19.82,19.82,000,19.82
+2002-04-12,19.42,19.42,19.42,19.42,000,19.42
+2002-04-11,20.30,20.30,20.30,20.30,000,20.30
+2002-04-10,18.19,18.19,18.19,18.19,000,18.19
+2002-04-09,19.47,19.47,19.47,19.47,000,19.47
+2002-04-08,19.61,19.61,19.61,19.61,000,19.61
+2002-04-05,19.13,19.13,19.13,19.13,000,19.13
+2002-04-04,19.78,19.78,19.78,19.78,000,19.78
+2002-04-03,20.20,20.20,20.20,20.20,000,20.20
+2002-04-02,19.16,19.16,19.16,19.16,000,19.16
+2002-04-01,18.73,18.73,18.73,18.73,000,18.73
+2002-03-28,17.40,17.40,17.40,17.40,000,17.40
+2002-03-27,17.70,17.70,17.70,17.70,000,17.70
+2002-03-26,18.13,18.13,18.13,18.13,000,18.13
+2002-03-25,18.48,18.48,18.48,18.48,000,18.48
+2002-03-22,17.77,17.77,17.77,17.77,000,17.77
+2002-03-21,18.15,18.15,18.15,18.15,000,18.15
+2002-03-20,18.46,18.46,18.46,18.46,000,18.46
+2002-03-19,18.16,18.16,18.16,18.16,000,18.16
+2002-03-18,18.93,18.93,18.93,18.93,000,18.93
+2002-03-15,18.42,18.42,18.42,18.42,000,18.42
+2002-03-14,19.20,19.20,19.20,19.20,000,19.20
+2002-03-13,19.46,19.46,19.46,19.46,000,19.46
+2002-03-12,19.59,19.59,19.59,19.59,000,19.59
+2002-03-11,19.84,19.84,19.84,19.84,000,19.84
+2002-03-08,19.27,19.27,19.27,19.27,000,19.27
+2002-03-07,20.04,20.04,20.04,20.04,000,20.04
+2002-03-06,19.94,19.94,19.94,19.94,000,19.94
+2002-03-05,20.30,20.30,20.30,20.30,000,20.30
+2002-03-04,20.50,20.50,20.50,20.50,000,20.50
+2002-03-01,19.96,19.96,19.96,19.96,000,19.96
+2002-02-28,21.59,21.59,21.59,21.59,000,21.59
+2002-02-27,21.49,21.49,21.49,21.49,000,21.49
+2002-02-26,21.68,21.68,21.68,21.68,000,21.68
+2002-02-25,21.84,21.84,21.84,21.84,000,21.84
+2002-02-22,22.86,22.86,22.86,22.86,000,22.86
+2002-02-21,23.80,23.80,23.80,23.80,000,23.80
+2002-02-20,22.66,22.66,22.66,22.66,000,22.66
+2002-02-19,24.43,24.43,24.43,24.43,000,24.43
+2002-02-15,22.37,22.37,22.37,22.37,000,22.37
+2002-02-14,21.77,21.77,21.77,21.77,000,21.77
+2002-02-13,20.85,20.85,20.85,20.85,000,20.85
+2002-02-12,21.62,21.62,21.62,21.62,000,21.62
+2002-02-11,21.78,21.78,21.78,21.78,000,21.78
+2002-02-08,23.26,23.26,23.26,23.26,000,23.26
+2002-02-07,25.11,25.11,25.11,25.11,000,25.11
+2002-02-06,26.09,26.09,26.09,26.09,000,26.09
+2002-02-05,25.45,25.45,25.45,25.45,000,25.45
+2002-02-04,24.87,24.87,24.87,24.87,000,24.87
+2002-02-01,21.12,21.12,21.12,21.12,000,21.12
+2002-01-31,21.09,21.09,21.09,21.09,000,21.09
+2002-01-30,23.22,23.22,23.22,23.22,000,23.22
+2002-01-29,24.35,24.35,24.35,24.35,000,24.35
+2002-01-28,21.14,21.14,21.14,21.14,000,21.14
+2002-01-25,21.01,21.01,21.01,21.01,000,21.01
+2002-01-24,21.15,21.15,21.15,21.15,000,21.15
+2002-01-23,21.88,21.88,21.88,21.88,000,21.88
+2002-01-22,23.61,23.61,23.61,23.61,000,23.61
+2002-01-18,22.52,22.52,22.52,22.52,000,22.52
+2002-01-17,22.25,22.25,22.25,22.25,000,22.25
+2002-01-16,23.45,23.45,23.45,23.45,000,23.45
+2002-01-15,22.70,22.70,22.70,22.70,000,22.70
+2002-01-14,23.58,23.58,23.58,23.58,000,23.58
+2002-01-11,22.60,22.60,22.60,22.60,000,22.60
+2002-01-10,22.03,22.03,22.03,22.03,000,22.03
+2002-01-09,22.13,22.13,22.13,22.13,000,22.13
+2002-01-08,21.83,21.83,21.83,21.83,000,21.83
+2002-01-07,21.67,21.67,21.67,21.67,000,21.67
+2002-01-04,20.45,20.45,20.45,20.45,000,20.45
+2002-01-03,21.34,21.34,21.34,21.34,000,21.34
+2002-01-02,22.71,22.71,22.71,22.71,000,22.71
+2001-12-31,23.80,23.80,23.80,23.80,000,23.80
+2001-12-28,21.40,21.40,21.40,21.40,000,21.40
+2001-12-27,21.59,21.59,21.59,21.59,000,21.59
+2001-12-26,22.29,22.29,22.29,22.29,000,22.29
+2001-12-24,22.62,22.62,22.62,22.62,000,22.62
+2001-12-21,22.50,22.50,22.50,22.50,000,22.50
+2001-12-20,23.67,23.67,23.67,23.67,000,23.67
+2001-12-19,22.58,22.58,22.58,22.58,000,22.58
+2001-12-18,23.29,23.29,23.29,23.29,000,23.29
+2001-12-17,24.26,24.26,24.26,24.26,000,24.26
+2001-12-14,24.63,24.63,24.63,24.63,000,24.63
+2001-12-13,25.91,25.91,25.91,25.91,000,25.91
+2001-12-12,24.87,24.87,24.87,24.87,000,24.87
+2001-12-11,25.30,25.30,25.30,25.30,000,25.30
+2001-12-10,25.62,25.62,25.62,25.62,000,25.62
+2001-12-07,23.49,23.49,23.49,23.49,000,23.49
+2001-12-06,23.71,23.71,23.71,23.71,000,23.71
+2001-12-05,23.02,23.02,23.02,23.02,000,23.02
+2001-12-04,24.08,24.08,24.08,24.08,000,24.08
+2001-12-03,25.77,25.77,25.77,25.77,000,25.77
+2001-11-30,24.92,24.92,24.92,24.92,000,24.92
+2001-11-29,25.18,25.18,25.18,25.18,000,25.18
+2001-11-28,25.90,25.90,25.90,25.90,000,25.90
+2001-11-27,24.00,24.00,24.00,24.00,000,24.00
+2001-11-26,23.79,23.79,23.79,23.79,000,23.79
+2001-11-23,23.25,23.25,23.25,23.25,000,23.25
+2001-11-21,24.19,24.19,24.19,24.19,000,24.19
+2001-11-20,24.12,24.12,24.12,24.12,000,24.12
+2001-11-19,24.46,24.46,24.46,24.46,000,24.46
+2001-11-16,25.07,25.07,25.07,25.07,000,25.07
+2001-11-15,25.56,25.56,25.56,25.56,000,25.56
+2001-11-14,26.56,26.56,26.56,26.56,000,26.56
+2001-11-13,26.47,26.47,26.47,26.47,000,26.47
+2001-11-12,29.35,29.35,29.35,29.35,000,29.35
+2001-11-09,27.44,27.44,27.44,27.44,000,27.44
+2001-11-08,28.62,28.62,28.62,28.62,000,28.62
+2001-11-07,29.13,29.13,29.13,29.13,000,29.13
+2001-11-06,28.80,28.80,28.80,28.80,000,28.80
+2001-11-05,30.50,30.50,30.50,30.50,000,30.50
+2001-11-02,30.71,30.71,30.71,30.71,000,30.71
+2001-11-01,32.31,32.31,32.31,32.31,000,32.31
+2001-10-31,33.56,33.56,33.56,33.56,000,33.56
+2001-10-30,33.46,33.46,33.46,33.46,000,33.46
+2001-10-29,31.64,31.64,31.64,31.64,000,31.64
+2001-10-26,28.42,28.42,28.42,28.42,000,28.42
+2001-10-25,29.46,29.46,29.46,29.46,000,29.46
+2001-10-24,30.95,30.95,30.95,30.95,000,30.95
+2001-10-23,32.00,32.00,32.00,32.00,000,32.00
+2001-10-22,32.25,32.25,32.25,32.25,000,32.25
+2001-10-19,34.11,34.11,34.11,34.11,000,34.11
+2001-10-18,34.95,34.95,34.95,34.95,000,34.95
+2001-10-17,35.08,35.08,35.08,35.08,000,35.08
+2001-10-16,32.88,32.88,32.88,32.88,000,32.88
+2001-10-15,35.31,35.31,35.31,35.31,000,35.31
+2001-10-12,35.27,35.27,35.27,35.27,000,35.27
+2001-10-11,31.50,31.50,31.50,31.50,000,31.50
+2001-10-10,31.60,31.60,31.60,31.60,000,31.60
+2001-10-09,34.83,34.83,34.83,34.83,000,34.83
+2001-10-08,35.12,35.12,35.12,35.12,000,35.12
+2001-10-05,33.39,33.39,33.39,33.39,000,33.39
+2001-10-04,31.97,31.97,31.97,31.97,000,31.97
+2001-10-03,31.34,31.34,31.34,31.34,000,31.34
+2001-10-02,31.18,31.18,31.18,31.18,000,31.18
+2001-10-01,32.32,32.32,32.32,32.32,000,32.32
+2001-09-28,31.93,31.93,31.93,31.93,000,31.93
+2001-09-27,34.00,34.00,34.00,34.00,000,34.00
+2001-09-26,35.26,35.26,35.26,35.26,000,35.26
+2001-09-25,35.81,35.81,35.81,35.81,000,35.81
+2001-09-24,37.75,37.75,37.75,37.75,000,37.75
+2001-09-21,42.66,42.66,42.66,42.66,000,42.66
+2001-09-20,43.74,43.74,43.74,43.74,000,43.74
+2001-09-19,40.56,40.56,40.56,40.56,000,40.56
+2001-09-18,38.87,38.87,38.87,38.87,000,38.87
+2001-09-17,41.76,41.76,41.76,41.76,000,41.76
+2001-09-10,31.84,31.84,31.84,31.84,000,31.84
+2001-09-07,30.99,30.99,30.99,30.99,000,30.99
+2001-09-06,28.61,28.61,28.61,28.61,000,28.61
+2001-09-05,26.35,26.35,26.35,26.35,000,26.35
+2001-09-04,25.85,25.85,25.85,25.85,000,25.85
+2001-08-31,24.92,24.92,24.92,24.92,000,24.92
+2001-08-30,25.41,25.41,25.41,25.41,000,25.41
+2001-08-29,23.03,23.03,23.03,23.03,000,23.03
+2001-08-28,22.00,22.00,22.00,22.00,000,22.00
+2001-08-27,20.56,20.56,20.56,20.56,000,20.56
+2001-08-24,19.71,19.71,19.71,19.71,000,19.71
+2001-08-23,22.23,22.23,22.23,22.23,000,22.23
+2001-08-22,22.44,22.44,22.44,22.44,000,22.44
+2001-08-21,24.40,24.40,24.40,24.40,000,24.40
+2001-08-20,22.87,22.87,22.87,22.87,000,22.87
+2001-08-17,23.84,23.84,23.84,23.84,000,23.84
+2001-08-16,21.54,21.54,21.54,21.54,000,21.54
+2001-08-15,20.91,20.91,20.91,20.91,000,20.91
+2001-08-14,20.48,20.48,20.48,20.48,000,20.48
+2001-08-13,20.42,20.42,20.42,20.42,000,20.42
+2001-08-10,20.55,20.55,20.55,20.55,000,20.55
+2001-08-09,21.02,21.02,21.02,21.02,000,21.02
+2001-08-08,22.32,22.32,22.32,22.32,000,22.32
+2001-08-07,21.01,21.01,21.01,21.01,000,21.01
+2001-08-06,21.89,21.89,21.89,21.89,000,21.89
+2001-08-03,19.89,19.89,19.89,19.89,000,19.89
+2001-08-02,20.09,20.09,20.09,20.09,000,20.09
+2001-08-01,20.56,20.56,20.56,20.56,000,20.56
+2001-07-31,21.62,21.62,21.62,21.62,000,21.62
+2001-07-30,22.69,22.69,22.69,22.69,000,22.69
+2001-07-27,22.00,22.00,22.00,22.00,000,22.00
+2001-07-26,23.01,23.01,23.01,23.01,000,23.01
+2001-07-25,24.00,24.00,24.00,24.00,000,24.00
+2001-07-24,25.24,25.24,25.24,25.24,000,25.24
+2001-07-23,23.74,23.74,23.74,23.74,000,23.74
+2001-07-20,22.34,22.34,22.34,22.34,000,22.34
+2001-07-19,22.51,22.51,22.51,22.51,000,22.51
+2001-07-18,23.60,23.60,23.60,23.60,000,23.60
+2001-07-17,22.61,22.61,22.61,22.61,000,22.61
+2001-07-16,22.91,22.91,22.91,22.91,000,22.91
+2001-07-13,21.14,21.14,21.14,21.14,000,21.14
+2001-07-12,22.09,22.09,22.09,22.09,000,22.09
+2001-07-11,24.01,24.01,24.01,24.01,000,24.01
+2001-07-10,23.25,23.25,23.25,23.25,000,23.25
+2001-07-09,22.48,22.48,22.48,22.48,000,22.48
+2001-07-06,21.63,21.63,21.63,21.63,000,21.63
+2001-07-05,20.09,20.09,20.09,20.09,000,20.09
+2001-07-03,18.92,18.92,18.92,18.92,000,18.92
+2001-07-02,18.76,18.76,18.76,18.76,000,18.76
+2001-06-29,19.06,19.06,19.06,19.06,000,19.06
+2001-06-28,20.01,20.01,20.01,20.01,000,20.01
+2001-06-27,20.88,20.88,20.88,20.88,000,20.88
+2001-06-26,21.20,21.20,21.20,21.20,000,21.20
+2001-06-25,20.67,20.67,20.67,20.67,000,20.67
+2001-06-22,20.02,20.02,20.02,20.02,000,20.02
+2001-06-21,19.38,19.38,19.38,19.38,000,19.38
+2001-06-20,21.71,21.71,21.71,21.71,000,21.71
+2001-06-19,22.34,22.34,22.34,22.34,000,22.34
+2001-06-18,23.17,23.17,23.17,23.17,000,23.17
+2001-06-15,22.81,22.81,22.81,22.81,000,22.81
+2001-06-14,23.12,23.12,23.12,23.12,000,23.12
+2001-06-13,21.45,21.45,21.45,21.45,000,21.45
+2001-06-12,20.70,20.70,20.70,20.70,000,20.70
+2001-06-11,20.70,20.70,20.70,20.70,000,20.70
+2001-06-08,19.92,19.92,19.92,19.92,000,19.92
+2001-06-07,19.67,19.67,19.67,19.67,000,19.67
+2001-06-06,20.39,20.39,20.39,20.39,000,20.39
+2001-06-05,19.58,19.58,19.58,19.58,000,19.58
+2001-06-04,21.38,21.38,21.38,21.38,000,21.38
+2001-06-01,21.59,21.59,21.59,21.59,000,21.59
+2001-05-31,22.64,22.64,22.64,22.64,000,22.64
+2001-05-30,22.76,22.76,22.76,22.76,000,22.76
+2001-05-29,22.14,22.14,22.14,22.14,000,22.14
+2001-05-25,20.60,20.60,20.60,20.60,000,20.60
+2001-05-24,20.57,20.57,20.57,20.57,000,20.57
+2001-05-23,22.08,22.08,22.08,22.08,000,22.08
+2001-05-22,21.35,21.35,21.35,21.35,000,21.35
+2001-05-21,20.76,20.76,20.76,20.76,000,20.76
+2001-05-18,21.23,21.23,21.23,21.23,000,21.23
+2001-05-17,21.47,21.47,21.47,21.47,000,21.47
+2001-05-16,21.89,21.89,21.89,21.89,000,21.89
+2001-05-15,23.71,23.71,23.71,23.71,000,23.71
+2001-05-14,24.26,24.26,24.26,24.26,000,24.26
+2001-05-11,23.54,23.54,23.54,23.54,000,23.54
+2001-05-10,24.00,24.00,24.00,24.00,000,24.00
+2001-05-09,24.35,24.35,24.35,24.35,000,24.35
+2001-05-08,24.44,24.44,24.44,24.44,000,24.44
+2001-05-07,24.86,24.86,24.86,24.86,000,24.86
+2001-05-04,23.91,23.91,23.91,23.91,000,23.91
+2001-05-03,25.78,25.78,25.78,25.78,000,25.78
+2001-05-02,24.23,24.23,24.23,24.23,000,24.23
+2001-05-01,24.20,24.20,24.20,24.20,000,24.20
+2001-04-30,25.48,25.48,25.48,25.48,000,25.48
+2001-04-27,26.61,26.61,26.61,26.61,000,26.61
+2001-04-26,27.49,27.49,27.49,27.49,000,27.49
+2001-04-25,27.40,27.40,27.40,27.40,000,27.40
+2001-04-24,28.49,28.49,28.49,28.49,000,28.49
+2001-04-23,28.16,28.16,28.16,28.16,000,28.16
+2001-04-20,25.38,25.38,25.38,25.38,000,25.38
+2001-04-19,24.16,24.16,24.16,24.16,000,24.16
+2001-04-18,24.13,24.13,24.13,24.13,000,24.13
+2001-04-17,25.61,25.61,25.61,25.61,000,25.61
+2001-04-16,26.33,26.33,26.33,26.33,000,26.33
+2001-04-12,26.12,26.12,26.12,26.12,000,26.12
+2001-04-11,28.46,28.46,28.46,28.46,000,28.46
+2001-04-10,29.44,29.44,29.44,29.44,000,29.44
+2001-04-09,31.91,31.91,31.91,31.91,000,31.91
+2001-04-06,31.69,31.69,31.69,31.69,000,31.69
+2001-04-05,29.94,29.94,29.94,29.94,000,29.94
+2001-04-04,34.07,34.07,34.07,34.07,000,34.07
+2001-04-03,34.72,34.72,34.72,34.72,000,34.72
+2001-04-02,31.21,31.21,31.21,31.21,000,31.21
+2001-03-30,28.64,28.64,28.64,28.64,000,28.64
+2001-03-29,29.17,29.17,29.17,29.17,000,29.17
+2001-03-28,28.58,28.58,28.58,28.58,000,28.58
+2001-03-27,27.04,27.04,27.04,27.04,000,27.04
+2001-03-26,29.04,29.04,29.04,29.04,000,29.04
+2001-03-23,30.45,30.45,30.45,30.45,000,30.45
+2001-03-22,32.84,32.84,32.84,32.84,000,32.84
+2001-03-21,31.93,31.93,31.93,31.93,000,31.93
+2001-03-20,30.96,30.96,30.96,30.96,000,30.96
+2001-03-19,29.78,29.78,29.78,29.78,000,29.78
+2001-03-16,29.91,29.91,29.91,29.91,000,29.91
+2001-03-15,28.56,28.56,28.56,28.56,000,28.56
+2001-03-14,29.61,29.61,29.61,29.61,000,29.61
+2001-03-13,27.55,27.55,27.55,27.55,000,27.55
+2001-03-12,30.32,30.32,30.32,30.32,000,30.32
+2001-03-09,25.62,25.62,25.62,25.62,000,25.62
+2001-03-08,24.29,24.29,24.29,24.29,000,24.29
+2001-03-07,24.12,24.12,24.12,24.12,000,24.12
+2001-03-06,25.89,25.89,25.89,25.89,000,25.89
+2001-03-05,27.12,27.12,27.12,27.12,000,27.12
+2001-03-02,27.43,27.43,27.43,27.43,000,27.43
+2001-03-01,28.08,28.08,28.08,28.08,000,28.08
+2001-02-28,28.35,28.35,28.35,28.35,000,28.35
+2001-02-27,26.49,26.49,26.49,26.49,000,26.49
+2001-02-26,25.43,25.43,25.43,25.43,000,25.43
+2001-02-23,27.21,27.21,27.21,27.21,000,27.21
+2001-02-22,26.76,26.76,26.76,26.76,000,26.76
+2001-02-21,25.75,25.75,25.75,25.75,000,25.75
+2001-02-20,24.69,24.69,24.69,24.69,000,24.69
+2001-02-16,22.12,22.12,22.12,22.12,000,22.12
+2001-02-15,20.27,20.27,20.27,20.27,000,20.27
+2001-02-14,21.52,21.52,21.52,21.52,000,21.52
+2001-02-13,21.37,21.37,21.37,21.37,000,21.37
+2001-02-12,21.92,21.92,21.92,21.92,000,21.92
+2001-02-09,22.03,22.03,22.03,22.03,000,22.03
+2001-02-08,21.46,21.46,21.46,21.46,000,21.46
+2001-02-07,21.67,21.67,21.67,21.67,000,21.67
+2001-02-06,21.98,21.98,21.98,21.98,000,21.98
+2001-02-05,22.19,22.19,22.19,22.19,000,22.19
+2001-02-02,23.19,23.19,23.19,23.19,000,23.19
+2001-02-01,21.66,21.66,21.66,21.66,000,21.66
+2001-01-31,22.02,22.02,22.02,22.02,000,22.02
+2001-01-30,22.57,22.57,22.57,22.57,000,22.57
+2001-01-29,22.61,22.61,22.61,22.61,000,22.61
+2001-01-26,22.57,22.57,22.57,22.57,000,22.57
+2001-01-25,22.64,22.64,22.64,22.64,000,22.64
+2001-01-24,22.03,22.03,22.03,22.03,000,22.03
+2001-01-23,21.57,21.57,21.57,21.57,000,21.57
+2001-01-22,23.25,23.25,23.25,23.25,000,23.25
+2001-01-19,23.24,23.24,23.24,23.24,000,23.24
+2001-01-18,23.37,23.37,23.37,23.37,000,23.37
+2001-01-17,24.93,24.93,24.93,24.93,000,24.93
+2001-01-16,25.28,25.28,25.28,25.28,000,25.28
+2001-01-12,24.56,24.56,24.56,24.56,000,24.56
+2001-01-11,25.79,25.79,25.79,25.79,000,25.79
+2001-01-10,26.80,26.80,26.80,26.80,000,26.80
+2001-01-09,27.99,27.99,27.99,27.99,000,27.99
+2001-01-08,29.84,29.84,29.84,29.84,000,29.84
+2001-01-05,28.67,28.67,28.67,28.67,000,28.67
+2001-01-04,26.97,26.97,26.97,26.97,000,26.97
+2001-01-03,26.60,26.60,26.60,26.60,000,26.60
+2001-01-02,29.99,29.99,29.99,29.99,000,29.99
+2000-12-29,26.85,26.85,26.85,26.85,000,26.85
+2000-12-28,26.57,26.57,26.57,26.57,000,26.57
+2000-12-27,28.14,28.14,28.14,28.14,000,28.14
+2000-12-26,28.73,28.73,28.73,28.73,000,28.73
+2000-12-22,27.55,27.55,27.55,27.55,000,27.55
+2000-12-21,29.66,29.66,29.66,29.66,000,29.66
+2000-12-20,31.74,31.74,31.74,31.74,000,31.74
+2000-12-19,27.17,27.17,27.17,27.17,000,27.17
+2000-12-18,27.70,27.70,27.70,27.70,000,27.70
+2000-12-15,26.55,26.55,26.55,26.55,000,26.55
+2000-12-14,24.86,24.86,24.86,24.86,000,24.86
+2000-12-13,23.63,23.63,23.63,23.63,000,23.63
+2000-12-12,24.88,24.88,24.88,24.88,000,24.88
+2000-12-11,23.51,23.51,23.51,23.51,000,23.51
+2000-12-08,22.41,22.41,22.41,22.41,000,22.41
+2000-12-07,25.34,25.34,25.34,25.34,000,25.34
+2000-12-06,25.07,25.07,25.07,25.07,000,25.07
+2000-12-05,24.99,24.99,24.99,24.99,000,24.99
+2000-12-04,27.78,27.78,27.78,27.78,000,27.78
+2000-12-01,27.48,27.48,27.48,27.48,000,27.48
+2000-11-30,29.65,29.65,29.65,29.65,000,29.65
+2000-11-29,27.49,27.49,27.49,27.49,000,27.49
+2000-11-28,27.64,27.64,27.64,27.64,000,27.64
+2000-11-27,26.93,26.93,26.93,26.93,000,26.93
+2000-11-24,26.00,26.00,26.00,26.00,000,26.00
+2000-11-22,27.71,27.71,27.71,27.71,000,27.71
+2000-11-21,26.62,26.62,26.62,26.62,000,26.62
+2000-11-20,27.43,27.43,27.43,27.43,000,27.43
+2000-11-17,24.81,24.81,24.81,24.81,000,24.81
+2000-11-16,25.05,25.05,25.05,25.05,000,25.05
+2000-11-15,26.15,26.15,26.15,26.15,000,26.15
+2000-11-14,26.81,26.81,26.81,26.81,000,26.81
+2000-11-13,29.06,29.06,29.06,29.06,000,29.06
+2000-11-10,28.53,28.53,28.53,28.53,000,28.53
+2000-11-09,27.20,27.20,27.20,27.20,000,27.20
+2000-11-08,25.66,25.66,25.66,25.66,000,25.66
+2000-11-07,24.91,24.91,24.91,24.91,000,24.91
+2000-11-06,24.52,24.52,24.52,24.52,000,24.52
+2000-11-03,23.67,23.67,23.67,23.67,000,23.67
+2000-11-02,23.92,23.92,23.92,23.92,000,23.92
+2000-11-01,24.28,24.28,24.28,24.28,000,24.28
+2000-10-31,23.63,23.63,23.63,23.63,000,23.63
+2000-10-30,25.46,25.46,25.46,25.46,000,25.46
+2000-10-27,26.47,26.47,26.47,26.47,000,26.47
+2000-10-26,28.62,28.62,28.62,28.62,000,28.62
+2000-10-25,26.65,26.65,26.65,26.65,000,26.65
+2000-10-24,24.28,24.28,24.28,24.28,000,24.28
+2000-10-23,24.69,24.69,24.69,24.69,000,24.69
+2000-10-20,24.24,24.24,24.24,24.24,000,24.24
+2000-10-19,25.09,25.09,25.09,25.09,000,25.09
+2000-10-18,28.72,28.72,28.72,28.72,000,28.72
+2000-10-17,27.84,27.84,27.84,27.84,000,27.84
+2000-10-16,26.79,26.79,26.79,26.79,000,26.79
+2000-10-13,27.60,27.60,27.60,27.60,000,27.60
+2000-10-12,29.47,29.47,29.47,29.47,000,29.47
+2000-10-11,26.57,26.57,26.57,26.57,000,26.57
+2000-10-10,24.86,24.86,24.86,24.86,000,24.86
+2000-10-09,24.02,24.02,24.02,24.02,000,24.02
+2000-10-06,22.71,22.71,22.71,22.71,000,22.71
+2000-10-05,21.03,21.03,21.03,21.03,000,21.03
+2000-10-04,21.54,21.54,21.54,21.54,000,21.54
+2000-10-03,21.85,21.85,21.85,21.85,000,21.85
+2000-10-02,21.23,21.23,21.23,21.23,000,21.23
+2000-09-29,20.57,20.57,20.57,20.57,000,20.57
+2000-09-28,19.47,19.47,19.47,19.47,000,19.47
+2000-09-27,21.67,21.67,21.67,21.67,000,21.67
+2000-09-26,21.88,21.88,21.88,21.88,000,21.88
+2000-09-25,21.41,21.41,21.41,21.41,000,21.41
+2000-09-22,20.74,20.74,20.74,20.74,000,20.74
+2000-09-21,20.18,20.18,20.18,20.18,000,20.18
+2000-09-20,19.93,19.93,19.93,19.93,000,19.93
+2000-09-19,19.54,19.54,19.54,19.54,000,19.54
+2000-09-18,20.25,20.25,20.25,20.25,000,20.25
+2000-09-15,18.52,18.52,18.52,18.52,000,18.52
+2000-09-14,18.26,18.26,18.26,18.26,000,18.26
+2000-09-13,18.32,18.32,18.32,18.32,000,18.32
+2000-09-12,18.59,18.59,18.59,18.59,000,18.59
+2000-09-11,18.40,18.40,18.40,18.40,000,18.40
+2000-09-08,18.46,18.46,18.46,18.46,000,18.46
+2000-09-07,19.42,19.42,19.42,19.42,000,19.42
+2000-09-06,20.79,20.79,20.79,20.79,000,20.79
+2000-09-05,19.82,19.82,19.82,19.82,000,19.82
+2000-09-01,17.53,17.53,17.53,17.53,000,17.53
+2000-08-31,16.84,16.84,16.84,16.84,000,16.84
+2000-08-30,17.69,17.69,17.69,17.69,000,17.69
+2000-08-29,16.89,16.89,16.89,16.89,000,16.89
+2000-08-28,16.54,16.54,16.54,16.54,000,16.54
+2000-08-25,16.53,16.53,16.53,16.53,000,16.53
+2000-08-24,17.04,17.04,17.04,17.04,000,17.04
+2000-08-23,17.38,17.38,17.38,17.38,000,17.38
+2000-08-22,17.47,17.47,17.47,17.47,000,17.47
+2000-08-21,17.35,17.35,17.35,17.35,000,17.35
+2000-08-18,17.05,17.05,17.05,17.05,000,17.05
+2000-08-17,17.48,17.48,17.48,17.48,000,17.48
+2000-08-16,18.02,18.02,18.02,18.02,000,18.02
+2000-08-15,17.98,17.98,17.98,17.98,000,17.98
+2000-08-14,17.88,17.88,17.88,17.88,000,17.88
+2000-08-11,18.55,18.55,18.55,18.55,000,18.55
+2000-08-10,19.19,19.19,19.19,19.19,000,19.19
+2000-08-09,19.18,19.18,19.18,19.18,000,19.18
+2000-08-08,18.79,18.79,18.79,18.79,000,18.79
+2000-08-07,19.03,19.03,19.03,19.03,000,19.03
+2000-08-04,18.62,18.62,18.62,18.62,000,18.62
+2000-08-03,19.99,19.99,19.99,19.99,000,19.99
+2000-08-02,20.00,20.00,20.00,20.00,000,20.00
+2000-08-01,20.55,20.55,20.55,20.55,000,20.55
+2000-07-31,20.74,20.74,20.74,20.74,000,20.74
+2000-07-28,20.84,20.84,20.84,20.84,000,20.84
+2000-07-27,19.60,19.60,19.60,19.60,000,19.60
+2000-07-26,19.67,19.67,19.67,19.67,000,19.67
+2000-07-25,19.39,19.39,19.39,19.39,000,19.39
+2000-07-24,19.92,19.92,19.92,19.92,000,19.92
+2000-07-21,18.94,18.94,18.94,18.94,000,18.94
+2000-07-20,18.94,18.94,18.94,18.94,000,18.94
+2000-07-19,19.65,19.65,19.65,19.65,000,19.65
+2000-07-18,19.75,19.75,19.75,19.75,000,19.75
+2000-07-17,19.45,19.45,19.45,19.45,000,19.45
+2000-07-14,19.32,19.32,19.32,19.32,000,19.32
+2000-07-13,20.03,20.03,20.03,20.03,000,20.03
+2000-07-12,20.03,20.03,20.03,20.03,000,20.03
+2000-07-11,20.11,20.11,20.11,20.11,000,20.11
+2000-07-10,20.33,20.33,20.33,20.33,000,20.33
+2000-07-07,19.22,19.22,19.22,19.22,000,19.22
+2000-07-06,20.94,20.94,20.94,20.94,000,20.94
+2000-07-05,21.16,21.16,21.16,21.16,000,21.16
+2000-07-03,19.83,19.83,19.83,19.83,000,19.83
+2000-06-30,19.54,19.54,19.54,19.54,000,19.54
+2000-06-29,19.70,19.70,19.70,19.70,000,19.70
+2000-06-28,20.29,20.29,20.29,20.29,000,20.29
+2000-06-27,21.80,21.80,21.80,21.80,000,21.80
+2000-06-26,22.45,22.45,22.45,22.45,000,22.45
+2000-06-23,22.34,22.34,22.34,22.34,000,22.34
+2000-06-22,22.00,22.00,22.00,22.00,000,22.00
+2000-06-21,20.61,20.61,20.61,20.61,000,20.61
+2000-06-20,20.88,20.88,20.88,20.88,000,20.88
+2000-06-19,20.63,20.63,20.63,20.63,000,20.63
+2000-06-16,20.50,20.50,20.50,20.50,000,20.50
+2000-06-15,20.68,20.68,20.68,20.68,000,20.68
+2000-06-14,21.48,21.48,21.48,21.48,000,21.48
+2000-06-13,21.67,21.67,21.67,21.67,000,21.67
+2000-06-12,22.32,22.32,22.32,22.32,000,22.32
+2000-06-09,22.14,22.14,22.14,22.14,000,22.14
+2000-06-08,22.04,22.04,22.04,22.04,000,22.04
+2000-06-07,22.48,22.48,22.48,22.48,000,22.48
+2000-06-06,23.05,23.05,23.05,23.05,000,23.05
+2000-06-05,22.71,22.71,22.71,22.71,000,22.71
+2000-06-02,21.48,21.48,21.48,21.48,000,21.48
+2000-06-01,22.36,22.36,22.36,22.36,000,22.36
+2000-05-31,23.65,23.65,23.65,23.65,000,23.65
+2000-05-30,23.62,23.62,23.62,23.62,000,23.62
+2000-05-26,24.47,24.47,24.47,24.47,000,24.47
+2000-05-25,24.58,24.58,24.58,24.58,000,24.58
+2000-05-24,24.32,24.32,24.32,24.32,000,24.32
+2000-05-23,25.87,25.87,25.87,25.87,000,25.87
+2000-05-22,26.00,26.00,26.00,26.00,000,26.00
+2000-05-19,25.44,25.44,25.44,25.44,000,25.44
+2000-05-18,23.96,23.96,23.96,23.96,000,23.96
+2000-05-17,23.98,23.98,23.98,23.98,000,23.98
+2000-05-16,24.34,24.34,24.34,24.34,000,24.34
+2000-05-15,24.86,24.86,24.86,24.86,000,24.86
+2000-05-12,26.05,26.05,26.05,26.05,000,26.05
+2000-05-11,27.76,27.76,27.76,27.76,000,27.76
+2000-05-10,29.87,29.87,29.87,29.87,000,29.87
+2000-05-09,28.93,28.93,28.93,28.93,000,28.93
+2000-05-08,28.20,28.20,28.20,28.20,000,28.20
+2000-05-05,27.53,27.53,27.53,27.53,000,27.53
+2000-05-04,30.77,30.77,30.77,30.77,000,30.77
+2000-05-03,31.63,31.63,31.63,31.63,000,31.63
+2000-05-02,28.50,28.50,28.50,28.50,000,28.50
+2000-05-01,25.88,25.88,25.88,25.88,000,25.88
+2000-04-28,26.20,26.20,26.20,26.20,000,26.20
+2000-04-27,26.19,26.19,26.19,26.19,000,26.19
+2000-04-26,26.97,26.97,26.97,26.97,000,26.97
+2000-04-25,25.24,25.24,25.24,25.24,000,25.24
+2000-04-24,27.37,27.37,27.37,27.37,000,27.37
+2000-04-20,25.85,25.85,25.85,25.85,000,25.85
+2000-04-19,27.02,27.02,27.02,27.02,000,27.02
+2000-04-18,26.12,26.12,26.12,26.12,000,26.12
+2000-04-17,28.95,28.95,28.95,28.95,000,28.95
+2000-04-14,33.49,33.49,33.49,33.49,000,33.49
+2000-04-13,29.40,29.40,29.40,29.40,000,29.40
+2000-04-12,27.85,27.85,27.85,27.85,000,27.85
+2000-04-11,27.25,27.25,27.25,27.25,000,27.25
+2000-04-10,25.99,25.99,25.99,25.99,000,25.99
+2000-04-07,24.39,24.39,24.39,24.39,000,24.39
+2000-04-06,27.15,27.15,27.15,27.15,000,27.15
+2000-04-05,28.41,28.41,28.41,28.41,000,28.41
+2000-04-04,27.12,27.12,27.12,27.12,000,27.12
+2000-04-03,24.03,24.03,24.03,24.03,000,24.03
+2000-03-31,23.67,23.67,23.67,23.67,000,23.67
+2000-03-30,24.42,24.42,24.42,24.42,000,24.42
+2000-03-29,24.10,24.10,24.10,24.10,000,24.10
+2000-03-28,24.86,24.86,24.86,24.86,000,24.86
+2000-03-27,24.53,24.53,24.53,24.53,000,24.53
+2000-03-24,23.31,23.31,23.31,23.31,000,23.31
+2000-03-23,22.26,22.26,22.26,22.26,000,22.26
+2000-03-22,21.49,21.49,21.49,21.49,000,21.49
+2000-03-21,21.70,21.70,21.70,21.70,000,21.70
+2000-03-20,22.96,22.96,22.96,22.96,000,22.96
+2000-03-17,22.37,22.37,22.37,22.37,000,22.37
+2000-03-16,20.77,20.77,20.77,20.77,000,20.77
+2000-03-15,22.34,22.34,22.34,22.34,000,22.34
+2000-03-14,24.41,24.41,24.41,24.41,000,24.41
+2000-03-13,22.85,22.85,22.85,22.85,000,22.85
+2000-03-10,21.24,21.24,21.24,21.24,000,21.24
+2000-03-09,22.21,22.21,22.21,22.21,000,22.21
+2000-03-08,23.82,23.82,23.82,23.82,000,23.82
+2000-03-07,24.31,24.31,24.31,24.31,000,24.31
+2000-03-06,21.50,21.50,21.50,21.50,000,21.50
+2000-03-03,19.21,19.21,19.21,19.21,000,19.21
+2000-03-02,21.06,21.06,21.06,21.06,000,21.06
+2000-03-01,21.64,21.64,21.64,21.64,000,21.64
+2000-02-29,23.37,23.37,23.37,23.37,000,23.37
+2000-02-28,24.68,24.68,24.68,24.68,000,24.68
+2000-02-25,25.20,25.20,25.20,25.20,000,25.20
+2000-02-24,24.38,24.38,24.38,24.38,000,24.38
+2000-02-23,23.89,23.89,23.89,23.89,000,23.89
+2000-02-22,25.86,25.86,25.86,25.86,000,25.86
+2000-02-18,26.00,26.00,26.00,26.00,000,26.00
+2000-02-17,23.17,23.17,23.17,23.17,000,23.17
+2000-02-16,23.51,23.51,23.51,23.51,000,23.51
+2000-02-15,22.92,22.92,22.92,22.92,000,22.92
+2000-02-14,24.38,24.38,24.38,24.38,000,24.38
+2000-02-11,24.42,24.42,24.42,24.42,000,24.42
+2000-02-10,23.07,23.07,23.07,23.07,000,23.07
+2000-02-09,22.90,22.90,22.90,22.90,000,22.90
+2000-02-08,21.25,21.25,21.25,21.25,000,21.25
+2000-02-07,22.79,22.79,22.79,22.79,000,22.79
+2000-02-04,21.54,21.54,21.54,21.54,000,21.54
+2000-02-03,22.01,22.01,22.01,22.01,000,22.01
+2000-02-02,23.12,23.12,23.12,23.12,000,23.12
+2000-02-01,23.45,23.45,23.45,23.45,000,23.45
+2000-01-31,24.95,24.95,24.95,24.95,000,24.95
+2000-01-28,26.14,26.14,26.14,26.14,000,26.14
+2000-01-27,23.54,23.54,23.54,23.54,000,23.54
+2000-01-26,23.03,23.03,23.03,23.03,000,23.03
+2000-01-25,23.02,23.02,23.02,23.02,000,23.02
+2000-01-24,24.07,24.07,24.07,24.07,000,24.07
+2000-01-21,20.82,20.82,20.82,20.82,000,20.82
+2000-01-20,21.75,21.75,21.75,21.75,000,21.75
+2000-01-19,21.72,21.72,21.72,21.72,000,21.72
+2000-01-18,21.50,21.50,21.50,21.50,000,21.50
+2000-01-14,19.66,19.66,19.66,19.66,000,19.66
+2000-01-13,21.71,21.71,21.71,21.71,000,21.71
+2000-01-12,22.84,22.84,22.84,22.84,000,22.84
+2000-01-11,22.50,22.50,22.50,22.50,000,22.50
+2000-01-10,21.71,21.71,21.71,21.71,000,21.71
+2000-01-07,21.72,21.72,21.72,21.72,000,21.72
+2000-01-06,25.73,25.73,25.73,25.73,000,25.73
+2000-01-05,26.41,26.41,26.41,26.41,000,26.41
+2000-01-04,27.01,27.01,27.01,27.01,000,27.01
+2000-01-03,24.21,24.21,24.21,24.21,000,24.21
+1999-12-31,23.40,23.40,23.40,23.40,000,23.40
+1999-12-30,23.91,23.91,23.91,23.91,000,23.91
+1999-12-29,23.09,23.09,23.09,23.09,000,23.09
+1999-12-28,22.97,22.97,22.97,22.97,000,22.97
+1999-12-27,23.07,23.07,23.07,23.07,000,23.07
+1999-12-23,21.12,21.12,21.12,21.12,000,21.12
+1999-12-22,22.43,22.43,22.43,22.43,000,22.43
+1999-12-21,22.66,22.66,22.66,22.66,000,22.66
+1999-12-20,23.78,23.78,23.78,23.78,000,23.78
+1999-12-17,21.35,21.35,21.35,21.35,000,21.35
+1999-12-16,21.91,21.91,21.91,21.91,000,21.91
+1999-12-15,22.03,22.03,22.03,22.03,000,22.03
+1999-12-14,23.06,23.06,23.06,23.06,000,23.06
+1999-12-13,21.72,21.72,21.72,21.72,000,21.72
+1999-12-10,21.48,21.48,21.48,21.48,000,21.48
+1999-12-09,21.19,21.19,21.19,21.19,000,21.19
+1999-12-08,21.25,21.25,21.25,21.25,000,21.25
+1999-12-07,21.09,21.09,21.09,21.09,000,21.09
+1999-12-06,20.58,20.58,20.58,20.58,000,20.58
+1999-12-03,19.32,19.32,19.32,19.32,000,19.32
+1999-12-02,21.77,21.77,21.77,21.77,000,21.77
+1999-12-01,22.23,22.23,22.23,22.23,000,22.23
+1999-11-30,24.18,24.18,24.18,24.18,000,24.18
+1999-11-29,23.57,23.57,23.57,23.57,000,23.57
+1999-11-26,22.33,22.33,22.33,22.33,000,22.33
+1999-11-24,20.26,20.26,20.26,20.26,000,20.26
+1999-11-23,21.00,21.00,21.00,21.00,000,21.00
+1999-11-22,19.98,19.98,19.98,19.98,000,19.98
+1999-11-19,19.11,19.11,19.11,19.11,000,19.11
+1999-11-18,19.76,19.76,19.76,19.76,000,19.76
+1999-11-17,20.96,20.96,20.96,20.96,000,20.96
+1999-11-16,20.73,20.73,20.73,20.73,000,20.73
+1999-11-15,22.74,22.74,22.74,22.74,000,22.74
+1999-11-12,21.65,21.65,21.65,21.65,000,21.65
+1999-11-11,22.07,22.07,22.07,22.07,000,22.07
+1999-11-10,22.26,22.26,22.26,22.26,000,22.26
+1999-11-09,22.70,22.70,22.70,22.70,000,22.70
+1999-11-08,21.87,21.87,21.87,21.87,000,21.87
+1999-11-05,21.66,21.66,21.66,21.66,000,21.66
+1999-11-04,23.00,23.00,23.00,23.00,000,23.00
+1999-11-03,23.16,23.16,23.16,23.16,000,23.16
+1999-11-02,23.10,23.10,23.10,23.10,000,23.10
+1999-11-01,22.09,22.09,22.09,22.09,000,22.09
+1999-10-29,22.20,22.20,22.20,22.20,000,22.20
+1999-10-28,21.34,21.34,21.34,21.34,000,21.34
+1999-10-27,24.20,24.20,24.20,24.20,000,24.20
+1999-10-26,24.26,24.26,24.26,24.26,000,24.26
+1999-10-25,23.60,23.60,23.60,23.60,000,23.60
+1999-10-22,21.64,21.64,21.64,21.64,000,21.64
+1999-10-21,24.02,24.02,24.02,24.02,000,24.02
+1999-10-20,23.90,23.90,23.90,23.90,000,23.90
+1999-10-19,26.56,26.56,26.56,26.56,000,26.56
+1999-10-18,28.19,28.19,28.19,28.19,000,28.19
+1999-10-15,28.75,28.75,28.75,28.75,000,28.75
+1999-10-14,26.05,26.05,26.05,26.05,000,26.05
+1999-10-13,25.96,25.96,25.96,25.96,000,25.96
+1999-10-12,22.84,22.84,22.84,22.84,000,22.84
+1999-10-11,20.63,20.63,20.63,20.63,000,20.63
+1999-10-08,20.49,20.49,20.49,20.49,000,20.49
+1999-10-07,23.58,23.58,23.58,23.58,000,23.58
+1999-10-06,22.06,22.06,22.06,22.06,000,22.06
+1999-10-05,24.79,24.79,24.79,24.79,000,24.79
+1999-10-04,24.46,24.46,24.46,24.46,000,24.46
+1999-10-01,24.93,24.93,24.93,24.93,000,24.93
+1999-09-30,25.41,25.41,25.41,25.41,000,25.41
+1999-09-29,26.49,26.49,26.49,26.49,000,26.49
+1999-09-28,26.06,26.06,26.06,26.06,000,26.06
+1999-09-27,26.40,26.40,26.40,26.40,000,26.40
+1999-09-24,27.79,27.79,27.79,27.79,000,27.79
+1999-09-23,27.84,27.84,27.84,27.84,000,27.84
+1999-09-22,25.19,25.19,25.19,25.19,000,25.19
+1999-09-21,25.65,25.65,25.65,25.65,000,25.65
+1999-09-20,24.03,24.03,24.03,24.03,000,24.03
+1999-09-17,23.30,23.30,23.30,23.30,000,23.30
+1999-09-16,25.25,25.25,25.25,25.25,000,25.25
+1999-09-15,24.56,24.56,24.56,24.56,000,24.56
+1999-09-14,23.77,23.77,23.77,23.77,000,23.77
+1999-09-13,22.89,22.89,22.89,22.89,000,22.89
+1999-09-10,22.03,22.03,22.03,22.03,000,22.03
+1999-09-09,23.01,23.01,23.01,23.01,000,23.01
+1999-09-08,23.82,23.82,23.82,23.82,000,23.82
+1999-09-07,23.44,23.44,23.44,23.44,000,23.44
+1999-09-03,20.98,20.98,20.98,20.98,000,20.98
+1999-09-02,24.53,24.53,24.53,24.53,000,24.53
+1999-09-01,22.93,22.93,22.93,22.93,000,22.93
+1999-08-31,24.45,24.45,24.45,24.45,000,24.45
+1999-08-30,24.63,24.63,24.63,24.63,000,24.63
+1999-08-27,21.83,21.83,21.83,21.83,000,21.83
+1999-08-26,21.21,21.21,21.21,21.21,000,21.21
+1999-08-25,20.96,20.96,20.96,20.96,000,20.96
+1999-08-24,22.40,22.40,22.40,22.40,000,22.40
+1999-08-23,22.55,22.55,22.55,22.55,000,22.55
+1999-08-20,22.95,22.95,22.95,22.95,000,22.95
+1999-08-19,24.39,24.39,24.39,24.39,000,24.39
+1999-08-18,23.30,23.30,23.30,23.30,000,23.30
+1999-08-17,21.67,21.67,21.67,21.67,000,21.67
+1999-08-16,23.07,23.07,23.07,23.07,000,23.07
+1999-08-13,22.31,22.31,22.31,22.31,000,22.31
+1999-08-12,25.03,25.03,25.03,25.03,000,25.03
+1999-08-11,25.39,25.39,25.39,25.39,000,25.39
+1999-08-10,28.45,28.45,28.45,28.45,000,28.45
+1999-08-09,27.66,27.66,27.66,27.66,000,27.66
+1999-08-06,26.60,26.60,26.60,26.60,000,26.60
+1999-08-05,27.01,27.01,27.01,27.01,000,27.01
+1999-08-04,27.40,27.40,27.40,27.40,000,27.40
+1999-08-03,26.27,26.27,26.27,26.27,000,26.27
+1999-08-02,25.59,25.59,25.59,25.59,000,25.59
+1999-07-30,24.64,24.64,24.64,24.64,000,24.64
+1999-07-29,24.52,24.52,24.52,24.52,000,24.52
+1999-07-28,22.85,22.85,22.85,22.85,000,22.85
+1999-07-27,23.23,23.23,23.23,23.23,000,23.23
+1999-07-26,24.98,24.98,24.98,24.98,000,24.98
+1999-07-23,23.32,23.32,23.32,23.32,000,23.32
+1999-07-22,23.05,23.05,23.05,23.05,000,23.05
+1999-07-21,21.46,21.46,21.46,21.46,000,21.46
+1999-07-20,21.79,21.79,21.79,21.79,000,21.79
+1999-07-19,19.07,19.07,19.07,19.07,000,19.07
+1999-07-16,17.42,17.42,17.42,17.42,000,17.42
+1999-07-15,18.68,18.68,18.68,18.68,000,18.68
+1999-07-14,19.71,19.71,19.71,19.71,000,19.71
+1999-07-13,19.95,19.95,19.95,19.95,000,19.95
+1999-07-12,19.73,19.73,19.73,19.73,000,19.73
+1999-07-09,17.96,17.96,17.96,17.96,000,17.96
+1999-07-08,19.47,19.47,19.47,19.47,000,19.47
+1999-07-07,20.35,20.35,20.35,20.35,000,20.35
+1999-07-06,20.73,20.73,20.73,20.73,000,20.73
+1999-07-02,18.66,18.66,18.66,18.66,000,18.66
+1999-07-01,19.69,19.69,19.69,19.69,000,19.69
+1999-06-30,21.09,21.09,21.09,21.09,000,21.09
+1999-06-29,22.51,22.51,22.51,22.51,000,22.51
+1999-06-28,22.63,22.63,22.63,22.63,000,22.63
+1999-06-25,21.76,21.76,21.76,21.76,000,21.76
+1999-06-24,23.06,23.06,23.06,23.06,000,23.06
+1999-06-23,21.32,21.32,21.32,21.32,000,21.32
+1999-06-22,21.70,21.70,21.70,21.70,000,21.70
+1999-06-21,21.81,21.81,21.81,21.81,000,21.81
+1999-06-18,21.75,21.75,21.75,21.75,000,21.75
+1999-06-17,21.95,21.95,21.95,21.95,000,21.95
+1999-06-16,22.40,22.40,22.40,22.40,000,22.40
+1999-06-15,25.91,25.91,25.91,25.91,000,25.91
+1999-06-14,26.51,26.51,26.51,26.51,000,26.51
+1999-06-11,25.90,25.90,25.90,25.90,000,25.90
+1999-06-10,25.32,25.32,25.32,25.32,000,25.32
+1999-06-09,23.90,23.90,23.90,23.90,000,23.90
+1999-06-08,24.02,24.02,24.02,24.02,000,24.02
+1999-06-07,23.78,23.78,23.78,23.78,000,23.78
+1999-06-04,23.43,23.43,23.43,23.43,000,23.43
+1999-06-03,26.20,26.20,26.20,26.20,000,26.20
+1999-06-02,26.21,26.21,26.21,26.21,000,26.21
+1999-06-01,26.62,26.62,26.62,26.62,000,26.62
+1999-05-28,25.39,25.39,25.39,25.39,000,25.39
+1999-05-27,28.12,28.12,28.12,28.12,000,28.12
+1999-05-26,27.57,27.57,27.57,27.57,000,27.57
+1999-05-25,28.90,28.90,28.90,28.90,000,28.90
+1999-05-24,27.62,27.62,27.62,27.62,000,27.62
+1999-05-21,24.40,24.40,24.40,24.40,000,24.40
+1999-05-20,24.46,24.46,24.46,24.46,000,24.46
+1999-05-19,25.08,25.08,25.08,25.08,000,25.08
+1999-05-18,27.26,27.26,27.26,27.26,000,27.26
+1999-05-17,27.28,27.28,27.28,27.28,000,27.28
+1999-05-14,26.86,26.86,26.86,26.86,000,26.86
+1999-05-13,25.02,25.02,25.02,25.02,000,25.02
+1999-05-12,26.13,26.13,26.13,26.13,000,26.13
+1999-05-11,25.62,25.62,25.62,25.62,000,25.62
+1999-05-10,26.62,26.62,26.62,26.62,000,26.62
+1999-05-07,25.36,25.36,25.36,25.36,000,25.36
+1999-05-06,27.44,27.44,27.44,27.44,000,27.44
+1999-05-05,25.19,25.19,25.19,25.19,000,25.19
+1999-05-04,25.62,25.62,25.62,25.62,000,25.62
+1999-05-03,24.15,24.15,24.15,24.15,000,24.15
+1999-04-30,25.07,25.07,25.07,25.07,000,25.07
+1999-04-29,25.06,25.06,25.06,25.06,000,25.06
+1999-04-28,24.40,24.40,24.40,24.40,000,24.40
+1999-04-27,23.36,23.36,23.36,23.36,000,23.36
+1999-04-26,23.53,23.53,23.53,23.53,000,23.53
+1999-04-23,22.76,22.76,22.76,22.76,000,22.76
+1999-04-22,22.62,22.62,22.62,22.62,000,22.62
+1999-04-21,23.31,23.31,23.31,23.31,000,23.31
+1999-04-20,25.02,25.02,25.02,25.02,000,25.02
+1999-04-19,26.42,26.42,26.42,26.42,000,26.42
+1999-04-16,23.90,23.90,23.90,23.90,000,23.90
+1999-04-15,23.93,23.93,23.93,23.93,000,23.93
+1999-04-14,24.94,24.94,24.94,24.94,000,24.94
+1999-04-13,22.73,22.73,22.73,22.73,000,22.73
+1999-04-12,21.93,21.93,21.93,21.93,000,21.93
+1999-04-09,21.77,21.77,21.77,21.77,000,21.77
+1999-04-08,22.59,22.59,22.59,22.59,000,22.59
+1999-04-07,22.81,22.81,22.81,22.81,000,22.81
+1999-04-06,22.65,22.65,22.65,22.65,000,22.65
+1999-04-05,22.19,22.19,22.19,22.19,000,22.19
+1999-04-01,22.06,22.06,22.06,22.06,000,22.06
+1999-03-31,23.26,23.26,23.26,23.26,000,23.26
+1999-03-30,22.73,22.73,22.73,22.73,000,22.73
+1999-03-29,23.54,23.54,23.54,23.54,000,23.54
+1999-03-26,24.04,24.04,24.04,24.04,000,24.04
+1999-03-25,24.33,24.33,24.33,24.33,000,24.33
+1999-03-24,26.60,26.60,26.60,26.60,000,26.60
+1999-03-23,27.27,27.27,27.27,27.27,000,27.27
+1999-03-22,25.00,25.00,25.00,25.00,000,25.00
+1999-03-19,24.32,24.32,24.32,24.32,000,24.32
+1999-03-18,24.13,24.13,24.13,24.13,000,24.13
+1999-03-17,25.57,25.57,25.57,25.57,000,25.57
+1999-03-16,25.15,25.15,25.15,25.15,000,25.15
+1999-03-15,25.24,25.24,25.24,25.24,000,25.24
+1999-03-12,24.84,24.84,24.84,24.84,000,24.84
+1999-03-11,24.37,24.37,24.37,24.37,000,24.37
+1999-03-10,24.79,24.79,24.79,24.79,000,24.79
+1999-03-09,25.02,25.02,25.02,25.02,000,25.02
+1999-03-08,24.54,24.54,24.54,24.54,000,24.54
+1999-03-05,24.08,24.08,24.08,24.08,000,24.08
+1999-03-04,26.67,26.67,26.67,26.67,000,26.67
+1999-03-03,29.04,29.04,29.04,29.04,000,29.04
+1999-03-02,29.22,29.22,29.22,29.22,000,29.22
+1999-03-01,28.37,28.37,28.37,28.37,000,28.37
+1999-02-26,27.88,27.88,27.88,27.88,000,27.88
+1999-02-25,28.01,28.01,28.01,28.01,000,28.01
+1999-02-24,27.21,27.21,27.21,27.21,000,27.21
+1999-02-23,26.49,26.49,26.49,26.49,000,26.49
+1999-02-22,25.87,25.87,25.87,25.87,000,25.87
+1999-02-19,29.30,29.30,29.30,29.30,000,29.30
+1999-02-18,30.45,30.45,30.45,30.45,000,30.45
+1999-02-17,30.65,30.65,30.65,30.65,000,30.65
+1999-02-16,29.65,29.65,29.65,29.65,000,29.65
+1999-02-12,29.76,29.76,29.76,29.76,000,29.76
+1999-02-11,27.42,27.42,27.42,27.42,000,27.42
+1999-02-10,30.45,30.45,30.45,30.45,000,30.45
+1999-02-09,31.36,31.36,31.36,31.36,000,31.36
+1999-02-08,30.27,30.27,30.27,30.27,000,30.27
+1999-02-05,29.67,29.67,29.67,29.67,000,29.67
+1999-02-04,29.48,29.48,29.48,29.48,000,29.48
+1999-02-03,27.88,27.88,27.88,27.88,000,27.88
+1999-02-02,28.16,28.16,28.16,28.16,000,28.16
+1999-02-01,27.67,27.67,27.67,27.67,000,27.67
+1999-01-29,26.25,26.25,26.25,26.25,000,26.25
+1999-01-28,28.11,28.11,28.11,28.11,000,28.11
+1999-01-27,29.73,29.73,29.73,29.73,000,29.73
+1999-01-26,29.23,29.23,29.23,29.23,000,29.23
+1999-01-25,31.13,31.13,31.13,31.13,000,31.13
+1999-01-22,31.95,31.95,31.95,31.95,000,31.95
+1999-01-21,30.92,30.92,30.92,30.92,000,30.92
+1999-01-20,28.60,28.60,28.60,28.60,000,28.60
+1999-01-19,29.24,29.24,29.24,29.24,000,29.24
+1999-01-15,29.24,29.24,29.24,29.24,000,29.24
+1999-01-14,32.98,32.98,32.98,32.98,000,32.98
+1999-01-13,30.11,30.11,30.11,30.11,000,30.11
+1999-01-12,28.10,28.10,28.10,28.10,000,28.10
+1999-01-11,25.46,25.46,25.46,25.46,000,25.46
+1999-01-08,23.28,23.28,23.28,23.28,000,23.28
+1999-01-07,24.37,24.37,24.37,24.37,000,24.37
+1999-01-06,23.34,23.34,23.34,23.34,000,23.34
+1999-01-05,24.46,24.46,24.46,24.46,000,24.46
+1999-01-04,26.17,26.17,26.17,26.17,000,26.17
+1998-12-31,24.42,24.42,24.42,24.42,000,24.42
+1998-12-30,23.34,23.34,23.34,23.34,000,23.34
+1998-12-29,22.18,22.18,22.18,22.18,000,22.18
+1998-12-28,23.50,23.50,23.50,23.50,000,23.50
+1998-12-24,21.48,21.48,21.48,21.48,000,21.48
+1998-12-23,20.21,20.21,20.21,20.21,000,20.21
+1998-12-22,22.78,22.78,22.78,22.78,000,22.78
+1998-12-21,23.86,23.86,23.86,23.86,000,23.86
+1998-12-18,25.04,25.04,25.04,25.04,000,25.04
+1998-12-17,27.96,27.96,27.96,27.96,000,27.96
+1998-12-16,29.96,29.96,29.96,29.96,000,29.96
+1998-12-15,29.42,29.42,29.42,29.42,000,29.42
+1998-12-14,31.31,31.31,31.31,31.31,000,31.31
+1998-12-11,27.72,27.72,27.72,27.72,000,27.72
+1998-12-10,26.81,26.81,26.81,26.81,000,26.81
+1998-12-09,25.66,25.66,25.66,25.66,000,25.66
+1998-12-08,25.58,25.58,25.58,25.58,000,25.58
+1998-12-07,24.90,24.90,24.90,24.90,000,24.90
+1998-12-04,25.31,25.31,25.31,25.31,000,25.31
+1998-12-03,28.70,28.70,28.70,28.70,000,28.70
+1998-12-02,25.43,25.43,25.43,25.43,000,25.43
+1998-12-01,24.97,24.97,24.97,24.97,000,24.97
+1998-11-30,26.01,26.01,26.01,26.01,000,26.01
+1998-11-27,22.09,22.09,22.09,22.09,000,22.09
+1998-11-25,22.15,22.15,22.15,22.15,000,22.15
+1998-11-24,23.28,23.28,23.28,23.28,000,23.28
+1998-11-23,21.84,21.84,21.84,21.84,000,21.84
+1998-11-20,22.47,22.47,22.47,22.47,000,22.47
+1998-11-19,25.50,25.50,25.50,25.50,000,25.50
+1998-11-18,27.13,27.13,27.13,27.13,000,27.13
+1998-11-17,27.95,27.95,27.95,27.95,000,27.95
+1998-11-16,28.90,28.90,28.90,28.90,000,28.90
+1998-11-13,29.03,29.03,29.03,29.03,000,29.03
+1998-11-12,29.28,29.28,29.28,29.28,000,29.28
+1998-11-11,28.47,28.47,28.47,28.47,000,28.47
+1998-11-10,28.17,28.17,28.17,28.17,000,28.17
+1998-11-09,28.09,28.09,28.09,28.09,000,28.09
+1998-11-06,25.70,25.70,25.70,25.70,000,25.70
+1998-11-05,26.01,26.01,26.01,26.01,000,26.01
+1998-11-04,27.37,27.37,27.37,27.37,000,27.37
+1998-11-03,27.76,27.76,27.76,27.76,000,27.76
+1998-11-02,27.26,27.26,27.26,27.26,000,27.26
+1998-10-30,28.05,28.05,28.05,28.05,000,28.05
+1998-10-29,29.50,29.50,29.50,29.50,000,29.50
+1998-10-28,32.42,32.42,32.42,32.42,000,32.42
+1998-10-27,32.95,32.95,32.95,32.95,000,32.95
+1998-10-26,32.38,32.38,32.38,32.38,000,32.38
+1998-10-23,32.27,32.27,32.27,32.27,000,32.27
+1998-10-22,31.53,31.53,31.53,31.53,000,31.53
+1998-10-21,33.21,33.21,33.21,33.21,000,33.21
+1998-10-20,33.11,33.11,33.11,33.11,000,33.11
+1998-10-19,33.13,33.13,33.13,33.13,000,33.13
+1998-10-16,34.82,34.82,34.82,34.82,000,34.82
+1998-10-15,33.34,33.34,33.34,33.34,000,33.34
+1998-10-14,38.96,38.96,38.96,38.96,000,38.96
+1998-10-13,40.23,40.23,40.23,40.23,000,40.23
+1998-10-12,40.07,40.07,40.07,40.07,000,40.07
+1998-10-09,41.78,41.78,41.78,41.78,000,41.78
+1998-10-08,45.74,45.74,45.74,45.74,000,45.74
+1998-10-07,43.51,43.51,43.51,43.51,000,43.51
+1998-10-06,41.20,41.20,41.20,41.20,000,41.20
+1998-10-05,42.81,42.81,42.81,42.81,000,42.81
+1998-10-02,40.47,40.47,40.47,40.47,000,40.47
+1998-10-01,43.48,43.48,43.48,43.48,000,43.48
+1998-09-30,40.95,40.95,40.95,40.95,000,40.95
+1998-09-29,36.08,36.08,36.08,36.08,000,36.08
+1998-09-28,34.87,34.87,34.87,34.87,000,34.87
+1998-09-25,34.55,34.55,34.55,34.55,000,34.55
+1998-09-24,34.66,34.66,34.66,34.66,000,34.66
+1998-09-23,32.47,32.47,32.47,32.47,000,32.47
+1998-09-22,36.62,36.62,36.62,36.62,000,36.62
+1998-09-21,38.58,38.58,38.58,38.58,000,38.58
+1998-09-18,38.63,38.63,38.63,38.63,000,38.63
+1998-09-17,39.23,39.23,39.23,39.23,000,39.23
+1998-09-16,35.94,35.94,35.94,35.94,000,35.94
+1998-09-15,36.58,36.58,36.58,36.58,000,36.58
+1998-09-14,38.57,38.57,38.57,38.57,000,38.57
+1998-09-11,43.74,43.74,43.74,43.74,000,43.74
+1998-09-10,45.29,45.29,45.29,45.29,000,45.29
+1998-09-09,39.66,39.66,39.66,39.66,000,39.66
+1998-09-08,37.90,37.90,37.90,37.90,000,37.90
+1998-09-04,43.31,43.31,43.31,43.31,000,43.31
+1998-09-03,41.43,41.43,41.43,41.43,000,41.43
+1998-09-02,36.76,36.76,36.76,36.76,000,36.76
+1998-09-01,36.48,36.48,36.48,36.48,000,36.48
+1998-08-31,44.28,44.28,44.28,44.28,000,44.28
+1998-08-28,39.60,39.60,39.60,39.60,000,39.60
+1998-08-27,38.55,38.55,38.55,38.55,000,38.55
+1998-08-26,31.14,31.14,31.14,31.14,000,31.14
+1998-08-25,30.33,30.33,30.33,30.33,000,30.33
+1998-08-24,31.80,31.80,31.80,31.80,000,31.80
+1998-08-21,33.14,33.14,33.14,33.14,000,33.14
+1998-08-20,30.00,30.00,30.00,30.00,000,30.00
+1998-08-19,28.69,28.69,28.69,28.69,000,28.69
+1998-08-18,28.40,28.40,28.40,28.40,000,28.40
+1998-08-17,31.86,31.86,31.86,31.86,000,31.86
+1998-08-14,34.75,34.75,34.75,34.75,000,34.75
+1998-08-13,29.92,29.92,29.92,29.92,000,29.92
+1998-08-12,28.55,28.55,28.55,28.55,000,28.55
+1998-08-11,31.91,31.91,31.91,31.91,000,31.91
+1998-08-10,28.75,28.75,28.75,28.75,000,28.75
+1998-08-07,27.02,27.02,27.02,27.02,000,27.02
+1998-08-06,28.20,28.20,28.20,28.20,000,28.20
+1998-08-05,29.83,29.83,29.83,29.83,000,29.83
+1998-08-04,31.06,31.06,31.06,31.06,000,31.06
+1998-08-03,25.98,25.98,25.98,25.98,000,25.98
+1998-07-31,24.80,24.80,24.80,24.80,000,24.80
+1998-07-30,22.66,22.66,22.66,22.66,000,22.66
+1998-07-29,24.79,24.79,24.79,24.79,000,24.79
+1998-07-28,25.25,25.25,25.25,25.25,000,25.25
+1998-07-27,23.13,23.13,23.13,23.13,000,23.13
+1998-07-24,23.01,23.01,23.01,23.01,000,23.01
+1998-07-23,23.01,23.01,23.01,23.01,000,23.01
+1998-07-22,20.32,20.32,20.32,20.32,000,20.32
+1998-07-21,20.10,20.10,20.10,20.10,000,20.10
+1998-07-20,17.34,17.34,17.34,17.34,000,17.34
+1998-07-17,16.23,16.23,16.23,16.23,000,16.23
+1998-07-16,16.97,16.97,16.97,16.97,000,16.97
+1998-07-15,17.89,17.89,17.89,17.89,000,17.89
+1998-07-14,17.88,17.88,17.88,17.88,000,17.88
+1998-07-13,18.26,18.26,18.26,18.26,000,18.26
+1998-07-10,17.92,17.92,17.92,17.92,000,17.92
+1998-07-09,18.16,18.16,18.16,18.16,000,18.16
+1998-07-08,17.82,17.82,17.82,17.82,000,17.82
+1998-07-07,18.62,18.62,18.62,18.62,000,18.62
+1998-07-06,18.63,18.63,18.63,18.63,000,18.63
+1998-07-02,17.67,17.67,17.67,17.67,000,17.67
+1998-07-01,18.00,18.00,18.00,18.00,000,18.00
+1998-06-30,19.71,19.71,19.71,19.71,000,19.71
+1998-06-29,19.57,19.57,19.57,19.57,000,19.57
+1998-06-26,19.36,19.36,19.36,19.36,000,19.36
+1998-06-25,20.25,20.25,20.25,20.25,000,20.25
+1998-06-24,20.02,20.02,20.02,20.02,000,20.02
+1998-06-23,20.17,20.17,20.17,20.17,000,20.17
+1998-06-22,21.94,21.94,21.94,21.94,000,21.94
+1998-06-19,21.61,21.61,21.61,21.61,000,21.61
+1998-06-18,22.09,22.09,22.09,22.09,000,22.09
+1998-06-17,22.59,22.59,22.59,22.59,000,22.59
+1998-06-16,24.80,24.80,24.80,24.80,000,24.80
+1998-06-15,26.20,26.20,26.20,26.20,000,26.20
+1998-06-12,22.78,22.78,22.78,22.78,000,22.78
+1998-06-11,23.57,23.57,23.57,23.57,000,23.57
+1998-06-10,21.48,21.48,21.48,21.48,000,21.48
+1998-06-09,20.52,20.52,20.52,20.52,000,20.52
+1998-06-08,20.58,20.58,20.58,20.58,000,20.58
+1998-06-05,19.78,19.78,19.78,19.78,000,19.78
+1998-06-04,21.22,21.22,21.22,21.22,000,21.22
+1998-06-03,22.85,22.85,22.85,22.85,000,22.85
+1998-06-02,22.00,22.00,22.00,22.00,000,22.00
+1998-06-01,22.83,22.83,22.83,22.83,000,22.83
+1998-05-29,21.32,21.32,21.32,21.32,000,21.32
+1998-05-28,20.74,20.74,20.74,20.74,000,20.74
+1998-05-27,22.59,22.59,22.59,22.59,000,22.59
+1998-05-26,22.07,22.07,22.07,22.07,000,22.07
+1998-05-22,18.99,18.99,18.99,18.99,000,18.99
+1998-05-21,19.38,19.38,19.38,19.38,000,19.38
+1998-05-20,19.89,19.89,19.89,19.89,000,19.89
+1998-05-19,20.39,20.39,20.39,20.39,000,20.39
+1998-05-18,21.69,21.69,21.69,21.69,000,21.69
+1998-05-15,20.44,20.44,20.44,20.44,000,20.44
+1998-05-14,19.64,19.64,19.64,19.64,000,19.64
+1998-05-13,20.44,20.44,20.44,20.44,000,20.44
+1998-05-12,20.98,20.98,20.98,20.98,000,20.98
+1998-05-11,21.05,21.05,21.05,21.05,000,21.05
+1998-05-08,20.57,20.57,20.57,20.57,000,20.57
+1998-05-07,23.39,23.39,23.39,23.39,000,23.39
+1998-05-06,22.79,22.79,22.79,22.79,000,22.79
+1998-05-05,21.46,21.46,21.46,21.46,000,21.46
+1998-05-04,20.32,20.32,20.32,20.32,000,20.32
+1998-05-01,19.34,19.34,19.34,19.34,000,19.34
+1998-04-30,21.18,21.18,21.18,21.18,000,21.18
+1998-04-29,22.78,22.78,22.78,22.78,000,22.78
+1998-04-28,24.17,24.17,24.17,24.17,000,24.17
+1998-04-27,26.09,26.09,26.09,26.09,000,26.09
+1998-04-24,21.97,21.97,21.97,21.97,000,21.97
+1998-04-23,20.60,20.60,20.60,20.60,000,20.60
+1998-04-22,19.87,19.87,19.87,19.87,000,19.87
+1998-04-21,19.91,19.91,19.91,19.91,000,19.91
+1998-04-20,20.39,20.39,20.39,20.39,000,20.39
+1998-04-17,20.76,20.76,20.76,20.76,000,20.76
+1998-04-16,22.06,22.06,22.06,22.06,000,22.06
+1998-04-15,20.89,20.89,20.89,20.89,000,20.89
+1998-04-14,21.61,21.61,21.61,21.61,000,21.61
+1998-04-13,22.77,22.77,22.77,22.77,000,22.77
+1998-04-09,21.51,21.51,21.51,21.51,000,21.51
+1998-04-08,23.17,23.17,23.17,23.17,000,23.17
+1998-04-07,23.66,23.66,23.66,23.66,000,23.66
+1998-04-06,22.47,22.47,22.47,22.47,000,22.47
+1998-04-03,21.82,21.82,21.82,21.82,000,21.82
+1998-04-02,21.98,21.98,21.98,21.98,000,21.98
+1998-04-01,23.37,23.37,23.37,23.37,000,23.37
+1998-03-31,24.22,24.22,24.22,24.22,000,24.22
+1998-03-30,24.66,24.66,24.66,24.66,000,24.66
+1998-03-27,23.47,23.47,23.47,23.47,000,23.47
+1998-03-26,22.81,22.81,22.81,22.81,000,22.81
+1998-03-25,22.54,22.54,22.54,22.54,000,22.54
+1998-03-24,20.51,20.51,20.51,20.51,000,20.51
+1998-03-23,19.98,19.98,19.98,19.98,000,19.98
+1998-03-20,18.69,18.69,18.69,18.69,000,18.69
+1998-03-19,17.76,17.76,17.76,17.76,000,17.76
+1998-03-18,18.29,18.29,18.29,18.29,000,18.29
+1998-03-17,18.66,18.66,18.66,18.66,000,18.66
+1998-03-16,18.51,18.51,18.51,18.51,000,18.51
+1998-03-13,18.71,18.71,18.71,18.71,000,18.71
+1998-03-12,18.25,18.25,18.25,18.25,000,18.25
+1998-03-11,18.89,18.89,18.89,18.89,000,18.89
+1998-03-10,19.43,19.43,19.43,19.43,000,19.43
+1998-03-09,20.23,20.23,20.23,20.23,000,20.23
+1998-03-06,19.14,19.14,19.14,19.14,000,19.14
+1998-03-05,20.93,20.93,20.93,20.93,000,20.93
+1998-03-04,19.58,19.58,19.58,19.58,000,19.58
+1998-03-03,19.04,19.04,19.04,19.04,000,19.04
+1998-03-02,19.19,19.19,19.19,19.19,000,19.19
+1998-02-27,18.55,18.55,18.55,18.55,000,18.55
+1998-02-26,18.63,18.63,18.63,18.63,000,18.63
+1998-02-25,18.62,18.62,18.62,18.62,000,18.62
+1998-02-24,19.35,19.35,19.35,19.35,000,19.35
+1998-02-23,18.99,18.99,18.99,18.99,000,18.99
+1998-02-20,19.00,19.00,19.00,19.00,000,19.00
+1998-02-19,19.88,19.88,19.88,19.88,000,19.88
+1998-02-18,19.66,19.66,19.66,19.66,000,19.66
+1998-02-17,20.76,20.76,20.76,20.76,000,20.76
+1998-02-13,19.84,19.84,19.84,19.84,000,19.84
+1998-02-12,19.73,19.73,19.73,19.73,000,19.73
+1998-02-11,20.38,20.38,20.38,20.38,000,20.38
+1998-02-10,20.66,20.66,20.66,20.66,000,20.66
+1998-02-09,21.55,21.55,21.55,21.55,000,21.55
+1998-02-06,20.51,20.51,20.51,20.51,000,20.51
+1998-02-05,21.29,21.29,21.29,21.29,000,21.29
+1998-02-04,20.55,20.55,20.55,20.55,000,20.55
+1998-02-03,20.67,20.67,20.67,20.67,000,20.67
+1998-02-02,21.36,21.36,21.36,21.36,000,21.36
+1998-01-30,21.47,21.47,21.47,21.47,000,21.47
+1998-01-29,21.65,21.65,21.65,21.65,000,21.65
+1998-01-28,22.06,22.06,22.06,22.06,000,22.06
+1998-01-27,22.27,22.27,22.27,22.27,000,22.27
+1998-01-26,23.97,23.97,23.97,23.97,000,23.97
+1998-01-23,23.32,23.32,23.32,23.32,000,23.32
+1998-01-22,23.16,23.16,23.16,23.16,000,23.16
+1998-01-21,22.53,22.53,22.53,22.53,000,22.53
+1998-01-20,21.65,21.65,21.65,21.65,000,21.65
+1998-01-16,21.65,21.65,21.65,21.65,000,21.65
+1998-01-15,23.45,23.45,23.45,23.45,000,23.45
+1998-01-14,23.75,23.75,23.75,23.75,000,23.75
+1998-01-13,25.17,25.17,25.17,25.17,000,25.17
+1998-01-12,28.02,28.02,28.02,28.02,000,28.02
+1998-01-09,28.69,28.69,28.69,28.69,000,28.69
+1998-01-08,26.01,26.01,26.01,26.01,000,26.01
+1998-01-07,25.07,25.07,25.07,25.07,000,25.07
+1998-01-06,25.66,25.66,25.66,25.66,000,25.66
+1998-01-05,24.36,24.36,24.36,24.36,000,24.36
+1998-01-02,23.42,23.42,23.42,23.42,000,23.42
+1997-12-31,24.01,24.01,24.01,24.01,000,24.01
+1997-12-30,24.38,24.38,24.38,24.38,000,24.38
+1997-12-29,26.79,26.79,26.79,26.79,000,26.79
+1997-12-26,29.27,29.27,29.27,29.27,000,29.27
+1997-12-24,30.27,30.27,30.27,30.27,000,30.27
+1997-12-23,29.86,29.86,29.86,29.86,000,29.86
+1997-12-22,28.56,28.56,28.56,28.56,000,28.56
+1997-12-19,29.18,29.18,29.18,29.18,000,29.18
+1997-12-18,27.19,27.19,27.19,27.19,000,27.19
+1997-12-17,26.33,26.33,26.33,26.33,000,26.33
+1997-12-16,26.11,26.11,26.11,26.11,000,26.11
+1997-12-15,27.37,27.37,27.37,27.37,000,27.37
+1997-12-12,27.92,27.92,27.92,27.92,000,27.92
+1997-12-11,27.63,27.63,27.63,27.63,000,27.63
+1997-12-10,24.55,24.55,24.55,24.55,000,24.55
+1997-12-09,23.36,23.36,23.36,23.36,000,23.36
+1997-12-08,23.22,23.22,23.22,23.22,000,23.22
+1997-12-05,22.65,22.65,22.65,22.65,000,22.65
+1997-12-04,23.84,23.84,23.84,23.84,000,23.84
+1997-12-03,23.92,23.92,23.92,23.92,000,23.92
+1997-12-02,25.66,25.66,25.66,25.66,000,25.66
+1997-12-01,26.01,26.01,26.01,26.01,000,26.01
+1997-11-28,27.43,27.43,27.43,27.43,000,27.43
+1997-11-25,28.95,28.95,28.95,28.95,000,28.95
+1997-11-24,29.80,29.80,29.80,29.80,000,29.80
+1997-11-21,26.65,26.65,26.65,26.65,000,26.65
+1997-11-20,27.32,27.32,27.32,27.32,000,27.32
+1997-11-19,29.93,29.93,29.93,29.93,000,29.93
+1997-11-18,31.55,31.55,31.55,31.55,000,31.55
+1997-11-17,31.58,31.58,31.58,31.58,000,31.58
+1997-11-14,33.66,33.66,33.66,33.66,000,33.66
+1997-11-13,36.64,36.64,36.64,36.64,000,36.64
+1997-11-12,37.57,37.57,37.57,37.57,000,37.57
+1997-11-11,36.38,36.38,36.38,36.38,000,36.38
+1997-11-10,36.63,36.63,36.63,36.63,000,36.63
+1997-11-07,36.27,36.27,36.27,36.27,000,36.27
+1997-11-06,32.57,32.57,32.57,32.57,000,32.57
+1997-11-05,32.18,32.18,32.18,32.18,000,32.18
+1997-11-04,32.24,32.24,32.24,32.24,000,32.24
+1997-11-03,32.09,32.09,32.09,32.09,000,32.09
+1997-10-31,35.09,35.09,35.09,35.09,000,35.09
+1997-10-30,38.20,38.20,38.20,38.20,000,38.20
+1997-10-29,33.75,33.75,33.75,33.75,000,33.75
+1997-10-28,31.22,31.22,31.22,31.22,000,31.22
+1997-10-27,31.12,31.12,31.12,31.12,000,31.12
+1997-10-24,23.17,23.17,23.17,23.17,000,23.17
+1997-10-23,22.99,22.99,22.99,22.99,000,22.99
+1997-10-22,19.86,19.86,19.86,19.86,000,19.86
+1997-10-21,19.53,19.53,19.53,19.53,000,19.53
+1997-10-20,20.72,20.72,20.72,20.72,000,20.72
+1997-10-17,21.69,21.69,21.69,21.69,000,21.69
+1997-10-16,20.53,20.53,20.53,20.53,000,20.53
+1997-10-15,20.05,20.05,20.05,20.05,000,20.05
+1997-10-14,19.99,19.99,19.99,19.99,000,19.99
+1997-10-13,20.26,20.26,20.26,20.26,000,20.26
+1997-10-10,19.75,19.75,19.75,19.75,000,19.75
+1997-10-09,22.31,22.31,22.31,22.31,000,22.31
+1997-10-08,21.04,21.04,21.04,21.04,000,21.04
+1997-10-07,20.29,20.29,20.29,20.29,000,20.29
+1997-10-06,21.61,21.61,21.61,21.61,000,21.61
+1997-10-03,21.54,21.54,21.54,21.54,000,21.54
+1997-10-02,22.27,22.27,22.27,22.27,000,22.27
+1997-10-01,22.32,22.32,22.32,22.32,000,22.32
+1997-09-30,22.91,22.91,22.91,22.91,000,22.91
+1997-09-29,22.23,22.23,22.23,22.23,000,22.23
+1997-09-26,22.26,22.26,22.26,22.26,000,22.26
+1997-09-25,22.96,22.96,22.96,22.96,000,22.96
+1997-09-24,22.64,22.64,22.64,22.64,000,22.64
+1997-09-23,22.00,22.00,22.00,22.00,000,22.00
+1997-09-22,22.08,22.08,22.08,22.08,000,22.08
+1997-09-19,22.74,22.74,22.74,22.74,000,22.74
+1997-09-18,23.48,23.48,23.48,23.48,000,23.48
+1997-09-17,24.10,24.10,24.10,24.10,000,24.10
+1997-09-16,23.77,23.77,23.77,23.77,000,23.77
+1997-09-15,25.74,25.74,25.74,25.74,000,25.74
+1997-09-12,25.17,25.17,25.17,25.17,000,25.17
+1997-09-11,25.99,25.99,25.99,25.99,000,25.99
+1997-09-10,24.64,24.64,24.64,24.64,000,24.64
+1997-09-09,23.89,23.89,23.89,23.89,000,23.89
+1997-09-08,24.40,24.40,24.40,24.40,000,24.40
+1997-09-05,24.31,24.31,24.31,24.31,000,24.31
+1997-09-04,25.27,25.27,25.27,25.27,000,25.27
+1997-09-03,24.95,24.95,24.95,24.95,000,24.95
+1997-09-02,24.53,24.53,24.53,24.53,000,24.53
+1997-08-29,24.76,24.76,24.76,24.76,000,24.76
+1997-08-28,24.51,24.51,24.51,24.51,000,24.51
+1997-08-27,24.26,24.26,24.26,24.26,000,24.26
+1997-08-26,24.73,24.73,24.73,24.73,000,24.73
+1997-08-25,24.10,24.10,24.10,24.10,000,24.10
+1997-08-22,24.74,24.74,24.74,24.74,000,24.74
+1997-08-21,23.83,23.83,23.83,23.83,000,23.83
+1997-08-20,21.09,21.09,21.09,21.09,000,21.09
+1997-08-19,22.64,22.64,22.64,22.64,000,22.64
+1997-08-18,24.37,24.37,24.37,24.37,000,24.37
+1997-08-15,24.45,24.45,24.45,24.45,000,24.45
+1997-08-14,23.11,23.11,23.11,23.11,000,23.11
+1997-08-13,24.52,24.52,24.52,24.52,000,24.52
+1997-08-12,23.75,23.75,23.75,23.75,000,23.75
+1997-08-11,22.77,22.77,22.77,22.77,000,22.77
+1997-08-08,22.46,22.46,22.46,22.46,000,22.46
+1997-08-07,19.77,19.77,19.77,19.77,000,19.77
+1997-08-06,20.05,20.05,20.05,20.05,000,20.05
+1997-08-05,20.64,20.64,20.64,20.64,000,20.64
+1997-08-04,21.94,21.94,21.94,21.94,000,21.94
+1997-08-01,22.29,22.29,22.29,22.29,000,22.29
+1997-07-31,21.48,21.48,21.48,21.48,000,21.48
+1997-07-30,21.39,21.39,21.39,21.39,000,21.39
+1997-07-29,22.02,22.02,22.02,22.02,000,22.02
+1997-07-28,21.84,21.84,21.84,21.84,000,21.84
+1997-07-25,20.82,20.82,20.82,20.82,000,20.82
+1997-07-24,20.96,20.96,20.96,20.96,000,20.96
+1997-07-23,21.30,21.30,21.30,21.30,000,21.30
+1997-07-22,21.77,21.77,21.77,21.77,000,21.77
+1997-07-21,23.51,23.51,23.51,23.51,000,23.51
+1997-07-18,22.28,22.28,22.28,22.28,000,22.28
+1997-07-17,20.54,20.54,20.54,20.54,000,20.54
+1997-07-16,19.36,19.36,19.36,19.36,000,19.36
+1997-07-15,19.00,19.00,19.00,19.00,000,19.00
+1997-07-14,19.58,19.58,19.58,19.58,000,19.58
+1997-07-11,19.06,19.06,19.06,19.06,000,19.06
+1997-07-10,19.92,19.92,19.92,19.92,000,19.92
+1997-07-09,20.40,20.40,20.40,20.40,000,20.40
+1997-07-08,18.76,18.76,18.76,18.76,000,18.76
+1997-07-07,19.13,19.13,19.13,19.13,000,19.13
+1997-07-03,17.82,17.82,17.82,17.82,000,17.82
+1997-07-02,19.70,19.70,19.70,19.70,000,19.70
+1997-07-01,21.00,21.00,21.00,21.00,000,21.00
+1997-06-30,21.53,21.53,21.53,21.53,000,21.53
+1997-06-27,21.22,21.22,21.22,21.22,000,21.22
+1997-06-26,21.82,21.82,21.82,21.82,000,21.82
+1997-06-25,21.50,21.50,21.50,21.50,000,21.50
+1997-06-24,20.74,20.74,20.74,20.74,000,20.74
+1997-06-23,21.19,21.19,21.19,21.19,000,21.19
+1997-06-20,20.20,20.20,20.20,20.20,000,20.20
+1997-06-19,20.10,20.10,20.10,20.10,000,20.10
+1997-06-18,20.45,20.45,20.45,20.45,000,20.45
+1997-06-17,20.17,20.17,20.17,20.17,000,20.17
+1997-06-16,19.77,19.77,19.77,19.77,000,19.77
+1997-06-13,19.27,19.27,19.27,19.27,000,19.27
+1997-06-12,18.51,18.51,18.51,18.51,000,18.51
+1997-06-11,18.85,18.85,18.85,18.85,000,18.85
+1997-06-10,19.04,19.04,19.04,19.04,000,19.04
+1997-06-09,19.46,19.46,19.46,19.46,000,19.46
+1997-06-06,18.94,18.94,18.94,18.94,000,18.94
+1997-06-05,20.36,20.36,20.36,20.36,000,20.36
+1997-06-04,20.10,20.10,20.10,20.10,000,20.10
+1997-06-03,20.01,20.01,20.01,20.01,000,20.01
+1997-06-02,20.85,20.85,20.85,20.85,000,20.85
+1997-05-30,19.19,19.19,19.19,19.19,000,19.19
+1997-05-29,19.02,19.02,19.02,19.02,000,19.02
+1997-05-28,19.28,19.28,19.28,19.28,000,19.28
+1997-05-27,19.36,19.36,19.36,19.36,000,19.36
+1997-05-23,18.08,18.08,18.08,18.08,000,18.08
+1997-05-22,18.77,18.77,18.77,18.77,000,18.77
+1997-05-21,19.28,19.28,19.28,19.28,000,19.28
+1997-05-20,19.26,19.26,19.26,19.26,000,19.26
+1997-05-19,21.48,21.48,21.48,21.48,000,21.48
+1997-05-16,21.57,21.57,21.57,21.57,000,21.57
+1997-05-15,19.91,19.91,19.91,19.91,000,19.91
+1997-05-14,21.09,21.09,21.09,21.09,000,21.09
+1997-05-13,20.81,20.81,20.81,20.81,000,20.81
+1997-05-12,20.25,20.25,20.25,20.25,000,20.25
+1997-05-09,20.11,20.11,20.11,20.11,000,20.11
+1997-05-08,21.26,21.26,21.26,21.26,000,21.26
+1997-05-07,21.34,21.34,21.34,21.34,000,21.34
+1997-05-06,20.85,20.85,20.85,20.85,000,20.85
+1997-05-05,20.13,20.13,20.13,20.13,000,20.13
+1997-05-02,17.51,17.51,17.51,17.51,000,17.51
+1997-05-01,19.87,19.87,19.87,19.87,000,19.87
+1997-04-30,20.06,20.06,20.06,20.06,000,20.06
+1997-04-29,19.81,19.81,19.81,19.81,000,19.81
+1997-04-28,21.34,21.34,21.34,21.34,000,21.34
+1997-04-25,21.15,21.15,21.15,21.15,000,21.15
+1997-04-24,20.83,20.83,20.83,20.83,000,20.83
+1997-04-23,20.48,20.48,20.48,20.48,000,20.48
+1997-04-22,19.52,19.52,19.52,19.52,000,19.52
+1997-04-21,20.10,20.10,20.10,20.10,000,20.10
+1997-04-18,18.75,18.75,18.75,18.75,000,18.75
+1997-04-17,18.71,18.71,18.71,18.71,000,18.71
+1997-04-16,17.64,17.64,17.64,17.64,000,17.64
+1997-04-15,18.25,18.25,18.25,18.25,000,18.25
+1997-04-14,19.09,19.09,19.09,19.09,000,19.09
+1997-04-11,19.76,19.76,19.76,19.76,000,19.76
+1997-04-10,19.01,19.01,19.01,19.01,000,19.01
+1997-04-09,18.56,18.56,18.56,18.56,000,18.56
+1997-04-08,18.44,18.44,18.44,18.44,000,18.44
+1997-04-07,18.51,18.51,18.51,18.51,000,18.51
+1997-04-04,19.23,19.23,19.23,19.23,000,19.23
+1997-04-03,21.19,21.19,21.19,21.19,000,21.19
+1997-04-02,21.30,21.30,21.30,21.30,000,21.30
+1997-04-01,20.84,20.84,20.84,20.84,000,20.84
+1997-03-31,22.14,22.14,22.14,22.14,000,22.14
+1997-03-27,20.50,20.50,20.50,20.50,000,20.50
+1997-03-26,18.32,18.32,18.32,18.32,000,18.32
+1997-03-25,19.26,19.26,19.26,19.26,000,19.26
+1997-03-24,20.06,20.06,20.06,20.06,000,20.06
+1997-03-21,19.69,19.69,19.69,19.69,000,19.69
+1997-03-20,21.22,21.22,21.22,21.22,000,21.22
+1997-03-19,21.74,21.74,21.74,21.74,000,21.74
+1997-03-18,21.26,21.26,21.26,21.26,000,21.26
+1997-03-17,20.95,20.95,20.95,20.95,000,20.95
+1997-03-14,19.81,19.81,19.81,19.81,000,19.81
+1997-03-13,19.79,19.79,19.79,19.79,000,19.79
+1997-03-12,19.61,19.61,19.61,19.61,000,19.61
+1997-03-11,19.25,19.25,19.25,19.25,000,19.25
+1997-03-10,19.00,19.00,19.00,19.00,000,19.00
+1997-03-07,19.32,19.32,19.32,19.32,000,19.32
+1997-03-06,20.48,20.48,20.48,20.48,000,20.48
+1997-03-05,19.49,19.49,19.49,19.49,000,19.49
+1997-03-04,20.62,20.62,20.62,20.62,000,20.62
+1997-03-03,20.89,20.89,20.89,20.89,000,20.89
+1997-02-28,21.10,21.10,21.10,21.10,000,21.10
+1997-02-27,21.08,21.08,21.08,21.08,000,21.08
+1997-02-26,20.74,20.74,20.74,20.74,000,20.74
+1997-02-25,20.49,20.49,20.49,20.49,000,20.49
+1997-02-24,19.84,19.84,19.84,19.84,000,19.84
+1997-02-21,20.55,20.55,20.55,20.55,000,20.55
+1997-02-20,21.41,21.41,21.41,21.41,000,21.41
+1997-02-19,20.61,20.61,20.61,20.61,000,20.61
+1997-02-18,19.70,19.70,19.70,19.70,000,19.70
+1997-02-14,19.18,19.18,19.18,19.18,000,19.18
+1997-02-13,19.23,19.23,19.23,19.23,000,19.23
+1997-02-12,19.48,19.48,19.48,19.48,000,19.48
+1997-02-11,19.97,19.97,19.97,19.97,000,19.97
+1997-02-10,20.65,20.65,20.65,20.65,000,20.65
+1997-02-07,18.90,18.90,18.90,18.90,000,18.90
+1997-02-06,20.16,20.16,20.16,20.16,000,20.16
+1997-02-05,21.06,21.06,21.06,21.06,000,21.06
+1997-02-04,19.43,19.43,19.43,19.43,000,19.43
+1997-02-03,19.58,19.58,19.58,19.58,000,19.58
+1997-01-30,19.47,19.47,19.47,19.47,000,19.47
+1997-01-29,20.23,20.23,20.23,20.23,000,20.23
+1997-01-28,20.74,20.74,20.74,20.74,000,20.74
+1997-01-27,20.16,20.16,20.16,20.16,000,20.16
+1997-01-24,19.33,19.33,19.33,19.33,000,19.33
+1997-01-23,18.47,18.47,18.47,18.47,000,18.47
+1997-01-22,17.09,17.09,17.09,17.09,000,17.09
+1997-01-21,17.81,17.81,17.81,17.81,000,17.81
+1997-01-20,18.60,18.60,18.60,18.60,000,18.60
+1997-01-17,18.63,18.63,18.63,18.63,000,18.63
+1997-01-16,19.61,19.61,19.61,19.61,000,19.61
+1997-01-15,19.40,19.40,19.40,19.40,000,19.40
+1997-01-14,19.27,19.27,19.27,19.27,000,19.27
+1997-01-13,19.84,19.84,19.84,19.84,000,19.84
+1997-01-10,19.63,19.63,19.63,19.63,000,19.63
+1997-01-09,20.91,20.91,20.91,20.91,000,20.91
+1997-01-08,20.24,20.24,20.24,20.24,000,20.24
+1997-01-07,19.35,19.35,19.35,19.35,000,19.35
+1997-01-06,19.89,19.89,19.89,19.89,000,19.89
+1997-01-03,19.13,19.13,19.13,19.13,000,19.13
+1997-01-02,21.14,21.14,21.14,21.14,000,21.14
+1996-12-31,20.92,20.92,20.92,20.92,000,20.92
+1996-12-30,19.51,19.51,19.51,19.51,000,19.51
+1996-12-27,19.13,19.13,19.13,19.13,000,19.13
+1996-12-26,18.59,18.59,18.59,18.59,000,18.59
+1996-12-24,18.68,18.68,18.68,18.68,000,18.68
+1996-12-23,19.50,19.50,19.50,19.50,000,19.50
+1996-12-20,18.85,18.85,18.85,18.85,000,18.85
+1996-12-19,18.77,18.77,18.77,18.77,000,18.77
+1996-12-18,19.42,19.42,19.42,19.42,000,19.42
+1996-12-17,20.77,20.77,20.77,20.77,000,20.77
+1996-12-16,21.99,21.99,21.99,21.99,000,21.99
+1996-12-13,21.09,21.09,21.09,21.09,000,21.09
+1996-12-12,20.45,20.45,20.45,20.45,000,20.45
+1996-12-11,19.68,19.68,19.68,19.68,000,19.68
+1996-12-10,17.88,17.88,17.88,17.88,000,17.88
+1996-12-09,17.75,17.75,17.75,17.75,000,17.75
+1996-12-06,18.82,18.82,18.82,18.82,000,18.82
+1996-12-05,18.14,18.14,18.14,18.14,000,18.14
+1996-12-04,17.93,17.93,17.93,17.93,000,17.93
+1996-12-03,18.68,18.68,18.68,18.68,000,18.68
+1996-12-02,17.93,17.93,17.93,17.93,000,17.93
+1996-11-29,17.14,17.14,17.14,17.14,000,17.14
+1996-11-27,16.96,16.96,16.96,16.96,000,16.96
+1996-11-26,16.97,16.97,16.97,16.97,000,16.97
+1996-11-25,15.91,15.91,15.91,15.91,000,15.91
+1996-11-22,14.92,14.92,14.92,14.92,000,14.92
+1996-11-21,15.77,15.77,15.77,15.77,000,15.77
+1996-11-20,15.94,15.94,15.94,15.94,000,15.94
+1996-11-19,15.23,15.23,15.23,15.23,000,15.23
+1996-11-18,15.12,15.12,15.12,15.12,000,15.12
+1996-11-15,14.36,14.36,14.36,14.36,000,14.36
+1996-11-14,13.79,13.79,13.79,13.79,000,13.79
+1996-11-13,14.89,14.89,14.89,14.89,000,14.89
+1996-11-12,15.36,15.36,15.36,15.36,000,15.36
+1996-11-11,15.01,15.01,15.01,15.01,000,15.01
+1996-11-08,15.78,15.78,15.78,15.78,000,15.78
+1996-11-07,17.21,17.21,17.21,17.21,000,17.21
+1996-11-06,16.97,16.97,16.97,16.97,000,16.97
+1996-11-05,17.65,17.65,17.65,17.65,000,17.65
+1996-11-04,18.04,18.04,18.04,18.04,000,18.04
+1996-11-01,17.89,17.89,17.89,17.89,000,17.89
+1996-10-31,18.11,18.11,18.11,18.11,000,18.11
+1996-10-30,18.48,18.48,18.48,18.48,000,18.48
+1996-10-29,18.28,18.28,18.28,18.28,000,18.28
+1996-10-28,18.34,18.34,18.34,18.34,000,18.34
+1996-10-25,17.29,17.29,17.29,17.29,000,17.29
+1996-10-24,16.89,16.89,16.89,16.89,000,16.89
+1996-10-23,16.45,16.45,16.45,16.45,000,16.45
+1996-10-22,16.40,16.40,16.40,16.40,000,16.40
+1996-10-21,15.98,15.98,15.98,15.98,000,15.98
+1996-10-18,15.08,15.08,15.08,15.08,000,15.08
+1996-10-17,15.41,15.41,15.41,15.41,000,15.41
+1996-10-16,15.60,15.60,15.60,15.60,000,15.60
+1996-10-15,15.83,15.83,15.83,15.83,000,15.83
+1996-10-14,15.13,15.13,15.13,15.13,000,15.13
+1996-10-11,15.07,15.07,15.07,15.07,000,15.07
+1996-10-10,16.26,16.26,16.26,16.26,000,16.26
+1996-10-09,16.09,16.09,16.09,16.09,000,16.09
+1996-10-08,15.58,15.58,15.58,15.58,000,15.58
+1996-10-07,15.11,15.11,15.11,15.11,000,15.11
+1996-10-04,14.80,14.80,14.80,14.80,000,14.80
+1996-10-03,16.77,16.77,16.77,16.77,000,16.77
+1996-10-02,16.78,16.78,16.78,16.78,000,16.78
+1996-10-01,17.05,17.05,17.05,17.05,000,17.05
+1996-09-30,16.95,16.95,16.95,16.95,000,16.95
+1996-09-27,16.10,16.10,16.10,16.10,000,16.10
+1996-09-26,16.11,16.11,16.11,16.11,000,16.11
+1996-09-25,16.22,16.22,16.22,16.22,000,16.22
+1996-09-24,16.45,16.45,16.45,16.45,000,16.45
+1996-09-23,16.46,16.46,16.46,16.46,000,16.46
+1996-09-20,15.65,15.65,15.65,15.65,000,15.65
+1996-09-19,16.03,16.03,16.03,16.03,000,16.03
+1996-09-18,15.86,15.86,15.86,15.86,000,15.86
+1996-09-17,15.74,15.74,15.74,15.74,000,15.74
+1996-09-16,15.43,15.43,15.43,15.43,000,15.43
+1996-09-13,15.20,15.20,15.20,15.20,000,15.20
+1996-09-12,15.97,15.97,15.97,15.97,000,15.97
+1996-09-11,16.06,16.06,16.06,16.06,000,16.06
+1996-09-10,16.25,16.25,16.25,16.25,000,16.25
+1996-09-09,16.36,16.36,16.36,16.36,000,16.36
+1996-09-06,17.10,17.10,17.10,17.10,000,17.10
+1996-09-05,20.51,20.51,20.51,20.51,000,20.51
+1996-09-04,18.64,18.64,18.64,18.64,000,18.64
+1996-09-03,18.47,18.47,18.47,18.47,000,18.47
+1996-08-30,17.01,17.01,17.01,17.01,000,17.01
+1996-08-29,16.22,16.22,16.22,16.22,000,16.22
+1996-08-28,15.10,15.10,15.10,15.10,000,15.10
+1996-08-27,15.11,15.11,15.11,15.11,000,15.11
+1996-08-26,15.38,15.38,15.38,15.38,000,15.38
+1996-08-23,14.18,14.18,14.18,14.18,000,14.18
+1996-08-22,13.71,13.71,13.71,13.71,000,13.71
+1996-08-21,14.52,14.52,14.52,14.52,000,14.52
+1996-08-20,14.73,14.73,14.73,14.73,000,14.73
+1996-08-19,15.27,15.27,15.27,15.27,000,15.27
+1996-08-16,14.81,14.81,14.81,14.81,000,14.81
+1996-08-15,15.46,15.46,15.46,15.46,000,15.46
+1996-08-14,15.96,15.96,15.96,15.96,000,15.96
+1996-08-13,16.41,16.41,16.41,16.41,000,16.41
+1996-08-12,15.57,15.57,15.57,15.57,000,15.57
+1996-08-09,15.77,15.77,15.77,15.77,000,15.77
+1996-08-08,16.04,16.04,16.04,16.04,000,16.04
+1996-08-07,16.24,16.24,16.24,16.24,000,16.24
+1996-08-06,16.93,16.93,16.93,16.93,000,16.93
+1996-08-05,17.36,17.36,17.36,17.36,000,17.36
+1996-08-02,16.19,16.19,16.19,16.19,000,16.19
+1996-08-01,18.76,18.76,18.76,18.76,000,18.76
+1996-07-31,19.46,19.46,19.46,19.46,000,19.46
+1996-07-30,20.53,20.53,20.53,20.53,000,20.53
+1996-07-29,20.09,20.09,20.09,20.09,000,20.09
+1996-07-26,17.45,17.45,17.45,17.45,000,17.45
+1996-07-25,19.39,19.39,19.39,19.39,000,19.39
+1996-07-24,21.44,21.44,21.44,21.44,000,21.44
+1996-07-23,21.55,21.55,21.55,21.55,000,21.55
+1996-07-22,20.41,20.41,20.41,20.41,000,20.41
+1996-07-19,17.26,17.26,17.26,17.26,000,17.26
+1996-07-18,17.93,17.93,17.93,17.93,000,17.93
+1996-07-17,19.22,19.22,19.22,19.22,000,19.22
+1996-07-16,20.10,20.10,20.10,20.10,000,20.10
+1996-07-15,20.11,20.11,20.11,20.11,000,20.11
+1996-07-12,17.09,17.09,17.09,17.09,000,17.09
+1996-07-11,17.81,17.81,17.81,17.81,000,17.81
+1996-07-10,15.51,15.51,15.51,15.51,000,15.51
+1996-07-09,15.49,15.49,15.49,15.49,000,15.49
+1996-07-08,16.42,16.42,16.42,16.42,000,16.42
+1996-07-05,16.09,16.09,16.09,16.09,000,16.09
+1996-07-03,14.21,14.21,14.21,14.21,000,14.21
+1996-07-02,14.19,14.19,14.19,14.19,000,14.19
+1996-07-01,13.78,13.78,13.78,13.78,000,13.78
+1996-06-28,13.68,13.68,13.68,13.68,000,13.68
+1996-06-27,14.19,14.19,14.19,14.19,000,14.19
+1996-06-26,15.23,15.23,15.23,15.23,000,15.23
+1996-06-25,15.43,15.43,15.43,15.43,000,15.43
+1996-06-24,15.91,15.91,15.91,15.91,000,15.91
+1996-06-21,15.80,15.80,15.80,15.80,000,15.80
+1996-06-20,16.97,16.97,16.97,16.97,000,16.97
+1996-06-19,17.54,17.54,17.54,17.54,000,17.54
+1996-06-18,17.45,17.45,17.45,17.45,000,17.45
+1996-06-17,17.46,17.46,17.46,17.46,000,17.46
+1996-06-14,18.64,18.64,18.64,18.64,000,18.64
+1996-06-13,17.12,17.12,17.12,17.12,000,17.12
+1996-06-12,17.00,17.00,17.00,17.00,000,17.00
+1996-06-11,16.68,16.68,16.68,16.68,000,16.68
+1996-06-10,16.78,16.78,16.78,16.78,000,16.78
+1996-06-07,16.10,16.10,16.10,16.10,000,16.10
+1996-06-06,16.84,16.84,16.84,16.84,000,16.84
+1996-06-05,16.04,16.04,16.04,16.04,000,16.04
+1996-06-04,16.18,16.18,16.18,16.18,000,16.18
+1996-06-03,16.86,16.86,16.86,16.86,000,16.86
+1996-05-31,16.07,16.07,16.07,16.07,000,16.07
+1996-05-30,16.02,16.02,16.02,16.02,000,16.02
+1996-05-29,17.15,17.15,17.15,17.15,000,17.15
+1996-05-28,16.92,16.92,16.92,16.92,000,16.92
+1996-05-24,15.54,15.54,15.54,15.54,000,15.54
+1996-05-23,16.17,16.17,16.17,16.17,000,16.17
+1996-05-22,15.50,15.50,15.50,15.50,000,15.50
+1996-05-21,16.00,16.00,16.00,16.00,000,16.00
+1996-05-20,15.80,15.80,15.80,15.80,000,15.80
+1996-05-17,15.13,15.13,15.13,15.13,000,15.13
+1996-05-16,15.71,15.71,15.71,15.71,000,15.71
+1996-05-15,15.59,15.59,15.59,15.59,000,15.59
+1996-05-14,14.90,14.90,14.90,14.90,000,14.90
+1996-05-13,15.16,15.16,15.16,15.16,000,15.16
+1996-05-10,15.61,15.61,15.61,15.61,000,15.61
+1996-05-09,16.99,16.99,16.99,16.99,000,16.99
+1996-05-08,15.78,15.78,15.78,15.78,000,15.78
+1996-05-07,16.87,16.87,16.87,16.87,000,16.87
+1996-05-06,16.92,16.92,16.92,16.92,000,16.92
+1996-05-03,16.70,16.70,16.70,16.70,000,16.70
+1996-05-02,18.62,18.62,18.62,18.62,000,18.62
+1996-05-01,16.07,16.07,16.07,16.07,000,16.07
+1996-04-30,15.83,15.83,15.83,15.83,000,15.83
+1996-04-29,15.45,15.45,15.45,15.45,000,15.45
+1996-04-26,14.75,14.75,14.75,14.75,000,14.75
+1996-04-25,14.72,14.72,14.72,14.72,000,14.72
+1996-04-24,14.91,14.91,14.91,14.91,000,14.91
+1996-04-23,15.01,15.01,15.01,15.01,000,15.01
+1996-04-22,15.38,15.38,15.38,15.38,000,15.38
+1996-04-19,15.12,15.12,15.12,15.12,000,15.12
+1996-04-18,16.41,16.41,16.41,16.41,000,16.41
+1996-04-17,17.07,17.07,17.07,17.07,000,17.07
+1996-04-16,16.45,16.45,16.45,16.45,000,16.45
+1996-04-15,16.83,16.83,16.83,16.83,000,16.83
+1996-04-12,17.38,17.38,17.38,17.38,000,17.38
+1996-04-11,19.65,19.65,19.65,19.65,000,19.65
+1996-04-10,20.22,20.22,20.22,20.22,000,20.22
+1996-04-09,17.32,17.32,17.32,17.32,000,17.32
+1996-04-08,18.72,18.72,18.72,18.72,000,18.72
+1996-04-04,16.18,16.18,16.18,16.18,000,16.18
+1996-04-03,16.33,16.33,16.33,16.33,000,16.33
+1996-04-02,16.45,16.45,16.45,16.45,000,16.45
+1996-04-01,17.90,17.90,17.90,17.90,000,17.90
+1996-03-29,18.88,18.88,18.88,18.88,000,18.88
+1996-03-28,18.16,18.16,18.16,18.16,000,18.16
+1996-03-27,17.89,17.89,17.89,17.89,000,17.89
+1996-03-26,17.80,17.80,17.80,17.80,000,17.80
+1996-03-25,17.84,17.84,17.84,17.84,000,17.84
+1996-03-22,17.05,17.05,17.05,17.05,000,17.05
+1996-03-21,17.74,17.74,17.74,17.74,000,17.74
+1996-03-20,18.66,18.66,18.66,18.66,000,18.66
+1996-03-19,18.35,18.35,18.35,18.35,000,18.35
+1996-03-18,17.31,17.31,17.31,17.31,000,17.31
+1996-03-15,16.54,16.54,16.54,16.54,000,16.54
+1996-03-14,16.93,16.93,16.93,16.93,000,16.93
+1996-03-13,18.13,18.13,18.13,18.13,000,18.13
+1996-03-12,19.09,19.09,19.09,19.09,000,19.09
+1996-03-11,20.33,20.33,20.33,20.33,000,20.33
+1996-03-08,20.70,20.70,20.70,20.70,000,20.70
+1996-03-07,16.49,16.49,16.49,16.49,000,16.49
+1996-03-06,16.56,16.56,16.56,16.56,000,16.56
+1996-03-05,16.10,16.10,16.10,16.10,000,16.10
+1996-03-04,16.67,16.67,16.67,16.67,000,16.67
+1996-03-01,16.72,16.72,16.72,16.72,000,16.72
+1996-02-29,17.04,17.04,17.04,17.04,000,17.04
+1996-02-28,16.72,16.72,16.72,16.72,000,16.72
+1996-02-27,16.63,16.63,16.63,16.63,000,16.63
+1996-02-26,16.38,16.38,16.38,16.38,000,16.38
+1996-02-23,14.78,14.78,14.78,14.78,000,14.78
+1996-02-22,14.56,14.56,14.56,14.56,000,14.56
+1996-02-21,14.47,14.47,14.47,14.47,000,14.47
+1996-02-20,16.80,16.80,16.80,16.80,000,16.80
+1996-02-16,15.37,15.37,15.37,15.37,000,15.37
+1996-02-15,16.13,16.13,16.13,16.13,000,16.13
+1996-02-14,15.59,15.59,15.59,15.59,000,15.59
+1996-02-13,17.12,17.12,17.12,17.12,000,17.12
+1996-02-12,14.69,14.69,14.69,14.69,000,14.69
+1996-02-09,14.63,14.63,14.63,14.63,000,14.63
+1996-02-08,13.89,13.89,13.89,13.89,000,13.89
+1996-02-07,14.11,14.11,14.11,14.11,000,14.11
+1996-02-06,14.59,14.59,14.59,14.59,000,14.59
+1996-02-05,13.46,13.46,13.46,13.46,000,13.46
+1996-02-02,13.23,13.23,13.23,13.23,000,13.23
+1996-02-01,12.65,12.65,12.65,12.65,000,12.65
+1996-01-31,12.53,12.53,12.53,12.53,000,12.53
+1996-01-30,12.42,12.42,12.42,12.42,000,12.42
+1996-01-29,12.19,12.19,12.19,12.19,000,12.19
+1996-01-26,12.00,12.00,12.00,12.00,000,12.00
+1996-01-25,12.94,12.94,12.94,12.94,000,12.94
+1996-01-24,12.54,12.54,12.54,12.54,000,12.54
+1996-01-23,13.56,13.56,13.56,13.56,000,13.56
+1996-01-22,13.34,13.34,13.34,13.34,000,13.34
+1996-01-19,12.70,12.70,12.70,12.70,000,12.70
+1996-01-18,13.58,13.58,13.58,13.58,000,13.58
+1996-01-17,14.25,14.25,14.25,14.25,000,14.25
+1996-01-16,14.09,14.09,14.09,14.09,000,14.09
+1996-01-15,14.99,14.99,14.99,14.99,000,14.99
+1996-01-12,15.30,15.30,15.30,15.30,000,15.30
+1996-01-11,15.42,15.42,15.42,15.42,000,15.42
+1996-01-10,16.88,16.88,16.88,16.88,000,16.88
+1996-01-09,15.21,15.21,15.21,15.21,000,15.21
+1996-01-08,13.11,13.11,13.11,13.11,000,13.11
+1996-01-05,13.58,13.58,13.58,13.58,000,13.58
+1996-01-04,13.78,13.78,13.78,13.78,000,13.78
+1996-01-03,12.10,12.10,12.10,12.10,000,12.10
+1996-01-02,12.19,12.19,12.19,12.19,000,12.19
+1995-12-29,12.52,12.52,12.52,12.52,000,12.52
+1995-12-28,12.25,12.25,12.25,12.25,000,12.25
+1995-12-27,11.98,11.98,11.98,11.98,000,11.98
+1995-12-26,11.49,11.49,11.49,11.49,000,11.49
+1995-12-22,11.51,11.51,11.51,11.51,000,11.51
+1995-12-21,10.77,10.77,10.77,10.77,000,10.77
+1995-12-20,12.20,12.20,12.20,12.20,000,12.20
+1995-12-19,13.16,13.16,13.16,13.16,000,13.16
+1995-12-18,14.55,14.55,14.55,14.55,000,14.55
+1995-12-15,11.44,11.44,11.44,11.44,000,11.44
+1995-12-14,11.07,11.07,11.07,11.07,000,11.07
+1995-12-13,10.36,10.36,10.36,10.36,000,10.36
+1995-12-12,10.63,10.63,10.63,10.63,000,10.63
+1995-12-11,11.06,11.06,11.06,11.06,000,11.06
+1995-12-08,11.12,11.12,11.12,11.12,000,11.12
+1995-12-07,12.74,12.74,12.74,12.74,000,12.74
+1995-12-06,12.70,12.70,12.70,12.70,000,12.70
+1995-12-05,11.65,11.65,11.65,11.65,000,11.65
+1995-12-04,10.66,10.66,10.66,10.66,000,10.66
+1995-12-01,11.11,11.11,11.11,11.11,000,11.11
+1995-11-30,11.58,11.58,11.58,11.58,000,11.58
+1995-11-29,11.65,11.65,11.65,11.65,000,11.65
+1995-11-28,11.57,11.57,11.57,11.57,000,11.57
+1995-11-27,12.43,12.43,12.43,12.43,000,12.43
+1995-11-24,11.87,11.87,11.87,11.87,000,11.87
+1995-11-22,11.81,11.81,11.81,11.81,000,11.81
+1995-11-21,11.74,11.74,11.74,11.74,000,11.74
+1995-11-20,12.37,12.37,12.37,12.37,000,12.37
+1995-11-17,12.49,12.49,12.49,12.49,000,12.49
+1995-11-16,12.57,12.57,12.57,12.57,000,12.57
+1995-11-15,12.95,12.95,12.95,12.95,000,12.95
+1995-11-14,13.38,13.38,13.38,13.38,000,13.38
+1995-11-13,13.20,13.20,13.20,13.20,000,13.20
+1995-11-10,12.97,12.97,12.97,12.97,000,12.97
+1995-11-09,12.46,12.46,12.46,12.46,000,12.46
+1995-11-08,12.16,12.16,12.16,12.16,000,12.16
+1995-11-07,13.05,13.05,13.05,13.05,000,13.05
+1995-11-06,12.74,12.74,12.74,12.74,000,12.74
+1995-11-03,12.26,12.26,12.26,12.26,000,12.26
+1995-11-02,13.19,13.19,13.19,13.19,000,13.19
+1995-11-01,13.41,13.41,13.41,13.41,000,13.41
+1995-10-31,13.83,13.83,13.83,13.83,000,13.83
+1995-10-30,14.26,14.26,14.26,14.26,000,14.26
+1995-10-27,14.63,14.63,14.63,14.63,000,14.63
+1995-10-26,15.59,15.59,15.59,15.59,000,15.59
+1995-10-25,14.49,14.49,14.49,14.49,000,14.49
+1995-10-24,13.85,13.85,13.85,13.85,000,13.85
+1995-10-23,14.17,14.17,14.17,14.17,000,14.17
+1995-10-20,13.46,13.46,13.46,13.46,000,13.46
+1995-10-19,13.55,13.55,13.55,13.55,000,13.55
+1995-10-18,14.05,14.05,14.05,14.05,000,14.05
+1995-10-17,14.03,14.03,14.03,14.03,000,14.03
+1995-10-16,14.62,14.62,14.62,14.62,000,14.62
+1995-10-13,13.67,13.67,13.67,13.67,000,13.67
+1995-10-12,14.24,14.24,14.24,14.24,000,14.24
+1995-10-11,14.57,14.57,14.57,14.57,000,14.57
+1995-10-10,14.97,14.97,14.97,14.97,000,14.97
+1995-10-09,14.85,14.85,14.85,14.85,000,14.85
+1995-10-06,13.98,13.98,13.98,13.98,000,13.98
+1995-10-05,15.74,15.74,15.74,15.74,000,15.74
+1995-10-04,14.86,14.86,14.86,14.86,000,14.86
+1995-10-03,14.50,14.50,14.50,14.50,000,14.50
+1995-10-02,13.95,13.95,13.95,13.95,000,13.95
+1995-09-29,12.74,12.74,12.74,12.74,000,12.74
+1995-09-28,12.46,12.46,12.46,12.46,000,12.46
+1995-09-27,12.90,12.90,12.90,12.90,000,12.90
+1995-09-26,12.90,12.90,12.90,12.90,000,12.90
+1995-09-25,13.22,13.22,13.22,13.22,000,13.22
+1995-09-22,12.46,12.46,12.46,12.46,000,12.46
+1995-09-21,12.50,12.50,12.50,12.50,000,12.50
+1995-09-20,12.35,12.35,12.35,12.35,000,12.35
+1995-09-19,12.67,12.67,12.67,12.67,000,12.67
+1995-09-18,12.34,12.34,12.34,12.34,000,12.34
+1995-09-15,11.58,11.58,11.58,11.58,000,11.58
+1995-09-14,11.10,11.10,11.10,11.10,000,11.10
+1995-09-13,11.35,11.35,11.35,11.35,000,11.35
+1995-09-12,11.46,11.46,11.46,11.46,000,11.46
+1995-09-11,11.51,11.51,11.51,11.51,000,11.51
+1995-09-08,11.16,11.16,11.16,11.16,000,11.16
+1995-09-07,11.85,11.85,11.85,11.85,000,11.85
+1995-09-06,11.65,11.65,11.65,11.65,000,11.65
+1995-09-05,11.65,11.65,11.65,11.65,000,11.65
+1995-09-01,11.29,11.29,11.29,11.29,000,11.29
+1995-08-31,11.52,11.52,11.52,11.52,000,11.52
+1995-08-30,12.03,12.03,12.03,12.03,000,12.03
+1995-08-29,12.65,12.65,12.65,12.65,000,12.65
+1995-08-28,12.48,12.48,12.48,12.48,000,12.48
+1995-08-25,12.33,12.33,12.33,12.33,000,12.33
+1995-08-24,12.94,12.94,12.94,12.94,000,12.94
+1995-08-23,13.17,13.17,13.17,13.17,000,13.17
+1995-08-22,12.60,12.60,12.60,12.60,000,12.60
+1995-08-21,13.42,13.42,13.42,13.42,000,13.42
+1995-08-18,12.03,12.03,12.03,12.03,000,12.03
+1995-08-17,12.13,12.13,12.13,12.13,000,12.13
+1995-08-16,12.45,12.45,12.45,12.45,000,12.45
+1995-08-15,12.35,12.35,12.35,12.35,000,12.35
+1995-08-14,13.24,13.24,13.24,13.24,000,13.24
+1995-08-11,12.90,12.90,12.90,12.90,000,12.90
+1995-08-10,13.00,13.00,13.00,13.00,000,13.00
+1995-08-09,12.75,12.75,12.75,12.75,000,12.75
+1995-08-08,13.06,13.06,13.06,13.06,000,13.06
+1995-08-07,13.10,13.10,13.10,13.10,000,13.10
+1995-08-04,13.21,13.21,13.21,13.21,000,13.21
+1995-08-03,13.78,13.78,13.78,13.78,000,13.78
+1995-08-02,13.66,13.66,13.66,13.66,000,13.66
+1995-08-01,13.56,13.56,13.56,13.56,000,13.56
+1995-07-31,13.49,13.49,13.49,13.49,000,13.49
+1995-07-28,13.18,13.18,13.18,13.18,000,13.18
+1995-07-27,13.18,13.18,13.18,13.18,000,13.18
+1995-07-26,13.18,13.18,13.18,13.18,000,13.18
+1995-07-25,12.77,12.77,12.77,12.77,000,12.77
+1995-07-24,12.55,12.55,12.55,12.55,000,12.55
+1995-07-21,12.37,12.37,12.37,12.37,000,12.37
+1995-07-20,13.86,13.86,13.86,13.86,000,13.86
+1995-07-19,13.49,13.49,13.49,13.49,000,13.49
+1995-07-18,12.68,12.68,12.68,12.68,000,12.68
+1995-07-17,12.26,12.26,12.26,12.26,000,12.26
+1995-07-14,12.08,12.08,12.08,12.08,000,12.08
+1995-07-13,12.56,12.56,12.56,12.56,000,12.56
+1995-07-12,12.31,12.31,12.31,12.31,000,12.31
+1995-07-11,12.25,12.25,12.25,12.25,000,12.25
+1995-07-10,12.19,12.19,12.19,12.19,000,12.19
+1995-07-07,11.77,11.77,11.77,11.77,000,11.77
+1995-07-06,11.52,11.52,11.52,11.52,000,11.52
+1995-07-05,12.10,12.10,12.10,12.10,000,12.10
+1995-07-03,11.57,11.57,11.57,11.57,000,11.57
+1995-06-30,11.38,11.38,11.38,11.38,000,11.38
+1995-06-29,11.59,11.59,11.59,11.59,000,11.59
+1995-06-28,11.74,11.74,11.74,11.74,000,11.74
+1995-06-27,12.37,12.37,12.37,12.37,000,12.37
+1995-06-26,11.80,11.80,11.80,11.80,000,11.80
+1995-06-23,11.12,11.12,11.12,11.12,000,11.12
+1995-06-22,11.44,11.44,11.44,11.44,000,11.44
+1995-06-21,11.32,11.32,11.32,11.32,000,11.32
+1995-06-20,11.16,11.16,11.16,11.16,000,11.16
+1995-06-19,11.21,11.21,11.21,11.21,000,11.21
+1995-06-16,10.75,10.75,10.75,10.75,000,10.75
+1995-06-15,11.23,11.23,11.23,11.23,000,11.23
+1995-06-14,11.29,11.29,11.29,11.29,000,11.29
+1995-06-13,11.29,11.29,11.29,11.29,000,11.29
+1995-06-12,11.91,11.91,11.91,11.91,000,11.91
+1995-06-09,12.76,12.76,12.76,12.76,000,12.76
+1995-06-08,14.12,14.12,14.12,14.12,000,14.12
+1995-06-07,12.84,12.84,12.84,12.84,000,12.84
+1995-06-06,13.00,13.00,13.00,13.00,000,13.00
+1995-06-05,13.45,13.45,13.45,13.45,000,13.45
+1995-06-02,12.98,12.98,12.98,12.98,000,12.98
+1995-06-01,12.21,12.21,12.21,12.21,000,12.21
+1995-05-31,13.77,13.77,13.77,13.77,000,13.77
+1995-05-30,12.52,12.52,12.52,12.52,000,12.52
+1995-05-26,12.20,12.20,12.20,12.20,000,12.20
+1995-05-25,11.63,11.63,11.63,11.63,000,11.63
+1995-05-24,11.26,11.26,11.26,11.26,000,11.26
+1995-05-23,11.55,11.55,11.55,11.55,000,11.55
+1995-05-22,11.68,11.68,11.68,11.68,000,11.68
+1995-05-19,12.81,12.81,12.81,12.81,000,12.81
+1995-05-18,13.13,13.13,13.13,13.13,000,13.13
+1995-05-17,12.36,12.36,12.36,12.36,000,12.36
+1995-05-16,12.20,12.20,12.20,12.20,000,12.20
+1995-05-15,12.38,12.38,12.38,12.38,000,12.38
+1995-05-12,11.84,11.84,11.84,11.84,000,11.84
+1995-05-11,12.98,12.98,12.98,12.98,000,12.98
+1995-05-10,13.08,13.08,13.08,13.08,000,13.08
+1995-05-09,12.75,12.75,12.75,12.75,000,12.75
+1995-05-08,12.22,12.22,12.22,12.22,000,12.22
+1995-05-05,12.06,12.06,12.06,12.06,000,12.06
+1995-05-04,12.64,12.64,12.64,12.64,000,12.64
+1995-05-03,11.69,11.69,11.69,11.69,000,11.69
+1995-05-02,11.88,11.88,11.88,11.88,000,11.88
+1995-05-01,12.14,12.14,12.14,12.14,000,12.14
+1995-04-28,11.75,11.75,11.75,11.75,000,11.75
+1995-04-27,11.93,11.93,11.93,11.93,000,11.93
+1995-04-26,12.28,12.28,12.28,12.28,000,12.28
+1995-04-25,12.41,12.41,12.41,12.41,000,12.41
+1995-04-24,11.92,11.92,11.92,11.92,000,11.92
+1995-04-21,11.86,11.86,11.86,11.86,000,11.86
+1995-04-20,12.10,12.10,12.10,12.10,000,12.10
+1995-04-19,13.09,13.09,13.09,13.09,000,13.09
+1995-04-18,12.96,12.96,12.96,12.96,000,12.96
+1995-04-17,12.33,12.33,12.33,12.33,000,12.33
+1995-04-13,11.48,11.48,11.48,11.48,000,11.48
+1995-04-12,12.04,12.04,12.04,12.04,000,12.04
+1995-04-11,12.73,12.73,12.73,12.73,000,12.73
+1995-04-10,12.79,12.79,12.79,12.79,000,12.79
+1995-04-07,12.85,12.85,12.85,12.85,000,12.85
+1995-04-06,12.81,12.81,12.81,12.81,000,12.81
+1995-04-05,12.96,12.96,12.96,12.96,000,12.96
+1995-04-04,12.62,12.62,12.62,12.62,000,12.62
+1995-04-03,13.50,13.50,13.50,13.50,000,13.50
+1995-03-31,13.37,13.37,13.37,13.37,000,13.37
+1995-03-30,12.62,12.62,12.62,12.62,000,12.62
+1995-03-29,12.51,12.51,12.51,12.51,000,12.51
+1995-03-28,11.33,11.33,11.33,11.33,000,11.33
+1995-03-27,11.83,11.83,11.83,11.83,000,11.83
+1995-03-24,11.19,11.19,11.19,11.19,000,11.19
+1995-03-23,11.43,11.43,11.43,11.43,000,11.43
+1995-03-22,11.29,11.29,11.29,11.29,000,11.29
+1995-03-21,11.53,11.53,11.53,11.53,000,11.53
+1995-03-20,11.34,11.34,11.34,11.34,000,11.34
+1995-03-17,11.80,11.80,11.80,11.80,000,11.80
+1995-03-16,11.95,11.95,11.95,11.95,000,11.95
+1995-03-15,12.42,12.42,12.42,12.42,000,12.42
+1995-03-14,12.10,12.10,12.10,12.10,000,12.10
+1995-03-13,12.15,12.15,12.15,12.15,000,12.15
+1995-03-10,12.38,12.38,12.38,12.38,000,12.38
+1995-03-09,13.77,13.77,13.77,13.77,000,13.77
+1995-03-08,14.11,14.11,14.11,14.11,000,14.11
+1995-03-07,14.22,14.22,14.22,14.22,000,14.22
+1995-03-06,12.17,12.17,12.17,12.17,000,12.17
+1995-03-03,11.45,11.45,11.45,11.45,000,11.45
+1995-03-02,12.30,12.30,12.30,12.30,000,12.30
+1995-03-01,12.29,12.29,12.29,12.29,000,12.29
+1995-02-28,11.75,11.75,11.75,11.75,000,11.75
+1995-02-27,12.51,12.51,12.51,12.51,000,12.51
+1995-02-24,10.84,10.84,10.84,10.84,000,10.84
+1995-02-23,11.15,11.15,11.15,11.15,000,11.15
+1995-02-22,11.72,11.72,11.72,11.72,000,11.72
+1995-02-21,12.05,12.05,12.05,12.05,000,12.05
+1995-02-17,12.42,12.42,12.42,12.42,000,12.42
+1995-02-16,11.61,11.61,11.61,11.61,000,11.61
+1995-02-15,11.90,11.90,11.90,11.90,000,11.90
+1995-02-14,11.43,11.43,11.43,11.43,000,11.43
+1995-02-13,11.41,11.41,11.41,11.41,000,11.41
+1995-02-10,11.57,11.57,11.57,11.57,000,11.57
+1995-02-09,11.63,11.63,11.63,11.63,000,11.63
+1995-02-08,11.42,11.42,11.42,11.42,000,11.42
+1995-02-07,11.17,11.17,11.17,11.17,000,11.17
+1995-02-06,11.22,11.22,11.22,11.22,000,11.22
+1995-02-03,10.98,10.98,10.98,10.98,000,10.98
+1995-02-02,11.13,11.13,11.13,11.13,000,11.13
+1995-02-01,11.73,11.73,11.73,11.73,000,11.73
+1995-01-31,11.96,11.96,11.96,11.96,000,11.96
+1995-01-30,12.26,12.26,12.26,12.26,000,12.26
+1995-01-27,11.25,11.25,11.25,11.25,000,11.25
+1995-01-26,11.25,11.25,11.25,11.25,000,11.25
+1995-01-25,11.46,11.46,11.46,11.46,000,11.46
+1995-01-24,11.94,11.94,11.94,11.94,000,11.94
+1995-01-23,12.79,12.79,12.79,12.79,000,12.79
+1995-01-20,12.15,12.15,12.15,12.15,000,12.15
+1995-01-19,11.86,11.86,11.86,11.86,000,11.86
+1995-01-18,11.57,11.57,11.57,11.57,000,11.57
+1995-01-17,11.79,11.79,11.79,11.79,000,11.79
+1995-01-16,11.14,11.14,11.14,11.14,000,11.14
+1995-01-13,11.10,11.10,11.10,11.10,000,11.10
+1995-01-12,12.83,12.83,12.83,12.83,000,12.83
+1995-01-11,12.15,12.15,12.15,12.15,000,12.15
+1995-01-10,12.52,12.52,12.52,12.52,000,12.52
+1995-01-09,13.33,13.33,13.33,13.33,000,13.33
+1995-01-06,13.13,13.13,13.13,13.13,000,13.13
+1995-01-05,13.50,13.50,13.50,13.50,000,13.50
+1995-01-04,13.53,13.53,13.53,13.53,000,13.53
+1995-01-03,14.25,14.25,14.25,14.25,000,14.25
+1994-12-30,13.20,13.20,13.20,13.20,000,13.20
+1994-12-29,12.86,12.86,12.86,12.86,000,12.86
+1994-12-28,12.81,12.81,12.81,12.81,000,12.81
+1994-12-27,12.07,12.07,12.07,12.07,000,12.07
+1994-12-23,11.82,11.82,11.82,11.82,000,11.82
+1994-12-22,12.42,12.42,12.42,12.42,000,12.42
+1994-12-21,12.05,12.05,12.05,12.05,000,12.05
+1994-12-20,12.98,12.98,12.98,12.98,000,12.98
+1994-12-19,13.02,13.02,13.02,13.02,000,13.02
+1994-12-16,12.79,12.79,12.79,12.79,000,12.79
+1994-12-15,12.87,12.87,12.87,12.87,000,12.87
+1994-12-14,13.03,13.03,13.03,13.03,000,13.03
+1994-12-13,14.94,14.94,14.94,14.94,000,14.94
+1994-12-12,15.46,15.46,15.46,15.46,000,15.46
+1994-12-09,15.76,15.76,15.76,15.76,000,15.76
+1994-12-08,17.23,17.23,17.23,17.23,000,17.23
+1994-12-07,16.28,16.28,16.28,16.28,000,16.28
+1994-12-06,16.05,16.05,16.05,16.05,000,16.05
+1994-12-05,16.10,16.10,16.10,16.10,000,16.10
+1994-12-02,16.55,16.55,16.55,16.55,000,16.55
+1994-12-01,16.69,16.69,16.69,16.69,000,16.69
+1994-11-30,15.95,15.95,15.95,15.95,000,15.95
+1994-11-29,16.15,16.15,16.15,16.15,000,16.15
+1994-11-28,16.83,16.83,16.83,16.83,000,16.83
+1994-11-25,17.44,17.44,17.44,17.44,000,17.44
+1994-11-23,18.41,18.41,18.41,18.41,000,18.41
+1994-11-22,17.24,17.24,17.24,17.24,000,17.24
+1994-11-21,16.13,16.13,16.13,16.13,000,16.13
+1994-11-18,16.00,16.00,16.00,16.00,000,16.00
+1994-11-17,15.38,15.38,15.38,15.38,000,15.38
+1994-11-16,15.56,15.56,15.56,15.56,000,15.56
+1994-11-15,16.66,16.66,16.66,16.66,000,16.66
+1994-11-14,16.68,16.68,16.68,16.68,000,16.68
+1994-11-11,16.50,16.50,16.50,16.50,000,16.50
+1994-11-10,16.00,16.00,16.00,16.00,000,16.00
+1994-11-09,16.42,16.42,16.42,16.42,000,16.42
+1994-11-08,16.30,16.30,16.30,16.30,000,16.30
+1994-11-07,17.37,17.37,17.37,17.37,000,17.37
+1994-11-04,16.75,16.75,16.75,16.75,000,16.75
+1994-11-03,15.58,15.58,15.58,15.58,000,15.58
+1994-11-02,15.34,15.34,15.34,15.34,000,15.34
+1994-11-01,14.84,14.84,14.84,14.84,000,14.84
+1994-10-31,14.56,14.56,14.56,14.56,000,14.56
+1994-10-28,14.56,14.56,14.56,14.56,000,14.56
+1994-10-27,15.67,15.67,15.67,15.67,000,15.67
+1994-10-26,15.70,15.70,15.70,15.70,000,15.70
+1994-10-25,16.13,16.13,16.13,16.13,000,16.13
+1994-10-24,16.97,16.97,16.97,16.97,000,16.97
+1994-10-21,15.91,15.91,15.91,15.91,000,15.91
+1994-10-20,15.99,15.99,15.99,15.99,000,15.99
+1994-10-19,15.13,15.13,15.13,15.13,000,15.13
+1994-10-18,14.59,14.59,14.59,14.59,000,14.59
+1994-10-17,14.76,14.76,14.76,14.76,000,14.76
+1994-10-14,13.71,13.71,13.71,13.71,000,13.71
+1994-10-13,14.90,14.90,14.90,14.90,000,14.90
+1994-10-12,14.51,14.51,14.51,14.51,000,14.51
+1994-10-11,13.55,13.55,13.55,13.55,000,13.55
+1994-10-10,14.72,14.72,14.72,14.72,000,14.72
+1994-10-07,14.92,14.92,14.92,14.92,000,14.92
+1994-10-06,16.24,16.24,16.24,16.24,000,16.24
+1994-10-05,15.92,15.92,15.92,15.92,000,15.92
+1994-10-04,16.66,16.66,16.66,16.66,000,16.66
+1994-10-03,15.44,15.44,15.44,15.44,000,15.44
+1994-09-30,14.28,14.28,14.28,14.28,000,14.28
+1994-09-29,13.97,13.97,13.97,13.97,000,13.97
+1994-09-28,13.25,13.25,13.25,13.25,000,13.25
+1994-09-27,14.13,14.13,14.13,14.13,000,14.13
+1994-09-26,14.56,14.56,14.56,14.56,000,14.56
+1994-09-23,14.53,14.53,14.53,14.53,000,14.53
+1994-09-22,13.89,13.89,13.89,13.89,000,13.89
+1994-09-21,14.49,14.49,14.49,14.49,000,14.49
+1994-09-20,14.45,14.45,14.45,14.45,000,14.45
+1994-09-19,13.06,13.06,13.06,13.06,000,13.06
+1994-09-16,13.54,13.54,13.54,13.54,000,13.54
+1994-09-15,12.42,12.42,12.42,12.42,000,12.42
+1994-09-14,12.84,12.84,12.84,12.84,000,12.84
+1994-09-13,13.77,13.77,13.77,13.77,000,13.77
+1994-09-12,14.49,14.49,14.49,14.49,000,14.49
+1994-09-09,13.60,13.60,13.60,13.60,000,13.60
+1994-09-08,11.86,11.86,11.86,11.86,000,11.86
+1994-09-07,11.81,11.81,11.81,11.81,000,11.81
+1994-09-06,11.69,11.69,11.69,11.69,000,11.69
+1994-09-02,11.40,11.40,11.40,11.40,000,11.40
+1994-09-01,11.86,11.86,11.86,11.86,000,11.86
+1994-08-31,11.97,11.97,11.97,11.97,000,11.97
+1994-08-30,11.86,11.86,11.86,11.86,000,11.86
+1994-08-29,11.82,11.82,11.82,11.82,000,11.82
+1994-08-26,12.69,12.69,12.69,12.69,000,12.69
+1994-08-25,12.02,12.02,12.02,12.02,000,12.02
+1994-08-24,11.57,11.57,11.57,11.57,000,11.57
+1994-08-23,11.75,11.75,11.75,11.75,000,11.75
+1994-08-22,12.62,12.62,12.62,12.62,000,12.62
+1994-08-19,12.83,12.83,12.83,12.83,000,12.83
+1994-08-18,12.07,12.07,12.07,12.07,000,12.07
+1994-08-17,11.54,11.54,11.54,11.54,000,11.54
+1994-08-16,11.39,11.39,11.39,11.39,000,11.39
+1994-08-15,12.06,12.06,12.06,12.06,000,12.06
+1994-08-12,11.09,11.09,11.09,11.09,000,11.09
+1994-08-11,12.13,12.13,12.13,12.13,000,12.13
+1994-08-10,11.91,11.91,11.91,11.91,000,11.91
+1994-08-09,12.54,12.54,12.54,12.54,000,12.54
+1994-08-08,12.41,12.41,12.41,12.41,000,12.41
+1994-08-05,12.34,12.34,12.34,12.34,000,12.34
+1994-08-04,12.18,12.18,12.18,12.18,000,12.18
+1994-08-03,11.35,11.35,11.35,11.35,000,11.35
+1994-08-02,11.27,11.27,11.27,11.27,000,11.27
+1994-08-01,11.17,11.17,11.17,11.17,000,11.17
+1994-07-29,11.13,11.13,11.13,11.13,000,11.13
+1994-07-28,12.03,12.03,12.03,12.03,000,12.03
+1994-07-27,11.93,11.93,11.93,11.93,000,11.93
+1994-07-26,11.66,11.66,11.66,11.66,000,11.66
+1994-07-25,11.46,11.46,11.46,11.46,000,11.46
+1994-07-22,11.22,11.22,11.22,11.22,000,11.22
+1994-07-21,11.65,11.65,11.65,11.65,000,11.65
+1994-07-20,11.70,11.70,11.70,11.70,000,11.70
+1994-07-19,11.65,11.65,11.65,11.65,000,11.65
+1994-07-18,11.44,11.44,11.44,11.44,000,11.44
+1994-07-15,11.28,11.28,11.28,11.28,000,11.28
+1994-07-14,11.64,11.64,11.64,11.64,000,11.64
+1994-07-13,12.42,12.42,12.42,12.42,000,12.42
+1994-07-12,13.40,13.40,13.40,13.40,000,13.40
+1994-07-11,13.83,13.83,13.83,13.83,000,13.83
+1994-07-08,13.26,13.26,13.26,13.26,000,13.26
+1994-07-07,14.01,14.01,14.01,14.01,000,14.01
+1994-07-06,14.70,14.70,14.70,14.70,000,14.70
+1994-07-05,14.92,14.92,14.92,14.92,000,14.92
+1994-07-01,14.36,14.36,14.36,14.36,000,14.36
+1994-06-30,14.97,14.97,14.97,14.97,000,14.97
+1994-06-29,14.42,14.42,14.42,14.42,000,14.42
+1994-06-28,15.04,15.04,15.04,15.04,000,15.04
+1994-06-27,15.53,15.53,15.53,15.53,000,15.53
+1994-06-24,16.72,16.72,16.72,16.72,000,16.72
+1994-06-23,14.12,14.12,14.12,14.12,000,14.12
+1994-06-22,14.02,14.02,14.02,14.02,000,14.02
+1994-06-21,14.70,14.70,14.70,14.70,000,14.70
+1994-06-20,13.96,13.96,13.96,13.96,000,13.96
+1994-06-17,12.31,12.31,12.31,12.31,000,12.31
+1994-06-16,11.22,11.22,11.22,11.22,000,11.22
+1994-06-15,11.52,11.52,11.52,11.52,000,11.52
+1994-06-14,11.60,11.60,11.60,11.60,000,11.60
+1994-06-13,11.92,11.92,11.92,11.92,000,11.92
+1994-06-10,12.69,12.69,12.69,12.69,000,12.69
+1994-06-09,13.21,13.21,13.21,13.21,000,13.21
+1994-06-08,13.32,13.32,13.32,13.32,000,13.32
+1994-06-07,13.05,13.05,13.05,13.05,000,13.05
+1994-06-06,13.03,13.03,13.03,13.03,000,13.03
+1994-06-03,12.44,12.44,12.44,12.44,000,12.44
+1994-06-02,12.73,12.73,12.73,12.73,000,12.73
+1994-06-01,12.72,12.72,12.72,12.72,000,12.72
+1994-05-31,13.03,13.03,13.03,13.03,000,13.03
+1994-05-27,12.49,12.49,12.49,12.49,000,12.49
+1994-05-26,12.50,12.50,12.50,12.50,000,12.50
+1994-05-25,12.43,12.43,12.43,12.43,000,12.43
+1994-05-24,12.73,12.73,12.73,12.73,000,12.73
+1994-05-23,13.49,13.49,13.49,13.49,000,13.49
+1994-05-20,13.05,13.05,13.05,13.05,000,13.05
+1994-05-19,11.94,11.94,11.94,11.94,000,11.94
+1994-05-18,12.55,12.55,12.55,12.55,000,12.55
+1994-05-17,14.08,14.08,14.08,14.08,000,14.08
+1994-05-16,14.67,14.67,14.67,14.67,000,14.67
+1994-05-13,14.54,14.54,14.54,14.54,000,14.54
+1994-05-12,15.46,15.46,15.46,15.46,000,15.46
+1994-05-11,15.55,15.55,15.55,15.55,000,15.55
+1994-05-10,15.52,15.52,15.52,15.52,000,15.52
+1994-05-09,16.16,16.16,16.16,16.16,000,16.16
+1994-05-06,15.08,15.08,15.08,15.08,000,15.08
+1994-05-05,14.56,14.56,14.56,14.56,000,14.56
+1994-05-04,14.29,14.29,14.29,14.29,000,14.29
+1994-05-03,13.81,13.81,13.81,13.81,000,13.81
+1994-05-02,14.11,14.11,14.11,14.11,000,14.11
+1994-04-29,13.77,13.77,13.77,13.77,000,13.77
+1994-04-28,14.51,14.51,14.51,14.51,000,14.51
+1994-04-26,13.80,13.80,13.80,13.80,000,13.80
+1994-04-25,14.26,14.26,14.26,14.26,000,14.26
+1994-04-22,14.94,14.94,14.94,14.94,000,14.94
+1994-04-21,14.93,14.93,14.93,14.93,000,14.93
+1994-04-20,17.01,17.01,17.01,17.01,000,17.01
+1994-04-19,16.93,16.93,16.93,16.93,000,16.93
+1994-04-18,17.22,17.22,17.22,17.22,000,17.22
+1994-04-15,15.98,15.98,15.98,15.98,000,15.98
+1994-04-14,16.27,16.27,16.27,16.27,000,16.27
+1994-04-13,17.02,17.02,17.02,17.02,000,17.02
+1994-04-12,16.42,16.42,16.42,16.42,000,16.42
+1994-04-11,16.61,16.61,16.61,16.61,000,16.61
+1994-04-08,16.92,16.92,16.92,16.92,000,16.92
+1994-04-07,16.98,16.98,16.98,16.98,000,16.98
+1994-04-06,17.38,17.38,17.38,17.38,000,17.38
+1994-04-05,18.13,18.13,18.13,18.13,000,18.13
+1994-04-04,23.87,23.87,23.87,23.87,000,23.87
+1994-03-31,20.45,20.45,20.45,20.45,000,20.45
+1994-03-30,18.59,18.59,18.59,18.59,000,18.59
+1994-03-29,16.49,16.49,16.49,16.49,000,16.49
+1994-03-28,14.90,14.90,14.90,14.90,000,14.90
+1994-03-25,13.67,13.67,13.67,13.67,000,13.67
+1994-03-24,13.43,13.43,13.43,13.43,000,13.43
+1994-03-23,12.31,12.31,12.31,12.31,000,12.31
+1994-03-22,13.39,13.39,13.39,13.39,000,13.39
+1994-03-21,14.34,14.34,14.34,14.34,000,14.34
+1994-03-18,13.32,13.32,13.32,13.32,000,13.32
+1994-03-17,12.76,12.76,12.76,12.76,000,12.76
+1994-03-16,14.16,14.16,14.16,14.16,000,14.16
+1994-03-15,14.78,14.78,14.78,14.78,000,14.78
+1994-03-14,16.61,16.61,16.61,16.61,000,16.61
+1994-03-11,14.87,14.87,14.87,14.87,000,14.87
+1994-03-10,16.55,16.55,16.55,16.55,000,16.55
+1994-03-09,14.41,14.41,14.41,14.41,000,14.41
+1994-03-08,16.23,16.23,16.23,16.23,000,16.23
+1994-03-07,14.26,14.26,14.26,14.26,000,14.26
+1994-03-04,16.00,16.00,16.00,16.00,000,16.00
+1994-03-03,16.36,16.36,16.36,16.36,000,16.36
+1994-03-02,16.08,16.08,16.08,16.08,000,16.08
+1994-03-01,15.83,15.83,15.83,15.83,000,15.83
+1994-02-28,14.87,14.87,14.87,14.87,000,14.87
+1994-02-25,15.28,15.28,15.28,15.28,000,15.28
+1994-02-24,16.34,16.34,16.34,16.34,000,16.34
+1994-02-23,13.91,13.91,13.91,13.91,000,13.91
+1994-02-22,13.52,13.52,13.52,13.52,000,13.52
+1994-02-18,14.70,14.70,14.70,14.70,000,14.70
+1994-02-17,13.79,13.79,13.79,13.79,000,13.79
+1994-02-16,13.42,13.42,13.42,13.42,000,13.42
+1994-02-15,13.14,13.14,13.14,13.14,000,13.14
+1994-02-14,14.64,14.64,14.64,14.64,000,14.64
+1994-02-11,14.46,14.46,14.46,14.46,000,14.46
+1994-02-10,14.24,14.24,14.24,14.24,000,14.24
+1994-02-09,12.41,12.41,12.41,12.41,000,12.41
+1994-02-08,13.66,13.66,13.66,13.66,000,13.66
+1994-02-07,13.96,13.96,13.96,13.96,000,13.96
+1994-02-04,15.25,15.25,15.25,15.25,000,15.25
+1994-02-03,10.75,10.75,10.75,10.75,000,10.75
+1994-02-02,10.61,10.61,10.61,10.61,000,10.61
+1994-02-01,10.65,10.65,10.65,10.65,000,10.65
+1994-01-31,10.63,10.63,10.63,10.63,000,10.63
+1994-01-28,9.94,9.94,9.94,9.94,000,9.94
+1994-01-27,10.30,10.30,10.30,10.30,000,10.30
+1994-01-26,11.17,11.17,11.17,11.17,000,11.17
+1994-01-25,11.38,11.38,11.38,11.38,000,11.38
+1994-01-24,11.60,11.60,11.60,11.60,000,11.60
+1994-01-21,11.49,11.49,11.49,11.49,000,11.49
+1994-01-20,11.16,11.16,11.16,11.16,000,11.16
+1994-01-19,11.32,11.32,11.32,11.32,000,11.32
+1994-01-18,11.63,11.63,11.63,11.63,000,11.63
+1994-01-17,11.35,11.35,11.35,11.35,000,11.35
+1994-01-14,11.42,11.42,11.42,11.42,000,11.42
+1994-01-13,12.08,12.08,12.08,12.08,000,12.08
+1994-01-12,11.65,11.65,11.65,11.65,000,11.65
+1994-01-11,11.29,11.29,11.29,11.29,000,11.29
+1994-01-10,10.74,10.74,10.74,10.74,000,10.74
+1994-01-07,10.96,10.96,10.96,10.96,000,10.96
+1994-01-06,11.27,11.27,11.27,11.27,000,11.27
+1994-01-05,10.94,10.94,10.94,10.94,000,10.94
+1994-01-04,11.91,11.91,11.91,11.91,000,11.91
+1994-01-03,12.57,12.57,12.57,12.57,000,12.57
+1993-12-31,11.66,11.66,11.66,11.66,000,11.66
+1993-12-30,10.69,10.69,10.69,10.69,000,10.69
+1993-12-29,10.46,10.46,10.46,10.46,000,10.46
+1993-12-28,9.82,9.82,9.82,9.82,000,9.82
+1993-12-27,9.70,9.70,9.70,9.70,000,9.70
+1993-12-23,9.48,9.48,9.48,9.48,000,9.48
+1993-12-22,9.31,9.31,9.31,9.31,000,9.31
+1993-12-21,10.08,10.08,10.08,10.08,000,10.08
+1993-12-20,10.75,10.75,10.75,10.75,000,10.75
+1993-12-17,11.08,11.08,11.08,11.08,000,11.08
+1993-12-16,10.90,10.90,10.90,10.90,000,10.90
+1993-12-15,11.03,11.03,11.03,11.03,000,11.03
+1993-12-14,11.13,11.13,11.13,11.13,000,11.13
+1993-12-13,10.98,10.98,10.98,10.98,000,10.98
+1993-12-10,12.60,12.60,12.60,12.60,000,12.60
+1993-12-09,12.43,12.43,12.43,12.43,000,12.43
+1993-12-08,12.46,12.46,12.46,12.46,000,12.46
+1993-12-07,12.41,12.41,12.41,12.41,000,12.41
+1993-12-06,12.84,12.84,12.84,12.84,000,12.84
+1993-12-03,12.69,12.69,12.69,12.69,000,12.69
+1993-12-02,13.51,13.51,13.51,13.51,000,13.51
+1993-12-01,13.83,13.83,13.83,13.83,000,13.83
+1993-11-30,13.76,13.76,13.76,13.76,000,13.76
+1993-11-29,14.12,14.12,14.12,14.12,000,14.12
+1993-11-26,13.77,13.77,13.77,13.77,000,13.77
+1993-11-24,13.51,13.51,13.51,13.51,000,13.51
+1993-11-23,14.27,14.27,14.27,14.27,000,14.27
+1993-11-22,15.90,15.90,15.90,15.90,000,15.90
+1993-11-19,15.03,15.03,15.03,15.03,000,15.03
+1993-11-18,14.65,14.65,14.65,14.65,000,14.65
+1993-11-17,15.57,15.57,15.57,15.57,000,15.57
+1993-11-16,15.11,15.11,15.11,15.11,000,15.11
+1993-11-15,14.46,14.46,14.46,14.46,000,14.46
+1993-11-12,13.33,13.33,13.33,13.33,000,13.33
+1993-11-11,13.88,13.88,13.88,13.88,000,13.88
+1993-11-10,13.72,13.72,13.72,13.72,000,13.72
+1993-11-09,13.94,13.94,13.94,13.94,000,13.94
+1993-11-08,14.31,14.31,14.31,14.31,000,14.31
+1993-11-05,14.97,14.97,14.97,14.97,000,14.97
+1993-11-04,14.68,14.68,14.68,14.68,000,14.68
+1993-11-03,13.26,13.26,13.26,13.26,000,13.26
+1993-11-02,11.74,11.74,11.74,11.74,000,11.74
+1993-11-01,11.78,11.78,11.78,11.78,000,11.78
+1993-10-29,11.46,11.46,11.46,11.46,000,11.46
+1993-10-28,11.88,11.88,11.88,11.88,000,11.88
+1993-10-27,12.01,12.01,12.01,12.01,000,12.01
+1993-10-26,11.83,11.83,11.83,11.83,000,11.83
+1993-10-25,11.83,11.83,11.83,11.83,000,11.83
+1993-10-22,11.48,11.48,11.48,11.48,000,11.48
+1993-10-21,11.20,11.20,11.20,11.20,000,11.20
+1993-10-20,11.32,11.32,11.32,11.32,000,11.32
+1993-10-19,11.61,11.61,11.61,11.61,000,11.61
+1993-10-18,11.33,11.33,11.33,11.33,000,11.33
+1993-10-15,10.87,10.87,10.87,10.87,000,10.87
+1993-10-14,11.00,11.00,11.00,11.00,000,11.00
+1993-10-13,11.38,11.38,11.38,11.38,000,11.38
+1993-10-12,12.41,12.41,12.41,12.41,000,12.41
+1993-10-11,12.26,12.26,12.26,12.26,000,12.26
+1993-10-08,12.04,12.04,12.04,12.04,000,12.04
+1993-10-07,13.14,13.14,13.14,13.14,000,13.14
+1993-10-06,12.68,12.68,12.68,12.68,000,12.68
+1993-10-05,12.97,12.97,12.97,12.97,000,12.97
+1993-10-04,12.85,12.85,12.85,12.85,000,12.85
+1993-10-01,11.83,11.83,11.83,11.83,000,11.83
+1993-09-30,12.99,12.99,12.99,12.99,000,12.99
+1993-09-29,12.63,12.63,12.63,12.63,000,12.63
+1993-09-28,12.19,12.19,12.19,12.19,000,12.19
+1993-09-27,12.49,12.49,12.49,12.49,000,12.49
+1993-09-24,12.47,12.47,12.47,12.47,000,12.47
+1993-09-23,13.36,13.36,13.36,13.36,000,13.36
+1993-09-22,13.75,13.75,13.75,13.75,000,13.75
+1993-09-21,17.30,17.30,17.30,17.30,000,17.30
+1993-09-20,14.60,14.60,14.60,14.60,000,14.60
+1993-09-17,13.39,13.39,13.39,13.39,000,13.39
+1993-09-16,13.36,13.36,13.36,13.36,000,13.36
+1993-09-15,12.70,12.70,12.70,12.70,000,12.70
+1993-09-14,13.15,13.15,13.15,13.15,000,13.15
+1993-09-13,12.16,12.16,12.16,12.16,000,12.16
+1993-09-10,11.70,11.70,11.70,11.70,000,11.70
+1993-09-09,12.67,12.67,12.67,12.67,000,12.67
+1993-09-08,13.24,13.24,13.24,13.24,000,13.24
+1993-09-07,12.90,12.90,12.90,12.90,000,12.90
+1993-09-03,11.16,11.16,11.16,11.16,000,11.16
+1993-09-02,11.87,11.87,11.87,11.87,000,11.87
+1993-09-01,11.48,11.48,11.48,11.48,000,11.48
+1993-08-31,11.85,11.85,11.85,11.85,000,11.85
+1993-08-30,11.74,11.74,11.74,11.74,000,11.74
+1993-08-27,11.91,11.91,11.91,11.91,000,11.91
+1993-08-26,12.14,12.14,12.14,12.14,000,12.14
+1993-08-25,12.10,12.10,12.10,12.10,000,12.10
+1993-08-24,11.80,11.80,11.80,11.80,000,11.80
+1993-08-23,12.15,12.15,12.15,12.15,000,12.15
+1993-08-20,11.62,11.62,11.62,11.62,000,11.62
+1993-08-19,11.63,11.63,11.63,11.63,000,11.63
+1993-08-18,11.52,11.52,11.52,11.52,000,11.52
+1993-08-17,11.59,11.59,11.59,11.59,000,11.59
+1993-08-16,11.69,11.69,11.69,11.69,000,11.69
+1993-08-13,12.19,12.19,12.19,12.19,000,12.19
+1993-08-12,12.38,12.38,12.38,12.38,000,12.38
+1993-08-11,12.07,12.07,12.07,12.07,000,12.07
+1993-08-10,12.31,12.31,12.31,12.31,000,12.31
+1993-08-09,12.39,12.39,12.39,12.39,000,12.39
+1993-08-06,12.33,12.33,12.33,12.33,000,12.33
+1993-08-05,12.03,12.03,12.03,12.03,000,12.03
+1993-08-04,11.71,11.71,11.71,11.71,000,11.71
+1993-08-03,11.49,11.49,11.49,11.49,000,11.49
+1993-08-02,11.47,11.47,11.47,11.47,000,11.47
+1993-07-30,11.73,11.73,11.73,11.73,000,11.73
+1993-07-29,11.25,11.25,11.25,11.25,000,11.25
+1993-07-28,11.37,11.37,11.37,11.37,000,11.37
+1993-07-27,11.34,11.34,11.34,11.34,000,11.34
+1993-07-26,11.32,11.32,11.32,11.32,000,11.32
+1993-07-23,11.32,11.32,11.32,11.32,000,11.32
+1993-07-22,11.69,11.69,11.69,11.69,000,11.69
+1993-07-21,11.97,11.97,11.97,11.97,000,11.97
+1993-07-20,11.05,11.05,11.05,11.05,000,11.05
+1993-07-19,11.46,11.46,11.46,11.46,000,11.46
+1993-07-16,10.96,10.96,10.96,10.96,000,10.96
+1993-07-15,10.60,10.60,10.60,10.60,000,10.60
+1993-07-14,10.78,10.78,10.78,10.78,000,10.78
+1993-07-13,11.02,11.02,11.02,11.02,000,11.02
+1993-07-12,10.85,10.85,10.85,10.85,000,10.85
+1993-07-09,10.80,10.80,10.80,10.80,000,10.80
+1993-07-08,12.24,12.24,12.24,12.24,000,12.24
+1993-07-07,13.05,13.05,13.05,13.05,000,13.05
+1993-07-06,13.87,13.87,13.87,13.87,000,13.87
+1993-07-02,11.33,11.33,11.33,11.33,000,11.33
+1993-07-01,11.51,11.51,11.51,11.51,000,11.51
+1993-06-30,11.26,11.26,11.26,11.26,000,11.26
+1993-06-29,11.29,11.29,11.29,11.29,000,11.29
+1993-06-28,11.11,11.11,11.11,11.11,000,11.11
+1993-06-25,11.25,11.25,11.25,11.25,000,11.25
+1993-06-24,12.25,12.25,12.25,12.25,000,12.25
+1993-06-23,12.04,12.04,12.04,12.04,000,12.04
+1993-06-22,11.65,11.65,11.65,11.65,000,11.65
+1993-06-21,12.25,12.25,12.25,12.25,000,12.25
+1993-06-18,12.24,12.24,12.24,12.24,000,12.24
+1993-06-17,11.66,11.66,11.66,11.66,000,11.66
+1993-06-16,11.87,11.87,11.87,11.87,000,11.87
+1993-06-15,11.99,11.99,11.99,11.99,000,11.99
+1993-06-14,12.33,12.33,12.33,12.33,000,12.33
+1993-06-11,12.71,12.71,12.71,12.71,000,12.71
+1993-06-10,13.31,13.31,13.31,13.31,000,13.31
+1993-06-09,13.96,13.96,13.96,13.96,000,13.96
+1993-06-08,14.74,14.74,14.74,14.74,000,14.74
+1993-06-07,14.07,14.07,14.07,14.07,000,14.07
+1993-06-04,12.86,12.86,12.86,12.86,000,12.86
+1993-06-03,13.54,13.54,13.54,13.54,000,13.54
+1993-06-02,13.48,13.48,13.48,13.48,000,13.48
+1993-06-01,13.67,13.67,13.67,13.67,000,13.67
+1993-05-28,13.47,13.47,13.47,13.47,000,13.47
+1993-05-27,13.10,13.10,13.10,13.10,000,13.10
+1993-05-26,12.88,12.88,12.88,12.88,000,12.88
+1993-05-25,14.04,14.04,14.04,14.04,000,14.04
+1993-05-24,14.10,14.10,14.10,14.10,000,14.10
+1993-05-21,14.51,14.51,14.51,14.51,000,14.51
+1993-05-20,13.98,13.98,13.98,13.98,000,13.98
+1993-05-19,14.29,14.29,14.29,14.29,000,14.29
+1993-05-18,14.19,14.19,14.19,14.19,000,14.19
+1993-05-17,14.13,14.13,14.13,14.13,000,14.13
+1993-05-14,14.39,14.39,14.39,14.39,000,14.39
+1993-05-13,14.76,14.76,14.76,14.76,000,14.76
+1993-05-12,13.56,13.56,13.56,13.56,000,13.56
+1993-05-11,13.35,13.35,13.35,13.35,000,13.35
+1993-05-10,13.72,13.72,13.72,13.72,000,13.72
+1993-05-07,13.01,13.01,13.01,13.01,000,13.01
+1993-05-06,13.22,13.22,13.22,13.22,000,13.22
+1993-05-05,12.38,12.38,12.38,12.38,000,12.38
+1993-05-04,12.14,12.14,12.14,12.14,000,12.14
+1993-05-03,12.90,12.90,12.90,12.90,000,12.90
+1993-04-30,12.42,12.42,12.42,12.42,000,12.42
+1993-04-29,12.80,12.80,12.80,12.80,000,12.80
+1993-04-28,13.12,13.12,13.12,13.12,000,13.12
+1993-04-27,13.93,13.93,13.93,13.93,000,13.93
+1993-04-26,15.25,15.25,15.25,15.25,000,15.25
+1993-04-23,13.36,13.36,13.36,13.36,000,13.36
+1993-04-22,12.68,12.68,12.68,12.68,000,12.68
+1993-04-21,12.11,12.11,12.11,12.11,000,12.11
+1993-04-20,11.94,11.94,11.94,11.94,000,11.94
+1993-04-19,12.06,12.06,12.06,12.06,000,12.06
+1993-04-16,11.29,11.29,11.29,11.29,000,11.29
+1993-04-15,10.96,10.96,10.96,10.96,000,10.96
+1993-04-14,11.76,11.76,11.76,11.76,000,11.76
+1993-04-13,11.70,11.70,11.70,11.70,000,11.70
+1993-04-12,11.93,11.93,11.93,11.93,000,11.93
+1993-04-08,12.83,12.83,12.83,12.83,000,12.83
+1993-04-07,13.64,13.64,13.64,13.64,000,13.64
+1993-04-06,14.24,14.24,14.24,14.24,000,14.24
+1993-04-05,14.12,14.12,14.12,14.12,000,14.12
+1993-04-02,14.50,14.50,14.50,14.50,000,14.50
+1993-04-01,13.02,13.02,13.02,13.02,000,13.02
+1993-03-31,12.53,12.53,12.53,12.53,000,12.53
+1993-03-30,12.23,12.23,12.23,12.23,000,12.23
+1993-03-29,12.63,12.63,12.63,12.63,000,12.63
+1993-03-26,12.21,12.21,12.21,12.21,000,12.21
+1993-03-25,12.08,12.08,12.08,12.08,000,12.08
+1993-03-24,12.44,12.44,12.44,12.44,000,12.44
+1993-03-23,13.02,13.02,13.02,13.02,000,13.02
+1993-03-22,13.66,13.66,13.66,13.66,000,13.66
+1993-03-19,13.23,13.23,13.23,13.23,000,13.23
+1993-03-18,14.17,14.17,14.17,14.17,000,14.17
+1993-03-17,14.53,14.53,14.53,14.53,000,14.53
+1993-03-16,14.51,14.51,14.51,14.51,000,14.51
+1993-03-15,14.74,14.74,14.74,14.74,000,14.74
+1993-03-12,15.66,15.66,15.66,15.66,000,15.66
+1993-03-11,14.26,14.26,14.26,14.26,000,14.26
+1993-03-10,13.91,13.91,13.91,13.91,000,13.91
+1993-03-09,14.17,14.17,14.17,14.17,000,14.17
+1993-03-08,16.22,16.22,16.22,16.22,000,16.22
+1993-03-05,14.08,14.08,14.08,14.08,000,14.08
+1993-03-04,13.44,13.44,13.44,13.44,000,13.44
+1993-03-03,13.13,13.13,13.13,13.13,000,13.13
+1993-03-02,12.49,12.49,12.49,12.49,000,12.49
+1993-03-01,13.60,13.60,13.60,13.60,000,13.60
+1993-02-26,13.16,13.16,13.16,13.16,000,13.16
+1993-02-25,13.76,13.76,13.76,13.76,000,13.76
+1993-02-24,14.72,14.72,14.72,14.72,000,14.72
+1993-02-23,15.04,15.04,15.04,15.04,000,15.04
+1993-02-22,14.70,14.70,14.70,14.70,000,14.70
+1993-02-19,15.02,15.02,15.02,15.02,000,15.02
+1993-02-18,15.56,15.56,15.56,15.56,000,15.56
+1993-02-17,15.90,15.90,15.90,15.90,000,15.90
+1993-02-16,15.76,15.76,15.76,15.76,000,15.76
+1993-02-12,12.38,12.38,12.38,12.38,000,12.38
+1993-02-11,12.69,12.69,12.69,12.69,000,12.69
+1993-02-10,13.43,13.43,13.43,13.43,000,13.43
+1993-02-09,13.48,13.48,13.48,13.48,000,13.48
+1993-02-08,13.22,13.22,13.22,13.22,000,13.22
+1993-02-05,12.90,12.90,12.90,12.90,000,12.90
+1993-02-04,12.29,12.29,12.29,12.29,000,12.29
+1993-02-03,12.12,12.12,12.12,12.12,000,12.12
+1993-02-02,12.25,12.25,12.25,12.25,000,12.25
+1993-02-01,12.33,12.33,12.33,12.33,000,12.33
+1993-01-29,12.42,12.42,12.42,12.42,000,12.42
+1993-01-28,12.04,12.04,12.04,12.04,000,12.04
+1993-01-27,12.01,12.01,12.01,12.01,000,12.01
+1993-01-26,11.45,11.45,11.45,11.45,000,11.45
+1993-01-25,11.38,11.38,11.38,11.38,000,11.38
+1993-01-22,11.30,11.30,11.30,11.30,000,11.30
+1993-01-21,11.69,11.69,11.69,11.69,000,11.69
+1993-01-20,12.15,12.15,12.15,12.15,000,12.15
+1993-01-19,12.06,12.06,12.06,12.06,000,12.06
+1993-01-18,11.49,11.49,11.49,11.49,000,11.49
+1993-01-15,11.57,11.57,11.57,11.57,000,11.57
+1993-01-14,11.99,11.99,11.99,11.99,000,11.99
+1993-01-13,12.42,12.42,12.42,12.42,000,12.42
+1993-01-12,12.78,12.78,12.78,12.78,000,12.78
+1993-01-11,12.86,12.86,12.86,12.86,000,12.86
+1993-01-08,13.77,13.77,13.77,13.77,000,13.77
+1993-01-07,14.72,14.72,14.72,14.72,000,14.72
+1993-01-06,13.37,13.37,13.37,13.37,000,13.37
+1993-01-05,13.35,13.35,13.35,13.35,000,13.35
+1993-01-04,13.36,13.36,13.36,13.36,000,13.36
+1992-12-31,12.57,12.57,12.57,12.57,000,12.57
+1992-12-30,12.60,12.60,12.60,12.60,000,12.60
+1992-12-29,12.29,12.29,12.29,12.29,000,12.29
+1992-12-28,12.22,12.22,12.22,12.22,000,12.22
+1992-12-24,11.57,11.57,11.57,11.57,000,11.57
+1992-12-23,11.51,11.51,11.51,11.51,000,11.51
+1992-12-22,11.75,11.75,11.75,11.75,000,11.75
+1992-12-21,11.65,11.65,11.65,11.65,000,11.65
+1992-12-18,11.66,11.66,11.66,11.66,000,11.66
+1992-12-17,12.14,12.14,12.14,12.14,000,12.14
+1992-12-16,12.58,12.58,12.58,12.58,000,12.58
+1992-12-15,12.41,12.41,12.41,12.41,000,12.41
+1992-12-14,12.66,12.66,12.66,12.66,000,12.66
+1992-12-11,12.34,12.34,12.34,12.34,000,12.34
+1992-12-10,12.75,12.75,12.75,12.75,000,12.75
+1992-12-09,12.58,12.58,12.58,12.58,000,12.58
+1992-12-08,11.73,11.73,11.73,11.73,000,11.73
+1992-12-07,12.00,12.00,12.00,12.00,000,12.00
+1992-12-04,11.81,11.81,11.81,11.81,000,11.81
+1992-12-03,12.03,12.03,12.03,12.03,000,12.03
+1992-12-02,12.56,12.56,12.56,12.56,000,12.56
+1992-12-01,12.80,12.80,12.80,12.80,000,12.80
+1992-11-30,13.01,13.01,13.01,13.01,000,13.01
+1992-11-27,12.58,12.58,12.58,12.58,000,12.58
+1992-11-25,12.50,12.50,12.50,12.50,000,12.50
+1992-11-24,12.66,12.66,12.66,12.66,000,12.66
+1992-11-23,13.40,13.40,13.40,13.40,000,13.40
+1992-11-20,13.67,13.67,13.67,13.67,000,13.67
+1992-11-19,14.33,14.33,14.33,14.33,000,14.33
+1992-11-18,14.55,14.55,14.55,14.55,000,14.55
+1992-11-17,15.01,15.01,15.01,15.01,000,15.01
+1992-11-16,14.86,14.86,14.86,14.86,000,14.86
+1992-11-13,14.61,14.61,14.61,14.61,000,14.61
+1992-11-12,14.37,14.37,14.37,14.37,000,14.37
+1992-11-11,13.99,13.99,13.99,13.99,000,13.99
+1992-11-10,14.37,14.37,14.37,14.37,000,14.37
+1992-11-09,14.23,14.23,14.23,14.23,000,14.23
+1992-11-06,14.69,14.69,14.69,14.69,000,14.69
+1992-11-05,15.38,15.38,15.38,15.38,000,15.38
+1992-11-04,16.28,16.28,16.28,16.28,000,16.28
+1992-11-03,17.33,17.33,17.33,17.33,000,17.33
+1992-11-02,16.67,16.67,16.67,16.67,000,16.67
+1992-10-30,16.15,16.15,16.15,16.15,000,16.15
+1992-10-29,15.47,15.47,15.47,15.47,000,15.47
+1992-10-28,15.95,15.95,15.95,15.95,000,15.95
+1992-10-27,16.24,16.24,16.24,16.24,000,16.24
+1992-10-26,16.32,16.32,16.32,16.32,000,16.32
+1992-10-23,16.46,16.46,16.46,16.46,000,16.46
+1992-10-22,15.84,15.84,15.84,15.84,000,15.84
+1992-10-21,16.62,16.62,16.62,16.62,000,16.62
+1992-10-20,16.87,16.87,16.87,16.87,000,16.87
+1992-10-19,17.31,17.31,17.31,17.31,000,17.31
+1992-10-16,17.01,17.01,17.01,17.01,000,17.01
+1992-10-15,17.11,17.11,17.11,17.11,000,17.11
+1992-10-14,18.42,18.42,18.42,18.42,000,18.42
+1992-10-13,17.90,17.90,17.90,17.90,000,17.90
+1992-10-12,19.49,19.49,19.49,19.49,000,19.49
+1992-10-09,20.51,20.51,20.51,20.51,000,20.51
+1992-10-08,19.26,19.26,19.26,19.26,000,19.26
+1992-10-07,20.23,20.23,20.23,20.23,000,20.23
+1992-10-06,19.42,19.42,19.42,19.42,000,19.42
+1992-10-05,20.01,20.01,20.01,20.01,000,20.01
+1992-10-02,17.79,17.79,17.79,17.79,000,17.79
+1992-10-01,16.31,16.31,16.31,16.31,000,16.31
+1992-09-30,14.28,14.28,14.28,14.28,000,14.28
+1992-09-29,14.97,14.97,14.97,14.97,000,14.97
+1992-09-28,15.19,15.19,15.19,15.19,000,15.19
+1992-09-25,14.80,14.80,14.80,14.80,000,14.80
+1992-09-24,13.44,13.44,13.44,13.44,000,13.44
+1992-09-23,13.83,13.83,13.83,13.83,000,13.83
+1992-09-22,13.88,13.88,13.88,13.88,000,13.88
+1992-09-21,13.45,13.45,13.45,13.45,000,13.45
+1992-09-18,13.74,13.74,13.74,13.74,000,13.74
+1992-09-17,14.31,14.31,14.31,14.31,000,14.31
+1992-09-16,14.72,14.72,14.72,14.72,000,14.72
+1992-09-15,13.63,13.63,13.63,13.63,000,13.63
+1992-09-14,13.00,13.00,13.00,13.00,000,13.00
+1992-09-11,12.47,12.47,12.47,12.47,000,12.47
+1992-09-10,12.92,12.92,12.92,12.92,000,12.92
+1992-09-09,13.36,13.36,13.36,13.36,000,13.36
+1992-09-08,13.65,13.65,13.65,13.65,000,13.65
+1992-09-04,12.98,12.98,12.98,12.98,000,12.98
+1992-09-03,12.88,12.88,12.88,12.88,000,12.88
+1992-09-02,12.73,12.73,12.73,12.73,000,12.73
+1992-09-01,13.40,13.40,13.40,13.40,000,13.40
+1992-08-31,13.58,13.58,13.58,13.58,000,13.58
+1992-08-28,13.14,13.14,13.14,13.14,000,13.14
+1992-08-27,13.66,13.66,13.66,13.66,000,13.66
+1992-08-26,14.50,14.50,14.50,14.50,000,14.50
+1992-08-25,15.88,15.88,15.88,15.88,000,15.88
+1992-08-24,15.31,15.31,15.31,15.31,000,15.31
+1992-08-21,15.01,15.01,15.01,15.01,000,15.01
+1992-08-20,14.48,14.48,14.48,14.48,000,14.48
+1992-08-19,14.35,14.35,14.35,14.35,000,14.35
+1992-08-18,13.84,13.84,13.84,13.84,000,13.84
+1992-08-17,14.61,14.61,14.61,14.61,000,14.61
+1992-08-14,14.66,14.66,14.66,14.66,000,14.66
+1992-08-13,15.34,15.34,15.34,15.34,000,15.34
+1992-08-12,14.88,14.88,14.88,14.88,000,14.88
+1992-08-11,15.09,15.09,15.09,15.09,000,15.09
+1992-08-10,14.51,14.51,14.51,14.51,000,14.51
+1992-08-07,13.94,13.94,13.94,13.94,000,13.94
+1992-08-06,14.23,14.23,14.23,14.23,000,14.23
+1992-08-05,13.82,13.82,13.82,13.82,000,13.82
+1992-08-04,13.58,13.58,13.58,13.58,000,13.58
+1992-08-03,13.83,13.83,13.83,13.83,000,13.83
+1992-07-31,13.17,13.17,13.17,13.17,000,13.17
+1992-07-30,13.50,13.50,13.50,13.50,000,13.50
+1992-07-29,13.44,13.44,13.44,13.44,000,13.44
+1992-07-28,13.05,13.05,13.05,13.05,000,13.05
+1992-07-27,13.90,13.90,13.90,13.90,000,13.90
+1992-07-24,13.37,13.37,13.37,13.37,000,13.37
+1992-07-23,13.33,13.33,13.33,13.33,000,13.33
+1992-07-22,13.57,13.57,13.57,13.57,000,13.57
+1992-07-21,12.60,12.60,12.60,12.60,000,12.60
+1992-07-20,12.66,12.66,12.66,12.66,000,12.66
+1992-07-17,12.60,12.60,12.60,12.60,000,12.60
+1992-07-16,12.27,12.27,12.27,12.27,000,12.27
+1992-07-15,12.52,12.52,12.52,12.52,000,12.52
+1992-07-14,12.85,12.85,12.85,12.85,000,12.85
+1992-07-13,14.01,14.01,14.01,14.01,000,14.01
+1992-07-10,13.70,13.70,13.70,13.70,000,13.70
+1992-07-09,14.60,14.60,14.60,14.60,000,14.60
+1992-07-08,15.53,15.53,15.53,15.53,000,15.53
+1992-07-07,15.83,15.83,15.83,15.83,000,15.83
+1992-07-06,14.87,14.87,14.87,14.87,000,14.87
+1992-07-02,13.88,13.88,13.88,13.88,000,13.88
+1992-07-01,13.34,13.34,13.34,13.34,000,13.34
+1992-06-30,13.35,13.35,13.35,13.35,000,13.35
+1992-06-29,13.21,13.21,13.21,13.21,000,13.21
+1992-06-26,14.67,14.67,14.67,14.67,000,14.67
+1992-06-25,14.40,14.40,14.40,14.40,000,14.40
+1992-06-24,14.40,14.40,14.40,14.40,000,14.40
+1992-06-23,14.53,14.53,14.53,14.53,000,14.53
+1992-06-22,16.66,16.66,16.66,16.66,000,16.66
+1992-06-19,16.31,16.31,16.31,16.31,000,16.31
+1992-06-18,18.20,18.20,18.20,18.20,000,18.20
+1992-06-17,18.08,18.08,18.08,18.08,000,18.08
+1992-06-16,15.22,15.22,15.22,15.22,000,15.22
+1992-06-15,14.76,14.76,14.76,14.76,000,14.76
+1992-06-12,14.95,14.95,14.95,14.95,000,14.95
+1992-06-11,16.29,16.29,16.29,16.29,000,16.29
+1992-06-10,16.62,16.62,16.62,16.62,000,16.62
+1992-06-09,15.97,15.97,15.97,15.97,000,15.97
+1992-06-08,15.45,15.45,15.45,15.45,000,15.45
+1992-06-05,14.65,14.65,14.65,14.65,000,14.65
+1992-06-04,13.66,13.66,13.66,13.66,000,13.66
+1992-06-03,14.35,14.35,14.35,14.35,000,14.35
+1992-06-02,14.57,14.57,14.57,14.57,000,14.57
+1992-06-01,14.43,14.43,14.43,14.43,000,14.43
+1992-05-29,13.86,13.86,13.86,13.86,000,13.86
+1992-05-28,13.77,13.77,13.77,13.77,000,13.77
+1992-05-27,13.99,13.99,13.99,13.99,000,13.99
+1992-05-26,14.92,14.92,14.92,14.92,000,14.92
+1992-05-22,13.73,13.73,13.73,13.73,000,13.73
+1992-05-21,13.92,13.92,13.92,13.92,000,13.92
+1992-05-20,13.62,13.62,13.62,13.62,000,13.62
+1992-05-19,13.57,13.57,13.57,13.57,000,13.57
+1992-05-18,14.62,14.62,14.62,14.62,000,14.62
+1992-05-15,14.82,14.82,14.82,14.82,000,14.82
+1992-05-14,15.49,15.49,15.49,15.49,000,15.49
+1992-05-13,15.19,15.19,15.19,15.19,000,15.19
+1992-05-12,15.68,15.68,15.68,15.68,000,15.68
+1992-05-11,15.17,15.17,15.17,15.17,000,15.17
+1992-05-08,15.65,15.65,15.65,15.65,000,15.65
+1992-05-07,16.54,16.54,16.54,16.54,000,16.54
+1992-05-06,16.81,16.81,16.81,16.81,000,16.81
+1992-05-05,16.66,16.66,16.66,16.66,000,16.66
+1992-05-04,16.92,16.92,16.92,16.92,000,16.92
+1992-05-01,16.61,16.61,16.61,16.61,000,16.61
+1992-04-30,15.53,15.53,15.53,15.53,000,15.53
+1992-04-29,15.95,15.95,15.95,15.95,000,15.95
+1992-04-28,16.24,16.24,16.24,16.24,000,16.24
+1992-04-27,16.49,16.49,16.49,16.49,000,16.49
+1992-04-24,16.31,16.31,16.31,16.31,000,16.31
+1992-04-23,15.83,15.83,15.83,15.83,000,15.83
+1992-04-22,15.96,15.96,15.96,15.96,000,15.96
+1992-04-21,16.53,16.53,16.53,16.53,000,16.53
+1992-04-20,15.93,15.93,15.93,15.93,000,15.93
+1992-04-16,14.85,14.85,14.85,14.85,000,14.85
+1992-04-15,16.03,16.03,16.03,16.03,000,16.03
+1992-04-14,15.98,15.98,15.98,15.98,000,15.98
+1992-04-13,15.65,15.65,15.65,15.65,000,15.65
+1992-04-10,16.85,16.85,16.85,16.85,000,16.85
+1992-04-09,17.89,17.89,17.89,17.89,000,17.89
+1992-04-08,20.15,20.15,20.15,20.15,000,20.15
+1992-04-07,18.81,18.81,18.81,18.81,000,18.81
+1992-04-06,16.72,16.72,16.72,16.72,000,16.72
+1992-04-03,17.46,17.46,17.46,17.46,000,17.46
+1992-04-02,17.06,17.06,17.06,17.06,000,17.06
+1992-04-01,16.48,16.48,16.48,16.48,000,16.48
+1992-03-31,16.18,16.18,16.18,16.18,000,16.18
+1992-03-30,15.97,15.97,15.97,15.97,000,15.97
+1992-03-27,16.02,16.02,16.02,16.02,000,16.02
+1992-03-26,15.69,15.69,15.69,15.69,000,15.69
+1992-03-25,16.19,16.19,16.19,16.19,000,16.19
+1992-03-24,16.32,16.32,16.32,16.32,000,16.32
+1992-03-23,16.73,16.73,16.73,16.73,000,16.73
+1992-03-20,16.31,16.31,16.31,16.31,000,16.31
+1992-03-19,14.57,14.57,14.57,14.57,000,14.57
+1992-03-18,16.69,16.69,16.69,16.69,000,16.69
+1992-03-17,16.79,16.79,16.79,16.79,000,16.79
+1992-03-16,18.46,18.46,18.46,18.46,000,18.46
+1992-03-13,18.35,18.35,18.35,18.35,000,18.35
+1992-03-12,19.72,19.72,19.72,19.72,000,19.72
+1992-03-11,19.79,19.79,19.79,19.79,000,19.79
+1992-03-10,18.68,18.68,18.68,18.68,000,18.68
+1992-03-09,19.68,19.68,19.68,19.68,000,19.68
+1992-03-06,19.75,19.75,19.75,19.75,000,19.75
+1992-03-05,18.47,18.47,18.47,18.47,000,18.47
+1992-03-04,17.55,17.55,17.55,17.55,000,17.55
+1992-03-03,17.26,17.26,17.26,17.26,000,17.26
+1992-03-02,16.88,16.88,16.88,16.88,000,16.88
+1992-02-28,16.68,16.68,16.68,16.68,000,16.68
+1992-02-27,16.51,16.51,16.51,16.51,000,16.51
+1992-02-26,16.64,16.64,16.64,16.64,000,16.64
+1992-02-25,16.35,16.35,16.35,16.35,000,16.35
+1992-02-24,17.13,17.13,17.13,17.13,000,17.13
+1992-02-21,16.87,16.87,16.87,16.87,000,16.87
+1992-02-20,16.72,16.72,16.72,16.72,000,16.72
+1992-02-19,17.16,17.16,17.16,17.16,000,17.16
+1992-02-18,18.22,18.22,18.22,18.22,000,18.22
+1992-02-14,17.03,17.03,17.03,17.03,000,17.03
+1992-02-13,17.45,17.45,17.45,17.45,000,17.45
+1992-02-12,17.37,17.37,17.37,17.37,000,17.37
+1992-02-11,17.70,17.70,17.70,17.70,000,17.70
+1992-02-10,18.56,18.56,18.56,18.56,000,18.56
+1992-02-07,18.51,18.51,18.51,18.51,000,18.51
+1992-02-06,18.79,18.79,18.79,18.79,000,18.79
+1992-02-05,18.22,18.22,18.22,18.22,000,18.22
+1992-02-04,17.96,17.96,17.96,17.96,000,17.96
+1992-02-03,18.20,18.20,18.20,18.20,000,18.20
+1992-01-31,17.40,17.40,17.40,17.40,000,17.40
+1992-01-30,17.49,17.49,17.49,17.49,000,17.49
+1992-01-29,17.62,17.62,17.62,17.62,000,17.62
+1992-01-28,17.67,17.67,17.67,17.67,000,17.67
+1992-01-27,16.67,16.67,16.67,16.67,000,16.67
+1992-01-24,16.24,16.24,16.24,16.24,000,16.24
+1992-01-23,16.46,16.46,16.46,16.46,000,16.46
+1992-01-22,16.75,16.75,16.75,16.75,000,16.75
+1992-01-21,17.92,17.92,17.92,17.92,000,17.92
+1992-01-20,16.42,16.42,16.42,16.42,000,16.42
+1992-01-17,16.32,16.32,16.32,16.32,000,16.32
+1992-01-16,17.64,17.64,17.64,17.64,000,17.64
+1992-01-15,17.39,17.39,17.39,17.39,000,17.39
+1992-01-14,17.01,17.01,17.01,17.01,000,17.01
+1992-01-13,16.80,16.80,16.80,16.80,000,16.80
+1992-01-10,18.45,18.45,18.45,18.45,000,18.45
+1992-01-09,18.96,18.96,18.96,18.96,000,18.96
+1992-01-08,18.72,18.72,18.72,18.72,000,18.72
+1992-01-07,19.23,19.23,19.23,19.23,000,19.23
+1992-01-06,18.96,18.96,18.96,18.96,000,18.96
+1992-01-03,18.75,18.75,18.75,18.75,000,18.75
+1992-01-02,18.95,18.95,18.95,18.95,000,18.95
+1991-12-31,19.31,19.31,19.31,19.31,000,19.31
+1991-12-30,17.63,17.63,17.63,17.63,000,17.63
+1991-12-27,15.70,15.70,15.70,15.70,000,15.70
+1991-12-26,15.44,15.44,15.44,15.44,000,15.44
+1991-12-24,15.67,15.67,15.67,15.67,000,15.67
+1991-12-23,16.61,16.61,16.61,16.61,000,16.61
+1991-12-20,17.65,17.65,17.65,17.65,000,17.65
+1991-12-19,17.96,17.96,17.96,17.96,000,17.96
+1991-12-18,17.78,17.78,17.78,17.78,000,17.78
+1991-12-17,18.12,18.12,18.12,18.12,000,18.12
+1991-12-16,17.62,17.62,17.62,17.62,000,17.62
+1991-12-13,17.88,17.88,17.88,17.88,000,17.88
+1991-12-12,19.08,19.08,19.08,19.08,000,19.08
+1991-12-11,20.57,20.57,20.57,20.57,000,20.57
+1991-12-10,19.89,19.89,19.89,19.89,000,19.89
+1991-12-09,19.74,19.74,19.74,19.74,000,19.74
+1991-12-06,19.04,19.04,19.04,19.04,000,19.04
+1991-12-05,20.19,20.19,20.19,20.19,000,20.19
+1991-12-04,19.54,19.54,19.54,19.54,000,19.54
+1991-12-03,19.70,19.70,19.70,19.70,000,19.70
+1991-12-02,20.18,20.18,20.18,20.18,000,20.18
+1991-11-29,20.26,20.26,20.26,20.26,000,20.26
+1991-11-27,19.84,19.84,19.84,19.84,000,19.84
+1991-11-26,19.80,19.80,19.80,19.80,000,19.80
+1991-11-25,21.92,21.92,21.92,21.92,000,21.92
+1991-11-22,21.20,21.20,21.20,21.20,000,21.20
+1991-11-21,19.11,19.11,19.11,19.11,000,19.11
+1991-11-20,20.40,20.40,20.40,20.40,000,20.40
+1991-11-19,20.34,20.34,20.34,20.34,000,20.34
+1991-11-18,18.28,18.28,18.28,18.28,000,18.28
+1991-11-15,21.18,21.18,21.18,21.18,000,21.18
+1991-11-14,13.96,13.96,13.96,13.96,000,13.96
+1991-11-13,13.95,13.95,13.95,13.95,000,13.95
+1991-11-12,14.04,14.04,14.04,14.04,000,14.04
+1991-11-11,14.89,14.89,14.89,14.89,000,14.89
+1991-11-08,15.43,15.43,15.43,15.43,000,15.43
+1991-11-07,15.97,15.97,15.97,15.97,000,15.97
+1991-11-06,16.47,16.47,16.47,16.47,000,16.47
+1991-11-05,16.48,16.48,16.48,16.48,000,16.48
+1991-11-04,16.35,16.35,16.35,16.35,000,16.35
+1991-11-01,15.60,15.60,15.60,15.60,000,15.60
+1991-10-31,15.48,15.48,15.48,15.48,000,15.48
+1991-10-30,15.46,15.46,15.46,15.46,000,15.46
+1991-10-29,15.55,15.55,15.55,15.55,000,15.55
+1991-10-28,15.45,15.45,15.45,15.45,000,15.45
+1991-10-25,15.75,15.75,15.75,15.75,000,15.75
+1991-10-24,15.62,15.62,15.62,15.62,000,15.62
+1991-10-23,16.26,16.26,16.26,16.26,000,16.26
+1991-10-22,16.55,16.55,16.55,16.55,000,16.55
+1991-10-21,16.66,16.66,16.66,16.66,000,16.66
+1991-10-18,15.87,15.87,15.87,15.87,000,15.87
+1991-10-17,16.32,16.32,16.32,16.32,000,16.32
+1991-10-16,14.85,14.85,14.85,14.85,000,14.85
+1991-10-15,16.22,16.22,16.22,16.22,000,16.22
+1991-10-14,16.71,16.71,16.71,16.71,000,16.71
+1991-10-11,17.60,17.60,17.60,17.60,000,17.60
+1991-10-10,17.80,17.80,17.80,17.80,000,17.80
+1991-10-09,18.54,18.54,18.54,18.54,000,18.54
+1991-10-08,17.81,17.81,17.81,17.81,000,17.81
+1991-10-07,18.58,18.58,18.58,18.58,000,18.58
+1991-10-04,15.63,15.63,15.63,15.63,000,15.63
+1991-10-03,17.04,17.04,17.04,17.04,000,17.04
+1991-10-02,15.81,15.81,15.81,15.81,000,15.81
+1991-10-01,14.81,14.81,14.81,14.81,000,14.81
+1991-09-30,15.85,15.85,15.85,15.85,000,15.85
+1991-09-27,16.31,16.31,16.31,16.31,000,16.31
+1991-09-26,15.35,15.35,15.35,15.35,000,15.35
+1991-09-25,15.68,15.68,15.68,15.68,000,15.68
+1991-09-24,16.04,16.04,16.04,16.04,000,16.04
+1991-09-23,16.38,16.38,16.38,16.38,000,16.38
+1991-09-20,17.08,17.08,17.08,17.08,000,17.08
+1991-09-19,17.56,17.56,17.56,17.56,000,17.56
+1991-09-18,17.56,17.56,17.56,17.56,000,17.56
+1991-09-17,17.68,17.68,17.68,17.68,000,17.68
+1991-09-16,17.82,17.82,17.82,17.82,000,17.82
+1991-09-13,17.88,17.88,17.88,17.88,000,17.88
+1991-09-12,16.21,16.21,16.21,16.21,000,16.21
+1991-09-11,17.96,17.96,17.96,17.96,000,17.96
+1991-09-10,18.22,18.22,18.22,18.22,000,18.22
+1991-09-09,17.73,17.73,17.73,17.73,000,17.73
+1991-09-06,16.76,16.76,16.76,16.76,000,16.76
+1991-09-05,17.31,17.31,17.31,17.31,000,17.31
+1991-09-04,17.18,17.18,17.18,17.18,000,17.18
+1991-09-03,16.57,16.57,16.57,16.57,000,16.57
+1991-08-30,14.46,14.46,14.46,14.46,000,14.46
+1991-08-29,14.82,14.82,14.82,14.82,000,14.82
+1991-08-28,15.31,15.31,15.31,15.31,000,15.31
+1991-08-27,15.46,15.46,15.46,15.46,000,15.46
+1991-08-26,14.81,14.81,14.81,14.81,000,14.81
+1991-08-23,14.41,14.41,14.41,14.41,000,14.41
+1991-08-22,14.59,14.59,14.59,14.59,000,14.59
+1991-08-21,15.62,15.62,15.62,15.62,000,15.62
+1991-08-20,18.86,18.86,18.86,18.86,000,18.86
+1991-08-19,21.19,21.19,21.19,21.19,000,21.19
+1991-08-16,16.01,16.01,16.01,16.01,000,16.01
+1991-08-15,15.19,15.19,15.19,15.19,000,15.19
+1991-08-14,15.09,15.09,15.09,15.09,000,15.09
+1991-08-13,14.73,14.73,14.73,14.73,000,14.73
+1991-08-12,15.26,15.26,15.26,15.26,000,15.26
+1991-08-09,15.45,15.45,15.45,15.45,000,15.45
+1991-08-08,15.98,15.98,15.98,15.98,000,15.98
+1991-08-07,15.56,15.56,15.56,15.56,000,15.56
+1991-08-06,15.54,15.54,15.54,15.54,000,15.54
+1991-08-05,15.92,15.92,15.92,15.92,000,15.92
+1991-08-02,15.26,15.26,15.26,15.26,000,15.26
+1991-08-01,15.47,15.47,15.47,15.47,000,15.47
+1991-07-31,15.18,15.18,15.18,15.18,000,15.18
+1991-07-30,15.47,15.47,15.47,15.47,000,15.47
+1991-07-29,15.67,15.67,15.67,15.67,000,15.67
+1991-07-26,15.45,15.45,15.45,15.45,000,15.45
+1991-07-25,15.74,15.74,15.74,15.74,000,15.74
+1991-07-24,16.41,16.41,16.41,16.41,000,16.41
+1991-07-23,16.58,16.58,16.58,16.58,000,16.58
+1991-07-22,16.90,16.90,16.90,16.90,000,16.90
+1991-07-19,15.50,15.50,15.50,15.50,000,15.50
+1991-07-18,15.77,15.77,15.77,15.77,000,15.77
+1991-07-17,17.52,17.52,17.52,17.52,000,17.52
+1991-07-16,17.49,17.49,17.49,17.49,000,17.49
+1991-07-15,17.78,17.78,17.78,17.78,000,17.78
+1991-07-12,18.29,18.29,18.29,18.29,000,18.29
+1991-07-11,17.39,17.39,17.39,17.39,000,17.39
+1991-07-10,19.19,19.19,19.19,19.19,000,19.19
+1991-07-09,19.76,19.76,19.76,19.76,000,19.76
+1991-07-08,20.29,20.29,20.29,20.29,000,20.29
+1991-07-05,18.35,18.35,18.35,18.35,000,18.35
+1991-07-03,19.47,19.47,19.47,19.47,000,19.47
+1991-07-02,17.63,17.63,17.63,17.63,000,17.63
+1991-07-01,18.64,18.64,18.64,18.64,000,18.64
+1991-06-28,19.55,19.55,19.55,19.55,000,19.55
+1991-06-27,17.87,17.87,17.87,17.87,000,17.87
+1991-06-26,17.98,17.98,17.98,17.98,000,17.98
+1991-06-25,17.85,17.85,17.85,17.85,000,17.85
+1991-06-24,18.28,18.28,18.28,18.28,000,18.28
+1991-06-21,16.51,16.51,16.51,16.51,000,16.51
+1991-06-20,16.75,16.75,16.75,16.75,000,16.75
+1991-06-19,17.44,17.44,17.44,17.44,000,17.44
+1991-06-18,16.14,16.14,16.14,16.14,000,16.14
+1991-06-17,15.50,15.50,15.50,15.50,000,15.50
+1991-06-14,15.98,15.98,15.98,15.98,000,15.98
+1991-06-13,16.99,16.99,16.99,16.99,000,16.99
+1991-06-12,17.72,17.72,17.72,17.72,000,17.72
+1991-06-11,17.32,17.32,17.32,17.32,000,17.32
+1991-06-10,17.47,17.47,17.47,17.47,000,17.47
+1991-06-07,16.98,16.98,16.98,16.98,000,16.98
+1991-06-06,16.93,16.93,16.93,16.93,000,16.93
+1991-06-05,16.40,16.40,16.40,16.40,000,16.40
+1991-06-04,16.17,16.17,16.17,16.17,000,16.17
+1991-06-03,16.87,16.87,16.87,16.87,000,16.87
+1991-05-31,15.93,15.93,15.93,15.93,000,15.93
+1991-05-30,16.02,16.02,16.02,16.02,000,16.02
+1991-05-29,15.90,15.90,15.90,15.90,000,15.90
+1991-05-28,15.67,15.67,15.67,15.67,000,15.67
+1991-05-24,15.23,15.23,15.23,15.23,000,15.23
+1991-05-23,16.11,16.11,16.11,16.11,000,16.11
+1991-05-22,16.16,16.16,16.16,16.16,000,16.16
+1991-05-21,16.07,16.07,16.07,16.07,000,16.07
+1991-05-20,17.10,17.10,17.10,17.10,000,17.10
+1991-05-17,16.64,16.64,16.64,16.64,000,16.64
+1991-05-16,17.24,17.24,17.24,17.24,000,17.24
+1991-05-15,18.38,18.38,18.38,18.38,000,18.38
+1991-05-14,18.00,18.00,18.00,18.00,000,18.00
+1991-05-13,17.66,17.66,17.66,17.66,000,17.66
+1991-05-10,17.54,17.54,17.54,17.54,000,17.54
+1991-05-09,17.17,17.17,17.17,17.17,000,17.17
+1991-05-08,17.78,17.78,17.78,17.78,000,17.78
+1991-05-07,17.46,17.46,17.46,17.46,000,17.46
+1991-05-06,17.92,17.92,17.92,17.92,000,17.92
+1991-05-03,17.24,17.24,17.24,17.24,000,17.24
+1991-05-02,17.52,17.52,17.52,17.52,000,17.52
+1991-05-01,17.77,17.77,17.77,17.77,000,17.77
+1991-04-30,18.24,18.24,18.24,18.24,000,18.24
+1991-04-29,18.27,18.27,18.27,18.27,000,18.27
+1991-04-26,17.27,17.27,17.27,17.27,000,17.27
+1991-04-25,17.15,17.15,17.15,17.15,000,17.15
+1991-04-24,16.72,16.72,16.72,16.72,000,16.72
+1991-04-23,17.02,17.02,17.02,17.02,000,17.02
+1991-04-22,16.78,16.78,16.78,16.78,000,16.78
+1991-04-19,15.68,15.68,15.68,15.68,000,15.68
+1991-04-18,16.26,16.26,16.26,16.26,000,16.26
+1991-04-17,15.47,15.47,15.47,15.47,000,15.47
+1991-04-16,15.82,15.82,15.82,15.82,000,15.82
+1991-04-15,16.50,16.50,16.50,16.50,000,16.50
+1991-04-12,18.45,18.45,18.45,18.45,000,18.45
+1991-04-11,17.24,17.24,17.24,17.24,000,17.24
+1991-04-10,19.73,19.73,19.73,19.73,000,19.73
+1991-04-09,20.12,20.12,20.12,20.12,000,20.12
+1991-04-08,17.41,17.41,17.41,17.41,000,17.41
+1991-04-05,17.63,17.63,17.63,17.63,000,17.63
+1991-04-04,18.01,18.01,18.01,18.01,000,18.01
+1991-04-03,17.61,17.61,17.61,17.61,000,17.61
+1991-04-02,17.40,17.40,17.40,17.40,000,17.40
+1991-04-01,17.42,17.42,17.42,17.42,000,17.42
+1991-03-28,16.88,16.88,16.88,16.88,000,16.88
+1991-03-27,16.55,16.55,16.55,16.55,000,16.55
+1991-03-26,16.31,16.31,16.31,16.31,000,16.31
+1991-03-25,16.76,16.76,16.76,16.76,000,16.76
+1991-03-22,16.49,16.49,16.49,16.49,000,16.49
+1991-03-21,16.86,16.86,16.86,16.86,000,16.86
+1991-03-20,16.04,16.04,16.04,16.04,000,16.04
+1991-03-19,16.11,16.11,16.11,16.11,000,16.11
+1991-03-18,15.79,15.79,15.79,15.79,000,15.79
+1991-03-15,14.90,14.90,14.90,14.90,000,14.90
+1991-03-14,14.94,14.94,14.94,14.94,000,14.94
+1991-03-13,16.09,16.09,16.09,16.09,000,16.09
+1991-03-12,18.82,18.82,18.82,18.82,000,18.82
+1991-03-11,20.88,20.88,20.88,20.88,000,20.88
+1991-03-08,20.81,20.81,20.81,20.81,000,20.81
+1991-03-07,21.05,21.05,21.05,21.05,000,21.05
+1991-03-06,20.55,20.55,20.55,20.55,000,20.55
+1991-03-05,20.45,20.45,20.45,20.45,000,20.45
+1991-03-04,20.86,20.86,20.86,20.86,000,20.86
+1991-02-28,21.23,21.23,21.23,21.23,000,21.23
+1991-02-27,21.26,21.26,21.26,21.26,000,21.26
+1991-02-26,20.38,20.38,20.38,20.38,000,20.38
+1991-02-25,22.86,22.86,22.86,22.86,000,22.86
+1991-02-22,21.01,21.01,21.01,21.01,000,21.01
+1991-02-21,20.78,20.78,20.78,20.78,000,20.78
+1991-02-20,22.26,22.26,22.26,22.26,000,22.26
+1991-02-19,19.84,19.84,19.84,19.84,000,19.84
+1991-02-15,19.57,19.57,19.57,19.57,000,19.57
+1991-02-14,21.48,21.48,21.48,21.48,000,21.48
+1991-02-13,20.86,20.86,20.86,20.86,000,20.86
+1991-02-12,22.26,22.26,22.26,22.26,000,22.26
+1991-02-11,22.56,22.56,22.56,22.56,000,22.56
+1991-02-08,23.38,23.38,23.38,23.38,000,23.38
+1991-02-07,23.60,23.60,23.60,23.60,000,23.60
+1991-02-06,22.68,22.68,22.68,22.68,000,22.68
+1991-02-05,21.46,21.46,21.46,21.46,000,21.46
+1991-02-04,21.86,21.86,21.86,21.86,000,21.86
+1991-02-01,21.04,21.04,21.04,21.04,000,21.04
+1991-01-31,20.91,20.91,20.91,20.91,000,20.91
+1991-01-30,21.37,21.37,21.37,21.37,000,21.37
+1991-01-29,23.17,23.17,23.17,23.17,000,23.17
+1991-01-28,23.05,23.05,23.05,23.05,000,23.05
+1991-01-25,22.20,22.20,22.20,22.20,000,22.20
+1991-01-24,22.86,22.86,22.86,22.86,000,22.86
+1991-01-23,23.92,23.92,23.92,23.92,000,23.92
+1991-01-22,24.90,24.90,24.90,24.90,000,24.90
+1991-01-21,24.33,24.33,24.33,24.33,000,24.33
+1991-01-18,25.39,25.39,25.39,25.39,000,25.39
+1991-01-17,27.45,27.45,27.45,27.45,000,27.45
+1991-01-16,33.20,33.20,33.20,33.20,000,33.20
+1991-01-15,36.16,36.16,36.16,36.16,000,36.16
+1991-01-14,36.20,36.20,36.20,36.20,000,36.20
+1991-01-11,32.63,32.63,32.63,32.63,000,32.63
+1991-01-10,31.33,31.33,31.33,31.33,000,31.33
+1991-01-09,33.30,33.30,33.30,33.30,000,33.30
+1991-01-08,30.38,30.38,30.38,30.38,000,30.38
+1991-01-07,28.95,28.95,28.95,28.95,000,28.95
+1991-01-04,27.19,27.19,27.19,27.19,000,27.19
+1991-01-03,27.93,27.93,27.93,27.93,000,27.93
+1991-01-02,26.62,26.62,26.62,26.62,000,26.62
+1990-12-31,26.38,26.38,26.38,26.38,000,26.38
+1990-12-28,25.05,25.05,25.05,25.05,000,25.05
+1990-12-27,24.81,24.81,24.81,24.81,000,24.81
+1990-12-26,24.18,24.18,24.18,24.18,000,24.18
+1990-12-24,24.03,24.03,24.03,24.03,000,24.03
+1990-12-21,22.66,22.66,22.66,22.66,000,22.66
+1990-12-20,23.13,23.13,23.13,23.13,000,23.13
+1990-12-19,23.08,23.08,23.08,23.08,000,23.08
+1990-12-18,23.11,23.11,23.11,23.11,000,23.11
+1990-12-17,24.85,24.85,24.85,24.85,000,24.85
+1990-12-14,23.85,23.85,23.85,23.85,000,23.85
+1990-12-13,23.05,23.05,23.05,23.05,000,23.05
+1990-12-12,21.28,21.28,21.28,21.28,000,21.28
+1990-12-11,23.75,23.75,23.75,23.75,000,23.75
+1990-12-10,23.58,23.58,23.58,23.58,000,23.58
+1990-12-07,22.59,22.59,22.59,22.59,000,22.59
+1990-12-06,22.62,22.62,22.62,22.62,000,22.62
+1990-12-05,20.94,20.94,20.94,20.94,000,20.94
+1990-12-04,22.03,22.03,22.03,22.03,000,22.03
+1990-12-03,22.29,22.29,22.29,22.29,000,22.29
+1990-11-30,22.16,22.16,22.16,22.16,000,22.16
+1990-11-29,23.91,23.91,23.91,23.91,000,23.91
+1990-11-28,22.96,22.96,22.96,22.96,000,22.96
+1990-11-27,22.86,22.86,22.86,22.86,000,22.86
+1990-11-26,22.76,22.76,22.76,22.76,000,22.76
+1990-11-23,20.98,20.98,20.98,20.98,000,20.98
+1990-11-21,21.09,21.09,21.09,21.09,000,21.09
+1990-11-20,20.09,20.09,20.09,20.09,000,20.09
+1990-11-19,20.95,20.95,20.95,20.95,000,20.95
+1990-11-16,21.34,21.34,21.34,21.34,000,21.34
+1990-11-15,22.57,22.57,22.57,22.57,000,22.57
+1990-11-14,22.89,22.89,22.89,22.89,000,22.89
+1990-11-13,24.58,24.58,24.58,24.58,000,24.58
+1990-11-12,25.60,25.60,25.60,25.60,000,25.60
+1990-11-09,26.96,26.96,26.96,26.96,000,26.96
+1990-11-08,30.79,30.79,30.79,30.79,000,30.79
+1990-11-07,30.87,30.87,30.87,30.87,000,30.87
+1990-11-06,29.11,29.11,29.11,29.11,000,29.11
+1990-11-05,29.85,29.85,29.85,29.85,000,29.85
+1990-11-02,30.03,30.03,30.03,30.03,000,30.03
+1990-11-01,30.25,30.25,30.25,30.25,000,30.25
+1990-10-31,30.04,30.04,30.04,30.04,000,30.04
+1990-10-30,30.52,30.52,30.52,30.52,000,30.52
+1990-10-29,31.54,31.54,31.54,31.54,000,31.54
+1990-10-26,30.75,30.75,30.75,30.75,000,30.75
+1990-10-25,29.04,29.04,29.04,29.04,000,29.04
+1990-10-24,28.28,28.28,28.28,28.28,000,28.28
+1990-10-23,27.57,27.57,27.57,27.57,000,27.57
+1990-10-22,27.27,27.27,27.27,27.27,000,27.27
+1990-10-19,27.86,27.86,27.86,27.86,000,27.86
+1990-10-18,29.60,29.60,29.60,29.60,000,29.60
+1990-10-17,31.37,31.37,31.37,31.37,000,31.37
+1990-10-16,31.45,31.45,31.45,31.45,000,31.45
+1990-10-15,31.64,31.64,31.64,31.64,000,31.64
+1990-10-12,31.94,31.94,31.94,31.94,000,31.94
+1990-10-11,33.98,33.98,33.98,33.98,000,33.98
+1990-10-10,31.19,31.19,31.19,31.19,000,31.19
+1990-10-09,30.71,30.71,30.71,30.71,000,30.71
+1990-10-08,28.04,28.04,28.04,28.04,000,28.04
+1990-10-05,27.85,27.85,27.85,27.85,000,27.85
+1990-10-04,27.51,27.51,27.51,27.51,000,27.51
+1990-10-03,27.90,27.90,27.90,27.90,000,27.90
+1990-10-02,27.28,27.28,27.28,27.28,000,27.28
+1990-10-01,28.06,28.06,28.06,28.06,000,28.06
+1990-09-28,29.11,29.11,29.11,29.11,000,29.11
+1990-09-27,28.67,28.67,28.67,28.67,000,28.67
+1990-09-26,28.19,28.19,28.19,28.19,000,28.19
+1990-09-25,28.81,28.81,28.81,28.81,000,28.81
+1990-09-24,30.56,30.56,30.56,30.56,000,30.56
+1990-09-21,30.04,30.04,30.04,30.04,000,30.04
+1990-09-20,28.66,28.66,28.66,28.66,000,28.66
+1990-09-19,27.88,27.88,27.88,27.88,000,27.88
+1990-09-18,28.82,28.82,28.82,28.82,000,28.82
+1990-09-17,29.55,29.55,29.55,29.55,000,29.55
+1990-09-14,30.56,30.56,30.56,30.56,000,30.56
+1990-09-13,29.33,29.33,29.33,29.33,000,29.33
+1990-09-12,28.12,28.12,28.12,28.12,000,28.12
+1990-09-11,28.38,28.38,28.38,28.38,000,28.38
+1990-09-10,29.34,29.34,29.34,29.34,000,29.34
+1990-09-07,28.73,28.73,28.73,28.73,000,28.73
+1990-09-06,30.19,30.19,30.19,30.19,000,30.19
+1990-09-05,28.52,28.52,28.52,28.52,000,28.52
+1990-09-04,29.58,29.58,29.58,29.58,000,29.58
+1990-08-31,29.90,29.90,29.90,29.90,000,29.90
+1990-08-30,29.89,29.89,29.89,29.89,000,29.89
+1990-08-29,27.38,27.38,27.38,27.38,000,27.38
+1990-08-28,29.12,29.12,29.12,29.12,000,29.12
+1990-08-27,29.63,29.63,29.63,29.63,000,29.63
+1990-08-24,33.93,33.93,33.93,33.93,000,33.93
+1990-08-23,36.47,36.47,36.47,36.47,000,36.47
+1990-08-22,30.55,30.55,30.55,30.55,000,30.55
+1990-08-21,28.90,28.90,28.90,28.90,000,28.90
+1990-08-20,26.46,26.46,26.46,26.46,000,26.46
+1990-08-17,27.53,27.53,27.53,27.53,000,27.53
+1990-08-16,27.16,27.16,27.16,27.16,000,27.16
+1990-08-15,23.31,23.31,23.31,23.31,000,23.31
+1990-08-14,24.18,24.18,24.18,24.18,000,24.18
+1990-08-13,25.74,25.74,25.74,25.74,000,25.74
+1990-08-10,25.75,25.75,25.75,25.75,000,25.75
+1990-08-09,24.39,24.39,24.39,24.39,000,24.39
+1990-08-08,28.27,28.27,28.27,28.27,000,28.27
+1990-08-07,32.75,32.75,32.75,32.75,000,32.75
+1990-08-06,35.91,35.91,35.91,35.91,000,35.91
+1990-08-03,28.74,28.74,28.74,28.74,000,28.74
+1990-08-02,20.43,20.43,20.43,20.43,000,20.43
+1990-08-01,21.64,21.64,21.64,21.64,000,21.64
+1990-07-31,21.11,21.11,21.11,21.11,000,21.11
+1990-07-30,21.16,21.16,21.16,21.16,000,21.16
+1990-07-27,21.12,21.12,21.12,21.12,000,21.12
+1990-07-26,20.26,20.26,20.26,20.26,000,20.26
+1990-07-25,20.19,20.19,20.19,20.19,000,20.19
+1990-07-24,21.79,21.79,21.79,21.79,000,21.79
+1990-07-23,23.68,23.68,23.68,23.68,000,23.68
+1990-07-20,15.63,15.63,15.63,15.63,000,15.63
+1990-07-19,18.56,18.56,18.56,18.56,000,18.56
+1990-07-18,18.90,18.90,18.90,18.90,000,18.90
+1990-07-17,16.66,16.66,16.66,16.66,000,16.66
+1990-07-16,16.75,16.75,16.75,16.75,000,16.75
+1990-07-13,17.09,17.09,17.09,17.09,000,17.09
+1990-07-12,17.06,17.06,17.06,17.06,000,17.06
+1990-07-11,16.68,16.68,16.68,16.68,000,16.68
+1990-07-10,16.92,16.92,16.92,16.92,000,16.92
+1990-07-09,16.66,16.66,16.66,16.66,000,16.66
+1990-07-06,16.41,16.41,16.41,16.41,000,16.41
+1990-07-05,17.25,17.25,17.25,17.25,000,17.25
+1990-07-03,16.11,16.11,16.11,16.11,000,16.11
+1990-07-02,16.26,16.26,16.26,16.26,000,16.26
+1990-06-29,15.50,15.50,15.50,15.50,000,15.50
+1990-06-28,16.18,16.18,16.18,16.18,000,16.18
+1990-06-27,16.00,16.00,16.00,16.00,000,16.00
+1990-06-26,16.29,16.29,16.29,16.29,000,16.29
+1990-06-25,17.06,17.06,17.06,17.06,000,17.06
+1990-06-22,19.36,19.36,19.36,19.36,000,19.36
+1990-06-21,14.72,14.72,14.72,14.72,000,14.72
+1990-06-20,15.27,15.27,15.27,15.27,000,15.27
+1990-06-19,15.23,15.23,15.23,15.23,000,15.23
+1990-06-18,17.71,17.71,17.71,17.71,000,17.71
+1990-06-15,15.90,15.90,15.90,15.90,000,15.90
+1990-06-14,17.40,17.40,17.40,17.40,000,17.40
+1990-06-13,17.38,17.38,17.38,17.38,000,17.38
+1990-06-12,16.60,16.60,16.60,16.60,000,16.60
+1990-06-11,16.34,16.34,16.34,16.34,000,16.34
+1990-06-08,17.58,17.58,17.58,17.58,000,17.58
+1990-06-07,16.88,16.88,16.88,16.88,000,16.88
+1990-06-06,17.42,17.42,17.42,17.42,000,17.42
+1990-06-05,18.97,18.97,18.97,18.97,000,18.97
+1990-06-04,18.39,18.39,18.39,18.39,000,18.39
+1990-06-01,17.09,17.09,17.09,17.09,000,17.09
+1990-05-31,17.37,17.37,17.37,17.37,000,17.37
+1990-05-30,17.44,17.44,17.44,17.44,000,17.44
+1990-05-29,18.75,18.75,18.75,18.75,000,18.75
+1990-05-25,17.32,17.32,17.32,17.32,000,17.32
+1990-05-24,17.70,17.70,17.70,17.70,000,17.70
+1990-05-23,17.18,17.18,17.18,17.18,000,17.18
+1990-05-22,17.84,17.84,17.84,17.84,000,17.84
+1990-05-21,16.72,16.72,16.72,16.72,000,16.72
+1990-05-18,17.20,17.20,17.20,17.20,000,17.20
+1990-05-17,17.27,17.27,17.27,17.27,000,17.27
+1990-05-16,17.71,17.71,17.71,17.71,000,17.71
+1990-05-15,19.49,19.49,19.49,19.49,000,19.49
+1990-05-14,20.14,20.14,20.14,20.14,000,20.14
+1990-05-11,19.81,19.81,19.81,19.81,000,19.81
+1990-05-10,18.59,18.59,18.59,18.59,000,18.59
+1990-05-09,18.64,18.64,18.64,18.64,000,18.64
+1990-05-08,18.49,18.49,18.49,18.49,000,18.49
+1990-05-07,17.65,17.65,17.65,17.65,000,17.65
+1990-05-04,17.28,17.28,17.28,17.28,000,17.28
+1990-05-03,17.81,17.81,17.81,17.81,000,17.81
+1990-05-02,19.32,19.32,19.32,19.32,000,19.32
+1990-05-01,18.43,18.43,18.43,18.43,000,18.43
+1990-04-30,19.52,19.52,19.52,19.52,000,19.52
+1990-04-27,22.19,22.19,22.19,22.19,000,22.19
+1990-04-26,20.25,20.25,20.25,20.25,000,20.25
+1990-04-25,20.86,20.86,20.86,20.86,000,20.86
+1990-04-24,21.70,21.70,21.70,21.70,000,21.70
+1990-04-23,24.16,24.16,24.16,24.16,000,24.16
+1990-04-20,23.33,23.33,23.33,23.33,000,23.33
+1990-04-19,22.46,22.46,22.46,22.46,000,22.46
+1990-04-18,22.67,22.67,22.67,22.67,000,22.67
+1990-04-17,20.38,20.38,20.38,20.38,000,20.38
+1990-04-16,20.75,20.75,20.75,20.75,000,20.75
+1990-04-12,19.80,19.80,19.80,19.80,000,19.80
+1990-04-11,17.73,17.73,17.73,17.73,000,17.73
+1990-04-10,21.69,21.69,21.69,21.69,000,21.69
+1990-04-09,22.30,22.30,22.30,22.30,000,22.30
+1990-04-06,21.76,21.76,21.76,21.76,000,21.76
+1990-04-05,21.21,21.21,21.21,21.21,000,21.21
+1990-04-04,22.03,22.03,22.03,22.03,000,22.03
+1990-04-03,20.44,20.44,20.44,20.44,000,20.44
+1990-04-02,22.84,22.84,22.84,22.84,000,22.84
+1990-03-30,19.73,19.73,19.73,19.73,000,19.73
+1990-03-29,18.46,18.46,18.46,18.46,000,18.46
+1990-03-28,19.77,19.77,19.77,19.77,000,19.77
+1990-03-27,21.01,21.01,21.01,21.01,000,21.01
+1990-03-26,19.59,19.59,19.59,19.59,000,19.59
+1990-03-23,20.46,20.46,20.46,20.46,000,20.46
+1990-03-22,22.74,22.74,22.74,22.74,000,22.74
+1990-03-21,20.10,20.10,20.10,20.10,000,20.10
+1990-03-20,19.06,19.06,19.06,19.06,000,19.06
+1990-03-19,18.29,18.29,18.29,18.29,000,18.29
+1990-03-16,17.62,17.62,17.62,17.62,000,17.62
+1990-03-15,18.81,18.81,18.81,18.81,000,18.81
+1990-03-14,19.65,19.65,19.65,19.65,000,19.65
+1990-03-13,21.05,21.05,21.05,21.05,000,21.05
+1990-03-12,20.07,20.07,20.07,20.07,000,20.07
+1990-03-09,20.30,20.30,20.30,20.30,000,20.30
+1990-03-08,19.74,19.74,19.74,19.74,000,19.74
+1990-03-07,19.10,19.10,19.10,19.10,000,19.10
+1990-03-06,20.55,20.55,20.55,20.55,000,20.55
+1990-03-05,22.03,22.03,22.03,22.03,000,22.03
+1990-03-02,21.34,21.34,21.34,21.34,000,21.34
+1990-03-01,21.90,21.90,21.90,21.90,000,21.90
+1990-02-28,21.99,21.99,21.99,21.99,000,21.99
+1990-02-27,22.69,22.69,22.69,22.69,000,22.69
+1990-02-26,23.56,23.56,23.56,23.56,000,23.56
+1990-02-23,23.69,23.69,23.69,23.69,000,23.69
+1990-02-22,22.54,22.54,22.54,22.54,000,22.54
+1990-02-21,23.89,23.89,23.89,23.89,000,23.89
+1990-02-20,22.78,22.78,22.78,22.78,000,22.78
+1990-02-16,20.78,20.78,20.78,20.78,000,20.78
+1990-02-15,19.71,19.71,19.71,19.71,000,19.71
+1990-02-14,22.05,22.05,22.05,22.05,000,22.05
+1990-02-13,23.76,23.76,23.76,23.76,000,23.76
+1990-02-12,24.38,24.38,24.38,24.38,000,24.38
+1990-02-09,23.69,23.69,23.69,23.69,000,23.69
+1990-02-08,23.77,23.77,23.77,23.77,000,23.77
+1990-02-07,24.29,24.29,24.29,24.29,000,24.29
+1990-02-06,24.69,24.69,24.69,24.69,000,24.69
+1990-02-05,24.54,24.54,24.54,24.54,000,24.54
+1990-02-02,24.32,24.32,24.32,24.32,000,24.32
+1990-02-01,24.87,24.87,24.87,24.87,000,24.87
+1990-01-31,25.36,25.36,25.36,25.36,000,25.36
+1990-01-30,27.25,27.25,27.25,27.25,000,27.25
+1990-01-29,26.44,26.44,26.44,26.44,000,26.44
+1990-01-26,26.28,26.28,26.28,26.28,000,26.28
+1990-01-25,25.63,25.63,25.63,25.63,000,25.63
+1990-01-24,25.39,25.39,25.39,25.39,000,25.39
+1990-01-23,24.72,24.72,24.72,24.72,000,24.72
+1990-01-22,26.70,26.70,26.70,26.70,000,26.70
+1990-01-19,22.50,22.50,22.50,22.50,000,22.50
+1990-01-18,24.34,24.34,24.34,24.34,000,24.34
+1990-01-17,24.16,24.16,24.16,24.16,000,24.16
+1990-01-16,24.18,24.18,24.18,24.18,000,24.18
+1990-01-15,26.34,26.34,26.34,26.34,000,26.34
+1990-01-12,24.64,24.64,24.64,24.64,000,24.64
+1990-01-11,20.05,20.05,20.05,20.05,000,20.05
+1990-01-10,22.44,22.44,22.44,22.44,000,22.44
+1990-01-09,22.20,22.20,22.20,22.20,000,22.20
+1990-01-08,20.26,20.26,20.26,20.26,000,20.26
+1990-01-05,20.11,20.11,20.11,20.11,000,20.11
+1990-01-04,19.22,19.22,19.22,19.22,000,19.22
+1990-01-03,18.19,18.19,18.19,18.19,000,18.19
+1990-01-02,17.24,17.24,17.24,17.24,000,17.24
Index: /Dev/trunk/d3/examples/calendar/vix.html
===================================================================
--- /Dev/trunk/d3/examples/calendar/vix.html	(revision 76)
+++ /Dev/trunk/d3/examples/calendar/vix.html	(revision 76)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>VIX</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.csv.js"></script>
+    <script type="text/javascript" src="../../d3.time.js"></script>
+    <script type="text/javascript" src="calendar.js"></script>
+    <link type="text/css" rel="stylesheet" href="../../lib/colorbrewer/colorbrewer.css"/>
+    <link type="text/css" rel="stylesheet" href="calendar.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="vix.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/calendar/vix.js
===================================================================
--- /Dev/trunk/d3/examples/calendar/vix.js	(revision 76)
+++ /Dev/trunk/d3/examples/calendar/vix.js	(revision 76)
@@ -0,0 +1,60 @@
+var w = 960,
+    pw = 14,
+    z = ~~((w - pw * 2) / 53),
+    ph = z >> 1,
+    h = z * 7;
+
+var vis = d3.select("#chart")
+  .selectAll("svg")
+    .data(d3.range(1993, 2011))
+  .enter().append("svg:svg")
+    .attr("width", w)
+    .attr("height", h + ph * 2)
+    .attr("class", "RdYlGn")
+  .append("svg:g")
+    .attr("transform", "translate(" + pw + "," + ph + ")");
+
+vis.append("svg:text")
+    .attr("transform", "translate(-6," + h / 2 + ")rotate(-90)")
+    .text(function(d) { return d; });
+
+vis.selectAll("rect.day")
+    .data(calendar.dates)
+  .enter().append("svg:rect")
+    .attr("x", function(d) { return d.week * z; })
+    .attr("y", function(d) { return d.day * z; })
+    .attr("class", "day")
+    .attr("width", z)
+    .attr("height", z);
+
+vis.selectAll("path.month")
+    .data(calendar.months)
+  .enter().append("svg:path")
+    .attr("class", "month")
+    .attr("d", function(d) {
+      return "M" + (d.firstWeek + 1) * z + "," + d.firstDay * z
+          + "H" + d.firstWeek * z
+          + "V" + 7 * z
+          + "H" + d.lastWeek * z
+          + "V" + (d.lastDay + 1) * z
+          + "H" + (d.lastWeek + 1) * z
+          + "V" + 0
+          + "H" + (d.firstWeek + 1) * z
+          + "Z";
+    });
+
+d3.csv("vix.csv", function(csv) {
+  var data = d3.nest()
+      .key(function(d) { return d.Date; })
+      .rollup(function(d) { return d[0].Open; })
+      .map(csv);
+
+  var color = d3.scale.quantile()
+      .domain(d3.values(data))
+      .range(d3.range(9).reverse());
+
+  vis.selectAll("rect.day")
+      .attr("class", function(d) { return "day q" + color(data[d.Date]) + "-9"; })
+    .append("svg:title")
+      .text(function(d) { return d.Date + ": " + data[d.Date]; });
+});
Index: /Dev/trunk/d3/examples/cartogram/cartogram.css
===================================================================
--- /Dev/trunk/d3/examples/cartogram/cartogram.css	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/cartogram.css	(revision 76)
@@ -0,0 +1,20 @@
+#chart {
+  width: 960px;
+  height: 500px;
+}
+
+.black path {
+  fill: none;
+  stroke: #ccc;
+  stroke-width: 3px;
+}
+
+.white path {
+  fill: #fff;
+  stroke: #fff;
+}
+
+.grey path {
+  fill: #ccc;
+  stroke: #666;
+}
Index: /Dev/trunk/d3/examples/cartogram/cartogram.html
===================================================================
--- /Dev/trunk/d3/examples/cartogram/cartogram.html	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/cartogram.html	(revision 76)
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Non-Contiguous Cartogram</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <link type="text/css" rel="stylesheet" href="cartogram.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="cartogram.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/cartogram/cartogram.js
===================================================================
--- /Dev/trunk/d3/examples/cartogram/cartogram.js	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/cartogram.js	(revision 76)
@@ -0,0 +1,50 @@
+// Ratio of Obese (BMI >= 30) in U.S. Adults, CDC 2008
+var data = [
+  , .187, .198, , .133, .175, .151, , .1, .125, .171, , .172, .133, , .108,
+  .142, .167, .201, .175, .159, .169, .177, .141, .163, .117, .182, .153, .195,
+  .189, .134, .163, .133, .151, .145, .13, .139, .169, .164, .175, .135, .152,
+  .169, , .132, .167, .139, .184, .159, .14, .146, .157, , .139, .183, .16, .143
+];
+
+var svg = d3.select("#chart")
+  .append("svg:svg");
+
+d3.json("../data/us-states.json", function(json) {
+  var path = d3.geo.path();
+
+  // A thick black stroke for the exterior.
+  svg.append("svg:g")
+      .attr("class", "black")
+    .selectAll("path")
+      .data(json.features)
+    .enter().append("svg:path")
+      .attr("d", path);
+
+  // A white overlay to hide interior black strokes.
+  svg.append("svg:g")
+      .attr("class", "white")
+    .selectAll("path")
+      .data(json.features)
+    .enter().append("svg:path")
+      .attr("d", path);
+
+  // The polygons, scaled!
+  svg.append("svg:g")
+      .attr("class", "grey")
+    .selectAll("path")
+      .data(json.features)
+    .enter().append("svg:path")
+      .attr("transform", function(d) {
+        var centroid = path.centroid(d),
+            x = centroid[0],
+            y = centroid[1];
+        return "translate(" + x + "," + y + ")"
+            + "scale(" + Math.sqrt(data[+d.id] * 5 || 0) + ")"
+            + "translate(" + -x + "," + -y + ")";
+      })
+      .style("stroke-width", function(d) {
+        return 1 / Math.sqrt(data[+d.id] * 5);
+      })
+      .attr("d", path);
+
+});
Index: /Dev/trunk/d3/examples/cartogram/demers.css
===================================================================
--- /Dev/trunk/d3/examples/cartogram/demers.css	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/demers.css	(revision 76)
@@ -0,0 +1,9 @@
+#chart {
+  width: 960px;
+  height: 500px;
+}
+
+rect {
+  stroke: #000;
+  stroke-width: .5px;
+}
Index: /Dev/trunk/d3/examples/cartogram/demers.html
===================================================================
--- /Dev/trunk/d3/examples/cartogram/demers.html	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/demers.html	(revision 76)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Demers Cartogram</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="demers.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="demers.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/cartogram/demers.js
===================================================================
--- /Dev/trunk/d3/examples/cartogram/demers.js	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/demers.js	(revision 76)
@@ -0,0 +1,79 @@
+// Ratio of Obese (BMI >= 30) in U.S. Adults, CDC 2008
+var data = [
+  , .187, .198, , .133, .175, .151, , .1, .125, .171, , .172, .133, , .108,
+  .142, .167, .201, .175, .159, .169, .177, .141, .163, .117, .182, .153, .195,
+  .189, .134, .163, .133, .151, .145, .13, .139, .169, .164, .175, .135, .152,
+  .169, , .132, .167, .139, .184, .159, .14, .146, .157, , .139, .183, .16, .143
+];
+
+var color = d3.scale.linear()
+    .domain([d3.min(data), d3.max(data)])
+    .range(["#aad", "#556"]); 
+
+var force = d3.layout.force()
+    .charge(0)
+    .gravity(0)
+    .size([960, 500]);
+
+var svg = d3.select("#chart").append("svg:svg");
+
+d3.json("../data/us-state-centroids.json", function(states) {
+  var project = d3.geo.albersUsa(),
+      idToNode = {},
+      links = [],
+      nodes = states.features.map(function(d) {
+    var xy = project(d.geometry.coordinates);
+    return idToNode[d.id] = {
+      x: xy[0],
+      y: xy[1],
+      gravity: {x: xy[0], y: xy[1]},
+      r: Math.sqrt(data[+d.id] * 2500),
+      value: data[+d.id]
+    };
+  });
+
+  force
+      .nodes(nodes)
+      .links(links)
+      .start()
+      .on("tick", function(e) {
+    var k = e.alpha * .5,
+        kg = k * .1;
+    nodes.forEach(function(a, i) {
+      // Apply gravity forces.
+      a.x += (a.gravity.x - a.x) * kg;
+      a.y += (a.gravity.y - a.y) * kg;
+      nodes.slice(i + 1).forEach(function(b) {
+        // Check for collision
+        var dx = a.x - b.x,
+            dy = a.y - b.y,
+            d = a.r + b.r,
+            lx = Math.abs(dx),
+            ly = Math.abs(dy);
+        if (lx < d && ly < d) {
+          lx = (lx - d) / lx * k;
+          ly = (ly - d) / ly * k;
+          dx *= lx;
+          dy *= ly;
+          a.x -= dx;
+          a.y -= dy;
+          b.x += dx;
+          b.y += dy;
+        }
+      });
+    });
+
+    svg.selectAll("rect")
+        .attr("x", function(d) { return d.x - d.r; })
+        .attr("y", function(d) { return d.y - d.r; });
+  });
+
+  svg.selectAll("rect")
+      .data(nodes)
+    .enter().append("svg:rect")
+      .style("fill", function(d) { return color(d.value); })
+      .attr("x", function(d) { return d.x - d.r; })
+      .attr("y", function(d) { return d.y - d.r; })
+      .attr("width", function(d) { return d.r * 2; })
+      .attr("height", function(d) { return d.r * 2; });
+});
Index: /Dev/trunk/d3/examples/cartogram/dorling.css
===================================================================
--- /Dev/trunk/d3/examples/cartogram/dorling.css	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/dorling.css	(revision 76)
@@ -0,0 +1,9 @@
+#chart {
+  width: 960px;
+  height: 500px;
+}
+
+circle {
+  stroke: #000;
+  stroke-width: .5px;
+}
Index: /Dev/trunk/d3/examples/cartogram/dorling.html
===================================================================
--- /Dev/trunk/d3/examples/cartogram/dorling.html	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/dorling.html	(revision 76)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Dorling Cartogram</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="dorling.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="dorling.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/cartogram/dorling.js
===================================================================
--- /Dev/trunk/d3/examples/cartogram/dorling.js	(revision 76)
+++ /Dev/trunk/d3/examples/cartogram/dorling.js	(revision 76)
@@ -0,0 +1,80 @@
+// Ratio of Obese (BMI >= 30) in U.S. Adults, CDC 2008
+var data = [
+  , .187, .198, , .133, .175, .151, , .1, .125, .171, , .172, .133, , .108,
+  .142, .167, .201, .175, .159, .169, .177, .141, .163, .117, .182, .153, .195,
+  .189, .134, .163, .133, .151, .145, .13, .139, .169, .164, .175, .135, .152,
+  .169, , .132, .167, .139, .184, .159, .14, .146, .157, , .139, .183, .16, .143
+];
+
+var color = d3.scale.linear()
+    .domain([d3.min(data), d3.max(data)])
+    .range(["#aad", "#556"]); 
+
+var force = d3.layout.force()
+    .charge(0)
+    .gravity(0)
+    .size([960, 500]);
+
+var svg = d3.select("#chart").append("svg:svg")
+    .attr("width", 960 + 100)
+    .attr("height", 500 + 100)
+  .append("svg:g")
+    .attr("transform", "translate(50,50)");
+
+d3.json("../data/us-state-centroids.json", function(states) {
+  var project = d3.geo.albersUsa(),
+      idToNode = {},
+      links = [],
+      nodes = states.features.map(function(d) {
+    var xy = project(d.geometry.coordinates);
+    return idToNode[d.id] = {
+      x: xy[0],
+      y: xy[1],
+      gravity: {x: xy[0], y: xy[1]},
+      r: Math.sqrt(data[+d.id] * 5000),
+      value: data[+d.id]
+    };
+  });
+
+  force
+      .nodes(nodes)
+      .links(links)
+      .start()
+      .on("tick", function(e) {
+    var k = e.alpha,
+        kg = k * .02;
+    nodes.forEach(function(a, i) {
+      // Apply gravity forces.
+      a.x += (a.gravity.x - a.x) * kg;
+      a.y += (a.gravity.y - a.y) * kg;
+      nodes.slice(i + 1).forEach(function(b) {
+        // Check for collisions.
+        var dx = a.x - b.x,
+            dy = a.y - b.y,
+            l = Math.sqrt(dx * dx + dy * dy),
+            d = a.r + b.r;
+        if (l < d) {
+          l = (l - d) / l * k;
+          dx *= l;
+          dy *= l;
+          a.x -= dx;
+          a.y -= dy;
+          b.x += dx;
+          b.y += dy;
+        }
+      });
+    });
+
+    svg.selectAll("circle")
+        .attr("cx", function(d) { return d.x; })
+        .attr("cy", function(d) { return d.y; });
+  });
+
+  svg.selectAll("circle")
+      .data(nodes)
+    .enter().append("svg:circle")
+      .style("fill", function(d) { return color(d.value); })
+      .attr("cx", function(d) { return d.x; })
+      .attr("cy", function(d) { return d.y; })
+      .attr("r", function(d, i) { return d.r; });
+});
Index: /Dev/trunk/d3/examples/chord/chord-flare.html
===================================================================
--- /Dev/trunk/d3/examples/chord/chord-flare.html	(revision 76)
+++ /Dev/trunk/d3/examples/chord/chord-flare.html	(revision 76)
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+    <title>Chord Diagram</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+path.chord {
+  fill-opacity: .67;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var r1 = 960 / 2,
+    r0 = r1 - 120;
+
+var fill = d3.scale.category20c();
+
+var chord = d3.layout.chord()
+    .padding(.04)
+    .sortSubgroups(d3.descending)
+    .sortChords(d3.descending);
+
+var arc = d3.svg.arc()
+    .innerRadius(r0)
+    .outerRadius(r0 + 20);
+
+var svg = d3.select("body").append("svg:svg")
+    .attr("width", r1 * 2)
+    .attr("height", r1 * 2)
+  .append("svg:g")
+    .attr("transform", "translate(" + r1 + "," + r1 + ")");
+
+d3.json("../data/flare-imports.json", function(imports) {
+  var indexByName = {},
+      nameByIndex = {},
+      matrix = [],
+      n = 0;
+
+  // Returns the Flare package name for the given class name.
+  function name(name) {
+    return name.substring(0, name.lastIndexOf(".")).substring(6);
+  }
+
+  // Compute a unique index for each package name.
+  imports.forEach(function(d) {
+    d = name(d.name);
+    if (!(d in indexByName)) {
+      nameByIndex[n] = d;
+      indexByName[d] = n++;
+    }
+  });
+
+  // Construct a square matrix counting package imports.
+  imports.forEach(function(d) {
+    var source = indexByName[name(d.name)],
+        row = matrix[source];
+    if (!row) {
+     row = matrix[source] = [];
+     for (var i = -1; ++i < n;) row[i] = 0;
+    }
+    d.imports.forEach(function(d) { row[indexByName[name(d)]]++; });
+  });
+
+  chord.matrix(matrix);
+
+  var g = svg.selectAll("g.group")
+      .data(chord.groups)
+    .enter().append("svg:g")
+      .attr("class", "group");
+
+  g.append("svg:path")
+      .style("fill", function(d) { return fill(d.index); })
+      .style("stroke", function(d) { return fill(d.index); })
+      .attr("d", arc);
+
+  g.append("svg:text")
+      .each(function(d) { d.angle = (d.startAngle + d.endAngle) / 2; })
+      .attr("dy", ".35em")
+      .attr("text-anchor", function(d) { return d.angle > Math.PI ? "end" : null; })
+      .attr("transform", function(d) {
+        return "rotate(" + (d.angle * 180 / Math.PI - 90) + ")"
+            + "translate(" + (r0 + 26) + ")"
+            + (d.angle > Math.PI ? "rotate(180)" : "");
+      })
+      .text(function(d) { return nameByIndex[d.index]; });
+
+  svg.selectAll("path.chord")
+      .data(chord.chords)
+    .enter().append("svg:path")
+      .attr("class", "chord")
+      .style("stroke", function(d) { return d3.rgb(fill(d.source.index)).darker(); })
+      .style("fill", function(d) { return fill(d.source.index); })
+      .attr("d", d3.svg.chord().radius(r0));
+
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/chord/chord.css
===================================================================
--- /Dev/trunk/d3/examples/chord/chord.css	(revision 76)
+++ /Dev/trunk/d3/examples/chord/chord.css	(revision 76)
@@ -0,0 +1,9 @@
+#chart {
+  font: 10px sans-serif;
+}
+
+.chord path {
+  fill-opacity: .67;
+  stroke: #000;
+  stroke-width: .5px;
+}
Index: /Dev/trunk/d3/examples/chord/chord.html
===================================================================
--- /Dev/trunk/d3/examples/chord/chord.html	(revision 76)
+++ /Dev/trunk/d3/examples/chord/chord.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+    <title>Chord Diagram</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="chord.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="chord.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/chord/chord.js
===================================================================
--- /Dev/trunk/d3/examples/chord/chord.js	(revision 76)
+++ /Dev/trunk/d3/examples/chord/chord.js	(revision 76)
@@ -0,0 +1,98 @@
+// From http://mkweb.bcgsc.ca/circos/guide/tables/
+var chord = d3.layout.chord()
+  .padding(.05)
+  .sortSubgroups(d3.descending)
+  .matrix([
+    [11975,  5871, 8916, 2868],
+    [ 1951, 10048, 2060, 6171],
+    [ 8010, 16145, 8090, 8045],
+    [ 1013,   990,  940, 6907]
+  ]);
+
+var w = 600,
+    h = 600,
+    r0 = Math.min(w, h) * .41,
+    r1 = r0 * 1.1;
+
+var fill = d3.scale.ordinal()
+    .domain(d3.range(4))
+    .range(["#000000", "#FFDD89", "#957244", "#F26223"]);
+
+var svg = d3.select("#chart")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(" + w / 2 + "," + h / 2 + ")");
+
+svg.append("svg:g")
+  .selectAll("path")
+    .data(chord.groups)
+  .enter().append("svg:path")
+    .style("fill", function(d) { return fill(d.index); })
+    .style("stroke", function(d) { return fill(d.index); })
+    .attr("d", d3.svg.arc().innerRadius(r0).outerRadius(r1))
+    .on("mouseover", fade(.1))
+    .on("mouseout", fade(1));
+
+var ticks = svg.append("svg:g")
+  .selectAll("g")
+    .data(chord.groups)
+  .enter().append("svg:g")
+  .selectAll("g")
+    .data(groupTicks)
+  .enter().append("svg:g")
+    .attr("transform", function(d) {
+      return "rotate(" + (d.angle * 180 / Math.PI - 90) + ")"
+          + "translate(" + r1 + ",0)";
+    });
+
+ticks.append("svg:line")
+    .attr("x1", 1)
+    .attr("y1", 0)
+    .attr("x2", 5)
+    .attr("y2", 0)
+    .style("stroke", "#000");
+
+ticks.append("svg:text")
+    .attr("x", 8)
+    .attr("dy", ".35em")
+    .attr("text-anchor", function(d) {
+      return d.angle > Math.PI ? "end" : null;
+    })
+    .attr("transform", function(d) {
+      return d.angle > Math.PI ? "rotate(180)translate(-16)" : null;
+    })
+    .text(function(d) { return d.label; });
+
+svg.append("svg:g")
+    .attr("class", "chord")
+  .selectAll("path")
+    .data(chord.chords)
+  .enter().append("svg:path")
+    .style("fill", function(d) { return fill(d.target.index); })
+    .attr("d", d3.svg.chord().radius(r0))
+    .style("opacity", 1);
+
+/** Returns an array of tick angles and labels, given a group. */
+function groupTicks(d) {
+  var k = (d.endAngle - d.startAngle) / d.value;
+  return d3.range(0, d.value, 1000).map(function(v, i) {
+    return {
+      angle: v * k + d.startAngle,
+      label: i % 5 ? null : v / 1000 + "k"
+    };
+  });
+}
+
+/** Returns an event handler for fading a given chord group. */
+function fade(opacity) {
+  return function(g, i) {
+    svg.selectAll("g.chord path")
+        .filter(function(d) {
+          return d.source.index != i && d.target.index != i;
+        })
+      .transition()
+        .style("opacity", opacity);
+  };
+}
Index: /Dev/trunk/d3/examples/choropleth/choropleth-area.html
===================================================================
--- /Dev/trunk/d3/examples/choropleth/choropleth-area.html	(revision 76)
+++ /Dev/trunk/d3/examples/choropleth/choropleth-area.html	(revision 76)
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.behavior.js"></script>
+    <style type="text/css">
+
+svg {
+  background: #eee;
+  width: 960px;
+  height: 500px;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var svg = d3.select("body")
+  .append("svg:svg")
+    .call(d3.behavior.zoom()
+    .on("zoom", redraw))
+  .append("svg:g");
+
+var counties = svg.append("svg:g")
+    .attr("id", "counties");
+
+var path = d3.geo.path();
+
+var fill = d3.scale.log()
+    .domain([10, 500])
+    .range(["brown", "steelblue"]);
+
+d3.json("../data/us-counties.json", function(json) {
+  counties.selectAll("path")
+      .data(json.features)
+    .enter().append("svg:path")
+      .attr("d", path)
+      .attr("fill", function(d) { return fill(path.area(d)); });
+});
+
+function redraw() {
+  svg.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/choropleth/choropleth-bounds.html
===================================================================
--- /Dev/trunk/d3/examples/choropleth/choropleth-bounds.html	(revision 76)
+++ /Dev/trunk/d3/examples/choropleth/choropleth-bounds.html	(revision 76)
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <style type="text/css">
+
+svg {
+  background: #eee;
+  width: 960px;
+  height: 500px;
+}
+
+#counties path {
+  stroke: steelblue;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var svg = d3.select("body")
+  .append("svg:svg");
+
+var counties = svg.append("svg:g")
+    .attr("id", "counties");
+
+var path = d3.geo.path();
+
+d3.json("../data/us-counties.json", function(json) {
+  counties.selectAll("path")
+      .data(json.features)
+    .enter().append("svg:path")
+      .attr("d", function(d) {
+        return path({
+          type: "LineString",
+          coordinates: d3.geo.bounds(d)
+        });
+      });
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/choropleth/choropleth.css
===================================================================
--- /Dev/trunk/d3/examples/choropleth/choropleth.css	(revision 76)
+++ /Dev/trunk/d3/examples/choropleth/choropleth.css	(revision 76)
@@ -0,0 +1,16 @@
+svg {
+  background: #eee;
+  width: 960px;
+  height: 500px;
+}
+
+#counties path {
+  stroke: #fff;
+  stroke-width: .25px;
+}
+
+#states path {
+  fill: none;
+  stroke: #fff;
+  stroke-width: 1.5px;
+}
Index: /Dev/trunk/d3/examples/choropleth/choropleth.html
===================================================================
--- /Dev/trunk/d3/examples/choropleth/choropleth.html	(revision 76)
+++ /Dev/trunk/d3/examples/choropleth/choropleth.html	(revision 76)
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>U.S. Unemployment by County</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <link type="text/css" rel="stylesheet" href="choropleth.css"/>
+    <link type="text/css" rel="stylesheet" href="../../lib/colorbrewer/colorbrewer.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="choropleth.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/choropleth/choropleth.js
===================================================================
--- /Dev/trunk/d3/examples/choropleth/choropleth.js	(revision 76)
+++ /Dev/trunk/d3/examples/choropleth/choropleth.js	(revision 76)
@@ -0,0 +1,38 @@
+var data; // loaded asynchronously
+
+var path = d3.geo.path();
+
+var svg = d3.select("#chart")
+  .append("svg:svg");
+
+var counties = svg.append("svg:g")
+    .attr("id", "counties")
+    .attr("class", "Blues");
+
+var states = svg.append("svg:g")
+    .attr("id", "states");
+
+d3.json("../data/us-counties.json", function(json) {
+  counties.selectAll("path")
+      .data(json.features)
+    .enter().append("svg:path")
+      .attr("class", data ? quantize : null)
+      .attr("d", path);
+});
+
+d3.json("../data/us-states.json", function(json) {
+  states.selectAll("path")
+      .data(json.features)
+    .enter().append("svg:path")
+      .attr("d", path);
+});
+
+d3.json("unemployment.json", function(json) {
+  data = json;
+  counties.selectAll("path")
+      .attr("class", quantize);
+});
+
+function quantize(d) {
+  return "q" + Math.min(8, ~~(data[d.id] * 9 / 12)) + "-9";
+}
Index: /Dev/trunk/d3/examples/choropleth/unemployment.json
===================================================================
--- /Dev/trunk/d3/examples/choropleth/unemployment.json	(revision 76)
+++ /Dev/trunk/d3/examples/choropleth/unemployment.json	(revision 76)
@@ -0,0 +1,1 @@
+{"01001":9.7,"01003":9.1,"01005":13.4,"01007":12.1,"01009":9.9,"01011":16.4,"01013":16.7,"01015":10.8,"01017":18.6,"01019":11.8,"01021":9.9,"01023":12.7,"01025":17.0,"01027":15.9,"01029":10.4,"01031":8.5,"01033":11.4,"01035":19.5,"01037":14.0,"01039":10.1,"01041":9.7,"01043":9.6,"01045":9.3,"01047":21.1,"01049":14.3,"01051":9.0,"01053":12.9,"01055":10.7,"01057":12.8,"01059":12.3,"01061":10.0,"01063":14.7,"01065":12.7,"01067":9.9,"01069":8.9,"01071":11.8,"01073":10.7,"01075":14.8,"01077":10.5,"01079":13.6,"01081":8.6,"01083":9.3,"01085":18.5,"01087":11.4,"01089":7.5,"01091":14.8,"01093":15.2,"01095":9.2,"01097":11.1,"01099":18.7,"01101":10.2,"01103":10.4,"01105":19.8,"01107":13.0,"01109":8.7,"01111":15.1,"01113":12.6,"01115":10.7,"01117":7.6,"01119":13.9,"01121":13.6,"01123":13.7,"01125":9.0,"01127":11.9,"01129":15.1,"01131":25.6,"01133":17.5,"02013":10.1,"02016":8.4,"02020":7.0,"02050":14.8,"02060":3.6,"02068":3.4,"02070":8.4,"02090":6.9,"02100":6.2,"02110":5.7,"02122":9.7,"02130":6.1,"02150":6.6,"02164":5.9,"02170":8.8,"02180":12.1,"02185":5.7,"02188":13.2,"02201":13.6,"02220":5.9,"02232":7.3,"02240":8.1,"02261":6.4,"02270":20.4,"02280":9.8,"02282":6.3,"02290":13.6,"04001":14.8,"04003":7.4,"04005":7.7,"04007":10.9,"04009":14.4,"04011":21.5,"04012":8.9,"04013":8.5,"04015":10.2,"04017":14.2,"04019":8.4,"04021":11.8,"04023":17.2,"04025":9.5,"04027":24.2,"05001":14.3,"05003":9.1,"05005":8.2,"05007":5.3,"05009":6.4,"05011":7.8,"05013":6.2,"05015":4.3,"05017":9.6,"05019":6.3,"05021":10.4,"05023":5.9,"05025":6.0,"05027":8.1,"05029":6.5,"05031":5.9,"05033":6.6,"05035":9.9,"05037":7.1,"05039":7.6,"05041":9.9,"05043":9.1,"05045":6.0,"05047":5.9,"05049":6.1,"05051":6.6,"05053":5.7,"05055":8.2,"05057":8.6,"05059":7.3,"05061":7.2,"05063":7.8,"05065":7.7,"05067":9.2,"05069":9.2,"05071":6.1,"05073":8.6,"05075":7.9,"05077":8.2,"05079":8.2,"05081":5.6,"05083":7.7,"05085":5.2,"05087":5.3,"05089":11.2,"05091":4.5,"05093":11.3,"05095":7.4,"05097":5.8,"05099":8.7,"05101":6.2,"05103":7.1,"05105":5.6,"05107":8.8,"05109":6.3,"05111":7.5,"05113":6.4,"05115":6.2,"05117":6.7,"05119":6.0,"05121":7.3,"05123":9.4,"05125":5.8,"05127":6.3,"05129":5.9,"05131":6.2,"05133":5.1,"05135":7.8,"05137":6.6,"05139":9.5,"05141":9.1,"05143":5.0,"05145":6.7,"05147":9.1,"05149":6.4,"06001":11.3,"06003":15.2,"06005":12.1,"06007":12.2,"06009":14.3,"06011":14.5,"06013":11.2,"06015":11.9,"06017":11.2,"06019":14.1,"06021":13.8,"06023":10.3,"06025":30.1,"06027":9.5,"06029":13.9,"06031":13.9,"06033":14.7,"06035":11.8,"06037":12.7,"06039":12.3,"06041":8.0,"06043":8.8,"06045":10.1,"06047":15.7,"06049":11.1,"06051":10.3,"06053":10.0,"06055":8.7,"06057":10.9,"06059":9.4,"06061":11.3,"06063":13.9,"06065":14.7,"06067":12.2,"06069":12.5,"06071":13.6,"06073":10.2,"06075":9.7,"06077":15.5,"06079":9.0,"06081":9.0,"06083":8.5,"06085":11.8,"06087":10.2,"06089":14.7,"06091":13.7,"06093":13.5,"06095":11.5,"06097":9.9,"06099":15.3,"06101":15.1,"06103":13.7,"06105":15.9,"06107":14.9,"06109":12.7,"06111":11.0,"06113":10.9,"06115":17.8,"08001":8.1,"08003":5.5,"08005":6.9,"08007":6.2,"08009":3.4,"08011":5.0,"08013":5.5,"08014":6.6,"08015":5.1,"08017":2.0,"08019":7.0,"08021":5.1,"08023":8.4,"08025":7.6,"08027":5.2,"08029":6.6,"08031":7.7,"08033":13.2,"08035":5.9,"08037":6.2,"08039":6.0,"08041":7.2,"08043":7.7,"08045":5.8,"08047":6.0,"08049":5.8,"08051":4.4,"08053":2.2,"08055":7.2,"08057":3.3,"08059":6.7,"08061":2.8,"08063":2.9,"08065":7.1,"08067":4.7,"08069":5.6,"08071":7.0,"08073":3.7,"08075":4.6,"08077":8.2,"08079":5.3,"08081":5.6,"08083":6.3,"08085":6.9,"08087":4.9,"08089":5.8,"08091":4.1,"08093":6.1,"08095":2.6,"08097":5.0,"08099":5.0,"08101":7.5,"08103":3.9,"08105":4.8,"08107":6.0,"08109":7.8,"08111":5.3,"08113":4.2,"08115":3.3,"08117":5.8,"08119":6.7,"08121":3.2,"08123":7.5,"08125":2.6,"09001":7.8,"09003":8.8,"09005":7.9,"09007":6.7,"09009":8.9,"09011":7.6,"09013":6.7,"09015":9.0,"10001":7.9,"10003":8.6,"10005":7.3,"11001":11.7,"12001":7.1,"12003":11.4,"12005":8.9,"12007":8.3,"12009":11.1,"12011":9.8,"12013":8.2,"12015":12.7,"12017":12.1,"12019":9.8,"12021":13.1,"12023":9.0,"12027":11.7,"12029":12.3,"12031":11.2,"12033":9.8,"12035":16.2,"12037":7.1,"12039":9.6,"12041":10.0,"12043":10.0,"12045":9.8,"12047":11.3,"12049":12.6,"12051":16.8,"12053":13.8,"12055":11.6,"12057":11.5,"12059":7.2,"12061":15.2,"12063":7.2,"12065":8.5,"12067":7.2,"12069":12.3,"12071":13.9,"12073":7.2,"12075":12.1,"12077":5.3,"12079":11.7,"12081":12.7,"12083":13.3,"12085":11.9,"12086":11.3,"12087":7.0,"12089":10.7,"12091":7.2,"12093":13.3,"12095":11.4,"12097":12.8,"12099":11.7,"12101":12.5,"12103":11.2,"12105":12.7,"12107":12.2,"12109":9.0,"12111":15.3,"12113":9.4,"12115":12.3,"12117":10.6,"12119":9.0,"12121":9.8,"12123":10.4,"12125":8.4,"12127":11.7,"12129":7.2,"12131":6.8,"12133":9.6,"13001":9.7,"13003":12.6,"13005":8.5,"13007":9.1,"13009":11.6,"13011":6.7,"13013":11.1,"13015":13.3,"13017":15.3,"13019":12.4,"13021":10.0,"13023":9.7,"13025":11.6,"13027":8.7,"13029":8.1,"13031":9.0,"13033":12.2,"13035":12.7,"13037":11.1,"13039":9.1,"13043":9.3,"13045":10.8,"13047":8.0,"13049":10.6,"13051":8.5,"13053":14.6,"13055":11.4,"13057":9.5,"13059":7.0,"13061":8.2,"13063":12.3,"13065":11.0,"13067":9.6,"13069":16.8,"13071":9.0,"13073":7.0,"13075":11.9,"13077":10.0,"13079":9.5,"13081":12.1,"13083":9.0,"13085":10.1,"13087":12.7,"13089":10.7,"13091":11.2,"13093":10.1,"13095":11.1,"13097":11.4,"13099":10.5,"13101":6.7,"13103":7.9,"13105":12.2,"13107":10.3,"13109":8.9,"13111":10.0,"13113":8.4,"13115":11.1,"13117":8.6,"13119":11.8,"13121":10.7,"13123":9.8,"13125":11.1,"13127":8.2,"13129":13.1,"13131":9.8,"13133":11.1,"13135":9.4,"13137":9.4,"13139":9.1,"13141":17.7,"13143":11.3,"13145":7.2,"13147":13.8,"13149":12.4,"13151":10.4,"13153":7.3,"13155":14.5,"13157":10.9,"13159":12.7,"13161":13.5,"13163":14.9,"13165":19.6,"13167":11.9,"13169":8.6,"13171":15.3,"13173":8.4,"13175":10.8,"13177":7.9,"13179":8.5,"13181":10.3,"13183":5.9,"13185":8.2,"13187":11.1,"13189":12.1,"13191":9.6,"13193":13.0,"13195":8.3,"13197":9.9,"13199":13.2,"13201":8.7,"13205":10.4,"13207":10.2,"13209":8.5,"13211":9.8,"13213":12.3,"13215":9.2,"13217":12.6,"13219":6.2,"13221":8.2,"13223":10.7,"13225":10.2,"13227":10.8,"13229":9.3,"13231":11.8,"13233":10.8,"13235":7.1,"13237":10.4,"13239":11.8,"13241":10.4,"13243":13.0,"13245":10.3,"13247":12.0,"13249":13.8,"13251":13.7,"13253":10.7,"13255":15.4,"13257":10.7,"13259":10.7,"13261":12.9,"13263":9.8,"13265":12.4,"13267":8.7,"13269":13.0,"13271":16.2,"13273":11.6,"13275":9.3,"13277":10.6,"13279":9.8,"13281":7.8,"13283":11.9,"13285":12.9,"13287":13.0,"13289":11.4,"13291":9.0,"13293":13.3,"13295":9.6,"13297":11.0,"13299":10.7,"13301":18.8,"13303":14.0,"13305":11.7,"13307":9.1,"13309":9.1,"13311":9.5,"13313":12.5,"13315":11.6,"13317":11.7,"13319":10.7,"13321":10.8,"15001":10.8,"15003":6.3,"15007":9.6,"15009":9.7,"16001":9.1,"16003":12.1,"16005":8.4,"16007":5.2,"16009":12.1,"16011":5.9,"16013":7.7,"16015":7.1,"16017":9.5,"16019":5.9,"16021":12.0,"16023":4.5,"16025":11.0,"16027":10.6,"16029":6.0,"16031":5.9,"16033":4.1,"16035":11.8,"16037":3.9,"16039":7.7,"16041":4.0,"16043":6.6,"16045":10.4,"16047":5.5,"16049":8.3,"16051":6.8,"16053":5.9,"16055":8.7,"16057":5.9,"16059":6.5,"16061":5.2,"16063":9.7,"16065":5.5,"16067":6.0,"16069":5.5,"16071":5.0,"16073":4.1,"16075":7.7,"16077":6.7,"16079":11.9,"16081":5.1,"16083":6.8,"16085":11.4,"16087":8.4,"17001":7.9,"17003":11.2,"17005":9.3,"17007":13.8,"17009":4.5,"17011":10.9,"17013":9.5,"17015":10.5,"17017":7.3,"17019":8.2,"17021":9.9,"17023":13.1,"17025":11.4,"17027":7.9,"17029":9.1,"17031":10.6,"17033":10.5,"17035":9.7,"17037":9.2,"17039":9.2,"17041":9.1,"17043":8.6,"17045":10.7,"17047":9.1,"17049":7.9,"17051":11.6,"17053":10.4,"17055":14.6,"17057":12.5,"17059":11.0,"17061":9.2,"17063":11.4,"17065":9.3,"17067":11.3,"17069":12.8,"17071":9.4,"17073":8.6,"17075":10.0,"17077":7.3,"17079":9.5,"17081":10.0,"17083":8.8,"17085":8.1,"17087":10.4,"17089":9.9,"17091":12.8,"17093":10.4,"17095":10.3,"17097":10.0,"17099":12.4,"17101":10.3,"17103":10.9,"17105":10.7,"17107":9.5,"17109":7.7,"17111":9.3,"17113":7.4,"17115":12.4,"17117":10.5,"17119":9.7,"17121":11.9,"17123":10.6,"17125":14.3,"17127":8.0,"17129":7.8,"17131":8.9,"17133":7.8,"17135":12.2,"17137":8.4,"17139":9.0,"17141":11.9,"17143":11.6,"17145":11.9,"17147":8.2,"17149":8.1,"17151":10.6,"17153":11.9,"17155":15.0,"17157":9.4,"17159":10.5,"17161":9.5,"17163":10.8,"17165":11.2,"17167":7.9,"17169":6.6,"17171":7.5,"17173":10.0,"17175":9.8,"17177":11.6,"17179":11.3,"17181":10.8,"17183":12.0,"17185":10.3,"17187":8.0,"17189":8.0,"17191":9.7,"17193":8.6,"17195":10.6,"17197":9.9,"17199":9.6,"17201":15.5,"17203":8.6,"18001":13.4,"18003":9.3,"18005":8.8,"18007":9.0,"18009":13.3,"18011":6.8,"18013":7.8,"18015":9.9,"18017":10.5,"18019":8.2,"18021":9.6,"18023":9.2,"18025":10.5,"18027":4.9,"18029":8.9,"18031":11.0,"18033":12.4,"18035":9.5,"18037":8.0,"18039":15.0,"18041":13.4,"18043":7.4,"18045":11.6,"18047":8.9,"18049":11.2,"18051":6.7,"18053":11.1,"18055":7.1,"18057":6.1,"18059":7.8,"18061":7.8,"18063":6.8,"18065":12.0,"18067":11.9,"18069":11.1,"18071":10.1,"18073":8.7,"18075":10.4,"18077":9.5,"18079":12.2,"18081":7.4,"18083":6.6,"18085":11.0,"18087":14.0,"18089":9.4,"18091":10.7,"18093":11.1,"18095":9.7,"18097":8.4,"18099":11.4,"18101":6.3,"18103":12.3,"18105":5.6,"18107":9.7,"18109":7.5,"18111":8.9,"18113":14.5,"18115":10.5,"18117":9.2,"18119":8.1,"18121":8.3,"18123":8.8,"18125":8.7,"18127":8.2,"18129":7.0,"18131":9.5,"18133":8.2,"18135":10.2,"18137":9.1,"18139":9.5,"18141":10.4,"18143":12.1,"18145":8.8,"18147":8.1,"18149":12.6,"18151":12.9,"18153":9.3,"18155":7.0,"18157":8.5,"18159":10.3,"18161":8.6,"18163":7.4,"18165":10.8,"18167":9.2,"18169":12.0,"18171":10.1,"18173":6.9,"18175":11.2,"18177":10.9,"18179":9.1,"18181":9.4,"18183":11.6,"19001":5.1,"19003":6.0,"19005":9.3,"19007":9.4,"19009":5.1,"19011":5.8,"19013":5.8,"19015":5.9,"19017":5.0,"19019":5.9,"19021":5.5,"19023":6.0,"19025":5.4,"19027":4.2,"19029":5.8,"19031":5.7,"19033":6.7,"19035":4.4,"19037":8.4,"19039":7.4,"19041":6.2,"19043":7.9,"19045":7.7,"19047":4.7,"19049":5.1,"19051":10.1,"19053":6.6,"19055":6.8,"19057":8.2,"19059":5.8,"19061":6.0,"19063":8.6,"19065":8.5,"19067":8.7,"19069":7.0,"19071":7.0,"19073":6.3,"19075":4.9,"19077":5.6,"19079":8.1,"19081":9.0,"19083":6.0,"19085":4.4,"19087":8.8,"19089":8.6,"19091":6.2,"19093":5.8,"19095":5.8,"19097":7.7,"19099":8.1,"19101":8.7,"19103":4.4,"19105":6.3,"19107":7.1,"19109":5.6,"19111":11.4,"19113":6.5,"19115":8.0,"19117":6.0,"19119":4.3,"19121":5.8,"19123":7.7,"19125":5.7,"19127":7.0,"19129":4.3,"19131":5.4,"19133":7.1,"19135":7.5,"19137":8.7,"19139":8.9,"19141":5.3,"19143":5.4,"19145":8.7,"19147":7.0,"19149":4.7,"19151":5.2,"19153":6.2,"19155":4.8,"19157":6.6,"19159":5.3,"19161":4.7,"19163":7.3,"19165":3.9,"19167":4.1,"19169":4.5,"19171":6.6,"19173":6.7,"19175":6.0,"19177":8.0,"19179":9.4,"19181":5.8,"19183":4.9,"19185":6.4,"19187":8.3,"19189":9.1,"19191":5.8,"19193":5.7,"19195":6.3,"19197":8.4,"20001":7.8,"20003":7.9,"20005":8.1,"20007":5.1,"20009":6.1,"20011":6.5,"20013":5.6,"20015":7.2,"20017":5.4,"20019":8.4,"20021":8.5,"20023":3.7,"20025":3.7,"20027":4.2,"20029":4.5,"20031":5.7,"20033":3.8,"20035":7.6,"20037":8.1,"20039":3.3,"20041":5.1,"20043":8.8,"20045":5.4,"20047":4.4,"20049":11.0,"20051":3.6,"20053":4.1,"20055":4.3,"20057":3.8,"20059":7.1,"20061":6.9,"20063":3.5,"20065":4.3,"20067":4.2,"20069":3.4,"20071":4.5,"20073":7.2,"20075":4.2,"20077":5.6,"20079":7.4,"20081":3.7,"20083":4.2,"20085":6.0,"20087":6.7,"20089":4.9,"20091":6.8,"20093":4.5,"20095":6.3,"20097":4.9,"20099":7.8,"20101":3.4,"20103":7.3,"20105":6.3,"20107":8.4,"20109":4.0,"20111":5.7,"20113":5.1,"20115":6.3,"20117":4.9,"20119":4.2,"20121":6.8,"20123":5.8,"20125":9.4,"20127":6.8,"20129":4.7,"20131":4.3,"20133":7.0,"20135":4.0,"20137":4.7,"20139":7.0,"20141":4.4,"20143":6.5,"20145":3.7,"20147":6.0,"20149":4.1,"20151":5.3,"20153":3.5,"20155":6.3,"20157":4.1,"20159":5.1,"20161":3.2,"20163":7.3,"20165":5.9,"20167":4.6,"20169":5.7,"20171":3.2,"20173":8.8,"20175":5.1,"20177":6.4,"20179":3.2,"20181":3.9,"20183":4.3,"20185":6.1,"20187":3.4,"20189":5.3,"20191":9.0,"20193":3.6,"20195":3.6,"20197":6.6,"20199":5.9,"20201":4.5,"20203":3.5,"20205":10.2,"20207":8.9,"20209":10.4,"21001":10.1,"21003":14.3,"21005":10.9,"21007":10.2,"21009":11.6,"21011":13.3,"21013":12.5,"21015":9.2,"21017":9.1,"21019":8.3,"21021":11.0,"21023":10.2,"21025":10.0,"21027":12.1,"21029":10.8,"21031":13.7,"21033":10.9,"21035":8.0,"21037":10.7,"21039":9.1,"21041":12.4,"21043":13.5,"21045":10.2,"21047":12.9,"21049":11.4,"21051":13.5,"21053":9.0,"21055":10.8,"21057":13.0,"21059":9.1,"21061":12.8,"21063":12.6,"21065":12.9,"21067":7.7,"21069":12.2,"21071":12.4,"21073":9.1,"21075":14.4,"21077":11.1,"21079":11.9,"21081":10.1,"21083":10.3,"21085":16.4,"21087":12.4,"21089":9.8,"21091":13.6,"21093":10.0,"21095":12.5,"21097":11.1,"21099":10.6,"21101":9.8,"21103":10.7,"21105":9.2,"21107":9.1,"21109":17.5,"21111":10.5,"21113":8.8,"21115":11.1,"21117":10.0,"21119":12.0,"21121":11.5,"21123":10.7,"21125":10.1,"21127":13.1,"21129":12.3,"21131":13.7,"21133":12.0,"21135":15.1,"21137":12.1,"21139":9.8,"21141":10.4,"21143":12.2,"21145":9.1,"21147":13.3,"21149":10.6,"21151":8.7,"21153":21.4,"21155":12.9,"21157":10.7,"21159":12.4,"21161":11.1,"21163":12.4,"21165":14.7,"21167":10.8,"21169":15.8,"21171":14.0,"21173":12.6,"21175":14.5,"21177":10.7,"21179":11.5,"21181":12.5,"21183":9.4,"21185":8.6,"21187":10.1,"21189":11.2,"21191":11.7,"21193":12.5,"21195":10.7,"21197":16.7,"21199":10.0,"21201":9.6,"21203":12.8,"21205":8.6,"21207":10.8,"21209":9.1,"21211":9.6,"21213":11.8,"21215":10.2,"21217":10.2,"21219":12.6,"21221":16.0,"21223":10.7,"21225":10.8,"21227":9.2,"21229":12.7,"21231":13.6,"21233":8.8,"21235":11.4,"21237":13.9,"21239":8.3,"22001":7.1,"22003":10.1,"22005":6.7,"22007":8.8,"22009":8.1,"22011":8.0,"22013":10.5,"22015":6.4,"22017":7.9,"22019":7.2,"22021":10.7,"22023":5.6,"22025":10.3,"22027":10.3,"22029":11.3,"22031":9.0,"22033":6.8,"22035":14.2,"22037":8.0,"22039":8.6,"22041":11.3,"22043":8.2,"22045":7.6,"22047":10.4,"22049":7.8,"22051":6.5,"22053":6.4,"22055":5.9,"22057":4.9,"22059":7.3,"22061":7.8,"22063":7.0,"22065":9.3,"22067":15.1,"22069":8.4,"22071":10.7,"22073":7.6,"22075":6.2,"22077":7.9,"22079":6.9,"22081":9.6,"22083":10.7,"22085":8.1,"22087":10.5,"22089":6.5,"22091":11.8,"22093":10.0,"22095":8.4,"22097":8.3,"22099":7.5,"22101":8.6,"22103":5.2,"22105":8.1,"22107":13.5,"22109":5.2,"22111":12.2,"22113":7.2,"22115":6.7,"22117":9.6,"22119":9.1,"22121":7.4,"22123":17.0,"22125":8.2,"22127":9.1,"23001":8.4,"23003":9.3,"23005":6.5,"23007":11.2,"23009":6.8,"23011":7.3,"23013":7.0,"23015":6.3,"23017":10.9,"23019":8.0,"23021":11.6,"23023":6.7,"23025":10.7,"23027":7.8,"23029":10.4,"23031":7.4,"24001":7.5,"24003":6.5,"24005":7.7,"24009":5.9,"24011":8.8,"24013":6.0,"24015":8.6,"24017":5.9,"24019":10.9,"24021":5.9,"24023":6.9,"24025":7.1,"24027":5.4,"24029":7.1,"24031":5.3,"24033":7.3,"24035":6.6,"24037":5.6,"24039":9.5,"24041":6.8,"24043":9.4,"24045":7.7,"24047":7.5,"24510":10.6,"25001":8.0,"25003":8.4,"25005":11.8,"25007":5.0,"25009":10.1,"25011":8.7,"25013":10.5,"25015":7.3,"25017":8.1,"25019":5.0,"25021":8.5,"25023":9.7,"25025":9.3,"25027":10.1,"26001":16.7,"26003":12.0,"26005":13.2,"26007":13.9,"26009":14.7,"26011":15.8,"26013":24.3,"26015":10.5,"26017":12.3,"26019":12.0,"26021":13.5,"26023":14.0,"26025":12.4,"26027":11.4,"26029":13.9,"26031":8.6,"26033":11.6,"26035":16.8,"26037":9.4,"26039":13.7,"26041":11.5,"26043":12.0,"26045":10.3,"26047":12.2,"26049":15.8,"26051":16.5,"26053":13.3,"26055":12.0,"26057":13.7,"26059":17.2,"26061":10.2,"26063":14.8,"26065":11.6,"26067":13.4,"26069":16.4,"26071":11.7,"26073":8.5,"26075":14.9,"26077":11.2,"26079":14.3,"26081":11.7,"26083":11.9,"26085":17.5,"26087":18.1,"26089":9.0,"26091":16.1,"26093":13.6,"26095":13.2,"26097":6.1,"26099":18.1,"26101":12.6,"26103":10.1,"26105":12.9,"26107":13.0,"26109":12.5,"26111":10.2,"26113":15.0,"26115":14.2,"26117":17.6,"26119":18.9,"26121":16.0,"26123":13.8,"26125":15.6,"26127":15.2,"26129":12.7,"26131":13.8,"26133":15.3,"26135":19.1,"26137":14.7,"26139":12.8,"26141":16.0,"26143":14.6,"26145":12.9,"26147":19.0,"26149":13.9,"26151":17.8,"26153":12.7,"26155":15.2,"26157":16.3,"26159":13.2,"26161":9.3,"26163":18.3,"26165":18.3,"27001":8.1,"27003":7.9,"27005":6.4,"27007":7.2,"27009":7.0,"27011":4.5,"27013":6.3,"27015":5.5,"27017":7.3,"27019":7.0,"27021":7.9,"27023":6.1,"27025":8.4,"27027":3.6,"27029":9.1,"27031":4.7,"27033":5.2,"27035":7.4,"27037":6.9,"27039":6.1,"27041":5.6,"27043":7.6,"27045":7.0,"27047":7.6,"27049":6.7,"27051":6.8,"27053":7.3,"27055":7.1,"27057":7.3,"27059":8.3,"27061":9.2,"27063":4.7,"27065":10.3,"27067":5.5,"27069":5.2,"27071":7.3,"27073":5.4,"27075":7.5,"27077":6.9,"27079":8.6,"27081":4.5,"27083":4.9,"27085":8.0,"27087":6.0,"27089":6.2,"27091":6.9,"27093":7.8,"27095":10.5,"27097":9.0,"27099":5.5,"27101":3.9,"27103":6.1,"27105":4.5,"27107":5.1,"27109":5.5,"27111":6.3,"27113":5.6,"27115":9.1,"27117":5.3,"27119":4.4,"27121":6.4,"27123":7.4,"27125":6.7,"27127":6.1,"27129":6.4,"27131":7.5,"27133":5.1,"27135":5.0,"27137":8.2,"27139":6.8,"27141":8.1,"27143":6.5,"27145":6.8,"27147":7.7,"27149":4.3,"27151":6.6,"27153":7.5,"27155":6.2,"27157":7.1,"27159":8.8,"27161":7.0,"27163":6.8,"27165":7.5,"27167":4.7,"27169":7.0,"27171":8.2,"27173":5.1,"28001":8.0,"28003":11.3,"28005":8.6,"28007":11.8,"28009":12.6,"28011":9.0,"28013":9.7,"28015":9.8,"28017":13.2,"28019":11.3,"28021":15.0,"28023":10.0,"28025":17.8,"28027":11.1,"28029":9.9,"28031":7.7,"28033":7.2,"28035":7.7,"28037":9.0,"28039":10.0,"28041":9.9,"28043":11.0,"28045":7.5,"28047":7.2,"28049":7.9,"28051":16.6,"28053":10.2,"28055":9.2,"28057":9.6,"28059":8.0,"28061":10.2,"28063":15.5,"28065":10.6,"28067":7.1,"28069":10.3,"28071":6.9,"28073":6.6,"28075":8.7,"28077":10.2,"28079":8.7,"28081":9.8,"28083":11.6,"28085":8.8,"28087":10.2,"28089":6.3,"28091":10.1,"28093":11.2,"28095":13.7,"28097":12.7,"28099":8.4,"28101":7.9,"28103":17.6,"28105":8.0,"28107":11.9,"28109":8.3,"28111":10.4,"28113":9.8,"28115":8.7,"28117":11.5,"28119":11.1,"28121":5.6,"28123":5.9,"28125":9.0,"28127":8.2,"28129":8.2,"28131":7.2,"28133":11.8,"28135":9.9,"28137":10.3,"28139":12.5,"28141":10.1,"28143":13.0,"28145":8.8,"28147":10.3,"28149":9.1,"28151":11.3,"28153":9.4,"28155":13.5,"28157":10.1,"28159":15.1,"28161":12.9,"28163":10.5,"29001":6.5,"29003":7.6,"29005":7.9,"29007":9.2,"29009":8.1,"29011":11.7,"29013":10.8,"29015":9.3,"29017":8.8,"29019":6.2,"29021":8.7,"29023":8.0,"29025":8.6,"29027":8.0,"29029":7.9,"29031":6.9,"29033":9.8,"29035":8.7,"29037":9.7,"29039":8.6,"29041":10.5,"29043":8.0,"29045":11.3,"29047":8.6,"29049":8.7,"29051":6.7,"29053":8.4,"29055":10.7,"29057":10.1,"29059":9.4,"29061":8.7,"29063":9.3,"29065":9.4,"29067":9.8,"29069":11.1,"29071":11.5,"29073":10.8,"29075":6.8,"29077":8.3,"29079":6.9,"29081":7.8,"29083":9.6,"29085":12.3,"29087":7.1,"29089":8.3,"29091":9.2,"29093":8.7,"29095":10.9,"29097":8.4,"29099":10.6,"29101":8.0,"29103":5.9,"29105":11.0,"29107":9.0,"29109":7.8,"29111":8.3,"29113":11.3,"29115":10.3,"29117":7.8,"29119":7.0,"29121":7.9,"29123":9.8,"29125":8.7,"29127":8.9,"29129":7.9,"29131":10.6,"29133":9.7,"29135":7.8,"29137":11.0,"29139":10.3,"29141":11.3,"29143":8.9,"29145":7.9,"29147":5.9,"29149":9.0,"29151":9.9,"29153":7.6,"29155":12.1,"29157":7.2,"29159":8.1,"29161":7.1,"29163":8.3,"29165":8.0,"29167":8.9,"29169":6.8,"29171":7.4,"29173":8.0,"29175":9.4,"29177":8.3,"29179":12.7,"29181":9.5,"29183":8.7,"29185":10.3,"29186":9.3,"29187":10.9,"29189":9.6,"29195":7.9,"29197":7.8,"29199":12.2,"29201":9.2,"29203":9.6,"29205":8.1,"29207":9.0,"29209":9.0,"29211":6.4,"29213":8.6,"29215":8.8,"29217":7.9,"29219":11.2,"29221":13.7,"29223":9.5,"29225":9.0,"29227":8.4,"29229":9.6,"29510":11.1,"30001":4.4,"30003":10.2,"30005":5.0,"30007":6.2,"30009":4.8,"30011":3.9,"30013":5.2,"30015":4.2,"30017":4.6,"30019":4.2,"30021":4.8,"30023":6.5,"30025":3.7,"30027":4.7,"30029":8.8,"30031":5.5,"30033":3.4,"30035":7.2,"30037":4.7,"30039":8.2,"30041":5.1,"30043":5.8,"30045":4.6,"30047":8.3,"30049":4.3,"30051":4.7,"30053":11.1,"30055":3.2,"30057":4.8,"30059":7.8,"30061":8.6,"30063":5.6,"30065":7.5,"30067":6.1,"30069":4.5,"30071":4.8,"30073":6.0,"30075":4.0,"30077":7.3,"30079":3.1,"30081":7.5,"30083":4.6,"30085":7.5,"30087":7.3,"30089":11.2,"30091":4.3,"30093":5.5,"30095":5.2,"30097":3.1,"30099":4.0,"30101":4.1,"30103":5.1,"30105":4.6,"30107":4.3,"30109":4.1,"30111":4.7,"31001":5.6,"31003":3.6,"31005":4.4,"31007":3.5,"31009":5.2,"31011":3.9,"31013":7.1,"31015":3.6,"31017":3.1,"31019":3.5,"31021":5.7,"31023":3.9,"31025":4.6,"31027":3.2,"31029":3.0,"31031":2.5,"31033":4.1,"31035":4.3,"31037":4.0,"31039":3.5,"31041":3.1,"31043":5.5,"31045":4.4,"31047":4.8,"31049":3.8,"31051":3.7,"31053":4.9,"31055":5.0,"31057":4.0,"31059":4.4,"31061":3.7,"31063":3.0,"31065":4.1,"31067":5.9,"31069":4.4,"31071":2.5,"31073":3.8,"31075":3.1,"31077":3.3,"31079":4.4,"31081":3.4,"31083":3.6,"31085":4.2,"31087":6.6,"31089":3.2,"31091":4.0,"31093":3.8,"31095":4.6,"31097":3.9,"31099":3.8,"31101":3.9,"31103":4.4,"31105":4.3,"31107":3.6,"31109":4.2,"31111":4.0,"31113":4.3,"31115":3.2,"31117":4.0,"31119":4.2,"31121":4.0,"31123":4.1,"31125":3.6,"31127":5.4,"31129":4.7,"31131":5.0,"31133":4.1,"31135":3.1,"31137":3.8,"31139":3.6,"31141":4.4,"31143":4.2,"31145":4.2,"31147":5.7,"31149":3.1,"31151":4.0,"31153":4.7,"31155":4.5,"31157":4.8,"31159":3.7,"31161":3.5,"31163":3.0,"31165":3.8,"31167":3.6,"31169":4.3,"31171":3.8,"31173":13.8,"31175":2.9,"31177":4.1,"31179":3.8,"31181":4.2,"31183":3.2,"31185":5.7,"32001":9.9,"32003":13.9,"32005":12.6,"32007":6.8,"32009":8.3,"32011":9.3,"32013":8.6,"32015":7.2,"32017":9.4,"32019":16.3,"32021":10.5,"32023":16.1,"32027":10.6,"32029":14.8,"32031":13.1,"32033":8.4,"32510":12.8,"33001":7.0,"33003":5.4,"33005":6.5,"33007":7.8,"33009":5.6,"33011":7.5,"33013":6.3,"33015":7.5,"33017":6.6,"33019":6.5,"34001":12.2,"34003":8.4,"34005":9.1,"34007":10.9,"34009":8.5,"34011":12.6,"34013":11.1,"34015":10.0,"34017":11.6,"34019":6.9,"34021":8.1,"34023":9.2,"34025":8.7,"34027":7.6,"34029":9.6,"34031":11.7,"34033":10.1,"34035":7.9,"34037":8.5,"34039":9.8,"34041":8.8,"35001":7.5,"35003":8.1,"35005":6.8,"35006":6.3,"35007":8.0,"35009":4.4,"35011":4.3,"35013":6.9,"35015":6.0,"35017":12.3,"35019":7.5,"35021":4.5,"35023":7.6,"35025":8.3,"35027":5.1,"35028":2.9,"35029":13.4,"35031":8.6,"35033":13.1,"35035":6.8,"35037":5.9,"35039":7.2,"35041":4.4,"35043":9.0,"35045":8.3,"35047":7.8,"35049":6.5,"35051":4.8,"35053":5.0,"35055":8.7,"35057":8.8,"35059":5.5,"35061":8.5,"36001":7.1,"36003":7.9,"36005":13.3,"36007":8.5,"36009":8.5,"36011":8.0,"36013":7.8,"36015":8.9,"36017":8.7,"36019":9.0,"36021":7.7,"36023":8.5,"36025":8.4,"36027":8.2,"36029":8.3,"36031":7.8,"36033":7.8,"36035":9.1,"36037":7.2,"36039":8.4,"36041":5.6,"36043":7.6,"36045":7.8,"36047":11.0,"36049":7.6,"36051":7.5,"36053":7.4,"36055":8.3,"36057":8.8,"36059":7.2,"36061":9.2,"36063":8.8,"36065":7.3,"36067":7.9,"36069":6.7,"36071":8.2,"36073":8.2,"36075":9.3,"36077":6.8,"36079":7.0,"36081":9.1,"36083":7.7,"36085":8.9,"36087":7.4,"36089":8.9,"36091":6.4,"36093":7.8,"36095":7.6,"36097":7.4,"36099":7.3,"36101":9.5,"36103":7.5,"36105":8.6,"36107":7.9,"36109":5.6,"36111":8.1,"36113":7.2,"36115":7.4,"36117":7.8,"36119":7.4,"36121":7.8,"36123":6.0,"37001":11.8,"37003":13.6,"37005":10.9,"37007":14.8,"37009":10.0,"37011":7.9,"37013":11.2,"37015":10.5,"37017":12.0,"37019":10.5,"37021":8.2,"37023":14.1,"37025":11.4,"37027":15.2,"37029":7.1,"37031":7.6,"37033":12.4,"37035":13.6,"37037":8.0,"37039":14.2,"37041":11.9,"37043":10.8,"37045":14.3,"37047":12.5,"37049":10.0,"37051":9.1,"37053":5.0,"37055":6.8,"37057":12.5,"37059":12.1,"37061":8.7,"37063":8.0,"37065":16.3,"37067":9.5,"37069":9.7,"37071":13.3,"37073":7.1,"37075":13.4,"37077":10.2,"37079":10.2,"37081":11.0,"37083":13.1,"37085":10.9,"37087":8.5,"37089":8.6,"37091":9.4,"37093":8.3,"37095":5.9,"37097":12.1,"37099":7.8,"37101":9.5,"37103":10.9,"37105":13.5,"37107":11.4,"37109":13.2,"37111":14.1,"37113":9.2,"37115":9.3,"37117":10.6,"37119":11.0,"37121":11.0,"37123":13.3,"37125":9.5,"37127":11.9,"37129":9.1,"37131":10.7,"37133":8.3,"37135":6.3,"37137":10.1,"37139":9.1,"37141":10.8,"37143":10.3,"37145":10.8,"37147":10.0,"37149":8.2,"37151":11.0,"37153":13.2,"37155":11.5,"37157":11.7,"37159":12.8,"37161":14.3,"37163":8.3,"37165":16.5,"37167":11.9,"37169":10.1,"37171":11.8,"37173":9.1,"37175":8.5,"37177":8.8,"37179":10.0,"37181":13.0,"37183":8.3,"37185":12.7,"37187":11.7,"37189":6.9,"37191":8.8,"37193":12.9,"37195":11.9,"37197":9.3,"37199":10.9,"38001":2.7,"38003":3.4,"38005":5.3,"38007":1.3,"38009":2.9,"38011":2.7,"38013":2.2,"38015":2.8,"38017":3.7,"38019":2.5,"38021":4.1,"38023":3.4,"38025":3.6,"38027":3.8,"38029":5.1,"38031":2.8,"38033":2.5,"38035":3.5,"38037":3.2,"38039":3.6,"38041":2.7,"38043":3.4,"38045":4.3,"38047":2.7,"38049":2.9,"38051":3.1,"38053":2.2,"38055":3.4,"38057":3.3,"38059":3.0,"38061":4.4,"38063":2.9,"38065":3.1,"38067":5.1,"38069":4.0,"38071":3.2,"38073":6.0,"38075":3.3,"38077":4.3,"38079":9.7,"38081":6.5,"38083":3.7,"38085":4.3,"38087":1.2,"38089":2.8,"38091":2.1,"38093":3.2,"38095":2.6,"38097":3.5,"38099":4.5,"38101":2.8,"38103":3.8,"38105":2.0,"39001":13.8,"39003":10.2,"39005":11.4,"39007":12.6,"39009":8.6,"39011":10.1,"39013":9.2,"39015":11.9,"39017":9.1,"39019":13.2,"39021":11.4,"39023":9.9,"39025":9.4,"39027":13.9,"39029":12.5,"39031":12.3,"39033":13.2,"39035":8.5,"39037":9.9,"39039":11.7,"39041":6.7,"39043":9.5,"39045":8.2,"39047":11.7,"39049":8.2,"39051":12.1,"39053":9.5,"39055":6.5,"39057":9.4,"39059":10.8,"39061":8.9,"39063":9.1,"39065":11.2,"39067":10.6,"39069":10.9,"39071":15.3,"39073":10.4,"39075":6.3,"39077":12.8,"39079":10.5,"39081":12.7,"39083":8.7,"39085":7.9,"39087":8.4,"39089":8.9,"39091":11.2,"39093":9.1,"39095":11.3,"39097":8.5,"39099":11.8,"39101":10.2,"39103":7.5,"39105":15.2,"39107":7.8,"39109":11.0,"39111":11.5,"39113":11.0,"39115":14.6,"39117":10.0,"39119":11.9,"39121":14.0,"39123":10.7,"39125":11.5,"39127":12.8,"39129":10.3,"39131":14.7,"39133":9.2,"39135":11.1,"39137":9.0,"39139":11.8,"39141":11.5,"39143":10.8,"39145":12.1,"39147":12.0,"39149":11.9,"39151":11.0,"39153":9.6,"39155":13.5,"39157":10.2,"39159":8.0,"39161":13.2,"39163":11.3,"39165":8.5,"39167":9.4,"39169":8.9,"39171":14.1,"39173":10.0,"39175":11.2,"40001":7.6,"40003":5.5,"40005":8.4,"40007":3.3,"40009":5.9,"40011":5.7,"40013":5.2,"40015":6.1,"40017":5.5,"40019":5.7,"40021":5.6,"40023":7.6,"40025":3.5,"40027":5.2,"40029":8.8,"40031":5.1,"40033":4.0,"40035":5.5,"40037":8.1,"40039":4.9,"40041":6.0,"40043":4.6,"40045":4.5,"40047":4.5,"40049":5.9,"40051":7.4,"40053":4.2,"40055":7.9,"40057":6.9,"40059":4.3,"40061":8.4,"40063":10.7,"40065":4.8,"40067":8.6,"40069":7.0,"40071":8.1,"40073":4.3,"40075":6.2,"40077":10.4,"40079":8.7,"40081":6.7,"40083":5.6,"40085":5.4,"40087":5.6,"40089":11.6,"40091":8.2,"40093":4.5,"40095":7.5,"40097":8.1,"40099":4.7,"40101":8.1,"40103":7.7,"40105":9.3,"40107":8.9,"40109":6.1,"40111":8.5,"40113":7.4,"40115":6.2,"40117":8.2,"40119":6.3,"40121":6.5,"40123":5.1,"40125":6.5,"40127":8.9,"40129":4.5,"40131":7.2,"40133":9.2,"40135":8.7,"40137":8.4,"40139":3.8,"40141":5.6,"40143":6.8,"40145":6.6,"40147":5.9,"40149":6.3,"40151":4.2,"40153":6.5,"41001":8.5,"41003":7.5,"41005":10.4,"41007":8.2,"41009":12.6,"41011":11.7,"41013":16.1,"41015":11.2,"41017":13.5,"41019":14.0,"41021":5.6,"41023":9.9,"41025":15.0,"41027":6.6,"41029":11.5,"41031":12.9,"41033":13.3,"41035":12.0,"41037":10.1,"41039":11.5,"41041":9.4,"41043":13.6,"41045":9.3,"41047":10.3,"41049":7.4,"41051":10.9,"41053":9.3,"41055":7.6,"41057":8.2,"41059":7.8,"41061":10.2,"41063":8.7,"41065":8.0,"41067":9.6,"41069":6.7,"41071":11.0,"42001":7.4,"42003":7.2,"42005":8.0,"42007":8.4,"42009":10.9,"42011":9.1,"42013":7.4,"42015":7.6,"42017":7.3,"42019":7.1,"42021":8.8,"42023":16.7,"42025":10.0,"42027":5.6,"42029":6.3,"42031":8.3,"42033":9.8,"42035":8.2,"42037":8.2,"42039":10.1,"42041":6.8,"42043":8.1,"42045":7.9,"42047":12.9,"42049":9.2,"42051":9.1,"42053":10.2,"42055":8.6,"42057":14.3,"42059":7.8,"42061":10.2,"42063":7.8,"42065":9.5,"42067":7.6,"42069":8.3,"42071":7.5,"42073":8.9,"42075":7.0,"42077":9.3,"42079":9.2,"42081":9.3,"42083":10.0,"42085":11.3,"42087":10.4,"42089":9.0,"42091":7.0,"42093":5.9,"42095":8.8,"42097":9.4,"42099":8.1,"42101":11.0,"42103":8.6,"42105":10.3,"42107":10.1,"42109":8.6,"42111":8.5,"42113":7.9,"42115":7.8,"42117":7.8,"42119":8.8,"42121":8.7,"42123":7.3,"42125":7.9,"42127":6.6,"42129":7.8,"42131":6.9,"42133":8.4,"44001":11.1,"44003":11.9,"44005":10.0,"44007":13.5,"44009":9.2,"45001":14.8,"45003":9.4,"45005":22.5,"45007":12.5,"45009":18.1,"45011":19.0,"45013":8.7,"45015":10.7,"45017":14.4,"45019":9.0,"45021":16.2,"45023":21.1,"45025":16.8,"45027":16.1,"45029":14.2,"45031":13.0,"45033":17.2,"45035":10.3,"45037":10.7,"45039":12.9,"45041":11.7,"45043":12.5,"45045":10.2,"45047":13.7,"45049":16.1,"45051":10.9,"45053":10.7,"45055":10.4,"45057":17.9,"45059":11.7,"45061":15.7,"45063":8.3,"45065":15.7,"45067":21.0,"45069":20.2,"45071":11.7,"45073":14.2,"45075":18.7,"45077":10.6,"45079":9.5,"45081":9.4,"45083":12.2,"45085":13.9,"45087":20.6,"45089":15.4,"45091":14.1,"46003":4.0,"46005":3.0,"46007":6.0,"46009":4.9,"46011":3.2,"46013":3.1,"46015":2.7,"46017":17.2,"46019":3.9,"46021":4.5,"46023":4.8,"46025":4.7,"46027":3.7,"46029":5.8,"46031":5.6,"46033":3.0,"46035":4.3,"46037":5.3,"46039":4.8,"46041":10.4,"46043":3.1,"46045":2.7,"46047":4.9,"46049":3.1,"46051":3.5,"46053":3.1,"46055":3.6,"46057":5.1,"46059":2.8,"46061":3.0,"46063":2.3,"46065":2.7,"46067":3.9,"46069":3.6,"46071":6.2,"46073":2.6,"46075":2.4,"46077":5.1,"46079":5.8,"46081":3.8,"46083":3.9,"46085":5.7,"46087":4.5,"46089":5.0,"46091":4.7,"46093":4.0,"46095":6.8,"46097":5.7,"46099":4.7,"46101":6.1,"46103":4.4,"46105":3.9,"46107":3.2,"46109":4.8,"46111":3.8,"46113":12.6,"46115":3.4,"46117":2.1,"46119":2.4,"46121":8.4,"46123":2.9,"46125":4.4,"46127":5.3,"46129":4.0,"46135":5.3,"46137":7.8,"47001":9.7,"47003":12.1,"47005":12.8,"47007":13.7,"47009":9.3,"47011":9.3,"47013":13.1,"47015":10.8,"47017":16.4,"47019":9.8,"47021":9.4,"47023":11.5,"47025":11.1,"47027":12.6,"47029":12.2,"47031":10.2,"47033":13.4,"47035":10.8,"47037":9.2,"47039":14.2,"47041":10.2,"47043":9.8,"47045":14.0,"47047":10.8,"47049":13.0,"47051":10.4,"47053":15.7,"47055":14.0,"47057":13.5,"47059":14.3,"47061":13.0,"47063":12.5,"47065":8.7,"47067":18.3,"47069":12.7,"47071":11.1,"47073":10.3,"47075":18.0,"47077":18.1,"47079":13.1,"47081":12.4,"47083":11.6,"47085":11.9,"47087":12.7,"47089":11.8,"47091":12.2,"47093":8.1,"47095":10.7,"47097":18.9,"47099":14.6,"47101":14.9,"47103":6.9,"47105":9.5,"47107":13.0,"47109":12.7,"47111":11.2,"47113":11.0,"47115":12.1,"47117":16.3,"47119":11.9,"47121":13.6,"47123":16.1,"47125":9.0,"47127":9.7,"47129":11.6,"47131":10.4,"47133":12.0,"47135":17.6,"47137":13.4,"47139":11.4,"47141":9.7,"47143":12.7,"47145":8.9,"47147":10.1,"47149":9.5,"47151":18.4,"47153":12.8,"47155":9.2,"47157":10.2,"47159":12.8,"47161":11.1,"47163":8.8,"47165":9.7,"47167":11.6,"47169":12.0,"47171":10.3,"47173":10.7,"47175":14.2,"47177":12.5,"47179":8.6,"47181":12.9,"47183":13.0,"47185":13.5,"47187":7.5,"47189":9.0,"48001":9.4,"48003":7.6,"48005":8.9,"48007":7.3,"48009":6.5,"48011":5.1,"48013":7.9,"48015":8.4,"48017":5.2,"48019":6.8,"48021":8.0,"48023":5.1,"48025":10.3,"48027":7.1,"48029":7.2,"48031":5.8,"48033":6.2,"48035":8.6,"48037":7.8,"48039":8.9,"48041":6.2,"48043":5.1,"48045":5.9,"48047":9.9,"48049":7.2,"48051":7.4,"48053":6.3,"48055":8.2,"48057":9.5,"48059":6.3,"48061":10.8,"48063":9.6,"48065":6.7,"48067":12.5,"48069":5.3,"48071":10.7,"48073":9.7,"48075":6.4,"48077":7.4,"48079":7.2,"48081":8.6,"48083":6.9,"48085":7.8,"48087":5.9,"48089":6.6,"48091":6.6,"48093":6.1,"48095":8.2,"48097":6.5,"48099":8.7,"48101":5.6,"48103":9.5,"48105":9.7,"48107":7.0,"48109":4.5,"48111":4.4,"48113":8.7,"48115":8.7,"48117":5.8,"48119":8.4,"48121":7.7,"48123":8.3,"48125":6.0,"48127":11.0,"48129":7.0,"48131":12.5,"48133":8.4,"48135":9.2,"48137":6.7,"48139":8.6,"48141":9.8,"48143":7.1,"48145":9.5,"48147":9.0,"48149":5.7,"48151":6.4,"48153":6.9,"48155":5.7,"48157":8.3,"48159":7.3,"48161":6.7,"48163":8.4,"48165":6.8,"48167":8.5,"48169":5.7,"48171":4.9,"48173":5.2,"48175":7.9,"48177":6.1,"48179":8.9,"48181":8.7,"48183":8.0,"48185":10.0,"48187":6.7,"48189":6.4,"48191":8.9,"48193":6.0,"48195":5.5,"48197":7.2,"48199":10.1,"48201":8.5,"48203":8.7,"48205":4.3,"48207":5.2,"48209":6.8,"48211":3.0,"48213":8.5,"48215":11.6,"48217":8.5,"48219":7.0,"48221":7.6,"48223":6.5,"48225":10.3,"48227":7.5,"48229":6.5,"48231":8.5,"48233":8.0,"48235":5.4,"48237":6.4,"48239":7.6,"48241":11.9,"48243":5.6,"48245":10.8,"48247":10.0,"48249":10.0,"48251":9.1,"48253":8.2,"48255":10.5,"48257":8.8,"48259":6.0,"48261":6.1,"48263":6.2,"48265":6.0,"48267":5.4,"48269":5.4,"48271":8.9,"48273":7.7,"48275":6.4,"48277":7.8,"48279":6.6,"48281":6.1,"48283":9.9,"48285":6.4,"48287":6.9,"48289":7.9,"48291":11.2,"48293":7.2,"48295":6.1,"48297":7.6,"48299":7.3,"48301":11.5,"48303":5.7,"48305":6.8,"48307":9.1,"48309":7.1,"48311":7.8,"48313":8.7,"48315":11.8,"48317":5.0,"48319":5.4,"48321":11.2,"48323":13.6,"48325":7.1,"48327":9.0,"48329":6.2,"48331":10.2,"48333":6.0,"48335":8.7,"48337":7.8,"48339":7.9,"48341":5.3,"48343":15.6,"48345":5.3,"48347":7.0,"48349":8.4,"48351":12.4,"48353":6.4,"48355":7.7,"48357":6.3,"48359":5.5,"48361":11.1,"48363":9.1,"48365":7.5,"48367":8.4,"48369":4.8,"48371":11.7,"48373":10.3,"48375":6.6,"48377":17.8,"48379":8.5,"48381":5.1,"48383":5.8,"48385":6.1,"48387":10.5,"48389":14.0,"48391":7.0,"48393":6.2,"48395":8.7,"48397":7.8,"48399":10.1,"48401":9.1,"48403":15.9,"48405":10.8,"48407":10.0,"48409":9.8,"48411":7.8,"48413":11.1,"48415":7.2,"48417":4.3,"48419":8.1,"48421":4.9,"48423":8.3,"48425":7.3,"48427":17.8,"48429":6.9,"48431":4.6,"48433":4.8,"48435":7.8,"48437":6.7,"48439":8.2,"48441":6.1,"48443":7.8,"48445":7.7,"48447":5.6,"48449":7.7,"48451":7.0,"48453":7.0,"48455":8.8,"48457":10.5,"48459":8.1,"48461":5.6,"48463":8.9,"48465":9.6,"48467":7.4,"48469":7.9,"48471":7.8,"48473":9.0,"48475":8.5,"48477":6.9,"48479":9.1,"48481":7.9,"48483":5.6,"48485":8.1,"48487":5.5,"48489":13.9,"48491":7.8,"48493":6.9,"48495":9.0,"48497":9.6,"48499":8.4,"48501":7.1,"48503":6.4,"48505":12.6,"48507":16.3,"49001":4.2,"49003":5.6,"49005":4.2,"49007":6.5,"49009":2.7,"49011":5.6,"49013":6.9,"49015":6.2,"49017":4.9,"49019":5.2,"49021":6.3,"49023":6.8,"49025":4.4,"49027":4.0,"49029":5.3,"49031":3.8,"49033":2.8,"49035":6.0,"49037":8.6,"49039":5.6,"49041":5.7,"49043":5.8,"49045":6.4,"49047":6.6,"49049":5.4,"49051":6.0,"49053":7.8,"49055":4.2,"49057":7.0,"50001":5.8,"50003":6.8,"50005":7.0,"50007":5.7,"50009":7.8,"50011":6.2,"50013":7.0,"50015":6.6,"50017":5.5,"50019":8.3,"50021":8.7,"50023":6.1,"50025":6.3,"50027":5.8,"51001":6.1,"51003":5.0,"51005":8.7,"51007":7.0,"51009":7.0,"51011":6.7,"51013":4.2,"51015":5.8,"51017":5.4,"51019":6.2,"51021":7.5,"51023":6.2,"51025":11.4,"51027":8.8,"51029":7.8,"51031":6.6,"51033":8.2,"51035":11.3,"51036":8.7,"51037":9.1,"51041":6.8,"51043":6.1,"51045":7.2,"51047":7.5,"51049":7.0,"51051":8.3,"51053":8.3,"51057":7.7,"51059":4.7,"51061":5.0,"51063":7.1,"51065":5.8,"51067":7.8,"51069":7.3,"51071":8.5,"51073":5.5,"51075":6.7,"51077":10.4,"51079":5.8,"51081":9.1,"51083":11.5,"51085":6.6,"51087":7.2,"51089":13.4,"51091":5.9,"51093":6.3,"51095":4.6,"51097":7.5,"51099":7.5,"51101":6.4,"51103":7.3,"51105":7.1,"51107":4.7,"51109":8.1,"51111":9.1,"51113":6.0,"51115":4.8,"51117":10.5,"51119":6.4,"51121":6.3,"51125":6.2,"51127":6.9,"51131":6.6,"51133":6.5,"51135":7.9,"51137":7.6,"51139":9.8,"51141":9.9,"51143":10.3,"51145":6.0,"51147":8.4,"51149":7.3,"51153":5.3,"51155":10.8,"51157":5.6,"51159":7.2,"51161":5.9,"51163":5.6,"51165":5.3,"51167":9.6,"51169":9.9,"51171":7.6,"51173":10.2,"51175":7.7,"51177":5.1,"51179":5.1,"51181":7.3,"51183":9.5,"51185":7.9,"51187":6.6,"51191":8.2,"51193":7.1,"51195":6.7,"51197":9.7,"51199":5.0,"51510":4.8,"51515":8.9,"51520":9.9,"51530":8.7,"51540":6.2,"51550":6.4,"51570":8.2,"51580":9.1,"51590":13.0,"51595":11.8,"51600":5.4,"51610":7.3,"51620":10.7,"51630":9.1,"51640":10.3,"51650":7.7,"51660":6.4,"51670":10.4,"51678":9.2,"51680":7.7,"51683":6.8,"51685":5.4,"51690":20.0,"51700":7.3,"51710":8.4,"51720":5.5,"51730":13.8,"51735":5.0,"51740":8.4,"51750":8.5,"51760":10.0,"51770":8.6,"51775":6.3,"51790":7.3,"51800":6.6,"51810":5.9,"51820":8.2,"51830":13.5,"51840":7.9,"53001":6.5,"53003":8.1,"53005":5.8,"53007":6.5,"53009":8.5,"53011":12.7,"53013":8.4,"53015":12.8,"53017":6.6,"53019":11.3,"53021":6.2,"53023":5.3,"53025":7.3,"53027":11.7,"53029":8.1,"53031":7.4,"53033":8.8,"53035":7.1,"53037":7.3,"53039":8.1,"53041":12.0,"53043":7.4,"53045":9.4,"53047":7.4,"53049":10.7,"53051":12.1,"53053":8.8,"53055":4.7,"53057":9.1,"53059":9.4,"53061":10.1,"53063":8.3,"53065":10.5,"53067":7.1,"53069":11.4,"53071":5.5,"53073":7.8,"53075":4.7,"53077":6.8,"54001":9.2,"54003":8.5,"54005":9.4,"54007":8.0,"54009":11.1,"54011":6.6,"54013":12.1,"54015":11.9,"54017":7.4,"54019":8.6,"54021":6.5,"54023":11.2,"54025":8.3,"54027":7.8,"54029":11.8,"54031":9.7,"54033":7.1,"54035":12.9,"54037":6.6,"54039":7.1,"54041":7.5,"54043":10.6,"54045":9.8,"54047":12.7,"54049":6.5,"54051":8.7,"54053":12.1,"54055":6.9,"54057":7.9,"54059":10.7,"54061":4.6,"54063":6.5,"54065":9.1,"54067":9.1,"54069":7.8,"54071":7.5,"54073":10.2,"54075":11.3,"54077":7.0,"54079":6.3,"54081":8.0,"54083":8.5,"54085":8.8,"54087":13.0,"54089":7.8,"54091":7.9,"54093":10.9,"54095":10.8,"54097":8.9,"54099":7.7,"54101":10.4,"54103":12.3,"54105":11.4,"54107":8.8,"54109":11.5,"55001":8.3,"55003":8.3,"55005":7.1,"55007":6.2,"55009":7.1,"55011":5.7,"55013":9.1,"55015":6.7,"55017":6.6,"55019":7.6,"55021":7.1,"55023":8.1,"55025":5.4,"55027":8.4,"55029":6.6,"55031":6.5,"55033":5.8,"55035":6.0,"55037":8.1,"55039":7.8,"55041":8.1,"55043":6.1,"55045":7.8,"55047":7.5,"55049":6.2,"55051":9.4,"55053":7.2,"55055":8.0,"55057":8.5,"55059":9.8,"55061":7.3,"55063":5.9,"55065":6.0,"55067":8.5,"55069":9.6,"55071":8.5,"55073":7.7,"55075":10.2,"55077":8.3,"55078":12.7,"55079":9.3,"55081":6.4,"55083":9.1,"55085":7.4,"55087":7.5,"55089":7.2,"55091":5.4,"55093":6.1,"55095":8.4,"55097":5.8,"55099":9.4,"55101":9.3,"55103":7.5,"55105":11.1,"55107":10.1,"55109":6.8,"55111":7.0,"55113":7.1,"55115":8.2,"55117":8.3,"55119":9.6,"55121":6.4,"55123":6.6,"55125":7.1,"55127":7.7,"55129":7.8,"55131":8.1,"55133":7.2,"55135":8.2,"55137":8.2,"55139":7.0,"55141":7.4,"56001":3.6,"56003":8.2,"56005":5.7,"56007":6.8,"56009":5.9,"56011":4.9,"56013":7.4,"56015":5.3,"56017":5.8,"56019":6.7,"56021":6.3,"56023":6.5,"56025":7.3,"56027":4.5,"56029":5.1,"56031":6.2,"56033":6.6,"56035":4.5,"56037":7.4,"56039":5.2,"56041":7.2,"56043":5.9,"56045":5.9,"72001":21.7,"72003":17.9,"72005":17.8,"72007":18.2,"72009":19.2,"72011":18.3,"72013":16.7,"72015":22.7,"72017":20.1,"72019":19.6,"72021":13.6,"72023":13.5,"72025":15.8,"72027":15.6,"72029":21.2,"72031":13.3,"72033":18.3,"72035":18.1,"72037":17.6,"72039":23.6,"72041":17.3,"72043":23.1,"72045":23.4,"72047":17.7,"72049":11.6,"72051":15.2,"72053":17.8,"72054":21.5,"72055":19.9,"72057":22.0,"72059":22.6,"72061":10.6,"72063":16.3,"72065":16.5,"72067":16.4,"72069":20.8,"72071":19.1,"72073":21.9,"72075":18.6,"72077":19.1,"72079":18.6,"72081":17.5,"72083":18.1,"72085":19.2,"72087":20.4,"72089":20.2,"72091":19.2,"72093":19.9,"72095":25.9,"72097":17.9,"72099":18.0,"72101":21.6,"72103":23.2,"72105":18.9,"72107":22.8,"72109":23.6,"72111":20.2,"72113":15.9,"72115":16.8,"72117":17.9,"72119":17.1,"72121":18.9,"72123":25.2,"72125":17.8,"72127":11.9,"72129":18.5,"72131":18.2,"72133":25.7,"72135":12.9,"72137":13.4,"72139":11.1,"72141":25.8,"72143":16.3,"72145":17.6,"72147":27.7,"72149":19.8,"72151":24.1,"72153":16.0}
Index: /Dev/trunk/d3/examples/clock/clock.css
===================================================================
--- /Dev/trunk/d3/examples/clock/clock.css	(revision 76)
+++ /Dev/trunk/d3/examples/clock/clock.css	(revision 76)
@@ -0,0 +1,23 @@
+#clock {
+  position: relative;
+  background: #222;
+  width: 960px;
+  height: 700px;
+}
+
+#clock div {
+  position: absolute;
+  right: 4px;
+  bottom: 4px;
+  color: #ddd;
+  font: 10px sans-serif;
+}
+
+#clock a {
+  color: #fff;
+  font-weight: bold;
+}
+
+text {
+  font: bold 13px sans-serif;
+}
Index: /Dev/trunk/d3/examples/clock/clock.html
===================================================================
--- /Dev/trunk/d3/examples/clock/clock.html	(revision 76)
+++ /Dev/trunk/d3/examples/clock/clock.html	(revision 76)
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Polar Clock</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.time.js"></script>
+    <link type="text/css" rel="stylesheet" href="clock.css"/>
+  </head>
+  <body>
+    <div id="clock">
+      <div>
+        Inspired by <a href="http://blog.pixelbreaker.com/polarclock/">pixelbreaker</a>.
+      </div>
+    </div>
+    <script type="text/javascript" src="clock.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/clock/clock.js
===================================================================
--- /Dev/trunk/d3/examples/clock/clock.js	(revision 76)
+++ /Dev/trunk/d3/examples/clock/clock.js	(revision 76)
@@ -0,0 +1,87 @@
+// Based on http://vis.stanford.edu/protovis/ex/clock.html
+// Based on http://blog.pixelbreaker.com/polarclock
+
+var w = 960,
+    h = 700,
+    r = Math.min(w, h) / 1.8,
+    s = .09,
+    fsec = d3.time.format("%S s"),
+    fmin = d3.time.format("%M m"),
+    fhou = d3.time.format("%H h"),
+    fwee = d3.time.format("%a"),
+    fdat = d3.time.format("%d d"),
+    fmon = d3.time.format("%b");
+
+var fill = d3.scale.linear()
+    .range(["hsl(-180, 50%, 50%)", "hsl(180, 50%, 50%)"])
+    .interpolate(d3.interpolateHsl);
+
+var arc = d3.svg.arc()
+    .startAngle(0)
+    .endAngle(function(d) { return d.value * 2 * Math.PI; })
+    .innerRadius(function(d) { return d.index * r; })
+    .outerRadius(function(d) { return (d.index + s) * r; });
+
+var vis = d3.select("#clock").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(" + w / 2 + "," + h / 2 + ")");
+
+var g = vis.selectAll("g")
+    .data(fields)
+  .enter().append("svg:g");
+
+g.append("svg:path")
+    .style("fill", function(d) { return fill(d.value); })
+    .attr("d", arc);
+
+g.append("svg:text")
+    .attr("text-anchor", "middle")
+    .attr("dy", "1em")
+    .text(function(d) { return d.text; });
+
+
+// Update arcs.
+d3.timer(function() {
+  var g = vis.selectAll("g")
+      .data(fields);
+
+  g.select("path")
+      .style("fill", function(d) { return fill(d.value); })
+      .attr("d", arc);
+
+  g.select("text")
+      .attr("dy", function(d) { return d.value < .5 ? "-.5em" : "1em"; })
+      .attr("transform", function(d) {
+        return "rotate(" + 360 * d.value + ")"
+            + "translate(0," + -(d.index + s / 2) * r + ")"
+            + "rotate(" + (d.value < .5 ? -90 : 90) + ")"
+      })
+      .text(function(d) { return d.text; });
+});
+
+// Generate the fields for the current date/time.
+function fields() {
+  var d = new Date;
+
+  function days() {
+    return 32 - new Date(d.getYear(), d.getMonth(), 32).getDate();
+  }
+
+  var second = (d.getSeconds() + d.getMilliseconds() / 1000) / 60,
+      minute = (d.getMinutes() + second) / 60,
+      hour = (d.getHours() + minute) / 24,
+      weekday = (d.getDay() + hour) / 7,
+      date = (d.getDate() - 1 + hour) / days(),
+      month = (d.getMonth() + date) / 12;
+
+  return [
+    {value: second,  index: .7, text: fsec(d)},
+    {value: minute,  index: .6, text: fmin(d)},
+    {value: hour,    index: .5, text: fhou(d)},
+    {value: weekday, index: .3, text: fwee(d)},
+    {value: date,    index: .2, text: fdat(d)},
+    {value: month,   index: .1, text: fmon(d)},
+  ];
+}
Index: /Dev/trunk/d3/examples/cluster/cluster-radial.html
===================================================================
--- /Dev/trunk/d3/examples/cluster/cluster-radial.html	(revision 76)
+++ /Dev/trunk/d3/examples/cluster/cluster-radial.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Flare Dendogram</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="cluster.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="cluster-radial.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/cluster/cluster-radial.js
===================================================================
--- /Dev/trunk/d3/examples/cluster/cluster-radial.js	(revision 76)
+++ /Dev/trunk/d3/examples/cluster/cluster-radial.js	(revision 76)
@@ -0,0 +1,39 @@
+var r = 960 / 2;
+
+var cluster = d3.layout.cluster()
+    .size([360, r - 120]);
+
+var diagonal = d3.svg.diagonal.radial()
+    .projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", r * 2)
+    .attr("height", r * 2)
+  .append("svg:g")
+    .attr("transform", "translate(" + r + "," + r + ")");
+
+d3.json("../data/flare.json", function(json) {
+  var nodes = cluster.nodes(json);
+
+  var link = vis.selectAll("path.link")
+      .data(cluster.links(nodes))
+    .enter().append("svg:path")
+      .attr("class", "link")
+      .attr("d", diagonal);
+
+  var node = vis.selectAll("g.node")
+      .data(nodes)
+    .enter().append("svg:g")
+      .attr("class", "node")
+      .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; })
+
+  node.append("svg:circle")
+      .attr("r", 4.5);
+
+  node.append("svg:text")
+      .attr("dx", function(d) { return d.x < 180 ? 8 : -8; })
+      .attr("dy", ".31em")
+      .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
+      .attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; })
+      .text(function(d) { return d.name; });
+});
Index: /Dev/trunk/d3/examples/cluster/cluster.css
===================================================================
--- /Dev/trunk/d3/examples/cluster/cluster.css	(revision 76)
+++ /Dev/trunk/d3/examples/cluster/cluster.css	(revision 76)
@@ -0,0 +1,15 @@
+.node circle {
+  fill: #fff;
+  stroke: steelblue;
+  stroke-width: 1.5px;
+}
+
+.node {
+  font: 10px sans-serif;
+}
+
+.link {
+  fill: none;
+  stroke: #ccc;
+  stroke-width: 1.5px;
+}
Index: /Dev/trunk/d3/examples/cluster/cluster.html
===================================================================
--- /Dev/trunk/d3/examples/cluster/cluster.html	(revision 76)
+++ /Dev/trunk/d3/examples/cluster/cluster.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Flare Dendogram</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="cluster.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="cluster.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/cluster/cluster.js
===================================================================
--- /Dev/trunk/d3/examples/cluster/cluster.js	(revision 76)
+++ /Dev/trunk/d3/examples/cluster/cluster.js	(revision 76)
@@ -0,0 +1,39 @@
+var w = 960,
+    h = 2200;
+
+var cluster = d3.layout.cluster()
+    .size([h, w - 160]);
+
+var diagonal = d3.svg.diagonal()
+    .projection(function(d) { return [d.y, d.x]; });
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(40, 0)");
+
+d3.json("../data/flare.json", function(json) {
+  var nodes = cluster.nodes(json);
+
+  var link = vis.selectAll("path.link")
+      .data(cluster.links(nodes))
+    .enter().append("svg:path")
+      .attr("class", "link")
+      .attr("d", diagonal);
+
+  var node = vis.selectAll("g.node")
+      .data(nodes)
+    .enter().append("svg:g")
+      .attr("class", "node")
+      .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; })
+
+  node.append("svg:circle")
+      .attr("r", 4.5);
+
+  node.append("svg:text")
+      .attr("dx", function(d) { return d.children ? -8 : 8; })
+      .attr("dy", 3)
+      .attr("text-anchor", function(d) { return d.children ? "end" : "start"; })
+      .text(function(d) { return d.name; });
+});
Index: /Dev/trunk/d3/examples/contour/contour.html
===================================================================
--- /Dev/trunk/d3/examples/contour/contour.html	(revision 76)
+++ /Dev/trunk/d3/examples/contour/contour.html	(revision 76)
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Contour</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <style type="text/css">
+svg {
+  border: solid 1px #aaa;
+}
+path {
+  stroke: red;
+  stroke-width: 2px;
+  fill: none;
+}
+rect {
+  fill: lightsteelblue;
+  stroke: #eee;
+  stroke-width: 2px;
+}
+rect.d1 {
+  fill: steelblue;
+}
+rect.d2 {
+  fill: darkblue;
+}
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+function grid0(x,y) {
+  if (x < 0 || y < 0 || x >= dw || y >= dh) return 0;
+  return data[y][x];
+}
+function grid1(x,y) {
+  if (x < 0 || y < 0 || x >= dw || y >= dh) return 0;
+  return data[y][x]==1;
+}
+function grid2(x,y) {
+  if (x < 0 || y < 0 || x >= dw || y >= dh) return 0;
+  return data[y][x]==2;
+}
+	
+var data = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+            [0, 0, 0, 2, 2, 2, 0, 0, 0, 0],
+            [0, 0, 0, 2, 2, 2, 2, 0, 0, 0],
+            [0, 0, 2, 2, 2, 2, 2, 2, 0, 0],
+            [0, 0, 2, 2, 2, 2, 2, 2, 2, 0],
+            [0, 0, 2, 1, 0, 0, 2, 2, 2, 0],
+            [0, 0, 1, 1, 0, 0, 2, 2, 2, 0],
+            [0, 0, 0, 0, 1, 1, 2, 2, 0, 0],
+            [0, 0, 0, 0, 1, 2, 2, 2, 0, 0],
+            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
+    fn = [grid0, grid1, grid2],
+    dw = data[0].length,
+    dh = data.length;
+    sz = 30,
+    grid = grid0;
+
+function translateY(d, i) { return "translate(0,"+(i*sz)+")"; }
+function translateX(d, i) { return "translate("+(i*sz)+",0)"; }
+function scale(p) { return [p[0]*sz, p[1]*sz]; }
+
+var svg = d3.select("body")
+ .append("svg:svg")
+  .attr("width", dw*sz)
+  .attr("height", dh*sz);
+
+var g = svg.selectAll("g")
+  .data(data)
+ .enter().append("svg:g")
+  .attr("transform", translateY);
+
+g.selectAll("rect")
+  .data(function(d) { return d; })
+ .enter().append("svg:rect")
+  .attr("transform", translateX)
+  .attr("width", sz)
+  .attr("height", sz)
+  .attr("class", function(d) { return "d"+d; })
+  .on("mouseover", mouseover);
+
+contour(grid);
+
+function contour(grid, start) {
+  svg.selectAll("path")
+    .data([d3.geom.contour(grid, start).map(scale)])
+    .attr("d", function(d) { return "M" + d.join("L") + "Z"; })
+   .enter().append("svg:path")
+    .attr("d", function(d) { return "M" + d.join("L") + "Z"; });
+}
+
+function mouseover(d,i) {
+  var s = undefined;
+  grid = fn[d];
+  if (d > 0) {
+	// map mouse to grid coords, then find left edge
+    var p = d3.svg.mouse(svg[0][0]);
+    s = [Math.floor(p[0]/sz), Math.floor(p[1]/sz)];
+    while (grid(s[0]-1,s[1])) s[0]--;
+  }
+  contour(grid, s);
+}
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/data/README
===================================================================
--- /Dev/trunk/d3/examples/data/README	(revision 76)
+++ /Dev/trunk/d3/examples/data/README	(revision 76)
@@ -0,0 +1,5 @@
+These are derived from the cartographic boundary files from the 2000 U.S. Census:
+
+http://www.census.gov/geo/www/cob/bdy_files.html
+
+Then, MapShaper was used to simplify the geometry, and ogr2ogr to convert the shapefiles to GeoJSON. Some additional work was done to preserve the FIPS codes, which are dropped from the shapefiles by MapShaper.
Index: /Dev/trunk/d3/examples/data/faithful.json
===================================================================
--- /Dev/trunk/d3/examples/data/faithful.json	(revision 76)
+++ /Dev/trunk/d3/examples/data/faithful.json	(revision 76)
@@ -0,0 +1,8 @@
+[
+  79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47, 83, 52, 62, 84, 52, 79, 51, 47, 78, 69, 74, 83, 55, 76, 78, 79, 73, 77, 66, 80, 74, 52, 48, 80, 59, 90, 80, 58, 84, 58, 73, 83, 64, 53,
+  82, 59, 75, 90, 54, 80, 54, 83, 71, 64, 77, 81, 59, 84, 48, 82, 60, 92, 78, 78, 65, 73, 82, 56, 79, 71, 62, 76, 60, 78, 76, 83, 75, 82, 70, 65, 73, 88, 76, 80, 48, 86, 60, 90, 50, 78, 63, 72,
+  84, 75, 51, 82, 62, 88, 49, 83, 81, 47, 84, 52, 86, 81, 75, 59, 89, 79, 59, 81, 50, 85, 59, 87, 53, 69, 77, 56, 88, 81, 45, 82, 55, 90, 45, 83, 56, 89, 46, 82, 51, 86, 53, 79, 81, 60, 82, 77,
+  76, 59, 80, 49, 96, 53, 77, 77, 65, 81, 71, 70, 81, 93, 53, 89, 45, 86, 58, 78, 66, 76, 63, 88, 52, 93, 49, 57, 77, 68, 81, 81, 73, 50, 85, 74, 55, 77, 83, 83, 51, 78, 84, 46, 83, 55, 81, 57,
+  76, 84, 77, 81, 87, 77, 51, 78, 60, 82, 91, 53, 78, 46, 77, 84, 49, 83, 71, 80, 49, 75, 64, 76, 53, 94, 55, 76, 50, 82, 54, 75, 78, 79, 78, 78, 70, 79, 70, 54, 86, 50, 90, 54, 54, 77, 79, 64,
+  75, 47, 86, 63, 85, 82, 57, 82, 67, 74, 54, 83, 73, 73, 88, 80, 71, 83, 56, 79, 78, 84, 58, 83, 43, 60, 75, 81, 46, 90, 46, 74
+]
Index: /Dev/trunk/d3/examples/data/flare-imports.json
===================================================================
--- /Dev/trunk/d3/examples/data/flare-imports.json	(revision 76)
+++ /Dev/trunk/d3/examples/data/flare-imports.json	(revision 76)
@@ -0,0 +1,222 @@
+[
+{"name":"flare.analytics.cluster.AgglomerativeCluster","size":3938,"imports":["flare.animate.Transitioner","flare.vis.data.DataList","flare.util.math.IMatrix","flare.analytics.cluster.MergeEdge","flare.analytics.cluster.HierarchicalCluster","flare.vis.data.Data"]},
+{"name":"flare.analytics.cluster.CommunityStructure","size":3812,"imports":["flare.analytics.cluster.HierarchicalCluster","flare.animate.Transitioner","flare.vis.data.DataList","flare.analytics.cluster.MergeEdge","flare.util.math.IMatrix"]},
+{"name":"flare.analytics.cluster.HierarchicalCluster","size":6714,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.vis.data.Tree","flare.util.Arrays","flare.analytics.cluster.MergeEdge","flare.util.Sort","flare.vis.operator.Operator","flare.util.Property","flare.vis.data.Data"]},
+{"name":"flare.analytics.cluster.MergeEdge","size":743,"imports":[]},
+{"name":"flare.analytics.graph.BetweennessCentrality","size":3534,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.util.Arrays","flare.vis.data.Data","flare.util.Property","flare.vis.operator.Operator"]},
+{"name":"flare.analytics.graph.LinkDistance","size":5731,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.EdgeSprite","flare.analytics.graph.ShortestPaths","flare.vis.data.Data","flare.util.Property","flare.vis.operator.Operator"]},
+{"name":"flare.analytics.graph.MaxFlowMinCut","size":7840,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.EdgeSprite","flare.vis.data.Data","flare.util.Property","flare.vis.operator.Operator"]},
+{"name":"flare.analytics.graph.ShortestPaths","size":5914,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.animate.Transitioner","flare.vis.operator.Operator","flare.util.heap.HeapNode","flare.util.heap.FibonacciHeap","flare.util.Property","flare.vis.data.Data"]},
+{"name":"flare.analytics.graph.SpanningTree","size":3416,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.operator.IOperator","flare.vis.Visualization","flare.vis.data.TreeBuilder","flare.vis.operator.Operator"]},
+{"name":"flare.analytics.optimization.AspectRatioBanker","size":7074,"imports":["flare.animate.Transitioner","flare.util.Arrays","flare.vis.data.DataSprite","flare.scale.Scale","flare.vis.axis.CartesianAxes","flare.vis.Visualization","flare.util.Property","flare.vis.operator.Operator"]},
+{"name":"flare.animate.Easing","size":17010,"imports":["flare.animate.Transition"]},
+{"name":"flare.animate.FunctionSequence","size":5842,"imports":["flare.util.Maths","flare.animate.Transition","flare.util.Arrays","flare.animate.Sequence","flare.animate.Transitioner"]},
+{"name":"flare.animate.interpolate.ArrayInterpolator","size":1983,"imports":["flare.util.Arrays","flare.animate.interpolate.Interpolator"]},
+{"name":"flare.animate.interpolate.ColorInterpolator","size":2047,"imports":["flare.animate.interpolate.Interpolator"]},
+{"name":"flare.animate.interpolate.DateInterpolator","size":1375,"imports":["flare.animate.interpolate.Interpolator"]},
+{"name":"flare.animate.interpolate.Interpolator","size":8746,"imports":["flare.animate.interpolate.NumberInterpolator","flare.animate.interpolate.ColorInterpolator","flare.animate.interpolate.PointInterpolator","flare.animate.interpolate.ObjectInterpolator","flare.animate.interpolate.MatrixInterpolator","flare.animate.interpolate.RectangleInterpolator","flare.animate.interpolate.DateInterpolator","flare.util.Property","flare.animate.interpolate.ArrayInterpolator"]},
+{"name":"flare.animate.interpolate.MatrixInterpolator","size":2202,"imports":["flare.animate.interpolate.Interpolator"]},
+{"name":"flare.animate.interpolate.NumberInterpolator","size":1382,"imports":["flare.animate.interpolate.Interpolator"]},
+{"name":"flare.animate.interpolate.ObjectInterpolator","size":1629,"imports":["flare.animate.interpolate.Interpolator"]},
+{"name":"flare.animate.interpolate.PointInterpolator","size":1675,"imports":["flare.animate.interpolate.Interpolator"]},
+{"name":"flare.animate.interpolate.RectangleInterpolator","size":2042,"imports":["flare.animate.interpolate.Interpolator"]},
+{"name":"flare.animate.ISchedulable","size":1041,"imports":["flare.animate.Scheduler"]},
+{"name":"flare.animate.Parallel","size":5176,"imports":["flare.animate.Easing","flare.animate.Transition","flare.util.Arrays"]},
+{"name":"flare.animate.Pause","size":449,"imports":["flare.animate.Transition"]},
+{"name":"flare.animate.Scheduler","size":5593,"imports":["flare.animate.ISchedulable","flare.animate.Pause","flare.animate.Transition"]},
+{"name":"flare.animate.Sequence","size":5534,"imports":["flare.animate.Easing","flare.util.Maths","flare.animate.Transition","flare.util.Arrays"]},
+{"name":"flare.animate.Transition","size":9201,"imports":["flare.animate.Transitioner","flare.animate.TransitionEvent","flare.animate.Scheduler","flare.animate.Pause","flare.animate.Parallel","flare.animate.Easing","flare.animate.Sequence","flare.animate.ISchedulable","flare.util.Maths","flare.animate.Tween"]},
+{"name":"flare.animate.Transitioner","size":19975,"imports":["flare.util.IValueProxy","flare.animate.Parallel","flare.animate.Easing","flare.animate.Sequence","flare.animate.Transition","flare.animate.Tween","flare.util.Property"]},
+{"name":"flare.animate.TransitionEvent","size":1116,"imports":["flare.animate.Transition"]},
+{"name":"flare.animate.Tween","size":6006,"imports":["flare.animate.Transitioner","flare.animate.Transition","flare.animate.interpolate.Interpolator","flare.util.Property"]},
+{"name":"flare.data.converters.Converters","size":721,"imports":["flare.data.converters.IDataConverter","flare.data.converters.GraphMLConverter","flare.data.converters.JSONConverter","flare.data.converters.DelimitedTextConverter"]},
+{"name":"flare.data.converters.DelimitedTextConverter","size":4294,"imports":["flare.data.DataSet","flare.data.DataUtil","flare.data.DataTable","flare.data.converters.IDataConverter","flare.data.DataSchema","flare.data.DataField"]},
+{"name":"flare.data.converters.GraphMLConverter","size":9800,"imports":["flare.data.DataSet","flare.data.DataUtil","flare.data.DataTable","flare.data.converters.IDataConverter","flare.data.DataSchema","flare.data.DataField"]},
+{"name":"flare.data.converters.IDataConverter","size":1314,"imports":["flare.data.DataSet","flare.data.DataSchema"]},
+{"name":"flare.data.converters.JSONConverter","size":2220,"imports":["flare.data.DataSet","flare.data.DataUtil","flare.data.DataTable","flare.data.converters.IDataConverter","flare.data.DataSchema","flare.data.DataField","flare.util.Property"]},
+{"name":"flare.data.DataField","size":1759,"imports":["flare.data.DataUtil"]},
+{"name":"flare.data.DataSchema","size":2165,"imports":["flare.data.DataField","flare.util.Arrays"]},
+{"name":"flare.data.DataSet","size":586,"imports":["flare.data.DataTable"]},
+{"name":"flare.data.DataSource","size":3331,"imports":["flare.data.converters.IDataConverter","flare.data.converters.Converters","flare.data.DataSchema"]},
+{"name":"flare.data.DataTable","size":772,"imports":["flare.data.DataSchema"]},
+{"name":"flare.data.DataUtil","size":3322,"imports":["flare.data.DataField","flare.data.DataSchema"]},
+{"name":"flare.display.DirtySprite","size":8833,"imports":[]},
+{"name":"flare.display.LineSprite","size":1732,"imports":["flare.display.DirtySprite"]},
+{"name":"flare.display.RectSprite","size":3623,"imports":["flare.util.Colors","flare.display.DirtySprite"]},
+{"name":"flare.display.TextSprite","size":10066,"imports":["flare.display.DirtySprite"]},
+{"name":"flare.flex.FlareVis","size":4116,"imports":["flare.display.DirtySprite","flare.data.DataSet","flare.vis.Visualization","flare.vis.axis.CartesianAxes","flare.vis.axis.Axes","flare.vis.data.Data"]},
+{"name":"flare.physics.DragForce","size":1082,"imports":["flare.physics.Simulation","flare.physics.Particle","flare.physics.IForce"]},
+{"name":"flare.physics.GravityForce","size":1336,"imports":["flare.physics.Simulation","flare.physics.Particle","flare.physics.IForce"]},
+{"name":"flare.physics.IForce","size":319,"imports":["flare.physics.Simulation"]},
+{"name":"flare.physics.NBodyForce","size":10498,"imports":["flare.physics.Simulation","flare.physics.Particle","flare.physics.IForce"]},
+{"name":"flare.physics.Particle","size":2822,"imports":[]},
+{"name":"flare.physics.Simulation","size":9983,"imports":["flare.physics.Particle","flare.physics.NBodyForce","flare.physics.DragForce","flare.physics.GravityForce","flare.physics.Spring","flare.physics.SpringForce","flare.physics.IForce"]},
+{"name":"flare.physics.Spring","size":2213,"imports":["flare.physics.Particle"]},
+{"name":"flare.physics.SpringForce","size":1681,"imports":["flare.physics.Simulation","flare.physics.Particle","flare.physics.Spring","flare.physics.IForce"]},
+{"name":"flare.query.AggregateExpression","size":1616,"imports":["flare.query.Expression"]},
+{"name":"flare.query.And","size":1027,"imports":["flare.query.CompositeExpression","flare.query.Expression"]},
+{"name":"flare.query.Arithmetic","size":3891,"imports":["flare.query.BinaryExpression","flare.query.Expression"]},
+{"name":"flare.query.Average","size":891,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
+{"name":"flare.query.BinaryExpression","size":2893,"imports":["flare.query.Expression"]},
+{"name":"flare.query.Comparison","size":5103,"imports":["flare.query.Not","flare.query.BinaryExpression","flare.query.Expression","flare.query.Or"]},
+{"name":"flare.query.CompositeExpression","size":3677,"imports":["flare.query.Expression","flare.query.If"]},
+{"name":"flare.query.Count","size":781,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
+{"name":"flare.query.DateUtil","size":4141,"imports":["flare.query.Fn"]},
+{"name":"flare.query.Distinct","size":933,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
+{"name":"flare.query.Expression","size":5130,"imports":["flare.query.Variable","flare.query.IsA","flare.query.ExpressionIterator","flare.util.IPredicate","flare.query.Literal","flare.util.IEvaluable","flare.query.If"]},
+{"name":"flare.query.ExpressionIterator","size":3617,"imports":["flare.query.Expression"]},
+{"name":"flare.query.Fn","size":3240,"imports":["flare.query.DateUtil","flare.query.CompositeExpression","flare.query.Expression","flare.query.StringUtil"]},
+{"name":"flare.query.If","size":2732,"imports":["flare.query.Expression"]},
+{"name":"flare.query.IsA","size":2039,"imports":["flare.query.Expression","flare.query.If"]},
+{"name":"flare.query.Literal","size":1214,"imports":["flare.query.Expression"]},
+{"name":"flare.query.Match","size":3748,"imports":["flare.query.BinaryExpression","flare.query.Expression","flare.query.StringUtil"]},
+{"name":"flare.query.Maximum","size":843,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
+{"name":"flare.query.methods.add","size":593,"imports":["flare.query.methods.or","flare.query.Arithmetic"]},
+{"name":"flare.query.methods.and","size":330,"imports":["flare.query.And","flare.query.methods.or"]},
+{"name":"flare.query.methods.average","size":287,"imports":["flare.query.Average","flare.query.methods.or"]},
+{"name":"flare.query.methods.count","size":277,"imports":["flare.query.Count","flare.query.methods.or"]},
+{"name":"flare.query.methods.distinct","size":292,"imports":["flare.query.Distinct","flare.query.methods.or"]},
+{"name":"flare.query.methods.div","size":595,"imports":["flare.query.methods.or","flare.query.Arithmetic"]},
+{"name":"flare.query.methods.eq","size":594,"imports":["flare.query.Comparison","flare.query.methods.or"]},
+{"name":"flare.query.methods.fn","size":460,"imports":["flare.query.methods.or","flare.query.Fn"]},
+{"name":"flare.query.methods.gt","size":603,"imports":["flare.query.Comparison","flare.query.methods.or"]},
+{"name":"flare.query.methods.gte","size":625,"imports":["flare.query.Comparison","flare.query.methods.gt","flare.query.methods.eq","flare.query.methods.or"]},
+{"name":"flare.query.methods.iff","size":748,"imports":["flare.query.methods.or","flare.query.If"]},
+{"name":"flare.query.methods.isa","size":461,"imports":["flare.query.IsA","flare.query.methods.or"]},
+{"name":"flare.query.methods.lt","size":597,"imports":["flare.query.Comparison","flare.query.methods.or"]},
+{"name":"flare.query.methods.lte","size":619,"imports":["flare.query.Comparison","flare.query.methods.lt","flare.query.methods.eq","flare.query.methods.or"]},
+{"name":"flare.query.methods.max","size":283,"imports":["flare.query.Maximum","flare.query.methods.or"]},
+{"name":"flare.query.methods.min","size":283,"imports":["flare.query.Minimum","flare.query.methods.or"]},
+{"name":"flare.query.methods.mod","size":591,"imports":["flare.query.methods.or","flare.query.Arithmetic"]},
+{"name":"flare.query.methods.mul","size":603,"imports":["flare.query.methods.lt","flare.query.methods.or","flare.query.Arithmetic"]},
+{"name":"flare.query.methods.neq","size":599,"imports":["flare.query.Comparison","flare.query.methods.eq","flare.query.methods.or"]},
+{"name":"flare.query.methods.not","size":386,"imports":["flare.query.Not","flare.query.methods.or"]},
+{"name":"flare.query.methods.or","size":323,"imports":["flare.query.Or"]},
+{"name":"flare.query.methods.orderby","size":307,"imports":["flare.query.Query","flare.query.methods.or"]},
+{"name":"flare.query.methods.range","size":772,"imports":["flare.query.methods.max","flare.query.Range","flare.query.methods.or","flare.query.methods.min"]},
+{"name":"flare.query.methods.select","size":296,"imports":["flare.query.Query"]},
+{"name":"flare.query.methods.stddev","size":363,"imports":["flare.query.methods.and","flare.query.Variance","flare.query.methods.or"]},
+{"name":"flare.query.methods.sub","size":600,"imports":["flare.query.methods.or","flare.query.Arithmetic"]},
+{"name":"flare.query.methods.sum","size":280,"imports":["flare.query.Sum","flare.query.methods.or"]},
+{"name":"flare.query.methods.update","size":307,"imports":["flare.query.Query"]},
+{"name":"flare.query.methods.variance","size":335,"imports":["flare.query.Variance","flare.query.methods.or"]},
+{"name":"flare.query.methods.where","size":299,"imports":["flare.query.Query","flare.query.methods.lt","flare.query.methods.lte"]},
+{"name":"flare.query.methods.xor","size":354,"imports":["flare.query.Xor","flare.query.methods.or"]},
+{"name":"flare.query.methods._","size":264,"imports":["flare.query.Literal","flare.query.methods.or"]},
+{"name":"flare.query.Minimum","size":843,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
+{"name":"flare.query.Not","size":1554,"imports":["flare.query.Expression"]},
+{"name":"flare.query.Or","size":970,"imports":["flare.query.CompositeExpression","flare.query.Expression"]},
+{"name":"flare.query.Query","size":13896,"imports":["flare.query.Variable","flare.query.Sum","flare.query.Expression","flare.util.Sort","flare.query.Not","flare.query.AggregateExpression","flare.query.Literal","flare.util.Filter","flare.util.Property","flare.query.If"]},
+{"name":"flare.query.Range","size":1594,"imports":["flare.query.And","flare.query.Comparison","flare.query.Expression"]},
+{"name":"flare.query.StringUtil","size":4130,"imports":["flare.query.Fn"]},
+{"name":"flare.query.Sum","size":791,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
+{"name":"flare.query.Variable","size":1124,"imports":["flare.query.Expression","flare.util.Property"]},
+{"name":"flare.query.Variance","size":1876,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
+{"name":"flare.query.Xor","size":1101,"imports":["flare.query.CompositeExpression","flare.query.Expression"]},
+{"name":"flare.scale.IScaleMap","size":2105,"imports":["flare.scale.Scale"]},
+{"name":"flare.scale.LinearScale","size":1316,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale","flare.scale.QuantitativeScale","flare.scale.ScaleType"]},
+{"name":"flare.scale.LogScale","size":3151,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale","flare.scale.QuantitativeScale","flare.scale.ScaleType"]},
+{"name":"flare.scale.OrdinalScale","size":3770,"imports":["flare.scale.ScaleType","flare.util.Arrays","flare.scale.Scale"]},
+{"name":"flare.scale.QuantileScale","size":2435,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale","flare.scale.ScaleType"]},
+{"name":"flare.scale.QuantitativeScale","size":4839,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale"]},
+{"name":"flare.scale.RootScale","size":1756,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale","flare.scale.QuantitativeScale","flare.scale.ScaleType"]},
+{"name":"flare.scale.Scale","size":4268,"imports":["flare.scale.ScaleType","flare.util.Strings"]},
+{"name":"flare.scale.ScaleType","size":1821,"imports":["flare.scale.Scale"]},
+{"name":"flare.scale.TimeScale","size":5833,"imports":["flare.util.Maths","flare.util.Dates","flare.scale.Scale","flare.scale.ScaleType"]},
+{"name":"flare.util.Arrays","size":8258,"imports":["flare.util.IValueProxy","flare.util.Property","flare.util.IEvaluable"]},
+{"name":"flare.util.Colors","size":10001,"imports":["flare.util.Filter"]},
+{"name":"flare.util.Dates","size":8217,"imports":["flare.util.Maths"]},
+{"name":"flare.util.Displays","size":12555,"imports":["flare.util.IValueProxy","flare.util.Filter","flare.util.Property","flare.util.IEvaluable","flare.util.Sort"]},
+{"name":"flare.util.Filter","size":2324,"imports":["flare.util.IPredicate","flare.util.Property"]},
+{"name":"flare.util.Geometry","size":10993,"imports":[]},
+{"name":"flare.util.heap.FibonacciHeap","size":9354,"imports":["flare.util.heap.HeapNode"]},
+{"name":"flare.util.heap.HeapNode","size":1233,"imports":["flare.util.heap.FibonacciHeap"]},
+{"name":"flare.util.IEvaluable","size":335,"imports":[]},
+{"name":"flare.util.IPredicate","size":383,"imports":[]},
+{"name":"flare.util.IValueProxy","size":874,"imports":[]},
+{"name":"flare.util.math.DenseMatrix","size":3165,"imports":["flare.util.math.IMatrix"]},
+{"name":"flare.util.math.IMatrix","size":2815,"imports":[]},
+{"name":"flare.util.math.SparseMatrix","size":3366,"imports":["flare.util.math.IMatrix"]},
+{"name":"flare.util.Maths","size":17705,"imports":["flare.util.Arrays"]},
+{"name":"flare.util.Orientation","size":1486,"imports":[]},
+{"name":"flare.util.palette.ColorPalette","size":6367,"imports":["flare.util.palette.Palette","flare.util.Colors"]},
+{"name":"flare.util.palette.Palette","size":1229,"imports":[]},
+{"name":"flare.util.palette.ShapePalette","size":2059,"imports":["flare.util.palette.Palette","flare.util.Shapes"]},
+{"name":"flare.util.palette.SizePalette","size":2291,"imports":["flare.util.palette.Palette"]},
+{"name":"flare.util.Property","size":5559,"imports":["flare.util.IPredicate","flare.util.IValueProxy","flare.util.IEvaluable"]},
+{"name":"flare.util.Shapes","size":19118,"imports":["flare.util.Arrays"]},
+{"name":"flare.util.Sort","size":6887,"imports":["flare.util.Arrays","flare.util.Property"]},
+{"name":"flare.util.Stats","size":6557,"imports":["flare.util.Arrays","flare.util.Property"]},
+{"name":"flare.util.Strings","size":22026,"imports":["flare.util.Dates","flare.util.Property"]},
+{"name":"flare.vis.axis.Axes","size":1302,"imports":["flare.animate.Transitioner","flare.vis.Visualization"]},
+{"name":"flare.vis.axis.Axis","size":24593,"imports":["flare.animate.Transitioner","flare.scale.LinearScale","flare.util.Arrays","flare.scale.ScaleType","flare.util.Strings","flare.display.TextSprite","flare.scale.Scale","flare.util.Stats","flare.scale.IScaleMap","flare.vis.axis.AxisLabel","flare.vis.axis.AxisGridLine"]},
+{"name":"flare.vis.axis.AxisGridLine","size":652,"imports":["flare.vis.axis.Axis","flare.display.LineSprite"]},
+{"name":"flare.vis.axis.AxisLabel","size":636,"imports":["flare.vis.axis.Axis","flare.display.TextSprite"]},
+{"name":"flare.vis.axis.CartesianAxes","size":6703,"imports":["flare.animate.Transitioner","flare.display.RectSprite","flare.vis.axis.Axis","flare.display.TextSprite","flare.vis.axis.Axes","flare.vis.Visualization","flare.vis.axis.AxisGridLine"]},
+{"name":"flare.vis.controls.AnchorControl","size":2138,"imports":["flare.vis.controls.Control","flare.vis.Visualization","flare.vis.operator.layout.Layout"]},
+{"name":"flare.vis.controls.ClickControl","size":3824,"imports":["flare.vis.events.SelectionEvent","flare.vis.controls.Control"]},
+{"name":"flare.vis.controls.Control","size":1353,"imports":["flare.vis.controls.IControl","flare.util.Filter"]},
+{"name":"flare.vis.controls.ControlList","size":4665,"imports":["flare.vis.controls.IControl","flare.util.Arrays","flare.vis.Visualization","flare.vis.controls.Control"]},
+{"name":"flare.vis.controls.DragControl","size":2649,"imports":["flare.vis.controls.Control","flare.vis.data.DataSprite"]},
+{"name":"flare.vis.controls.ExpandControl","size":2832,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.controls.Control","flare.vis.Visualization"]},
+{"name":"flare.vis.controls.HoverControl","size":4896,"imports":["flare.vis.events.SelectionEvent","flare.vis.controls.Control"]},
+{"name":"flare.vis.controls.IControl","size":763,"imports":["flare.vis.controls.Control"]},
+{"name":"flare.vis.controls.PanZoomControl","size":5222,"imports":["flare.util.Displays","flare.vis.controls.Control"]},
+{"name":"flare.vis.controls.SelectionControl","size":7862,"imports":["flare.vis.events.SelectionEvent","flare.vis.controls.Control"]},
+{"name":"flare.vis.controls.TooltipControl","size":8435,"imports":["flare.animate.Tween","flare.display.TextSprite","flare.vis.controls.Control","flare.vis.events.TooltipEvent"]},
+{"name":"flare.vis.data.Data","size":20544,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.util.Arrays","flare.vis.data.DataSprite","flare.vis.data.Tree","flare.vis.events.DataEvent","flare.data.DataSet","flare.vis.data.TreeBuilder","flare.vis.data.DataList","flare.data.DataSchema","flare.util.Sort","flare.data.DataField","flare.util.Property"]},
+{"name":"flare.vis.data.DataList","size":19788,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.util.Arrays","flare.util.math.DenseMatrix","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.vis.events.DataEvent","flare.util.Stats","flare.util.math.IMatrix","flare.util.Sort","flare.util.Filter","flare.util.Property","flare.util.IEvaluable","flare.vis.data.Data"]},
+{"name":"flare.vis.data.DataSprite","size":10349,"imports":["flare.util.Colors","flare.vis.data.Data","flare.display.DirtySprite","flare.vis.data.render.IRenderer","flare.vis.data.render.ShapeRenderer"]},
+{"name":"flare.vis.data.EdgeSprite","size":3301,"imports":["flare.vis.data.render.EdgeRenderer","flare.vis.data.DataSprite","flare.vis.data.NodeSprite","flare.vis.data.render.ArrowType","flare.vis.data.Data"]},
+{"name":"flare.vis.data.NodeSprite","size":19382,"imports":["flare.animate.Transitioner","flare.util.Arrays","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.vis.data.Tree","flare.util.Sort","flare.util.Filter","flare.util.IEvaluable","flare.vis.data.Data"]},
+{"name":"flare.vis.data.render.ArrowType","size":698,"imports":[]},
+{"name":"flare.vis.data.render.EdgeRenderer","size":5569,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.vis.data.DataSprite","flare.vis.data.render.IRenderer","flare.util.Shapes","flare.util.Geometry","flare.vis.data.render.ArrowType"]},
+{"name":"flare.vis.data.render.IRenderer","size":353,"imports":["flare.vis.data.DataSprite"]},
+{"name":"flare.vis.data.render.ShapeRenderer","size":2247,"imports":["flare.util.Shapes","flare.vis.data.render.IRenderer","flare.vis.data.DataSprite"]},
+{"name":"flare.vis.data.ScaleBinding","size":11275,"imports":["flare.scale.TimeScale","flare.scale.ScaleType","flare.scale.LinearScale","flare.scale.LogScale","flare.scale.OrdinalScale","flare.scale.RootScale","flare.scale.Scale","flare.scale.QuantileScale","flare.util.Stats","flare.scale.QuantitativeScale","flare.vis.events.DataEvent","flare.vis.data.Data"]},
+{"name":"flare.vis.data.Tree","size":7147,"imports":["flare.vis.data.EdgeSprite","flare.vis.events.DataEvent","flare.vis.data.NodeSprite","flare.vis.data.Data"]},
+{"name":"flare.vis.data.TreeBuilder","size":9930,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.vis.data.Tree","flare.util.heap.HeapNode","flare.util.heap.FibonacciHeap","flare.util.Property","flare.util.IEvaluable","flare.vis.data.Data"]},
+{"name":"flare.vis.events.DataEvent","size":2313,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.vis.data.DataSprite"]},
+{"name":"flare.vis.events.SelectionEvent","size":1880,"imports":["flare.vis.events.DataEvent"]},
+{"name":"flare.vis.events.TooltipEvent","size":1701,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite"]},
+{"name":"flare.vis.events.VisualizationEvent","size":1117,"imports":["flare.animate.Transitioner"]},
+{"name":"flare.vis.legend.Legend","size":20859,"imports":["flare.animate.Transitioner","flare.vis.data.ScaleBinding","flare.util.palette.SizePalette","flare.scale.ScaleType","flare.vis.legend.LegendItem","flare.display.RectSprite","flare.display.TextSprite","flare.scale.Scale","flare.vis.legend.LegendRange","flare.util.Displays","flare.util.Orientation","flare.util.palette.ShapePalette","flare.util.palette.Palette","flare.util.palette.ColorPalette"]},
+{"name":"flare.vis.legend.LegendItem","size":4614,"imports":["flare.util.Shapes","flare.display.TextSprite","flare.vis.legend.Legend","flare.display.RectSprite"]},
+{"name":"flare.vis.legend.LegendRange","size":10530,"imports":["flare.util.Colors","flare.vis.legend.Legend","flare.display.RectSprite","flare.display.TextSprite","flare.scale.Scale","flare.util.Stats","flare.scale.IScaleMap","flare.util.Orientation","flare.util.palette.ColorPalette"]},
+{"name":"flare.vis.operator.distortion.BifocalDistortion","size":4461,"imports":["flare.vis.operator.distortion.Distortion"]},
+{"name":"flare.vis.operator.distortion.Distortion","size":6314,"imports":["flare.animate.Transitioner","flare.vis.data.DataSprite","flare.vis.events.VisualizationEvent","flare.vis.axis.Axis","flare.vis.axis.CartesianAxes","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.distortion.FisheyeDistortion","size":3444,"imports":["flare.vis.operator.distortion.Distortion"]},
+{"name":"flare.vis.operator.encoder.ColorEncoder","size":3179,"imports":["flare.animate.Transitioner","flare.scale.ScaleType","flare.vis.operator.encoder.Encoder","flare.util.palette.Palette","flare.util.palette.ColorPalette","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.encoder.Encoder","size":4060,"imports":["flare.animate.Transitioner","flare.vis.data.DataSprite","flare.vis.operator.Operator","flare.vis.data.ScaleBinding","flare.util.palette.Palette","flare.util.Filter","flare.util.Property","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.encoder.PropertyEncoder","size":4138,"imports":["flare.animate.Transitioner","flare.vis.data.DataList","flare.vis.data.Data","flare.vis.operator.encoder.Encoder","flare.util.Filter","flare.vis.operator.Operator"]},
+{"name":"flare.vis.operator.encoder.ShapeEncoder","size":1690,"imports":["flare.util.palette.Palette","flare.scale.ScaleType","flare.util.palette.ShapePalette","flare.vis.operator.encoder.Encoder","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.encoder.SizeEncoder","size":1830,"imports":["flare.util.palette.Palette","flare.scale.ScaleType","flare.vis.operator.encoder.Encoder","flare.util.palette.SizePalette","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.filter.FisheyeTreeFilter","size":5219,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.vis.data.Tree","flare.vis.operator.Operator","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.filter.GraphDistanceFilter","size":3165,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.operator.Operator","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite"]},
+{"name":"flare.vis.operator.filter.VisibilityFilter","size":3509,"imports":["flare.vis.operator.Operator","flare.animate.Transitioner","flare.util.Filter","flare.vis.data.DataSprite","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.IOperator","size":1286,"imports":["flare.animate.Transitioner","flare.vis.Visualization","flare.vis.operator.Operator"]},
+{"name":"flare.vis.operator.label.Labeler","size":9956,"imports":["flare.animate.Transitioner","flare.vis.data.DataSprite","flare.display.TextSprite","flare.vis.operator.Operator","flare.util.Shapes","flare.util.Filter","flare.util.Property","flare.util.IEvaluable","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.label.RadialLabeler","size":3899,"imports":["flare.vis.operator.label.Labeler","flare.util.Shapes","flare.display.TextSprite","flare.vis.data.DataSprite","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.label.StackedAreaLabeler","size":3202,"imports":["flare.vis.operator.label.Labeler","flare.display.TextSprite","flare.vis.data.DataSprite","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.layout.AxisLayout","size":6725,"imports":["flare.scale.ScaleType","flare.vis.data.DataSprite","flare.vis.axis.CartesianAxes","flare.vis.data.ScaleBinding","flare.util.Property","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.layout.BundledEdgeRouter","size":3727,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.util.Arrays","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.util.Shapes","flare.vis.operator.layout.Layout","flare.vis.operator.Operator"]},
+{"name":"flare.vis.operator.layout.CircleLayout","size":9317,"imports":["flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.vis.data.ScaleBinding","flare.util.Property","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.layout.CirclePackingLayout","size":12003,"imports":["flare.vis.data.NodeSprite","flare.vis.data.render.ShapeRenderer","flare.util.Shapes","flare.util.Sort","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.layout.DendrogramLayout","size":4853,"imports":["flare.util.Property","flare.vis.data.NodeSprite","flare.util.Orientation","flare.vis.operator.layout.Layout","flare.vis.data.EdgeSprite"]},
+{"name":"flare.vis.operator.layout.ForceDirectedLayout","size":8411,"imports":["flare.physics.Simulation","flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.DataSprite","flare.physics.Particle","flare.physics.Spring","flare.vis.operator.layout.Layout","flare.vis.data.EdgeSprite","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.layout.IcicleTreeLayout","size":4864,"imports":["flare.vis.data.NodeSprite","flare.util.Orientation","flare.vis.operator.layout.Layout"]},
+{"name":"flare.vis.operator.layout.IndentedTreeLayout","size":3174,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.util.Arrays","flare.vis.operator.layout.Layout","flare.vis.data.EdgeSprite"]},
+{"name":"flare.vis.operator.layout.Layout","size":7881,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.vis.Visualization","flare.vis.axis.CartesianAxes","flare.vis.axis.Axes","flare.animate.TransitionEvent","flare.vis.operator.Operator"]},
+{"name":"flare.vis.operator.layout.NodeLinkTreeLayout","size":12870,"imports":["flare.vis.data.NodeSprite","flare.util.Arrays","flare.util.Orientation","flare.vis.operator.layout.Layout"]},
+{"name":"flare.vis.operator.layout.PieLayout","size":2728,"imports":["flare.vis.data.DataList","flare.vis.data.DataSprite","flare.util.Shapes","flare.util.Property","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.layout.RadialTreeLayout","size":12348,"imports":["flare.vis.data.NodeSprite","flare.util.Arrays","flare.vis.operator.layout.Layout"]},
+{"name":"flare.vis.operator.layout.RandomLayout","size":870,"imports":["flare.vis.operator.layout.Layout","flare.vis.data.DataSprite","flare.vis.data.Data"]},
+{"name":"flare.vis.operator.layout.StackedAreaLayout","size":9121,"imports":["flare.scale.TimeScale","flare.scale.LinearScale","flare.util.Arrays","flare.scale.OrdinalScale","flare.vis.data.NodeSprite","flare.scale.Scale","flare.vis.axis.CartesianAxes","flare.util.Stats","flare.util.Orientation","flare.scale.QuantitativeScale","flare.util.Maths","flare.vis.operator.layout.Layout"]},
+{"name":"flare.vis.operator.layout.TreeMapLayout","size":9191,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.util.Property","flare.vis.operator.layout.Layout"]},
+{"name":"flare.vis.operator.Operator","size":2490,"imports":["flare.animate.Transitioner","flare.vis.operator.IOperator","flare.util.Property","flare.util.IEvaluable","flare.vis.Visualization"]},
+{"name":"flare.vis.operator.OperatorList","size":5248,"imports":["flare.animate.Transitioner","flare.util.Arrays","flare.vis.operator.IOperator","flare.vis.Visualization","flare.vis.operator.Operator"]},
+{"name":"flare.vis.operator.OperatorSequence","size":4190,"imports":["flare.animate.Transitioner","flare.util.Arrays","flare.vis.operator.IOperator","flare.vis.operator.OperatorList","flare.animate.FunctionSequence","flare.vis.operator.Operator"]},
+{"name":"flare.vis.operator.OperatorSwitch","size":2581,"imports":["flare.animate.Transitioner","flare.vis.operator.OperatorList","flare.vis.operator.IOperator","flare.vis.operator.Operator"]},
+{"name":"flare.vis.operator.SortOperator","size":2023,"imports":["flare.vis.operator.Operator","flare.animate.Transitioner","flare.util.Arrays","flare.vis.data.Data"]},
+{"name":"flare.vis.Visualization","size":16540,"imports":["flare.animate.Transitioner","flare.vis.operator.IOperator","flare.animate.Scheduler","flare.vis.events.VisualizationEvent","flare.vis.data.Tree","flare.vis.events.DataEvent","flare.vis.axis.Axes","flare.vis.axis.CartesianAxes","flare.util.Displays","flare.vis.operator.OperatorList","flare.vis.controls.ControlList","flare.animate.ISchedulable","flare.vis.data.Data"]}
+]
Index: /Dev/trunk/d3/examples/data/flare.json
===================================================================
--- /Dev/trunk/d3/examples/data/flare.json	(revision 76)
+++ /Dev/trunk/d3/examples/data/flare.json	(revision 76)
@@ -0,0 +1,380 @@
+{
+ "name": "flare",
+ "children": [
+  {
+   "name": "analytics",
+   "children": [
+    {
+     "name": "cluster",
+     "children": [
+      {"name": "AgglomerativeCluster", "size": 3938},
+      {"name": "CommunityStructure", "size": 3812},
+      {"name": "HierarchicalCluster", "size": 6714},
+      {"name": "MergeEdge", "size": 743}
+     ]
+    },
+    {
+     "name": "graph",
+     "children": [
+      {"name": "BetweennessCentrality", "size": 3534},
+      {"name": "LinkDistance", "size": 5731},
+      {"name": "MaxFlowMinCut", "size": 7840},
+      {"name": "ShortestPaths", "size": 5914},
+      {"name": "SpanningTree", "size": 3416}
+     ]
+    },
+    {
+     "name": "optimization",
+     "children": [
+      {"name": "AspectRatioBanker", "size": 7074}
+     ]
+    }
+   ]
+  },
+  {
+   "name": "animate",
+   "children": [
+    {"name": "Easing", "size": 17010},
+    {"name": "FunctionSequence", "size": 5842},
+    {
+     "name": "interpolate",
+     "children": [
+      {"name": "ArrayInterpolator", "size": 1983},
+      {"name": "ColorInterpolator", "size": 2047},
+      {"name": "DateInterpolator", "size": 1375},
+      {"name": "Interpolator", "size": 8746},
+      {"name": "MatrixInterpolator", "size": 2202},
+      {"name": "NumberInterpolator", "size": 1382},
+      {"name": "ObjectInterpolator", "size": 1629},
+      {"name": "PointInterpolator", "size": 1675},
+      {"name": "RectangleInterpolator", "size": 2042}
+     ]
+    },
+    {"name": "ISchedulable", "size": 1041},
+    {"name": "Parallel", "size": 5176},
+    {"name": "Pause", "size": 449},
+    {"name": "Scheduler", "size": 5593},
+    {"name": "Sequence", "size": 5534},
+    {"name": "Transition", "size": 9201},
+    {"name": "Transitioner", "size": 19975},
+    {"name": "TransitionEvent", "size": 1116},
+    {"name": "Tween", "size": 6006}
+   ]
+  },
+  {
+   "name": "data",
+   "children": [
+    {
+     "name": "converters",
+     "children": [
+      {"name": "Converters", "size": 721},
+      {"name": "DelimitedTextConverter", "size": 4294},
+      {"name": "GraphMLConverter", "size": 9800},
+      {"name": "IDataConverter", "size": 1314},
+      {"name": "JSONConverter", "size": 2220}
+     ]
+    },
+    {"name": "DataField", "size": 1759},
+    {"name": "DataSchema", "size": 2165},
+    {"name": "DataSet", "size": 586},
+    {"name": "DataSource", "size": 3331},
+    {"name": "DataTable", "size": 772},
+    {"name": "DataUtil", "size": 3322}
+   ]
+  },
+  {
+   "name": "display",
+   "children": [
+    {"name": "DirtySprite", "size": 8833},
+    {"name": "LineSprite", "size": 1732},
+    {"name": "RectSprite", "size": 3623},
+    {"name": "TextSprite", "size": 10066}
+   ]
+  },
+  {
+   "name": "flex",
+   "children": [
+    {"name": "FlareVis", "size": 4116}
+   ]
+  },
+  {
+   "name": "physics",
+   "children": [
+    {"name": "DragForce", "size": 1082},
+    {"name": "GravityForce", "size": 1336},
+    {"name": "IForce", "size": 319},
+    {"name": "NBodyForce", "size": 10498},
+    {"name": "Particle", "size": 2822},
+    {"name": "Simulation", "size": 9983},
+    {"name": "Spring", "size": 2213},
+    {"name": "SpringForce", "size": 1681}
+   ]
+  },
+  {
+   "name": "query",
+   "children": [
+    {"name": "AggregateExpression", "size": 1616},
+    {"name": "And", "size": 1027},
+    {"name": "Arithmetic", "size": 3891},
+    {"name": "Average", "size": 891},
+    {"name": "BinaryExpression", "size": 2893},
+    {"name": "Comparison", "size": 5103},
+    {"name": "CompositeExpression", "size": 3677},
+    {"name": "Count", "size": 781},
+    {"name": "DateUtil", "size": 4141},
+    {"name": "Distinct", "size": 933},
+    {"name": "Expression", "size": 5130},
+    {"name": "ExpressionIterator", "size": 3617},
+    {"name": "Fn", "size": 3240},
+    {"name": "If", "size": 2732},
+    {"name": "IsA", "size": 2039},
+    {"name": "Literal", "size": 1214},
+    {"name": "Match", "size": 3748},
+    {"name": "Maximum", "size": 843},
+    {
+     "name": "methods",
+     "children": [
+      {"name": "add", "size": 593},
+      {"name": "and", "size": 330},
+      {"name": "average", "size": 287},
+      {"name": "count", "size": 277},
+      {"name": "distinct", "size": 292},
+      {"name": "div", "size": 595},
+      {"name": "eq", "size": 594},
+      {"name": "fn", "size": 460},
+      {"name": "gt", "size": 603},
+      {"name": "gte", "size": 625},
+      {"name": "iff", "size": 748},
+      {"name": "isa", "size": 461},
+      {"name": "lt", "size": 597},
+      {"name": "lte", "size": 619},
+      {"name": "max", "size": 283},
+      {"name": "min", "size": 283},
+      {"name": "mod", "size": 591},
+      {"name": "mul", "size": 603},
+      {"name": "neq", "size": 599},
+      {"name": "not", "size": 386},
+      {"name": "or", "size": 323},
+      {"name": "orderby", "size": 307},
+      {"name": "range", "size": 772},
+      {"name": "select", "size": 296},
+      {"name": "stddev", "size": 363},
+      {"name": "sub", "size": 600},
+      {"name": "sum", "size": 280},
+      {"name": "update", "size": 307},
+      {"name": "variance", "size": 335},
+      {"name": "where", "size": 299},
+      {"name": "xor", "size": 354},
+      {"name": "_", "size": 264}
+     ]
+    },
+    {"name": "Minimum", "size": 843},
+    {"name": "Not", "size": 1554},
+    {"name": "Or", "size": 970},
+    {"name": "Query", "size": 13896},
+    {"name": "Range", "size": 1594},
+    {"name": "StringUtil", "size": 4130},
+    {"name": "Sum", "size": 791},
+    {"name": "Variable", "size": 1124},
+    {"name": "Variance", "size": 1876},
+    {"name": "Xor", "size": 1101}
+   ]
+  },
+  {
+   "name": "scale",
+   "children": [
+    {"name": "IScaleMap", "size": 2105},
+    {"name": "LinearScale", "size": 1316},
+    {"name": "LogScale", "size": 3151},
+    {"name": "OrdinalScale", "size": 3770},
+    {"name": "QuantileScale", "size": 2435},
+    {"name": "QuantitativeScale", "size": 4839},
+    {"name": "RootScale", "size": 1756},
+    {"name": "Scale", "size": 4268},
+    {"name": "ScaleType", "size": 1821},
+    {"name": "TimeScale", "size": 5833}
+   ]
+  },
+  {
+   "name": "util",
+   "children": [
+    {"name": "Arrays", "size": 8258},
+    {"name": "Colors", "size": 10001},
+    {"name": "Dates", "size": 8217},
+    {"name": "Displays", "size": 12555},
+    {"name": "Filter", "size": 2324},
+    {"name": "Geometry", "size": 10993},
+    {
+     "name": "heap",
+     "children": [
+      {"name": "FibonacciHeap", "size": 9354},
+      {"name": "HeapNode", "size": 1233}
+     ]
+    },
+    {"name": "IEvaluable", "size": 335},
+    {"name": "IPredicate", "size": 383},
+    {"name": "IValueProxy", "size": 874},
+    {
+     "name": "math",
+     "children": [
+      {"name": "DenseMatrix", "size": 3165},
+      {"name": "IMatrix", "size": 2815},
+      {"name": "SparseMatrix", "size": 3366}
+     ]
+    },
+    {"name": "Maths", "size": 17705},
+    {"name": "Orientation", "size": 1486},
+    {
+     "name": "palette",
+     "children": [
+      {"name": "ColorPalette", "size": 6367},
+      {"name": "Palette", "size": 1229},
+      {"name": "ShapePalette", "size": 2059},
+      {"name": "SizePalette", "size": 2291}
+     ]
+    },
+    {"name": "Property", "size": 5559},
+    {"name": "Shapes", "size": 19118},
+    {"name": "Sort", "size": 6887},
+    {"name": "Stats", "size": 6557},
+    {"name": "Strings", "size": 22026}
+   ]
+  },
+  {
+   "name": "vis",
+   "children": [
+    {
+     "name": "axis",
+     "children": [
+      {"name": "Axes", "size": 1302},
+      {"name": "Axis", "size": 24593},
+      {"name": "AxisGridLine", "size": 652},
+      {"name": "AxisLabel", "size": 636},
+      {"name": "CartesianAxes", "size": 6703}
+     ]
+    },
+    {
+     "name": "controls",
+     "children": [
+      {"name": "AnchorControl", "size": 2138},
+      {"name": "ClickControl", "size": 3824},
+      {"name": "Control", "size": 1353},
+      {"name": "ControlList", "size": 4665},
+      {"name": "DragControl", "size": 2649},
+      {"name": "ExpandControl", "size": 2832},
+      {"name": "HoverControl", "size": 4896},
+      {"name": "IControl", "size": 763},
+      {"name": "PanZoomControl", "size": 5222},
+      {"name": "SelectionControl", "size": 7862},
+      {"name": "TooltipControl", "size": 8435}
+     ]
+    },
+    {
+     "name": "data",
+     "children": [
+      {"name": "Data", "size": 20544},
+      {"name": "DataList", "size": 19788},
+      {"name": "DataSprite", "size": 10349},
+      {"name": "EdgeSprite", "size": 3301},
+      {"name": "NodeSprite", "size": 19382},
+      {
+       "name": "render",
+       "children": [
+        {"name": "ArrowType", "size": 698},
+        {"name": "EdgeRenderer", "size": 5569},
+        {"name": "IRenderer", "size": 353},
+        {"name": "ShapeRenderer", "size": 2247}
+       ]
+      },
+      {"name": "ScaleBinding", "size": 11275},
+      {"name": "Tree", "size": 7147},
+      {"name": "TreeBuilder", "size": 9930}
+     ]
+    },
+    {
+     "name": "events",
+     "children": [
+      {"name": "DataEvent", "size": 2313},
+      {"name": "SelectionEvent", "size": 1880},
+      {"name": "TooltipEvent", "size": 1701},
+      {"name": "VisualizationEvent", "size": 1117}
+     ]
+    },
+    {
+     "name": "legend",
+     "children": [
+      {"name": "Legend", "size": 20859},
+      {"name": "LegendItem", "size": 4614},
+      {"name": "LegendRange", "size": 10530}
+     ]
+    },
+    {
+     "name": "operator",
+     "children": [
+      {
+       "name": "distortion",
+       "children": [
+        {"name": "BifocalDistortion", "size": 4461},
+        {"name": "Distortion", "size": 6314},
+        {"name": "FisheyeDistortion", "size": 3444}
+       ]
+      },
+      {
+       "name": "encoder",
+       "children": [
+        {"name": "ColorEncoder", "size": 3179},
+        {"name": "Encoder", "size": 4060},
+        {"name": "PropertyEncoder", "size": 4138},
+        {"name": "ShapeEncoder", "size": 1690},
+        {"name": "SizeEncoder", "size": 1830}
+       ]
+      },
+      {
+       "name": "filter",
+       "children": [
+        {"name": "FisheyeTreeFilter", "size": 5219},
+        {"name": "GraphDistanceFilter", "size": 3165},
+        {"name": "VisibilityFilter", "size": 3509}
+       ]
+      },
+      {"name": "IOperator", "size": 1286},
+      {
+       "name": "label",
+       "children": [
+        {"name": "Labeler", "size": 9956},
+        {"name": "RadialLabeler", "size": 3899},
+        {"name": "StackedAreaLabeler", "size": 3202}
+       ]
+      },
+      {
+       "name": "layout",
+       "children": [
+        {"name": "AxisLayout", "size": 6725},
+        {"name": "BundledEdgeRouter", "size": 3727},
+        {"name": "CircleLayout", "size": 9317},
+        {"name": "CirclePackingLayout", "size": 12003},
+        {"name": "DendrogramLayout", "size": 4853},
+        {"name": "ForceDirectedLayout", "size": 8411},
+        {"name": "IcicleTreeLayout", "size": 4864},
+        {"name": "IndentedTreeLayout", "size": 3174},
+        {"name": "Layout", "size": 7881},
+        {"name": "NodeLinkTreeLayout", "size": 12870},
+        {"name": "PieLayout", "size": 2728},
+        {"name": "RadialTreeLayout", "size": 12348},
+        {"name": "RandomLayout", "size": 870},
+        {"name": "StackedAreaLayout", "size": 9121},
+        {"name": "TreeMapLayout", "size": 9191}
+       ]
+      },
+      {"name": "Operator", "size": 2490},
+      {"name": "OperatorList", "size": 5248},
+      {"name": "OperatorSequence", "size": 4190},
+      {"name": "OperatorSwitch", "size": 2581},
+      {"name": "SortOperator", "size": 2023}
+     ]
+    },
+    {"name": "Visualization", "size": 16540}
+   ]
+  }
+ ]
+}
Index: /Dev/trunk/d3/examples/data/morley.csv
===================================================================
--- /Dev/trunk/d3/examples/data/morley.csv	(revision 76)
+++ /Dev/trunk/d3/examples/data/morley.csv	(revision 76)
@@ -0,0 +1,101 @@
+Expt,Run,Speed
+1,1,850
+1,2,740
+1,3,900
+1,4,1070
+1,5,930
+1,6,850
+1,7,950
+1,8,980
+1,9,980
+1,10,880
+1,11,1000
+1,12,980
+1,13,930
+1,14,650
+1,15,760
+1,16,810
+1,17,1000
+1,18,1000
+1,19,960
+1,20,960
+2,1,960
+2,2,940
+2,3,960
+2,4,940
+2,5,880
+2,6,800
+2,7,850
+2,8,880
+2,9,900
+2,10,840
+2,11,830
+2,12,790
+2,13,810
+2,14,880
+2,15,880
+2,16,830
+2,17,800
+2,18,790
+2,19,760
+2,20,800
+3,1,880
+3,2,880
+3,3,880
+3,4,860
+3,5,720
+3,6,720
+3,7,620
+3,8,860
+3,9,970
+3,10,950
+3,11,880
+3,12,910
+3,13,850
+3,14,870
+3,15,840
+3,16,840
+3,17,850
+3,18,840
+3,19,840
+3,20,840
+4,1,890
+4,2,810
+4,3,810
+4,4,820
+4,5,800
+4,6,770
+4,7,760
+4,8,740
+4,9,750
+4,10,760
+4,11,910
+4,12,920
+4,13,890
+4,14,860
+4,15,880
+4,16,720
+4,17,840
+4,18,850
+4,19,850
+4,20,780
+5,1,890
+5,2,840
+5,3,780
+5,4,810
+5,5,760
+5,6,810
+5,7,790
+5,8,810
+5,9,820
+5,10,850
+5,11,870
+5,12,870
+5,13,810
+5,14,740
+5,15,810
+5,16,940
+5,17,950
+5,18,800
+5,19,810
+5,20,870
Index: /Dev/trunk/d3/examples/data/us-borders.json
===================================================================
--- /Dev/trunk/d3/examples/data/us-borders.json	(revision 76)
+++ /Dev/trunk/d3/examples/data/us-borders.json	(revision 76)
@@ -0,0 +1,1 @@
+{"30":["38","46","56","16"],"51":["24","37","47","21","54"],"45":["37","13"],"50":["33","25","36"],"19":["27","55","17","29","31","46"],"26":["39","18","55"],"35":["08","40","48","04"],"41":["53","16","32","06"],"04":["35","49","32","06"],"02":[],"25":["33","44","09","36"],"23":["33"],"01":["28","13","12","47"],"06":["41","32","04"],"21":["39","54","51","47","29","17","18"],"22":["05","28","48"],"05":["28","22","48","40","29","47"],"46":["38","27","19","31","56","30"],"47":["21","51","37","13","01","28","05","29"],"08":["35","49","56","31","20","40"],"09":["25","44","36"],"42":["36","34","10","24","54","39"],"29":["19","17","21","47","05","40","20","31"],"40":["20","29","05","48","35","08"],"18":["26","39","21","17"],"27":["55","19","46","38"],"28":["47","01","22","05"],"24":["10","42","54","51","11"],"39":["42","54","21","18","26"],"38":["68","46","30"],"20":["31","29","40","08"],"11":["24","51"],"10":["34","42","24"],"13":["12","01","47","37","45"],"12":["13","01"],"15":[],"48":["27","40","05","22"],"17":["18","21","29","19","55"],"16":["30","56","49","32","41","53"],"55":["26","17","19","27"],"54":["42","24","51","21","39"],"31":["46","19","29","20","08","56"],"56":["30","46","31","08","49","16"],"37":["51","45","13","47"],"36":["50","25","09","34","42"],"53":["16","41"],"34":["36","10","42"],"33":["23","25","50"],"32":["16","49","04","06","41"],"49":["16","56","08","04","32"],"44":["25","09"]}
Index: /Dev/trunk/d3/examples/data/us-counties.json
===================================================================
--- /Dev/trunk/d3/examples/data/us-counties.json	(revision 76)
+++ /Dev/trunk/d3/examples/data/us-counties.json	(revision 76)
@@ -0,0 +1,3216 @@
+{"type":"FeatureCollection","features":[
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-141.00045,68.498147],[-146.000897,68.487193],[-145.99542,67.999745],[-146.970315,67.999745],[-155.300742,67.999745],[-157.157424,68.207869],[-161.993563,68.2243],[-162.683657,68.300977],[-164.502001,68.229777],[-164.496525,68.021653],[-165.361881,68.02713],[-166.681824,68.339316],[-166.216284,68.881533],[-164.255539,68.930825],[-163.110859,69.374457],[-163.034181,69.724981],[-161.851162,70.311014],[-161.396576,70.239814],[-159.649432,70.792985],[-158.033735,70.831323],[-156.812377,71.285909],[-155.585543,71.170894],[-155.974405,70.809416],[-155.032372,71.148986],[-154.183446,70.7656],[-153.235935,70.924431],[-152.26104,70.842277],[-152.419871,70.606769],[-151.877654,70.431507],[-149.462323,70.519138],[-147.682318,70.201475],[-145.858496,70.168614],[-144.620708,69.971444],[-143.914183,70.130275],[-142.747594,70.042644],[-141.378359,69.63735],[-141.00045,69.648304],[-141.00045,68.498147]]]},"id":"02185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-146.970315,67.999745],[-145.99542,67.999745],[-146.000897,68.487193],[-141.00045,68.498147],[-141.00045,65.841831],[-141.838422,65.463922],[-142.605194,65.392722],[-144.06206,64.680719],[-143.886798,65.09149],[-145.644896,65.031244],[-146.19259,65.452968],[-146.696468,65.321521],[-148.66269,65.211983],[-148.646259,64.604042],[-147.99998,64.341149],[-149.232292,64.35758],[-150.749404,64.363057],[-151.302575,64.012533],[-152.047439,64.001579],[-152.244609,63.656532],[-152.852549,63.651055],[-152.436302,63.169084],[-153.000427,62.725452],[-153.000427,62.292773],[-153.734337,62.02988],[-157.064316,62.02988],[-158.532136,62.117511],[-159.266046,61.947726],[-160.536697,61.947726],[-161.046052,62.205142],[-160.848882,63.010253],[-160.690051,63.536039],[-159.698725,63.793455],[-159.956141,64.050871],[-159.978049,64.746443],[-159.578232,64.921705],[-159.594663,65.524168],[-159.594663,65.956846],[-158.964815,66.121155],[-157.896811,66.126632],[-157.891334,66.477156],[-155.563635,66.307371],[-155.514342,66.570264],[-154.199877,66.718141],[-154.145107,67.161773],[-154.747571,67.254881],[-154.687324,67.599929],[-155.350034,67.775191],[-155.300742,67.999745],[-146.970315,67.999745]]]},"id":"02290"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-162.683657,68.300977],[-161.993563,68.2243],[-157.157424,68.207869],[-155.300742,67.999745],[-155.350034,67.775191],[-154.687324,67.599929],[-154.747571,67.254881],[-154.145107,67.161773],[-154.199877,66.718141],[-155.514342,66.570264],[-155.563635,66.307371],[-157.891334,66.477156],[-157.896811,66.126632],[-158.964815,66.121155],[-159.594663,65.956846],[-159.594663,65.524168],[-159.802787,65.436537],[-163.757138,65.436537],[-164.244585,65.781584],[-164.403417,66.581218],[-163.751661,66.553833],[-163.768091,66.060908],[-161.840208,66.02257],[-160.991283,66.23617],[-162.502918,66.740049],[-161.884024,66.718141],[-161.851162,67.052235],[-162.902735,67.008419],[-163.740707,67.128912],[-164.009077,67.534205],[-165.361881,68.02713],[-164.496525,68.021653],[-164.502001,68.229777],[-162.683657,68.300977]]]},"id":"02188"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-164.403417,66.581218],[-164.244585,65.781584],[-163.757138,65.436537],[-159.802787,65.436537],[-159.594663,65.524168],[-159.578232,64.921705],[-159.978049,64.746443],[-159.956141,64.050871],[-159.698725,63.793455],[-160.690051,63.536039],[-160.848882,63.010253],[-161.993563,63.010253],[-162.585072,63.273146],[-162.294794,63.541516],[-161.13916,63.503177],[-160.766728,63.771547],[-161.374669,64.532842],[-160.783159,64.719058],[-161.144637,64.921705],[-162.541257,64.532842],[-162.787719,64.324718],[-163.598306,64.565704],[-165.000403,64.434257],[-166.188899,64.576658],[-166.884471,65.140782],[-166.34773,65.277706],[-167.47598,65.414629],[-168.105828,65.682999],[-165.88219,66.312848],[-164.403417,66.581218]]]},"id":"02180"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-141.838422,65.463922],[-141.00045,65.841831],[-141.00045,61.903911],[-141.827468,61.898434],[-141.964392,62.511851],[-142.314916,62.681636],[-143.103595,62.615913],[-143.125503,63.114314],[-145.146494,63.136222],[-145.360095,63.223853],[-146.482868,63.174561],[-146.488345,63.481269],[-146.975792,63.481269],[-147.003177,64.258995],[-146.236405,64.308287],[-144.06206,64.680719],[-142.605194,65.392722],[-141.838422,65.463922]]]},"id":"02240"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-146.696468,65.321521],[-146.19259,65.452968],[-145.644896,65.031244],[-143.886798,65.09149],[-144.06206,64.680719],[-146.236405,64.308287],[-147.003177,64.258995],[-147.99998,64.341149],[-148.646259,64.604042],[-148.66269,65.211983],[-146.696468,65.321521]]]},"id":"02090"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-149.232292,64.35758],[-147.99998,64.341149],[-147.003177,64.258995],[-146.975792,63.481269],[-148.038319,63.333392],[-149.506139,63.333392],[-151.888608,62.796652],[-153.000427,62.725452],[-152.436302,63.169084],[-152.852549,63.651055],[-152.244609,63.656532],[-152.047439,64.001579],[-151.302575,64.012533],[-150.749404,64.363057],[-149.232292,64.35758]]]},"id":"02068"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-171.742517,63.716778],[-170.94836,63.5689],[-170.488297,63.69487],[-169.518879,63.366254],[-168.686384,63.295053],[-169.639372,62.939052],[-170.866206,63.415546],[-171.463193,63.306007],[-171.742517,63.716778]]]},"id":"02180"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-153.000427,62.725452],[-151.888608,62.796652],[-149.506139,63.333392],[-148.038319,63.333392],[-146.975792,63.481269],[-146.488345,63.481269],[-146.482868,63.174561],[-146.428098,62.248958],[-146.981269,62.248958],[-146.942931,61.476709],[-148.460043,61.427417],[-149.259676,61.482186],[-149.988109,61.230247],[-150.973959,61.191908],[-151.335437,61.42194],[-153.000427,61.427417],[-153.000427,62.292773],[-153.000427,62.725452]]]},"id":"02170"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-162.585072,63.273146],[-161.993563,63.010253],[-160.848882,63.010253],[-161.046052,62.205142],[-160.536697,61.947726],[-160.40525,61.810803],[-161.900455,61.482186],[-162.508395,61.558863],[-163.992646,61.372647],[-164.156954,61.022123],[-165.159234,60.918061],[-164.962064,61.022123],[-166.106745,61.49314],[-165.59739,61.860095],[-165.674067,62.139419],[-165.044219,62.539236],[-164.633448,63.097884],[-164.069323,63.262192],[-163.313505,63.037637],[-162.585072,63.273146]]]},"id":"02270"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-145.360095,63.223853],[-145.146494,63.136222],[-143.125503,63.114314],[-143.103595,62.615913],[-142.314916,62.681636],[-141.964392,62.511851],[-141.827468,61.898434],[-141.00045,61.903911],[-141.00045,60.392275],[-141.78913,60.518245],[-143.169319,60.518245],[-143.886798,59.997935],[-144.231845,60.140336],[-146.110436,60.468952],[-146.044712,60.742799],[-146.669084,60.693507],[-146.745761,60.9564],[-148.366935,60.764707],[-147.961642,60.140336],[-148.586013,59.959597],[-148.744844,60.731845],[-148.470997,60.852338],[-148.460043,61.427417],[-146.942931,61.476709],[-146.981269,62.248958],[-146.428098,62.248958],[-146.482868,63.174561],[-145.360095,63.223853]]]},"id":"02261"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-153.000427,62.292773],[-153.000427,61.427417],[-153.427628,61.427417],[-153.438582,60.907107],[-155.963451,60.907107],[-158.942907,60.901631],[-159.364631,60.644214],[-160.021864,59.784335],[-160.821498,59.264025],[-161.035098,58.842301],[-161.095345,58.820393],[-161.347284,58.732762],[-161.752577,58.552023],[-162.048332,59.253071],[-161.703285,59.48858],[-162.234548,60.091043],[-163.171105,59.844581],[-164.113139,59.839104],[-164.189816,60.02532],[-165.361881,60.507291],[-165.159234,60.918061],[-164.156954,61.022123],[-163.992646,61.372647],[-162.508395,61.558863],[-161.900455,61.482186],[-160.40525,61.810803],[-160.536697,61.947726],[-159.266046,61.947726],[-158.532136,62.117511],[-157.064316,62.02988],[-153.734337,62.02988],[-153.000427,62.292773]]]},"id":"02050"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-149.259676,61.482186],[-148.460043,61.427417],[-148.470997,60.852338],[-148.744844,60.731845],[-149.730693,60.994739],[-149.73617,60.994739],[-149.988109,61.230247],[-149.259676,61.482186]]]},"id":"02020"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-153.427628,61.427417],[-153.000427,61.427417],[-151.335437,61.42194],[-150.973959,61.191908],[-152.080301,60.693507],[-152.567748,60.069136],[-153.214027,59.636457],[-153.608367,59.620026],[-154.260123,59.143533],[-153.312612,58.847778],[-153.329043,58.853255],[-154.303938,58.645131],[-154.638032,58.645131],[-154.747571,59.253071],[-153.652183,59.784335],[-153.438582,60.907107],[-153.427628,61.427417]]]},"id":"02122"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-149.730693,60.994739],[-148.744844,60.731845],[-148.586013,59.959597],[-149.358261,60.101997],[-149.741647,59.729565],[-151.592853,59.159963],[-151.888608,59.422857],[-151.160175,59.592642],[-151.8667,59.778858],[-151.423068,60.211536],[-151.406637,60.720892],[-150.404357,61.038554],[-149.73617,60.994739],[-149.730693,60.994739]]]},"id":"02122"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-155.963451,60.907107],[-155.957974,59.674796],[-157.245055,59.247595],[-157.157424,58.858732],[-158.039212,58.634177],[-158.619768,58.913501],[-158.701922,58.480823],[-159.0634,58.420577],[-159.731586,58.929932],[-160.317619,59.072332],[-161.035098,58.842301],[-160.821498,59.264025],[-160.021864,59.784335],[-159.364631,60.644214],[-158.942907,60.901631],[-155.963451,60.907107]]]},"id":"02070"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-153.438582,60.907107],[-153.652183,59.784335],[-154.747571,59.253071],[-154.638032,58.645131],[-154.303938,58.645131],[-154.468247,58.36033],[-155.333603,58.190545],[-155.328126,57.878359],[-156.752131,57.16088],[-156.357791,57.16088],[-157.464133,56.62414],[-158.32949,56.48174],[-158.115889,56.2298],[-158.510229,55.977861],[-159.496078,55.857368],[-159.561801,55.632814],[-159.86851,55.89023],[-159.901372,56.492694],[-158.893615,56.793925],[-158.893615,56.804879],[-158.378782,57.264942],[-157.601057,57.609989],[-157.453179,58.508208],[-157.266963,58.612269],[-156.319453,58.612269],[-156.319453,58.89707],[-156.987639,58.886116],[-157.157424,58.858732],[-157.245055,59.247595],[-155.957974,59.674796],[-155.963451,60.907107],[-153.438582,60.907107]]]},"id":"02164"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-137.522593,58.908024],[-137.944318,58.803962],[-138.11958,59.02304],[-139.85577,59.537872],[-139.625738,59.88292],[-140.315833,59.696704],[-141.46599,59.970551],[-142.906426,60.091043],[-143.886798,59.997935],[-143.169319,60.518245],[-141.78913,60.518245],[-141.00045,60.392275],[-139.987216,60.184151],[-139.088998,60.359413],[-139.198537,60.091043],[-137.604747,59.242118],[-137.522593,58.908024]]]},"id":"02282"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-166.364161,60.359413],[-165.685021,60.277259],[-165.575482,59.904827],[-166.062929,59.745996],[-167.344534,60.074613],[-166.364161,60.359413]]]},"id":"02050"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-147.079854,60.200582],[-147.874011,59.784335],[-147.112716,60.381321],[-147.079854,60.200582]]]},"id":"02261"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-135.030585,59.346179],[-135.72068,59.729565],[-135.025108,59.565257],[-135.030585,59.346179]]]},"id":"02232"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-135.72068,59.729565],[-135.030585,59.346179],[-134.329537,58.962794],[-135.178463,58.973748],[-135.38111,59.033994],[-135.05797,58.190545],[-135.446833,58.398669],[-135.567326,58.946363],[-136.487451,59.258548],[-136.25742,59.625503],[-135.72068,59.729565]]]},"id":"02100"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-135.567326,58.946363],[-135.446833,58.398669],[-136.591513,58.21793],[-137.944318,58.803962],[-137.522593,58.908024],[-136.487451,59.258548],[-135.567326,58.946363]]]},"id":"02232"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-135.178463,58.973748],[-134.329537,58.962794],[-133.382026,58.426053],[-133.173903,58.152206],[-133.529904,57.911221],[-133.601104,57.861929],[-135.074401,58.502731],[-135.178463,58.973748]]]},"id":"02110"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-156.987639,58.886116],[-156.319453,58.89707],[-156.319453,58.612269],[-157.266963,58.612269],[-156.987639,58.886116]]]},"id":"02060"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-153.329043,58.853255],[-153.312612,58.847778],[-154.062953,58.4863],[-154.210831,58.135776],[-155.120003,57.955037],[-156.357791,57.16088],[-156.752131,57.16088],[-155.328126,57.878359],[-155.333603,58.190545],[-154.468247,58.36033],[-154.303938,58.645131],[-153.329043,58.853255]]]},"id":"02150"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-152.94018,58.026237],[-152.666333,58.562977],[-152.080301,58.152206],[-152.94018,58.026237]]]},"id":"02150"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-134.712923,58.223407],[-134.176183,58.157683],[-133.869474,57.363527],[-134.565045,57.023957],[-134.712923,58.223407]]]},"id":"02232"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-135.589233,57.89479],[-136.372436,57.829067],[-136.377913,58.267222],[-135.780926,58.28913],[-134.91557,57.976944],[-135.589233,57.89479]]]},"id":"02232"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-133.529904,57.911221],[-133.173903,58.152206],[-132.368792,57.347096],[-133.12461,57.188265],[-133.51895,57.177311],[-133.601104,57.861929],[-133.529904,57.911221]]]},"id":"02232"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-136.372436,57.829067],[-135.589233,57.89479],[-134.937477,57.763344],[-134.822462,57.500451],[-135.572802,57.675713],[-135.890465,57.407343],[-136.372436,57.829067]]]},"id":"02220"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-153.958891,57.538789],[-153.936983,57.812636],[-153.301658,57.993375],[-152.151501,57.620943],[-153.695998,56.859649],[-154.303938,56.848695],[-154.742094,57.314235],[-154.227261,57.659282],[-153.958891,57.538789]]]},"id":"02150"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-134.66363,56.28457],[-134.669107,56.169554],[-135.413971,56.810356],[-135.687818,57.369004],[-135.419448,57.566174],[-134.849846,57.407343],[-134.636246,56.28457],[-134.66363,56.28457]]]},"id":"02220"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-133.12461,57.188265],[-132.368792,57.347096],[-131.837529,56.602232],[-131.065281,56.405062],[-130.99408,56.262662],[-132.220915,55.736876],[-132.719317,56.218847],[-132.450946,56.673433],[-133.51895,57.177311],[-133.12461,57.188265]]]},"id":"02280"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-133.907813,56.930849],[-133.102702,57.007526],[-132.538577,56.585802],[-133.66135,56.448878],[-133.907813,56.930849]]]},"id":"02280"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-134.115936,56.48174],[-134.417168,56.848695],[-133.880428,56.722725],[-134.115936,56.48174]]]},"id":"02280"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-158.893615,56.793925],[-159.901372,56.492694],[-159.86851,55.89023],[-159.561801,55.632814],[-159.813741,55.857368],[-160.536697,55.473983],[-161.506115,55.364444],[-161.960701,55.107028],[-163.034181,54.942719],[-163.587352,54.614103],[-164.847049,54.416933],[-164.551294,54.88795],[-162.880827,55.183705],[-161.807347,55.89023],[-160.585989,55.988815],[-159.813741,56.547463],[-158.893615,56.804879],[-158.893615,56.793925]]]},"id":"02013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-130.99408,56.262662],[-131.065281,56.405062],[-130.101339,56.114785],[-129.980846,55.28229],[-130.336847,54.920812],[-130.917403,54.789365],[-131.092665,55.189182],[-130.900972,55.698537],[-131.240543,55.977861],[-131.706083,55.89023],[-131.974453,55.49589],[-132.220915,55.736876],[-130.99408,56.262662]]]},"id":"02201"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-133.595627,56.350293],[-133.162949,56.317431],[-131.97993,55.178228],[-132.029222,54.701734],[-132.544054,55.096074],[-132.867194,54.701734],[-133.157472,54.95915],[-133.102702,55.42469],[-133.694212,55.780691],[-133.32178,55.81903],[-133.595627,56.350293]]]},"id":"02201"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-134.66363,56.28457],[-134.636246,56.28457],[-134.669107,56.169554],[-134.66363,56.28457]]]},"id":"02280"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-131.706083,55.89023],[-131.240543,55.977861],[-131.032419,55.28229],[-131.843006,55.457552],[-131.706083,55.89023]]]},"id":"02130"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-166.375115,54.01164],[-166.117699,53.852808],[-166.878994,53.431084],[-167.032348,53.945916],[-166.375115,54.01164]]]},"id":"02016"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-168.790446,53.157237],[-168.007243,53.568007],[-167.842935,53.387268],[-168.971185,52.877913],[-168.790446,53.157237]]]},"id":"02016"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.430026,48.699007],[-94.430026,48.364914],[-95.344675,48.540176],[-95.322768,49.000239],[-94.824366,49.295994],[-94.430026,48.699007]]]},"id":"27077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.850787,49.000239],[-120.752202,48.655192],[-122.329561,48.644238],[-122.488392,48.644238],[-122.756762,49.000239],[-120.850787,49.000239]]]},"id":"53073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.070335,49.000239],[-113.347378,48.310145],[-113.018762,48.134883],[-112.9859,47.954144],[-113.144732,47.598142],[-113.467871,47.598142],[-113.632179,47.598142],[-114.010088,48.052728],[-114.601598,47.789835],[-115.012368,48.019867],[-114.727567,49.000239],[-114.070335,49.000239]]]},"id":"30029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.727567,49.000239],[-115.012368,48.019867],[-115.521724,47.910328],[-115.844863,48.21156],[-116.04751,48.217037],[-116.04751,48.501838],[-116.04751,49.000239],[-114.727567,49.000239]]]},"id":"30053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.04751,49.000239],[-116.04751,48.501838],[-116.786897,48.501838],[-116.836189,48.846885],[-117.033359,48.846885],[-117.033359,49.000239],[-116.04751,49.000239]]]},"id":"16021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.237393,49.000239],[-108.434563,47.976051],[-108.889149,47.735066],[-109.540905,47.740543],[-109.535428,48.134883],[-109.491612,49.000239],[-108.237393,49.000239]]]},"id":"30005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.427699,49.000239],[-117.438653,48.047251],[-117.537238,48.047251],[-117.822039,47.822697],[-118.342348,47.893897],[-118.139701,48.266329],[-118.194471,49.000239],[-117.427699,49.000239]]]},"id":"53065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.835273,49.000239],[-118.851704,47.95962],[-118.972196,47.94319],[-118.98315,47.95962],[-119.021489,48.069159],[-119.870414,47.95962],[-120.702909,48.529222],[-120.752202,48.655192],[-120.850787,49.000239],[-118.835273,49.000239]]]},"id":"53047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.228743,49.000239],[-97.16302,48.545653],[-97.16302,48.540176],[-97.929791,48.545653],[-97.951699,49.000239],[-97.228743,49.000239]]]},"id":"38067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.407202,49.000239],[-96.385294,48.545653],[-97.16302,48.545653],[-97.228743,49.000239],[-96.407202,49.000239]]]},"id":"27069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.491612,49.000239],[-109.535428,48.134883],[-110.389831,48.304668],[-110.756786,48.217037],[-110.745832,49.000239],[-109.491612,49.000239]]]},"id":"30041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.951699,49.000239],[-97.929791,48.545653],[-98.017422,48.545653],[-98.318654,48.545653],[-98.838963,48.545653],[-98.97041,48.545653],[-98.997795,49.000239],[-97.951699,49.000239]]]},"id":"38019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.194471,49.000239],[-118.139701,48.266329],[-118.342348,47.893897],[-118.851704,47.95962],[-118.835273,49.000239],[-118.194471,49.000239]]]},"id":"53019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.033359,49.000239],[-117.033359,48.846885],[-117.044313,48.047251],[-117.438653,48.047251],[-117.427699,49.000239],[-117.033359,49.000239]]]},"id":"53051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.180344,49.000239],[-107.415852,47.69125],[-107.908777,47.450265],[-108.105947,47.592665],[-108.31407,47.581712],[-108.889149,47.735066],[-108.434563,47.976051],[-108.237393,49.000239],[-107.180344,49.000239]]]},"id":"30071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.997795,49.000239],[-98.97041,48.545653],[-99.200441,48.370391],[-99.490719,48.370391],[-99.490719,48.545653],[-99.523581,49.000239],[-98.997795,49.000239]]]},"id":"38095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.322768,49.000239],[-95.344675,48.540176],[-95.602092,48.540176],[-96.259324,48.545653],[-96.385294,48.545653],[-96.407202,49.000239],[-95.322768,49.000239]]]},"id":"27135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.11234,49.000239],[-105.805632,48.562084],[-105.84397,48.008913],[-106.419049,47.95962],[-106.490249,47.95962],[-107.415852,47.69125],[-107.180344,49.000239],[-106.11234,49.000239]]]},"id":"30105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.047534,49.000239],[-104.047534,48.633284],[-104.047534,48.386822],[-104.973137,48.562084],[-105.055291,49.000239],[-104.047534,49.000239]]]},"id":"30091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.941192,49.000239],[-102.886422,48.633284],[-104.047534,48.633284],[-104.047534,49.000239],[-102.941192,49.000239]]]},"id":"38023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.055291,49.000239],[-104.973137,48.562084],[-105.756339,48.562084],[-105.805632,48.562084],[-106.11234,49.000239],[-105.055291,49.000239]]]},"id":"30019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.495279,49.000239],[-101.451464,48.545653],[-101.057124,48.545653],[-101.062601,48.458022],[-101.840327,48.458022],[-102.021066,48.808546],[-102.021066,49.000239],[-101.495279,49.000239]]]},"id":"38075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.180814,49.000239],[-100.147952,48.545653],[-100.279399,48.545653],[-100.668261,48.633284],[-101.057124,48.545653],[-101.451464,48.545653],[-101.495279,49.000239],[-100.180814,49.000239]]]},"id":"38009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.021066,49.000239],[-102.021066,48.808546],[-102.152512,48.808546],[-102.234666,48.545653],[-102.886422,48.545653],[-102.886422,48.633284],[-102.941192,49.000239],[-102.021066,49.000239]]]},"id":"38013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.523581,49.000239],[-99.490719,48.545653],[-99.616689,48.545653],[-100.147952,48.545653],[-100.180814,49.000239],[-99.523581,49.000239]]]},"id":"38079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.271618,48.994762],[-111.408542,48.217037],[-112.186267,48.47993],[-112.191744,49.000239],[-111.271618,48.994762]]]},"id":"30101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.191744,49.000239],[-112.186267,48.47993],[-112.57513,48.485407],[-113.347378,48.310145],[-114.070335,49.000239],[-112.191744,49.000239]]]},"id":"30035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.745832,49.000239],[-110.756786,48.217037],[-111.408542,48.129406],[-111.408542,48.217037],[-111.271618,48.994762],[-110.745832,49.000239]]]},"id":"30051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.836189,48.846885],[-116.786897,48.501838],[-116.04751,48.501838],[-116.04751,48.217037],[-116.04751,47.976051],[-116.310403,48.030821],[-116.321357,47.88842],[-116.567819,47.992482],[-117.044313,47.976051],[-117.044313,48.047251],[-117.033359,48.846885],[-116.836189,48.846885]]]},"id":"16017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.152512,48.808546],[-102.021066,48.808546],[-101.840327,48.458022],[-101.062601,48.458022],[-100.969493,47.850082],[-101.873188,47.850082],[-101.971773,48.545653],[-102.234666,48.545653],[-102.152512,48.808546]]]},"id":"38101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.088176,48.627807],[-93.088176,48.55113],[-93.082699,47.893897],[-93.597531,47.899374],[-94.419073,47.844605],[-94.430026,48.364914],[-94.430026,48.699007],[-93.794701,48.518268],[-93.088176,48.627807]]]},"id":"27071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.329561,48.644238],[-120.752202,48.655192],[-120.702909,48.529222],[-121.004141,48.293714],[-121.836636,48.299191],[-122.378853,48.299191],[-122.488392,48.644238],[-122.329561,48.644238]]]},"id":"53057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.047534,48.633284],[-102.886422,48.633284],[-102.886422,48.545653],[-102.826176,48.123929],[-103.171223,48.134883],[-104.042057,47.997959],[-104.047534,48.386822],[-104.047534,48.633284]]]},"id":"38105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.668261,48.633284],[-100.279399,48.545653],[-100.197245,47.850082],[-100.520384,47.850082],[-100.586107,47.850082],[-100.969493,47.850082],[-101.062601,48.458022],[-101.057124,48.545653],[-100.668261,48.633284]]]},"id":"38049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.088176,48.55113],[-93.088176,48.627807],[-92.370697,48.222514],[-91.795618,48.200606],[-91.801095,47.866512],[-91.795618,46.94091],[-92.014696,46.705401],[-92.29402,46.661586],[-92.49119,46.765647],[-93.060791,46.765647],[-93.055314,47.028541],[-93.082699,47.893897],[-93.088176,48.55113]]]},"id":"27137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.756339,48.562084],[-104.973137,48.562084],[-104.047534,48.386822],[-104.042057,47.997959],[-104.567843,48.118452],[-105.192214,48.063682],[-105.84397,48.008913],[-105.805632,48.562084],[-105.756339,48.562084]]]},"id":"30085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.702909,48.529222],[-119.870414,47.95962],[-120.319524,47.455742],[-120.094969,47.264049],[-121.11368,47.598142],[-121.119157,47.778881],[-121.004141,48.293714],[-120.702909,48.529222]]]},"id":"53007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.886422,48.545653],[-102.234666,48.545653],[-101.971773,48.545653],[-101.873188,47.850082],[-102.388021,47.756974],[-102.63996,47.822697],[-102.826176,48.123929],[-102.886422,48.545653]]]},"id":"38061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.616689,48.545653],[-99.490719,48.545653],[-99.490719,48.370391],[-99.819336,48.370391],[-99.813859,47.850082],[-100.000075,47.850082],[-100.071275,47.844605],[-100.197245,47.850082],[-100.279399,48.545653],[-100.147952,48.545653],[-99.616689,48.545653]]]},"id":"38069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.259324,48.545653],[-95.602092,48.540176],[-95.591138,48.173221],[-96.50031,48.173221],[-97.020619,48.173221],[-97.146589,48.173221],[-97.141112,48.195129],[-97.16302,48.540176],[-97.16302,48.545653],[-96.385294,48.545653],[-96.259324,48.545653]]]},"id":"27089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.838963,48.545653],[-98.318654,48.545653],[-98.291269,48.195129],[-98.526778,47.915805],[-98.992318,47.992482],[-99.200441,48.370391],[-98.97041,48.545653],[-98.838963,48.545653]]]},"id":"38071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.017422,48.545653],[-97.929791,48.545653],[-97.16302,48.540176],[-97.141112,48.195129],[-97.825729,48.195129],[-97.902407,48.195129],[-97.91336,48.195129],[-98.291269,48.195129],[-98.318654,48.545653],[-98.017422,48.545653]]]},"id":"38099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.344675,48.540176],[-94.430026,48.364914],[-94.419073,47.844605],[-94.413596,47.444788],[-94.671012,47.411926],[-95.185844,47.411926],[-95.22966,48.019867],[-95.580184,48.019867],[-95.591138,48.173221],[-95.602092,48.540176],[-95.344675,48.540176]]]},"id":"27007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.57513,48.485407],[-112.186267,48.47993],[-111.408542,48.217037],[-111.408542,48.129406],[-111.408542,47.987005],[-112.898269,48.134883],[-113.018762,48.134883],[-113.347378,48.310145],[-112.57513,48.485407]]]},"id":"30073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.926547,48.063682],[-122.948455,47.866512],[-124.613445,47.882943],[-124.597014,48.381345],[-123.983597,48.162267],[-122.926547,48.063682]]]},"id":"53009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.819336,48.370391],[-99.490719,48.370391],[-99.200441,48.370391],[-98.992318,47.992482],[-98.526778,47.915805],[-98.526778,47.844605],[-98.636317,47.850082],[-99.299026,47.844605],[-99.813859,47.850082],[-99.819336,48.370391]]]},"id":"38005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.389831,48.304668],[-109.535428,48.134883],[-109.540905,47.740543],[-110.214569,47.417403],[-110.504846,47.417403],[-110.64177,47.417403],[-111.408542,47.696727],[-111.408542,47.987005],[-111.408542,48.129406],[-110.756786,48.217037],[-110.389831,48.304668]]]},"id":"30015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.836636,48.299191],[-121.004141,48.293714],[-121.119157,47.778881],[-121.234173,47.778881],[-122.395284,47.778881],[-122.395284,48.227991],[-122.406238,48.249898],[-122.378853,48.299191],[-121.836636,48.299191]]]},"id":"53061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-115.844863,48.21156],[-115.521724,47.910328],[-115.012368,48.019867],[-114.601598,47.789835],[-114.18535,47.138079],[-114.798768,47.269526],[-115.499816,47.488604],[-115.658647,47.466696],[-116.04751,47.976051],[-116.04751,48.217037],[-115.844863,48.21156]]]},"id":"30089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.023369,47.466696],[-91.034323,48.189652],[-89.582934,47.997959],[-91.023369,47.466696]]]},"id":"27031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.801095,47.866512],[-91.795618,48.200606],[-91.034323,48.189652],[-91.023369,47.466696],[-91.795618,46.94091],[-91.801095,47.866512]]]},"id":"27075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.91336,48.195129],[-97.902407,48.195129],[-97.880499,47.67482],[-97.979084,47.67482],[-97.984561,47.67482],[-98.11053,47.67482],[-98.499393,47.67482],[-98.526778,47.844605],[-98.526778,47.915805],[-98.291269,48.195129],[-97.91336,48.195129]]]},"id":"38063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.825729,48.195129],[-97.141112,48.195129],[-97.146589,48.173221],[-96.889173,47.67482],[-97.475205,47.669343],[-97.880499,47.67482],[-97.902407,48.195129],[-97.825729,48.195129]]]},"id":"38035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.50031,48.173221],[-95.591138,48.173221],[-95.580184,48.019867],[-95.580184,47.932236],[-95.71163,47.937713],[-95.8376,47.965097],[-96.483879,47.965097],[-96.50031,48.173221]]]},"id":"27113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.020619,48.173221],[-96.50031,48.173221],[-96.483879,47.965097],[-96.352432,47.762451],[-95.71163,47.937713],[-95.580184,47.932236],[-95.552799,47.499557],[-96.067632,47.499557],[-96.23194,47.499557],[-96.850834,47.499557],[-96.889173,47.67482],[-97.146589,48.173221],[-97.020619,48.173221]]]},"id":"27119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.021489,48.069159],[-118.98315,47.95962],[-119.213182,47.861036],[-120.007338,47.220233],[-120.094969,47.264049],[-120.319524,47.455742],[-119.870414,47.95962],[-119.021489,48.069159]]]},"id":"53017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.567843,48.118452],[-104.042057,47.997959],[-104.047534,47.395496],[-104.419966,47.357157],[-105.022429,47.702204],[-105.23603,47.789835],[-105.192214,48.063682],[-104.567843,48.118452]]]},"id":"30083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.171223,48.134883],[-102.826176,48.123929],[-102.63996,47.822697],[-103.100023,47.67482],[-103.100023,47.329772],[-103.664148,47.329772],[-103.992764,47.329772],[-104.047534,47.329772],[-104.047534,47.395496],[-104.042057,47.997959],[-103.171223,48.134883]]]},"id":"38053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.751285,47.740543],[-122.948455,47.603619],[-123.507103,47.515988],[-124.323167,47.532419],[-124.356029,47.532419],[-124.613445,47.882943],[-122.948455,47.866512],[-122.926547,48.063682],[-122.751285,47.740543]]]},"id":"53031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.898269,48.134883],[-111.408542,47.987005],[-111.408542,47.696727],[-111.419495,47.696727],[-112.049344,47.515988],[-112.816115,47.609096],[-112.9859,47.954144],[-113.018762,48.134883],[-112.898269,48.134883]]]},"id":"30099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.192214,48.063682],[-105.23603,47.789835],[-105.405815,47.181895],[-105.789201,47.181895],[-106.084956,47.181895],[-106.419049,47.95962],[-105.84397,48.008913],[-105.192214,48.063682]]]},"id":"30055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.310403,48.030821],[-116.04751,47.976051],[-115.658647,47.466696],[-114.963076,46.935433],[-116.332311,46.935433],[-116.332311,47.023064],[-116.326834,47.411926],[-116.321357,47.88842],[-116.310403,48.030821]]]},"id":"16079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.010088,48.052728],[-113.632179,47.598142],[-113.91698,47.499557],[-114.18535,47.138079],[-114.601598,47.789835],[-114.010088,48.052728]]]},"id":"30047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.537238,48.047251],[-117.438653,48.047251],[-117.044313,48.047251],[-117.044313,47.976051],[-117.038836,47.368111],[-117.038836,47.258572],[-117.822039,47.258572],[-117.822039,47.822697],[-117.537238,48.047251]]]},"id":"53063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.580184,48.019867],[-95.22966,48.019867],[-95.185844,47.411926],[-95.169413,47.15451],[-95.552799,47.149033],[-95.552799,47.499557],[-95.580184,47.932236],[-95.580184,48.019867]]]},"id":"27029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.567819,47.992482],[-116.321357,47.88842],[-116.326834,47.411926],[-117.038836,47.368111],[-117.044313,47.976051],[-116.567819,47.992482]]]},"id":"16055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.490249,47.95962],[-106.419049,47.95962],[-106.084956,47.181895],[-106.084956,46.858755],[-106.084956,46.847802],[-107.459668,46.858755],[-107.892346,46.853278],[-107.908777,47.450265],[-107.415852,47.69125],[-106.490249,47.95962]]]},"id":"30033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.8376,47.965097],[-95.71163,47.937713],[-96.352432,47.762451],[-96.483879,47.965097],[-95.8376,47.965097]]]},"id":"27125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.213182,47.861036],[-118.98315,47.95962],[-118.972196,47.94319],[-118.977673,47.264049],[-119.372013,46.738263],[-119.454167,46.678016],[-119.875891,46.628724],[-119.875891,46.628724],[-119.974476,46.738263],[-120.007338,47.220233],[-119.213182,47.861036]]]},"id":"53025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.972196,47.94319],[-118.851704,47.95962],[-118.342348,47.893897],[-117.822039,47.822697],[-117.822039,47.258572],[-117.958962,47.258572],[-118.950288,47.264049],[-118.977673,47.264049],[-118.972196,47.94319]]]},"id":"53043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.9859,47.954144],[-112.816115,47.609096],[-112.049344,47.515988],[-111.660481,46.913525],[-111.496173,46.760171],[-111.638573,46.716355],[-111.78645,46.568478],[-111.967189,46.568478],[-112.312237,46.4206],[-112.794207,46.831371],[-113.144732,47.598142],[-112.9859,47.954144]]]},"id":"30049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.482915,47.510511],[-122.537684,47.400973],[-122.800578,47.406449],[-122.948455,47.603619],[-122.751285,47.740543],[-122.482915,47.510511]]]},"id":"53035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.597531,47.899374],[-93.082699,47.893897],[-93.055314,47.028541],[-93.712547,47.028541],[-93.772794,47.028541],[-94.052118,47.428357],[-94.413596,47.444788],[-94.419073,47.844605],[-93.597531,47.899374]]]},"id":"27061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.969493,47.850082],[-100.586107,47.850082],[-100.673738,47.329772],[-100.964016,47.15451],[-101.254294,47.264049],[-101.429556,47.559804],[-102.081312,47.576235],[-102.207282,47.576235],[-102.388021,47.756974],[-101.873188,47.850082],[-100.969493,47.850082]]]},"id":"38055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.000075,47.850082],[-99.813859,47.850082],[-99.299026,47.844605],[-99.266165,47.587189],[-99.266165,47.329772],[-99.479765,47.329772],[-99.863151,47.329772],[-100.032936,47.329772],[-100.071275,47.844605],[-100.000075,47.850082]]]},"id":"38103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.520384,47.850082],[-100.197245,47.850082],[-100.071275,47.844605],[-100.032936,47.329772],[-100.115091,47.329772],[-100.608015,47.329772],[-100.673738,47.329772],[-100.586107,47.850082],[-100.520384,47.850082]]]},"id":"38083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.636317,47.850082],[-98.526778,47.844605],[-98.499393,47.67482],[-98.499393,47.587189],[-99.200441,47.587189],[-99.266165,47.587189],[-99.299026,47.844605],[-98.636317,47.850082]]]},"id":"38027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.63996,47.822697],[-102.388021,47.756974],[-102.207282,47.576235],[-102.147035,47.01211],[-103.0343,46.979248],[-103.100023,47.329772],[-103.100023,47.67482],[-102.63996,47.822697]]]},"id":"38025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.214569,47.417403],[-109.540905,47.740543],[-108.889149,47.735066],[-108.31407,47.581712],[-108.719364,47.269526],[-108.631733,46.749217],[-109.009642,46.749217],[-109.387551,46.694447],[-109.743552,46.694447],[-109.754506,47.187372],[-110.214569,47.417403]]]},"id":"30027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.022429,47.702204],[-104.419966,47.357157],[-104.606182,46.858755],[-105.405815,47.181895],[-105.23603,47.789835],[-105.022429,47.702204]]]},"id":"30021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.234173,47.778881],[-121.119157,47.778881],[-121.11368,47.598142],[-121.11368,47.598142],[-121.38205,47.088787],[-122.417192,47.318818],[-122.395284,47.778881],[-121.234173,47.778881]]]},"id":"53033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.419495,47.696727],[-111.408542,47.696727],[-110.64177,47.417403],[-110.652724,46.825894],[-111.079925,47.088787],[-111.660481,46.913525],[-112.049344,47.515988],[-111.419495,47.696727]]]},"id":"30013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.11053,47.67482],[-97.984561,47.67482],[-97.962653,47.242141],[-98.088623,47.242141],[-98.466531,47.242141],[-98.499393,47.324295],[-98.499393,47.587189],[-98.499393,47.67482],[-98.11053,47.67482]]]},"id":"38039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.979084,47.67482],[-97.880499,47.67482],[-97.475205,47.669343],[-97.453297,47.236664],[-97.705237,47.242141],[-97.962653,47.242141],[-97.984561,47.67482],[-97.979084,47.67482]]]},"id":"38091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.475205,47.669343],[-96.889173,47.67482],[-96.850834,47.499557],[-96.834403,47.236664],[-97.453297,47.236664],[-97.475205,47.669343]]]},"id":"38097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.507103,47.515988],[-122.948455,47.603619],[-122.800578,47.406449],[-122.822485,47.192849],[-122.904639,47.15451],[-123.200394,47.08331],[-123.507103,47.515988]]]},"id":"53045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.91698,47.499557],[-113.632179,47.598142],[-113.467871,47.598142],[-113.303563,46.831371],[-113.829349,46.661586],[-113.851257,46.661586],[-114.333228,46.661586],[-114.596121,46.634201],[-114.672798,46.738263],[-114.798768,47.269526],[-114.18535,47.138079],[-113.91698,47.499557]]]},"id":"30063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.467871,47.598142],[-113.144732,47.598142],[-112.794207,46.831371],[-112.312237,46.4206],[-112.558699,46.267246],[-112.887315,46.267246],[-113.035193,46.267246],[-113.303563,46.831371],[-113.467871,47.598142]]]},"id":"30077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.105947,47.592665],[-107.908777,47.450265],[-107.892346,46.853278],[-107.826623,46.754694],[-107.837576,46.754694],[-108.631733,46.749217],[-108.719364,47.269526],[-108.31407,47.581712],[-108.105947,47.592665]]]},"id":"30069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.11368,47.598142],[-121.11368,47.598142],[-120.094969,47.264049],[-120.007338,47.220233],[-119.974476,46.738263],[-120.511216,46.738263],[-121.38205,47.088787],[-121.11368,47.598142]]]},"id":"53037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.200441,47.587189],[-98.499393,47.587189],[-98.499393,47.324295],[-99.266165,47.329772],[-99.266165,47.587189],[-99.200441,47.587189]]]},"id":"38031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.081312,47.576235],[-101.429556,47.559804],[-101.254294,47.264049],[-101.76365,46.979248],[-102.097743,46.979248],[-102.147035,47.01211],[-102.207282,47.576235],[-102.081312,47.576235]]]},"id":"38057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.323167,47.532419],[-123.507103,47.515988],[-123.200394,47.08331],[-123.162056,46.793032],[-123.183963,46.793032],[-123.370179,46.793032],[-124.098612,46.793032],[-124.356029,47.532419],[-124.323167,47.532419]]]},"id":"53027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.537684,47.357157],[-122.537684,47.400973],[-122.482915,47.510511],[-122.537684,47.357157]]]},"id":"53033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.552799,47.149033],[-96.067632,47.149033],[-96.067632,47.499557],[-95.552799,47.499557],[-95.552799,47.149033]]]},"id":"27087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.23194,47.499557],[-96.067632,47.499557],[-96.067632,47.149033],[-96.193601,47.149033],[-96.582464,47.149033],[-96.828926,47.149033],[-96.834403,47.236664],[-96.850834,47.499557],[-96.23194,47.499557]]]},"id":"27107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-115.499816,47.488604],[-114.798768,47.269526],[-114.672798,46.738263],[-114.963076,46.935433],[-115.658647,47.466696],[-115.499816,47.488604]]]},"id":"30061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.052118,47.428357],[-93.772794,47.028541],[-93.778271,46.803986],[-94.282149,46.803986],[-94.342395,46.2782],[-94.654581,46.3494],[-94.731258,46.371308],[-94.786028,46.803986],[-94.671012,47.411926],[-94.413596,47.444788],[-94.052118,47.428357]]]},"id":"27021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.23013,47.198326],[-88.383484,47.285957],[-88.514931,47.285957],[-88.23013,47.198326]]]},"id":"26083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.806619,45.681213],[-68.047605,45.637398],[-68.43099,45.577151],[-68.513145,46.382262],[-68.819853,46.393216],[-68.819853,46.573955],[-69.723548,46.573955],[-70.02478,46.573955],[-69.225147,47.461219],[-68.902007,47.176418],[-68.233821,47.357157],[-67.790188,47.066879],[-67.806619,45.681213]]]},"id":"23003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.504846,47.417403],[-110.214569,47.417403],[-109.754506,47.187372],[-109.743552,46.694447],[-110.148845,46.716355],[-110.274815,46.710878],[-110.652724,46.825894],[-110.64177,47.417403],[-110.504846,47.417403]]]},"id":"30045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.326834,47.411926],[-116.332311,47.023064],[-117.000498,47.132602],[-117.038836,47.127126],[-117.038836,47.258572],[-117.038836,47.368111],[-116.326834,47.411926]]]},"id":"16009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.185844,47.411926],[-94.671012,47.411926],[-94.786028,46.803986],[-95.037967,46.803986],[-95.163936,46.803986],[-95.169413,47.15451],[-95.185844,47.411926]]]},"id":"27057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.800578,47.406449],[-122.537684,47.400973],[-122.537684,47.357157],[-122.417192,47.318818],[-121.38205,47.088787],[-121.45325,46.782078],[-122.203591,46.760171],[-122.822485,47.192849],[-122.800578,47.406449]]]},"id":"53053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.047534,47.395496],[-104.047534,47.329772],[-104.047534,46.639678],[-104.606182,46.683493],[-104.606182,46.858755],[-104.419966,47.357157],[-104.047534,47.395496]]]},"id":"30109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.992764,47.329772],[-103.664148,47.329772],[-103.609378,46.628724],[-104.047534,46.541093],[-104.047534,46.639678],[-104.047534,47.329772],[-103.992764,47.329772]]]},"id":"38033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.664148,47.329772],[-103.100023,47.329772],[-103.0343,46.979248],[-103.23147,46.628724],[-103.609378,46.628724],[-103.664148,47.329772]]]},"id":"38007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.608015,47.329772],[-100.115091,47.329772],[-100.082229,46.634201],[-100.586107,46.634201],[-100.662785,46.634201],[-100.936632,46.984725],[-100.964016,47.15451],[-100.673738,47.329772],[-100.608015,47.329772]]]},"id":"38015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.863151,47.329772],[-99.479765,47.329772],[-99.452381,46.634201],[-99.917921,46.634201],[-100.082229,46.634201],[-100.115091,47.329772],[-100.032936,47.329772],[-99.863151,47.329772]]]},"id":"38043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.479765,47.329772],[-99.266165,47.329772],[-98.499393,47.324295],[-98.466531,47.242141],[-98.439147,46.628724],[-99.036133,46.628724],[-99.452381,46.634201],[-99.479765,47.329772]]]},"id":"38093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.254294,47.264049],[-100.964016,47.15451],[-100.936632,46.984725],[-101.76365,46.979248],[-101.254294,47.264049]]]},"id":"38065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.383484,47.285957],[-88.23013,47.198326],[-88.449208,46.94091],[-88.679239,46.4206],[-88.712101,46.4206],[-88.991425,46.4206],[-88.931178,47.034018],[-88.514931,47.285957],[-88.383484,47.285957]]]},"id":"26061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.950288,47.264049],[-117.958962,47.258572],[-118.210901,46.738263],[-119.213182,46.738263],[-119.372013,46.738263],[-118.977673,47.264049],[-118.950288,47.264049]]]},"id":"53001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.822039,47.258572],[-117.038836,47.258572],[-117.038836,47.127126],[-117.038836,46.541093],[-117.038836,46.426077],[-117.230529,46.464416],[-117.849423,46.623247],[-118.216378,46.590385],[-118.210901,46.738263],[-117.958962,47.258572],[-117.822039,47.258572]]]},"id":"53075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.088623,47.242141],[-97.962653,47.242141],[-97.705237,47.242141],[-97.683329,46.628724],[-97.957176,46.628724],[-98.033853,46.628724],[-98.439147,46.628724],[-98.466531,47.242141],[-98.088623,47.242141]]]},"id":"38003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.453297,47.236664],[-96.834403,47.236664],[-96.828926,47.149033],[-96.790588,46.628724],[-97.278035,46.628724],[-97.683329,46.628724],[-97.705237,47.242141],[-97.453297,47.236664]]]},"id":"38017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.904639,47.15451],[-122.822485,47.192849],[-122.203591,46.760171],[-123.162056,46.793032],[-123.200394,47.08331],[-122.904639,47.15451]]]},"id":"53067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.789201,47.181895],[-105.405815,47.181895],[-104.606182,46.858755],[-104.606182,46.683493],[-104.732151,46.612293],[-105.44963,46.568478],[-106.084956,46.858755],[-106.084956,47.181895],[-105.789201,47.181895]]]},"id":"30079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.169413,47.15451],[-95.163936,46.803986],[-95.163936,46.716355],[-96.17717,46.716355],[-96.193601,47.149033],[-96.067632,47.149033],[-95.552799,47.149033],[-95.169413,47.15451]]]},"id":"27005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.582464,47.149033],[-96.193601,47.149033],[-96.17717,46.716355],[-96.281232,46.628724],[-96.790588,46.628724],[-96.790588,46.628724],[-96.828926,47.149033],[-96.582464,47.149033]]]},"id":"27027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.000498,47.132602],[-116.332311,47.023064],[-116.332311,46.935433],[-116.458281,46.628724],[-116.644497,46.61777],[-117.038836,46.541093],[-117.038836,47.127126],[-117.000498,47.132602]]]},"id":"16057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.38205,47.088787],[-120.511216,46.738263],[-119.974476,46.738263],[-119.875891,46.628724],[-119.864937,46.042691],[-119.990907,46.042691],[-121.52445,46.042691],[-121.52445,46.387739],[-121.45325,46.782078],[-121.38205,47.088787]]]},"id":"53077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.079925,47.088787],[-110.652724,46.825894],[-110.274815,46.710878],[-110.280292,46.217953],[-110.280292,46.185092],[-110.78417,46.190569],[-111.063494,46.190569],[-111.496173,46.760171],[-111.660481,46.913525],[-111.079925,47.088787]]]},"id":"30059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.931178,47.034018],[-88.991425,46.4206],[-88.991425,46.332969],[-89.741765,46.502754],[-89.889643,46.765647],[-88.931178,47.034018]]]},"id":"26131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.712547,47.028541],[-93.055314,47.028541],[-93.060791,46.765647],[-93.055314,46.4206],[-93.055314,46.157707],[-93.307254,46.157707],[-93.433223,46.15223],[-93.553716,46.245338],[-93.794701,46.245338],[-93.778271,46.803986],[-93.772794,47.028541],[-93.712547,47.028541]]]},"id":"27001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.147035,47.01211],[-102.097743,46.979248],[-102.097743,46.716355],[-102.097743,46.628724],[-102.17442,46.628724],[-102.930238,46.628724],[-103.23147,46.628724],[-103.0343,46.979248],[-102.147035,47.01211]]]},"id":"38089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.936632,46.984725],[-100.662785,46.634201],[-100.591584,46.426077],[-101.024263,46.283677],[-101.29811,46.628724],[-102.097743,46.716355],[-102.097743,46.979248],[-101.76365,46.979248],[-100.936632,46.984725]]]},"id":"38059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.043914,46.913525],[-88.115114,46.4206],[-88.679239,46.4206],[-88.449208,46.94091],[-88.043914,46.913525]]]},"id":"26013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.924785,46.584908],[-90.924785,46.15223],[-91.302693,46.157707],[-91.549156,46.157707],[-91.549156,46.754694],[-90.870015,46.962817],[-90.924785,46.584908]]]},"id":"55007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.963076,46.935433],[-114.672798,46.738263],[-114.596121,46.634201],[-116.168003,46.371308],[-116.31588,46.426077],[-116.37065,46.464416],[-116.458281,46.628724],[-116.332311,46.935433],[-114.963076,46.935433]]]},"id":"16035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.118311,46.497277],[-87.118311,46.157707],[-87.37025,45.987922],[-87.616713,45.987922],[-87.802929,46.245338],[-88.115114,46.245338],[-88.115114,46.4206],[-88.043914,46.913525],[-87.118311,46.497277]]]},"id":"26103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.084956,46.858755],[-105.44963,46.568478],[-104.732151,46.612293],[-104.885506,46.135799],[-104.98409,45.785275],[-106.128771,45.790752],[-106.194494,45.790752],[-106.084956,46.847802],[-106.084956,46.858755]]]},"id":"30017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.459668,46.858755],[-106.084956,46.847802],[-106.194494,45.790752],[-106.282125,45.177335],[-106.769573,45.177335],[-106.939358,45.867429],[-107.026989,46.393216],[-107.738991,46.480847],[-107.782807,46.497277],[-107.826623,46.754694],[-107.892346,46.853278],[-107.459668,46.858755]]]},"id":"30087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.303563,46.831371],[-113.035193,46.267246],[-113.517164,45.938629],[-113.801964,46.037214],[-113.829349,46.661586],[-113.303563,46.831371]]]},"id":"30039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.037967,46.803986],[-94.786028,46.803986],[-94.731258,46.371308],[-95.152983,46.371308],[-95.163936,46.716355],[-95.163936,46.803986],[-95.037967,46.803986]]]},"id":"27159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.282149,46.803986],[-93.778271,46.803986],[-93.794701,46.245338],[-93.811132,46.157707],[-94.342395,46.2782],[-94.282149,46.803986]]]},"id":"27035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.183963,46.793032],[-123.162056,46.793032],[-122.203591,46.760171],[-121.45325,46.782078],[-121.52445,46.387739],[-122.24193,46.387739],[-123.216825,46.387739],[-123.359225,46.382262],[-123.370179,46.793032],[-123.183963,46.793032]]]},"id":"53041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.098612,46.793032],[-123.370179,46.793032],[-123.359225,46.382262],[-123.72618,46.289154],[-124.098612,46.793032]]]},"id":"53049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.638573,46.716355],[-111.496173,46.760171],[-111.063494,46.190569],[-111.660481,45.834568],[-111.78645,46.568478],[-111.638573,46.716355]]]},"id":"30007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.116948,45.976968],[-85.23972,46.245338],[-85.23972,46.754694],[-85.015166,46.480847],[-84.127902,46.530139],[-84.116948,45.976968]]]},"id":"26033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.49119,46.765647],[-92.29402,46.661586],[-92.29402,46.415123],[-92.962206,46.4206],[-93.055314,46.4206],[-93.060791,46.765647],[-92.49119,46.765647]]]},"id":"27017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.889643,46.765647],[-89.741765,46.502754],[-88.991425,46.332969],[-88.991425,46.097461],[-89.927981,46.300108],[-90.415429,46.568478],[-89.889643,46.765647]]]},"id":"26053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.549156,46.754694],[-91.549156,46.157707],[-92.020173,46.157707],[-92.047557,46.157707],[-92.29402,46.157707],[-92.29402,46.415123],[-92.29402,46.661586],[-92.014696,46.705401],[-91.549156,46.754694]]]},"id":"55031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.837576,46.754694],[-107.826623,46.754694],[-107.782807,46.497277],[-108.77961,46.130322],[-109.009642,46.749217],[-108.631733,46.749217],[-107.837576,46.754694]]]},"id":"30065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.23972,46.754694],[-85.23972,46.245338],[-85.36569,46.245338],[-85.864092,46.245338],[-85.864092,46.502754],[-85.864092,46.68897],[-85.23972,46.754694]]]},"id":"26095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.148845,46.716355],[-109.743552,46.694447],[-109.387551,46.694447],[-109.655921,46.217953],[-110.006445,46.217953],[-110.280292,46.217953],[-110.274815,46.710878],[-110.148845,46.716355]]]},"id":"30107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.387551,46.694447],[-109.009642,46.749217],[-108.77961,46.130322],[-108.922011,46.130322],[-109.17395,46.130322],[-109.414935,46.042691],[-109.655921,46.217953],[-109.387551,46.694447]]]},"id":"30037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.213182,46.738263],[-118.210901,46.738263],[-118.216378,46.590385],[-118.227332,46.595862],[-118.698349,46.371308],[-119.043396,46.190569],[-119.454167,46.678016],[-119.372013,46.738263],[-119.213182,46.738263]]]},"id":"53021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.875891,46.628724],[-119.454167,46.678016],[-119.043396,46.190569],[-118.988627,45.998876],[-119.432259,45.916722],[-119.870414,45.834568],[-119.864937,46.042691],[-119.875891,46.628724],[-119.875891,46.628724]]]},"id":"53005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.17717,46.716355],[-95.163936,46.716355],[-95.152983,46.371308],[-95.147506,46.108415],[-95.393968,46.108415],[-95.771877,46.108415],[-96.264801,46.108415],[-96.281232,46.628724],[-96.17717,46.716355]]]},"id":"27111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.097743,46.716355],[-101.29811,46.628724],[-101.024263,46.283677],[-101.999158,46.053645],[-101.999158,46.207],[-102.097743,46.628724],[-102.097743,46.716355]]]},"id":"38037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.849423,46.623247],[-117.230529,46.464416],[-117.482468,45.998876],[-117.602961,45.998876],[-117.849423,46.623247]]]},"id":"53023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.546876,46.584908],[-90.300413,45.982445],[-90.678322,45.982445],[-90.924785,46.15223],[-90.924785,46.584908],[-90.546876,46.584908]]]},"id":"55003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.864092,46.68897],[-85.864092,46.502754],[-86.001015,46.502754],[-86.614433,46.157707],[-87.118311,46.157707],[-87.118311,46.497277],[-86.696587,46.437031],[-85.864092,46.68897]]]},"id":"26003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.732151,46.612293],[-104.606182,46.683493],[-104.047534,46.639678],[-104.047534,46.541093],[-104.047534,46.2782],[-104.047534,45.944106],[-104.042057,45.88386],[-104.885506,46.135799],[-104.732151,46.612293]]]},"id":"30025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.333228,46.661586],[-114.557782,45.566198],[-114.694706,45.199243],[-115.828432,45.193766],[-116.146095,45.106135],[-116.688312,45.270443],[-116.463758,45.61549],[-116.792374,45.856475],[-116.699266,45.998876],[-116.168003,46.371308],[-114.596121,46.634201],[-114.333228,46.661586]]]},"id":"16049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.851257,46.661586],[-113.829349,46.661586],[-113.801964,46.037214],[-113.517164,45.938629],[-113.517164,45.938629],[-113.944365,45.68669],[-114.557782,45.566198],[-114.333228,46.661586],[-113.851257,46.661586]]]},"id":"30081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.586107,46.634201],[-100.082229,46.634201],[-99.917921,46.634201],[-99.879582,46.283677],[-99.879582,45.944106],[-100.432753,45.944106],[-100.498476,45.944106],[-100.50943,45.944106],[-100.591584,46.426077],[-100.662785,46.634201],[-100.586107,46.634201]]]},"id":"38029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.917921,46.634201],[-99.452381,46.634201],[-99.036133,46.628724],[-99.036133,46.283677],[-99.348319,46.283677],[-99.879582,46.283677],[-99.917921,46.634201]]]},"id":"38047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.790588,46.628724],[-96.790588,46.628724],[-96.576987,46.020784],[-96.560556,45.933153],[-96.735818,45.933153],[-97.228743,45.933153],[-97.278035,46.283677],[-97.278035,46.628724],[-96.790588,46.628724]]]},"id":"38077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.033853,46.628724],[-98.033853,46.283677],[-98.335085,46.283677],[-99.003272,46.283677],[-99.036133,46.283677],[-99.036133,46.628724],[-98.439147,46.628724],[-98.033853,46.628724]]]},"id":"38045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.17442,46.628724],[-102.097743,46.628724],[-101.999158,46.207],[-102.49756,46.283677],[-102.924761,46.283677],[-102.930238,46.628724],[-102.17442,46.628724]]]},"id":"38041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.281232,46.628724],[-96.264801,46.108415],[-96.264801,46.020784],[-96.390771,46.020784],[-96.576987,46.020784],[-96.790588,46.628724],[-96.281232,46.628724]]]},"id":"27167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.644497,46.61777],[-116.458281,46.628724],[-116.37065,46.464416],[-116.699266,45.998876],[-116.792374,45.856475],[-116.918344,45.993399],[-117.038836,46.426077],[-117.038836,46.541093],[-116.644497,46.61777]]]},"id":"16069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.957176,46.628724],[-97.683329,46.628724],[-97.278035,46.628724],[-97.278035,46.283677],[-98.006468,46.283677],[-98.033853,46.283677],[-98.033853,46.628724],[-97.957176,46.628724]]]},"id":"38073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.23147,46.628724],[-102.930238,46.628724],[-102.924761,46.283677],[-102.995961,46.2782],[-104.047534,46.2782],[-104.047534,46.541093],[-103.609378,46.628724],[-103.23147,46.628724]]]},"id":"38087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.227332,46.595862],[-118.216378,46.590385],[-117.849423,46.623247],[-117.602961,45.998876],[-117.975393,45.998876],[-117.997301,45.998876],[-118.227332,46.595862]]]},"id":"53013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.698349,46.371308],[-118.227332,46.595862],[-117.997301,45.998876],[-118.58881,45.998876],[-118.988627,45.998876],[-119.043396,46.190569],[-118.698349,46.371308]]]},"id":"53071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.415429,46.568478],[-89.927981,46.300108],[-90.042997,45.982445],[-90.300413,45.982445],[-90.546876,46.584908],[-90.415429,46.568478]]]},"id":"55051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-69.723548,46.573955],[-69.822133,45.74146],[-69.619487,45.013027],[-69.356593,45.073273],[-69.268962,44.722749],[-69.471609,44.695364],[-69.581148,44.706318],[-69.931672,44.61321],[-70.41912,45.144473],[-70.550566,45.670259],[-70.02478,46.573955],[-69.723548,46.573955]]]},"id":"23025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-68.819853,46.393216],[-68.776038,45.243058],[-69.356593,45.073273],[-69.619487,45.013027],[-69.822133,45.74146],[-69.723548,46.573955],[-68.819853,46.573955],[-68.819853,46.393216]]]},"id":"23021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.967189,46.568478],[-111.78645,46.568478],[-111.660481,45.834568],[-111.802881,45.796229],[-111.967189,45.850998],[-112.191744,45.746937],[-112.57513,46.179615],[-112.558699,46.267246],[-112.312237,46.4206],[-111.967189,46.568478]]]},"id":"30043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.001015,46.502754],[-85.864092,46.502754],[-85.864092,46.245338],[-85.864092,45.966014],[-86.461078,45.75789],[-86.614433,46.157707],[-86.001015,46.502754]]]},"id":"26153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.782807,46.497277],[-107.738991,46.480847],[-107.50896,46.042691],[-108.0457,45.900291],[-108.067608,45.516905],[-108.642687,45.462136],[-108.806995,45.626444],[-108.845333,45.610013],[-108.922011,46.130322],[-108.77961,46.130322],[-107.782807,46.497277]]]},"id":"30111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.738991,46.480847],[-107.026989,46.393216],[-106.939358,45.867429],[-107.426806,45.976968],[-107.50896,46.042691],[-107.738991,46.480847]]]},"id":"30103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.31588,46.426077],[-116.168003,46.371308],[-116.699266,45.998876],[-116.37065,46.464416],[-116.31588,46.426077]]]},"id":"16061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.038836,46.426077],[-116.918344,45.993399],[-117.482468,45.998876],[-117.230529,46.464416],[-117.038836,46.426077]]]},"id":"53003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.591584,46.426077],[-100.50943,45.944106],[-101.999158,45.944106],[-101.999158,46.053645],[-101.024263,46.283677],[-100.591584,46.426077]]]},"id":"38085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.712101,46.4206],[-88.679239,46.4206],[-88.115114,46.4206],[-88.115114,46.245338],[-88.115114,45.922199],[-88.493023,45.993399],[-88.684716,46.015307],[-88.931178,46.075553],[-88.991425,46.097461],[-88.991425,46.332969],[-88.991425,46.4206],[-88.712101,46.4206]]]},"id":"26071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.962206,46.4206],[-92.29402,46.415123],[-92.29402,46.157707],[-92.841714,45.730506],[-93.066268,45.730506],[-93.142945,45.730506],[-93.055314,46.157707],[-93.055314,46.4206],[-92.962206,46.4206]]]},"id":"27115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-68.513145,46.382262],[-68.43099,45.577151],[-68.047605,45.637398],[-68.058559,45.254012],[-68.814376,44.68441],[-69.268962,44.722749],[-69.356593,45.073273],[-68.776038,45.243058],[-68.819853,46.393216],[-68.513145,46.382262]]]},"id":"23019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.52445,46.387739],[-121.52445,46.042691],[-121.52445,45.725029],[-121.924267,45.648352],[-122.247407,45.549767],[-122.247407,46.053645],[-122.24193,46.387739],[-121.52445,46.387739]]]},"id":"53059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.216825,46.387739],[-122.24193,46.387739],[-122.247407,46.053645],[-122.433623,45.976968],[-122.784147,45.850998],[-123.211348,46.174138],[-123.216825,46.387739]]]},"id":"53015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.359225,46.382262],[-123.216825,46.387739],[-123.211348,46.174138],[-123.364702,46.146753],[-123.545441,46.261769],[-123.72618,46.289154],[-123.359225,46.382262]]]},"id":"53069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.152983,46.371308],[-94.731258,46.371308],[-94.654581,46.3494],[-94.643627,45.774321],[-95.142029,45.774321],[-95.147506,46.108415],[-95.152983,46.371308]]]},"id":"27153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.654581,46.3494],[-94.342395,46.2782],[-93.811132,46.157707],[-93.76184,45.823614],[-94.008302,45.823614],[-94.271195,45.774321],[-94.451934,45.774321],[-94.643627,45.774321],[-94.654581,46.3494]]]},"id":"27097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.927981,46.300108],[-88.991425,46.097461],[-88.931178,46.075553],[-89.046194,45.894814],[-89.298133,45.872906],[-90.042997,45.894814],[-90.042997,45.982445],[-89.927981,46.300108]]]},"id":"55125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.348319,46.283677],[-99.036133,46.283677],[-99.003272,46.283677],[-99.003272,45.938629],[-99.720751,45.938629],[-99.879582,45.944106],[-99.879582,46.283677],[-99.348319,46.283677]]]},"id":"38051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.335085,46.283677],[-98.033853,46.283677],[-98.006468,46.283677],[-98.006468,45.938629],[-98.723948,45.938629],[-99.003272,45.938629],[-99.003272,46.283677],[-98.335085,46.283677]]]},"id":"38021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.49756,46.283677],[-101.999158,46.207],[-101.999158,46.053645],[-101.999158,45.944106],[-101.999158,45.944106],[-102.623529,45.944106],[-102.941192,45.944106],[-102.995961,45.944106],[-102.995961,46.2782],[-102.924761,46.283677],[-102.49756,46.283677]]]},"id":"38001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.006468,46.283677],[-97.278035,46.283677],[-97.228743,45.933153],[-97.853114,45.933153],[-97.979084,45.938629],[-98.006468,45.938629],[-98.006468,46.283677]]]},"id":"38081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.995961,46.2782],[-102.995961,45.944106],[-104.047534,45.944106],[-104.047534,46.2782],[-102.995961,46.2782]]]},"id":"38011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.364702,46.146753],[-123.359225,45.779798],[-123.841196,45.785275],[-123.967166,45.785275],[-124.010981,46.22343],[-123.545441,46.261769],[-123.364702,46.146753]]]},"id":"41007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.887315,46.267246],[-112.558699,46.267246],[-112.57513,46.179615],[-113.084485,45.861952],[-113.517164,45.938629],[-113.517164,45.938629],[-113.035193,46.267246],[-112.887315,46.267246]]]},"id":"30023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.802929,46.245338],[-87.616713,45.987922],[-87.846744,45.725029],[-88.060345,45.779798],[-88.115114,45.922199],[-88.115114,46.245338],[-87.802929,46.245338]]]},"id":"26043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.553716,46.245338],[-93.433223,46.15223],[-93.515377,45.735983],[-93.5099,45.560721],[-93.652301,45.560721],[-93.76184,45.560721],[-93.76184,45.823614],[-93.811132,46.157707],[-93.794701,46.245338],[-93.553716,46.245338]]]},"id":"27095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.36569,46.245338],[-85.23972,46.245338],[-84.116948,45.976968],[-84.70298,45.850998],[-85.513567,46.097461],[-85.864092,45.966014],[-85.864092,46.245338],[-85.36569,46.245338]]]},"id":"26097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.006445,46.217953],[-109.655921,46.217953],[-109.414935,46.042691],[-109.562813,45.610013],[-110.061214,45.171858],[-110.230999,45.171858],[-110.280292,46.185092],[-110.280292,46.217953],[-110.006445,46.217953]]]},"id":"30097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.063494,46.190569],[-110.78417,46.190569],[-111.041587,45.002073],[-111.058017,44.667979],[-111.047063,44.476286],[-111.37568,44.750133],[-111.353772,45.642875],[-111.802881,45.796229],[-111.660481,45.834568],[-111.063494,46.190569]]]},"id":"30031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.78417,46.190569],[-110.280292,46.185092],[-110.230999,45.171858],[-110.061214,45.171858],[-109.798321,45.166381],[-109.798321,45.002073],[-111.041587,45.002073],[-110.78417,46.190569]]]},"id":"30067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.784147,45.850998],[-122.762239,45.730506],[-122.926547,45.725029],[-123.134671,45.779798],[-123.359225,45.779798],[-123.364702,46.146753],[-123.211348,46.174138],[-122.784147,45.850998]]]},"id":"41009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.57513,46.179615],[-112.191744,45.746937],[-112.684669,45.626444],[-113.084485,45.861952],[-112.57513,46.179615]]]},"id":"30093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.307254,46.157707],[-93.055314,46.157707],[-93.142945,45.730506],[-93.498947,45.735983],[-93.515377,45.735983],[-93.433223,46.15223],[-93.307254,46.157707]]]},"id":"27065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.118311,46.157707],[-86.614433,46.157707],[-86.461078,45.75789],[-86.784218,45.861952],[-87.266188,45.549767],[-87.37025,45.987922],[-87.118311,46.157707]]]},"id":"26041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.020173,46.157707],[-91.549156,46.157707],[-91.538202,45.637398],[-92.031127,45.637398],[-92.047557,46.157707],[-92.020173,46.157707]]]},"id":"55129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.302693,46.157707],[-90.924785,46.15223],[-90.678322,45.982445],[-90.678322,45.637398],[-91.538202,45.637398],[-91.549156,46.157707],[-91.302693,46.157707]]]},"id":"55113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.29402,46.157707],[-92.047557,46.157707],[-92.031127,45.637398],[-92.157096,45.637398],[-92.529528,45.730506],[-92.885529,45.642875],[-92.841714,45.730506],[-92.29402,46.157707]]]},"id":"55013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.885506,46.135799],[-104.042057,45.88386],[-104.042057,45.210196],[-104.058488,44.996596],[-105.03886,45.002073],[-104.98409,45.785275],[-104.885506,46.135799]]]},"id":"30011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.17395,46.130322],[-108.922011,46.130322],[-108.845333,45.610013],[-109.798321,45.166381],[-110.061214,45.171858],[-109.562813,45.610013],[-109.414935,46.042691],[-109.17395,46.130322]]]},"id":"30095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.264801,46.108415],[-95.771877,46.108415],[-95.760923,45.75789],[-96.253848,45.75789],[-96.264801,46.020784],[-96.264801,46.108415]]]},"id":"27051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.393968,46.108415],[-95.147506,46.108415],[-95.142029,45.774321],[-95.142029,45.75789],[-95.42683,45.75789],[-95.760923,45.75789],[-95.771877,46.108415],[-95.393968,46.108415]]]},"id":"27041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.931178,46.075553],[-88.684716,46.015307],[-88.4273,45.725029],[-88.4273,45.374505],[-88.679239,45.379982],[-89.046194,45.462136],[-89.046194,45.894814],[-88.931178,46.075553]]]},"id":"55041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.433623,45.976968],[-122.247407,46.053645],[-122.247407,45.549767],[-122.762239,45.730506],[-122.784147,45.850998],[-122.433623,45.976968]]]},"id":"53011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.990907,46.042691],[-119.864937,46.042691],[-119.870414,45.834568],[-120.001861,45.81266],[-120.653617,45.735983],[-120.834356,45.675736],[-120.91651,45.642875],[-121.442296,45.697644],[-121.52445,45.725029],[-121.52445,46.042691],[-119.990907,46.042691]]]},"id":"53039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.426806,45.976968],[-106.939358,45.867429],[-106.769573,45.177335],[-106.282125,45.177335],[-106.265695,44.991119],[-107.914254,45.002073],[-108.248347,45.002073],[-108.642687,45.462136],[-108.067608,45.516905],[-108.0457,45.900291],[-107.50896,46.042691],[-107.426806,45.976968]]]},"id":"30003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.390771,46.020784],[-96.264801,46.020784],[-96.253848,45.75789],[-96.253848,45.588105],[-96.828926,45.588105],[-96.834403,45.588105],[-96.560556,45.933153],[-96.576987,46.020784],[-96.390771,46.020784]]]},"id":"27155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.493023,45.993399],[-88.115114,45.922199],[-88.060345,45.779798],[-88.4273,45.725029],[-88.684716,46.015307],[-88.493023,45.993399]]]},"id":"55037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.58881,45.998876],[-117.997301,45.998876],[-117.975393,45.998876],[-117.975393,45.861952],[-118.117793,45.47309],[-118.698349,45.34712],[-118.51761,44.996596],[-118.676441,44.996596],[-119.163889,44.996596],[-119.147458,45.516905],[-119.432259,45.916722],[-118.988627,45.998876],[-118.58881,45.998876]]]},"id":"41059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.975393,45.998876],[-117.602961,45.998876],[-117.482468,45.998876],[-116.918344,45.993399],[-116.792374,45.856475],[-116.463758,45.61549],[-116.688312,45.270443],[-116.78142,45.07875],[-117.268868,45.07875],[-117.898716,45.861952],[-117.975393,45.861952],[-117.975393,45.998876]]]},"id":"41063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.616713,45.987922],[-87.37025,45.987922],[-87.266188,45.549767],[-87.589328,45.095181],[-87.846744,45.725029],[-87.616713,45.987922]]]},"id":"26109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.300413,45.982445],[-90.042997,45.982445],[-90.042997,45.894814],[-90.042997,45.555244],[-90.042997,45.379982],[-90.168967,45.379982],[-90.678322,45.379982],[-90.678322,45.637398],[-90.678322,45.982445],[-90.300413,45.982445]]]},"id":"55099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.623529,45.944106],[-101.999158,45.944106],[-101.999158,45.47309],[-101.999158,45.040411],[-102.042974,45.040411],[-102.957623,45.040411],[-102.957623,45.210196],[-102.941192,45.944106],[-102.623529,45.944106]]]},"id":"46105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.047534,45.944106],[-102.995961,45.944106],[-102.941192,45.944106],[-102.957623,45.210196],[-104.042057,45.210196],[-104.042057,45.88386],[-104.047534,45.944106]]]},"id":"46063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.999158,45.944106],[-100.50943,45.944106],[-100.498476,45.944106],[-100.432753,45.593582],[-100.339645,45.47309],[-100.772323,45.47309],[-101.467895,45.47309],[-101.714357,45.47309],[-101.999158,45.47309],[-101.999158,45.944106],[-101.999158,45.944106]]]},"id":"46031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.432753,45.944106],[-99.879582,45.944106],[-99.720751,45.938629],[-99.715274,45.593582],[-100.339645,45.593582],[-100.432753,45.593582],[-100.498476,45.944106],[-100.432753,45.944106]]]},"id":"46021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.517164,45.938629],[-113.084485,45.861952],[-112.684669,45.626444],[-112.169836,44.826811],[-111.479742,44.711795],[-111.616665,44.547487],[-112.816115,44.377701],[-113.456917,44.865149],[-113.944365,45.68669],[-113.517164,45.938629]]]},"id":"30001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.720751,45.938629],[-99.003272,45.938629],[-98.723948,45.938629],[-98.723948,45.593582],[-99.709797,45.593582],[-99.715274,45.593582],[-99.720751,45.938629]]]},"id":"46089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.723948,45.938629],[-98.006468,45.938629],[-97.979084,45.938629],[-97.979084,45.588105],[-97.979084,45.243058],[-98.532255,45.243058],[-98.718471,45.243058],[-98.723948,45.243058],[-98.723948,45.593582],[-98.723948,45.938629]]]},"id":"46013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.735818,45.933153],[-96.560556,45.933153],[-96.834403,45.588105],[-96.472925,45.325212],[-96.681049,45.325212],[-97.228743,45.297827],[-97.228743,45.560721],[-97.228743,45.933153],[-96.735818,45.933153]]]},"id":"46109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.853114,45.933153],[-97.228743,45.933153],[-97.228743,45.560721],[-97.979084,45.588105],[-97.979084,45.938629],[-97.853114,45.933153]]]},"id":"46091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.432259,45.916722],[-119.147458,45.516905],[-119.163889,44.996596],[-119.673245,44.996596],[-119.78826,45.067796],[-120.001861,45.81266],[-119.870414,45.834568],[-119.432259,45.916722]]]},"id":"41049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.298133,45.872906],[-89.046194,45.894814],[-89.046194,45.462136],[-89.237887,45.467613],[-89.424103,45.467613],[-90.042997,45.555244],[-90.042997,45.894814],[-89.298133,45.872906]]]},"id":"55085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.898716,45.861952],[-117.268868,45.07875],[-117.778223,44.991119],[-118.243763,44.958257],[-118.51761,44.996596],[-118.698349,45.34712],[-118.117793,45.47309],[-117.975393,45.861952],[-117.898716,45.861952]]]},"id":"41061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.967189,45.850998],[-111.802881,45.796229],[-111.353772,45.642875],[-111.37568,44.750133],[-111.479742,44.711795],[-112.169836,44.826811],[-112.684669,45.626444],[-112.191744,45.746937],[-111.967189,45.850998]]]},"id":"30057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.008302,45.823614],[-93.76184,45.823614],[-93.76184,45.560721],[-94.150702,45.560721],[-94.271195,45.774321],[-94.008302,45.823614]]]},"id":"27009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.653617,45.735983],[-120.001861,45.81266],[-119.78826,45.067796],[-119.870414,45.067796],[-120.494786,45.067796],[-120.505739,45.084227],[-120.653617,45.735983]]]},"id":"41021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.060345,45.779798],[-87.846744,45.725029],[-87.589328,45.095181],[-87.76459,44.963734],[-88.4273,45.374505],[-88.4273,45.725029],[-88.060345,45.779798]]]},"id":"55075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.730365,45.785275],[-84.730365,45.779798],[-84.730365,45.286874],[-85.09732,45.363551],[-85.09732,45.369028],[-84.730365,45.785275]]]},"id":"26047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.128771,45.790752],[-104.98409,45.785275],[-105.03886,45.002073],[-105.088152,45.002073],[-106.024709,44.991119],[-106.265695,44.991119],[-106.282125,45.177335],[-106.194494,45.790752],[-106.128771,45.790752]]]},"id":"30075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.730365,45.779798],[-84.730365,45.785275],[-84.204579,45.626444],[-84.248394,45.199243],[-84.368887,45.199243],[-84.735842,45.204719],[-84.730365,45.286874],[-84.730365,45.779798]]]},"id":"26031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.841196,45.785275],[-123.359225,45.779798],[-123.463287,45.434751],[-123.72618,45.07875],[-123.72618,45.045888],[-124.000027,45.045888],[-124.005504,45.045888],[-123.967166,45.785275],[-123.841196,45.785275]]]},"id":"41057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.134671,45.779798],[-122.926547,45.725029],[-122.745808,45.434751],[-122.866301,45.319735],[-123.063471,45.401889],[-123.463287,45.434751],[-123.359225,45.779798],[-123.134671,45.779798]]]},"id":"41067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.451934,45.774321],[-94.271195,45.774321],[-94.150702,45.560721],[-94.046641,45.423797],[-94.052118,45.423797],[-94.260241,45.281397],[-94.534088,45.325212],[-94.76412,45.325212],[-94.884612,45.412843],[-95.131075,45.412843],[-95.142029,45.75789],[-95.142029,45.774321],[-94.643627,45.774321],[-94.451934,45.774321]]]},"id":"27145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.253848,45.75789],[-95.760923,45.75789],[-95.749969,45.412843],[-95.974524,45.412843],[-96.116924,45.412843],[-96.253848,45.588105],[-96.253848,45.75789]]]},"id":"27149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.42683,45.75789],[-95.142029,45.75789],[-95.131075,45.412843],[-95.257044,45.412843],[-95.749969,45.412843],[-95.760923,45.75789],[-95.42683,45.75789]]]},"id":"27121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.834356,45.675736],[-120.653617,45.735983],[-120.505739,45.084227],[-121.026049,45.22115],[-120.91651,45.642875],[-120.834356,45.675736]]]},"id":"41055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.498947,45.735983],[-93.142945,45.730506],[-93.016976,45.412843],[-93.159376,45.412843],[-93.5099,45.412843],[-93.5099,45.560721],[-93.515377,45.735983],[-93.498947,45.735983]]]},"id":"27059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.066268,45.730506],[-92.841714,45.730506],[-92.885529,45.642875],[-92.743129,45.297827],[-93.016976,45.297827],[-93.016976,45.412843],[-93.142945,45.730506],[-93.066268,45.730506]]]},"id":"27025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.529528,45.730506],[-92.157096,45.637398],[-92.157096,45.210196],[-92.650021,45.210196],[-92.75956,45.210196],[-92.743129,45.297827],[-92.885529,45.642875],[-92.529528,45.730506]]]},"id":"55095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.926547,45.725029],[-122.762239,45.730506],[-122.247407,45.549767],[-121.924267,45.648352],[-121.820205,45.462136],[-122.356945,45.462136],[-122.745808,45.434751],[-122.926547,45.725029]]]},"id":"41051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.924267,45.648352],[-121.52445,45.725029],[-121.442296,45.697644],[-121.694236,45.259489],[-121.820205,45.462136],[-121.924267,45.648352]]]},"id":"41027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.442296,45.697644],[-120.91651,45.642875],[-121.026049,45.22115],[-120.505739,45.084227],[-120.494786,45.067796],[-120.374293,44.821334],[-120.998664,44.821334],[-121.759959,44.826811],[-121.732574,44.887057],[-121.694236,45.259489],[-121.442296,45.697644]]]},"id":"41065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.944365,45.68669],[-113.456917,44.865149],[-112.816115,44.377701],[-112.996854,44.235301],[-113.002331,44.235301],[-113.319994,44.235301],[-114.196304,44.859672],[-114.563259,44.574871],[-114.809722,44.81038],[-114.694706,45.199243],[-114.557782,45.566198],[-113.944365,45.68669]]]},"id":"16059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.954497,44.41604],[-68.058559,45.254012],[-68.047605,45.637398],[-67.806619,45.681213],[-66.979601,44.804903],[-67.954497,44.41604]]]},"id":"23029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.550566,45.670259],[-70.41912,45.144473],[-69.931672,44.61321],[-70.128842,44.48724],[-70.172658,44.481763],[-70.238381,44.459856],[-70.769644,44.733703],[-70.835367,45.27592],[-70.550566,45.670259]]]},"id":"23007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.157096,45.637398],[-92.031127,45.637398],[-91.538202,45.637398],[-91.543679,45.29235],[-91.664172,45.210196],[-92.157096,45.210196],[-92.157096,45.637398]]]},"id":"55005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.678322,45.637398],[-90.678322,45.379982],[-90.924785,45.29235],[-91.089093,45.29235],[-91.543679,45.29235],[-91.538202,45.637398],[-90.678322,45.637398]]]},"id":"55107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.806995,45.626444],[-108.642687,45.462136],[-108.248347,45.002073],[-108.620779,45.002073],[-109.798321,45.002073],[-109.798321,45.166381],[-108.845333,45.610013],[-108.806995,45.626444]]]},"id":"30009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.388515,45.204719],[-83.4871,45.204719],[-83.881439,45.204719],[-84.199102,45.199243],[-84.248394,45.199243],[-84.204579,45.626444],[-83.388515,45.204719]]]},"id":"26141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.339645,45.593582],[-99.715274,45.593582],[-99.709797,45.593582],[-99.709797,45.243058],[-100.257491,45.248535],[-100.339645,45.47309],[-100.432753,45.593582],[-100.339645,45.593582]]]},"id":"46129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.709797,45.593582],[-98.723948,45.593582],[-98.723948,45.243058],[-99.572873,45.243058],[-99.709797,45.243058],[-99.709797,45.593582]]]},"id":"46045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.979084,45.588105],[-97.228743,45.560721],[-97.228743,45.297827],[-97.228743,45.14995],[-97.23422,45.14995],[-97.491636,45.14995],[-97.924314,45.155427],[-97.979084,45.155427],[-97.979084,45.243058],[-97.979084,45.588105]]]},"id":"46037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.828926,45.588105],[-96.253848,45.588105],[-96.116924,45.412843],[-96.10597,45.177335],[-96.368863,45.259489],[-96.451017,45.270443],[-96.451017,45.297827],[-96.456494,45.303304],[-96.472925,45.325212],[-96.834403,45.588105],[-96.828926,45.588105]]]},"id":"27011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.652301,45.560721],[-93.5099,45.560721],[-93.5099,45.412843],[-93.5099,45.243058],[-93.520854,45.248535],[-94.046641,45.423797],[-94.150702,45.560721],[-93.76184,45.560721],[-93.652301,45.560721]]]},"id":"27141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.424103,45.467613],[-89.424103,45.117088],[-90.042997,45.122565],[-90.042997,45.379982],[-90.042997,45.555244],[-89.424103,45.467613]]]},"id":"55069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.772323,45.47309],[-100.339645,45.47309],[-100.257491,45.248535],[-100.405368,44.898011],[-100.717554,44.772041],[-101.139278,44.744656],[-101.500756,44.991119],[-101.467895,45.47309],[-100.772323,45.47309]]]},"id":"46041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.714357,45.47309],[-101.467895,45.47309],[-101.500756,44.991119],[-101.139278,44.744656],[-101.380264,44.657025],[-101.999158,44.509148],[-101.999158,45.040411],[-101.999158,45.47309],[-101.714357,45.47309]]]},"id":"46137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.237887,45.467613],[-89.046194,45.462136],[-88.679239,45.379982],[-88.6409,45.117088],[-88.974994,45.117088],[-88.980471,45.029457],[-88.991425,45.029457],[-89.221456,45.029457],[-89.424103,45.117088],[-89.424103,45.467613],[-89.237887,45.467613]]]},"id":"55067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.356945,45.462136],[-121.820205,45.462136],[-121.694236,45.259489],[-121.732574,44.887057],[-122.395284,44.887057],[-122.84987,45.259489],[-122.866301,45.319735],[-122.745808,45.434751],[-122.356945,45.462136]]]},"id":"41005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.063471,45.401889],[-122.866301,45.319735],[-122.84987,45.259489],[-122.964886,45.286874],[-123.068948,45.073273],[-123.622119,45.07875],[-123.72618,45.07875],[-123.463287,45.434751],[-123.063471,45.401889]]]},"id":"41071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.052118,45.423797],[-94.046641,45.423797],[-93.520854,45.248535],[-93.767317,44.980165],[-94.013779,44.980165],[-94.254764,44.980165],[-94.260241,45.281397],[-94.052118,45.423797]]]},"id":"27171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.159376,45.412843],[-93.016976,45.412843],[-93.016976,45.297827],[-93.022453,45.122565],[-93.230576,45.122565],[-93.2251,45.034934],[-93.5099,45.243058],[-93.5099,45.412843],[-93.159376,45.412843]]]},"id":"27003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.884612,45.412843],[-94.76412,45.325212],[-94.758643,44.892534],[-95.246091,44.892534],[-95.246091,45.14995],[-95.257044,45.412843],[-95.131075,45.412843],[-94.884612,45.412843]]]},"id":"27067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.974524,45.412843],[-95.749969,45.412843],[-95.257044,45.412843],[-95.246091,45.14995],[-95.574707,45.14995],[-96.03477,45.14995],[-96.10597,45.177335],[-96.116924,45.412843],[-95.974524,45.412843]]]},"id":"27151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.168967,45.379982],[-90.042997,45.379982],[-90.042997,45.122565],[-90.196352,45.122565],[-90.316844,45.034934],[-90.815246,45.029457],[-90.924785,45.029457],[-90.924785,45.29235],[-90.678322,45.379982],[-90.168967,45.379982]]]},"id":"55119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.4273,45.374505],[-87.76459,44.963734],[-87.989145,44.678933],[-88.235607,44.678933],[-88.241084,44.678933],[-88.487546,44.854195],[-88.6409,45.117088],[-88.679239,45.379982],[-88.4273,45.374505]]]},"id":"55083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.09732,45.363551],[-84.730365,45.286874],[-84.735842,45.204719],[-84.856335,45.117088],[-85.321875,45.204719],[-85.387598,45.210196],[-85.09732,45.369028],[-85.09732,45.363551]]]},"id":"26029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.835367,45.27592],[-70.769644,44.733703],[-70.238381,44.459856],[-70.479366,44.032654],[-70.676536,44.142193],[-70.780598,43.813577],[-70.988722,43.791669],[-71.010629,44.284593],[-71.08183,45.303304],[-70.835367,45.27592]]]},"id":"23017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.681049,45.325212],[-96.472925,45.325212],[-96.456494,45.303304],[-96.451017,45.297827],[-96.451017,45.270443],[-96.451017,44.980165],[-96.883696,44.974688],[-97.228743,45.14995],[-97.228743,45.297827],[-96.681049,45.325212]]]},"id":"46051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.534088,45.325212],[-94.260241,45.281397],[-94.254764,44.980165],[-94.501227,44.892534],[-94.758643,44.892534],[-94.76412,45.325212],[-94.534088,45.325212]]]},"id":"27093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.08183,45.303304],[-71.010629,44.284593],[-71.415923,44.213393],[-71.766447,44.405086],[-71.503554,45.013027],[-71.08183,45.303304]]]},"id":"33007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.375727,44.673456],[-87.737205,44.678933],[-86.981388,45.297827],[-87.375727,44.673456]]]},"id":"55029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.016976,45.297827],[-92.743129,45.297827],[-92.75956,45.210196],[-92.770513,44.859672],[-92.803375,44.744656],[-93.016976,44.892534],[-93.022453,45.122565],[-93.016976,45.297827]]]},"id":"27163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.089093,45.29235],[-90.924785,45.29235],[-90.924785,45.029457],[-90.924785,44.859672],[-91.499863,44.859672],[-91.653218,44.854195],[-91.664172,45.210196],[-91.543679,45.29235],[-91.089093,45.29235]]]},"id":"55017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.964886,45.286874],[-122.84987,45.259489],[-122.395284,44.887057],[-121.732574,44.887057],[-121.759959,44.826811],[-121.79282,44.68441],[-122.658177,44.777518],[-123.145625,44.750133],[-123.068948,45.073273],[-122.964886,45.286874]]]},"id":"41047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.368863,45.259489],[-96.10597,45.177335],[-96.03477,45.14995],[-95.739015,44.936349],[-96.451017,44.804903],[-96.451017,44.980165],[-96.451017,45.270443],[-96.368863,45.259489]]]},"id":"27073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.688312,45.270443],[-116.146095,45.106135],[-116.157049,44.498194],[-116.299449,44.443425],[-116.901913,44.843241],[-116.78142,45.07875],[-116.688312,45.270443]]]},"id":"16003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-68.058559,45.254012],[-67.954497,44.41604],[-68.797945,44.470809],[-68.814376,44.68441],[-68.058559,45.254012]]]},"id":"23009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.257491,45.248535],[-99.709797,45.243058],[-99.572873,45.243058],[-99.572873,44.898011],[-99.676935,44.898011],[-100.405368,44.898011],[-100.257491,45.248535]]]},"id":"46107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.520854,45.248535],[-93.5099,45.243058],[-93.2251,45.034934],[-93.175807,44.887057],[-93.329161,44.788472],[-93.433223,44.81038],[-93.520854,44.804903],[-93.767317,44.980165],[-93.520854,45.248535]]]},"id":"27053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.572873,45.243058],[-98.723948,45.243058],[-98.718471,45.243058],[-98.718471,44.898011],[-99.30998,44.898011],[-99.572873,44.898011],[-99.572873,45.243058]]]},"id":"46049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.532255,45.243058],[-97.979084,45.243058],[-97.979084,45.155427],[-97.979084,44.629641],[-98.088623,44.629641],[-98.707517,44.635118],[-98.718471,44.898011],[-98.718471,45.243058],[-98.532255,45.243058]]]},"id":"46115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-115.828432,45.193766],[-114.694706,45.199243],[-114.809722,44.81038],[-115.04523,44.750133],[-115.297169,44.339363],[-115.680555,44.235301],[-116.211818,44.153147],[-116.157049,44.498194],[-116.146095,45.106135],[-115.828432,45.193766]]]},"id":"16085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.042057,45.210196],[-102.957623,45.210196],[-102.957623,45.040411],[-102.963099,44.602256],[-103.565563,44.602256],[-103.812025,44.602256],[-104.058488,44.569394],[-104.058488,44.996596],[-104.042057,45.210196]]]},"id":"46019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.639537,44.777518],[-85.814799,44.772041],[-86.039354,44.777518],[-86.072215,44.777518],[-85.617629,45.188289],[-85.639537,44.777518]]]},"id":"26089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.650021,45.210196],[-92.157096,45.210196],[-92.135188,44.859672],[-92.600728,44.865149],[-92.770513,44.859672],[-92.75956,45.210196],[-92.650021,45.210196]]]},"id":"55109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.157096,45.210196],[-91.664172,45.210196],[-91.653218,44.854195],[-91.647741,44.68441],[-91.894203,44.68441],[-92.135188,44.68441],[-92.135188,44.859672],[-92.157096,45.210196]]]},"id":"55033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.321875,45.204719],[-84.856335,45.117088],[-84.845381,44.859672],[-85.250674,44.859672],[-85.332828,44.81038],[-85.42046,44.859672],[-85.442367,44.859672],[-85.387598,45.210196],[-85.321875,45.204719]]]},"id":"26009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.4871,45.204719],[-83.388515,45.204719],[-83.322791,44.859672],[-83.547346,44.859672],[-83.886916,44.854195],[-83.881439,45.204719],[-83.4871,45.204719]]]},"id":"26007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.199102,45.199243],[-83.881439,45.204719],[-83.886916,44.854195],[-83.952639,44.854195],[-84.374364,44.854195],[-84.368887,45.199243],[-84.248394,45.199243],[-84.199102,45.199243]]]},"id":"26119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.735842,45.204719],[-84.368887,45.199243],[-84.374364,44.854195],[-84.774181,44.859672],[-84.845381,44.859672],[-84.856335,45.117088],[-84.735842,45.204719]]]},"id":"26137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.924314,45.155427],[-97.491636,45.14995],[-97.491636,44.804903],[-97.491636,44.54201],[-97.732621,44.54201],[-97.853114,44.54201],[-97.979084,44.629641],[-97.979084,45.155427],[-97.924314,45.155427]]]},"id":"46025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.574707,45.14995],[-95.246091,45.14995],[-95.246091,44.892534],[-95.481599,44.75561],[-95.733538,44.930872],[-95.739015,44.936349],[-96.03477,45.14995],[-95.574707,45.14995]]]},"id":"27023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.23422,45.14995],[-97.228743,45.14995],[-96.883696,44.974688],[-96.883696,44.804903],[-97.491636,44.804903],[-97.491636,45.14995],[-97.23422,45.14995]]]},"id":"46029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.230576,45.122565],[-93.022453,45.122565],[-93.016976,44.892534],[-93.088176,44.919919],[-93.175807,44.887057],[-93.2251,45.034934],[-93.230576,45.122565]]]},"id":"27123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.196352,45.122565],[-90.042997,45.122565],[-89.424103,45.117088],[-89.221456,45.029457],[-89.221456,44.678933],[-89.347426,44.678933],[-89.845827,44.68441],[-90.207305,44.68441],[-90.316844,44.68441],[-90.316844,45.034934],[-90.196352,45.122565]]]},"id":"55073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.974994,45.117088],[-88.6409,45.117088],[-88.487546,44.854195],[-88.980471,45.029457],[-88.974994,45.117088]]]},"id":"55078"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.778223,44.991119],[-117.268868,45.07875],[-116.78142,45.07875],[-116.901913,44.843241],[-117.219575,44.301024],[-117.608438,44.443425],[-118.232809,44.257209],[-118.495702,44.257209],[-118.243763,44.958257],[-117.778223,44.991119]]]},"id":"41001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.622119,45.07875],[-123.068948,45.073273],[-123.145625,44.750133],[-123.151102,44.722749],[-123.561872,44.722749],[-123.600211,44.722749],[-123.72618,45.045888],[-123.72618,45.07875],[-123.622119,45.07875]]]},"id":"41053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.870414,45.067796],[-119.78826,45.067796],[-119.673245,44.996596],[-119.656814,44.306501],[-120.385247,44.563917],[-120.374293,44.821334],[-120.494786,45.067796],[-119.870414,45.067796]]]},"id":"41069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.000027,45.045888],[-123.72618,45.045888],[-123.600211,44.722749],[-123.775473,44.284593],[-124.010981,44.279117],[-124.115043,44.27364],[-124.005504,45.045888],[-124.000027,45.045888]]]},"id":"41041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.042974,45.040411],[-101.999158,45.040411],[-101.999158,44.509148],[-101.999158,44.509148],[-102.119651,44.437948],[-102.388021,44.142193],[-103.450547,44.142193],[-103.565563,44.602256],[-102.963099,44.602256],[-102.957623,45.040411],[-102.042974,45.040411]]]},"id":"46093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.815246,45.029457],[-90.316844,45.034934],[-90.316844,44.68441],[-90.316844,44.426994],[-90.924785,44.596779],[-90.924785,44.859672],[-90.924785,45.029457],[-90.815246,45.029457]]]},"id":"55019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.991425,45.029457],[-88.980471,45.029457],[-88.487546,44.854195],[-88.241084,44.678933],[-88.246561,44.585825],[-88.575177,44.591302],[-88.608039,44.591302],[-89.221456,44.678933],[-89.221456,45.029457],[-88.991425,45.029457]]]},"id":"55115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.555127,45.00755],[-72.577034,44.782995],[-72.675619,44.793949],[-72.922082,44.635118],[-73.22879,44.722749],[-73.190452,45.013027],[-72.555127,45.00755]]]},"id":"50011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.723995,44.996596],[-74.537779,44.098377],[-74.855442,44.070993],[-75.167627,44.098377],[-75.446951,44.21887],[-75.857722,44.405086],[-75.238827,44.865149],[-74.723995,44.996596]]]},"id":"36089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.503554,45.013027],[-71.766447,44.405086],[-71.837647,44.350317],[-71.941709,44.766564],[-71.897894,45.00755],[-71.503554,45.013027]]]},"id":"50009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.190452,45.013027],[-73.22879,44.722749],[-73.360237,44.563917],[-73.343806,45.013027],[-73.190452,45.013027]]]},"id":"50013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.343806,45.013027],[-73.360237,44.563917],[-73.338329,44.547487],[-73.907931,44.426994],[-74.028424,44.996596],[-73.343806,45.013027]]]},"id":"36019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.897894,45.00755],[-71.941709,44.766564],[-72.374388,44.585825],[-72.577034,44.782995],[-72.555127,45.00755],[-71.897894,45.00755]]]},"id":"50019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.798321,45.002073],[-108.620779,45.002073],[-108.549579,44.169578],[-108.549579,44.081947],[-109.310873,43.813577],[-110.055737,44.010746],[-110.3734,44.580348],[-111.058017,44.667979],[-111.041587,45.002073],[-109.798321,45.002073]]]},"id":"56029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.028424,44.996596],[-73.907931,44.426994],[-74.280363,44.120285],[-74.537779,44.098377],[-74.723995,44.996596],[-74.028424,44.996596]]]},"id":"36033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.914254,45.002073],[-107.372036,44.55844],[-107.147482,44.164101],[-108.549579,44.169578],[-108.620779,45.002073],[-108.248347,45.002073],[-107.914254,45.002073]]]},"id":"56003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.914254,45.002073],[-106.265695,44.991119],[-106.024709,44.991119],[-106.008278,44.563917],[-107.372036,44.55844],[-107.914254,45.002073]]]},"id":"56033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.024709,44.991119],[-105.088152,45.002073],[-105.077198,44.175055],[-105.077198,43.495914],[-106.019232,43.495914],[-106.008278,44.563917],[-106.024709,44.991119]]]},"id":"56005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.088152,45.002073],[-105.03886,45.002073],[-104.058488,44.996596],[-104.058488,44.569394],[-104.053011,44.180532],[-104.392581,44.180532],[-105.077198,44.175055],[-105.088152,45.002073]]]},"id":"56011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.676441,44.996596],[-118.51761,44.996596],[-118.243763,44.958257],[-118.495702,44.257209],[-118.232809,44.257209],[-118.227332,44.038131],[-118.468318,44.038131],[-119.656814,43.961454],[-119.656814,44.306501],[-119.673245,44.996596],[-119.163889,44.996596],[-118.676441,44.996596]]]},"id":"41023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.42046,44.859672],[-85.332828,44.81038],[-85.332828,44.514625],[-85.694307,44.514625],[-85.814799,44.514625],[-85.814799,44.772041],[-85.639537,44.777518],[-85.442367,44.859672],[-85.42046,44.859672]]]},"id":"26055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.254764,44.980165],[-94.013779,44.980165],[-94.008302,44.717272],[-94.134272,44.717272],[-94.49575,44.717272],[-94.49575,44.892534],[-94.501227,44.892534],[-94.254764,44.980165]]]},"id":"27085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.013779,44.980165],[-93.767317,44.980165],[-93.520854,44.804903],[-93.767317,44.640595],[-94.008302,44.717272],[-94.013779,44.980165]]]},"id":"27019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.451017,44.980165],[-96.451017,44.804903],[-96.451017,44.629641],[-96.451017,44.54201],[-96.883696,44.54201],[-96.883696,44.804903],[-96.883696,44.974688],[-96.451017,44.980165]]]},"id":"46039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.733538,44.930872],[-95.481599,44.75561],[-95.361106,44.700841],[-95.596615,44.54201],[-95.936185,44.629641],[-96.095016,44.629641],[-96.44554,44.629641],[-96.451017,44.629641],[-96.451017,44.804903],[-95.739015,44.936349],[-95.733538,44.930872]]]},"id":"27173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.088176,44.919919],[-93.016976,44.892534],[-92.803375,44.744656],[-92.732175,44.711795],[-93.038884,44.470809],[-93.279869,44.54201],[-93.329161,44.788472],[-93.175807,44.887057],[-93.088176,44.919919]]]},"id":"27037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.405368,44.898011],[-99.676935,44.898011],[-99.676935,44.547487],[-99.857674,44.547487],[-100.525861,44.547487],[-100.717554,44.772041],[-100.405368,44.898011]]]},"id":"46119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.572873,44.898011],[-99.30998,44.898011],[-99.299026,44.196962],[-99.57835,44.191485],[-99.665981,44.21887],[-99.676935,44.547487],[-99.676935,44.898011],[-99.572873,44.898011]]]},"id":"46069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.30998,44.898011],[-98.718471,44.898011],[-98.707517,44.635118],[-98.70204,44.196962],[-98.926594,44.196962],[-99.299026,44.196962],[-99.30998,44.898011]]]},"id":"46059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.49575,44.892534],[-94.49575,44.717272],[-94.621719,44.454379],[-94.780551,44.454379],[-94.851751,44.498194],[-94.868182,44.498194],[-95.295383,44.662502],[-95.361106,44.700841],[-95.481599,44.75561],[-95.246091,44.892534],[-94.758643,44.892534],[-94.501227,44.892534],[-94.49575,44.892534]]]},"id":"27129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-115.04523,44.750133],[-114.809722,44.81038],[-114.563259,44.574871],[-114.196304,44.859672],[-113.319994,44.235301],[-113.374763,43.8081],[-113.796488,43.567114],[-114.656367,43.917638],[-114.968553,43.939546],[-114.990461,43.9505],[-115.297169,44.339363],[-115.04523,44.750133]]]},"id":"16037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.600728,44.865149],[-92.135188,44.859672],[-92.135188,44.68441],[-92.315927,44.54201],[-92.732175,44.711795],[-92.803375,44.744656],[-92.770513,44.859672],[-92.600728,44.865149]]]},"id":"55093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.250674,44.859672],[-84.845381,44.859672],[-84.850858,44.509148],[-85.332828,44.514625],[-85.332828,44.81038],[-85.250674,44.859672]]]},"id":"26079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.547346,44.859672],[-83.322791,44.859672],[-83.317314,44.509148],[-83.886916,44.509148],[-83.886916,44.854195],[-83.547346,44.859672]]]},"id":"26001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.774181,44.859672],[-84.374364,44.854195],[-84.368887,44.509148],[-84.735842,44.509148],[-84.850858,44.509148],[-84.845381,44.859672],[-84.774181,44.859672]]]},"id":"26039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.499863,44.859672],[-90.924785,44.859672],[-90.924785,44.596779],[-91.16577,44.596779],[-91.286263,44.596779],[-91.527248,44.596779],[-91.647741,44.596779],[-91.647741,44.68441],[-91.653218,44.854195],[-91.499863,44.859672]]]},"id":"55035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.952639,44.854195],[-83.886916,44.854195],[-83.886916,44.509148],[-83.925255,44.509148],[-84.368887,44.509148],[-84.374364,44.854195],[-83.952639,44.854195]]]},"id":"26135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.901913,44.843241],[-116.299449,44.443425],[-116.452804,44.153147],[-116.896436,44.153147],[-117.219575,44.301024],[-116.901913,44.843241]]]},"id":"16087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.998664,44.821334],[-120.374293,44.821334],[-120.385247,44.563917],[-121.108203,44.388655],[-121.842113,44.394132],[-121.79282,44.68441],[-121.759959,44.826811],[-120.998664,44.821334]]]},"id":"41031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.433223,44.81038],[-93.329161,44.788472],[-93.279869,44.54201],[-93.301777,44.54201],[-93.526331,44.54201],[-93.701593,44.54201],[-93.909717,44.54201],[-93.767317,44.640595],[-93.520854,44.804903],[-93.433223,44.81038]]]},"id":"27139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.883696,44.804903],[-96.883696,44.54201],[-97.130158,44.54201],[-97.491636,44.54201],[-97.491636,44.804903],[-96.883696,44.804903]]]},"id":"46057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.675619,44.793949],[-72.577034,44.782995],[-72.374388,44.585825],[-72.434634,44.503671],[-72.807066,44.454379],[-72.922082,44.635118],[-72.675619,44.793949]]]},"id":"50015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.658177,44.777518],[-121.79282,44.68441],[-121.842113,44.394132],[-121.798297,44.257209],[-123.200394,44.284593],[-123.151102,44.722749],[-123.145625,44.750133],[-122.658177,44.777518]]]},"id":"41043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.717554,44.772041],[-100.525861,44.547487],[-99.939828,44.196962],[-100.224629,44.196962],[-100.36703,44.169578],[-101.013309,44.169578],[-101.04617,44.169578],[-101.139278,44.744656],[-100.717554,44.772041]]]},"id":"46117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.039354,44.777518],[-85.814799,44.772041],[-85.814799,44.514625],[-86.181754,44.520102],[-86.231047,44.520102],[-86.072215,44.777518],[-86.039354,44.777518]]]},"id":"26019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.941709,44.766564],[-71.837647,44.350317],[-72.040294,44.153147],[-72.368911,44.202439],[-72.42368,44.503671],[-72.434634,44.503671],[-72.374388,44.585825],[-71.941709,44.766564]]]},"id":"50005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.37568,44.750133],[-111.047063,44.476286],[-111.047063,43.983362],[-111.397588,43.923115],[-111.978143,43.928592],[-112.153405,44.060039],[-111.616665,44.547487],[-111.479742,44.711795],[-111.37568,44.750133]]]},"id":"16043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-69.471609,44.695364],[-69.268962,44.722749],[-68.814376,44.68441],[-68.797945,44.470809],[-69.027977,44.251732],[-69.411363,44.328409],[-69.504471,44.34484],[-69.471609,44.695364]]]},"id":"23027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.380264,44.657025],[-101.139278,44.744656],[-101.04617,44.169578],[-101.062601,43.994316],[-101.407648,43.994316],[-102.004635,43.994316],[-101.999158,44.509148],[-101.999158,44.509148],[-101.380264,44.657025]]]},"id":"46055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.22879,44.722749],[-72.922082,44.635118],[-72.807066,44.454379],[-72.954943,44.164101],[-73.22879,44.262686],[-73.310944,44.262686],[-73.338329,44.547487],[-73.360237,44.563917],[-73.22879,44.722749]]]},"id":"50007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.561872,44.722749],[-123.151102,44.722749],[-123.200394,44.284593],[-123.775473,44.284593],[-123.600211,44.722749],[-123.561872,44.722749]]]},"id":"41003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-69.581148,44.706318],[-69.471609,44.695364],[-69.504471,44.34484],[-69.75641,44.136716],[-70.002872,44.125762],[-70.128842,44.48724],[-69.931672,44.61321],[-69.581148,44.706318]]]},"id":"23011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.134272,44.717272],[-94.008302,44.717272],[-93.767317,44.640595],[-93.909717,44.54201],[-93.931625,44.454379],[-94.112364,44.454379],[-94.621719,44.454379],[-94.49575,44.717272],[-94.134272,44.717272]]]},"id":"27143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.732175,44.711795],[-92.315927,44.54201],[-92.244727,44.454379],[-92.430943,44.454379],[-92.551436,44.196962],[-92.666452,44.196962],[-92.677405,44.196962],[-92.918391,44.196962],[-93.038884,44.196962],[-93.038884,44.470809],[-92.732175,44.711795]]]},"id":"27049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.295383,44.662502],[-94.868182,44.498194],[-95.109167,44.196962],[-95.459691,44.196962],[-95.591138,44.196962],[-95.596615,44.54201],[-95.361106,44.700841],[-95.295383,44.662502]]]},"id":"27127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.347426,44.678933],[-89.221456,44.678933],[-89.226933,44.246255],[-89.599365,44.246255],[-89.725335,44.246255],[-89.845827,44.68441],[-89.347426,44.678933]]]},"id":"55097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.207305,44.68441],[-89.845827,44.68441],[-89.725335,44.246255],[-89.818443,44.251732],[-89.900597,44.251732],[-90.081336,44.246255],[-90.311367,44.246255],[-90.316844,44.426994],[-90.316844,44.68441],[-90.207305,44.68441]]]},"id":"55141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.894203,44.68441],[-91.647741,44.68441],[-91.647741,44.596779],[-92.085896,44.405086],[-92.244727,44.454379],[-92.315927,44.54201],[-92.135188,44.68441],[-91.894203,44.68441]]]},"id":"55091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.221456,44.678933],[-88.608039,44.591302],[-88.739485,44.240778],[-88.887363,44.240778],[-89.226933,44.246255],[-89.221456,44.678933]]]},"id":"55135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.235607,44.678933],[-87.989145,44.678933],[-87.76459,44.646072],[-87.76459,44.328409],[-87.885083,44.328409],[-88.043914,44.240778],[-88.191791,44.240778],[-88.246561,44.585825],[-88.241084,44.678933],[-88.235607,44.678933]]]},"id":"55009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.737205,44.678933],[-87.375727,44.673456],[-87.545512,44.328409],[-87.76459,44.328409],[-87.76459,44.646072],[-87.737205,44.678933]]]},"id":"55061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.058017,44.667979],[-110.3734,44.580348],[-110.055737,44.010746],[-110.05026,43.463052],[-110.576047,43.233021],[-111.047063,43.315175],[-111.047063,43.501391],[-111.047063,43.983362],[-111.047063,44.476286],[-111.058017,44.667979]]]},"id":"56039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.088623,44.629641],[-97.979084,44.629641],[-97.853114,44.54201],[-97.853114,44.196962],[-98.209115,44.196962],[-98.329608,44.196962],[-98.691086,44.196962],[-98.70204,44.196962],[-98.707517,44.635118],[-98.088623,44.629641]]]},"id":"46005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.44554,44.629641],[-96.095016,44.629641],[-96.078585,44.196962],[-96.242894,44.196962],[-96.451017,44.196962],[-96.451017,44.54201],[-96.451017,44.629641],[-96.44554,44.629641]]]},"id":"27081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.936185,44.629641],[-95.596615,44.54201],[-95.591138,44.196962],[-96.012862,44.196962],[-96.062155,44.196962],[-96.078585,44.196962],[-96.095016,44.629641],[-95.936185,44.629641]]]},"id":"27083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.812025,44.602256],[-103.565563,44.602256],[-103.450547,44.142193],[-104.053011,44.142193],[-104.053011,44.180532],[-104.058488,44.569394],[-103.812025,44.602256]]]},"id":"46081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.286263,44.596779],[-91.16577,44.596779],[-91.149339,44.081947],[-91.176724,44.087424],[-91.423186,43.983362],[-91.56011,44.027177],[-91.527248,44.596779],[-91.286263,44.596779]]]},"id":"55121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.16577,44.596779],[-90.924785,44.596779],[-90.316844,44.426994],[-90.311367,44.246255],[-90.311367,44.153147],[-90.492106,44.158624],[-90.974077,44.070993],[-91.149339,44.081947],[-91.16577,44.596779]]]},"id":"55053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.647741,44.596779],[-91.527248,44.596779],[-91.56011,44.027177],[-91.855864,44.191485],[-92.085896,44.405086],[-91.647741,44.596779]]]},"id":"55011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.575177,44.591302],[-88.246561,44.585825],[-88.191791,44.240778],[-88.405392,44.246255],[-88.471115,44.246255],[-88.739485,44.240778],[-88.608039,44.591302],[-88.575177,44.591302]]]},"id":"55087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.616665,44.547487],[-112.153405,44.060039],[-112.50393,44.060039],[-112.695623,43.972408],[-112.996854,44.235301],[-112.816115,44.377701],[-111.616665,44.547487]]]},"id":"16033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.008278,44.563917],[-106.019232,43.495914],[-106.079479,43.495914],[-107.109143,43.501391],[-107.147482,44.164101],[-107.372036,44.55844],[-106.008278,44.563917]]]},"id":"56019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.385247,44.563917],[-119.656814,44.306501],[-119.656814,43.961454],[-119.897799,43.698561],[-120.98771,43.961454],[-121.108203,44.388655],[-120.385247,44.563917]]]},"id":"41013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.857674,44.547487],[-99.676935,44.547487],[-99.665981,44.21887],[-99.939828,44.196962],[-100.525861,44.547487],[-99.857674,44.547487]]]},"id":"46065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.338329,44.547487],[-73.310944,44.262686],[-73.376668,43.8081],[-73.436914,43.802623],[-73.853161,43.764284],[-74.055808,43.742376],[-74.280363,44.120285],[-73.907931,44.426994],[-73.338329,44.547487]]]},"id":"36031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.732621,44.54201],[-97.491636,44.54201],[-97.130158,44.54201],[-97.130158,44.196962],[-97.217789,44.196962],[-97.371143,44.196962],[-97.727145,44.196962],[-97.847637,44.196962],[-97.853114,44.196962],[-97.853114,44.54201],[-97.732621,44.54201]]]},"id":"46077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.301777,44.54201],[-93.279869,44.54201],[-93.038884,44.470809],[-93.038884,44.196962],[-93.04436,44.196962],[-93.164853,44.196962],[-93.405839,44.196962],[-93.526331,44.196962],[-93.526331,44.54201],[-93.301777,44.54201]]]},"id":"27131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.451017,44.54201],[-96.451017,44.196962],[-96.648187,44.196962],[-96.889173,44.196962],[-97.130158,44.196962],[-97.130158,44.54201],[-96.883696,44.54201],[-96.451017,44.54201]]]},"id":"46011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.701593,44.54201],[-93.526331,44.54201],[-93.526331,44.196962],[-93.679686,44.196962],[-93.767317,44.196962],[-94.013779,44.240778],[-93.931625,44.454379],[-93.909717,44.54201],[-93.701593,44.54201]]]},"id":"27079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.181754,44.520102],[-85.814799,44.514625],[-85.820276,44.164101],[-86.044831,44.169578],[-86.384401,44.180532],[-86.231047,44.520102],[-86.181754,44.520102]]]},"id":"26101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.694307,44.514625],[-85.332828,44.514625],[-85.332828,44.164101],[-85.486183,44.164101],[-85.56286,44.164101],[-85.820276,44.164101],[-85.814799,44.514625],[-85.694307,44.514625]]]},"id":"26165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.332828,44.514625],[-84.850858,44.509148],[-84.850858,44.158624],[-85.086366,44.164101],[-85.332828,44.164101],[-85.332828,44.514625]]]},"id":"26113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.563777,44.164101],[-83.569254,44.164101],[-83.886916,44.164101],[-83.886916,44.509148],[-83.317314,44.509148],[-83.563777,44.164101]]]},"id":"26069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.735842,44.509148],[-84.368887,44.509148],[-84.368887,44.158624],[-84.609872,44.158624],[-84.850858,44.158624],[-84.850858,44.509148],[-84.735842,44.509148]]]},"id":"26143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.119651,44.437948],[-101.999158,44.509148],[-102.004635,43.994316],[-102.141558,43.698561],[-102.256574,43.687607],[-102.809745,43.687607],[-103.417686,43.857392],[-104.053011,43.851915],[-104.053011,44.142193],[-103.450547,44.142193],[-102.388021,44.142193],[-102.119651,44.437948]]]},"id":"46103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.925255,44.509148],[-83.886916,44.509148],[-83.886916,44.164101],[-84.16624,44.164101],[-84.248394,44.164101],[-84.368887,44.158624],[-84.368887,44.509148],[-83.925255,44.509148]]]},"id":"26129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.42368,44.503671],[-72.368911,44.202439],[-72.434634,44.153147],[-72.741343,44.027177],[-72.954943,44.164101],[-72.807066,44.454379],[-72.434634,44.503671],[-72.42368,44.503671]]]},"id":"50023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.157049,44.498194],[-116.211818,44.153147],[-116.283018,43.8081],[-116.51305,43.8081],[-116.71022,43.8081],[-116.452804,44.153147],[-116.299449,44.443425],[-116.157049,44.498194]]]},"id":"16045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.851751,44.498194],[-94.780551,44.454379],[-94.36978,44.262686],[-94.36978,44.109331],[-94.490273,44.109331],[-94.857228,44.109331],[-95.109167,44.196962],[-94.868182,44.498194],[-94.851751,44.498194]]]},"id":"27015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.172658,44.481763],[-70.128842,44.48724],[-70.002872,44.125762],[-70.035734,43.977885],[-70.479366,44.032654],[-70.238381,44.459856],[-70.172658,44.481763]]]},"id":"23001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.112364,44.454379],[-93.931625,44.454379],[-94.013779,44.240778],[-94.331441,44.251732],[-94.36978,44.262686],[-94.780551,44.454379],[-94.621719,44.454379],[-94.112364,44.454379]]]},"id":"27103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.430943,44.454379],[-92.244727,44.454379],[-92.085896,44.405086],[-91.855864,44.191485],[-92.069465,44.191485],[-92.080419,44.109331],[-92.551436,44.196962],[-92.430943,44.454379]]]},"id":"27157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.608438,44.443425],[-117.219575,44.301024],[-116.896436,44.153147],[-116.97859,43.8793],[-117.027882,43.68213],[-117.027882,42.000709],[-118.194471,41.995232],[-118.227332,44.038131],[-118.232809,44.257209],[-117.608438,44.443425]]]},"id":"41045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.837647,44.350317],[-71.766447,44.405086],[-71.415923,44.213393],[-71.530939,43.764284],[-71.728109,43.561637],[-71.81574,43.545207],[-71.936232,43.528776],[-72.330572,43.599976],[-72.204602,43.769761],[-72.040294,44.153147],[-71.837647,44.350317]]]},"id":"33009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.857722,44.405086],[-75.446951,44.21887],[-75.775568,43.687607],[-76.087753,43.671176],[-76.202769,43.68213],[-76.312308,44.196962],[-75.857722,44.405086]]]},"id":"36045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.108203,44.388655],[-120.98771,43.961454],[-119.897799,43.698561],[-119.897799,43.61093],[-121.130111,43.616407],[-121.332757,43.616407],[-121.486112,43.616407],[-122.000944,43.616407],[-121.798297,44.257209],[-121.842113,44.394132],[-121.108203,44.388655]]]},"id":"41017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-69.411363,44.328409],[-69.027977,44.251732],[-69.373024,43.966931],[-69.411363,44.328409]]]},"id":"23013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-115.680555,44.235301],[-115.297169,44.339363],[-114.990461,43.9505],[-115.1712,44.087424],[-115.97631,43.589022],[-116.283018,43.8081],[-116.211818,44.153147],[-115.680555,44.235301]]]},"id":"16015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-69.411363,44.328409],[-69.373024,43.966931],[-69.696164,43.82453],[-69.75641,44.136716],[-69.504471,44.34484],[-69.411363,44.328409]]]},"id":"23015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.885083,44.328409],[-87.76459,44.328409],[-87.545512,44.328409],[-87.731728,43.890254],[-87.770067,43.890254],[-88.043914,43.890254],[-88.043914,44.240778],[-87.885083,44.328409]]]},"id":"55071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.22879,44.262686],[-72.954943,44.164101],[-72.741343,44.027177],[-72.790635,43.961454],[-72.96042,43.82453],[-73.365714,43.75333],[-73.376668,43.8081],[-73.310944,44.262686],[-73.22879,44.262686]]]},"id":"50001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.010981,44.279117],[-123.775473,44.284593],[-123.200394,44.284593],[-121.798297,44.257209],[-122.000944,43.616407],[-122.132391,43.441145],[-123.107286,43.53973],[-123.140148,43.780715],[-123.824765,43.945023],[-124.158859,43.862869],[-124.115043,44.27364],[-124.010981,44.279117]]]},"id":"41039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.010629,44.284593],[-70.988722,43.791669],[-70.961337,43.53973],[-71.109214,43.506868],[-71.163984,43.53973],[-71.530939,43.764284],[-71.415923,44.213393],[-71.010629,44.284593]]]},"id":"33003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.331441,44.251732],[-94.013779,44.240778],[-93.767317,44.196962],[-93.767317,43.846438],[-93.893286,43.846438],[-94.249287,43.846438],[-94.36978,43.846438],[-94.36978,44.109331],[-94.36978,44.262686],[-94.331441,44.251732]]]},"id":"27013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.818443,44.251732],[-89.725335,44.246255],[-89.599365,44.246255],[-89.599365,43.983362],[-89.599365,43.643791],[-89.785581,43.638314],[-89.900597,44.251732],[-89.818443,44.251732]]]},"id":"55001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.081336,44.246255],[-89.900597,44.251732],[-89.785581,43.638314],[-90.294936,43.643791],[-90.311367,43.638314],[-90.311367,43.731422],[-90.311367,44.153147],[-90.311367,44.246255],[-90.081336,44.246255]]]},"id":"55057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.599365,44.246255],[-89.226933,44.246255],[-88.887363,44.240778],[-88.887363,43.983362],[-88.936655,43.983362],[-89.166687,43.983362],[-89.599365,43.983362],[-89.599365,44.246255]]]},"id":"55137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.471115,44.246255],[-88.405392,44.246255],[-88.405392,43.939546],[-88.887363,43.895731],[-88.887363,43.983362],[-88.887363,44.240778],[-88.739485,44.240778],[-88.471115,44.246255]]]},"id":"55139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.405392,44.246255],[-88.191791,44.240778],[-88.043914,44.240778],[-88.043914,43.890254],[-88.164407,43.890254],[-88.405392,43.939546],[-88.405392,44.246255]]]},"id":"55015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.002331,44.235301],[-112.996854,44.235301],[-112.695623,43.972408],[-112.695623,43.621884],[-113.007808,43.282313],[-113.796488,43.567114],[-113.374763,43.8081],[-113.319994,44.235301],[-113.002331,44.235301]]]},"id":"16023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.434634,44.153147],[-72.368911,44.202439],[-72.040294,44.153147],[-72.204602,43.769761],[-72.790635,43.961454],[-72.741343,44.027177],[-72.434634,44.153147]]]},"id":"50017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.446951,44.21887],[-75.167627,44.098377],[-75.112858,43.616407],[-75.75366,43.468529],[-75.775568,43.687607],[-75.446951,44.21887]]]},"id":"36049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.224629,44.196962],[-99.939828,44.196962],[-99.665981,44.21887],[-99.57835,44.191485],[-99.353796,43.934069],[-99.299026,43.501391],[-99.299026,43.501391],[-99.534535,43.501391],[-99.665981,43.75333],[-100.230106,43.714992],[-100.339645,43.714992],[-100.36703,44.169578],[-100.224629,44.196962]]]},"id":"46085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.242894,44.196962],[-96.078585,44.196962],[-96.062155,44.196962],[-96.062155,43.846438],[-96.451017,43.851915],[-96.451017,44.196962],[-96.242894,44.196962]]]},"id":"27117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.918391,44.196962],[-92.677405,44.196962],[-92.688359,43.846438],[-92.880052,43.846438],[-93.04436,43.846438],[-93.04436,44.196962],[-93.038884,44.196962],[-92.918391,44.196962]]]},"id":"27039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.648187,44.196962],[-96.451017,44.196962],[-96.451017,43.851915],[-96.489356,43.846438],[-96.889173,43.846438],[-96.889173,44.196962],[-96.648187,44.196962]]]},"id":"46101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.691086,44.196962],[-98.329608,44.196962],[-98.329608,43.939546],[-98.806102,43.934069],[-98.926594,43.934069],[-98.926594,44.196962],[-98.70204,44.196962],[-98.691086,44.196962]]]},"id":"46073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.209115,44.196962],[-97.853114,44.196962],[-97.847637,44.196962],[-97.853114,43.851915],[-97.96813,43.851915],[-98.203638,43.851915],[-98.324131,43.851915],[-98.329608,43.939546],[-98.329608,44.196962],[-98.209115,44.196962]]]},"id":"46111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.926594,44.196962],[-98.926594,43.934069],[-99.353796,43.934069],[-99.57835,44.191485],[-99.299026,44.196962],[-98.926594,44.196962]]]},"id":"46017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.012862,44.196962],[-95.591138,44.196962],[-95.459691,44.196962],[-95.465168,43.846438],[-96.051201,43.846438],[-96.062155,43.846438],[-96.062155,44.196962],[-96.012862,44.196962]]]},"id":"27101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.164853,44.196962],[-93.04436,44.196962],[-93.04436,43.846438],[-93.049837,43.846438],[-93.164853,43.846438],[-93.405839,43.846438],[-93.405839,44.196962],[-93.164853,44.196962]]]},"id":"27147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.679686,44.196962],[-93.526331,44.196962],[-93.405839,44.196962],[-93.405839,43.846438],[-93.646824,43.846438],[-93.767317,43.846438],[-93.767317,44.196962],[-93.679686,44.196962]]]},"id":"27161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.459691,44.196962],[-95.109167,44.196962],[-94.857228,44.109331],[-94.857228,43.846438],[-95.114644,43.846438],[-95.454214,43.846438],[-95.465168,43.846438],[-95.459691,44.196962]]]},"id":"27033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.217789,44.196962],[-97.130158,44.196962],[-96.889173,44.196962],[-96.889173,43.846438],[-97.130158,43.846438],[-97.371143,43.846438],[-97.371143,44.196962],[-97.217789,44.196962]]]},"id":"46079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.666452,44.196962],[-92.551436,44.196962],[-92.080419,44.109331],[-92.080419,43.846438],[-92.381651,43.846438],[-92.447374,43.835484],[-92.688359,43.846438],[-92.677405,44.196962],[-92.666452,44.196962]]]},"id":"27109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.727145,44.196962],[-97.371143,44.196962],[-97.371143,43.846438],[-97.491636,43.846438],[-97.606652,43.846438],[-97.853114,43.851915],[-97.847637,44.196962],[-97.727145,44.196962]]]},"id":"46097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.069465,44.191485],[-91.855864,44.191485],[-91.56011,44.027177],[-91.423186,43.983362],[-91.286263,43.846438],[-91.373894,43.846438],[-91.729895,43.846438],[-92.080419,43.846438],[-92.080419,44.109331],[-92.069465,44.191485]]]},"id":"27169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.392581,44.180532],[-104.053011,44.180532],[-104.053011,44.142193],[-104.053011,43.851915],[-104.053011,43.501391],[-104.901936,43.501391],[-105.077198,43.495914],[-105.077198,44.175055],[-104.392581,44.180532]]]},"id":"56045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.384401,44.180532],[-86.044831,44.169578],[-86.039354,43.813577],[-86.433693,43.819054],[-86.384401,44.180532]]]},"id":"26105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.676536,44.142193],[-70.479366,44.032654],[-70.035734,43.977885],[-69.887857,43.775238],[-70.353397,43.534253],[-70.780598,43.813577],[-70.676536,44.142193]]]},"id":"23005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.013309,44.169578],[-100.36703,44.169578],[-100.339645,43.714992],[-101.062601,43.840961],[-101.062601,43.994316],[-101.04617,44.169578],[-101.013309,44.169578]]]},"id":"46075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.147482,44.164101],[-107.109143,43.501391],[-107.536345,43.501391],[-107.596591,43.501391],[-108.527671,44.081947],[-108.549579,44.081947],[-108.549579,44.169578],[-107.147482,44.164101]]]},"id":"56043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.044831,44.169578],[-85.820276,44.164101],[-85.56286,44.164101],[-85.56286,43.813577],[-85.63406,43.813577],[-86.039354,43.813577],[-86.044831,44.169578]]]},"id":"26085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-69.75641,44.136716],[-69.696164,43.82453],[-69.887857,43.775238],[-70.035734,43.977885],[-70.002872,44.125762],[-69.75641,44.136716]]]},"id":"23023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.486183,44.164101],[-85.332828,44.164101],[-85.086366,44.164101],[-85.086366,43.813577],[-85.540952,43.813577],[-85.56286,43.813577],[-85.56286,44.164101],[-85.486183,44.164101]]]},"id":"26133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.086366,44.164101],[-84.850858,44.158624],[-84.609872,44.158624],[-84.604395,43.813577],[-84.752273,43.813577],[-85.086366,43.813577],[-85.086366,44.164101]]]},"id":"26035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.569254,44.164101],[-83.563777,44.164101],[-83.908824,43.912162],[-84.105994,43.999793],[-84.16624,43.994316],[-84.16624,44.164101],[-83.886916,44.164101],[-83.569254,44.164101]]]},"id":"26011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.248394,44.164101],[-84.16624,44.164101],[-84.16624,43.994316],[-84.16624,43.82453],[-84.368887,43.830007],[-84.604395,43.813577],[-84.609872,44.158624],[-84.368887,44.158624],[-84.248394,44.164101]]]},"id":"26051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.492106,44.158624],[-90.311367,44.153147],[-90.311367,43.731422],[-90.908354,43.725946],[-90.974077,44.070993],[-90.492106,44.158624]]]},"id":"55081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.452804,44.153147],[-116.71022,43.8081],[-116.97859,43.8793],[-116.896436,44.153147],[-116.452804,44.153147]]]},"id":"16075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.280363,44.120285],[-74.055808,43.742376],[-74.15987,43.369944],[-74.137962,43.254929],[-74.713041,43.28779],[-74.855442,44.070993],[-74.537779,44.098377],[-74.280363,44.120285]]]},"id":"36041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.490273,44.109331],[-94.36978,44.109331],[-94.36978,43.846438],[-94.616242,43.846438],[-94.851751,43.846438],[-94.857228,43.846438],[-94.857228,44.109331],[-94.490273,44.109331]]]},"id":"27165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.990461,43.9505],[-114.968553,43.939546],[-114.990461,43.857392],[-115.089045,43.200159],[-115.039753,42.909881],[-115.039753,42.767481],[-116.266588,43.112528],[-115.97631,43.589022],[-115.1712,44.087424],[-114.990461,43.9505]]]},"id":"16039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.167627,44.098377],[-74.855442,44.070993],[-74.713041,43.28779],[-74.762334,43.046805],[-74.762334,42.860589],[-75.096427,42.904404],[-75.211443,42.882497],[-75.112858,43.616407],[-75.167627,44.098377]]]},"id":"36043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.176724,44.087424],[-91.149339,44.081947],[-90.974077,44.070993],[-90.908354,43.725946],[-91.258878,43.725946],[-91.286263,43.846438],[-91.423186,43.983362],[-91.176724,44.087424]]]},"id":"55063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.527671,44.081947],[-107.596591,43.501391],[-108.335978,43.457575],[-109.310873,43.813577],[-108.549579,44.081947],[-108.527671,44.081947]]]},"id":"56017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.605312,43.693084],[-82.69842,43.687607],[-83.120145,43.676653],[-83.465192,43.725946],[-83.465192,43.731422],[-82.917498,44.070993],[-82.605312,43.693084]]]},"id":"26063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.50393,44.060039],[-112.153405,44.060039],[-111.978143,43.928592],[-111.627619,43.627361],[-111.775497,43.627361],[-112.52036,43.627361],[-112.695623,43.621884],[-112.695623,43.972408],[-112.50393,44.060039]]]},"id":"16051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.468318,44.038131],[-118.227332,44.038131],[-118.194471,41.995232],[-119.32272,41.995232],[-119.361059,41.995232],[-119.366536,42.75105],[-119.941615,42.745573],[-119.897799,43.61093],[-119.897799,43.698561],[-119.656814,43.961454],[-118.468318,44.038131]]]},"id":"41025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.055737,44.010746],[-109.310873,43.813577],[-108.335978,43.457575],[-107.596591,43.501391],[-107.536345,43.501391],[-107.525391,42.433388],[-107.525391,42.263602],[-109.042503,42.263602],[-109.075365,42.690804],[-110.05026,43.463052],[-110.055737,44.010746]]]},"id":"56013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.105994,43.999793],[-83.908824,43.912162],[-83.7007,43.594499],[-83.7007,43.479483],[-84.138855,43.567114],[-84.16624,43.567114],[-84.16624,43.82453],[-84.16624,43.994316],[-84.105994,43.999793]]]},"id":"26017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.407648,43.994316],[-101.062601,43.994316],[-101.062601,43.840961],[-101.226909,43.391852],[-101.900573,43.391852],[-102.108697,43.391852],[-102.141558,43.698561],[-102.004635,43.994316],[-101.407648,43.994316]]]},"id":"46071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.656367,43.917638],[-113.796488,43.567114],[-113.007808,43.282313],[-113.007808,43.112528],[-113.23784,42.625081],[-113.473348,42.668896],[-113.413102,43.200159],[-113.714333,43.200159],[-114.377043,43.200159],[-114.716614,43.813577],[-114.990461,43.857392],[-114.968553,43.939546],[-114.656367,43.917638]]]},"id":"16013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.047063,43.983362],[-111.047063,43.501391],[-111.397588,43.621884],[-111.397588,43.923115],[-111.047063,43.983362]]]},"id":"16081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.936655,43.983362],[-88.887363,43.983362],[-88.887363,43.895731],[-88.887363,43.632838],[-89.007855,43.632838],[-89.243364,43.643791],[-89.166687,43.983362],[-88.936655,43.983362]]]},"id":"55047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.166687,43.983362],[-89.243364,43.643791],[-89.599365,43.643791],[-89.599365,43.983362],[-89.166687,43.983362]]]},"id":"55077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.790635,43.961454],[-72.204602,43.769761],[-72.330572,43.599976],[-72.434634,43.233021],[-72.81802,43.254929],[-72.867312,43.298744],[-72.96042,43.82453],[-72.790635,43.961454]]]},"id":"50027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.824765,43.945023],[-123.140148,43.780715],[-123.107286,43.53973],[-122.132391,43.441145],[-122.280268,42.997512],[-123.227779,42.701758],[-123.715227,42.783912],[-123.813811,42.789389],[-123.874058,43.61093],[-124.147905,43.61093],[-124.219105,43.61093],[-124.158859,43.862869],[-123.824765,43.945023]]]},"id":"41019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.405392,43.939546],[-88.164407,43.890254],[-88.15893,43.545207],[-88.399915,43.545207],[-88.887363,43.632838],[-88.887363,43.895731],[-88.405392,43.939546]]]},"id":"55039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.329608,43.939546],[-98.324131,43.851915],[-98.318654,43.501391],[-98.685609,43.501391],[-98.707517,43.501391],[-98.795148,43.501391],[-98.806102,43.934069],[-98.329608,43.939546]]]},"id":"46003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.806102,43.934069],[-98.795148,43.501391],[-99.299026,43.501391],[-99.353796,43.934069],[-98.926594,43.934069],[-98.806102,43.934069]]]},"id":"46015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.978143,43.928592],[-111.397588,43.923115],[-111.397588,43.621884],[-111.627619,43.627361],[-111.978143,43.928592]]]},"id":"16065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.770067,43.890254],[-87.731728,43.890254],[-87.791975,43.545207],[-87.923421,43.545207],[-88.038437,43.53973],[-88.15893,43.545207],[-88.164407,43.890254],[-88.043914,43.890254],[-87.770067,43.890254]]]},"id":"55117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.97859,43.8793],[-116.71022,43.8081],[-116.51305,43.8081],[-116.51305,43.28779],[-116.989544,43.671176],[-117.027882,43.68213],[-116.97859,43.8793]]]},"id":"16027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.990461,43.857392],[-114.716614,43.813577],[-114.377043,43.200159],[-114.596121,43.200159],[-114.875445,43.200159],[-115.089045,43.200159],[-114.990461,43.857392]]]},"id":"16025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.365714,43.75333],[-72.96042,43.82453],[-72.867312,43.298744],[-73.256175,43.315175],[-73.365714,43.75333]]]},"id":"50021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.062601,43.840961],[-100.339645,43.714992],[-100.230106,43.714992],[-100.213675,43.391852],[-100.235583,43.391852],[-101.226909,43.391852],[-101.062601,43.840961]]]},"id":"46095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.417686,43.857392],[-102.809745,43.687607],[-103.001438,43.479483],[-103.937995,43.479483],[-104.053011,43.479483],[-104.053011,43.501391],[-104.053011,43.851915],[-103.417686,43.857392]]]},"id":"46033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.203638,43.851915],[-97.96813,43.851915],[-97.962653,43.501391],[-98.116007,43.495914],[-98.318654,43.501391],[-98.324131,43.851915],[-98.203638,43.851915]]]},"id":"46035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.853114,43.851915],[-97.606652,43.846438],[-97.606652,43.501391],[-97.962653,43.501391],[-97.96813,43.851915],[-97.853114,43.851915]]]},"id":"46061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.489356,43.846438],[-96.451017,43.851915],[-96.451017,43.501391],[-96.598895,43.501391],[-96.779634,43.501391],[-96.922034,43.501391],[-97.130158,43.501391],[-97.130158,43.846438],[-96.889173,43.846438],[-96.489356,43.846438]]]},"id":"46099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.451017,43.851915],[-96.062155,43.846438],[-96.051201,43.846438],[-96.051201,43.501391],[-96.451017,43.501391],[-96.451017,43.851915]]]},"id":"27133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.051201,43.846438],[-95.465168,43.846438],[-95.454214,43.846438],[-95.454214,43.501391],[-95.859508,43.501391],[-96.051201,43.501391],[-96.051201,43.846438]]]},"id":"27105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.491636,43.846438],[-97.371143,43.846438],[-97.130158,43.846438],[-97.130158,43.501391],[-97.404005,43.501391],[-97.606652,43.501391],[-97.606652,43.846438],[-97.491636,43.846438]]]},"id":"46087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.880052,43.846438],[-92.688359,43.846438],[-92.447374,43.835484],[-92.447374,43.501391],[-92.551436,43.501391],[-93.022453,43.501391],[-93.049837,43.501391],[-93.049837,43.846438],[-93.04436,43.846438],[-92.880052,43.846438]]]},"id":"27099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.164853,43.846438],[-93.049837,43.846438],[-93.049837,43.501391],[-93.498947,43.501391],[-93.646824,43.501391],[-93.646824,43.846438],[-93.405839,43.846438],[-93.164853,43.846438]]]},"id":"27047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.381651,43.846438],[-92.080419,43.846438],[-91.729895,43.846438],[-91.729895,43.501391],[-91.850387,43.501391],[-92.080419,43.501391],[-92.447374,43.501391],[-92.447374,43.835484],[-92.381651,43.846438]]]},"id":"27045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.893286,43.846438],[-93.767317,43.846438],[-93.646824,43.846438],[-93.646824,43.501391],[-93.969963,43.501391],[-94.249287,43.501391],[-94.249287,43.846438],[-93.893286,43.846438]]]},"id":"27043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.114644,43.846438],[-94.857228,43.846438],[-94.851751,43.846438],[-94.851751,43.501391],[-94.917474,43.501391],[-95.092736,43.501391],[-95.388491,43.501391],[-95.454214,43.501391],[-95.454214,43.846438],[-95.114644,43.846438]]]},"id":"27063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.616242,43.846438],[-94.36978,43.846438],[-94.249287,43.846438],[-94.249287,43.501391],[-94.44098,43.501391],[-94.676489,43.501391],[-94.851751,43.501391],[-94.851751,43.846438],[-94.616242,43.846438]]]},"id":"27091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.373894,43.846438],[-91.286263,43.846438],[-91.258878,43.725946],[-91.215062,43.501391],[-91.368417,43.501391],[-91.609402,43.501391],[-91.729895,43.501391],[-91.729895,43.846438],[-91.373894,43.846438]]]},"id":"27055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.368887,43.830007],[-84.16624,43.82453],[-84.16624,43.567114],[-84.368887,43.468529],[-84.609872,43.468529],[-84.604395,43.813577],[-84.368887,43.830007]]]},"id":"26111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.433693,43.819054],[-86.039354,43.813577],[-86.039354,43.468529],[-86.411786,43.474006],[-86.461078,43.474006],[-86.433693,43.819054]]]},"id":"26127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.63406,43.813577],[-85.56286,43.813577],[-85.56286,43.468529],[-85.56286,43.293267],[-85.792891,43.293267],[-86.039354,43.468529],[-86.039354,43.813577],[-85.63406,43.813577]]]},"id":"26123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.540952,43.813577],[-85.086366,43.813577],[-85.086366,43.468529],[-85.551906,43.468529],[-85.56286,43.468529],[-85.56286,43.813577],[-85.540952,43.813577]]]},"id":"26107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.752273,43.813577],[-84.604395,43.813577],[-84.609872,43.468529],[-84.774181,43.468529],[-84.845381,43.468529],[-85.086366,43.468529],[-85.086366,43.813577],[-84.752273,43.813577]]]},"id":"26073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.780598,43.813577],[-70.353397,43.534253],[-70.703921,43.057759],[-70.818936,43.123482],[-70.961337,43.53973],[-70.988722,43.791669],[-70.780598,43.813577]]]},"id":"23031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.376668,43.8081],[-73.365714,43.75333],[-73.256175,43.315175],[-73.272606,42.942743],[-73.387622,42.94822],[-73.634084,42.942743],[-73.595745,43.304221],[-73.436914,43.802623],[-73.376668,43.8081]]]},"id":"36115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.51305,43.8081],[-116.283018,43.8081],[-115.97631,43.589022],[-116.266588,43.112528],[-116.51305,43.28779],[-116.51305,43.8081]]]},"id":"16001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.853161,43.764284],[-73.436914,43.802623],[-73.595745,43.304221],[-73.886023,43.397329],[-74.15987,43.369944],[-74.055808,43.742376],[-73.853161,43.764284]]]},"id":"36113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.665981,43.75333],[-99.534535,43.501391],[-99.534535,42.997512],[-100.126044,42.997512],[-100.197245,42.997512],[-100.213675,43.391852],[-100.230106,43.714992],[-99.665981,43.75333]]]},"id":"46123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.530939,43.764284],[-71.163984,43.53973],[-71.235184,43.282313],[-71.728109,43.561637],[-71.530939,43.764284]]]},"id":"33001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.311367,43.731422],[-90.311367,43.638314],[-90.311367,43.55616],[-90.667368,43.424714],[-90.9686,43.424714],[-91.204109,43.424714],[-91.215062,43.501391],[-91.258878,43.725946],[-90.908354,43.725946],[-90.311367,43.731422]]]},"id":"55123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.465192,43.725946],[-83.120145,43.676653],[-83.120145,43.326129],[-83.191345,43.326129],[-83.459715,43.222067],[-83.465192,43.222067],[-83.695223,43.222067],[-83.7007,43.479483],[-83.7007,43.594499],[-83.465192,43.731422],[-83.465192,43.725946]]]},"id":"26157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.087753,43.671176],[-75.775568,43.687607],[-75.75366,43.468529],[-75.885106,43.156344],[-75.994645,43.183728],[-76.169907,43.249452],[-76.476616,43.227544],[-76.619016,43.419237],[-76.202769,43.68213],[-76.087753,43.671176]]]},"id":"36075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.256574,43.687607],[-102.141558,43.698561],[-102.108697,43.391852],[-102.081312,42.997512],[-102.081312,42.997512],[-102.793314,42.997512],[-103.001438,43.002989],[-103.001438,43.479483],[-102.809745,43.687607],[-102.256574,43.687607]]]},"id":"46113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.69842,43.687607],[-82.605312,43.693084],[-82.50125,43.167298],[-82.566974,43.167298],[-82.994175,43.156344],[-83.120145,43.326129],[-83.120145,43.676653],[-82.69842,43.687607]]]},"id":"26151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.989544,43.671176],[-116.51305,43.28779],[-116.266588,43.112528],[-115.039753,42.767481],[-115.039753,41.995232],[-117.016928,42.000709],[-117.027882,42.000709],[-117.027882,43.68213],[-116.989544,43.671176]]]},"id":"16073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.243364,43.643791],[-89.007855,43.632838],[-89.007855,43.282313],[-89.413149,43.293267],[-89.719858,43.293267],[-89.785581,43.638314],[-89.599365,43.643791],[-89.243364,43.643791]]]},"id":"55021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.294936,43.643791],[-89.785581,43.638314],[-89.719858,43.293267],[-89.84035,43.205636],[-90.196352,43.161821],[-90.190875,43.55616],[-90.311367,43.55616],[-90.311367,43.638314],[-90.294936,43.643791]]]},"id":"55111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.887363,43.632838],[-88.399915,43.545207],[-88.416346,43.194682],[-88.536839,43.194682],[-88.991425,43.200159],[-89.007855,43.200159],[-89.007855,43.282313],[-89.007855,43.632838],[-88.887363,43.632838]]]},"id":"55027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.775497,43.627361],[-111.627619,43.627361],[-111.397588,43.621884],[-111.047063,43.501391],[-111.047063,43.315175],[-111.041587,43.01942],[-111.589281,43.01942],[-111.589281,43.282313],[-112.52036,43.424714],[-112.52036,43.627361],[-111.775497,43.627361]]]},"id":"16019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.695623,43.621884],[-112.52036,43.627361],[-112.52036,43.424714],[-111.589281,43.282313],[-111.589281,43.01942],[-112.065774,43.024897],[-112.388914,43.01942],[-112.750392,42.953697],[-113.007808,43.112528],[-113.007808,43.282313],[-112.695623,43.621884]]]},"id":"16011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.130111,43.616407],[-119.897799,43.61093],[-119.941615,42.745573],[-119.366536,42.75105],[-119.361059,41.995232],[-120.001861,41.995232],[-120.878171,41.995232],[-120.883648,42.745573],[-121.349188,42.745573],[-121.332757,43.616407],[-121.130111,43.616407]]]},"id":"41037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.486112,43.616407],[-121.332757,43.616407],[-121.349188,42.745573],[-120.883648,42.745573],[-120.878171,41.995232],[-121.316327,41.995232],[-121.447773,41.995232],[-122.291222,42.006186],[-122.280268,42.992036],[-122.280268,42.997512],[-122.132391,43.441145],[-122.000944,43.616407],[-121.486112,43.616407]]]},"id":"41035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.112858,43.616407],[-75.211443,42.882497],[-75.249781,42.871543],[-75.885106,43.156344],[-75.75366,43.468529],[-75.112858,43.616407]]]},"id":"36065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.81574,43.545207],[-71.728109,43.561637],[-71.235184,43.282313],[-71.246138,43.276836],[-71.394015,43.008466],[-71.914325,43.205636],[-72.007433,43.189205],[-71.936232,43.528776],[-71.81574,43.545207]]]},"id":"33013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.147905,43.61093],[-123.874058,43.61093],[-123.813811,42.789389],[-124.295782,42.953697],[-124.481998,42.953697],[-124.219105,43.61093],[-124.147905,43.61093]]]},"id":"41011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.330572,43.599976],[-71.936232,43.528776],[-72.007433,43.189205],[-72.040294,43.128959],[-72.199125,43.178252],[-72.451065,43.161821],[-72.434634,43.233021],[-72.330572,43.599976]]]},"id":"33019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.109214,43.506868],[-70.961337,43.53973],[-70.818936,43.123482],[-71.246138,43.276836],[-71.235184,43.282313],[-71.163984,43.53973],[-71.109214,43.506868]]]},"id":"33017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.138855,43.567114],[-83.7007,43.479483],[-83.695223,43.222067],[-83.930732,43.134436],[-83.941686,43.134436],[-84.368887,43.128959],[-84.368887,43.468529],[-84.16624,43.567114],[-84.138855,43.567114]]]},"id":"26145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.190875,43.55616],[-90.196352,43.161821],[-90.294936,43.205636],[-90.43186,43.200159],[-90.552353,43.205636],[-90.667368,43.172775],[-90.667368,43.424714],[-90.311367,43.55616],[-90.190875,43.55616]]]},"id":"55103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.399915,43.545207],[-88.15893,43.545207],[-88.038437,43.53973],[-88.065822,43.194682],[-88.416346,43.194682],[-88.399915,43.545207]]]},"id":"55131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.923421,43.545207],[-87.791975,43.545207],[-87.89056,43.194682],[-87.972714,43.194682],[-88.065822,43.194682],[-88.038437,43.53973],[-87.923421,43.545207]]]},"id":"55089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.053011,43.501391],[-104.053011,43.479483],[-104.053011,43.002989],[-104.053011,42.614127],[-104.655474,42.60865],[-104.890983,42.60865],[-104.901936,43.501391],[-104.053011,43.501391]]]},"id":"56027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.536345,43.501391],[-107.109143,43.501391],[-106.079479,43.495914],[-106.074002,42.433388],[-107.037943,42.433388],[-107.525391,42.433388],[-107.536345,43.501391]]]},"id":"56025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.092736,43.501391],[-94.917474,43.501391],[-94.911997,43.254929],[-95.169413,43.254929],[-95.388491,43.254929],[-95.388491,43.501391],[-95.092736,43.501391]]]},"id":"19059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.368417,43.501391],[-91.215062,43.501391],[-91.204109,43.424714],[-91.176724,43.079667],[-91.565587,43.079667],[-91.603925,43.079667],[-91.609402,43.501391],[-91.368417,43.501391]]]},"id":"19005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.850387,43.501391],[-91.729895,43.501391],[-91.609402,43.501391],[-91.603925,43.079667],[-92.080419,43.085144],[-92.080419,43.211113],[-92.080419,43.501391],[-91.850387,43.501391]]]},"id":"19191"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.080419,43.501391],[-92.080419,43.211113],[-92.255681,43.211113],[-92.556913,43.211113],[-92.551436,43.501391],[-92.447374,43.501391],[-92.080419,43.501391]]]},"id":"19089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.454214,43.501391],[-95.388491,43.501391],[-95.388491,43.254929],[-95.574707,43.254929],[-95.859508,43.254929],[-95.859508,43.501391],[-95.454214,43.501391]]]},"id":"19143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.676489,43.501391],[-94.44098,43.501391],[-94.44098,43.254929],[-94.588858,43.254929],[-94.911997,43.254929],[-94.917474,43.501391],[-94.851751,43.501391],[-94.676489,43.501391]]]},"id":"19063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.249287,43.501391],[-93.969963,43.501391],[-93.969963,43.254929],[-93.969963,42.909881],[-94.090456,42.909881],[-94.44098,42.909881],[-94.44098,43.254929],[-94.44098,43.501391],[-94.249287,43.501391]]]},"id":"19109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.779634,43.501391],[-96.598895,43.501391],[-96.555079,43.260406],[-96.456494,43.085144],[-96.626279,43.085144],[-96.807019,43.085144],[-96.922034,43.085144],[-96.922034,43.501391],[-96.779634,43.501391]]]},"id":"46083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.451017,43.501391],[-96.051201,43.501391],[-95.859508,43.501391],[-95.859508,43.254929],[-96.555079,43.260406],[-96.598895,43.501391],[-96.451017,43.501391]]]},"id":"19119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.922034,43.501391],[-96.922034,43.085144],[-97.157543,43.085144],[-97.343759,43.167298],[-97.398528,43.167298],[-97.404005,43.501391],[-97.130158,43.501391],[-96.922034,43.501391]]]},"id":"46125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.551436,43.501391],[-92.556913,43.211113],[-92.797898,43.211113],[-93.022453,43.211113],[-93.022453,43.254929],[-93.022453,43.501391],[-92.551436,43.501391]]]},"id":"19131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.299026,43.501391],[-98.795148,43.501391],[-98.707517,43.501391],[-98.11053,43.194682],[-98.077669,43.167298],[-98.154346,42.838681],[-98.3077,42.882497],[-98.499393,42.997512],[-99.299026,43.501391],[-99.299026,43.501391]]]},"id":"46023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.606652,43.501391],[-97.404005,43.501391],[-97.398528,43.167298],[-97.639513,43.167298],[-97.754529,43.167298],[-98.077669,43.167298],[-98.11053,43.194682],[-98.116007,43.495914],[-97.962653,43.501391],[-97.606652,43.501391]]]},"id":"46067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.534535,43.501391],[-99.299026,43.501391],[-98.499393,42.997512],[-99.255211,42.997512],[-99.534535,42.997512],[-99.534535,43.501391]]]},"id":"46053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.901936,43.501391],[-104.890983,42.60865],[-105.285322,42.433388],[-106.074002,42.433388],[-106.074002,42.433388],[-106.079479,43.495914],[-106.019232,43.495914],[-105.077198,43.495914],[-104.901936,43.501391]]]},"id":"56009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.646824,43.501391],[-93.498947,43.501391],[-93.498947,43.254929],[-93.570147,43.254929],[-93.969963,43.254929],[-93.969963,43.501391],[-93.646824,43.501391]]]},"id":"19189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.022453,43.501391],[-93.022453,43.254929],[-93.055314,43.254929],[-93.498947,43.254929],[-93.498947,43.501391],[-93.049837,43.501391],[-93.022453,43.501391]]]},"id":"19195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.685609,43.501391],[-98.318654,43.501391],[-98.116007,43.495914],[-98.11053,43.194682],[-98.707517,43.501391],[-98.685609,43.501391]]]},"id":"46043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.937995,43.479483],[-103.001438,43.479483],[-103.001438,43.002989],[-103.324578,43.002989],[-103.505317,43.002989],[-104.053011,43.002989],[-104.053011,43.479483],[-103.937995,43.479483]]]},"id":"46047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.411786,43.474006],[-86.039354,43.468529],[-85.792891,43.293267],[-85.792891,43.205636],[-86.269385,43.118005],[-86.461078,43.474006],[-86.411786,43.474006]]]},"id":"26121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.551906,43.468529],[-85.086366,43.468529],[-84.845381,43.468529],[-84.834427,43.118005],[-85.075412,43.118005],[-85.310921,43.118005],[-85.524521,43.293267],[-85.56286,43.293267],[-85.56286,43.468529],[-85.551906,43.468529]]]},"id":"26117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.774181,43.468529],[-84.609872,43.468529],[-84.368887,43.468529],[-84.368887,43.128959],[-84.368887,43.118005],[-84.719411,43.118005],[-84.834427,43.118005],[-84.845381,43.468529],[-84.774181,43.468529]]]},"id":"26057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.05026,43.463052],[-109.075365,42.690804],[-109.042503,42.263602],[-110.055737,42.269079],[-110.543185,42.280033],[-110.576047,43.233021],[-110.05026,43.463052]]]},"id":"56035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.9686,43.424714],[-90.667368,43.424714],[-90.667368,43.172775],[-91.154816,42.986559],[-91.176724,43.079667],[-91.204109,43.424714],[-90.9686,43.424714]]]},"id":"55023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.619016,43.419237],[-76.476616,43.227544],[-76.273969,42.772958],[-76.263015,42.625081],[-76.460185,42.625081],[-76.668309,42.625081],[-76.712124,43.024897],[-76.723078,43.34256],[-76.619016,43.419237]]]},"id":"36011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.886023,43.397329],[-73.595745,43.304221],[-73.634084,42.942743],[-73.677899,42.783912],[-73.809346,42.778435],[-74.094147,42.953697],[-74.099624,42.981082],[-74.137962,43.254929],[-74.15987,43.369944],[-73.886023,43.397329]]]},"id":"36091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.235583,43.391852],[-100.213675,43.391852],[-100.197245,42.997512],[-101.226909,42.997512],[-101.226909,43.391852],[-100.235583,43.391852]]]},"id":"46121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.900573,43.391852],[-101.226909,43.391852],[-101.226909,42.997512],[-102.081312,42.997512],[-102.108697,43.391852],[-101.900573,43.391852]]]},"id":"46007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.993728,43.364467],[-77.999205,43.134436],[-78.464745,43.128959],[-78.464745,43.369944],[-77.993728,43.364467]]]},"id":"36073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.464745,43.369944],[-78.464745,43.128959],[-78.464745,43.09062],[-78.552376,43.096097],[-79.023393,43.068713],[-78.464745,43.369944]]]},"id":"36063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.374834,43.276836],[-77.369357,43.035851],[-77.582958,42.942743],[-77.823943,42.986559],[-77.911574,42.986559],[-77.906097,43.128959],[-77.999205,43.134436],[-77.993728,43.364467],[-77.374834,43.276836]]]},"id":"36055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.723078,43.34256],[-76.712124,43.024897],[-76.964064,43.013943],[-77.122895,43.013943],[-77.369357,43.035851],[-77.374834,43.276836],[-76.723078,43.34256]]]},"id":"36117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.191345,43.326129],[-83.120145,43.326129],[-82.994175,43.156344],[-82.983221,42.893451],[-83.098237,42.887974],[-83.454238,42.882497],[-83.459715,43.222067],[-83.191345,43.326129]]]},"id":"26087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.047063,43.315175],[-110.576047,43.233021],[-110.543185,42.280033],[-110.055737,42.269079],[-110.05026,41.578985],[-111.047063,41.578985],[-111.047063,42.000709],[-111.047063,42.515542],[-111.041587,43.01942],[-111.047063,43.315175]]]},"id":"56023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.256175,43.315175],[-72.867312,43.298744],[-72.81802,43.254929],[-72.927559,42.740096],[-73.020667,42.740096],[-73.267129,42.745573],[-73.272606,42.942743],[-73.256175,43.315175]]]},"id":"50003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.524521,43.293267],[-85.310921,43.118005],[-85.310921,42.767481],[-85.546429,42.767481],[-85.781938,42.767481],[-85.792891,43.205636],[-85.792891,43.293267],[-85.56286,43.293267],[-85.524521,43.293267]]]},"id":"26081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.413149,43.293267],[-89.007855,43.282313],[-89.007855,43.200159],[-89.013332,42.849635],[-89.051671,42.849635],[-89.369334,42.844158],[-89.84035,42.855112],[-89.84035,43.205636],[-89.719858,43.293267],[-89.413149,43.293267]]]},"id":"55025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.713041,43.28779],[-74.137962,43.254929],[-74.099624,42.981082],[-74.581595,42.997512],[-74.762334,43.046805],[-74.713041,43.28779]]]},"id":"36035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.246138,43.276836],[-70.818936,43.123482],[-70.703921,43.057759],[-70.818936,42.871543],[-70.917521,42.887974],[-71.246138,42.740096],[-71.394015,43.008466],[-71.246138,43.276836]]]},"id":"33015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.169907,43.249452],[-75.994645,43.183728],[-75.978214,43.167298],[-75.89606,42.789389],[-75.917968,42.789389],[-76.273969,42.772958],[-76.476616,43.227544],[-76.169907,43.249452]]]},"id":"36067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.81802,43.254929],[-72.434634,43.233021],[-72.451065,43.161821],[-72.456542,42.729142],[-72.927559,42.740096],[-72.81802,43.254929]]]},"id":"50025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.555079,43.260406],[-95.859508,43.254929],[-95.859508,42.909881],[-96.17717,42.909881],[-96.538648,42.909881],[-96.456494,43.085144],[-96.555079,43.260406]]]},"id":"19167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.574707,43.254929],[-95.388491,43.254929],[-95.388491,42.909881],[-95.415876,42.909881],[-95.859508,42.909881],[-95.859508,43.254929],[-95.574707,43.254929]]]},"id":"19141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.055314,43.254929],[-93.022453,43.254929],[-93.022453,43.211113],[-93.022453,42.909881],[-93.487993,42.909881],[-93.498947,42.909881],[-93.498947,43.254929],[-93.055314,43.254929]]]},"id":"19033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.570147,43.254929],[-93.498947,43.254929],[-93.498947,42.909881],[-93.526331,42.909881],[-93.969963,42.909881],[-93.969963,43.254929],[-93.570147,43.254929]]]},"id":"19081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.169413,43.254929],[-94.911997,43.254929],[-94.911997,42.909881],[-95.251567,42.909881],[-95.388491,42.909881],[-95.388491,43.254929],[-95.169413,43.254929]]]},"id":"19041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.588858,43.254929],[-94.44098,43.254929],[-94.44098,42.909881],[-94.911997,42.909881],[-94.911997,43.254929],[-94.588858,43.254929]]]},"id":"19147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.465192,43.222067],[-83.459715,43.222067],[-83.454238,42.882497],[-83.684269,42.783912],[-83.925255,42.778435],[-83.930732,43.134436],[-83.695223,43.222067],[-83.465192,43.222067]]]},"id":"26049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.255681,43.211113],[-92.080419,43.211113],[-92.080419,43.085144],[-92.080419,42.904404],[-92.387128,42.909881],[-92.556913,42.904404],[-92.556913,43.211113],[-92.255681,43.211113]]]},"id":"19037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.797898,43.211113],[-92.556913,43.211113],[-92.556913,42.904404],[-93.022453,42.909881],[-93.022453,43.211113],[-92.797898,43.211113]]]},"id":"19067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.552353,43.205636],[-90.43186,43.200159],[-90.426383,42.811297],[-90.426383,42.504588],[-90.639984,42.510065],[-90.8974,42.674373],[-91.154816,42.986559],[-90.667368,43.172775],[-90.552353,43.205636]]]},"id":"55043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.294936,43.205636],[-90.196352,43.161821],[-89.84035,43.205636],[-89.84035,42.855112],[-89.84035,42.811297],[-90.30589,42.816773],[-90.426383,42.811297],[-90.43186,43.200159],[-90.294936,43.205636]]]},"id":"55049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.914325,43.205636],[-71.394015,43.008466],[-71.246138,42.740096],[-71.257092,42.734619],[-71.897894,42.712712],[-71.930755,42.712712],[-72.040294,43.128959],[-72.007433,43.189205],[-71.914325,43.205636]]]},"id":"33011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.792891,43.205636],[-85.781938,42.767481],[-86.044831,42.767481],[-86.209139,42.767481],[-86.269385,43.118005],[-85.792891,43.205636]]]},"id":"26139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.377043,43.200159],[-113.714333,43.200159],[-113.933411,42.767481],[-114.596121,42.849635],[-114.596121,43.200159],[-114.377043,43.200159]]]},"id":"16063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.714333,43.200159],[-113.413102,43.200159],[-113.473348,42.668896],[-113.933411,42.537449],[-113.933411,42.767481],[-113.714333,43.200159]]]},"id":"16067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.875445,43.200159],[-114.596121,43.200159],[-114.596121,42.849635],[-114.618029,42.646988],[-115.039753,42.909881],[-115.089045,43.200159],[-114.875445,43.200159]]]},"id":"16047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.991425,43.200159],[-88.536839,43.194682],[-88.542316,42.844158],[-88.547792,42.844158],[-88.777824,42.844158],[-89.013332,42.849635],[-89.007855,43.200159],[-88.991425,43.200159]]]},"id":"55055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.536839,43.194682],[-88.416346,43.194682],[-88.065822,43.194682],[-88.071299,42.844158],[-88.306807,42.844158],[-88.542316,42.844158],[-88.536839,43.194682]]]},"id":"55133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.972714,43.194682],[-87.89056,43.194682],[-87.824836,42.844158],[-87.956283,42.844158],[-88.071299,42.844158],[-88.065822,43.194682],[-87.972714,43.194682]]]},"id":"55079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.978214,43.167298],[-75.994645,43.183728],[-75.885106,43.156344],[-75.249781,42.871543],[-75.293597,42.745573],[-75.310028,42.745573],[-75.890583,42.723665],[-75.89606,42.789389],[-75.978214,43.167298]]]},"id":"36053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.199125,43.178252],[-72.040294,43.128959],[-71.930755,42.712712],[-72.28128,42.723665],[-72.456542,42.729142],[-72.451065,43.161821],[-72.199125,43.178252]]]},"id":"33005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.343759,43.167298],[-97.157543,43.085144],[-97.16302,42.800343],[-97.486159,42.849635],[-97.634037,42.849635],[-97.639513,43.167298],[-97.398528,43.167298],[-97.343759,43.167298]]]},"id":"46135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.754529,43.167298],[-97.639513,43.167298],[-97.634037,42.849635],[-98.154346,42.838681],[-98.077669,43.167298],[-97.754529,43.167298]]]},"id":"46009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.566974,43.167298],[-82.50125,43.167298],[-82.703897,42.685327],[-82.742236,42.898928],[-82.983221,42.893451],[-82.994175,43.156344],[-82.566974,43.167298]]]},"id":"26147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.906097,43.128959],[-77.911574,42.986559],[-77.95539,42.860589],[-78.09779,42.871543],[-78.464745,42.866066],[-78.464745,43.09062],[-78.464745,43.128959],[-77.999205,43.134436],[-77.906097,43.128959]]]},"id":"36037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.941686,43.134436],[-83.930732,43.134436],[-83.925255,42.778435],[-84.160763,42.778435],[-84.270302,42.778435],[-84.36341,42.778435],[-84.368887,43.118005],[-84.368887,43.128959],[-83.941686,43.134436]]]},"id":"26155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.075412,43.118005],[-84.834427,43.118005],[-84.834427,42.772958],[-85.075412,42.772958],[-85.130182,42.772958],[-85.310921,42.767481],[-85.310921,43.118005],[-85.075412,43.118005]]]},"id":"26067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.719411,43.118005],[-84.368887,43.118005],[-84.36341,42.778435],[-84.604395,42.767481],[-84.834427,42.772958],[-84.834427,43.118005],[-84.719411,43.118005]]]},"id":"26037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.421776,42.504588],[-113.002331,42.329326],[-113.23784,42.625081],[-113.007808,43.112528],[-112.750392,42.953697],[-112.421776,42.504588]]]},"id":"16077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.552376,43.096097],[-78.464745,43.09062],[-78.464745,42.866066],[-78.464745,42.537449],[-79.001485,42.531973],[-79.061732,42.537449],[-79.138409,42.570311],[-79.138409,42.570311],[-79.023393,43.068713],[-78.552376,43.096097]]]},"id":"36029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.807019,43.085144],[-96.807019,42.701758],[-97.015142,42.762004],[-97.16302,42.800343],[-97.157543,43.085144],[-96.922034,43.085144],[-96.807019,43.085144]]]},"id":"46027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.626279,43.085144],[-96.456494,43.085144],[-96.538648,42.909881],[-96.50031,42.559357],[-96.44554,42.488157],[-96.631756,42.526496],[-96.807019,42.701758],[-96.807019,43.085144],[-96.626279,43.085144]]]},"id":"46127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.080419,43.085144],[-91.603925,43.079667],[-91.609402,42.641511],[-91.905157,42.641511],[-92.080419,42.641511],[-92.080419,42.904404],[-92.080419,43.085144]]]},"id":"19065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.565587,43.079667],[-91.176724,43.079667],[-91.154816,42.986559],[-90.8974,42.674373],[-90.8974,42.657942],[-91.132908,42.646988],[-91.204109,42.646988],[-91.609402,42.641511],[-91.603925,43.079667],[-91.565587,43.079667]]]},"id":"19043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.581595,42.997512],[-74.099624,42.981082],[-74.094147,42.953697],[-74.263932,42.794866],[-74.647318,42.827727],[-74.762334,42.860589],[-74.762334,43.046805],[-74.581595,42.997512]]]},"id":"36057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.122895,43.013943],[-76.964064,43.013943],[-76.975017,42.762004],[-77.36388,42.575788],[-77.48985,42.575788],[-77.582958,42.942743],[-77.369357,43.035851],[-77.122895,43.013943]]]},"id":"36069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.712124,43.024897],[-76.668309,42.625081],[-76.695693,42.548403],[-76.70117,42.548403],[-76.892863,42.542926],[-76.975017,42.762004],[-76.964064,43.013943],[-76.712124,43.024897]]]},"id":"36099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.065774,43.024897],[-111.589281,43.01942],[-111.041587,43.01942],[-111.047063,42.515542],[-111.468788,42.592219],[-111.600234,42.416957],[-111.835743,42.416957],[-111.874081,42.416957],[-112.065774,43.024897]]]},"id":"16029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.388914,43.01942],[-112.065774,43.024897],[-111.874081,42.416957],[-112.126021,42.28551],[-112.421776,42.504588],[-112.750392,42.953697],[-112.388914,43.01942]]]},"id":"16005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.505317,43.002989],[-103.44507,42.438865],[-103.401255,42.006186],[-103.456024,42.006186],[-104.053011,42.000709],[-104.053011,42.614127],[-104.053011,43.002989],[-103.505317,43.002989]]]},"id":"31165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.324578,43.002989],[-103.001438,43.002989],[-102.793314,42.997512],[-102.771407,42.438865],[-103.44507,42.438865],[-103.505317,43.002989],[-103.324578,43.002989]]]},"id":"31045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.081312,42.997512],[-102.004635,42.093817],[-102.064881,42.011663],[-102.240143,42.006186],[-102.678299,42.006186],[-102.700206,42.006186],[-102.771407,42.438865],[-102.793314,42.997512],[-102.081312,42.997512]]]},"id":"31161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.081312,42.997512],[-102.081312,42.997512],[-101.226909,42.997512],[-100.197245,42.997512],[-100.197245,42.844158],[-100.16986,42.08834],[-100.268445,42.08834],[-100.843524,42.08834],[-101.424079,42.093817],[-102.004635,42.093817],[-102.081312,42.997512]]]},"id":"31031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.126044,42.997512],[-99.534535,42.997512],[-99.255211,42.997512],[-99.255211,42.80582],[-99.676935,42.729142],[-100.175337,42.833204],[-100.197245,42.844158],[-100.197245,42.997512],[-100.126044,42.997512]]]},"id":"31103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.499393,42.997512],[-98.3077,42.882497],[-98.3077,42.762004],[-98.997795,42.887974],[-99.255211,42.80582],[-99.255211,42.997512],[-98.499393,42.997512]]]},"id":"31015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.280268,42.992036],[-122.291222,42.006186],[-123.233256,42.006186],[-123.227779,42.701758],[-122.280268,42.997512],[-122.280268,42.992036]]]},"id":"41029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.823943,42.986559],[-77.582958,42.942743],[-77.48985,42.575788],[-77.648681,42.581265],[-77.725358,42.471726],[-78.037544,42.521019],[-77.95539,42.860589],[-77.911574,42.986559],[-77.823943,42.986559]]]},"id":"36051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.387622,42.94822],[-73.272606,42.942743],[-73.267129,42.745573],[-73.35476,42.510065],[-73.398575,42.504588],[-73.781961,42.466249],[-73.677899,42.783912],[-73.634084,42.942743],[-73.387622,42.94822]]]},"id":"36083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.094147,42.953697],[-73.809346,42.778435],[-74.181778,42.729142],[-74.263932,42.794866],[-74.094147,42.953697]]]},"id":"36093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.295782,42.953697],[-123.813811,42.789389],[-123.715227,42.783912],[-124.027412,42.35671],[-123.819288,41.995232],[-124.213628,42.000709],[-124.481998,42.953697],[-124.295782,42.953697]]]},"id":"41015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-115.039753,42.909881],[-114.618029,42.646988],[-113.999134,42.526496],[-114.283935,41.995232],[-115.039753,41.995232],[-115.039753,42.767481],[-115.039753,42.909881]]]},"id":"16083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.415876,42.909881],[-95.388491,42.909881],[-95.388491,42.559357],[-95.465168,42.559357],[-95.739015,42.559357],[-95.859508,42.559357],[-95.859508,42.909881],[-95.415876,42.909881]]]},"id":"19035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.17717,42.909881],[-95.859508,42.909881],[-95.859508,42.559357],[-96.50031,42.559357],[-96.538648,42.909881],[-96.17717,42.909881]]]},"id":"19149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.251567,42.909881],[-94.911997,42.909881],[-94.911997,42.559357],[-95.388491,42.559357],[-95.388491,42.909881],[-95.251567,42.909881]]]},"id":"19021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.44098,42.909881],[-94.44098,42.646988],[-94.44098,42.559357],[-94.616242,42.559357],[-94.911997,42.559357],[-94.911997,42.909881],[-94.44098,42.909881]]]},"id":"19151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.526331,42.909881],[-93.498947,42.909881],[-93.498947,42.559357],[-93.893286,42.559357],[-93.969963,42.559357],[-93.969963,42.646988],[-93.969963,42.909881],[-93.526331,42.909881]]]},"id":"19197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.487993,42.909881],[-93.022453,42.909881],[-93.02793,42.55388],[-93.263438,42.559357],[-93.498947,42.559357],[-93.498947,42.909881],[-93.487993,42.909881]]]},"id":"19069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.096427,42.904404],[-74.762334,42.860589],[-74.647318,42.827727],[-74.713041,42.515542],[-74.844488,42.510065],[-75.414089,42.312895],[-75.293597,42.745573],[-75.249781,42.871543],[-75.211443,42.882497],[-75.096427,42.904404]]]},"id":"36077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.090456,42.909881],[-93.969963,42.909881],[-93.969963,42.646988],[-94.44098,42.646988],[-94.44098,42.909881],[-94.090456,42.909881]]]},"id":"19091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.022453,42.909881],[-92.556913,42.904404],[-92.556913,42.641511],[-92.551436,42.55388],[-92.907437,42.55388],[-93.02793,42.55388],[-93.022453,42.909881]]]},"id":"19023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.387128,42.909881],[-92.080419,42.904404],[-92.080419,42.641511],[-92.469282,42.641511],[-92.556913,42.641511],[-92.556913,42.904404],[-92.387128,42.909881]]]},"id":"19017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.742236,42.898928],[-82.703897,42.685327],[-82.868205,42.449818],[-82.879159,42.449818],[-83.081806,42.449818],[-83.098237,42.887974],[-82.983221,42.893451],[-82.742236,42.898928]]]},"id":"26099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.997795,42.887974],[-98.3077,42.762004],[-98.302223,42.438865],[-98.302223,42.08834],[-98.762286,42.08834],[-99.222349,42.08834],[-99.233303,42.08834],[-99.255211,42.80582],[-98.997795,42.887974]]]},"id":"31089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.098237,42.887974],[-83.081806,42.449818],[-83.552823,42.433388],[-83.662362,42.433388],[-83.684269,42.783912],[-83.454238,42.882497],[-83.098237,42.887974]]]},"id":"26125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.917521,42.887974],[-70.818936,42.871543],[-70.961337,42.444341],[-71.02706,42.444341],[-71.257092,42.734619],[-71.246138,42.740096],[-70.917521,42.887974]]]},"id":"25009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.3077,42.882497],[-98.154346,42.838681],[-97.634037,42.849635],[-97.486159,42.849635],[-97.486159,42.438865],[-97.836683,42.438865],[-98.302223,42.438865],[-98.3077,42.762004],[-98.3077,42.882497]]]},"id":"31107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.09779,42.871543],[-77.95539,42.860589],[-78.037544,42.521019],[-78.22376,42.521019],[-78.311391,42.521019],[-78.464745,42.537449],[-78.464745,42.866066],[-78.09779,42.871543]]]},"id":"36121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.486159,42.849635],[-97.16302,42.800343],[-97.015142,42.762004],[-97.015142,42.351234],[-97.365666,42.351234],[-97.365666,42.438865],[-97.486159,42.438865],[-97.486159,42.849635]]]},"id":"31027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.84035,42.855112],[-89.369334,42.844158],[-89.363857,42.499111],[-89.402195,42.499111],[-89.84035,42.504588],[-89.84035,42.811297],[-89.84035,42.855112]]]},"id":"55045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.596121,42.849635],[-113.933411,42.767481],[-113.933411,42.537449],[-113.999134,42.526496],[-114.618029,42.646988],[-114.596121,42.849635]]]},"id":"16053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.051671,42.849635],[-89.013332,42.849635],[-88.777824,42.844158],[-88.777824,42.493634],[-88.942132,42.493634],[-89.363857,42.499111],[-89.369334,42.844158],[-89.051671,42.849635]]]},"id":"55105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.175337,42.833204],[-99.676935,42.729142],[-99.660504,42.08834],[-99.687889,42.08834],[-100.16986,42.08834],[-100.197245,42.844158],[-100.175337,42.833204]]]},"id":"31017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.956283,42.844158],[-87.824836,42.844158],[-87.808406,42.668896],[-88.027483,42.668896],[-88.306807,42.60865],[-88.306807,42.844158],[-88.071299,42.844158],[-87.956283,42.844158]]]},"id":"55101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.547792,42.844158],[-88.542316,42.844158],[-88.306807,42.844158],[-88.306807,42.60865],[-88.306807,42.493634],[-88.706624,42.493634],[-88.777824,42.493634],[-88.777824,42.844158],[-88.547792,42.844158]]]},"id":"55127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.647318,42.827727],[-74.263932,42.794866],[-74.181778,42.729142],[-74.252978,42.406003],[-74.444671,42.35671],[-74.713041,42.515542],[-74.647318,42.827727]]]},"id":"36095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.809346,42.778435],[-73.677899,42.783912],[-73.781961,42.466249],[-74.252978,42.406003],[-74.181778,42.729142],[-73.809346,42.778435]]]},"id":"36001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.30589,42.816773],[-89.84035,42.811297],[-89.84035,42.504588],[-89.927981,42.504588],[-90.426383,42.504588],[-90.426383,42.811297],[-90.30589,42.816773]]]},"id":"55065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.255211,42.80582],[-99.233303,42.08834],[-99.660504,42.08834],[-99.676935,42.729142],[-99.255211,42.80582]]]},"id":"31149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.917968,42.789389],[-75.89606,42.789389],[-75.890583,42.723665],[-75.863199,42.416957],[-76.131569,42.41148],[-76.252061,42.406003],[-76.263015,42.625081],[-76.273969,42.772958],[-75.917968,42.789389]]]},"id":"36023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.715227,42.783912],[-123.227779,42.701758],[-123.233256,42.006186],[-123.518057,42.000709],[-123.819288,41.995232],[-124.027412,42.35671],[-123.715227,42.783912]]]},"id":"41033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.684269,42.783912],[-83.662362,42.433388],[-84.133379,42.422434],[-84.138855,42.422434],[-84.160763,42.778435],[-83.925255,42.778435],[-83.684269,42.783912]]]},"id":"26093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.270302,42.778435],[-84.160763,42.778435],[-84.138855,42.422434],[-84.598918,42.422434],[-84.604395,42.767481],[-84.36341,42.778435],[-84.270302,42.778435]]]},"id":"26065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.130182,42.772958],[-85.075412,42.772958],[-85.069935,42.422434],[-85.299967,42.416957],[-85.540952,42.422434],[-85.546429,42.767481],[-85.310921,42.767481],[-85.130182,42.772958]]]},"id":"26015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.834427,42.772958],[-84.604395,42.767481],[-84.598918,42.422434],[-84.719411,42.422434],[-84.883719,42.422434],[-85.069935,42.422434],[-85.075412,42.772958],[-84.834427,42.772958]]]},"id":"26045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.044831,42.767481],[-85.781938,42.767481],[-85.546429,42.767481],[-85.540952,42.422434],[-85.765507,42.422434],[-85.776461,42.422434],[-86.274862,42.416957],[-86.209139,42.767481],[-86.044831,42.767481]]]},"id":"26005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.975017,42.762004],[-76.892863,42.542926],[-77.106464,42.48268],[-77.36388,42.575788],[-76.975017,42.762004]]]},"id":"36123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.015142,42.762004],[-96.807019,42.701758],[-96.631756,42.526496],[-96.724864,42.395049],[-96.724864,42.280033],[-96.823449,42.263602],[-97.015142,42.351234],[-97.015142,42.762004]]]},"id":"31051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.267129,42.745573],[-73.020667,42.740096],[-72.976851,42.55388],[-72.998759,42.312895],[-73.053528,42.039048],[-73.486206,42.050002],[-73.49716,42.050002],[-73.35476,42.510065],[-73.267129,42.745573]]]},"id":"25003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.310028,42.745573],[-75.293597,42.745573],[-75.414089,42.312895],[-75.419566,42.192402],[-75.863199,42.416957],[-75.890583,42.723665],[-75.310028,42.745573]]]},"id":"36017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.020667,42.740096],[-72.927559,42.740096],[-72.456542,42.729142],[-72.28128,42.723665],[-72.314141,42.345757],[-72.976851,42.55388],[-73.020667,42.740096]]]},"id":"25011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.257092,42.734619],[-71.02706,42.444341],[-71.158507,42.329326],[-71.163984,42.301941],[-71.191368,42.280033],[-71.262569,42.329326],[-71.476169,42.154064],[-71.897894,42.712712],[-71.257092,42.734619]]]},"id":"25017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.28128,42.723665],[-71.930755,42.712712],[-71.897894,42.712712],[-71.476169,42.154064],[-71.498077,42.01714],[-71.799309,42.006186],[-72.100541,42.028094],[-72.133402,42.028094],[-72.221033,42.247172],[-72.314141,42.345757],[-72.28128,42.723665]]]},"id":"25027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.473348,42.668896],[-113.23784,42.625081],[-113.002331,42.329326],[-113.002331,42.000709],[-114.04295,41.995232],[-114.283935,41.995232],[-113.999134,42.526496],[-113.933411,42.537449],[-113.473348,42.668896]]]},"id":"16031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.8974,42.657942],[-90.8974,42.674373],[-90.639984,42.510065],[-90.475675,42.384095],[-90.8974,42.296464],[-91.127431,42.296464],[-91.132908,42.646988],[-90.8974,42.657942]]]},"id":"19061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.027483,42.668896],[-87.808406,42.668896],[-87.802929,42.493634],[-88.202745,42.493634],[-88.219176,42.493634],[-88.306807,42.493634],[-88.306807,42.60865],[-88.027483,42.668896]]]},"id":"55059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.204109,42.646988],[-91.132908,42.646988],[-91.127431,42.296464],[-91.36294,42.296464],[-91.598448,42.296464],[-91.609402,42.641511],[-91.204109,42.646988]]]},"id":"19055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.44098,42.646988],[-93.969963,42.646988],[-93.969963,42.559357],[-93.931625,42.208833],[-94.167133,42.208833],[-94.397165,42.208833],[-94.44098,42.559357],[-94.44098,42.646988]]]},"id":"19187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.905157,42.641511],[-91.609402,42.641511],[-91.598448,42.296464],[-91.713464,42.296464],[-91.82848,42.296464],[-91.888726,42.296464],[-92.063988,42.296464],[-92.080419,42.641511],[-91.905157,42.641511]]]},"id":"19019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.469282,42.641511],[-92.080419,42.641511],[-92.063988,42.296464],[-92.299497,42.296464],[-92.535005,42.296464],[-92.551436,42.55388],[-92.556913,42.641511],[-92.469282,42.641511]]]},"id":"19013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.460185,42.625081],[-76.263015,42.625081],[-76.252061,42.406003],[-76.536862,42.280033],[-76.619016,42.28551],[-76.695693,42.548403],[-76.668309,42.625081],[-76.460185,42.625081]]]},"id":"36109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.053011,42.614127],[-104.053011,42.000709],[-104.053011,41.699478],[-104.053011,41.562554],[-104.655474,41.655662],[-104.655474,42.60865],[-104.053011,42.614127]]]},"id":"56015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.655474,42.60865],[-104.655474,41.655662],[-105.279845,41.655662],[-105.285322,42.433388],[-104.890983,42.60865],[-104.655474,42.60865]]]},"id":"56031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.468788,42.592219],[-111.047063,42.515542],[-111.047063,42.000709],[-111.507126,42.000709],[-111.600234,42.416957],[-111.468788,42.592219]]]},"id":"16007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.648681,42.581265],[-77.48985,42.575788],[-77.36388,42.575788],[-77.106464,42.48268],[-76.964064,42.280033],[-76.964064,42.000709],[-77.610343,42.000709],[-77.747266,42.000709],[-77.725358,42.471726],[-77.648681,42.581265]]]},"id":"36101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.138409,42.570311],[-79.061732,42.537449],[-79.061732,42.000709],[-79.609426,42.000709],[-79.76278,42.252649],[-79.76278,42.269079],[-79.138409,42.570311],[-79.138409,42.570311]]]},"id":"36013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.50031,42.559357],[-95.859508,42.559357],[-95.739015,42.559357],[-95.673292,42.208833],[-96.133355,42.21431],[-96.357909,42.21431],[-96.357909,42.274556],[-96.44554,42.488157],[-96.50031,42.559357]]]},"id":"19193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.465168,42.559357],[-95.388491,42.559357],[-95.322768,42.208833],[-95.64043,42.208833],[-95.673292,42.208833],[-95.739015,42.559357],[-95.465168,42.559357]]]},"id":"19093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.388491,42.559357],[-94.911997,42.559357],[-94.857228,42.208833],[-95.092736,42.208833],[-95.322768,42.208833],[-95.388491,42.559357]]]},"id":"19161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.616242,42.559357],[-94.44098,42.559357],[-94.397165,42.208833],[-94.627196,42.208833],[-94.857228,42.208833],[-94.911997,42.559357],[-94.616242,42.559357]]]},"id":"19025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.893286,42.559357],[-93.498947,42.559357],[-93.460608,42.208833],[-93.696116,42.208833],[-93.931625,42.208833],[-93.969963,42.559357],[-93.893286,42.559357]]]},"id":"19079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.263438,42.559357],[-93.02793,42.55388],[-93.000545,42.208833],[-93.230576,42.208833],[-93.362023,42.208833],[-93.460608,42.208833],[-93.498947,42.559357],[-93.263438,42.559357]]]},"id":"19083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.907437,42.55388],[-92.551436,42.55388],[-92.535005,42.296464],[-92.765037,42.208833],[-92.77599,42.208833],[-93.000545,42.208833],[-93.02793,42.55388],[-92.907437,42.55388]]]},"id":"19075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.976851,42.55388],[-72.314141,42.345757],[-72.221033,42.247172],[-72.998759,42.312895],[-72.998759,42.312895],[-72.976851,42.55388]]]},"id":"25015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.70117,42.548403],[-76.695693,42.548403],[-76.619016,42.28551],[-76.766894,42.296464],[-76.964064,42.280033],[-77.106464,42.48268],[-76.892863,42.542926],[-76.70117,42.548403]]]},"id":"36097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.001485,42.531973],[-78.464745,42.537449],[-78.311391,42.521019],[-78.305914,42.000709],[-78.919331,42.000709],[-79.061732,42.000709],[-79.061732,42.537449],[-79.001485,42.531973]]]},"id":"36009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.724864,42.395049],[-96.631756,42.526496],[-96.44554,42.488157],[-96.357909,42.274556],[-96.724864,42.280033],[-96.724864,42.395049]]]},"id":"31043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.22376,42.521019],[-78.037544,42.521019],[-77.725358,42.471726],[-77.747266,42.000709],[-78.207329,42.000709],[-78.305914,42.000709],[-78.311391,42.521019],[-78.22376,42.521019]]]},"id":"36003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.844488,42.510065],[-74.713041,42.515542],[-74.444671,42.35671],[-74.450148,42.170494],[-74.778764,42.01714],[-74.789718,42.011663],[-75.145719,41.852832],[-75.35932,42.000709],[-75.419566,42.192402],[-75.414089,42.312895],[-74.844488,42.510065]]]},"id":"36025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.398575,42.504588],[-73.35476,42.510065],[-73.49716,42.050002],[-73.929839,42.077386],[-73.913408,42.126679],[-73.781961,42.466249],[-73.398575,42.504588]]]},"id":"36021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.639984,42.510065],[-90.426383,42.504588],[-89.927981,42.504588],[-89.917028,42.197879],[-90.316844,42.192402],[-90.475675,42.384095],[-90.639984,42.510065]]]},"id":"17085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.927981,42.504588],[-89.84035,42.504588],[-89.402195,42.499111],[-89.396718,42.203356],[-89.686996,42.197879],[-89.917028,42.197879],[-89.927981,42.504588]]]},"id":"17177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.421776,42.504588],[-112.126021,42.28551],[-112.10959,41.995232],[-112.164359,41.995232],[-113.002331,42.000709],[-113.002331,42.329326],[-112.421776,42.504588]]]},"id":"16071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.363857,42.499111],[-88.942132,42.493634],[-88.942132,42.154064],[-89.281702,42.203356],[-89.396718,42.203356],[-89.402195,42.499111],[-89.363857,42.499111]]]},"id":"17201"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.202745,42.493634],[-87.802929,42.493634],[-87.759113,42.154064],[-88.120591,42.154064],[-88.197268,42.154064],[-88.202745,42.493634]]]},"id":"17097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.219176,42.493634],[-88.202745,42.493634],[-88.197268,42.154064],[-88.235607,42.154064],[-88.454684,42.154064],[-88.586131,42.154064],[-88.706624,42.154064],[-88.706624,42.493634],[-88.306807,42.493634],[-88.219176,42.493634]]]},"id":"17111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.942132,42.493634],[-88.777824,42.493634],[-88.706624,42.493634],[-88.706624,42.154064],[-88.942132,42.154064],[-88.942132,42.493634]]]},"id":"17007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.781961,42.466249],[-73.913408,42.126679],[-74.01747,42.159541],[-74.450148,42.170494],[-74.444671,42.35671],[-74.252978,42.406003],[-73.781961,42.466249]]]},"id":"36039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.879159,42.449818],[-82.868205,42.449818],[-83.185868,42.033571],[-83.421376,42.093817],[-83.541869,42.082863],[-83.552823,42.433388],[-83.081806,42.449818],[-82.879159,42.449818]]]},"id":"26163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.02706,42.444341],[-70.961337,42.444341],[-71.005152,42.307418],[-71.191368,42.280033],[-71.163984,42.301941],[-71.109214,42.351234],[-71.158507,42.329326],[-71.02706,42.444341]]]},"id":"25025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.771407,42.438865],[-102.700206,42.006186],[-103.362916,42.000709],[-103.401255,42.006186],[-103.44507,42.438865],[-102.771407,42.438865]]]},"id":"31013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.365666,42.438865],[-97.365666,42.351234],[-97.365666,42.08834],[-97.425913,42.08834],[-97.836683,42.08834],[-97.836683,42.438865],[-97.486159,42.438865],[-97.365666,42.438865]]]},"id":"31139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.836683,42.438865],[-97.836683,42.08834],[-97.831206,41.918555],[-97.91336,41.918555],[-98.296746,41.913078],[-98.302223,42.08834],[-98.302223,42.438865],[-97.836683,42.438865]]]},"id":"31003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.552823,42.433388],[-83.541869,42.082863],[-83.7719,42.082863],[-84.133379,42.07191],[-84.133379,42.422434],[-83.662362,42.433388],[-83.552823,42.433388]]]},"id":"26161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.037943,42.433388],[-106.074002,42.433388],[-106.074002,42.433388],[-106.068525,41.392769],[-106.320464,40.998429],[-106.857204,41.003906],[-107.317267,41.003906],[-107.919731,41.003906],[-107.930684,41.661139],[-107.50896,41.655662],[-107.525391,42.263602],[-107.525391,42.433388],[-107.037943,42.433388]]]},"id":"56007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.074002,42.433388],[-105.285322,42.433388],[-105.279845,41.655662],[-105.279845,40.998429],[-106.189017,40.998429],[-106.320464,40.998429],[-106.068525,41.392769],[-106.074002,42.433388]]]},"id":"56001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.835743,42.416957],[-111.600234,42.416957],[-111.507126,42.000709],[-112.10959,41.995232],[-112.126021,42.28551],[-111.874081,42.416957],[-111.835743,42.416957]]]},"id":"16041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.598918,42.422434],[-84.138855,42.422434],[-84.133379,42.422434],[-84.133379,42.07191],[-84.36341,42.07191],[-84.708457,42.07191],[-84.719411,42.422434],[-84.598918,42.422434]]]},"id":"26075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.883719,42.422434],[-84.719411,42.422434],[-84.708457,42.07191],[-84.82895,42.07191],[-85.053504,42.07191],[-85.29449,42.07191],[-85.299967,42.416957],[-85.069935,42.422434],[-84.883719,42.422434]]]},"id":"26025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.540952,42.422434],[-85.299967,42.416957],[-85.29449,42.07191],[-85.299967,42.07191],[-85.765507,42.07191],[-85.765507,42.422434],[-85.540952,42.422434]]]},"id":"26077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.776461,42.422434],[-85.765507,42.422434],[-85.765507,42.07191],[-86.22557,42.07191],[-86.302247,42.241695],[-86.362493,42.241695],[-86.274862,42.416957],[-85.776461,42.422434]]]},"id":"26159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.863199,42.416957],[-75.419566,42.192402],[-75.35932,42.000709],[-75.479813,42.000709],[-75.48529,42.000709],[-75.890583,42.000709],[-76.104184,42.000709],[-76.131569,42.41148],[-75.863199,42.416957]]]},"id":"36007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.131569,42.41148],[-76.104184,42.000709],[-76.147999,42.000709],[-76.55877,42.000709],[-76.536862,42.280033],[-76.252061,42.406003],[-76.131569,42.41148]]]},"id":"36107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.475675,42.384095],[-90.316844,42.192402],[-90.152536,42.033571],[-90.366137,42.033571],[-90.8974,42.033571],[-90.8974,42.296464],[-90.475675,42.384095]]]},"id":"19097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.365666,42.351234],[-97.015142,42.351234],[-96.823449,42.263602],[-96.823449,42.08834],[-96.89465,42.08834],[-97.020619,42.08834],[-97.36019,42.08834],[-97.365666,42.08834],[-97.365666,42.351234]]]},"id":"31179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.109214,42.351234],[-71.163984,42.301941],[-71.158507,42.329326],[-71.109214,42.351234]]]},"id":"25021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.998759,42.312895],[-72.221033,42.247172],[-72.133402,42.028094],[-72.511311,42.033571],[-73.009713,42.039048],[-73.053528,42.039048],[-72.998759,42.312895],[-72.998759,42.312895]]]},"id":"25013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.262569,42.329326],[-71.191368,42.280033],[-71.005152,42.307418],[-70.906568,42.269079],[-70.901091,42.269079],[-71.08183,42.093817],[-71.08183,42.093817],[-71.383061,41.984279],[-71.498077,42.01714],[-71.476169,42.154064],[-71.262569,42.329326]]]},"id":"25021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.901091,42.269079],[-70.906568,42.269079],[-70.824413,42.263602],[-70.780598,42.252649],[-70.539613,41.809016],[-70.643674,41.715908],[-70.840844,41.628277],[-71.08183,42.093817],[-70.901091,42.269079]]]},"id":"25023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.888726,42.296464],[-91.82848,42.296464],[-91.833957,41.863786],[-92.063988,41.863786],[-92.299497,41.863786],[-92.299497,42.296464],[-92.063988,42.296464],[-91.888726,42.296464]]]},"id":"19011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.713464,42.296464],[-91.598448,42.296464],[-91.36294,42.296464],[-91.368417,41.94594],[-91.368417,41.858309],[-91.664172,41.863786],[-91.833957,41.863786],[-91.82848,42.296464],[-91.713464,42.296464]]]},"id":"19113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.299497,42.296464],[-92.299497,41.863786],[-92.765037,41.863786],[-92.765037,42.208833],[-92.535005,42.296464],[-92.299497,42.296464]]]},"id":"19171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.36294,42.296464],[-91.127431,42.296464],[-90.8974,42.296464],[-90.8974,42.033571],[-90.8974,41.94594],[-91.012416,41.94594],[-91.368417,41.94594],[-91.36294,42.296464]]]},"id":"19105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.766894,42.296464],[-76.619016,42.28551],[-76.536862,42.280033],[-76.55877,42.000709],[-76.920248,42.000709],[-76.925725,42.000709],[-76.964064,42.000709],[-76.964064,42.280033],[-76.766894,42.296464]]]},"id":"36015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.724864,42.280033],[-96.357909,42.274556],[-96.357909,42.21431],[-96.270278,42.044525],[-96.555079,42.01714],[-96.823449,42.08834],[-96.823449,42.263602],[-96.724864,42.280033]]]},"id":"31173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.055737,42.269079],[-109.042503,42.263602],[-107.525391,42.263602],[-107.50896,41.655662],[-107.930684,41.661139],[-107.919731,41.003906],[-109.04798,40.998429],[-109.677828,40.998429],[-110.000968,40.998429],[-110.05026,40.998429],[-110.05026,41.578985],[-110.055737,42.269079]]]},"id":"56037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.76278,42.252649],[-79.609426,42.000709],[-79.609426,41.847355],[-79.708011,41.852832],[-80.518598,41.847355],[-80.518598,41.978802],[-80.518598,41.978802],[-79.76278,42.269079],[-79.76278,42.252649]]]},"id":"42049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.302247,42.241695],[-86.22557,42.07191],[-86.22557,41.759724],[-86.521325,41.759724],[-86.822556,41.759724],[-86.362493,42.241695],[-86.302247,42.241695]]]},"id":"26021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.133355,42.21431],[-95.673292,42.208833],[-95.673292,41.863786],[-96.122401,41.863786],[-96.138832,41.863786],[-96.270278,42.044525],[-96.357909,42.21431],[-96.133355,42.21431]]]},"id":"19133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.64043,42.208833],[-95.322768,42.208833],[-95.092736,42.208833],[-95.092736,41.863786],[-95.322768,41.863786],[-95.558276,41.863786],[-95.673292,41.863786],[-95.673292,42.208833],[-95.64043,42.208833]]]},"id":"19047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.092736,42.208833],[-94.857228,42.208833],[-94.627196,42.208833],[-94.627196,41.863786],[-94.742212,41.863786],[-95.092736,41.863786],[-95.092736,42.208833]]]},"id":"19027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.77599,42.208833],[-92.765037,42.208833],[-92.765037,41.863786],[-93.230576,41.863786],[-93.230576,42.208833],[-93.000545,42.208833],[-92.77599,42.208833]]]},"id":"19127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.931625,42.208833],[-93.696116,42.208833],[-93.696116,41.863786],[-93.772794,41.863786],[-93.816609,41.863786],[-94.161656,41.863786],[-94.167133,42.208833],[-93.931625,42.208833]]]},"id":"19015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.167133,42.208833],[-94.161656,41.863786],[-94.282149,41.863786],[-94.484796,41.863786],[-94.627196,41.863786],[-94.627196,42.208833],[-94.397165,42.208833],[-94.167133,42.208833]]]},"id":"19073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.362023,42.208833],[-93.230576,42.208833],[-93.230576,41.863786],[-93.268915,41.863786],[-93.345592,41.863786],[-93.696116,41.863786],[-93.696116,42.208833],[-93.460608,42.208833],[-93.362023,42.208833]]]},"id":"19169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.281702,42.203356],[-88.942132,42.154064],[-88.942132,41.891171],[-89.544596,41.902124],[-89.632227,41.902124],[-89.686996,41.929509],[-89.686996,42.197879],[-89.396718,42.203356],[-89.281702,42.203356]]]},"id":"17141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.686996,42.197879],[-89.686996,41.929509],[-89.889643,41.929509],[-90.152536,41.929509],[-90.152536,42.033571],[-90.316844,42.192402],[-89.917028,42.197879],[-89.686996,42.197879]]]},"id":"17015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.01747,42.159541],[-73.913408,42.126679],[-73.929839,42.077386],[-73.951746,41.589939],[-74.263932,41.633754],[-74.367994,41.589939],[-74.778764,42.01714],[-74.450148,42.170494],[-74.01747,42.159541]]]},"id":"36111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.454684,42.154064],[-88.235607,42.154064],[-88.262992,41.984279],[-88.262992,41.726862],[-88.602562,41.721385],[-88.586131,42.154064],[-88.454684,42.154064]]]},"id":"17089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.120591,42.154064],[-87.759113,42.154064],[-87.523605,41.710431],[-87.523605,41.469446],[-88.027483,41.683047],[-87.928898,41.995232],[-88.262992,41.984279],[-88.235607,42.154064],[-88.197268,42.154064],[-88.120591,42.154064]]]},"id":"17031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.586131,42.154064],[-88.602562,41.721385],[-88.602562,41.633754],[-88.618993,41.633754],[-88.936655,41.628277],[-88.942132,41.891171],[-88.942132,42.154064],[-88.706624,42.154064],[-88.586131,42.154064]]]},"id":"17037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.004635,42.093817],[-101.424079,42.093817],[-101.424079,41.743293],[-101.988204,41.743293],[-102.064881,42.011663],[-102.004635,42.093817]]]},"id":"31075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.08183,42.093817],[-71.08183,42.093817],[-70.840844,41.628277],[-71.120168,41.496831],[-71.196845,41.67757],[-71.22423,41.710431],[-71.317338,41.776155],[-71.383061,41.984279],[-71.08183,42.093817]]]},"id":"25005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.421376,42.093817],[-83.185868,42.033571],[-83.454238,41.732339],[-83.760947,41.721385],[-83.7719,42.082863],[-83.541869,42.082863],[-83.421376,42.093817]]]},"id":"26115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.424079,42.093817],[-100.843524,42.08834],[-100.843524,41.737816],[-101.407648,41.743293],[-101.424079,41.743293],[-101.424079,42.093817]]]},"id":"31091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.425913,42.08834],[-97.365666,42.08834],[-97.365666,41.743293],[-97.425913,41.743293],[-97.831206,41.743293],[-97.831206,41.918555],[-97.836683,42.08834],[-97.425913,42.08834]]]},"id":"31119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.36019,42.08834],[-97.020619,42.08834],[-97.020619,41.743293],[-97.250651,41.743293],[-97.250651,41.743293],[-97.365666,41.743293],[-97.365666,42.08834],[-97.36019,42.08834]]]},"id":"31167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.89465,42.08834],[-96.823449,42.08834],[-96.555079,42.01714],[-96.555079,41.743293],[-96.905603,41.743293],[-97.020619,41.743293],[-97.020619,42.08834],[-96.89465,42.08834]]]},"id":"31039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.302223,42.08834],[-98.296746,41.913078],[-98.296746,41.743293],[-98.521301,41.743293],[-98.751332,41.737816],[-98.756809,41.737816],[-98.762286,42.08834],[-98.302223,42.08834]]]},"id":"31183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.762286,42.08834],[-98.756809,41.737816],[-99.074472,41.737816],[-99.211395,41.743293],[-99.222349,41.743293],[-99.222349,42.08834],[-98.762286,42.08834]]]},"id":"31071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.843524,42.08834],[-100.268445,42.08834],[-100.262968,41.737816],[-100.712077,41.737816],[-100.843524,41.737816],[-100.843524,42.08834]]]},"id":"31171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.222349,42.08834],[-99.222349,41.743293],[-99.687889,41.737816],[-99.687889,42.08834],[-99.660504,42.08834],[-99.233303,42.08834],[-99.222349,42.08834]]]},"id":"31115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.268445,42.08834],[-100.16986,42.08834],[-99.687889,42.08834],[-99.687889,41.737816],[-100.252014,41.737816],[-100.262968,41.737816],[-100.268445,42.08834]]]},"id":"31009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.7719,42.082863],[-83.760947,41.721385],[-83.881439,41.721385],[-83.89787,41.721385],[-84.357933,41.704955],[-84.36341,42.07191],[-84.133379,42.07191],[-83.7719,42.082863]]]},"id":"26091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.671059,41.513262],[-70.692967,41.524216],[-70.643674,41.715908],[-70.539613,41.809016],[-69.926195,41.694001],[-70.671059,41.513262]]]},"id":"25001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.929839,42.077386],[-73.49716,42.050002],[-73.486206,42.050002],[-73.519068,41.666616],[-73.530022,41.529692],[-73.979131,41.436584],[-73.951746,41.589939],[-73.929839,42.077386]]]},"id":"36027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.36341,42.07191],[-84.357933,41.704955],[-84.401749,41.704955],[-84.807042,41.694001],[-84.823473,41.759724],[-84.82895,42.07191],[-84.708457,42.07191],[-84.36341,42.07191]]]},"id":"26059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.053504,42.07191],[-84.82895,42.07191],[-84.823473,41.759724],[-85.195905,41.759724],[-85.29449,41.759724],[-85.29449,42.07191],[-85.053504,42.07191]]]},"id":"26023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.299967,42.07191],[-85.29449,42.07191],[-85.29449,41.759724],[-85.371167,41.759724],[-85.661445,41.759724],[-85.792891,41.759724],[-85.765507,42.07191],[-85.299967,42.07191]]]},"id":"26149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.22557,42.07191],[-85.765507,42.07191],[-85.792891,41.759724],[-85.990061,41.759724],[-86.061262,41.759724],[-86.22557,41.759724],[-86.22557,42.07191]]]},"id":"26027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.053528,42.039048],[-73.009713,42.039048],[-72.982328,41.639231],[-73.310944,41.469446],[-73.519068,41.666616],[-73.486206,42.050002],[-73.053528,42.039048]]]},"id":"09005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.270278,42.044525],[-96.138832,41.863786],[-96.122401,41.683047],[-96.407202,41.683047],[-96.44554,41.683047],[-96.555079,41.743293],[-96.555079,42.01714],[-96.270278,42.044525]]]},"id":"31021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.009713,42.039048],[-72.511311,42.033571],[-72.412726,41.600893],[-72.467496,41.584462],[-72.544173,41.644708],[-72.752296,41.578985],[-72.949466,41.644708],[-72.982328,41.639231],[-73.009713,42.039048]]]},"id":"09003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.133402,42.028094],[-72.100541,42.028094],[-72.237464,41.715908],[-72.412726,41.600893],[-72.511311,42.033571],[-72.133402,42.028094]]]},"id":"09013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.366137,42.033571],[-90.152536,42.033571],[-90.152536,41.929509],[-90.240167,41.781632],[-90.316844,41.726862],[-90.798815,41.770678],[-90.8974,41.770678],[-90.8974,41.94594],[-90.8974,42.033571],[-90.366137,42.033571]]]},"id":"19045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.799309,42.006186],[-71.788355,41.726862],[-71.788355,41.639231],[-72.237464,41.715908],[-72.100541,42.028094],[-71.799309,42.006186]]]},"id":"09015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.498077,42.01714],[-71.383061,41.984279],[-71.317338,41.776155],[-71.366631,41.737816],[-71.4214,41.765201],[-71.788355,41.726862],[-71.799309,42.006186],[-71.498077,42.01714]]]},"id":"44007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.789718,42.011663],[-74.778764,42.01714],[-74.367994,41.589939],[-74.756857,41.425631],[-75.069042,41.600893],[-75.145719,41.852832],[-74.789718,42.011663]]]},"id":"36105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.233256,42.006186],[-122.291222,42.006186],[-121.447773,41.995232],[-121.447773,41.184645],[-122.499346,41.184645],[-122.586977,41.35443],[-122.915593,40.992952],[-123.408518,41.179168],[-123.660457,41.381815],[-123.518057,42.000709],[-123.233256,42.006186]]]},"id":"06093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.240143,42.006186],[-102.064881,42.011663],[-101.988204,41.743293],[-101.982727,41.392769],[-102.053927,41.222984],[-102.119651,41.222984],[-102.612575,41.222984],[-102.634483,41.436584],[-102.678299,42.006186],[-102.240143,42.006186]]]},"id":"31069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.700206,42.006186],[-102.678299,42.006186],[-102.634483,41.436584],[-102.754976,41.436584],[-103.368393,41.436584],[-103.368393,41.699478],[-103.362916,42.000709],[-102.700206,42.006186]]]},"id":"31123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.456024,42.006186],[-103.401255,42.006186],[-103.362916,42.000709],[-103.368393,41.699478],[-104.053011,41.699478],[-104.053011,42.000709],[-103.456024,42.006186]]]},"id":"31157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-115.039753,41.995232],[-114.283935,41.995232],[-114.04295,41.995232],[-114.04295,40.998429],[-114.048427,40.116642],[-115.833909,40.127596],[-116.157049,40.998429],[-116.58425,40.998429],[-117.016928,40.998429],[-117.016928,42.000709],[-115.039753,41.995232]]]},"id":"32007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.920248,42.000709],[-76.55877,42.000709],[-76.147999,42.000709],[-76.115138,41.650185],[-76.2192,41.540646],[-76.816186,41.589939],[-76.876433,41.595416],[-76.925725,42.000709],[-76.920248,42.000709]]]},"id":"42015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.925725,42.000709],[-76.876433,41.595416],[-77.599389,41.540646],[-77.610343,42.000709],[-76.964064,42.000709],[-76.925725,42.000709]]]},"id":"42117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.047063,42.000709],[-111.047063,41.578985],[-111.047063,41.250368],[-111.266141,41.146307],[-111.419495,41.359907],[-111.512603,41.425631],[-111.507126,42.000709],[-111.047063,42.000709]]]},"id":"49033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.164359,41.995232],[-111.885035,41.425631],[-112.492976,41.075106],[-113.073531,40.998429],[-114.04295,40.998429],[-114.04295,41.995232],[-113.002331,42.000709],[-112.164359,41.995232]]]},"id":"49003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.213628,42.000709],[-123.819288,41.995232],[-123.518057,42.000709],[-123.660457,41.381815],[-124.054797,41.463969],[-124.065751,41.463969],[-124.213628,42.000709]]]},"id":"06015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.207329,42.000709],[-77.747266,42.000709],[-77.610343,42.000709],[-77.599389,41.540646],[-77.599389,41.4804],[-77.747266,41.474923],[-77.988251,41.474923],[-78.201852,41.617324],[-78.207329,42.000709]]]},"id":"42105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.027882,42.000709],[-117.016928,42.000709],[-117.016928,40.998429],[-117.301729,40.527412],[-118.013732,40.856029],[-119.311766,40.960091],[-119.32272,41.995232],[-118.194471,41.995232],[-117.027882,42.000709]]]},"id":"32013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.919331,42.000709],[-78.305914,42.000709],[-78.207329,42.000709],[-78.201852,41.617324],[-78.42093,41.600893],[-78.95767,41.6228],[-78.919331,42.000709]]]},"id":"42083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.507126,42.000709],[-111.512603,41.425631],[-111.655004,41.4092],[-111.885035,41.425631],[-112.164359,41.995232],[-112.10959,41.995232],[-111.507126,42.000709]]]},"id":"49005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.061732,42.000709],[-78.919331,42.000709],[-78.95767,41.6228],[-78.996008,41.6228],[-79.510841,41.6228],[-79.614903,41.6228],[-79.609426,41.847355],[-79.609426,42.000709],[-79.061732,42.000709]]]},"id":"42123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.479813,42.000709],[-75.35932,42.000709],[-75.145719,41.852832],[-75.069042,41.600893],[-75.35932,41.239415],[-75.507197,41.233938],[-75.463382,41.639231],[-75.48529,42.000709],[-75.479813,42.000709]]]},"id":"42127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.890583,42.000709],[-75.48529,42.000709],[-75.463382,41.639231],[-75.720798,41.644708],[-76.115138,41.650185],[-76.147999,42.000709],[-76.104184,42.000709],[-75.890583,42.000709]]]},"id":"42115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.361059,41.995232],[-119.32272,41.995232],[-119.311766,40.960091],[-119.224135,40.001626],[-119.191274,39.629194],[-119.196751,39.623717],[-119.284382,39.623717],[-119.689675,39.519655],[-119.711583,39.251285],[-120.001861,39.163654],[-120.007338,39.317009],[-120.001861,39.442978],[-120.001861,39.722302],[-120.001861,41.184645],[-120.001861,41.995232],[-119.361059,41.995232]]]},"id":"32031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.316327,41.995232],[-120.878171,41.995232],[-120.001861,41.995232],[-120.001861,41.184645],[-120.943895,41.184645],[-121.332757,41.184645],[-121.447773,41.184645],[-121.447773,41.995232],[-121.316327,41.995232]]]},"id":"06049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.928898,41.995232],[-88.027483,41.683047],[-88.03296,41.726862],[-88.262992,41.726862],[-88.262992,41.726862],[-88.262992,41.984279],[-87.928898,41.995232]]]},"id":"17043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.518598,41.978802],[-80.518598,41.847355],[-80.518598,41.502308],[-81.000569,41.502308],[-81.006046,41.715908],[-81.000569,41.852832],[-80.518598,41.978802],[-80.518598,41.978802]]]},"id":"39007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.012416,41.94594],[-90.8974,41.94594],[-90.8974,41.770678],[-90.8974,41.595416],[-91.30817,41.595416],[-91.368417,41.600893],[-91.368417,41.858309],[-91.368417,41.94594],[-91.012416,41.94594]]]},"id":"19031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.889643,41.929509],[-89.686996,41.929509],[-89.632227,41.902124],[-89.632227,41.584462],[-89.862258,41.584462],[-90.179921,41.584462],[-90.185398,41.584462],[-90.240167,41.781632],[-90.152536,41.929509],[-89.889643,41.929509]]]},"id":"17195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.91336,41.918555],[-97.831206,41.918555],[-97.831206,41.743293],[-97.831206,41.524216],[-98.291269,41.4804],[-98.296746,41.743293],[-98.296746,41.913078],[-97.91336,41.918555]]]},"id":"31011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.544596,41.902124],[-88.942132,41.891171],[-88.936655,41.628277],[-89.166687,41.584462],[-89.254318,41.584462],[-89.632227,41.584462],[-89.632227,41.902124],[-89.544596,41.902124]]]},"id":"17103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.122401,41.863786],[-95.673292,41.863786],[-95.558276,41.863786],[-95.49803,41.507785],[-95.848554,41.507785],[-95.996431,41.507785],[-96.122401,41.683047],[-96.138832,41.863786],[-96.122401,41.863786]]]},"id":"19085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.322768,41.863786],[-95.092736,41.863786],[-95.043444,41.502308],[-95.152983,41.507785],[-95.49803,41.507785],[-95.558276,41.863786],[-95.322768,41.863786]]]},"id":"19165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.816609,41.863786],[-93.789224,41.513262],[-93.822086,41.507785],[-94.24381,41.502308],[-94.282149,41.863786],[-94.161656,41.863786],[-93.816609,41.863786]]]},"id":"19049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.772794,41.863786],[-93.696116,41.863786],[-93.345592,41.863786],[-93.329161,41.507785],[-93.329161,41.491354],[-93.70707,41.513262],[-93.789224,41.513262],[-93.816609,41.863786],[-93.772794,41.863786]]]},"id":"19153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.092736,41.863786],[-94.742212,41.863786],[-94.698396,41.502308],[-95.043444,41.502308],[-95.092736,41.863786]]]},"id":"19009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.484796,41.863786],[-94.282149,41.863786],[-94.24381,41.502308],[-94.660058,41.502308],[-94.698396,41.502308],[-94.742212,41.863786],[-94.627196,41.863786],[-94.484796,41.863786]]]},"id":"19077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.268915,41.863786],[-93.230576,41.863786],[-92.765037,41.863786],[-92.754083,41.507785],[-92.869098,41.507785],[-93.329161,41.507785],[-93.345592,41.863786],[-93.268915,41.863786]]]},"id":"19099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.063988,41.863786],[-91.833957,41.863786],[-91.82848,41.513262],[-91.943495,41.513262],[-92.299497,41.507785],[-92.299497,41.863786],[-92.063988,41.863786]]]},"id":"19095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.299497,41.863786],[-92.299497,41.507785],[-92.414512,41.507785],[-92.458328,41.507785],[-92.754083,41.507785],[-92.765037,41.863786],[-92.299497,41.863786]]]},"id":"19157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.664172,41.863786],[-91.368417,41.858309],[-91.368417,41.600893],[-91.368417,41.425631],[-91.483432,41.425631],[-91.790141,41.513262],[-91.82848,41.513262],[-91.833957,41.863786],[-91.664172,41.863786]]]},"id":"19103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.000569,41.852832],[-81.006046,41.715908],[-81.389431,41.568031],[-81.488016,41.633754],[-81.000569,41.852832]]]},"id":"39085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.708011,41.852832],[-79.609426,41.847355],[-79.614903,41.6228],[-79.998289,41.491354],[-80.003765,41.491354],[-80.518598,41.491354],[-80.518598,41.502308],[-80.518598,41.847355],[-79.708011,41.852832]]]},"id":"42039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.240167,41.781632],[-90.185398,41.584462],[-90.43186,41.327046],[-91.050754,41.332523],[-91.072662,41.332523],[-91.072662,41.332523],[-90.787861,41.453015],[-90.316844,41.726862],[-90.240167,41.781632]]]},"id":"17161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.798815,41.770678],[-90.316844,41.726862],[-90.787861,41.453015],[-90.8974,41.595416],[-90.8974,41.770678],[-90.798815,41.770678]]]},"id":"19163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.317338,41.776155],[-71.22423,41.710431],[-71.355677,41.726862],[-71.366631,41.737816],[-71.317338,41.776155]]]},"id":"44001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.4214,41.765201],[-71.366631,41.737816],[-71.355677,41.726862],[-71.410446,41.655662],[-71.470692,41.633754],[-71.788355,41.595416],[-71.788355,41.639231],[-71.788355,41.726862],[-71.4214,41.765201]]]},"id":"44003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.061262,41.759724],[-86.061262,41.4804],[-86.247477,41.4804],[-86.466555,41.431108],[-86.526801,41.431108],[-86.521325,41.759724],[-86.22557,41.759724],[-86.061262,41.759724]]]},"id":"18141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.990061,41.759724],[-85.792891,41.759724],[-85.661445,41.759724],[-85.655968,41.524216],[-85.655968,41.436584],[-86.061262,41.436584],[-86.061262,41.4804],[-86.061262,41.759724],[-85.990061,41.759724]]]},"id":"18039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.822556,41.759724],[-86.521325,41.759724],[-86.526801,41.431108],[-86.932095,41.239415],[-86.932095,41.710431],[-86.822556,41.759724]]]},"id":"18091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.823473,41.759724],[-84.807042,41.694001],[-84.807042,41.529692],[-84.916581,41.529692],[-85.195905,41.524216],[-85.195905,41.759724],[-84.823473,41.759724]]]},"id":"18151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.371167,41.759724],[-85.29449,41.759724],[-85.195905,41.759724],[-85.195905,41.524216],[-85.655968,41.524216],[-85.661445,41.759724],[-85.371167,41.759724]]]},"id":"18087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.407648,41.743293],[-100.843524,41.737816],[-100.712077,41.737816],[-100.712077,41.392769],[-101.270725,41.392769],[-101.363833,41.392769],[-101.407648,41.392769],[-101.407648,41.743293]]]},"id":"31117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.250651,41.743293],[-97.020619,41.743293],[-96.905603,41.743293],[-96.905603,41.453015],[-97.256128,41.376338],[-97.250651,41.743293],[-97.250651,41.743293]]]},"id":"31037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.424079,41.743293],[-101.407648,41.743293],[-101.407648,41.392769],[-101.982727,41.392769],[-101.988204,41.743293],[-101.424079,41.743293]]]},"id":"31005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.425913,41.743293],[-97.365666,41.743293],[-97.250651,41.743293],[-97.256128,41.376338],[-97.365666,41.392769],[-97.601175,41.332523],[-97.705237,41.392769],[-97.716191,41.524216],[-97.831206,41.524216],[-97.831206,41.743293],[-97.425913,41.743293]]]},"id":"31141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.905603,41.743293],[-96.555079,41.743293],[-96.44554,41.683047],[-96.330525,41.392769],[-96.461971,41.392769],[-96.472925,41.392769],[-96.905603,41.453015],[-96.905603,41.453015],[-96.905603,41.743293]]]},"id":"31053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.222349,41.743293],[-99.211395,41.743293],[-99.205918,41.392769],[-99.205918,41.047722],[-99.424996,41.047722],[-99.994598,41.047722],[-100.224629,41.047722],[-100.252014,41.392769],[-100.252014,41.737816],[-99.687889,41.737816],[-99.222349,41.743293]]]},"id":"31041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.521301,41.743293],[-98.296746,41.743293],[-98.291269,41.4804],[-98.291269,41.392769],[-98.521301,41.392769],[-98.745855,41.392769],[-98.751332,41.392769],[-98.751332,41.737816],[-98.521301,41.743293]]]},"id":"31077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.074472,41.737816],[-98.756809,41.737816],[-98.751332,41.737816],[-98.751332,41.392769],[-98.822533,41.392769],[-99.205918,41.392769],[-99.211395,41.743293],[-99.074472,41.737816]]]},"id":"31175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.712077,41.737816],[-100.262968,41.737816],[-100.252014,41.737816],[-100.252014,41.392769],[-100.712077,41.392769],[-100.712077,41.737816]]]},"id":"31113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.16396,41.6228],[-83.180391,41.6228],[-83.415899,41.617324],[-83.881439,41.414677],[-83.881439,41.485877],[-83.881439,41.721385],[-83.760947,41.721385],[-83.454238,41.732339],[-83.16396,41.6228]]]},"id":"39095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.03296,41.726862],[-88.027483,41.683047],[-87.523605,41.469446],[-87.529082,41.299661],[-87.786498,41.294184],[-88.246561,41.201076],[-88.252038,41.463969],[-88.262992,41.726862],[-88.03296,41.726862]]]},"id":"17197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.262992,41.726862],[-88.262992,41.726862],[-88.252038,41.463969],[-88.279422,41.463969],[-88.597085,41.458492],[-88.602562,41.633754],[-88.602562,41.721385],[-88.262992,41.726862]]]},"id":"17093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.89787,41.721385],[-83.881439,41.721385],[-83.881439,41.485877],[-83.886916,41.485877],[-84.341502,41.485877],[-84.401749,41.704955],[-84.357933,41.704955],[-83.89787,41.721385]]]},"id":"39051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.006046,41.715908],[-81.000569,41.502308],[-81.000569,41.348953],[-81.389431,41.348953],[-81.389431,41.568031],[-81.006046,41.715908]]]},"id":"39055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.237464,41.715908],[-71.788355,41.639231],[-71.788355,41.595416],[-71.859555,41.321569],[-72.341526,41.277753],[-72.467496,41.584462],[-72.412726,41.600893],[-72.237464,41.715908]]]},"id":"09011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.932095,41.710431],[-86.932095,41.239415],[-87.036157,41.255845],[-87.216896,41.239415],[-87.222373,41.6228],[-86.932095,41.710431]]]},"id":"18127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.222373,41.6228],[-87.216896,41.239415],[-87.277142,41.217507],[-87.529082,41.168214],[-87.529082,41.299661],[-87.523605,41.469446],[-87.523605,41.710431],[-87.222373,41.6228]]]},"id":"18089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.401749,41.704955],[-84.341502,41.485877],[-84.341502,41.425631],[-84.801565,41.425631],[-84.807042,41.529692],[-84.807042,41.694001],[-84.401749,41.704955]]]},"id":"39171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.053011,41.699478],[-103.368393,41.699478],[-103.368393,41.436584],[-103.379347,41.392769],[-104.053011,41.392769],[-104.053011,41.562554],[-104.053011,41.699478]]]},"id":"31007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.407202,41.683047],[-96.122401,41.683047],[-95.996431,41.507785],[-95.936185,41.392769],[-96.330525,41.392769],[-96.44554,41.683047],[-96.407202,41.683047]]]},"id":"31177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.519068,41.666616],[-73.310944,41.469446],[-73.108298,41.168214],[-73.655992,40.987475],[-73.546453,41.365384],[-73.530022,41.529692],[-73.519068,41.666616]]]},"id":"09001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.279845,41.655662],[-104.655474,41.655662],[-104.053011,41.562554],[-104.053011,41.392769],[-104.053011,41.003906],[-104.945752,40.998429],[-105.279845,40.998429],[-105.279845,41.655662]]]},"id":"56021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.470692,41.633754],[-71.410446,41.655662],[-71.859555,41.321569],[-71.788355,41.595416],[-71.470692,41.633754]]]},"id":"44009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.2192,41.540646],[-76.115138,41.650185],[-75.720798,41.644708],[-75.835814,41.425631],[-75.835814,41.425631],[-76.284923,41.376338],[-76.2192,41.540646]]]},"id":"42131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.544173,41.644708],[-72.467496,41.584462],[-72.341526,41.277753],[-72.538696,41.255845],[-72.752296,41.578985],[-72.544173,41.644708]]]},"id":"09007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-72.949466,41.644708],[-72.752296,41.578985],[-72.538696,41.255845],[-73.108298,41.168214],[-73.310944,41.469446],[-72.982328,41.639231],[-72.949466,41.644708]]]},"id":"09009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.720798,41.644708],[-75.463382,41.639231],[-75.507197,41.233938],[-75.600305,41.162737],[-75.835814,41.425631],[-75.720798,41.644708]]]},"id":"42069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.263932,41.633754],[-73.951746,41.589939],[-73.979131,41.436584],[-73.979131,41.327046],[-74.236547,41.14083],[-74.367994,41.201076],[-74.69661,41.359907],[-74.756857,41.425631],[-74.367994,41.589939],[-74.263932,41.633754]]]},"id":"36071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.618993,41.633754],[-88.602562,41.633754],[-88.597085,41.458492],[-88.586131,41.107968],[-88.931178,40.927229],[-89.046194,40.927229],[-89.16121,41.102491],[-89.16121,41.310615],[-89.166687,41.584462],[-88.936655,41.628277],[-88.618993,41.633754]]]},"id":"17099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.488016,41.633754],[-81.389431,41.568031],[-81.389431,41.348953],[-81.389431,41.348953],[-81.537309,41.348953],[-81.685186,41.277753],[-81.876879,41.277753],[-81.969987,41.507785],[-81.488016,41.633754]]]},"id":"39035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.95767,41.6228],[-78.42093,41.600893],[-78.234714,41.228461],[-78.711208,41.201076],[-78.95767,41.370861],[-79.094593,41.343476],[-78.95767,41.6228]]]},"id":"42047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.996008,41.6228],[-78.95767,41.6228],[-79.094593,41.343476],[-79.209609,41.332523],[-79.357487,41.431108],[-79.477979,41.387292],[-79.510841,41.6228],[-78.996008,41.6228]]]},"id":"42053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.510841,41.6228],[-79.477979,41.387292],[-79.697057,41.173691],[-79.998289,41.173691],[-79.998289,41.491354],[-79.614903,41.6228],[-79.510841,41.6228]]]},"id":"42121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.180391,41.6228],[-83.16396,41.6228],[-82.692943,41.491354],[-82.775097,41.4804],[-82.955836,41.458492],[-83.415899,41.502308],[-83.415899,41.617324],[-83.180391,41.6228]]]},"id":"39123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.415899,41.617324],[-83.415899,41.502308],[-83.421376,41.255845],[-83.421376,41.168214],[-83.881439,41.168214],[-83.881439,41.414677],[-83.415899,41.617324]]]},"id":"39173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.42093,41.600893],[-78.201852,41.617324],[-77.988251,41.474923],[-78.092313,41.217507],[-78.234714,41.228461],[-78.42093,41.600893]]]},"id":"42023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.069042,41.600893],[-74.756857,41.425631],[-74.69661,41.359907],[-74.992365,41.091537],[-75.271689,41.244892],[-75.35932,41.239415],[-75.069042,41.600893]]]},"id":"42103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.30817,41.595416],[-90.8974,41.595416],[-90.787861,41.453015],[-91.072662,41.332523],[-91.368417,41.425631],[-91.368417,41.600893],[-91.30817,41.595416]]]},"id":"19139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.876433,41.595416],[-76.816186,41.589939],[-76.449231,41.277753],[-76.640924,41.157261],[-76.734032,41.173691],[-76.799755,41.173691],[-76.89834,41.14083],[-77.144803,41.069629],[-77.599389,41.4804],[-77.599389,41.540646],[-76.876433,41.595416]]]},"id":"42081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.816186,41.589939],[-76.2192,41.540646],[-76.284923,41.376338],[-76.312308,41.310615],[-76.317785,41.310615],[-76.449231,41.277753],[-76.816186,41.589939]]]},"id":"42113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.254318,41.584462],[-89.166687,41.584462],[-89.16121,41.310615],[-89.467918,41.146307],[-89.522688,41.146307],[-89.637704,41.146307],[-89.856781,41.233938],[-89.862258,41.584462],[-89.632227,41.584462],[-89.254318,41.584462]]]},"id":"17011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.179921,41.584462],[-89.862258,41.584462],[-89.856781,41.233938],[-89.982751,41.151784],[-90.207305,41.151784],[-90.437337,41.151784],[-90.43186,41.327046],[-90.185398,41.584462],[-90.179921,41.584462]]]},"id":"17073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.047063,41.578985],[-110.05026,41.578985],[-110.05026,40.998429],[-111.047063,40.998429],[-111.047063,41.250368],[-111.047063,41.578985]]]},"id":"56041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.916581,41.529692],[-84.807042,41.529692],[-84.801565,41.425631],[-84.801565,41.272276],[-84.845381,41.272276],[-85.190428,41.266799],[-85.195905,41.524216],[-84.916581,41.529692]]]},"id":"18033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.530022,41.529692],[-73.546453,41.365384],[-73.661469,41.35443],[-73.984608,41.321569],[-73.979131,41.327046],[-73.979131,41.436584],[-73.530022,41.529692]]]},"id":"36079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.716191,41.524216],[-97.705237,41.392769],[-98.285792,41.392769],[-98.291269,41.392769],[-98.291269,41.4804],[-97.831206,41.524216],[-97.716191,41.524216]]]},"id":"31125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.195905,41.524216],[-85.190428,41.266799],[-85.305444,41.266799],[-85.650491,41.294184],[-85.655968,41.436584],[-85.655968,41.524216],[-85.195905,41.524216]]]},"id":"18113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.969987,41.507785],[-81.876879,41.277753],[-82.172634,41.064153],[-82.336942,41.064153],[-82.342419,41.28323],[-82.347896,41.431108],[-81.969987,41.507785]]]},"id":"39093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.70707,41.513262],[-93.329161,41.491354],[-93.329161,41.162737],[-93.559193,41.162737],[-93.674209,41.162737],[-93.789224,41.162737],[-93.789224,41.513262],[-93.70707,41.513262]]]},"id":"19181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.822086,41.507785],[-93.789224,41.513262],[-93.789224,41.162737],[-94.013779,41.157261],[-94.24381,41.157261],[-94.24381,41.502308],[-93.822086,41.507785]]]},"id":"19121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.790141,41.513262],[-91.483432,41.425631],[-91.483432,41.162737],[-91.598448,41.162737],[-91.713464,41.162737],[-91.943495,41.162737],[-91.943495,41.513262],[-91.82848,41.513262],[-91.790141,41.513262]]]},"id":"19183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.943495,41.513262],[-91.943495,41.162737],[-92.179004,41.162737],[-92.261158,41.162737],[-92.409035,41.162737],[-92.414512,41.507785],[-92.299497,41.507785],[-91.943495,41.513262]]]},"id":"19107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.458328,41.507785],[-92.414512,41.507785],[-92.409035,41.162737],[-92.639067,41.162737],[-92.655498,41.162737],[-92.869098,41.162737],[-92.869098,41.507785],[-92.754083,41.507785],[-92.458328,41.507785]]]},"id":"19123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.869098,41.507785],[-92.869098,41.162737],[-93.09913,41.162737],[-93.329161,41.162737],[-93.329161,41.491354],[-93.329161,41.507785],[-92.869098,41.507785]]]},"id":"19125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.848554,41.507785],[-95.49803,41.507785],[-95.152983,41.507785],[-95.158459,41.157261],[-95.267998,41.157261],[-95.383014,41.157261],[-95.673292,41.157261],[-95.881416,41.157261],[-95.925231,41.190122],[-95.936185,41.392769],[-95.996431,41.507785],[-95.848554,41.507785]]]},"id":"19155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.152983,41.507785],[-95.043444,41.502308],[-94.698396,41.502308],[-94.698396,41.157261],[-94.813412,41.157261],[-94.928428,41.157261],[-95.158459,41.157261],[-95.152983,41.507785]]]},"id":"19029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.660058,41.502308],[-94.24381,41.502308],[-94.24381,41.157261],[-94.468365,41.157261],[-94.698396,41.157261],[-94.698396,41.502308],[-94.660058,41.502308]]]},"id":"19001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.000569,41.502308],[-80.518598,41.502308],[-80.518598,41.491354],[-80.518598,41.135353],[-80.786968,41.135353],[-81.000569,41.135353],[-81.000569,41.348953],[-81.000569,41.502308]]]},"id":"39155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.415899,41.502308],[-82.955836,41.458492],[-82.840821,41.288707],[-82.840821,41.255845],[-83.070852,41.255845],[-83.421376,41.255845],[-83.415899,41.502308]]]},"id":"39143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.775097,41.4804],[-82.692943,41.491354],[-82.347896,41.431108],[-82.342419,41.28323],[-82.840821,41.288707],[-82.955836,41.458492],[-82.775097,41.4804]]]},"id":"39043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.003765,41.491354],[-79.998289,41.491354],[-79.998289,41.173691],[-80.096873,41.069629],[-80.518598,41.124399],[-80.518598,41.135353],[-80.518598,41.491354],[-80.003765,41.491354]]]},"id":"42085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.886916,41.485877],[-83.881439,41.485877],[-83.881439,41.414677],[-83.881439,41.168214],[-84.029317,41.168214],[-84.226487,41.168214],[-84.270302,41.425631],[-84.341502,41.425631],[-84.341502,41.485877],[-83.886916,41.485877]]]},"id":"39069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.247477,41.4804],[-86.061262,41.4804],[-86.061262,41.436584],[-86.077692,41.173691],[-86.242001,41.173691],[-86.466555,41.173691],[-86.466555,41.431108],[-86.247477,41.4804]]]},"id":"18099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.747266,41.474923],[-77.599389,41.4804],[-77.144803,41.069629],[-77.144803,41.042245],[-77.708927,41.113445],[-78.037544,41.151784],[-78.092313,41.217507],[-77.988251,41.474923],[-77.747266,41.474923]]]},"id":"42035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.054797,41.463969],[-123.660457,41.381815],[-123.408518,41.179168],[-123.545441,40.001626],[-124.021935,40.001626],[-124.410798,40.439781],[-124.065751,41.463969],[-124.054797,41.463969]]]},"id":"06023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.279422,41.463969],[-88.252038,41.463969],[-88.246561,41.201076],[-88.252038,41.113445],[-88.410869,41.107968],[-88.586131,41.107968],[-88.597085,41.458492],[-88.279422,41.463969]]]},"id":"17063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.905603,41.453015],[-96.905603,41.453015],[-96.91108,41.047722],[-96.91108,41.047722],[-97.349236,41.047722],[-97.365666,41.047722],[-97.365666,41.392769],[-97.256128,41.376338],[-96.905603,41.453015]]]},"id":"31023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.905603,41.453015],[-96.472925,41.392769],[-96.325048,41.190122],[-96.319571,41.047722],[-96.461971,41.01486],[-96.91108,41.047722],[-96.905603,41.453015]]]},"id":"31155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.754976,41.436584],[-102.634483,41.436584],[-102.612575,41.222984],[-102.623529,41.003906],[-102.650914,41.003906],[-103.384824,41.003906],[-103.379347,41.392769],[-103.368393,41.436584],[-102.754976,41.436584]]]},"id":"31033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.655968,41.436584],[-85.650491,41.294184],[-85.683353,41.047722],[-85.946246,41.042245],[-86.077692,41.173691],[-86.061262,41.436584],[-85.655968,41.436584]]]},"id":"18085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.357487,41.431108],[-79.209609,41.332523],[-79.215086,41.053199],[-79.603949,41.020337],[-79.69158,41.168214],[-79.697057,41.173691],[-79.477979,41.387292],[-79.357487,41.431108]]]},"id":"42031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.655004,41.4092],[-111.512603,41.425631],[-111.419495,41.359907],[-111.857651,41.14083],[-112.011005,41.151784],[-112.492976,41.075106],[-111.885035,41.425631],[-111.655004,41.4092]]]},"id":"49057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.466555,41.431108],[-86.466555,41.173691],[-86.669202,41.173691],[-86.932095,41.173691],[-86.932095,41.239415],[-86.526801,41.431108],[-86.466555,41.431108]]]},"id":"18149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.270302,41.425631],[-84.226487,41.168214],[-84.341502,41.162737],[-84.577011,41.250368],[-84.801565,41.250368],[-84.801565,41.272276],[-84.801565,41.425631],[-84.341502,41.425631],[-84.270302,41.425631]]]},"id":"39039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.835814,41.425631],[-75.835814,41.425631],[-75.600305,41.162737],[-75.649598,41.124399],[-75.687936,41.129876],[-75.994645,40.910798],[-76.208246,40.949137],[-76.312308,41.310615],[-76.284923,41.376338],[-75.835814,41.425631]]]},"id":"42079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.483432,41.425631],[-91.368417,41.425631],[-91.072662,41.332523],[-91.072662,41.332523],[-90.946692,41.075106],[-91.324601,41.075106],[-91.368417,41.075106],[-91.483432,41.162737],[-91.483432,41.425631]]]},"id":"19115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.365666,41.392769],[-97.365666,41.047722],[-97.825729,41.047722],[-97.825729,41.173691],[-97.601175,41.332523],[-97.365666,41.392769]]]},"id":"31143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.363833,41.392769],[-101.270725,41.392769],[-101.248817,41.003906],[-101.878665,41.003906],[-102.053927,41.003906],[-102.053927,41.222984],[-101.982727,41.392769],[-101.407648,41.392769],[-101.363833,41.392769]]]},"id":"31101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.705237,41.392769],[-97.601175,41.332523],[-97.825729,41.173691],[-98.280315,40.87246],[-98.285792,41.047722],[-98.285792,41.392769],[-97.705237,41.392769]]]},"id":"31121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.270725,41.392769],[-100.712077,41.392769],[-100.252014,41.392769],[-100.224629,41.047722],[-100.224629,40.702674],[-100.449184,40.702674],[-100.7778,40.702674],[-101.248817,40.697198],[-101.248817,41.003906],[-101.270725,41.392769]]]},"id":"31111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.379347,41.392769],[-103.384824,41.003906],[-103.576517,41.003906],[-104.053011,41.003906],[-104.053011,41.392769],[-103.379347,41.392769]]]},"id":"31105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.822533,41.392769],[-98.751332,41.392769],[-98.745855,41.392769],[-98.745855,41.047722],[-99.052564,41.047722],[-99.205918,41.047722],[-99.205918,41.392769],[-98.822533,41.392769]]]},"id":"31163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.521301,41.392769],[-98.291269,41.392769],[-98.285792,41.392769],[-98.285792,41.047722],[-98.70204,41.047722],[-98.723948,41.047722],[-98.745855,41.047722],[-98.745855,41.392769],[-98.521301,41.392769]]]},"id":"31093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.461971,41.392769],[-96.330525,41.392769],[-95.936185,41.392769],[-95.925231,41.190122],[-95.936185,41.190122],[-96.325048,41.190122],[-96.472925,41.392769],[-96.461971,41.392769]]]},"id":"31055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.95767,41.370861],[-78.711208,41.201076],[-78.804316,40.905321],[-79.215086,40.910798],[-79.215086,41.053199],[-79.209609,41.332523],[-79.094593,41.343476],[-78.95767,41.370861]]]},"id":"42065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.419495,41.359907],[-111.266141,41.146307],[-111.638573,40.801259],[-111.737158,40.861506],[-111.857651,41.14083],[-111.419495,41.359907]]]},"id":"49029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.586977,41.35443],[-122.499346,41.184645],[-122.691039,40.576705],[-123.063471,40.286427],[-122.932024,39.979718],[-123.545441,40.001626],[-123.408518,41.179168],[-122.915593,40.992952],[-122.586977,41.35443]]]},"id":"06105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.661469,41.35443],[-73.546453,41.365384],[-73.655992,40.987475],[-73.781961,40.883413],[-73.918885,40.916275],[-73.8915,40.998429],[-73.984608,41.321569],[-73.661469,41.35443]]]},"id":"36119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.367994,41.201076],[-74.504917,41.08606],[-74.76781,40.910798],[-74.96498,41.091537],[-74.96498,41.097014],[-74.992365,41.091537],[-74.69661,41.359907],[-74.367994,41.201076]]]},"id":"34037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.537309,41.348953],[-81.389431,41.348953],[-81.394908,40.987475],[-81.646848,40.916275],[-81.690663,40.987475],[-81.685186,41.277753],[-81.537309,41.348953]]]},"id":"39153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.389431,41.348953],[-81.000569,41.348953],[-81.000569,41.135353],[-81.0882,40.987475],[-81.394908,40.987475],[-81.389431,41.348953],[-81.389431,41.348953]]]},"id":"39133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.050754,41.332523],[-90.43186,41.327046],[-90.437337,41.151784],[-90.437337,41.064153],[-90.667368,41.069629],[-90.787861,41.069629],[-90.946692,41.069629],[-90.946692,41.075106],[-91.072662,41.332523],[-91.050754,41.332523]]]},"id":"17131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.984608,41.321569],[-73.8915,40.998429],[-74.21464,41.135353],[-74.236547,41.14083],[-73.979131,41.327046],[-73.984608,41.321569]]]},"id":"36087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.16121,41.310615],[-89.16121,41.102491],[-89.467918,41.146307],[-89.16121,41.310615]]]},"id":"17155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.317785,41.310615],[-76.312308,41.310615],[-76.208246,40.949137],[-76.378031,40.773875],[-76.525908,40.883413],[-76.640924,41.157261],[-76.449231,41.277753],[-76.317785,41.310615]]]},"id":"42037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.786498,41.294184],[-87.529082,41.299661],[-87.529082,41.168214],[-87.523605,41.009383],[-88.131545,40.998429],[-88.246561,40.992952],[-88.252038,41.113445],[-88.246561,41.201076],[-87.786498,41.294184]]]},"id":"17091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.650491,41.294184],[-85.305444,41.266799],[-85.332828,41.003906],[-85.376644,41.003906],[-85.645014,41.003906],[-85.683353,41.047722],[-85.650491,41.294184]]]},"id":"18183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.840821,41.288707],[-82.342419,41.28323],[-82.336942,41.064153],[-82.375281,41.064153],[-82.435527,40.992952],[-82.687466,40.992952],[-82.725805,40.998429],[-82.829867,40.998429],[-82.840821,41.255845],[-82.840821,41.288707]]]},"id":"39077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.036157,41.255845],[-86.932095,41.239415],[-86.932095,41.173691],[-86.932095,40.910798],[-87.096403,40.735536],[-87.266188,40.735536],[-87.277142,41.21203],[-87.277142,41.217507],[-87.216896,41.239415],[-87.036157,41.255845]]]},"id":"18073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.685186,41.277753],[-81.690663,40.987475],[-82.079526,40.992952],[-82.128818,40.992952],[-82.172634,41.064153],[-81.876879,41.277753],[-81.685186,41.277753]]]},"id":"39103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.845381,41.272276],[-84.801565,41.272276],[-84.801565,41.250368],[-84.801565,40.987475],[-84.801565,40.921752],[-84.878242,40.921752],[-85.075412,40.916275],[-85.108274,40.916275],[-85.338305,40.916275],[-85.332828,41.003906],[-85.305444,41.266799],[-85.190428,41.266799],[-84.845381,41.272276]]]},"id":"18003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.070852,41.255845],[-82.840821,41.255845],[-82.829867,40.998429],[-83.114668,40.992952],[-83.421376,40.992952],[-83.421376,41.168214],[-83.421376,41.255845],[-83.070852,41.255845]]]},"id":"39147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.234714,41.228461],[-78.092313,41.217507],[-78.037544,41.151784],[-78.360683,40.735536],[-78.349729,40.724582],[-78.804316,40.724582],[-78.804316,40.905321],[-78.711208,41.201076],[-78.234714,41.228461]]]},"id":"42033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.577011,41.250368],[-84.341502,41.162737],[-84.401749,40.992952],[-84.456518,40.987475],[-84.801565,40.987475],[-84.801565,41.250368],[-84.577011,41.250368]]]},"id":"39125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.708927,41.113445],[-77.144803,41.042245],[-77.36388,40.845075],[-77.681543,40.730059],[-78.114221,40.741013],[-78.360683,40.735536],[-78.037544,41.151784],[-77.708927,41.113445]]]},"id":"42027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.271689,41.244892],[-74.992365,41.091537],[-74.96498,41.097014],[-75.118335,40.965568],[-75.474336,40.812213],[-75.649598,41.124399],[-75.600305,41.162737],[-75.507197,41.233938],[-75.35932,41.239415],[-75.271689,41.244892]]]},"id":"42089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.047063,41.250368],[-111.047063,40.998429],[-110.05026,40.998429],[-110.000968,40.998429],[-110.000968,40.812213],[-110.148845,40.812213],[-110.904663,40.680767],[-111.430449,40.686244],[-111.550942,40.609566],[-111.638573,40.801259],[-111.266141,41.146307],[-111.047063,41.250368]]]},"id":"49043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.856781,41.233938],[-89.637704,41.146307],[-89.637704,40.976521],[-89.96632,40.976521],[-89.988228,40.976521],[-89.982751,41.151784],[-89.856781,41.233938]]]},"id":"17175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.119651,41.222984],[-102.053927,41.222984],[-102.053927,41.003906],[-102.053927,41.003906],[-102.623529,41.003906],[-102.612575,41.222984],[-102.119651,41.222984]]]},"id":"31049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.277142,41.21203],[-87.266188,40.735536],[-87.326435,40.735536],[-87.523605,40.735536],[-87.523605,41.009383],[-87.529082,41.168214],[-87.277142,41.217507],[-87.277142,41.21203]]]},"id":"18111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.367994,41.201076],[-74.236547,41.14083],[-74.21464,41.135353],[-74.132485,40.81769],[-74.269409,40.899844],[-74.504917,41.08606],[-74.367994,41.201076]]]},"id":"34031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.936185,41.190122],[-95.925231,41.190122],[-95.881416,41.157261],[-95.881416,41.053199],[-96.040247,41.064153],[-96.319571,41.047722],[-96.325048,41.190122],[-95.936185,41.190122]]]},"id":"31153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.447773,41.184645],[-121.332757,41.184645],[-121.327281,40.445258],[-121.497066,40.445258],[-123.063471,40.286427],[-122.691039,40.576705],[-122.499346,41.184645],[-121.447773,41.184645]]]},"id":"06089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.943895,41.184645],[-120.001861,41.184645],[-120.001861,39.722302],[-120.149738,39.705871],[-120.209985,40.08378],[-121.119157,40.445258],[-121.327281,40.445258],[-121.332757,41.184645],[-120.943895,41.184645]]]},"id":"06035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.799755,41.173691],[-76.734032,41.173691],[-76.525908,40.883413],[-76.378031,40.773875],[-76.70117,40.658859],[-76.947633,40.625997],[-76.936679,40.636951],[-76.799755,40.883413],[-76.89834,41.14083],[-76.799755,41.173691]]]},"id":"42097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.825729,41.047722],[-97.825729,40.697198],[-98.280315,40.697198],[-98.280315,40.697198],[-98.280315,40.87246],[-97.825729,41.173691],[-97.825729,41.047722]]]},"id":"31081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.998289,41.173691],[-79.697057,41.173691],[-79.69158,41.168214],[-79.69158,40.669813],[-80.146166,40.67529],[-80.15712,40.856029],[-80.096873,41.069629],[-79.998289,41.173691]]]},"id":"42019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.242001,41.173691],[-86.077692,41.173691],[-85.946246,41.042245],[-85.946246,40.998429],[-86.1708,40.910798],[-86.466555,40.910798],[-86.466555,41.173691],[-86.242001,41.173691]]]},"id":"18049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.669202,41.173691],[-86.466555,41.173691],[-86.466555,40.910798],[-86.581571,40.910798],[-86.877326,40.910798],[-86.932095,40.910798],[-86.932095,41.173691],[-86.669202,41.173691]]]},"id":"18131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.734032,41.173691],[-76.640924,41.157261],[-76.525908,40.883413],[-76.734032,41.173691]]]},"id":"42093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.603949,41.020337],[-79.215086,41.053199],[-79.215086,40.910798],[-79.450595,40.527412],[-79.538226,40.54932],[-79.69158,40.669813],[-79.69158,40.669813],[-79.69158,41.168214],[-79.603949,41.020337]]]},"id":"42005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.881439,41.168214],[-83.421376,41.168214],[-83.421376,40.992952],[-83.514484,40.81769],[-83.574731,40.81769],[-83.881439,40.81769],[-83.881439,40.921752],[-83.881439,41.168214]]]},"id":"39063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.029317,41.168214],[-83.881439,41.168214],[-83.881439,40.921752],[-84.341502,40.861506],[-84.401749,40.992952],[-84.341502,41.162737],[-84.226487,41.168214],[-84.029317,41.168214]]]},"id":"39137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.943495,41.162737],[-91.713464,41.162737],[-91.718941,40.899844],[-92.118758,40.899844],[-92.179004,40.899844],[-92.179004,41.162737],[-91.943495,41.162737]]]},"id":"19101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.598448,41.162737],[-91.483432,41.162737],[-91.368417,41.075106],[-91.406755,40.812213],[-91.603925,40.812213],[-91.718941,40.812213],[-91.718941,40.899844],[-91.713464,41.162737],[-91.598448,41.162737]]]},"id":"19087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.261158,41.162737],[-92.179004,41.162737],[-92.179004,40.899844],[-92.639067,40.899844],[-92.639067,41.162737],[-92.409035,41.162737],[-92.261158,41.162737]]]},"id":"19179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.674209,41.162737],[-93.559193,41.162737],[-93.559193,40.899844],[-93.663255,40.899844],[-94.013779,40.894367],[-94.013779,41.157261],[-93.789224,41.162737],[-93.674209,41.162737]]]},"id":"19039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.655498,41.162737],[-92.639067,41.162737],[-92.639067,40.899844],[-93.09913,40.899844],[-93.09913,41.162737],[-92.869098,41.162737],[-92.655498,41.162737]]]},"id":"19135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.09913,41.162737],[-93.09913,40.899844],[-93.559193,40.899844],[-93.559193,41.162737],[-93.329161,41.162737],[-93.09913,41.162737]]]},"id":"19117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.42596,40.609566],[-73.49716,40.921752],[-72.100541,40.992952],[-73.42596,40.609566]]]},"id":"36103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.673292,41.157261],[-95.383014,41.157261],[-95.383014,40.899844],[-95.519938,40.899844],[-95.815692,40.899844],[-95.881416,41.053199],[-95.881416,41.157261],[-95.673292,41.157261]]]},"id":"19129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.267998,41.157261],[-95.158459,41.157261],[-94.928428,41.157261],[-94.928428,40.899844],[-95.289906,40.899844],[-95.383014,40.899844],[-95.383014,41.157261],[-95.267998,41.157261]]]},"id":"19137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.813412,41.157261],[-94.698396,41.157261],[-94.468365,41.157261],[-94.468365,40.899844],[-94.857228,40.899844],[-94.928428,40.899844],[-94.928428,41.157261],[-94.813412,41.157261]]]},"id":"19003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.468365,41.157261],[-94.24381,41.157261],[-94.013779,41.157261],[-94.013779,40.894367],[-94.358826,40.899844],[-94.468365,40.899844],[-94.468365,41.157261]]]},"id":"19175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.011005,41.151784],[-111.857651,41.14083],[-111.737158,40.861506],[-111.98362,40.921752],[-112.262944,40.773875],[-112.492976,41.075106],[-112.011005,41.151784]]]},"id":"49011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.207305,41.151784],[-89.982751,41.151784],[-89.988228,40.976521],[-89.988228,40.713628],[-90.442814,40.713628],[-90.437337,41.064153],[-90.437337,41.151784],[-90.207305,41.151784]]]},"id":"17095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.144803,41.069629],[-76.89834,41.14083],[-76.799755,40.883413],[-76.854525,40.88889],[-77.358403,40.806736],[-77.36388,40.845075],[-77.144803,41.042245],[-77.144803,41.069629]]]},"id":"42119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.522688,41.146307],[-89.467918,41.146307],[-89.16121,41.102491],[-89.046194,40.927229],[-89.111917,40.927229],[-89.473395,40.921752],[-89.637704,40.976521],[-89.637704,41.146307],[-89.522688,41.146307]]]},"id":"17123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.786968,41.135353],[-80.518598,41.135353],[-80.518598,41.124399],[-80.518598,40.899844],[-80.858168,40.927229],[-81.0882,40.905321],[-81.0882,40.987475],[-81.000569,41.135353],[-80.786968,41.135353]]]},"id":"39099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.21464,41.135353],[-73.8915,40.998429],[-73.918885,40.916275],[-73.918885,40.910798],[-73.935316,40.883413],[-73.984608,40.795782],[-74.011993,40.823167],[-74.148916,40.784829],[-74.132485,40.81769],[-74.21464,41.135353]]]},"id":"34003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.687936,41.129876],[-75.649598,41.124399],[-75.474336,40.812213],[-75.611259,40.784829],[-75.759137,40.735536],[-75.994645,40.910798],[-75.687936,41.129876]]]},"id":"42025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.518598,41.124399],[-80.096873,41.069629],[-80.15712,40.856029],[-80.255705,40.856029],[-80.518598,40.850552],[-80.518598,40.899844],[-80.518598,41.124399]]]},"id":"42073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.410869,41.107968],[-88.252038,41.113445],[-88.246561,40.992952],[-88.460161,40.615043],[-88.712101,40.757444],[-88.931178,40.751967],[-88.931178,40.927229],[-88.586131,41.107968],[-88.410869,41.107968]]]},"id":"17105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.96498,41.091537],[-74.76781,40.910798],[-74.888303,40.790306],[-75.189535,40.593136],[-75.195012,40.609566],[-75.118335,40.965568],[-74.96498,41.097014],[-74.96498,41.091537]]]},"id":"34041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.504917,41.08606],[-74.269409,40.899844],[-74.28584,40.894367],[-74.373471,40.741013],[-74.461102,40.67529],[-74.718518,40.719105],[-74.723995,40.719105],[-74.888303,40.790306],[-74.76781,40.910798],[-74.504917,41.08606]]]},"id":"34027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.073531,40.998429],[-112.492976,41.075106],[-112.262944,40.773875],[-112.175313,40.467166],[-112.18079,40.01258],[-112.339621,39.903041],[-114.048427,39.908518],[-114.048427,40.116642],[-114.04295,40.998429],[-113.073531,40.998429]]]},"id":"49045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.324601,41.075106],[-90.946692,41.075106],[-90.946692,41.069629],[-91.111001,40.697198],[-91.406755,40.812213],[-91.368417,41.075106],[-91.324601,41.075106]]]},"id":"19057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.946692,41.069629],[-90.787861,41.069629],[-90.787861,40.636951],[-90.8974,40.636951],[-90.902877,40.636951],[-91.187678,40.636951],[-91.111001,40.697198],[-90.946692,41.069629]]]},"id":"17071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.667368,41.069629],[-90.437337,41.064153],[-90.442814,40.713628],[-90.442814,40.625997],[-90.787861,40.636951],[-90.787861,41.069629],[-90.667368,41.069629]]]},"id":"17187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.040247,41.064153],[-95.881416,41.053199],[-95.815692,40.899844],[-95.832123,40.784829],[-95.892369,40.784829],[-96.461971,40.784829],[-96.461971,41.01486],[-96.319571,41.047722],[-96.040247,41.064153]]]},"id":"31025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.375281,41.064153],[-82.336942,41.064153],[-82.172634,41.064153],[-82.128818,40.992952],[-82.128818,40.669813],[-82.221926,40.565751],[-82.336942,40.554797],[-82.435527,40.992952],[-82.375281,41.064153]]]},"id":"39005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.994598,41.047722],[-99.424996,41.047722],[-99.419519,40.669813],[-99.644074,40.686244],[-99.983644,40.697198],[-100.224629,40.702674],[-100.224629,41.047722],[-99.994598,41.047722]]]},"id":"31047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.052564,41.047722],[-98.745855,41.047722],[-98.723948,41.047722],[-98.723948,40.697198],[-98.723948,40.691721],[-98.953979,40.653382],[-99.178534,40.658859],[-99.419519,40.669813],[-99.424996,41.047722],[-99.205918,41.047722],[-99.052564,41.047722]]]},"id":"31019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.365666,41.047722],[-97.365666,40.697198],[-97.798345,40.697198],[-97.825729,40.697198],[-97.825729,40.697198],[-97.825729,41.047722],[-97.365666,41.047722]]]},"id":"31185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.349236,41.047722],[-96.91108,41.047722],[-96.91108,40.697198],[-97.365666,40.697198],[-97.365666,41.047722],[-97.349236,41.047722]]]},"id":"31159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.683353,41.047722],[-85.645014,41.003906],[-85.639537,40.653382],[-85.864092,40.653382],[-85.946246,40.998429],[-85.946246,41.042245],[-85.683353,41.047722]]]},"id":"18169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.70204,41.047722],[-98.285792,41.047722],[-98.280315,40.87246],[-98.280315,40.697198],[-98.723948,40.697198],[-98.723948,41.047722],[-98.70204,41.047722]]]},"id":"31079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.91108,41.047722],[-96.461971,41.01486],[-96.461971,40.784829],[-96.461971,40.521935],[-96.478402,40.521935],[-96.91108,40.521935],[-96.91108,40.697198],[-96.91108,41.047722],[-96.91108,41.047722]]]},"id":"31109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.523605,41.009383],[-87.523605,40.735536],[-87.529082,40.489074],[-87.841267,40.489074],[-87.934375,40.483597],[-88.131545,40.998429],[-88.131545,40.998429],[-87.523605,41.009383]]]},"id":"17075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.376644,41.003906],[-85.332828,41.003906],[-85.338305,40.916275],[-85.447844,40.653382],[-85.639537,40.653382],[-85.645014,41.003906],[-85.376644,41.003906]]]},"id":"18069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.878665,41.003906],[-101.248817,41.003906],[-101.248817,40.697198],[-101.347402,40.697198],[-101.571957,40.697198],[-102.053927,40.697198],[-102.053927,40.751967],[-102.053927,41.003906],[-102.053927,41.003906],[-101.878665,41.003906]]]},"id":"31135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.317267,41.003906],[-106.857204,41.003906],[-106.654557,40.445258],[-106.627173,39.924949],[-107.032466,39.919472],[-107.037943,40.089257],[-107.109143,40.226181],[-107.43776,40.220704],[-107.317267,41.003906]]]},"id":"08107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.919731,41.003906],[-107.317267,41.003906],[-107.43776,40.220704],[-109.053457,40.220704],[-109.04798,40.653382],[-109.04798,40.998429],[-107.919731,41.003906]]]},"id":"08081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.857204,41.003906],[-106.320464,40.998429],[-106.189017,40.998429],[-105.854924,40.483597],[-106.654557,40.445258],[-106.857204,41.003906]]]},"id":"08057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.623529,41.003906],[-102.053927,41.003906],[-102.053927,40.751967],[-102.327774,40.74649],[-102.650914,40.751967],[-102.650914,41.003906],[-102.623529,41.003906]]]},"id":"08115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.650914,41.003906],[-102.650914,40.751967],[-102.667345,40.439781],[-102.78236,40.439781],[-103.466978,40.434304],[-103.581994,40.521935],[-103.576517,41.003906],[-103.384824,41.003906],[-102.650914,41.003906]]]},"id":"08075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.677828,40.998429],[-109.04798,40.998429],[-109.04798,40.653382],[-109.283489,40.856029],[-109.97906,40.812213],[-110.000968,40.812213],[-110.000968,40.998429],[-109.677828,40.998429]]]},"id":"49009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.576517,41.003906],[-103.581994,40.521935],[-104.091349,40.521935],[-104.151596,40.001626],[-105.055291,40.001626],[-105.055291,40.264519],[-104.945752,40.998429],[-104.053011,41.003906],[-103.576517,41.003906]]]},"id":"08123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.016928,40.998429],[-116.58425,40.998429],[-116.600681,39.163654],[-117.772746,39.092454],[-117.493422,39.530609],[-117.542715,40.001626],[-117.301729,40.527412],[-117.016928,40.998429]]]},"id":"32015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.58425,40.998429],[-116.157049,40.998429],[-115.833909,40.127596],[-115.90511,39.163654],[-116.233726,39.163654],[-116.600681,39.163654],[-116.58425,40.998429]]]},"id":"32011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.946246,40.998429],[-85.864092,40.653382],[-85.864092,40.565751],[-85.875046,40.565751],[-86.165323,40.560274],[-86.1708,40.910798],[-85.946246,40.998429]]]},"id":"18103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.279845,40.998429],[-104.945752,40.998429],[-105.055291,40.264519],[-105.340092,40.259042],[-105.652277,40.259042],[-105.854924,40.483597],[-106.189017,40.998429],[-105.279845,40.998429]]]},"id":"08069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.131545,40.998429],[-87.934375,40.483597],[-87.934375,40.401443],[-88.109637,40.401443],[-88.460161,40.401443],[-88.460161,40.615043],[-88.246561,40.992952],[-88.131545,40.998429],[-88.131545,40.998429]]]},"id":"17053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.725805,40.998429],[-82.725805,40.713628],[-82.857251,40.713628],[-82.857251,40.702674],[-82.977744,40.702674],[-83.109191,40.702674],[-83.114668,40.992952],[-82.829867,40.998429],[-82.725805,40.998429]]]},"id":"39033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.687466,40.992952],[-82.435527,40.992952],[-82.336942,40.554797],[-82.621743,40.54932],[-82.725805,40.713628],[-82.725805,40.998429],[-82.687466,40.992952]]]},"id":"39139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.114668,40.992952],[-83.109191,40.702674],[-83.421376,40.686244],[-83.514484,40.81769],[-83.421376,40.992952],[-83.114668,40.992952]]]},"id":"39175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.079526,40.992952],[-81.690663,40.987475],[-81.646848,40.916275],[-81.652325,40.669813],[-81.657801,40.669813],[-82.128818,40.669813],[-82.128818,40.992952],[-82.079526,40.992952]]]},"id":"39169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.456518,40.987475],[-84.401749,40.992952],[-84.341502,40.861506],[-84.396272,40.686244],[-84.456518,40.686244],[-84.774181,40.730059],[-84.801565,40.730059],[-84.801565,40.921752],[-84.801565,40.987475],[-84.456518,40.987475]]]},"id":"39161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.394908,40.987475],[-81.0882,40.987475],[-81.0882,40.905321],[-81.0882,40.730059],[-81.121061,40.730059],[-81.318231,40.653382],[-81.42777,40.653382],[-81.652325,40.636951],[-81.652325,40.669813],[-81.646848,40.916275],[-81.394908,40.987475]]]},"id":"39151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.96632,40.976521],[-89.637704,40.976521],[-89.473395,40.921752],[-89.555549,40.74649],[-89.873212,40.510982],[-89.988228,40.713628],[-89.988228,40.976521],[-89.96632,40.976521]]]},"id":"17143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.118335,40.965568],[-75.195012,40.609566],[-75.331935,40.538366],[-75.611259,40.784829],[-75.474336,40.812213],[-75.118335,40.965568]]]},"id":"42095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.013732,40.856029],[-117.301729,40.527412],[-117.542715,40.001626],[-117.948008,40.001626],[-119.224135,40.001626],[-119.311766,40.960091],[-118.013732,40.856029]]]},"id":"32027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.208246,40.949137],[-75.994645,40.910798],[-75.759137,40.735536],[-75.890583,40.67529],[-76.438277,40.494551],[-76.536862,40.554797],[-76.70117,40.658859],[-76.378031,40.773875],[-76.208246,40.949137]]]},"id":"42107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.858168,40.927229],[-80.518598,40.899844],[-80.518598,40.850552],[-80.518598,40.636951],[-80.666475,40.582182],[-80.863645,40.598613],[-81.0882,40.730059],[-81.0882,40.905321],[-80.858168,40.927229]]]},"id":"39029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.111917,40.927229],[-89.046194,40.927229],[-88.931178,40.927229],[-88.931178,40.751967],[-89.270749,40.593136],[-89.50078,40.74649],[-89.555549,40.74649],[-89.473395,40.921752],[-89.111917,40.927229]]]},"id":"17203"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.49716,40.921752],[-73.42596,40.609566],[-73.754577,40.587659],[-73.76553,40.801259],[-73.49716,40.921752]]]},"id":"36059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.878242,40.921752],[-84.801565,40.921752],[-84.801565,40.730059],[-84.801565,40.571228],[-85.069935,40.565751],[-85.075412,40.916275],[-84.878242,40.921752]]]},"id":"18001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.98362,40.921752],[-111.737158,40.861506],[-111.638573,40.801259],[-111.550942,40.609566],[-111.594758,40.576705],[-111.594758,40.576705],[-112.175313,40.467166],[-112.262944,40.773875],[-111.98362,40.921752]]]},"id":"49035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.881439,40.921752],[-83.881439,40.81769],[-83.881439,40.642428],[-84.253871,40.686244],[-84.396272,40.686244],[-84.341502,40.861506],[-83.881439,40.921752]]]},"id":"39003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.108274,40.916275],[-85.075412,40.916275],[-85.069935,40.565751],[-85.201382,40.565751],[-85.22329,40.565751],[-85.447844,40.565751],[-85.447844,40.653382],[-85.338305,40.916275],[-85.108274,40.916275]]]},"id":"18179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.918885,40.910798],[-73.918885,40.916275],[-73.781961,40.883413],[-73.787438,40.801259],[-73.814823,40.806736],[-73.913408,40.795782],[-73.924362,40.877937],[-73.935316,40.883413],[-73.918885,40.910798]]]},"id":"36005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.877326,40.910798],[-86.581571,40.910798],[-86.581571,40.735536],[-86.773264,40.560274],[-87.096403,40.560274],[-87.096403,40.735536],[-86.932095,40.910798],[-86.877326,40.910798]]]},"id":"18181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.215086,40.910798],[-78.804316,40.905321],[-78.804316,40.724582],[-78.974101,40.395966],[-79.450595,40.527412],[-79.215086,40.910798]]]},"id":"42063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.581571,40.910798],[-86.466555,40.910798],[-86.1708,40.910798],[-86.165323,40.560274],[-86.373447,40.560274],[-86.581571,40.735536],[-86.581571,40.910798]]]},"id":"18017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.28584,40.894367],[-74.269409,40.899844],[-74.132485,40.81769],[-74.148916,40.784829],[-74.137962,40.67529],[-74.362517,40.735536],[-74.373471,40.741013],[-74.28584,40.894367]]]},"id":"34013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.519938,40.899844],[-95.383014,40.899844],[-95.37206,40.582182],[-95.7664,40.587659],[-95.832123,40.784829],[-95.815692,40.899844],[-95.519938,40.899844]]]},"id":"19071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.289906,40.899844],[-94.928428,40.899844],[-94.917474,40.576705],[-95.163936,40.576705],[-95.202275,40.576705],[-95.37206,40.582182],[-95.383014,40.899844],[-95.289906,40.899844]]]},"id":"19145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.118758,40.899844],[-91.718941,40.899844],[-91.718941,40.812213],[-91.718941,40.598613],[-91.833957,40.609566],[-91.943495,40.60409],[-92.179004,40.598613],[-92.179004,40.899844],[-92.118758,40.899844]]]},"id":"19177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.857228,40.899844],[-94.468365,40.899844],[-94.473842,40.571228],[-94.632673,40.571228],[-94.917474,40.576705],[-94.928428,40.899844],[-94.857228,40.899844]]]},"id":"19173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.179004,40.899844],[-92.179004,40.598613],[-92.348789,40.598613],[-92.452851,40.593136],[-92.639067,40.593136],[-92.639067,40.899844],[-92.179004,40.899844]]]},"id":"19051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.358826,40.899844],[-94.013779,40.894367],[-94.013779,40.571228],[-94.232857,40.571228],[-94.287626,40.571228],[-94.473842,40.571228],[-94.468365,40.899844],[-94.358826,40.899844]]]},"id":"19159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.663255,40.899844],[-93.559193,40.899844],[-93.559193,40.582182],[-93.772794,40.576705],[-94.013779,40.571228],[-94.013779,40.894367],[-93.663255,40.899844]]]},"id":"19053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.639067,40.899844],[-92.639067,40.593136],[-92.715744,40.587659],[-92.748606,40.587659],[-93.09913,40.582182],[-93.09913,40.899844],[-92.639067,40.899844]]]},"id":"19007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.09913,40.899844],[-93.09913,40.582182],[-93.372977,40.582182],[-93.526331,40.582182],[-93.559193,40.582182],[-93.559193,40.899844],[-93.09913,40.899844]]]},"id":"19185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.854525,40.88889],[-76.799755,40.883413],[-76.936679,40.636951],[-77.133849,40.686244],[-77.287203,40.691721],[-77.358403,40.806736],[-76.854525,40.88889]]]},"id":"42109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.924362,40.877937],[-73.913408,40.795782],[-73.9627,40.735536],[-74.022947,40.680767],[-74.022947,40.708151],[-73.984608,40.795782],[-73.935316,40.883413],[-73.924362,40.877937]]]},"id":"36061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.283489,40.856029],[-109.04798,40.653382],[-109.053457,40.220704],[-109.053457,39.662056],[-109.053457,39.497748],[-110.022876,39.459409],[-110.022876,39.470363],[-109.968106,39.804456],[-109.97906,40.812213],[-109.283489,40.856029]]]},"id":"49047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.255705,40.856029],[-80.15712,40.856029],[-80.146166,40.67529],[-80.359767,40.47812],[-80.398105,40.47812],[-80.518598,40.47812],[-80.518598,40.636951],[-80.518598,40.850552],[-80.255705,40.856029]]]},"id":"42007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.36388,40.845075],[-77.358403,40.806736],[-77.287203,40.691721],[-77.752743,40.379535],[-77.681543,40.730059],[-77.36388,40.845075]]]},"id":"42087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.148845,40.812213],[-110.000968,40.812213],[-109.97906,40.812213],[-109.968106,39.804456],[-110.855371,39.81541],[-110.893709,39.897564],[-110.904663,40.680767],[-110.148845,40.812213]]]},"id":"49013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.011993,40.823167],[-73.984608,40.795782],[-74.022947,40.708151],[-74.15987,40.642428],[-74.137962,40.67529],[-74.148916,40.784829],[-74.011993,40.823167]]]},"id":"34017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.574731,40.81769],[-83.514484,40.81769],[-83.421376,40.686244],[-83.415899,40.505505],[-83.519961,40.505505],[-83.881439,40.538366],[-83.881439,40.642428],[-83.881439,40.81769],[-83.574731,40.81769]]]},"id":"39065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.603925,40.812213],[-91.406755,40.812213],[-91.111001,40.697198],[-91.187678,40.636951],[-91.417709,40.379535],[-91.718941,40.598613],[-91.718941,40.812213],[-91.603925,40.812213]]]},"id":"19111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.814823,40.806736],[-73.787438,40.801259],[-73.76553,40.801259],[-73.754577,40.587659],[-73.940792,40.565751],[-73.951746,40.741013],[-73.9627,40.735536],[-73.913408,40.795782],[-73.814823,40.806736]]]},"id":"36081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.888303,40.790306],[-74.723995,40.719105],[-74.745903,40.423351],[-74.800672,40.417874],[-74.943073,40.341196],[-75.189535,40.593136],[-74.888303,40.790306]]]},"id":"34019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.611259,40.784829],[-75.331935,40.538366],[-75.48529,40.417874],[-75.490767,40.423351],[-75.529105,40.445258],[-75.890583,40.67529],[-75.759137,40.735536],[-75.611259,40.784829]]]},"id":"42077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.892369,40.784829],[-95.832123,40.784829],[-95.7664,40.587659],[-95.71163,40.521935],[-96.023816,40.521935],[-96.067632,40.521935],[-96.461971,40.521935],[-96.461971,40.784829],[-95.892369,40.784829]]]},"id":"31131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.718518,40.719105],[-74.461102,40.67529],[-74.461102,40.598613],[-74.619933,40.374058],[-74.745903,40.423351],[-74.723995,40.719105],[-74.718518,40.719105]]]},"id":"34035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.712101,40.757444],[-88.460161,40.615043],[-88.460161,40.401443],[-88.460161,40.28095],[-88.575177,40.28095],[-88.920224,40.28095],[-89.150256,40.28095],[-89.265272,40.324766],[-89.270749,40.593136],[-88.931178,40.751967],[-88.712101,40.757444]]]},"id":"17113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.327774,40.74649],[-102.053927,40.751967],[-102.053927,40.697198],[-102.053927,40.439781],[-102.426359,40.439781],[-102.667345,40.439781],[-102.650914,40.751967],[-102.327774,40.74649]]]},"id":"08095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.50078,40.74649],[-89.270749,40.593136],[-89.265272,40.324766],[-89.604842,40.319289],[-89.89512,40.434304],[-89.922504,40.434304],[-89.873212,40.510982],[-89.555549,40.74649],[-89.50078,40.74649]]]},"id":"17179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.114221,40.741013],[-77.681543,40.730059],[-77.752743,40.379535],[-77.703451,40.264519],[-77.862282,40.061872],[-78.136129,40.165934],[-78.256622,40.297381],[-78.114221,40.741013]]]},"id":"42061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.360683,40.735536],[-78.114221,40.741013],[-78.256622,40.297381],[-78.6181,40.324766],[-78.349729,40.724582],[-78.360683,40.735536]]]},"id":"42013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.362517,40.735536],[-74.137962,40.67529],[-74.15987,40.642428],[-74.209163,40.593136],[-74.291317,40.593136],[-74.461102,40.598613],[-74.461102,40.67529],[-74.373471,40.741013],[-74.362517,40.735536]]]},"id":"34039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.951746,40.741013],[-73.940792,40.565751],[-74.022947,40.680767],[-73.9627,40.735536],[-73.951746,40.741013]]]},"id":"36047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.773264,40.560274],[-86.581571,40.735536],[-86.373447,40.560274],[-86.373447,40.434304],[-86.696587,40.434304],[-86.773264,40.560274]]]},"id":"18015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.326435,40.735536],[-87.266188,40.735536],[-87.096403,40.735536],[-87.096403,40.560274],[-87.096403,40.47812],[-87.452404,40.47812],[-87.529082,40.47812],[-87.529082,40.489074],[-87.523605,40.735536],[-87.326435,40.735536]]]},"id":"18007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.121061,40.730059],[-81.0882,40.730059],[-80.863645,40.598613],[-80.940322,40.423351],[-81.186785,40.434304],[-81.268939,40.434304],[-81.318231,40.653382],[-81.121061,40.730059]]]},"id":"39019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.774181,40.730059],[-84.456518,40.686244],[-84.43461,40.35215],[-84.43461,40.35215],[-84.456518,40.35215],[-84.801565,40.35215],[-84.801565,40.571228],[-84.801565,40.730059],[-84.774181,40.730059]]]},"id":"39107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.804316,40.724582],[-78.349729,40.724582],[-78.6181,40.324766],[-78.656438,40.242611],[-79.001485,40.286427],[-79.056255,40.286427],[-78.974101,40.395966],[-78.804316,40.724582]]]},"id":"42021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.442814,40.713628],[-89.988228,40.713628],[-89.873212,40.510982],[-89.922504,40.434304],[-90.201828,40.182365],[-90.448291,40.275473],[-90.442814,40.625997],[-90.442814,40.713628]]]},"id":"17057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.857251,40.713628],[-82.725805,40.713628],[-82.621743,40.54932],[-82.742236,40.346673],[-83.02156,40.434304],[-82.857251,40.702674],[-82.857251,40.713628]]]},"id":"39117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.977744,40.702674],[-82.857251,40.702674],[-83.02156,40.434304],[-83.246114,40.445258],[-83.273499,40.505505],[-83.415899,40.505505],[-83.421376,40.686244],[-83.109191,40.702674],[-82.977744,40.702674]]]},"id":"39101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.449184,40.702674],[-100.224629,40.702674],[-99.983644,40.697198],[-100.093183,40.35215],[-100.197245,40.35215],[-100.383461,40.35215],[-100.755893,40.35215],[-100.7778,40.35215],[-100.7778,40.702674],[-100.449184,40.702674]]]},"id":"31063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.7778,40.702674],[-100.7778,40.35215],[-101.111894,40.35215],[-101.325494,40.35215],[-101.325494,40.35215],[-101.341925,40.35215],[-101.347402,40.697198],[-101.248817,40.697198],[-100.7778,40.702674]]]},"id":"31085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.571957,40.697198],[-101.347402,40.697198],[-101.341925,40.35215],[-102.053927,40.346673],[-102.053927,40.439781],[-102.053927,40.697198],[-101.571957,40.697198]]]},"id":"31029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.983644,40.697198],[-99.644074,40.686244],[-99.644074,40.35215],[-99.989121,40.35215],[-100.093183,40.35215],[-99.983644,40.697198]]]},"id":"31073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.723948,40.697198],[-98.280315,40.697198],[-98.280315,40.697198],[-98.280315,40.35215],[-98.291269,40.35215],[-98.723948,40.35215],[-98.723948,40.691721],[-98.723948,40.697198]]]},"id":"31001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.798345,40.697198],[-97.365666,40.697198],[-97.365666,40.35215],[-97.50259,40.35215],[-97.820252,40.35215],[-97.825729,40.35215],[-97.825729,40.697198],[-97.798345,40.697198]]]},"id":"31059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.825729,40.697198],[-97.825729,40.35215],[-98.011945,40.35215],[-98.274839,40.35215],[-98.280315,40.35215],[-98.280315,40.697198],[-97.825729,40.697198],[-97.825729,40.697198]]]},"id":"31035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.365666,40.697198],[-96.91108,40.697198],[-96.91108,40.521935],[-96.916557,40.35215],[-97.365666,40.35215],[-97.365666,40.697198]]]},"id":"31151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.133849,40.686244],[-76.936679,40.636951],[-76.947633,40.625997],[-77.670589,40.291904],[-77.703451,40.264519],[-77.752743,40.379535],[-77.287203,40.691721],[-77.133849,40.686244]]]},"id":"42067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.430449,40.686244],[-110.904663,40.680767],[-110.893709,39.897564],[-111.594758,40.576705],[-111.550942,40.609566],[-111.430449,40.686244]]]},"id":"49051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.953979,40.653382],[-98.723948,40.691721],[-98.723948,40.35215],[-98.729425,40.35215],[-99.11281,40.35215],[-99.178534,40.35215],[-99.178534,40.658859],[-98.953979,40.653382]]]},"id":"31099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.644074,40.686244],[-99.419519,40.669813],[-99.178534,40.658859],[-99.178534,40.35215],[-99.63312,40.35215],[-99.644074,40.35215],[-99.644074,40.686244]]]},"id":"31137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.253871,40.686244],[-83.881439,40.642428],[-83.881439,40.538366],[-84.001932,40.483597],[-84.105994,40.483597],[-84.43461,40.35215],[-84.456518,40.686244],[-84.396272,40.686244],[-84.253871,40.686244]]]},"id":"39011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.538226,40.54932],[-79.450595,40.527412],[-78.974101,40.395966],[-79.056255,40.286427],[-79.291763,40.039965],[-79.499887,40.13855],[-79.877796,40.127596],[-79.872319,40.198796],[-79.69158,40.669813],[-79.538226,40.54932]]]},"id":"42129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.890583,40.67529],[-75.529105,40.445258],[-75.69889,40.242611],[-75.874152,40.13855],[-76.153476,40.313812],[-76.438277,40.494551],[-75.890583,40.67529]]]},"id":"42011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.146166,40.67529],[-79.69158,40.669813],[-79.69158,40.669813],[-79.872319,40.198796],[-80.359767,40.47812],[-80.146166,40.67529]]]},"id":"42003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.657801,40.669813],[-81.652325,40.669813],[-81.652325,40.636951],[-81.707094,40.445258],[-82.183588,40.456212],[-82.221926,40.565751],[-82.128818,40.669813],[-81.657801,40.669813]]]},"id":"39075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.42777,40.653382],[-81.318231,40.653382],[-81.268939,40.434304],[-81.340139,40.215227],[-81.62494,40.220704],[-81.707094,40.445258],[-81.652325,40.636951],[-81.42777,40.653382]]]},"id":"39157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.536862,40.554797],[-76.564247,40.198796],[-76.723078,40.122119],[-76.860002,40.226181],[-76.914771,40.330243],[-76.95311,40.60409],[-76.947633,40.625997],[-76.70117,40.658859],[-76.536862,40.554797]]]},"id":"42043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.447844,40.653382],[-85.447844,40.565751],[-85.442367,40.379535],[-85.513567,40.379535],[-85.579291,40.379535],[-85.672399,40.379535],[-85.864092,40.379535],[-85.864092,40.40692],[-85.864092,40.565751],[-85.864092,40.653382],[-85.639537,40.653382],[-85.447844,40.653382]]]},"id":"18053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.187678,40.636951],[-90.902877,40.636951],[-90.908354,40.286427],[-90.913831,40.193319],[-91.204109,40.198796],[-91.50534,40.198796],[-91.499863,40.248088],[-91.417709,40.379535],[-91.187678,40.636951]]]},"id":"17067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.8974,40.636951],[-90.787861,40.636951],[-90.442814,40.625997],[-90.448291,40.275473],[-90.908354,40.286427],[-90.902877,40.636951],[-90.8974,40.636951]]]},"id":"17109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.518598,40.636951],[-80.518598,40.47812],[-80.518598,40.401443],[-80.633614,40.395966],[-80.666475,40.582182],[-80.518598,40.636951]]]},"id":"54029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.95311,40.60409],[-76.914771,40.330243],[-77.122895,40.297381],[-77.615819,40.198796],[-77.670589,40.291904],[-76.947633,40.625997],[-76.95311,40.60409]]]},"id":"42099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.833957,40.609566],[-91.718941,40.598613],[-91.417709,40.379535],[-91.499863,40.248088],[-91.948972,40.259042],[-91.948972,40.302858],[-91.943495,40.60409],[-91.833957,40.609566]]]},"id":"29045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.291317,40.593136],[-74.209163,40.593136],[-74.225593,40.450735],[-74.48301,40.253565],[-74.619933,40.374058],[-74.461102,40.598613],[-74.291317,40.593136]]]},"id":"34023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.195012,40.609566],[-75.189535,40.593136],[-74.943073,40.341196],[-74.723995,40.149503],[-74.975934,40.050919],[-75.014273,40.13855],[-75.48529,40.417874],[-75.331935,40.538366],[-75.195012,40.609566]]]},"id":"42017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.943495,40.60409],[-91.948972,40.302858],[-92.140665,40.302858],[-92.348789,40.302858],[-92.348789,40.346673],[-92.348789,40.598613],[-92.179004,40.598613],[-91.943495,40.60409]]]},"id":"29199"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.863645,40.598613],[-80.666475,40.582182],[-80.633614,40.395966],[-80.682906,40.187842],[-80.704814,40.15498],[-80.885553,40.160457],[-80.940322,40.423351],[-80.863645,40.598613]]]},"id":"39081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.452851,40.593136],[-92.348789,40.598613],[-92.348789,40.346673],[-92.682882,40.341196],[-92.715744,40.587659],[-92.639067,40.593136],[-92.452851,40.593136]]]},"id":"29197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.748606,40.587659],[-92.715744,40.587659],[-92.682882,40.341196],[-92.858145,40.341196],[-93.186761,40.385012],[-93.3675,40.385012],[-93.372977,40.582182],[-93.09913,40.582182],[-92.748606,40.587659]]]},"id":"29171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.7664,40.587659],[-95.37206,40.582182],[-95.202275,40.576705],[-95.180367,40.264519],[-95.503507,40.264519],[-95.552799,40.264519],[-95.71163,40.521935],[-95.7664,40.587659]]]},"id":"29005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.526331,40.582182],[-93.372977,40.582182],[-93.3675,40.385012],[-93.3675,40.264519],[-93.76184,40.264519],[-93.772794,40.576705],[-93.559193,40.582182],[-93.526331,40.582182]]]},"id":"29129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.163936,40.576705],[-94.917474,40.576705],[-94.632673,40.571228],[-94.599812,40.385012],[-94.605288,40.127596],[-95.043444,40.127596],[-95.180367,40.264519],[-95.202275,40.576705],[-95.163936,40.576705]]]},"id":"29147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.594758,40.576705],[-111.594758,40.576705],[-110.893709,39.897564],[-110.855371,39.81541],[-111.014202,39.81541],[-111.24971,39.81541],[-111.556419,39.81541],[-111.64405,39.81541],[-112.18079,40.01258],[-112.175313,40.467166],[-111.594758,40.576705]]]},"id":"49049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.772794,40.576705],[-93.76184,40.264519],[-93.76184,40.133073],[-94.216426,40.13855],[-94.216426,40.385012],[-94.232857,40.571228],[-94.013779,40.571228],[-93.772794,40.576705]]]},"id":"29081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.221926,40.565751],[-82.183588,40.456212],[-82.194542,40.237135],[-82.75319,40.275473],[-82.742236,40.346673],[-82.621743,40.54932],[-82.336942,40.554797],[-82.221926,40.565751]]]},"id":"39083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.801565,40.571228],[-84.801565,40.35215],[-84.801565,40.308335],[-84.807042,40.308335],[-85.217813,40.308335],[-85.217813,40.379535],[-85.201382,40.565751],[-85.069935,40.565751],[-84.801565,40.571228]]]},"id":"18075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.287626,40.571228],[-94.232857,40.571228],[-94.216426,40.385012],[-94.325965,40.385012],[-94.599812,40.385012],[-94.632673,40.571228],[-94.473842,40.571228],[-94.287626,40.571228]]]},"id":"29227"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.22329,40.565751],[-85.201382,40.565751],[-85.217813,40.379535],[-85.442367,40.379535],[-85.447844,40.565751],[-85.22329,40.565751]]]},"id":"18009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.875046,40.565751],[-85.864092,40.565751],[-85.864092,40.40692],[-86.242001,40.374058],[-86.357016,40.434304],[-86.373447,40.434304],[-86.373447,40.560274],[-86.165323,40.560274],[-85.875046,40.565751]]]},"id":"18067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.096403,40.560274],[-86.773264,40.560274],[-86.696587,40.434304],[-86.696587,40.215227],[-86.921141,40.215227],[-87.090926,40.215227],[-87.090926,40.368581],[-87.096403,40.47812],[-87.096403,40.560274]]]},"id":"18157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.023816,40.521935],[-95.71163,40.521935],[-95.552799,40.264519],[-95.552799,40.264519],[-95.673292,40.264519],[-96.012862,40.259042],[-96.067632,40.264519],[-96.067632,40.521935],[-96.023816,40.521935]]]},"id":"31127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.536862,40.554797],[-76.438277,40.494551],[-76.153476,40.313812],[-76.306831,40.253565],[-76.564247,40.198796],[-76.536862,40.554797]]]},"id":"42075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.881439,40.538366],[-83.519961,40.505505],[-83.552823,40.231658],[-83.881439,40.264519],[-84.012886,40.275473],[-84.001932,40.483597],[-83.881439,40.538366]]]},"id":"39091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.091349,40.521935],[-103.581994,40.521935],[-103.466978,40.434304],[-103.707963,40.001626],[-103.795594,40.001626],[-104.151596,40.001626],[-104.091349,40.521935]]]},"id":"08087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.478402,40.521935],[-96.461971,40.521935],[-96.461971,40.264519],[-96.461971,40.001626],[-96.692003,40.001626],[-96.807019,40.001626],[-96.916557,40.001626],[-96.916557,40.35215],[-96.91108,40.521935],[-96.478402,40.521935]]]},"id":"31067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.067632,40.521935],[-96.067632,40.264519],[-96.325048,40.264519],[-96.461971,40.264519],[-96.461971,40.521935],[-96.067632,40.521935]]]},"id":"31097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.273499,40.505505],[-83.246114,40.445258],[-83.169437,40.144027],[-83.207776,40.105688],[-83.50353,40.111165],[-83.552823,40.231658],[-83.519961,40.505505],[-83.415899,40.505505],[-83.273499,40.505505]]]},"id":"39159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.841267,40.489074],[-87.529082,40.489074],[-87.529082,40.47812],[-87.529082,40.149503],[-87.534558,39.881133],[-87.939852,39.881133],[-87.934375,40.401443],[-87.934375,40.483597],[-87.841267,40.489074]]]},"id":"17183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.854924,40.483597],[-105.652277,40.259042],[-105.674185,39.930426],[-105.690616,39.853749],[-105.926124,39.700394],[-106.43548,39.924949],[-106.627173,39.924949],[-106.654557,40.445258],[-105.854924,40.483597]]]},"id":"08049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.105994,40.483597],[-84.001932,40.483597],[-84.012886,40.275473],[-84.02384,40.182365],[-84.22101,40.198796],[-84.43461,40.198796],[-84.43461,40.35215],[-84.43461,40.35215],[-84.105994,40.483597]]]},"id":"39149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.398105,40.47812],[-80.359767,40.47812],[-79.872319,40.198796],[-79.877796,40.127596],[-79.998289,39.985195],[-80.064012,40.007103],[-80.518598,39.963288],[-80.518598,40.018057],[-80.518598,40.160457],[-80.518598,40.401443],[-80.518598,40.47812],[-80.398105,40.47812]]]},"id":"42125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.452404,40.47812],[-87.096403,40.47812],[-87.090926,40.368581],[-87.255235,40.297381],[-87.408589,40.127596],[-87.529082,40.149503],[-87.529082,40.47812],[-87.452404,40.47812]]]},"id":"18171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.0339,40.100211],[-74.406332,40.171411],[-74.55421,40.078303],[-74.587071,40.13855],[-74.48301,40.253565],[-74.225593,40.450735],[-74.0339,40.100211]]]},"id":"34025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.183588,40.456212],[-81.707094,40.445258],[-81.62494,40.220704],[-81.652325,40.220704],[-81.718048,40.149503],[-82.189065,40.165934],[-82.194542,40.237135],[-82.183588,40.456212]]]},"id":"39031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.497066,40.445258],[-121.436819,40.149503],[-121.584697,40.100211],[-122.04476,39.798979],[-122.937501,39.798979],[-122.932024,39.979718],[-123.063471,40.286427],[-121.497066,40.445258]]]},"id":"06103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.119157,40.445258],[-120.209985,40.08378],[-120.149738,39.705871],[-121.009618,39.640148],[-121.075341,39.596333],[-121.436819,40.149503],[-121.497066,40.445258],[-121.327281,40.445258],[-121.119157,40.445258]]]},"id":"06063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.490767,40.423351],[-75.48529,40.417874],[-75.014273,40.13855],[-75.025227,40.133073],[-75.277166,39.974241],[-75.353843,40.056395],[-75.35932,40.067349],[-75.676983,40.242611],[-75.69889,40.242611],[-75.529105,40.445258],[-75.490767,40.423351]]]},"id":"42091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.246114,40.445258],[-83.02156,40.434304],[-82.742236,40.346673],[-82.75319,40.275473],[-82.764143,40.127596],[-83.03799,40.13855],[-83.169437,40.144027],[-83.246114,40.445258]]]},"id":"39041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.426359,40.439781],[-102.053927,40.439781],[-102.053927,40.346673],[-102.053927,40.001626],[-102.04845,39.574425],[-102.426359,39.568948],[-102.804268,39.568948],[-102.78236,40.439781],[-102.667345,40.439781],[-102.426359,40.439781]]]},"id":"08125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.78236,40.439781],[-102.804268,39.568948],[-103.154792,39.563471],[-103.707963,39.568948],[-103.707963,39.738733],[-103.707963,40.001626],[-103.466978,40.434304],[-102.78236,40.439781]]]},"id":"08121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.89512,40.434304],[-89.604842,40.319289],[-89.599365,40.122119],[-89.670565,40.160457],[-89.993705,40.105688],[-90.355183,40.122119],[-90.201828,40.182365],[-89.922504,40.434304],[-89.89512,40.434304]]]},"id":"17125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.186785,40.434304],[-80.940322,40.423351],[-80.885553,40.160457],[-81.219646,40.171411],[-81.225123,40.171411],[-81.340139,40.215227],[-81.268939,40.434304],[-81.186785,40.434304]]]},"id":"39067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.357016,40.434304],[-86.242001,40.374058],[-86.242001,40.215227],[-86.242001,40.182365],[-86.696587,40.176888],[-86.696587,40.215227],[-86.696587,40.434304],[-86.373447,40.434304],[-86.357016,40.434304]]]},"id":"18023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.800672,40.417874],[-74.745903,40.423351],[-74.619933,40.374058],[-74.48301,40.253565],[-74.587071,40.13855],[-74.702087,40.182365],[-74.723995,40.149503],[-74.943073,40.341196],[-74.800672,40.417874]]]},"id":"34021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.864092,40.40692],[-85.864092,40.379535],[-85.864092,40.220704],[-85.875046,40.220704],[-86.242001,40.215227],[-86.242001,40.374058],[-85.864092,40.40692]]]},"id":"18159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.109637,40.401443],[-87.934375,40.401443],[-87.939852,39.881133],[-88.126068,39.881133],[-88.460161,39.881133],[-88.460161,40.28095],[-88.460161,40.401443],[-88.109637,40.401443]]]},"id":"17019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.518598,40.401443],[-80.518598,40.160457],[-80.682906,40.187842],[-80.633614,40.395966],[-80.518598,40.401443]]]},"id":"54009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.325965,40.385012],[-94.216426,40.385012],[-94.216426,40.13855],[-94.216426,40.034488],[-94.577904,40.039965],[-94.605288,40.039965],[-94.605288,40.127596],[-94.599812,40.385012],[-94.325965,40.385012]]]},"id":"29075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.186761,40.385012],[-92.858145,40.341196],[-92.858145,40.039965],[-93.362023,40.034488],[-93.3675,40.264519],[-93.3675,40.385012],[-93.186761,40.385012]]]},"id":"29211"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.672399,40.379535],[-85.579291,40.379535],[-85.573814,40.078303],[-85.573814,39.946857],[-85.617629,39.946857],[-85.864092,39.94138],[-85.864092,40.220704],[-85.864092,40.379535],[-85.672399,40.379535]]]},"id":"18095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.513567,40.379535],[-85.442367,40.379535],[-85.217813,40.379535],[-85.217813,40.308335],[-85.212336,40.078303],[-85.327352,40.078303],[-85.573814,40.078303],[-85.579291,40.379535],[-85.513567,40.379535]]]},"id":"18035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.255235,40.297381],[-87.090926,40.368581],[-87.090926,40.215227],[-87.090926,39.952334],[-87.205942,39.952334],[-87.419543,39.952334],[-87.408589,40.127596],[-87.255235,40.297381]]]},"id":"18045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.456518,40.35215],[-84.43461,40.35215],[-84.43461,40.198796],[-84.423656,39.919472],[-84.483903,39.919472],[-84.812519,39.919472],[-84.812519,40.007103],[-84.801565,40.308335],[-84.801565,40.35215],[-84.456518,40.35215]]]},"id":"39037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.383461,40.35215],[-100.197245,40.35215],[-100.191768,40.001626],[-100.739462,40.001626],[-100.761369,40.001626],[-100.755893,40.35215],[-100.383461,40.35215]]]},"id":"31145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.989121,40.35215],[-99.644074,40.35215],[-99.63312,40.35215],[-99.627643,40.001626],[-100.175337,40.001626],[-100.191768,40.001626],[-100.197245,40.35215],[-100.093183,40.35215],[-99.989121,40.35215]]]},"id":"31065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.63312,40.35215],[-99.178534,40.35215],[-99.178534,40.001626],[-99.627643,40.001626],[-99.627643,40.001626],[-99.63312,40.35215]]]},"id":"31083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.111894,40.35215],[-100.7778,40.35215],[-100.755893,40.35215],[-100.761369,40.001626],[-101.325494,40.001626],[-101.325494,40.35215],[-101.111894,40.35215]]]},"id":"31087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.011945,40.35215],[-97.825729,40.35215],[-97.820252,40.35215],[-97.820252,40.001626],[-97.875022,40.001626],[-97.929791,40.001626],[-98.269362,40.001626],[-98.274839,40.001626],[-98.274839,40.35215],[-98.011945,40.35215]]]},"id":"31129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.11281,40.35215],[-98.729425,40.35215],[-98.723948,40.001626],[-99.068995,40.001626],[-99.123764,40.001626],[-99.178534,40.001626],[-99.178534,40.35215],[-99.11281,40.35215]]]},"id":"31061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.50259,40.35215],[-97.365666,40.35215],[-97.371143,40.001626],[-97.820252,40.001626],[-97.820252,40.35215],[-97.50259,40.35215]]]},"id":"31169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.291269,40.35215],[-98.280315,40.35215],[-98.274839,40.35215],[-98.274839,40.001626],[-98.50487,40.001626],[-98.691086,40.001626],[-98.723948,40.001626],[-98.729425,40.35215],[-98.723948,40.35215],[-98.291269,40.35215]]]},"id":"31181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.325494,40.35215],[-101.325494,40.35215],[-101.325494,40.001626],[-101.413125,40.001626],[-101.90605,40.001626],[-102.053927,40.001626],[-102.053927,40.346673],[-101.341925,40.35215],[-101.325494,40.35215]]]},"id":"31057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.365666,40.35215],[-96.916557,40.35215],[-96.916557,40.001626],[-97.349236,40.001626],[-97.371143,40.001626],[-97.365666,40.35215]]]},"id":"31095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.348789,40.346673],[-92.348789,40.302858],[-92.343312,40.039965],[-92.677405,40.039965],[-92.847191,40.039965],[-92.858145,40.039965],[-92.858145,40.341196],[-92.682882,40.341196],[-92.348789,40.346673]]]},"id":"29001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.122895,40.297381],[-76.914771,40.330243],[-76.860002,40.226181],[-76.903817,40.220704],[-77.139326,40.067349],[-77.473419,39.946857],[-77.615819,40.198796],[-77.122895,40.297381]]]},"id":"42041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.6181,40.324766],[-78.256622,40.297381],[-78.136129,40.165934],[-78.382591,39.722302],[-78.809792,39.722302],[-78.656438,40.242611],[-78.6181,40.324766]]]},"id":"42009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.265272,40.324766],[-89.150256,40.28095],[-89.144779,40.050919],[-89.215979,39.919472],[-89.489826,39.974241],[-89.577457,39.974241],[-89.599365,40.122119],[-89.604842,40.319289],[-89.265272,40.324766]]]},"id":"17107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.306831,40.253565],[-76.153476,40.313812],[-75.874152,40.13855],[-76.137046,39.722302],[-76.235631,39.722302],[-76.241107,39.722302],[-76.723078,40.122119],[-76.564247,40.198796],[-76.306831,40.253565]]]},"id":"42071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.807042,40.308335],[-84.801565,40.308335],[-84.812519,40.007103],[-84.856335,40.007103],[-85.201382,40.007103],[-85.212336,40.078303],[-85.217813,40.308335],[-84.807042,40.308335]]]},"id":"18135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.140665,40.302858],[-91.948972,40.302858],[-91.948972,40.259042],[-91.954449,39.946857],[-91.998265,39.952334],[-92.288543,39.952334],[-92.343312,40.039965],[-92.348789,40.302858],[-92.140665,40.302858]]]},"id":"29103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.670589,40.291904],[-77.615819,40.198796],[-77.473419,39.946857],[-77.456988,39.722302],[-77.467942,39.722302],[-78.09779,39.722302],[-77.862282,40.061872],[-77.703451,40.264519],[-77.670589,40.291904]]]},"id":"42055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.001485,40.286427],[-78.656438,40.242611],[-78.809792,39.722302],[-78.930285,39.722302],[-79.390348,39.722302],[-79.291763,40.039965],[-79.056255,40.286427],[-79.001485,40.286427]]]},"id":"42111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.908354,40.286427],[-90.448291,40.275473],[-90.201828,40.182365],[-90.355183,40.122119],[-90.514014,39.985195],[-90.913831,40.105688],[-90.913831,40.193319],[-90.908354,40.286427]]]},"id":"17169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.920224,40.28095],[-88.575177,40.28095],[-88.744962,40.056395],[-88.805209,40.056395],[-89.144779,40.050919],[-89.150256,40.28095],[-88.920224,40.28095]]]},"id":"17039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.575177,40.28095],[-88.460161,40.28095],[-88.460161,39.881133],[-88.471115,39.793502],[-88.744962,39.793502],[-88.744962,40.056395],[-88.575177,40.28095]]]},"id":"17147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.75319,40.275473],[-82.194542,40.237135],[-82.189065,40.165934],[-82.23288,39.913995],[-82.462912,39.930426],[-82.780574,39.94138],[-82.764143,40.127596],[-82.75319,40.275473]]]},"id":"39089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.881439,40.264519],[-83.552823,40.231658],[-83.50353,40.111165],[-83.514484,40.01258],[-84.034794,40.039965],[-84.02384,40.182365],[-84.012886,40.275473],[-83.881439,40.264519]]]},"id":"39021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.3675,40.264519],[-93.362023,40.034488],[-93.362023,39.968764],[-93.76184,39.957811],[-93.76184,40.133073],[-93.76184,40.264519],[-93.3675,40.264519]]]},"id":"29079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.503507,40.264519],[-95.180367,40.264519],[-95.043444,40.127596],[-94.994151,39.897564],[-95.306337,40.001626],[-95.552799,40.264519],[-95.552799,40.264519],[-95.503507,40.264519]]]},"id":"29087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.340092,40.259042],[-105.055291,40.264519],[-105.055291,40.001626],[-105.055291,39.913995],[-105.055291,39.913995],[-105.400338,39.913995],[-105.674185,39.930426],[-105.652277,40.259042],[-105.340092,40.259042]]]},"id":"08013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.325048,40.264519],[-96.067632,40.264519],[-96.012862,40.259042],[-96.012862,40.001626],[-96.237417,40.001626],[-96.237417,40.001626],[-96.461971,40.001626],[-96.461971,40.264519],[-96.325048,40.264519]]]},"id":"31133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.673292,40.264519],[-95.552799,40.264519],[-95.306337,40.001626],[-95.339199,40.001626],[-95.788308,40.001626],[-96.012862,40.001626],[-96.012862,40.259042],[-95.673292,40.264519]]]},"id":"31147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.948972,40.259042],[-91.499863,40.248088],[-91.50534,40.198796],[-91.43414,39.946857],[-91.784664,39.946857],[-91.839434,39.946857],[-91.954449,39.946857],[-91.948972,40.259042]]]},"id":"29111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.676983,40.242611],[-75.35932,40.067349],[-75.594828,39.837318],[-75.786521,39.722302],[-75.808429,39.722302],[-76.137046,39.722302],[-75.874152,40.13855],[-75.69889,40.242611],[-75.676983,40.242611]]]},"id":"42029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.903817,40.220704],[-76.860002,40.226181],[-76.723078,40.122119],[-76.241107,39.722302],[-76.569724,39.722302],[-76.70117,39.722302],[-76.788801,39.722302],[-76.996925,39.722302],[-77.139326,40.067349],[-76.903817,40.220704]]]},"id":"42133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.109143,40.226181],[-107.037943,40.089257],[-107.936161,39.694917],[-109.053457,39.662056],[-109.053457,40.220704],[-107.43776,40.220704],[-107.109143,40.226181]]]},"id":"08103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.652325,40.220704],[-81.62494,40.220704],[-81.340139,40.215227],[-81.225123,40.171411],[-81.236077,39.952334],[-81.471585,39.892087],[-81.69614,39.842795],[-81.718048,40.149503],[-81.652325,40.220704]]]},"id":"39059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.875046,40.220704],[-85.864092,40.220704],[-85.864092,39.94138],[-85.935292,39.924949],[-86.110554,39.924949],[-86.242001,39.924949],[-86.242001,40.182365],[-86.242001,40.215227],[-85.875046,40.220704]]]},"id":"18057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.921141,40.215227],[-86.696587,40.215227],[-86.696587,40.176888],[-86.696587,39.924949],[-86.696587,39.864703],[-87.008772,39.864703],[-87.090926,39.952334],[-87.090926,40.215227],[-86.921141,40.215227]]]},"id":"18107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.204109,40.198796],[-90.913831,40.193319],[-90.913831,40.105688],[-90.919308,39.842795],[-91.36294,39.760641],[-91.43414,39.946857],[-91.50534,40.198796],[-91.204109,40.198796]]]},"id":"17001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.22101,40.198796],[-84.02384,40.182365],[-84.034794,40.039965],[-84.051224,39.881133],[-84.155286,39.924949],[-84.423656,39.919472],[-84.43461,40.198796],[-84.22101,40.198796]]]},"id":"39109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.682906,40.187842],[-80.518598,40.160457],[-80.518598,40.018057],[-80.726722,40.034488],[-80.732199,40.034488],[-80.704814,40.15498],[-80.682906,40.187842]]]},"id":"54069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.702087,40.182365],[-74.587071,40.13855],[-74.55421,40.078303],[-74.417286,39.557994],[-74.734949,39.727779],[-75.030704,39.990672],[-75.058088,39.990672],[-74.975934,40.050919],[-74.723995,40.149503],[-74.702087,40.182365]]]},"id":"34005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.242001,40.182365],[-86.242001,39.924949],[-86.324155,39.924949],[-86.433693,39.924949],[-86.696587,39.924949],[-86.696587,40.176888],[-86.242001,40.182365]]]},"id":"18011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.219646,40.171411],[-80.885553,40.160457],[-80.704814,40.15498],[-80.732199,40.034488],[-80.81983,39.848272],[-81.236077,39.87018],[-81.236077,39.952334],[-81.225123,40.171411],[-81.219646,40.171411]]]},"id":"39013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.406332,40.171411],[-74.0339,40.100211],[-74.313224,39.497748],[-74.417286,39.557994],[-74.55421,40.078303],[-74.406332,40.171411]]]},"id":"34029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.189065,40.165934],[-81.718048,40.149503],[-81.69614,39.842795],[-81.69614,39.755164],[-82.074049,39.771595],[-82.23288,39.913995],[-82.189065,40.165934]]]},"id":"39119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.136129,40.165934],[-77.862282,40.061872],[-78.09779,39.722302],[-78.284006,39.722302],[-78.344253,39.722302],[-78.382591,39.722302],[-78.136129,40.165934]]]},"id":"42057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.670565,40.160457],[-89.599365,40.122119],[-89.577457,39.974241],[-89.993705,39.903041],[-89.993705,40.105688],[-89.670565,40.160457]]]},"id":"17129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.584697,40.100211],[-121.436819,40.149503],[-121.075341,39.596333],[-121.623035,39.295101],[-121.907836,39.306055],[-121.891405,39.382732],[-122.04476,39.798979],[-121.584697,40.100211]]]},"id":"06007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.408589,40.127596],[-87.419543,39.952334],[-87.381204,39.607286],[-87.534558,39.607286],[-87.534558,39.881133],[-87.529082,40.149503],[-87.408589,40.127596]]]},"id":"18165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.499887,40.13855],[-79.291763,40.039965],[-79.390348,39.722302],[-79.477979,39.722302],[-79.609426,39.722302],[-79.76278,39.722302],[-79.916134,39.722302],[-79.998289,39.985195],[-79.877796,40.127596],[-79.499887,40.13855]]]},"id":"42051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.03799,40.13855],[-82.764143,40.127596],[-82.780574,39.94138],[-82.797005,39.94138],[-82.82439,39.793502],[-83.246114,39.81541],[-83.207776,40.105688],[-83.169437,40.144027],[-83.03799,40.13855]]]},"id":"39049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.025227,40.133073],[-75.014273,40.13855],[-74.975934,40.050919],[-75.058088,39.990672],[-75.140242,39.88661],[-75.211443,39.864703],[-75.277166,39.974241],[-75.025227,40.133073]]]},"id":"42101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.216426,40.13855],[-93.76184,40.133073],[-93.76184,39.957811],[-93.756363,39.782548],[-93.871378,39.788025],[-94.205472,39.788025],[-94.216426,40.034488],[-94.216426,40.13855]]]},"id":"29061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.043444,40.127596],[-94.605288,40.127596],[-94.605288,40.039965],[-94.605288,39.820887],[-94.769597,39.820887],[-94.879136,39.820887],[-94.994151,39.897564],[-95.043444,40.127596]]]},"id":"29003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.048427,40.116642],[-114.048427,39.908518],[-114.048427,39.541563],[-114.048427,38.676207],[-114.70566,38.676207],[-115.001414,38.676207],[-115.90511,39.163654],[-115.833909,40.127596],[-114.048427,40.116642]]]},"id":"32033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.355183,40.122119],[-89.993705,40.105688],[-89.993705,39.903041],[-89.993705,39.87018],[-90.585214,39.875656],[-90.514014,39.985195],[-90.355183,40.122119]]]},"id":"17017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.50353,40.111165],[-83.207776,40.105688],[-83.246114,39.81541],[-83.246114,39.809933],[-83.251591,39.694917],[-83.651408,39.716825],[-83.645931,39.771595],[-83.514484,40.01258],[-83.50353,40.111165]]]},"id":"39097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.913831,40.105688],[-90.514014,39.985195],[-90.585214,39.875656],[-90.57426,39.837318],[-90.919308,39.842795],[-90.913831,40.105688]]]},"id":"17009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.037943,40.089257],[-107.032466,39.919472],[-107.11462,39.366301],[-107.432283,39.366301],[-108.774133,39.366301],[-109.053457,39.366301],[-109.053457,39.497748],[-109.053457,39.662056],[-107.936161,39.694917],[-107.037943,40.089257]]]},"id":"08045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.327352,40.078303],[-85.212336,40.078303],[-85.201382,40.007103],[-85.22329,39.788025],[-85.299967,39.788025],[-85.321875,39.788025],[-85.595722,39.788025],[-85.573814,39.946857],[-85.573814,40.078303],[-85.327352,40.078303]]]},"id":"18065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.139326,40.067349],[-76.996925,39.722302],[-77.216003,39.722302],[-77.456988,39.722302],[-77.473419,39.946857],[-77.139326,40.067349]]]},"id":"42001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.353843,40.056395],[-75.277166,39.974241],[-75.211443,39.864703],[-75.414089,39.804456],[-75.578398,39.837318],[-75.594828,39.837318],[-75.594828,39.837318],[-75.35932,40.067349],[-75.353843,40.056395]]]},"id":"42045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.805209,40.056395],[-88.744962,40.056395],[-88.744962,39.793502],[-88.761393,39.793502],[-88.810686,39.651102],[-89.024286,39.656579],[-89.215979,39.81541],[-89.215979,39.919472],[-89.144779,40.050919],[-88.805209,40.056395]]]},"id":"17115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.034794,40.039965],[-83.514484,40.01258],[-83.645931,39.771595],[-84.029317,39.848272],[-84.051224,39.848272],[-84.051224,39.881133],[-84.034794,40.039965]]]},"id":"39023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.577904,40.039965],[-94.216426,40.034488],[-94.205472,39.788025],[-94.205472,39.74421],[-94.506704,39.749687],[-94.599812,39.749687],[-94.605288,39.820887],[-94.605288,40.039965],[-94.577904,40.039965]]]},"id":"29063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.677405,40.039965],[-92.343312,40.039965],[-92.288543,39.952334],[-92.299497,39.607286],[-92.299497,39.607286],[-92.693836,39.612763],[-92.858145,39.700394],[-92.847191,40.039965],[-92.677405,40.039965]]]},"id":"29121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.858145,40.039965],[-92.847191,40.039965],[-92.858145,39.700394],[-93.04436,39.705871],[-93.268915,39.705871],[-93.362023,39.968764],[-93.362023,40.034488],[-92.858145,40.039965]]]},"id":"29115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.726722,40.034488],[-80.518598,40.018057],[-80.518598,39.963288],[-80.518598,39.722302],[-80.830783,39.722302],[-80.81983,39.848272],[-80.732199,40.034488],[-80.726722,40.034488]]]},"id":"54051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.064012,40.007103],[-79.998289,39.985195],[-79.916134,39.722302],[-80.420013,39.722302],[-80.518598,39.722302],[-80.518598,39.963288],[-80.064012,40.007103]]]},"id":"42059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.18079,40.01258],[-111.64405,39.81541],[-112.016482,39.317009],[-112.23556,39.552517],[-114.048427,39.541563],[-114.048427,39.908518],[-112.339621,39.903041],[-112.18079,40.01258]]]},"id":"49023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.856335,40.007103],[-84.812519,40.007103],[-84.812519,39.919472],[-84.812519,39.727779],[-85.037074,39.716825],[-85.22329,39.788025],[-85.201382,40.007103],[-84.856335,40.007103]]]},"id":"18177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.90605,40.001626],[-101.413125,40.001626],[-101.413125,39.568948],[-102.004635,39.568948],[-102.04845,39.568948],[-102.04845,39.574425],[-102.053927,40.001626],[-101.90605,40.001626]]]},"id":"20023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.325494,40.001626],[-100.761369,40.001626],[-100.739462,40.001626],[-100.739462,39.568948],[-101.391218,39.568948],[-101.413125,39.568948],[-101.413125,40.001626],[-101.325494,40.001626]]]},"id":"20153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.948008,40.001626],[-117.542715,40.001626],[-117.493422,39.530609],[-117.772746,39.092454],[-117.865854,39.076023],[-118.753119,39.076023],[-119.191274,39.629194],[-119.224135,40.001626],[-117.948008,40.001626]]]},"id":"32001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.269362,40.001626],[-97.929791,40.001626],[-97.929791,39.656579],[-97.929791,39.568948],[-98.488439,39.568948],[-98.50487,39.568948],[-98.50487,40.001626],[-98.274839,40.001626],[-98.269362,40.001626]]]},"id":"20089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.691086,40.001626],[-98.50487,40.001626],[-98.50487,39.568948],[-98.849917,39.568948],[-99.04161,39.568948],[-99.063518,39.568948],[-99.068995,40.001626],[-98.723948,40.001626],[-98.691086,40.001626]]]},"id":"20183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.739462,40.001626],[-100.191768,40.001626],[-100.175337,40.001626],[-100.180814,39.568948],[-100.668261,39.568948],[-100.717554,39.568948],[-100.739462,39.568948],[-100.739462,40.001626]]]},"id":"20039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.123764,40.001626],[-99.068995,40.001626],[-99.063518,39.568948],[-99.600258,39.568948],[-99.627643,39.568948],[-99.627643,40.001626],[-99.178534,40.001626],[-99.123764,40.001626]]]},"id":"20147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.875022,40.001626],[-97.820252,40.001626],[-97.371143,40.001626],[-97.371143,39.656579],[-97.69976,39.656579],[-97.929791,39.656579],[-97.929791,40.001626],[-97.875022,40.001626]]]},"id":"20157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.021935,40.001626],[-123.545441,40.001626],[-122.932024,39.979718],[-122.937501,39.798979],[-122.882732,39.579902],[-123.090855,39.070546],[-122.822485,38.851469],[-123.074425,38.851469],[-123.534488,38.769315],[-123.737134,38.95553],[-124.021935,40.001626]]]},"id":"06045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.349236,40.001626],[-96.916557,40.001626],[-96.807019,40.001626],[-96.807019,39.568948],[-96.960373,39.568948],[-97.299943,39.568948],[-97.371143,39.568948],[-97.371143,39.656579],[-97.371143,40.001626],[-97.349236,40.001626]]]},"id":"20201"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.627643,40.001626],[-99.627643,39.568948],[-100.164383,39.568948],[-100.180814,39.568948],[-100.175337,40.001626],[-99.627643,40.001626],[-99.627643,40.001626]]]},"id":"20137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.795594,40.001626],[-103.707963,40.001626],[-103.707963,39.738733],[-104.830736,39.738733],[-104.885506,39.738733],[-104.704767,39.903041],[-105.055291,39.793502],[-105.055291,39.913995],[-105.055291,40.001626],[-104.151596,40.001626],[-103.795594,40.001626]]]},"id":"08001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.692003,40.001626],[-96.461971,40.001626],[-96.237417,40.001626],[-96.237417,39.568948],[-96.582464,39.568948],[-96.582464,39.568948],[-96.692003,39.568948],[-96.807019,39.568948],[-96.807019,40.001626],[-96.692003,40.001626]]]},"id":"20117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.237417,40.001626],[-96.012862,40.001626],[-95.788308,40.001626],[-95.788308,39.651102],[-96.03477,39.563471],[-96.237417,39.568948],[-96.237417,40.001626],[-96.237417,40.001626]]]},"id":"20131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.788308,40.001626],[-95.339199,40.001626],[-95.339199,39.651102],[-95.393968,39.651102],[-95.563753,39.651102],[-95.728061,39.651102],[-95.788308,39.651102],[-95.788308,40.001626]]]},"id":"20013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.339199,40.001626],[-95.306337,40.001626],[-94.994151,39.897564],[-94.879136,39.820887],[-95.054398,39.623717],[-95.339199,39.651102],[-95.339199,40.001626]]]},"id":"20043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.030704,39.990672],[-74.734949,39.727779],[-74.877349,39.607286],[-75.140242,39.88661],[-75.058088,39.990672],[-75.030704,39.990672]]]},"id":"34007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.489826,39.974241],[-89.215979,39.919472],[-89.215979,39.81541],[-89.254318,39.820887],[-89.533642,39.525132],[-89.588411,39.525132],[-89.703427,39.525132],[-89.758196,39.525132],[-89.927981,39.519655],[-89.993705,39.87018],[-89.993705,39.903041],[-89.577457,39.974241],[-89.489826,39.974241]]]},"id":"17167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.362023,39.968764],[-93.268915,39.705871],[-93.279869,39.61824],[-93.422269,39.612763],[-93.756363,39.612763],[-93.756363,39.782548],[-93.76184,39.957811],[-93.362023,39.968764]]]},"id":"29117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.998265,39.952334],[-91.954449,39.946857],[-91.839434,39.946857],[-91.844911,39.656579],[-92.299497,39.607286],[-92.288543,39.952334],[-91.998265,39.952334]]]},"id":"29205"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.471585,39.892087],[-81.236077,39.952334],[-81.236077,39.87018],[-81.307277,39.87018],[-81.28537,39.607286],[-81.449678,39.634671],[-81.586601,39.585379],[-81.69614,39.755164],[-81.69614,39.842795],[-81.471585,39.892087]]]},"id":"39121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.205942,39.952334],[-87.090926,39.952334],[-87.008772,39.864703],[-87.014249,39.607286],[-87.200465,39.607286],[-87.331912,39.607286],[-87.381204,39.607286],[-87.419543,39.952334],[-87.205942,39.952334]]]},"id":"18121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.784664,39.946857],[-91.43414,39.946857],[-91.36294,39.760641],[-91.30817,39.683964],[-91.686079,39.683964],[-91.713464,39.656579],[-91.844911,39.656579],[-91.839434,39.946857],[-91.784664,39.946857]]]},"id":"29127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.617629,39.946857],[-85.573814,39.946857],[-85.595722,39.788025],[-85.63406,39.700394],[-85.951723,39.694917],[-85.935292,39.924949],[-85.864092,39.94138],[-85.617629,39.946857]]]},"id":"18059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.797005,39.94138],[-82.780574,39.94138],[-82.462912,39.930426],[-82.375281,39.656579],[-82.731282,39.552517],[-82.82439,39.793502],[-82.797005,39.94138]]]},"id":"39045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.674185,39.930426],[-105.400338,39.913995],[-105.400338,39.749687],[-105.690616,39.853749],[-105.674185,39.930426]]]},"id":"08047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.462912,39.930426],[-82.23288,39.913995],[-82.074049,39.771595],[-82.046664,39.552517],[-82.16168,39.557994],[-82.375281,39.656579],[-82.462912,39.930426]]]},"id":"39127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.110554,39.924949],[-85.935292,39.924949],[-85.951723,39.694917],[-85.951723,39.640148],[-85.97363,39.640148],[-86.247477,39.634671],[-86.324155,39.629194],[-86.324155,39.924949],[-86.242001,39.924949],[-86.110554,39.924949]]]},"id":"18097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.627173,39.924949],[-106.43548,39.924949],[-106.205448,39.377255],[-106.424526,39.360824],[-107.04342,39.366301],[-107.11462,39.366301],[-107.032466,39.919472],[-106.627173,39.924949]]]},"id":"08037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.43548,39.924949],[-105.926124,39.700394],[-105.827539,39.563471],[-106.134248,39.377255],[-106.205448,39.377255],[-106.43548,39.924949]]]},"id":"08117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.433693,39.924949],[-86.324155,39.924949],[-86.324155,39.629194],[-86.658248,39.601809],[-86.696587,39.864703],[-86.696587,39.924949],[-86.433693,39.924949]]]},"id":"18063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.155286,39.924949],[-84.051224,39.881133],[-84.051224,39.848272],[-84.111471,39.579902],[-84.36341,39.590856],[-84.478426,39.590856],[-84.483903,39.919472],[-84.423656,39.919472],[-84.155286,39.924949]]]},"id":"39113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.483903,39.919472],[-84.478426,39.590856],[-84.812519,39.568948],[-84.812519,39.727779],[-84.812519,39.919472],[-84.483903,39.919472]]]},"id":"39135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.055291,39.913995],[-105.055291,39.913995],[-105.055291,39.793502],[-105.055291,39.623717],[-105.049814,39.563471],[-105.329138,39.130793],[-105.329138,39.130793],[-105.400338,39.563471],[-105.400338,39.749687],[-105.400338,39.913995],[-105.055291,39.913995]]]},"id":"08059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.704767,39.903041],[-104.885506,39.738733],[-105.055291,39.629194],[-105.055291,39.629194],[-105.055291,39.623717],[-105.055291,39.793502],[-104.704767,39.903041]]]},"id":"08031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.211443,39.864703],[-75.140242,39.88661],[-74.877349,39.607286],[-74.986888,39.514178],[-75.058088,39.568948],[-75.063565,39.568948],[-75.446951,39.771595],[-75.414089,39.804456],[-75.211443,39.864703]]]},"id":"34015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.534558,39.881133],[-87.534558,39.607286],[-87.529082,39.47584],[-87.76459,39.486794],[-87.96176,39.481317],[-87.967237,39.683964],[-87.939852,39.881133],[-87.534558,39.881133]]]},"id":"17045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.126068,39.881133],[-87.939852,39.881133],[-87.967237,39.683964],[-88.065822,39.651102],[-88.471115,39.651102],[-88.471115,39.793502],[-88.460161,39.881133],[-88.126068,39.881133]]]},"id":"17041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.585214,39.875656],[-89.993705,39.87018],[-89.927981,39.519655],[-90.152536,39.519655],[-90.300413,39.519655],[-90.371614,39.667533],[-90.601645,39.788025],[-90.57426,39.837318],[-90.585214,39.875656]]]},"id":"17137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.307277,39.87018],[-81.236077,39.87018],[-80.81983,39.848272],[-80.830783,39.722302],[-80.945799,39.607286],[-81.038907,39.541563],[-81.28537,39.607286],[-81.307277,39.87018]]]},"id":"39111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.008772,39.864703],[-86.696587,39.864703],[-86.658248,39.601809],[-86.685633,39.470363],[-86.937572,39.47584],[-87.014249,39.607286],[-87.008772,39.864703]]]},"id":"18133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.926124,39.700394],[-105.690616,39.853749],[-105.400338,39.749687],[-105.400338,39.563471],[-105.827539,39.563471],[-105.926124,39.700394]]]},"id":"08019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.029317,39.848272],[-83.645931,39.771595],[-83.651408,39.716825],[-83.667839,39.552517],[-83.974547,39.568948],[-83.974547,39.568948],[-84.111471,39.579902],[-84.051224,39.848272],[-84.029317,39.848272]]]},"id":"39057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.919308,39.842795],[-90.57426,39.837318],[-90.601645,39.788025],[-90.579737,39.519655],[-90.612599,39.393686],[-90.935738,39.399163],[-91.176724,39.596333],[-91.30817,39.683964],[-91.36294,39.760641],[-90.919308,39.842795]]]},"id":"17149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.414089,39.804456],[-75.446951,39.771595],[-75.507197,39.683964],[-75.512674,39.366301],[-75.616736,39.311532],[-75.759137,39.295101],[-75.764614,39.377255],[-75.786521,39.722302],[-75.594828,39.837318],[-75.594828,39.837318],[-75.578398,39.837318],[-75.414089,39.804456]]]},"id":"10003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.254318,39.820887],[-89.215979,39.81541],[-89.024286,39.656579],[-89.139302,39.34987],[-89.533642,39.525132],[-89.254318,39.820887]]]},"id":"17021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.769597,39.820887],[-94.605288,39.820887],[-94.599812,39.749687],[-94.599812,39.530609],[-95.10369,39.530609],[-95.054398,39.623717],[-94.879136,39.820887],[-94.769597,39.820887]]]},"id":"29021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.014202,39.81541],[-110.855371,39.81541],[-109.968106,39.804456],[-110.022876,39.470363],[-111.079925,39.464886],[-111.24971,39.705871],[-111.24971,39.81541],[-111.014202,39.81541]]]},"id":"49007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.246114,39.809933],[-83.246114,39.81541],[-82.82439,39.793502],[-82.731282,39.552517],[-82.742236,39.470363],[-83.268022,39.514178],[-83.251591,39.694917],[-83.246114,39.809933]]]},"id":"39129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.556419,39.81541],[-111.24971,39.81541],[-111.24971,39.705871],[-111.299003,39.032208],[-111.978143,39.043162],[-112.016482,39.043162],[-112.016482,39.317009],[-111.64405,39.81541],[-111.556419,39.81541]]]},"id":"49039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.937501,39.798979],[-122.04476,39.798979],[-121.891405,39.382732],[-122.077621,39.415593],[-122.740331,39.382732],[-122.882732,39.579902],[-122.937501,39.798979]]]},"id":"06021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.761393,39.793502],[-88.744962,39.793502],[-88.471115,39.793502],[-88.471115,39.651102],[-88.471115,39.448455],[-88.810686,39.651102],[-88.761393,39.793502]]]},"id":"17139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.371614,39.667533],[-90.300413,39.519655],[-90.579737,39.519655],[-90.601645,39.788025],[-90.371614,39.667533]]]},"id":"17171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.871378,39.788025],[-93.756363,39.782548],[-93.756363,39.612763],[-93.76184,39.525132],[-94.10141,39.525132],[-94.210949,39.525132],[-94.205472,39.74421],[-94.205472,39.788025],[-93.871378,39.788025]]]},"id":"29025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.22329,39.788025],[-85.037074,39.716825],[-85.037074,39.525132],[-85.23972,39.525132],[-85.299967,39.525132],[-85.299967,39.788025],[-85.22329,39.788025]]]},"id":"18041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.321875,39.788025],[-85.299967,39.788025],[-85.299967,39.525132],[-85.299967,39.453932],[-85.628583,39.453932],[-85.63406,39.700394],[-85.595722,39.788025],[-85.321875,39.788025]]]},"id":"18139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.446951,39.771595],[-75.063565,39.568948],[-75.408613,39.382732],[-75.55649,39.607286],[-75.561967,39.629194],[-75.507197,39.683964],[-75.446951,39.771595]]]},"id":"34033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.149738,39.705871],[-120.001861,39.722302],[-120.001861,39.442978],[-120.555032,39.508701],[-121.020572,39.393686],[-121.009618,39.640148],[-120.149738,39.705871]]]},"id":"06091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.074049,39.771595],[-81.69614,39.755164],[-81.586601,39.585379],[-81.844017,39.448455],[-82.046664,39.552517],[-82.074049,39.771595]]]},"id":"39115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.506704,39.749687],[-94.205472,39.74421],[-94.210949,39.525132],[-94.210949,39.453932],[-94.56695,39.453932],[-94.599812,39.453932],[-94.599812,39.530609],[-94.599812,39.749687],[-94.506704,39.749687]]]},"id":"29049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.830736,39.738733],[-103.707963,39.738733],[-103.707963,39.568948],[-103.71344,39.568948],[-104.195411,39.563471],[-104.660951,39.563471],[-104.989567,39.568948],[-105.049814,39.563471],[-105.055291,39.623717],[-105.055291,39.629194],[-105.055291,39.629194],[-104.885506,39.738733],[-104.830736,39.738733]]]},"id":"08005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.196751,39.623717],[-119.191274,39.629194],[-118.753119,39.076023],[-118.764072,39.076023],[-118.906473,38.413313],[-119.158412,38.413313],[-119.328197,38.533806],[-119.552752,39.086977],[-119.580137,39.196516],[-119.711583,39.251285],[-119.284382,39.623717],[-119.196751,39.623717]]]},"id":"32019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.734949,39.727779],[-74.417286,39.557994],[-74.313224,39.497748],[-74.548733,39.295101],[-74.860918,39.322485],[-74.986888,39.514178],[-74.877349,39.607286],[-74.734949,39.727779]]]},"id":"34001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.812519,39.727779],[-84.812519,39.568948],[-84.817996,39.519655],[-85.037074,39.525132],[-85.037074,39.716825],[-84.812519,39.727779]]]},"id":"18161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.809792,39.722302],[-78.382591,39.722302],[-78.344253,39.722302],[-78.333299,39.634671],[-78.470222,39.514178],[-78.656438,39.536086],[-78.738592,39.623717],[-79.067209,39.47584],[-78.930285,39.722302],[-78.809792,39.722302]]]},"id":"24001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.930285,39.722302],[-79.067209,39.47584],[-79.275332,39.327962],[-79.488933,39.20747],[-79.477979,39.722302],[-79.390348,39.722302],[-78.930285,39.722302]]]},"id":"24023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.284006,39.722302],[-78.09779,39.722302],[-77.467942,39.722302],[-77.676066,39.322485],[-77.719881,39.322485],[-77.823943,39.492271],[-78.021113,39.61824],[-78.185421,39.694917],[-78.333299,39.634671],[-78.344253,39.722302],[-78.284006,39.722302]]]},"id":"24043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.808429,39.722302],[-75.786521,39.722302],[-75.764614,39.377255],[-76.000122,39.377255],[-76.076799,39.541563],[-76.235631,39.722302],[-76.137046,39.722302],[-75.808429,39.722302]]]},"id":"24015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.830783,39.722302],[-80.518598,39.722302],[-80.420013,39.722302],[-80.398105,39.634671],[-80.49669,39.470363],[-80.545983,39.426547],[-80.617183,39.448455],[-80.945799,39.607286],[-80.830783,39.722302]]]},"id":"54103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.916134,39.722302],[-79.76278,39.722302],[-79.894227,39.437501],[-79.938042,39.453932],[-80.398105,39.634671],[-80.420013,39.722302],[-79.916134,39.722302]]]},"id":"54061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.241107,39.722302],[-76.235631,39.722302],[-76.076799,39.541563],[-76.328738,39.355347],[-76.569724,39.722302],[-76.241107,39.722302]]]},"id":"24025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.609426,39.722302],[-79.477979,39.722302],[-79.488933,39.20747],[-79.488933,39.196516],[-79.812073,39.229378],[-79.894227,39.300578],[-79.894227,39.437501],[-79.76278,39.722302],[-79.609426,39.722302]]]},"id":"54077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.70117,39.722302],[-76.569724,39.722302],[-76.328738,39.355347],[-76.525908,39.218424],[-76.651878,39.371778],[-76.619016,39.234854],[-76.695693,39.212947],[-76.881909,39.34987],[-76.788801,39.722302],[-76.70117,39.722302]]]},"id":"24005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.788801,39.722302],[-76.881909,39.34987],[-77.079079,39.366301],[-77.16671,39.355347],[-77.216003,39.722302],[-76.996925,39.722302],[-76.788801,39.722302]]]},"id":"24013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.467942,39.722302],[-77.456988,39.722302],[-77.216003,39.722302],[-77.16671,39.355347],[-77.16671,39.355347],[-77.243388,39.317009],[-77.456988,39.218424],[-77.676066,39.322485],[-77.467942,39.722302]]]},"id":"24021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.651408,39.716825],[-83.251591,39.694917],[-83.268022,39.514178],[-83.372084,39.377255],[-83.591161,39.377255],[-83.667839,39.552517],[-83.651408,39.716825]]]},"id":"39047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.04436,39.705871],[-92.858145,39.700394],[-92.693836,39.612763],[-92.70479,39.322485],[-92.847191,39.223901],[-93.104607,39.382732],[-93.279869,39.61824],[-93.268915,39.705871],[-93.04436,39.705871]]]},"id":"29041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.24971,39.705871],[-111.079925,39.464886],[-110.022876,39.470363],[-110.022876,39.459409],[-110.022876,38.500944],[-111.30448,38.511898],[-111.299003,39.032208],[-111.24971,39.705871]]]},"id":"49015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.63406,39.700394],[-85.628583,39.453932],[-85.683353,39.34987],[-85.798368,39.34987],[-85.951723,39.34987],[-85.951723,39.640148],[-85.951723,39.694917],[-85.63406,39.700394]]]},"id":"18145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.185421,39.694917],[-78.021113,39.61824],[-78.229237,39.393686],[-78.349729,39.464886],[-78.470222,39.514178],[-78.333299,39.634671],[-78.185421,39.694917]]]},"id":"54065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.686079,39.683964],[-91.30817,39.683964],[-91.176724,39.596333],[-91.198632,39.596333],[-91.439617,39.317009],[-91.718941,39.338916],[-91.713464,39.656579],[-91.686079,39.683964]]]},"id":"29173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.065822,39.651102],[-87.967237,39.683964],[-87.96176,39.481317],[-88.011052,39.377255],[-88.142499,39.377255],[-88.471115,39.371778],[-88.471115,39.448455],[-88.471115,39.651102],[-88.065822,39.651102]]]},"id":"17029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.299497,39.607286],[-91.844911,39.656579],[-91.713464,39.656579],[-91.718941,39.338916],[-92.31045,39.34987],[-92.299497,39.607286],[-92.299497,39.607286]]]},"id":"29137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.375281,39.656579],[-82.16168,39.557994],[-82.28765,39.382732],[-82.747713,39.366301],[-82.742236,39.470363],[-82.731282,39.552517],[-82.375281,39.656579]]]},"id":"39073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.024286,39.656579],[-88.810686,39.651102],[-88.471115,39.448455],[-88.471115,39.371778],[-88.471115,39.212947],[-88.580654,39.212947],[-88.805209,39.218424],[-89.139302,39.218424],[-89.139302,39.34987],[-89.024286,39.656579]]]},"id":"17173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.69976,39.656579],[-97.371143,39.656579],[-97.371143,39.568948],[-97.371143,39.306055],[-97.590221,39.306055],[-97.929791,39.306055],[-97.929791,39.568948],[-97.929791,39.656579],[-97.69976,39.656579]]]},"id":"20029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.728061,39.651102],[-95.563753,39.651102],[-95.56923,39.42107],[-95.591138,39.218424],[-95.886893,39.218424],[-96.03477,39.218424],[-96.03477,39.563471],[-95.788308,39.651102],[-95.728061,39.651102]]]},"id":"20085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.393968,39.651102],[-95.339199,39.651102],[-95.054398,39.623717],[-95.10369,39.530609],[-94.966767,39.42107],[-95.065351,39.42107],[-95.180367,39.42107],[-95.465168,39.42107],[-95.56923,39.42107],[-95.563753,39.651102],[-95.393968,39.651102]]]},"id":"20005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.738592,39.623717],[-78.656438,39.536086],[-78.979578,39.240331],[-79.275332,39.327962],[-79.067209,39.47584],[-78.738592,39.623717]]]},"id":"54057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.449678,39.634671],[-81.28537,39.607286],[-81.038907,39.541563],[-81.121061,39.459409],[-81.373001,39.344393],[-81.723525,39.218424],[-81.844017,39.448455],[-81.586601,39.585379],[-81.449678,39.634671]]]},"id":"39167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.398105,39.634671],[-79.938042,39.453932],[-80.195458,39.393686],[-80.49669,39.470363],[-80.398105,39.634671]]]},"id":"54049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.075341,39.596333],[-121.009618,39.640148],[-121.020572,39.393686],[-121.277988,39.032208],[-121.414912,38.999346],[-121.623035,39.295101],[-121.075341,39.596333]]]},"id":"06115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.97363,39.640148],[-85.951723,39.640148],[-85.951723,39.34987],[-86.083169,39.344393],[-86.252954,39.344393],[-86.247477,39.634671],[-85.97363,39.640148]]]},"id":"18081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.247477,39.634671],[-86.252954,39.344393],[-86.378924,39.338916],[-86.630863,39.34987],[-86.685633,39.470363],[-86.658248,39.601809],[-86.324155,39.629194],[-86.247477,39.634671]]]},"id":"18109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.689675,39.519655],[-119.284382,39.623717],[-119.711583,39.251285],[-119.689675,39.519655]]]},"id":"32029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.021113,39.61824],[-77.823943,39.492271],[-77.823943,39.492271],[-78.032067,39.262239],[-78.229237,39.393686],[-78.021113,39.61824]]]},"id":"54003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.422269,39.612763],[-93.279869,39.61824],[-93.104607,39.382732],[-93.274392,39.317009],[-93.477039,39.295101],[-93.597531,39.240331],[-93.756363,39.20747],[-93.76184,39.525132],[-93.756363,39.612763],[-93.422269,39.612763]]]},"id":"29033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.693836,39.612763],[-92.299497,39.607286],[-92.31045,39.34987],[-92.315927,39.245808],[-92.430943,39.251285],[-92.70479,39.322485],[-92.693836,39.612763]]]},"id":"29175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.331912,39.607286],[-87.200465,39.607286],[-87.238804,39.256762],[-87.578374,39.256762],[-87.605759,39.256762],[-87.529082,39.47584],[-87.534558,39.607286],[-87.381204,39.607286],[-87.331912,39.607286]]]},"id":"18167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.200465,39.607286],[-87.014249,39.607286],[-86.937572,39.47584],[-87.052588,39.169131],[-87.211419,39.169131],[-87.238804,39.169131],[-87.238804,39.256762],[-87.200465,39.607286]]]},"id":"18021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.945799,39.607286],[-80.617183,39.448455],[-80.89103,39.295101],[-81.006046,39.34987],[-81.038907,39.470363],[-81.121061,39.459409],[-81.038907,39.541563],[-80.945799,39.607286]]]},"id":"54095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.198632,39.596333],[-91.176724,39.596333],[-90.935738,39.399163],[-90.722138,39.223901],[-91.149339,39.229378],[-91.258878,39.141746],[-91.406755,39.141746],[-91.439617,39.317009],[-91.198632,39.596333]]]},"id":"29163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.478426,39.590856],[-84.36341,39.590856],[-84.352456,39.289624],[-84.598918,39.306055],[-84.817996,39.306055],[-84.817996,39.519655],[-84.812519,39.568948],[-84.478426,39.590856]]]},"id":"39017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.36341,39.590856],[-84.111471,39.579902],[-83.974547,39.568948],[-84.007409,39.256762],[-84.259348,39.273193],[-84.352456,39.289624],[-84.36341,39.590856]]]},"id":"39165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.882732,39.579902],[-122.740331,39.382732],[-122.340515,38.922669],[-122.395284,38.862422],[-122.625315,38.665253],[-122.822485,38.851469],[-123.090855,39.070546],[-122.882732,39.579902]]]},"id":"06033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.426359,39.568948],[-102.04845,39.574425],[-102.04845,39.568948],[-102.04845,39.130793],[-102.04845,39.048638],[-103.165746,39.037685],[-103.154792,39.563471],[-102.804268,39.568948],[-102.426359,39.568948]]]},"id":"08063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.974547,39.568948],[-83.667839,39.552517],[-83.591161,39.377255],[-83.865008,39.245808],[-83.990978,39.256762],[-84.007409,39.256762],[-83.974547,39.568948],[-83.974547,39.568948]]]},"id":"39027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.058088,39.568948],[-74.986888,39.514178],[-74.860918,39.322485],[-74.915688,39.180085],[-75.408613,39.382732],[-75.063565,39.568948],[-75.058088,39.568948]]]},"id":"34011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.004635,39.568948],[-101.413125,39.568948],[-101.391218,39.568948],[-101.391218,39.13627],[-101.478849,39.13627],[-102.04845,39.130793],[-102.04845,39.568948],[-102.004635,39.568948]]]},"id":"20181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.391218,39.568948],[-100.739462,39.568948],[-100.717554,39.568948],[-100.723031,39.130793],[-100.739462,39.130793],[-100.810662,39.130793],[-101.391218,39.13627],[-101.391218,39.568948]]]},"id":"20193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.827539,39.563471],[-105.400338,39.563471],[-105.329138,39.130793],[-105.329138,38.698114],[-105.96994,38.692637],[-106.189017,39.054115],[-106.134248,39.377255],[-105.827539,39.563471]]]},"id":"08093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.668261,39.568948],[-100.180814,39.568948],[-100.164383,39.568948],[-100.164383,39.130793],[-100.723031,39.130793],[-100.717554,39.568948],[-100.668261,39.568948]]]},"id":"20179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.063518,39.568948],[-99.04161,39.568948],[-99.047087,39.130793],[-99.408565,39.130793],[-99.589304,39.130793],[-99.605735,39.130793],[-99.600258,39.568948],[-99.063518,39.568948]]]},"id":"20163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.849917,39.568948],[-98.50487,39.568948],[-98.488439,39.568948],[-98.488439,39.218424],[-98.488439,39.130793],[-98.510347,39.130793],[-99.036133,39.130793],[-99.047087,39.130793],[-99.04161,39.568948],[-98.849917,39.568948]]]},"id":"20141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.488439,39.568948],[-97.929791,39.568948],[-97.929791,39.306055],[-97.929791,39.218424],[-98.477485,39.218424],[-98.488439,39.218424],[-98.488439,39.568948]]]},"id":"20123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.600258,39.568948],[-99.605735,39.130793],[-100.147952,39.130793],[-100.164383,39.130793],[-100.164383,39.568948],[-99.627643,39.568948],[-99.600258,39.568948]]]},"id":"20065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.299943,39.568948],[-96.960373,39.568948],[-96.960373,39.218424],[-96.96585,39.130793],[-97.261605,39.130793],[-97.371143,39.130793],[-97.371143,39.306055],[-97.371143,39.568948],[-97.299943,39.568948]]]},"id":"20027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.692003,39.568948],[-96.582464,39.568948],[-96.390771,39.174608],[-96.50031,39.043162],[-96.943942,39.218424],[-96.960373,39.218424],[-96.960373,39.568948],[-96.807019,39.568948],[-96.692003,39.568948]]]},"id":"20161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.71344,39.568948],[-103.707963,39.568948],[-103.154792,39.563471],[-103.165746,39.037685],[-103.171223,38.610483],[-103.505317,38.517375],[-104.053011,38.522852],[-104.053011,38.867899],[-103.718917,38.867899],[-103.71344,39.568948]]]},"id":"08073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.195411,39.563471],[-103.71344,39.568948],[-103.718917,38.867899],[-104.053011,38.867899],[-104.053011,39.130793],[-104.660951,39.130793],[-104.660951,39.563471],[-104.195411,39.563471]]]},"id":"08039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.582464,39.568948],[-96.237417,39.568948],[-96.03477,39.563471],[-96.03477,39.218424],[-96.040247,39.125316],[-96.390771,39.174608],[-96.582464,39.568948],[-96.582464,39.568948]]]},"id":"20149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.989567,39.568948],[-104.660951,39.563471],[-104.660951,39.130793],[-104.995044,39.130793],[-105.033383,39.130793],[-105.329138,39.130793],[-105.049814,39.563471],[-104.989567,39.568948]]]},"id":"08035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.048427,39.541563],[-112.23556,39.552517],[-112.016482,39.317009],[-112.016482,39.043162],[-112.514883,38.572145],[-113.97175,38.572145],[-114.048427,38.572145],[-114.048427,38.676207],[-114.048427,39.541563]]]},"id":"49027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.046664,39.552517],[-81.844017,39.448455],[-81.723525,39.218424],[-81.756386,39.180085],[-82.271219,39.201993],[-82.28765,39.382732],[-82.16168,39.557994],[-82.046664,39.552517]]]},"id":"39009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.656438,39.536086],[-78.470222,39.514178],[-78.349729,39.464886],[-78.508561,39.086977],[-78.979578,39.240331],[-78.656438,39.536086]]]},"id":"54027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.10369,39.530609],[-94.599812,39.530609],[-94.599812,39.453932],[-94.599812,39.158177],[-94.775074,39.201993],[-94.966767,39.42107],[-95.10369,39.530609]]]},"id":"29165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.10141,39.525132],[-93.76184,39.525132],[-93.756363,39.20747],[-94.106887,39.141746],[-94.210949,39.20747],[-94.210949,39.453932],[-94.210949,39.525132],[-94.10141,39.525132]]]},"id":"29177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.23972,39.525132],[-85.037074,39.525132],[-84.817996,39.519655],[-84.817996,39.306055],[-85.031597,39.306055],[-85.064458,39.306055],[-85.09732,39.311532],[-85.29449,39.267716],[-85.299967,39.453932],[-85.299967,39.525132],[-85.23972,39.525132]]]},"id":"18047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.555032,39.508701],[-120.001861,39.442978],[-120.007338,39.317009],[-120.149738,39.317009],[-121.277988,39.032208],[-121.020572,39.393686],[-120.555032,39.508701]]]},"id":"06057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.588411,39.525132],[-89.533642,39.525132],[-89.139302,39.34987],[-89.139302,39.218424],[-89.248841,39.026731],[-89.637704,38.999346],[-89.69795,38.999346],[-89.703427,39.525132],[-89.588411,39.525132]]]},"id":"17135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.758196,39.525132],[-89.703427,39.525132],[-89.69795,38.999346],[-90.147059,38.999346],[-90.147059,39.262239],[-90.152536,39.519655],[-89.927981,39.519655],[-89.758196,39.525132]]]},"id":"17117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.579737,39.519655],[-90.300413,39.519655],[-90.152536,39.519655],[-90.147059,39.262239],[-90.601645,39.119839],[-90.612599,39.393686],[-90.579737,39.519655]]]},"id":"17061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.268022,39.514178],[-82.742236,39.470363],[-82.747713,39.366301],[-82.764143,39.20747],[-82.786051,39.169131],[-83.355653,39.196516],[-83.372084,39.377255],[-83.268022,39.514178]]]},"id":"39141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.053457,39.497748],[-109.053457,39.366301],[-109.058934,38.500944],[-110.022876,38.500944],[-110.022876,39.459409],[-109.053457,39.497748]]]},"id":"49019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.823943,39.492271],[-77.823943,39.492271],[-77.719881,39.322485],[-77.82942,39.130793],[-78.032067,39.262239],[-77.823943,39.492271]]]},"id":"54037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.76459,39.486794],[-87.529082,39.47584],[-87.605759,39.256762],[-87.644097,39.158177],[-87.786498,39.180085],[-87.950806,39.174608],[-88.005575,39.174608],[-88.011052,39.377255],[-87.96176,39.481317],[-87.76459,39.486794]]]},"id":"17023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.038907,39.470363],[-81.006046,39.34987],[-81.016999,39.34987],[-81.241554,39.267716],[-81.373001,39.344393],[-81.121061,39.459409],[-81.038907,39.470363]]]},"id":"54073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.937572,39.47584],[-86.685633,39.470363],[-86.630863,39.34987],[-86.685633,39.163654],[-87.052588,39.169131],[-86.937572,39.47584]]]},"id":"18119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.49669,39.470363],[-80.195458,39.393686],[-80.168074,39.240331],[-80.22832,39.114362],[-80.29952,39.103408],[-80.452875,39.141746],[-80.595275,39.169131],[-80.545983,39.426547],[-80.49669,39.470363]]]},"id":"54033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.349729,39.464886],[-78.229237,39.393686],[-78.032067,39.262239],[-78.032067,39.262239],[-78.15256,39.037685],[-78.311391,39.0103],[-78.338776,39.103408],[-78.541422,39.054115],[-78.508561,39.086977],[-78.349729,39.464886]]]},"id":"51069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.56695,39.453932],[-94.210949,39.453932],[-94.210949,39.20747],[-94.419073,39.147223],[-94.605288,39.114362],[-94.599812,39.158177],[-94.599812,39.453932],[-94.56695,39.453932]]]},"id":"29047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.299967,39.453932],[-85.29449,39.267716],[-85.442367,39.196516],[-85.68883,39.130793],[-85.683353,39.34987],[-85.628583,39.453932],[-85.299967,39.453932]]]},"id":"18031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.938042,39.453932],[-79.894227,39.437501],[-79.894227,39.300578],[-79.976381,39.262239],[-80.168074,39.240331],[-80.195458,39.393686],[-79.938042,39.453932]]]},"id":"54091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.617183,39.448455],[-80.545983,39.426547],[-80.595275,39.169131],[-80.726722,39.097931],[-80.814353,39.108885],[-80.89103,39.295101],[-80.617183,39.448455]]]},"id":"54017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.465168,39.42107],[-95.180367,39.42107],[-95.185844,39.043162],[-95.49803,39.054115],[-95.591138,39.218424],[-95.56923,39.42107],[-95.465168,39.42107]]]},"id":"20087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.065351,39.42107],[-94.966767,39.42107],[-94.775074,39.201993],[-94.862705,39.201993],[-94.90652,38.988392],[-95.054398,38.982915],[-95.185844,39.043162],[-95.180367,39.42107],[-95.065351,39.42107]]]},"id":"20103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.077621,39.415593],[-121.891405,39.382732],[-121.907836,39.306055],[-121.836636,38.922669],[-122.061191,38.928146],[-122.340515,38.922669],[-122.740331,39.382732],[-122.077621,39.415593]]]},"id":"06011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.274392,39.317009],[-93.104607,39.382732],[-92.847191,39.223901],[-92.934822,39.065069],[-93.049837,38.928146],[-93.498947,38.944577],[-93.477039,39.295101],[-93.274392,39.317009]]]},"id":"29195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.373001,39.344393],[-81.241554,39.267716],[-81.296323,39.185562],[-81.42777,39.13627],[-81.581124,39.026731],[-81.739956,39.092454],[-81.745433,39.097931],[-81.756386,39.180085],[-81.723525,39.218424],[-81.373001,39.344393]]]},"id":"54107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.935738,39.399163],[-90.612599,39.393686],[-90.601645,39.119839],[-90.448291,38.966484],[-90.667368,38.933623],[-90.722138,39.223901],[-90.935738,39.399163]]]},"id":"17013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.747713,39.366301],[-82.28765,39.382732],[-82.271219,39.201993],[-82.28765,39.201993],[-82.320511,39.026731],[-82.435527,39.037685],[-82.671035,39.201993],[-82.764143,39.20747],[-82.747713,39.366301]]]},"id":"39163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.016999,39.34987],[-81.006046,39.34987],[-80.89103,39.295101],[-80.814353,39.108885],[-81.03343,39.0103],[-81.115584,39.037685],[-81.164877,39.032208],[-81.296323,39.185562],[-81.241554,39.267716],[-81.016999,39.34987]]]},"id":"54085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.000122,39.377255],[-75.764614,39.377255],[-75.759137,39.295101],[-75.75366,39.245808],[-75.846768,39.256762],[-76.158953,39.092454],[-76.000122,39.377255]]]},"id":"24029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.134248,39.377255],[-106.189017,39.054115],[-106.375233,39.054115],[-106.57788,39.059592],[-106.424526,39.360824],[-106.205448,39.377255],[-106.134248,39.377255]]]},"id":"08065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.142499,39.377255],[-88.011052,39.377255],[-88.005575,39.174608],[-88.361576,39.169131],[-88.471115,39.212947],[-88.471115,39.371778],[-88.142499,39.377255]]]},"id":"17035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.591161,39.377255],[-83.372084,39.377255],[-83.355653,39.196516],[-83.383038,39.054115],[-83.673316,39.021254],[-83.865008,39.245808],[-83.591161,39.377255]]]},"id":"39071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.651878,39.371778],[-76.525908,39.218424],[-76.531385,39.20747],[-76.619016,39.234854],[-76.619016,39.234854],[-76.651878,39.371778]]]},"id":"24510"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.079079,39.366301],[-76.881909,39.34987],[-76.695693,39.212947],[-76.838094,39.103408],[-76.887386,39.130793],[-77.16671,39.355347],[-77.16671,39.355347],[-77.079079,39.366301]]]},"id":"24027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.774133,39.366301],[-107.432283,39.366301],[-107.393944,39.256762],[-107.503483,39.218424],[-107.514437,39.212947],[-108.379794,38.67073],[-109.058934,38.500944],[-109.053457,39.366301],[-108.774133,39.366301]]]},"id":"08077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.04342,39.366301],[-106.424526,39.360824],[-106.57788,39.059592],[-106.599788,38.999346],[-107.393944,39.256762],[-107.432283,39.366301],[-107.11462,39.366301],[-107.04342,39.366301]]]},"id":"08097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.616736,39.311532],[-75.512674,39.366301],[-75.310028,38.944577],[-75.720798,38.829561],[-75.748183,39.141746],[-75.75366,39.245808],[-75.759137,39.295101],[-75.616736,39.311532]]]},"id":"10001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.630863,39.34987],[-86.378924,39.338916],[-86.318678,39.048638],[-86.318678,38.988392],[-86.680156,38.993869],[-86.685633,39.163654],[-86.630863,39.34987]]]},"id":"18105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.243388,39.317009],[-77.16671,39.355347],[-76.887386,39.130793],[-77.002402,38.966484],[-77.035264,38.993869],[-77.117418,38.933623],[-77.331019,39.059592],[-77.456988,39.218424],[-77.243388,39.317009]]]},"id":"24031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.798368,39.34987],[-85.683353,39.34987],[-85.68883,39.130793],[-85.798368,39.070546],[-86.077692,39.048638],[-86.083169,39.344393],[-85.951723,39.34987],[-85.798368,39.34987]]]},"id":"18005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.31045,39.34987],[-91.718941,39.338916],[-91.439617,39.317009],[-91.406755,39.141746],[-91.625833,39.147223],[-91.63131,39.059592],[-92.107804,39.065069],[-92.315927,39.245808],[-92.31045,39.34987]]]},"id":"29007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.252954,39.344393],[-86.083169,39.344393],[-86.077692,39.048638],[-86.318678,39.048638],[-86.378924,39.338916],[-86.252954,39.344393]]]},"id":"18013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.847191,39.223901],[-92.70479,39.322485],[-92.430943,39.251285],[-92.556913,38.971961],[-92.918391,39.032208],[-92.934822,39.065069],[-92.847191,39.223901]]]},"id":"29089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.979578,39.240331],[-79.132932,38.81313],[-79.35201,38.95553],[-79.357487,38.966484],[-79.488933,39.196516],[-79.488933,39.20747],[-79.275332,39.327962],[-78.979578,39.240331]]]},"id":"54023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.860918,39.322485],[-74.548733,39.295101],[-74.915688,39.180085],[-74.860918,39.322485]]]},"id":"34009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.719881,39.322485],[-77.676066,39.322485],[-77.456988,39.218424],[-77.331019,39.059592],[-77.533665,38.845992],[-77.654158,38.944577],[-77.960867,39.015777],[-77.82942,39.130793],[-77.719881,39.322485]]]},"id":"51107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.149738,39.317009],[-120.007338,39.317009],[-120.001861,39.163654],[-120.001861,39.114362],[-120.001861,39.065069],[-121.04248,38.917192],[-121.141065,38.714545],[-121.486112,38.736453],[-121.414912,38.999346],[-121.277988,39.032208],[-120.149738,39.317009]]]},"id":"06061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.598918,39.306055],[-84.352456,39.289624],[-84.259348,39.273193],[-84.319594,39.021254],[-84.50581,39.092454],[-84.620826,39.076023],[-84.817996,39.103408],[-84.817996,39.306055],[-84.598918,39.306055]]]},"id":"39061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.09732,39.311532],[-85.064458,39.306055],[-85.130182,38.950054],[-85.135659,38.928146],[-85.201382,38.911715],[-85.299967,38.911715],[-85.442367,38.911715],[-85.442367,39.196516],[-85.29449,39.267716],[-85.09732,39.311532]]]},"id":"18137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.031597,39.306055],[-84.817996,39.306055],[-84.817996,39.103408],[-84.878242,39.032208],[-84.933012,39.0103],[-85.130182,38.950054],[-85.064458,39.306055],[-85.031597,39.306055]]]},"id":"18029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.590221,39.306055],[-97.371143,39.306055],[-97.371143,39.130793],[-97.371143,38.95553],[-97.486159,38.95553],[-97.929791,38.95553],[-97.929791,39.218424],[-97.929791,39.306055],[-97.590221,39.306055]]]},"id":"20143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.623035,39.295101],[-121.414912,38.999346],[-121.486112,38.736453],[-121.557312,38.736453],[-121.601128,38.736453],[-121.836636,38.922669],[-121.907836,39.306055],[-121.623035,39.295101]]]},"id":"06101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.976381,39.262239],[-79.894227,39.300578],[-79.812073,39.229378],[-79.823026,39.114362],[-80.08592,38.944577],[-80.22832,39.114362],[-80.168074,39.240331],[-79.976381,39.262239]]]},"id":"54001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.597531,39.240331],[-93.477039,39.295101],[-93.498947,38.944577],[-93.498947,38.928146],[-93.800178,38.9391],[-94.112364,38.917192],[-94.106887,39.141746],[-93.756363,39.20747],[-93.597531,39.240331]]]},"id":"29107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.812073,39.229378],[-79.488933,39.196516],[-79.357487,38.966484],[-79.757303,39.032208],[-79.823026,39.114362],[-79.812073,39.229378]]]},"id":"54093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.259348,39.273193],[-84.007409,39.256762],[-83.990978,39.256762],[-84.051224,38.769315],[-84.231963,38.829561],[-84.231963,38.873376],[-84.319594,39.021254],[-84.259348,39.273193]]]},"id":"39025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.032067,39.262239],[-78.032067,39.262239],[-77.82942,39.130793],[-77.960867,39.015777],[-78.004682,38.977438],[-78.15256,39.037685],[-78.032067,39.262239]]]},"id":"51043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.147059,39.262239],[-90.147059,38.999346],[-90.240167,38.999346],[-90.278506,38.922669],[-90.448291,38.966484],[-90.601645,39.119839],[-90.147059,39.262239]]]},"id":"17083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.846768,39.256762],[-75.75366,39.245808],[-75.748183,39.141746],[-75.748183,39.141746],[-75.95083,38.917192],[-76.071322,38.9391],[-76.197292,38.851469],[-76.158953,39.092454],[-75.846768,39.256762]]]},"id":"24035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.578374,39.256762],[-87.238804,39.256762],[-87.238804,39.169131],[-87.238804,38.906238],[-87.534558,38.900761],[-87.644097,39.158177],[-87.605759,39.256762],[-87.578374,39.256762]]]},"id":"18153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.503483,39.218424],[-107.393944,39.256762],[-106.599788,38.999346],[-106.249264,38.424267],[-106.999605,38.424267],[-106.999605,38.144943],[-107.569206,38.144943],[-107.63493,38.303775],[-107.498006,38.67073],[-107.503483,39.218424]]]},"id":"08051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.990978,39.256762],[-83.865008,39.245808],[-83.673316,39.021254],[-83.706177,38.637868],[-83.848578,38.747407],[-83.903347,38.769315],[-84.051224,38.769315],[-83.990978,39.256762]]]},"id":"39015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.580137,39.196516],[-119.552752,39.086977],[-119.760876,39.114362],[-120.001861,39.114362],[-120.001861,39.163654],[-119.711583,39.251285],[-119.580137,39.196516]]]},"id":"32510"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.430943,39.251285],[-92.315927,39.245808],[-92.107804,39.065069],[-92.222819,38.643345],[-92.392605,38.736453],[-92.463805,38.862422],[-92.496666,38.922669],[-92.556913,38.971961],[-92.430943,39.251285]]]},"id":"29019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.979578,39.240331],[-78.508561,39.086977],[-78.541422,39.054115],[-78.870039,38.763838],[-78.990532,38.845992],[-79.056255,38.763838],[-79.132932,38.81313],[-78.979578,39.240331]]]},"id":"54031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.619016,39.234854],[-76.531385,39.20747],[-76.531385,38.714545],[-76.635447,38.769315],[-76.68474,38.747407],[-76.838094,39.103408],[-76.695693,39.212947],[-76.619016,39.234854],[-76.619016,39.234854]]]},"id":"24003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.419073,39.147223],[-94.210949,39.20747],[-94.106887,39.141746],[-94.112364,38.917192],[-94.117841,38.835038],[-94.583381,38.845992],[-94.610765,38.845992],[-94.605288,39.043162],[-94.605288,39.114362],[-94.419073,39.147223]]]},"id":"29095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.149339,39.229378],[-90.722138,39.223901],[-90.667368,38.933623],[-90.957646,38.873376],[-91.111001,38.895284],[-91.264355,38.993869],[-91.258878,39.141746],[-91.149339,39.229378]]]},"id":"29113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.943942,39.218424],[-96.50031,39.043162],[-96.50031,38.867899],[-96.686526,38.867899],[-96.889173,38.867899],[-96.96585,39.130793],[-96.960373,39.218424],[-96.943942,39.218424]]]},"id":"20061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.477485,39.218424],[-97.929791,39.218424],[-97.929791,38.95553],[-97.929791,38.873376],[-98.482962,38.873376],[-98.488439,39.130793],[-98.488439,39.218424],[-98.477485,39.218424]]]},"id":"20105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.514437,39.212947],[-107.503483,39.218424],[-107.498006,38.67073],[-108.001885,38.67073],[-108.379794,38.67073],[-107.514437,39.212947]]]},"id":"08029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.139302,39.218424],[-88.805209,39.218424],[-88.69567,38.917192],[-88.69567,38.824084],[-88.777824,38.824084],[-89.139302,38.736453],[-89.254318,38.74193],[-89.248841,39.026731],[-89.139302,39.218424]]]},"id":"17051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.886893,39.218424],[-95.591138,39.218424],[-95.49803,39.054115],[-95.49803,38.867899],[-95.667815,38.867899],[-95.947139,38.867899],[-96.040247,39.125316],[-96.03477,39.218424],[-95.886893,39.218424]]]},"id":"20177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.580654,39.212947],[-88.471115,39.212947],[-88.361576,39.169131],[-88.361576,38.911715],[-88.613516,38.917192],[-88.69567,38.917192],[-88.805209,39.218424],[-88.580654,39.212947]]]},"id":"17049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.040247,39.125316],[-95.947139,38.867899],[-95.947139,38.736453],[-96.336002,38.74193],[-96.352432,38.74193],[-96.50031,38.867899],[-96.50031,39.043162],[-96.390771,39.174608],[-96.040247,39.125316]]]},"id":"20197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.671035,39.201993],[-82.435527,39.037685],[-82.577927,38.845992],[-82.649128,38.851469],[-82.807959,38.950054],[-82.786051,39.169131],[-82.764143,39.20747],[-82.671035,39.201993]]]},"id":"39079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.28765,39.201993],[-82.271219,39.201993],[-81.756386,39.180085],[-81.745433,39.097931],[-81.909741,38.878853],[-82.101434,38.95553],[-82.320511,39.026731],[-82.28765,39.201993]]]},"id":"39105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.862705,39.201993],[-94.775074,39.201993],[-94.599812,39.158177],[-94.605288,39.114362],[-94.605288,39.043162],[-94.90652,38.988392],[-94.862705,39.201993]]]},"id":"20209"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.355653,39.196516],[-82.786051,39.169131],[-82.807959,38.950054],[-83.273499,39.015777],[-83.383038,39.054115],[-83.355653,39.196516]]]},"id":"39131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.442367,39.196516],[-85.442367,38.911715],[-85.683353,38.81313],[-85.792891,38.807653],[-85.798368,39.070546],[-85.68883,39.130793],[-85.442367,39.196516]]]},"id":"18079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.42777,39.13627],[-81.296323,39.185562],[-81.164877,39.032208],[-81.279893,38.917192],[-81.433247,38.933623],[-81.504447,38.917192],[-81.581124,39.026731],[-81.42777,39.13627]]]},"id":"54105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.786498,39.180085],[-87.644097,39.158177],[-87.534558,38.900761],[-87.534558,38.851469],[-87.90699,38.851469],[-87.945329,38.851469],[-87.950806,39.174608],[-87.786498,39.180085]]]},"id":"17033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.005575,39.174608],[-87.950806,39.174608],[-87.945329,38.851469],[-88.257515,38.845992],[-88.361576,38.911715],[-88.361576,39.169131],[-88.005575,39.174608]]]},"id":"17079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.211419,39.169131],[-87.052588,39.169131],[-86.685633,39.163654],[-86.680156,38.993869],[-86.680156,38.906238],[-86.756833,38.906238],[-86.90471,38.906238],[-87.096403,38.906238],[-87.238804,38.906238],[-87.238804,39.169131],[-87.211419,39.169131]]]},"id":"18055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.452875,39.141746],[-80.29952,39.103408],[-80.392628,38.725499],[-80.458352,38.74193],[-80.606229,38.906238],[-80.726722,39.097931],[-80.595275,39.169131],[-80.452875,39.141746]]]},"id":"54041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.233726,39.163654],[-115.90511,39.163654],[-115.001414,38.676207],[-115.001414,38.051835],[-115.894156,38.051835],[-115.894156,36.841432],[-115.899633,36.00346],[-117.164806,36.972878],[-117.164806,38.002543],[-117.690592,38.47356],[-118.194471,38.917192],[-117.865854,39.076023],[-117.772746,39.092454],[-116.600681,39.163654],[-116.233726,39.163654]]]},"id":"32023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.625833,39.147223],[-91.406755,39.141746],[-91.258878,39.141746],[-91.264355,38.993869],[-91.417709,38.709068],[-91.642264,38.703591],[-91.647741,38.703591],[-91.63131,39.059592],[-91.625833,39.147223]]]},"id":"29139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.620826,39.076023],[-84.615349,38.802176],[-84.659165,38.774791],[-84.779657,38.856946],[-84.796088,38.856946],[-84.872765,38.900761],[-84.878242,39.032208],[-84.817996,39.103408],[-84.620826,39.076023]]]},"id":"21015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.748183,39.141746],[-75.748183,39.141746],[-75.720798,38.829561],[-75.709844,38.637868],[-75.841291,38.703591],[-75.945353,38.676207],[-75.95083,38.917192],[-75.748183,39.141746]]]},"id":"24011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.391218,39.13627],[-100.810662,39.130793],[-100.816139,38.698114],[-101.128324,38.698114],[-101.259771,38.703591],[-101.484326,38.698114],[-101.478849,39.13627],[-101.391218,39.13627]]]},"id":"20109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.478849,39.13627],[-101.484326,38.698114],[-101.56648,38.698114],[-102.042974,38.698114],[-102.04845,39.048638],[-102.04845,39.130793],[-101.478849,39.13627]]]},"id":"20199"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.510347,39.130793],[-98.488439,39.130793],[-98.482962,38.873376],[-98.488439,38.698114],[-98.811579,38.698114],[-99.030656,38.698114],[-99.04161,38.698114],[-99.036133,39.130793],[-98.510347,39.130793]]]},"id":"20167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.261605,39.130793],[-96.96585,39.130793],[-96.889173,38.867899],[-96.932988,38.610483],[-97.261605,38.610483],[-97.371143,38.610483],[-97.371143,38.95553],[-97.371143,39.130793],[-97.261605,39.130793]]]},"id":"20041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.408565,39.130793],[-99.047087,39.130793],[-99.036133,39.130793],[-99.04161,38.698114],[-99.583827,38.698114],[-99.600258,38.698114],[-99.589304,39.130793],[-99.408565,39.130793]]]},"id":"20051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.739462,39.130793],[-100.723031,39.130793],[-100.164383,39.130793],[-100.147952,39.130793],[-100.153429,38.698114],[-100.246537,38.698114],[-100.58063,38.698114],[-100.690169,38.698114],[-100.816139,38.698114],[-100.810662,39.130793],[-100.739462,39.130793]]]},"id":"20063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.589304,39.130793],[-99.600258,38.698114],[-100.153429,38.698114],[-100.147952,39.130793],[-99.605735,39.130793],[-99.589304,39.130793]]]},"id":"20195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.887386,39.130793],[-76.838094,39.103408],[-76.68474,38.747407],[-76.673786,38.533806],[-77.046218,38.61596],[-77.084556,38.709068],[-77.040741,38.785745],[-77.040741,38.791222],[-77.002402,38.966484],[-76.887386,39.130793]]]},"id":"24033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.995044,39.130793],[-104.660951,39.130793],[-104.053011,39.130793],[-104.053011,38.867899],[-104.053011,38.522852],[-104.940275,38.517375],[-104.940275,38.648822],[-105.033383,39.130793],[-104.995044,39.130793]]]},"id":"08041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.329138,39.130793],[-105.329138,39.130793],[-105.033383,39.130793],[-104.940275,38.648822],[-105.329138,38.698114],[-105.329138,39.130793]]]},"id":"08119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.319594,39.021254],[-84.231963,38.873376],[-84.418179,38.807653],[-84.50581,39.092454],[-84.319594,39.021254]]]},"id":"21037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.757303,39.032208],[-79.357487,38.966484],[-79.35201,38.95553],[-79.625857,38.665253],[-80.244751,38.385929],[-80.277612,38.692637],[-80.08592,38.944577],[-79.823026,39.114362],[-79.757303,39.032208]]]},"id":"54083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.22832,39.114362],[-80.08592,38.944577],[-80.277612,38.692637],[-80.392628,38.725499],[-80.29952,39.103408],[-80.22832,39.114362]]]},"id":"54097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.760876,39.114362],[-119.552752,39.086977],[-119.328197,38.533806],[-119.585614,38.714545],[-119.903276,38.933623],[-120.001861,39.065069],[-120.001861,39.114362],[-119.760876,39.114362]]]},"id":"32005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.726722,39.097931],[-80.606229,38.906238],[-80.984138,38.720022],[-81.03343,39.0103],[-80.814353,39.108885],[-80.726722,39.097931]]]},"id":"54021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.338776,39.103408],[-78.311391,39.0103],[-78.388068,38.829561],[-78.640007,38.605006],[-78.870039,38.763838],[-78.541422,39.054115],[-78.338776,39.103408]]]},"id":"51171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.50581,39.092454],[-84.418179,38.807653],[-84.533195,38.791222],[-84.615349,38.802176],[-84.620826,39.076023],[-84.50581,39.092454]]]},"id":"21117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.739956,39.092454],[-81.581124,39.026731],[-81.504447,38.917192],[-81.520878,38.610483],[-81.69614,38.626914],[-81.772817,38.681683],[-81.909741,38.878853],[-81.745433,39.097931],[-81.739956,39.092454]]]},"id":"54035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.764072,39.076023],[-118.753119,39.076023],[-117.865854,39.076023],[-118.194471,38.917192],[-117.690592,38.47356],[-118.429979,37.898481],[-119.158412,38.413313],[-118.906473,38.413313],[-118.764072,39.076023]]]},"id":"32021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.798368,39.070546],[-85.792891,38.807653],[-85.885999,38.736453],[-86.274862,38.763838],[-86.318678,38.988392],[-86.318678,39.048638],[-86.077692,39.048638],[-85.798368,39.070546]]]},"id":"18071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.49803,39.054115],[-95.185844,39.043162],[-95.054398,38.982915],[-95.054398,38.736453],[-95.49803,38.736453],[-95.503507,38.736453],[-95.49803,38.867899],[-95.49803,39.054115]]]},"id":"20045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.001861,39.065069],[-119.903276,38.933623],[-120.073061,38.703591],[-121.026049,38.506421],[-121.141065,38.714545],[-121.04248,38.917192],[-120.001861,39.065069]]]},"id":"06017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.107804,39.065069],[-91.63131,39.059592],[-91.647741,38.703591],[-92.009219,38.572145],[-92.222819,38.643345],[-92.107804,39.065069]]]},"id":"29027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.918391,39.032208],[-92.556913,38.971961],[-92.496666,38.922669],[-92.841714,38.681683],[-93.060791,38.692637],[-93.049837,38.928146],[-92.934822,39.065069],[-92.918391,39.032208]]]},"id":"29053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.90652,38.988392],[-94.605288,39.043162],[-94.610765,38.845992],[-94.610765,38.736453],[-94.966767,38.736453],[-95.054398,38.736453],[-95.054398,38.982915],[-94.90652,38.988392]]]},"id":"20091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.375233,39.054115],[-106.189017,39.054115],[-105.96994,38.692637],[-106.008278,38.446175],[-106.249264,38.424267],[-106.599788,38.999346],[-106.57788,39.059592],[-106.375233,39.054115]]]},"id":"08015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.331019,39.059592],[-77.117418,38.933623],[-77.172187,38.895284],[-77.15028,38.878853],[-77.111941,38.845992],[-77.040741,38.785745],[-77.084556,38.709068],[-77.128372,38.632391],[-77.22148,38.637868],[-77.533665,38.845992],[-77.331019,39.059592]]]},"id":"51059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.383038,39.054115],[-83.273499,39.015777],[-83.273499,39.0103],[-83.268022,38.61596],[-83.645931,38.637868],[-83.706177,38.637868],[-83.673316,39.021254],[-83.383038,39.054115]]]},"id":"39001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.04845,39.048638],[-102.042974,38.698114],[-102.042974,38.61596],[-103.171223,38.610483],[-103.165746,39.037685],[-102.04845,39.048638]]]},"id":"08017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.978143,39.043162],[-111.299003,39.032208],[-111.30448,38.511898],[-111.764543,38.500944],[-111.857651,38.500944],[-112.52036,38.511898],[-112.514883,38.572145],[-112.016482,39.043162],[-111.978143,39.043162]]]},"id":"49041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.115584,39.037685],[-81.03343,39.0103],[-80.984138,38.720022],[-81.03343,38.665253],[-81.055338,38.643345],[-81.082723,38.610483],[-81.279893,38.917192],[-81.164877,39.032208],[-81.115584,39.037685]]]},"id":"54013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.15256,39.037685],[-78.004682,38.977438],[-78.130652,38.862422],[-78.256622,38.758361],[-78.284006,38.758361],[-78.388068,38.829561],[-78.311391,39.0103],[-78.15256,39.037685]]]},"id":"51187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.435527,39.037685],[-82.320511,39.026731],[-82.101434,38.95553],[-82.216449,38.594052],[-82.265742,38.599529],[-82.28765,38.583099],[-82.577927,38.845992],[-82.435527,39.037685]]]},"id":"39053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.933012,39.0103],[-84.878242,39.032208],[-84.872765,38.900761],[-85.135659,38.928146],[-85.130182,38.950054],[-84.933012,39.0103]]]},"id":"18115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.909741,38.878853],[-81.772817,38.681683],[-82.057618,38.47356],[-82.216449,38.594052],[-82.101434,38.95553],[-81.909741,38.878853]]]},"id":"54053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.248841,39.026731],[-89.254318,38.74193],[-89.593888,38.74193],[-89.599365,38.74193],[-89.637704,38.999346],[-89.248841,39.026731]]]},"id":"17005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.273499,39.0103],[-83.273499,39.015777],[-82.807959,38.950054],[-82.649128,38.851469],[-82.813436,38.572145],[-83.032514,38.725499],[-83.268022,38.61596],[-83.273499,39.0103]]]},"id":"39145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.960867,39.015777],[-77.654158,38.944577],[-77.533665,38.555714],[-77.637727,38.407836],[-77.933482,38.698114],[-78.130652,38.862422],[-78.004682,38.977438],[-77.960867,39.015777]]]},"id":"51061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.240167,38.999346],[-90.147059,38.999346],[-89.69795,38.999346],[-89.637704,38.999346],[-89.599365,38.74193],[-89.708904,38.654299],[-90.179921,38.659776],[-90.168967,38.774791],[-90.119674,38.807653],[-90.278506,38.922669],[-90.240167,38.999346]]]},"id":"17119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.035264,38.993869],[-77.002402,38.966484],[-77.040741,38.791222],[-77.046218,38.840515],[-77.117418,38.933623],[-77.035264,38.993869]]]},"id":"11001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.111001,38.895284],[-90.957646,38.873376],[-90.963123,38.550237],[-91.368417,38.698114],[-91.417709,38.709068],[-91.264355,38.993869],[-91.111001,38.895284]]]},"id":"29219"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.680156,38.993869],[-86.318678,38.988392],[-86.274862,38.763838],[-86.307724,38.68716],[-86.685633,38.68716],[-86.680156,38.906238],[-86.680156,38.993869]]]},"id":"18093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.448291,38.966484],[-90.278506,38.922669],[-90.119674,38.807653],[-90.283983,38.878853],[-90.733092,38.637868],[-90.963123,38.550237],[-90.957646,38.873376],[-90.667368,38.933623],[-90.448291,38.966484]]]},"id":"29183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.047134,38.451652],[-75.342889,38.451652],[-75.69889,38.561191],[-75.709844,38.637868],[-75.720798,38.829561],[-75.310028,38.944577],[-75.047134,38.451652]]]},"id":"10005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.486159,38.95553],[-97.371143,38.95553],[-97.371143,38.610483],[-97.924314,38.610483],[-97.929791,38.873376],[-97.929791,38.95553],[-97.486159,38.95553]]]},"id":"20169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.35201,38.95553],[-79.132932,38.81313],[-79.056255,38.763838],[-79.22604,38.479037],[-79.313671,38.413313],[-79.647764,38.594052],[-79.625857,38.665253],[-79.35201,38.95553]]]},"id":"54071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.071322,38.9391],[-75.95083,38.917192],[-75.945353,38.676207],[-76.153476,38.632391],[-76.197292,38.851469],[-76.071322,38.9391]]]},"id":"24041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.654158,38.944577],[-77.533665,38.845992],[-77.22148,38.637868],[-77.303634,38.506421],[-77.533665,38.555714],[-77.654158,38.944577]]]},"id":"51153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.498947,38.944577],[-93.049837,38.928146],[-93.060791,38.692637],[-93.066268,38.528329],[-93.159376,38.533806],[-93.515377,38.511898],[-93.5099,38.555714],[-93.498947,38.928146],[-93.498947,38.944577]]]},"id":"29159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.433247,38.933623],[-81.279893,38.917192],[-81.082723,38.610483],[-81.192262,38.528329],[-81.520878,38.610483],[-81.504447,38.917192],[-81.433247,38.933623]]]},"id":"54087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.800178,38.9391],[-93.498947,38.928146],[-93.5099,38.555714],[-93.794701,38.561191],[-94.063071,38.566668],[-94.117841,38.835038],[-94.112364,38.917192],[-93.800178,38.9391]]]},"id":"29101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.117418,38.933623],[-77.046218,38.840515],[-77.084556,38.845992],[-77.111941,38.845992],[-77.15028,38.878853],[-77.172187,38.895284],[-77.117418,38.933623]]]},"id":"51013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.585614,38.714545],[-119.640383,38.325682],[-120.018292,38.435221],[-120.073061,38.506421],[-120.073061,38.511898],[-120.073061,38.698114],[-120.073061,38.703591],[-119.903276,38.933623],[-119.585614,38.714545]]]},"id":"06003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.135659,38.928146],[-84.872765,38.900761],[-84.796088,38.856946],[-85.02612,38.763838],[-85.201382,38.692637],[-85.201382,38.911715],[-85.135659,38.928146]]]},"id":"18155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.061191,38.928146],[-121.836636,38.922669],[-121.601128,38.736453],[-121.590174,38.314728],[-121.738051,38.539283],[-122.105006,38.511898],[-122.395284,38.862422],[-122.340515,38.922669],[-122.061191,38.928146]]]},"id":"06113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.463805,38.862422],[-92.392605,38.736453],[-92.496666,38.429744],[-92.611682,38.429744],[-92.622636,38.429744],[-92.841714,38.681683],[-92.496666,38.922669],[-92.463805,38.862422]]]},"id":"29135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.613516,38.917192],[-88.361576,38.911715],[-88.257515,38.845992],[-88.252038,38.599529],[-88.586131,38.605006],[-88.701147,38.605006],[-88.69567,38.824084],[-88.69567,38.917192],[-88.613516,38.917192]]]},"id":"17025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.299967,38.911715],[-85.201382,38.911715],[-85.201382,38.692637],[-85.332828,38.736453],[-85.425936,38.588575],[-85.568337,38.605006],[-85.683353,38.81313],[-85.442367,38.911715],[-85.299967,38.911715]]]},"id":"18077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.238804,38.906238],[-87.096403,38.906238],[-87.244281,38.54476],[-87.463358,38.533806],[-87.605759,38.446175],[-87.742682,38.413313],[-87.649574,38.566668],[-87.534558,38.851469],[-87.534558,38.900761],[-87.238804,38.906238]]]},"id":"18083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.756833,38.906238],[-86.680156,38.906238],[-86.685633,38.68716],[-86.680156,38.528329],[-86.926618,38.506421],[-86.90471,38.906238],[-86.756833,38.906238]]]},"id":"18101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.096403,38.906238],[-86.90471,38.906238],[-86.926618,38.506421],[-87.074495,38.517375],[-87.244281,38.54476],[-87.096403,38.906238]]]},"id":"18027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.606229,38.906238],[-80.458352,38.74193],[-80.650044,38.528329],[-80.677429,38.533806],[-80.880076,38.506421],[-81.03343,38.665253],[-80.984138,38.720022],[-80.606229,38.906238]]]},"id":"54007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.283983,38.878853],[-90.119674,38.807653],[-90.168967,38.774791],[-90.256598,38.533806],[-90.262075,38.522852],[-90.344229,38.385929],[-90.464722,38.500944],[-90.738569,38.47356],[-90.733092,38.637868],[-90.283983,38.878853]]]},"id":"29189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.231963,38.829561],[-84.204579,38.583099],[-84.401749,38.561191],[-84.478426,38.54476],[-84.533195,38.791222],[-84.418179,38.807653],[-84.231963,38.873376],[-84.231963,38.829561]]]},"id":"21191"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.929791,38.873376],[-97.924314,38.610483],[-97.924314,38.522852],[-98.017422,38.522852],[-98.482962,38.522852],[-98.488439,38.698114],[-98.482962,38.873376],[-97.929791,38.873376]]]},"id":"20053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.686526,38.867899],[-96.50031,38.867899],[-96.352432,38.74193],[-96.352432,38.522852],[-96.817972,38.522852],[-96.932988,38.610483],[-96.889173,38.867899],[-96.686526,38.867899]]]},"id":"20127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.667815,38.867899],[-95.49803,38.867899],[-95.503507,38.736453],[-95.508984,38.435221],[-95.656861,38.435221],[-95.952616,38.435221],[-95.947139,38.736453],[-95.947139,38.867899],[-95.667815,38.867899]]]},"id":"20139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.395284,38.862422],[-122.105006,38.511898],[-122.406238,38.155897],[-122.625315,38.665253],[-122.395284,38.862422]]]},"id":"06055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.256622,38.758361],[-78.130652,38.862422],[-77.933482,38.698114],[-78.229237,38.533806],[-78.338776,38.626914],[-78.284006,38.758361],[-78.256622,38.758361]]]},"id":"51157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.779657,38.856946],[-84.659165,38.774791],[-84.785134,38.720022],[-84.817996,38.709068],[-84.933012,38.659776],[-85.02612,38.763838],[-84.796088,38.856946],[-84.779657,38.856946]]]},"id":"21077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.074425,38.851469],[-122.822485,38.851469],[-122.625315,38.665253],[-122.406238,38.155897],[-122.406238,38.15042],[-122.488392,38.112082],[-122.844393,38.27639],[-123.003224,38.298298],[-123.534488,38.769315],[-123.074425,38.851469]]]},"id":"06097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.534558,38.851469],[-87.649574,38.566668],[-87.912467,38.572145],[-87.90699,38.851469],[-87.534558,38.851469]]]},"id":"17101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.90699,38.851469],[-87.912467,38.572145],[-87.956283,38.572145],[-88.005575,38.572145],[-88.147976,38.566668],[-88.252038,38.599529],[-88.257515,38.845992],[-87.945329,38.851469],[-87.90699,38.851469]]]},"id":"17159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.990532,38.845992],[-78.870039,38.763838],[-78.640007,38.605006],[-78.486653,38.41879],[-78.661915,38.27639],[-78.749546,38.20519],[-79.22604,38.479037],[-79.056255,38.763838],[-78.990532,38.845992]]]},"id":"51165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.649128,38.851469],[-82.577927,38.845992],[-82.28765,38.583099],[-82.506727,38.413313],[-82.561497,38.40236],[-82.594358,38.424267],[-82.665558,38.506421],[-82.813436,38.572145],[-82.649128,38.851469]]]},"id":"39087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.583381,38.845992],[-94.117841,38.835038],[-94.063071,38.566668],[-94.063071,38.446175],[-94.610765,38.479037],[-94.610765,38.479037],[-94.610765,38.736453],[-94.610765,38.845992],[-94.583381,38.845992]]]},"id":"29037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.084556,38.845992],[-77.046218,38.840515],[-77.040741,38.791222],[-77.040741,38.785745],[-77.111941,38.845992],[-77.084556,38.845992]]]},"id":"51510"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.683353,38.81313],[-85.568337,38.605006],[-85.590245,38.605006],[-85.847661,38.561191],[-85.885999,38.736453],[-85.792891,38.807653],[-85.683353,38.81313]]]},"id":"18143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.388068,38.829561],[-78.284006,38.758361],[-78.338776,38.626914],[-78.448314,38.500944],[-78.453791,38.47356],[-78.459268,38.468083],[-78.486653,38.41879],[-78.640007,38.605006],[-78.388068,38.829561]]]},"id":"51139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.051224,38.769315],[-83.903347,38.769315],[-83.990978,38.594052],[-84.160763,38.555714],[-84.204579,38.583099],[-84.231963,38.829561],[-84.051224,38.769315]]]},"id":"21023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.777824,38.824084],[-88.69567,38.824084],[-88.701147,38.605006],[-88.701147,38.47356],[-88.914747,38.479037],[-89.144779,38.47356],[-89.144779,38.500944],[-89.139302,38.736453],[-88.777824,38.824084]]]},"id":"17121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.615349,38.802176],[-84.533195,38.791222],[-84.478426,38.54476],[-84.555103,38.495467],[-84.582488,38.47356],[-84.785134,38.720022],[-84.659165,38.774791],[-84.615349,38.802176]]]},"id":"21081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.274862,38.763838],[-85.885999,38.736453],[-85.847661,38.561191],[-85.995538,38.41879],[-86.011969,38.41879],[-86.033877,38.41879],[-86.198185,38.424267],[-86.252954,38.424267],[-86.307724,38.424267],[-86.307724,38.68716],[-86.274862,38.763838]]]},"id":"18175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.168967,38.774791],[-90.179921,38.659776],[-90.256598,38.533806],[-90.168967,38.774791]]]},"id":"29510"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.635447,38.769315],[-76.531385,38.714545],[-76.405416,38.320205],[-76.673786,38.500944],[-76.673786,38.533806],[-76.68474,38.747407],[-76.635447,38.769315]]]},"id":"24009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.848578,38.747407],[-83.706177,38.637868],[-83.645931,38.637868],[-83.640454,38.522852],[-83.930732,38.489991],[-83.96907,38.583099],[-83.990978,38.594052],[-83.903347,38.769315],[-83.848578,38.747407]]]},"id":"21161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.02612,38.763838],[-84.933012,38.659776],[-85.075412,38.599529],[-85.16852,38.583099],[-85.332828,38.736453],[-85.201382,38.692637],[-85.02612,38.763838]]]},"id":"21041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.813436,38.572145],[-82.665558,38.506421],[-82.818913,38.374975],[-83.16396,38.506421],[-83.032514,38.725499],[-82.813436,38.572145]]]},"id":"21089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.593888,38.74193],[-89.254318,38.74193],[-89.139302,38.736453],[-89.144779,38.500944],[-89.320041,38.511898],[-89.703427,38.41879],[-89.708904,38.654299],[-89.599365,38.74193],[-89.593888,38.74193]]]},"id":"17027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.625857,38.665253],[-79.647764,38.594052],[-79.795642,38.265436],[-79.95995,38.062789],[-80.359767,38.227097],[-80.244751,38.385929],[-79.625857,38.665253]]]},"id":"54075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.336002,38.74193],[-95.947139,38.736453],[-95.952616,38.435221],[-95.958093,38.172328],[-96.281232,38.172328],[-96.357909,38.172328],[-96.352432,38.522852],[-96.352432,38.74193],[-96.336002,38.74193]]]},"id":"20111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.458352,38.74193],[-80.392628,38.725499],[-80.277612,38.692637],[-80.244751,38.385929],[-80.359767,38.227097],[-80.414536,38.254482],[-80.436444,38.265436],[-80.650044,38.528329],[-80.458352,38.74193]]]},"id":"54101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.392605,38.736453],[-92.222819,38.643345],[-92.009219,38.572145],[-92.195435,38.336636],[-92.496666,38.429744],[-92.392605,38.736453]]]},"id":"29051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.49803,38.736453],[-95.054398,38.736453],[-95.065351,38.391406],[-95.235137,38.391406],[-95.508984,38.391406],[-95.508984,38.435221],[-95.503507,38.736453],[-95.49803,38.736453]]]},"id":"20059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.966767,38.736453],[-94.610765,38.736453],[-94.610765,38.479037],[-94.610765,38.391406],[-95.010582,38.391406],[-95.065351,38.391406],[-95.054398,38.736453],[-94.966767,38.736453]]]},"id":"20121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.425936,38.588575],[-85.332828,38.736453],[-85.16852,38.583099],[-85.316398,38.489991],[-85.431413,38.522852],[-85.425936,38.588575]]]},"id":"21223"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.557312,38.736453],[-121.486112,38.736453],[-121.141065,38.714545],[-121.026049,38.506421],[-121.026049,38.298298],[-121.097249,38.287344],[-121.57922,38.095651],[-121.628512,38.101128],[-121.864021,38.068266],[-121.590174,38.314728],[-121.601128,38.736453],[-121.557312,38.736453]]]},"id":"06067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.268022,38.61596],[-83.032514,38.725499],[-83.16396,38.506421],[-83.339222,38.320205],[-83.410422,38.396883],[-83.454238,38.380452],[-83.602115,38.506421],[-83.640454,38.522852],[-83.645931,38.637868],[-83.268022,38.61596]]]},"id":"21135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.817996,38.709068],[-84.785134,38.720022],[-84.582488,38.47356],[-84.741319,38.353067],[-84.861812,38.358544],[-84.872765,38.358544],[-85.075412,38.599529],[-84.933012,38.659776],[-84.817996,38.709068]]]},"id":"21187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.417709,38.709068],[-91.368417,38.698114],[-91.368417,38.210667],[-91.532725,38.210667],[-91.532725,38.15042],[-91.63131,38.155897],[-91.642264,38.287344],[-91.642264,38.703591],[-91.417709,38.709068]]]},"id":"29073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.585614,38.714545],[-119.328197,38.533806],[-119.158412,38.413313],[-118.429979,37.898481],[-117.832993,37.465803],[-117.937054,37.465803],[-118.775026,37.460326],[-119.021489,37.586295],[-119.267951,37.73965],[-119.640383,38.325682],[-119.585614,38.714545]]]},"id":"06051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.073061,38.698114],[-120.073061,38.511898],[-120.993187,38.227097],[-121.026049,38.298298],[-121.026049,38.506421],[-120.073061,38.703591],[-120.073061,38.698114]]]},"id":"06005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.963123,38.550237],[-90.733092,38.637868],[-90.738569,38.47356],[-90.782384,38.20519],[-91.09457,38.20519],[-91.368417,38.210667],[-91.368417,38.698114],[-90.963123,38.550237]]]},"id":"29071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.647741,38.703591],[-91.642264,38.703591],[-91.642264,38.287344],[-91.954449,38.287344],[-92.195435,38.292821],[-92.195435,38.336636],[-92.009219,38.572145],[-91.647741,38.703591]]]},"id":"29151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.046218,38.61596],[-76.673786,38.533806],[-76.673786,38.500944],[-76.706647,38.506421],[-76.832617,38.298298],[-77.128372,38.632391],[-77.084556,38.709068],[-77.046218,38.61596]]]},"id":"24017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.841291,38.703591],[-75.709844,38.637868],[-75.69889,38.561191],[-75.813906,38.489991],[-75.923445,38.265436],[-76.153476,38.632391],[-75.945353,38.676207],[-75.841291,38.703591]]]},"id":"24019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.259771,38.703591],[-101.128324,38.698114],[-101.122848,38.265436],[-101.544572,38.265436],[-101.56648,38.265436],[-101.56648,38.698114],[-101.484326,38.698114],[-101.259771,38.703591]]]},"id":"20203"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.128324,38.698114],[-100.816139,38.698114],[-100.690169,38.698114],[-100.684692,38.265436],[-100.881862,38.265436],[-101.10094,38.265436],[-101.122848,38.265436],[-101.128324,38.698114]]]},"id":"20171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.58063,38.698114],[-100.246537,38.698114],[-100.246537,38.259959],[-100.684692,38.265436],[-100.690169,38.698114],[-100.58063,38.698114]]]},"id":"20101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.56648,38.698114],[-101.56648,38.265436],[-102.042974,38.259959],[-102.042974,38.270913],[-102.042974,38.61596],[-102.042974,38.698114],[-101.56648,38.698114]]]},"id":"20071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.246537,38.698114],[-100.153429,38.698114],[-99.600258,38.698114],[-99.583827,38.698114],[-99.583827,38.34759],[-99.583827,38.259959],[-100.224629,38.259959],[-100.246537,38.259959],[-100.246537,38.698114]]]},"id":"20135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.933482,38.698114],[-77.637727,38.407836],[-77.621296,38.369498],[-77.703451,38.358544],[-77.895143,38.391406],[-78.092313,38.309252],[-78.229237,38.533806],[-77.933482,38.698114]]]},"id":"51047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.329138,38.698114],[-104.940275,38.648822],[-104.940275,38.517375],[-105.049814,38.259959],[-105.794678,38.265436],[-106.008278,38.446175],[-105.96994,38.692637],[-105.329138,38.698114]]]},"id":"08043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.04161,38.698114],[-99.030656,38.698114],[-99.030656,38.34759],[-99.359273,38.34759],[-99.583827,38.34759],[-99.583827,38.698114],[-99.04161,38.698114]]]},"id":"20165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.811579,38.698114],[-98.488439,38.698114],[-98.482962,38.522852],[-98.477485,38.259959],[-98.800625,38.259959],[-98.910164,38.259959],[-99.030656,38.34759],[-99.030656,38.698114],[-98.811579,38.698114]]]},"id":"20009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.060791,38.692637],[-92.841714,38.681683],[-92.622636,38.429744],[-92.693836,38.22162],[-93.077222,38.259959],[-93.066268,38.528329],[-93.060791,38.692637]]]},"id":"29141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.307724,38.68716],[-86.307724,38.424267],[-86.680156,38.396883],[-86.680156,38.528329],[-86.685633,38.68716],[-86.307724,38.68716]]]},"id":"18117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.69614,38.626914],[-81.69614,38.626914],[-81.915218,38.325682],[-82.046664,38.374975],[-82.057618,38.47356],[-81.772817,38.681683],[-81.69614,38.626914]]]},"id":"54079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.70566,38.676207],[-114.048427,38.676207],[-114.048427,38.572145],[-114.048427,38.15042],[-114.053904,37.602726],[-114.048427,37.000263],[-114.048427,36.841432],[-114.081288,36.841432],[-115.894156,36.841432],[-115.894156,38.051835],[-115.001414,38.051835],[-115.001414,38.676207],[-114.70566,38.676207]]]},"id":"32017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.001885,38.67073],[-107.498006,38.67073],[-107.63493,38.303775],[-107.963546,38.15042],[-109.042503,38.15042],[-109.058934,38.500944],[-108.379794,38.67073],[-108.001885,38.67073]]]},"id":"08085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.055338,38.643345],[-81.03343,38.665253],[-80.880076,38.506421],[-81.2306,38.265436],[-81.192262,38.528329],[-81.082723,38.610483],[-81.055338,38.643345]]]},"id":"54015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.179921,38.659776],[-89.708904,38.654299],[-89.703427,38.41879],[-89.703427,38.22162],[-89.900597,38.22162],[-90.207305,38.47356],[-90.262075,38.522852],[-90.256598,38.533806],[-90.179921,38.659776]]]},"id":"17163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.448314,38.500944],[-78.338776,38.626914],[-78.229237,38.533806],[-78.092313,38.309252],[-78.289483,38.270913],[-78.453791,38.47356],[-78.448314,38.500944]]]},"id":"51113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.69614,38.626914],[-81.69614,38.626914],[-81.520878,38.610483],[-81.192262,38.528329],[-81.2306,38.265436],[-81.2306,38.265436],[-81.378478,37.969681],[-81.455155,37.986112],[-81.756386,38.20519],[-81.833064,38.210667],[-81.915218,38.325682],[-81.69614,38.626914]]]},"id":"54039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.042974,38.61596],[-102.042974,38.270913],[-102.212759,38.265436],[-102.744022,38.265436],[-103.401255,38.265436],[-103.49984,38.265436],[-103.505317,38.517375],[-103.171223,38.610483],[-102.042974,38.61596]]]},"id":"08061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.924314,38.610483],[-97.371143,38.610483],[-97.371143,38.172328],[-97.69976,38.172328],[-97.924314,38.172328],[-97.924314,38.522852],[-97.924314,38.610483]]]},"id":"20113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.261605,38.610483],[-96.932988,38.610483],[-96.817972,38.522852],[-96.83988,38.084697],[-97.113727,38.084697],[-97.152066,38.090174],[-97.152066,38.172328],[-97.371143,38.172328],[-97.371143,38.610483],[-97.261605,38.610483]]]},"id":"20115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.96907,38.583099],[-83.930732,38.489991],[-83.980024,38.440698],[-84.001932,38.440698],[-84.100517,38.457129],[-84.160763,38.555714],[-83.990978,38.594052],[-83.96907,38.583099]]]},"id":"21201"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.586131,38.605006],[-88.252038,38.599529],[-88.147976,38.566668],[-88.153453,38.254482],[-88.37253,38.254482],[-88.591608,38.254482],[-88.701147,38.254482],[-88.701147,38.47356],[-88.701147,38.605006],[-88.586131,38.605006]]]},"id":"17191"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.590245,38.605006],[-85.568337,38.605006],[-85.425936,38.588575],[-85.431413,38.522852],[-85.639537,38.380452],[-85.792891,38.287344],[-85.995538,38.41879],[-85.847661,38.561191],[-85.590245,38.605006]]]},"id":"18019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.265742,38.599529],[-82.216449,38.594052],[-82.057618,38.47356],[-82.046664,38.374975],[-82.265742,38.227097],[-82.506727,38.413313],[-82.28765,38.583099],[-82.265742,38.599529]]]},"id":"54011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.16852,38.583099],[-85.075412,38.599529],[-84.872765,38.358544],[-84.998735,38.336636],[-85.283536,38.358544],[-85.316398,38.489991],[-85.16852,38.583099]]]},"id":"21103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.533665,38.555714],[-77.303634,38.506421],[-77.287203,38.34759],[-77.325542,38.243528],[-77.369357,38.249005],[-77.446034,38.281867],[-77.528188,38.309252],[-77.621296,38.369498],[-77.637727,38.407836],[-77.533665,38.555714]]]},"id":"51179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.647764,38.594052],[-79.313671,38.413313],[-79.510841,38.177805],[-79.795642,38.265436],[-79.647764,38.594052]]]},"id":"51091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.401749,38.561191],[-84.204579,38.583099],[-84.160763,38.555714],[-84.100517,38.457129],[-84.193625,38.369498],[-84.264825,38.325682],[-84.440087,38.281867],[-84.555103,38.495467],[-84.478426,38.54476],[-84.401749,38.561191]]]},"id":"21097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.97175,38.572145],[-112.514883,38.572145],[-112.52036,38.511898],[-112.443683,38.15042],[-112.476545,38.144943],[-112.876362,38.15042],[-114.048427,38.15042],[-114.048427,38.572145],[-113.97175,38.572145]]]},"id":"49001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.912467,38.572145],[-87.649574,38.566668],[-87.742682,38.413313],[-87.972714,38.232574],[-87.989145,38.259959],[-87.956283,38.572145],[-87.912467,38.572145]]]},"id":"17185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.005575,38.572145],[-87.956283,38.572145],[-87.989145,38.259959],[-88.005575,38.259959],[-88.153453,38.254482],[-88.147976,38.566668],[-88.005575,38.572145]]]},"id":"17047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.794701,38.561191],[-93.5099,38.555714],[-93.515377,38.511898],[-93.520854,38.20519],[-93.772794,38.20519],[-94.052118,38.216144],[-94.063071,38.446175],[-94.063071,38.566668],[-93.794701,38.561191]]]},"id":"29083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.813906,38.489991],[-75.69889,38.561191],[-75.342889,38.451652],[-75.611259,38.27639],[-75.62769,38.281867],[-75.863199,38.238051],[-75.923445,38.265436],[-75.813906,38.489991]]]},"id":"24045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.677429,38.533806],[-80.650044,38.528329],[-80.436444,38.265436],[-80.880076,38.101128],[-81.192262,38.232574],[-81.2306,38.265436],[-81.2306,38.265436],[-80.880076,38.506421],[-80.677429,38.533806]]]},"id":"54067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.074495,38.517375],[-87.074495,38.232574],[-87.310004,38.243528],[-87.315481,38.243528],[-87.463358,38.533806],[-87.244281,38.54476],[-87.074495,38.517375]]]},"id":"18125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.738051,38.539283],[-121.590174,38.314728],[-121.864021,38.068266],[-122.269314,38.062789],[-122.406238,38.15042],[-122.406238,38.155897],[-122.105006,38.511898],[-121.738051,38.539283]]]},"id":"06095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.159376,38.533806],[-93.066268,38.528329],[-93.077222,38.259959],[-93.066268,38.062789],[-93.411315,38.068266],[-93.504423,38.073743],[-93.520854,38.20519],[-93.515377,38.511898],[-93.159376,38.533806]]]},"id":"29015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.605759,38.446175],[-87.463358,38.533806],[-87.315481,38.243528],[-87.468835,38.166851],[-87.687913,38.166851],[-87.972714,38.232574],[-87.978191,38.232574],[-87.972714,38.232574],[-87.742682,38.413313],[-87.605759,38.446175]]]},"id":"18051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.680156,38.528329],[-86.680156,38.396883],[-86.680156,38.265436],[-86.789695,38.20519],[-86.866372,38.20519],[-87.019726,38.20519],[-87.074495,38.232574],[-87.074495,38.517375],[-86.926618,38.506421],[-86.680156,38.528329]]]},"id":"18037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.602115,38.506421],[-83.454238,38.380452],[-83.634977,38.188759],[-83.848578,38.298298],[-83.980024,38.440698],[-83.930732,38.489991],[-83.640454,38.522852],[-83.602115,38.506421]]]},"id":"21069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.639537,38.380452],[-85.431413,38.522852],[-85.316398,38.489991],[-85.283536,38.358544],[-85.469752,38.287344],[-85.639537,38.380452]]]},"id":"21185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.053011,38.522852],[-103.505317,38.517375],[-103.49984,38.265436],[-104.058488,38.144943],[-104.053011,38.522852]]]},"id":"08025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.017422,38.522852],[-97.924314,38.522852],[-97.924314,38.172328],[-97.929791,38.172328],[-98.472008,38.172328],[-98.477485,38.259959],[-98.482962,38.522852],[-98.017422,38.522852]]]},"id":"20159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.053011,38.522852],[-104.058488,38.144943],[-104.058488,37.734173],[-104.348765,37.816327],[-105.049814,37.914912],[-105.049814,38.259959],[-104.940275,38.517375],[-104.053011,38.522852]]]},"id":"08101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.817972,38.522852],[-96.352432,38.522852],[-96.357909,38.172328],[-96.522218,38.084697],[-96.83988,38.084697],[-96.817972,38.522852]]]},"id":"20017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.207305,38.47356],[-89.900597,38.22162],[-90.03752,38.22162],[-90.207305,38.090174],[-90.251121,38.128512],[-90.344229,38.385929],[-90.262075,38.522852],[-90.207305,38.47356]]]},"id":"17133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.320041,38.511898],[-89.144779,38.500944],[-89.144779,38.47356],[-89.144779,38.210667],[-89.593888,38.22162],[-89.703427,38.22162],[-89.703427,38.41879],[-89.320041,38.511898]]]},"id":"17189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.706647,38.506421],[-76.673786,38.500944],[-76.405416,38.320205],[-76.832617,38.298298],[-76.706647,38.506421]]]},"id":"24037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.857651,38.500944],[-111.764543,38.500944],[-111.84122,38.15042],[-112.443683,38.15042],[-112.52036,38.511898],[-111.857651,38.500944]]]},"id":"49031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.764543,38.500944],[-111.30448,38.511898],[-110.022876,38.500944],[-109.929768,38.15042],[-111.84122,38.15042],[-111.764543,38.500944]]]},"id":"49055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.073061,38.506421],[-120.018292,38.435221],[-120.045677,38.424267],[-120.653617,37.832758],[-120.927464,38.07922],[-120.993187,38.227097],[-120.073061,38.511898],[-120.073061,38.506421]]]},"id":"06009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.594358,38.424267],[-82.605312,38.249005],[-82.791528,38.243528],[-82.818913,38.374975],[-82.665558,38.506421],[-82.594358,38.424267]]]},"id":"21019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.16396,38.506421],[-82.818913,38.374975],[-82.791528,38.243528],[-82.922975,38.177805],[-83.246114,38.194236],[-83.339222,38.320205],[-83.16396,38.506421]]]},"id":"21043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.464722,38.500944],[-90.344229,38.385929],[-90.251121,38.128512],[-90.415429,38.040881],[-90.639984,38.07922],[-90.782384,38.20519],[-90.738569,38.47356],[-90.464722,38.500944]]]},"id":"29099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.022876,38.500944],[-109.058934,38.500944],[-109.042503,38.15042],[-109.042503,37.88205],[-109.042503,37.482234],[-109.042503,37.000263],[-110.000968,37.000263],[-110.751309,37.00574],[-111.414018,37.000263],[-110.647247,37.54248],[-109.929768,38.15042],[-110.022876,38.500944]]]},"id":"49037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.555103,38.495467],[-84.440087,38.281867],[-84.401749,38.20519],[-84.626303,38.117559],[-84.724888,38.194236],[-84.741319,38.353067],[-84.582488,38.47356],[-84.555103,38.495467]]]},"id":"21209"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.313671,38.413313],[-79.22604,38.479037],[-78.749546,38.20519],[-78.837177,38.046358],[-78.859085,38.029928],[-79.15484,37.893004],[-79.483456,38.084697],[-79.510841,38.177805],[-79.313671,38.413313]]]},"id":"51015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.610765,38.479037],[-94.063071,38.446175],[-94.052118,38.216144],[-94.057594,38.035405],[-94.501227,38.057312],[-94.616242,38.062789],[-94.610765,38.391406],[-94.610765,38.479037],[-94.610765,38.479037]]]},"id":"29013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.914747,38.479037],[-88.701147,38.47356],[-88.701147,38.254482],[-88.706624,38.123036],[-88.816163,38.128512],[-89.128348,38.123036],[-89.144779,38.210667],[-89.144779,38.47356],[-88.914747,38.479037]]]},"id":"17081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.459268,38.468083],[-78.453791,38.47356],[-78.289483,38.270913],[-78.371637,38.183282],[-78.661915,38.27639],[-78.486653,38.41879],[-78.459268,38.468083]]]},"id":"51079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.690592,38.47356],[-117.164806,38.002543],[-117.164806,36.972878],[-117.832993,37.465803],[-118.429979,37.898481],[-117.690592,38.47356]]]},"id":"32009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.001932,38.440698],[-83.980024,38.440698],[-83.848578,38.298298],[-83.980024,38.194236],[-84.193625,38.369498],[-84.100517,38.457129],[-84.001932,38.440698]]]},"id":"21181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.008278,38.446175],[-105.794678,38.265436],[-105.471538,37.898481],[-105.455107,37.750604],[-105.707047,37.750604],[-106.04114,37.750604],[-106.692896,37.832758],[-106.999605,37.958727],[-106.999605,38.144943],[-106.999605,38.424267],[-106.249264,38.424267],[-106.008278,38.446175]]]},"id":"08109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.342889,38.451652],[-75.047134,38.451652],[-75.244304,38.029928],[-75.397659,38.013497],[-75.622213,37.991589],[-75.611259,38.27639],[-75.342889,38.451652]]]},"id":"24047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.656861,38.435221],[-95.508984,38.435221],[-95.508984,38.391406],[-95.519938,38.040881],[-95.810215,38.040881],[-95.958093,38.040881],[-95.958093,38.172328],[-95.952616,38.435221],[-95.656861,38.435221]]]},"id":"20031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.045677,38.424267],[-120.018292,38.435221],[-119.640383,38.325682],[-119.267951,37.73965],[-119.30629,37.777988],[-120.084015,37.827281],[-120.385247,37.635588],[-120.653617,37.832758],[-120.045677,38.424267]]]},"id":"06109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.611682,38.429744],[-92.496666,38.429744],[-92.195435,38.336636],[-92.195435,38.292821],[-92.184481,38.018974],[-92.359743,38.018974],[-92.403558,38.018974],[-92.693836,38.22162],[-92.622636,38.429744],[-92.611682,38.429744]]]},"id":"29131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.307724,38.424267],[-86.252954,38.424267],[-86.307724,38.166851],[-86.461078,38.117559],[-86.570617,38.265436],[-86.680156,38.265436],[-86.680156,38.396883],[-86.307724,38.424267]]]},"id":"18025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.198185,38.424267],[-86.033877,38.41879],[-85.90243,38.177805],[-85.946246,38.00802],[-86.001015,37.997066],[-86.307724,38.166851],[-86.252954,38.424267],[-86.198185,38.424267]]]},"id":"18061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.561497,38.40236],[-82.506727,38.413313],[-82.265742,38.227097],[-82.30408,37.942297],[-82.413619,37.854665],[-82.495773,37.947773],[-82.605312,38.249005],[-82.594358,38.424267],[-82.561497,38.40236]]]},"id":"54099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.011969,38.41879],[-85.995538,38.41879],[-85.792891,38.287344],[-85.90243,38.177805],[-86.033877,38.41879],[-86.011969,38.41879]]]},"id":"18043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.996925,38.27639],[-77.062649,38.161374],[-77.117418,38.15042],[-77.325542,38.243528],[-77.287203,38.34759],[-76.996925,38.27639]]]},"id":"51099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.410422,38.396883],[-83.339222,38.320205],[-83.246114,38.194236],[-83.262545,38.117559],[-83.355653,38.068266],[-83.43233,38.035405],[-83.498053,38.051835],[-83.634977,38.188759],[-83.454238,38.380452],[-83.410422,38.396883]]]},"id":"21205"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.895143,38.391406],[-77.703451,38.358544],[-77.95539,38.117559],[-78.207329,38.133989],[-78.371637,38.183282],[-78.289483,38.270913],[-78.092313,38.309252],[-77.895143,38.391406]]]},"id":"51137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.235137,38.391406],[-95.065351,38.391406],[-95.076305,38.035405],[-95.465168,38.040881],[-95.519938,38.040881],[-95.508984,38.391406],[-95.235137,38.391406]]]},"id":"20003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.010582,38.391406],[-94.610765,38.391406],[-94.616242,38.062789],[-94.616242,38.035405],[-94.933905,38.035405],[-95.076305,38.035405],[-95.065351,38.391406],[-95.010582,38.391406]]]},"id":"20107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.639537,38.380452],[-85.469752,38.287344],[-85.425936,38.144943],[-85.431413,38.117559],[-85.699783,38.084697],[-85.940769,37.997066],[-85.946246,38.00802],[-85.90243,38.177805],[-85.792891,38.287344],[-85.639537,38.380452]]]},"id":"21111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.621296,38.369498],[-77.528188,38.309252],[-77.446034,38.281867],[-77.369357,38.249005],[-77.643204,37.991589],[-77.68702,38.00802],[-77.95539,38.117559],[-77.703451,38.358544],[-77.621296,38.369498]]]},"id":"51177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.046664,38.374975],[-81.915218,38.325682],[-81.833064,38.210667],[-81.931648,38.024451],[-82.189065,37.975158],[-82.30408,37.942297],[-82.265742,38.227097],[-82.046664,38.374975]]]},"id":"54043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.861812,38.358544],[-84.741319,38.353067],[-84.724888,38.194236],[-84.867289,38.117559],[-84.998735,38.128512],[-85.02612,38.128512],[-84.998735,38.336636],[-84.872765,38.358544],[-84.861812,38.358544]]]},"id":"21073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.264825,38.325682],[-84.193625,38.369498],[-83.980024,38.194236],[-84.040271,38.144943],[-84.078609,38.117559],[-84.286733,38.068266],[-84.401749,38.20519],[-84.440087,38.281867],[-84.264825,38.325682]]]},"id":"21017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.283536,38.358544],[-84.998735,38.336636],[-85.02612,38.128512],[-85.102797,38.035405],[-85.425936,38.144943],[-85.469752,38.287344],[-85.283536,38.358544]]]},"id":"21211"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.359273,38.34759],[-99.030656,38.34759],[-98.910164,38.259959],[-99.019702,38.002543],[-99.348319,38.002543],[-99.567396,38.084697],[-99.57835,38.259959],[-99.583827,38.259959],[-99.583827,38.34759],[-99.359273,38.34759]]]},"id":"20145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.63493,38.303775],[-107.569206,38.144943],[-107.569206,37.964204],[-107.738991,37.903958],[-107.963546,38.15042],[-107.63493,38.303775]]]},"id":"08091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.844393,38.27639],[-122.488392,38.112082],[-122.504823,37.821804],[-123.014178,38.002543],[-123.003224,38.298298],[-122.844393,38.27639]]]},"id":"06041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.848578,38.298298],[-83.634977,38.188759],[-83.498053,38.051835],[-83.760947,37.997066],[-83.980024,38.194236],[-83.848578,38.298298]]]},"id":"21011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.62769,38.281867],[-75.611259,38.27639],[-75.622213,37.991589],[-75.671506,37.95325],[-75.863199,38.238051],[-75.62769,38.281867]]]},"id":"24039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.097249,38.287344],[-121.026049,38.298298],[-120.993187,38.227097],[-120.927464,38.07922],[-120.921987,37.805373],[-121.469681,37.482234],[-121.557312,37.821804],[-121.57922,38.095651],[-121.097249,38.287344]]]},"id":"06077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.954449,38.287344],[-91.642264,38.287344],[-91.63131,38.155897],[-92.020173,38.00802],[-92.184481,38.018974],[-92.195435,38.292821],[-91.954449,38.287344]]]},"id":"29125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.520431,38.035405],[-76.635447,37.964204],[-76.914771,38.095651],[-76.936679,38.07922],[-77.062649,38.161374],[-76.996925,38.27639],[-76.520431,38.035405]]]},"id":"51193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.371637,38.183282],[-78.207329,38.133989],[-78.305914,38.00802],[-78.49213,37.794419],[-78.645484,37.734173],[-78.837177,38.046358],[-78.749546,38.20519],[-78.661915,38.27639],[-78.371637,38.183282]]]},"id":"51003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.077222,38.259959],[-92.693836,38.22162],[-92.403558,38.018974],[-92.409035,37.860142],[-92.852668,37.893004],[-93.071745,37.903958],[-93.066268,38.062789],[-93.077222,38.259959]]]},"id":"29029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.212759,38.265436],[-102.042974,38.270913],[-102.042974,38.259959],[-102.042974,37.73965],[-102.042974,37.646542],[-102.749499,37.641065],[-102.744022,38.265436],[-102.212759,38.265436]]]},"id":"08099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.744022,38.265436],[-102.749499,37.641065],[-103.078115,37.641065],[-103.406732,37.641065],[-103.401255,38.265436],[-102.744022,38.265436]]]},"id":"08011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.791528,38.243528],[-82.605312,38.249005],[-82.495773,37.947773],[-82.610789,37.876573],[-82.851774,37.975158],[-82.988698,37.964204],[-83.02156,38.00802],[-82.922975,38.177805],[-82.791528,38.243528]]]},"id":"21127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.414536,38.254482],[-80.359767,38.227097],[-79.95995,38.062789],[-80.058535,37.95325],[-80.294043,37.690357],[-80.660998,37.734173],[-80.808876,37.871096],[-80.880076,38.101128],[-80.436444,38.265436],[-80.414536,38.254482]]]},"id":"54025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.922975,38.177805],[-83.02156,38.00802],[-83.262545,38.117559],[-83.246114,38.194236],[-82.922975,38.177805]]]},"id":"21063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.570617,38.265436],[-86.461078,38.117559],[-86.488463,38.046358],[-86.652771,37.843712],[-86.811602,37.997066],[-86.789695,38.20519],[-86.680156,38.265436],[-86.570617,38.265436]]]},"id":"18123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.795642,38.265436],[-79.510841,38.177805],[-79.483456,38.084697],[-79.653241,37.871096],[-79.998289,37.958727],[-80.058535,37.95325],[-79.95995,38.062789],[-79.795642,38.265436]]]},"id":"51017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.401255,38.265436],[-103.406732,37.641065],[-104.058488,37.734173],[-104.058488,38.144943],[-103.49984,38.265436],[-103.401255,38.265436]]]},"id":"08089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.881862,38.265436],[-100.684692,38.265436],[-100.246537,38.259959],[-100.224629,38.259959],[-100.224629,38.002543],[-100.651831,37.734173],[-101.089986,37.734173],[-101.10094,38.265436],[-100.881862,38.265436]]]},"id":"20055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.794678,38.265436],[-105.049814,38.259959],[-105.049814,37.914912],[-105.186737,38.00802],[-105.471538,37.898481],[-105.794678,38.265436]]]},"id":"08027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.122848,38.265436],[-101.10094,38.265436],[-101.089986,37.734173],[-101.17214,37.734173],[-101.528141,37.734173],[-101.544572,38.265436],[-101.122848,38.265436]]]},"id":"20093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.192262,38.232574],[-80.880076,38.101128],[-80.808876,37.871096],[-80.945799,37.821804],[-81.378478,37.969681],[-81.2306,38.265436],[-81.192262,38.232574]]]},"id":"54019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.56648,38.265436],[-101.544572,38.265436],[-101.528141,37.734173],[-102.042974,37.73965],[-102.042974,38.259959],[-101.56648,38.265436]]]},"id":"20075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.57835,38.259959],[-99.567396,38.084697],[-99.567396,37.914912],[-99.874105,37.914912],[-100.224629,37.914912],[-100.224629,38.002543],[-100.224629,38.259959],[-99.583827,38.259959],[-99.57835,38.259959]]]},"id":"20083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.800625,38.259959],[-98.477485,38.259959],[-98.472008,38.172328],[-98.472008,37.827281],[-98.904687,37.827281],[-99.014225,37.827281],[-99.019702,38.002543],[-98.910164,38.259959],[-98.800625,38.259959]]]},"id":"20185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.005575,38.259959],[-87.989145,38.259959],[-87.972714,38.232574],[-87.978191,38.232574],[-88.054868,37.88205],[-88.137022,37.909435],[-88.37253,37.909435],[-88.37253,38.254482],[-88.153453,38.254482],[-88.005575,38.259959]]]},"id":"17193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.591608,38.254482],[-88.37253,38.254482],[-88.37253,37.909435],[-88.37253,37.909435],[-88.4273,37.909435],[-88.706624,37.909435],[-88.706624,38.123036],[-88.701147,38.254482],[-88.591608,38.254482]]]},"id":"17065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.325542,38.243528],[-77.117418,38.15042],[-77.068125,37.964204],[-77.073602,37.964204],[-77.183141,37.893004],[-77.347449,37.788942],[-77.643204,37.991589],[-77.369357,38.249005],[-77.325542,38.243528]]]},"id":"51033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.310004,38.243528],[-87.074495,38.232574],[-87.019726,38.20519],[-87.266188,37.876573],[-87.304527,37.898481],[-87.452404,37.942297],[-87.468835,38.166851],[-87.315481,38.243528],[-87.310004,38.243528]]]},"id":"18173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.756386,38.20519],[-81.455155,37.986112],[-81.564693,37.931343],[-81.515401,37.788942],[-81.608509,37.788942],[-81.931648,38.024451],[-81.833064,38.210667],[-81.756386,38.20519]]]},"id":"54005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.972714,38.232574],[-87.687913,38.166851],[-87.698867,37.898481],[-87.928898,37.903958],[-88.027483,37.799896],[-88.054868,37.88205],[-87.978191,38.232574],[-87.972714,38.232574]]]},"id":"18129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.03752,38.22162],[-89.900597,38.22162],[-89.703427,38.22162],[-89.593888,38.22162],[-89.593888,37.95325],[-89.676042,37.805373],[-89.938935,37.876573],[-90.207305,38.090174],[-90.03752,38.22162]]]},"id":"17157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.772794,38.20519],[-93.520854,38.20519],[-93.504423,38.073743],[-93.575624,37.827281],[-93.630393,37.827281],[-94.063071,37.898481],[-94.057594,38.035405],[-94.052118,38.216144],[-93.772794,38.20519]]]},"id":"29185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.593888,38.22162],[-89.144779,38.210667],[-89.128348,38.123036],[-89.177641,37.947773],[-89.566503,37.95325],[-89.593888,37.95325],[-89.593888,38.22162]]]},"id":"17145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.532725,38.210667],[-91.368417,38.210667],[-91.09457,38.20519],[-91.100047,37.73965],[-91.154816,37.695834],[-91.527248,37.788942],[-91.532725,38.15042],[-91.532725,38.210667]]]},"id":"29055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.401749,38.20519],[-84.286733,38.068266],[-84.336025,37.893004],[-84.43461,37.849189],[-84.659165,38.002543],[-84.626303,38.117559],[-84.401749,38.20519]]]},"id":"21067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.09457,38.20519],[-90.782384,38.20519],[-90.639984,38.07922],[-90.645461,37.734173],[-91.100047,37.73965],[-91.09457,38.20519]]]},"id":"29221"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.866372,38.20519],[-86.789695,38.20519],[-86.811602,37.997066],[-86.981388,37.931343],[-87.266188,37.876573],[-87.019726,38.20519],[-86.866372,38.20519]]]},"id":"18147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.867289,38.117559],[-84.724888,38.194236],[-84.626303,38.117559],[-84.659165,38.002543],[-84.708457,37.860142],[-84.796088,37.969681],[-84.867289,38.117559]]]},"id":"21239"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.040271,38.144943],[-83.980024,38.194236],[-83.760947,37.997066],[-83.766424,37.920389],[-83.96907,37.931343],[-84.078609,38.117559],[-84.040271,38.144943]]]},"id":"21173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.152066,38.172328],[-97.152066,38.090174],[-97.152066,37.914912],[-97.157543,37.914912],[-97.69976,37.914912],[-97.69976,38.172328],[-97.371143,38.172328],[-97.152066,38.172328]]]},"id":"20079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.929791,38.172328],[-97.924314,38.172328],[-97.69976,38.172328],[-97.69976,37.914912],[-97.809299,37.734173],[-97.918837,37.734173],[-98.466531,37.734173],[-98.472008,37.827281],[-98.472008,38.172328],[-97.929791,38.172328]]]},"id":"20155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.281232,38.172328],[-95.958093,38.172328],[-95.958093,38.040881],[-95.96357,37.734173],[-95.96357,37.602726],[-96.308617,37.608203],[-96.527695,37.608203],[-96.522218,38.084697],[-96.357909,38.172328],[-96.281232,38.172328]]]},"id":"20073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.687913,38.166851],[-87.468835,38.166851],[-87.452404,37.942297],[-87.698867,37.898481],[-87.687913,38.166851]]]},"id":"18163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.307724,38.166851],[-86.001015,37.997066],[-86.148893,37.799896],[-86.488463,38.046358],[-86.461078,38.117559],[-86.307724,38.166851]]]},"id":"21163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.062649,38.161374],[-76.936679,38.07922],[-76.777848,37.876573],[-76.68474,37.772511],[-76.750463,37.728696],[-77.068125,37.964204],[-77.117418,38.15042],[-77.062649,38.161374]]]},"id":"51057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.042503,38.15042],[-107.963546,38.15042],[-107.738991,37.903958],[-107.859484,37.777988],[-109.042503,37.88205],[-109.042503,38.15042]]]},"id":"08113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.84122,38.15042],[-109.929768,38.15042],[-110.647247,37.54248],[-112.684669,37.54248],[-112.476545,38.144943],[-112.443683,38.15042],[-111.84122,38.15042]]]},"id":"49017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.63131,38.155897],[-91.532725,38.15042],[-91.527248,37.788942],[-91.806572,37.597249],[-92.031127,37.602726],[-92.020173,38.00802],[-91.63131,38.155897]]]},"id":"29161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.95539,38.117559],[-77.68702,38.00802],[-77.796559,37.728696],[-78.064929,37.903958],[-78.305914,38.00802],[-78.207329,38.133989],[-77.95539,38.117559]]]},"id":"51109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.876362,38.15042],[-112.476545,38.144943],[-112.684669,37.54248],[-112.903746,37.498664],[-112.898269,37.498664],[-114.053904,37.602726],[-114.048427,38.15042],[-112.876362,38.15042]]]},"id":"49021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.425936,38.144943],[-85.102797,38.035405],[-85.16852,37.969681],[-85.49166,37.991589],[-85.431413,38.117559],[-85.425936,38.144943]]]},"id":"21215"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.999605,38.144943],[-106.999605,37.958727],[-107.103666,37.95325],[-107.131051,37.421987],[-107.481575,37.421987],[-107.481575,37.641065],[-107.569206,37.964204],[-107.569206,38.144943],[-106.999605,38.144943]]]},"id":"08053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.998735,38.128512],[-84.867289,38.117559],[-84.796088,37.969681],[-85.031597,37.893004],[-85.152089,37.898481],[-85.16852,37.969681],[-85.102797,38.035405],[-85.02612,38.128512],[-84.998735,38.128512]]]},"id":"21005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.251121,38.128512],[-90.207305,38.090174],[-89.938935,37.876573],[-90.10872,37.673926],[-90.415429,38.040881],[-90.251121,38.128512]]]},"id":"29186"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.816163,38.128512],[-88.706624,38.123036],[-88.706624,37.909435],[-88.706624,37.865619],[-88.728531,37.865619],[-89.150256,37.860142],[-89.177641,37.947773],[-89.128348,38.123036],[-88.816163,38.128512]]]},"id":"17055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.914771,38.095651],[-76.635447,37.964204],[-76.509478,37.838235],[-76.640924,37.794419],[-76.777848,37.876573],[-76.936679,38.07922],[-76.914771,38.095651]]]},"id":"51159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.699783,38.084697],[-85.431413,38.117559],[-85.49166,37.991589],[-85.497137,37.986112],[-85.738122,37.81085],[-85.940769,37.997066],[-85.699783,38.084697]]]},"id":"21029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.355653,38.068266],[-83.262545,38.117559],[-83.02156,38.00802],[-82.988698,37.964204],[-83.005129,37.860142],[-83.262545,37.712265],[-83.492576,37.860142],[-83.43233,38.035405],[-83.355653,38.068266]]]},"id":"21175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.078609,38.117559],[-83.96907,37.931343],[-83.990978,37.914912],[-84.001932,37.838235],[-84.078609,37.854665],[-84.270302,37.914912],[-84.336025,37.893004],[-84.286733,38.068266],[-84.078609,38.117559]]]},"id":"21049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.628512,38.101128],[-121.57922,38.095651],[-121.557312,37.821804],[-122.269314,37.903958],[-122.31313,37.898481],[-122.269314,38.062789],[-121.864021,38.068266],[-121.628512,38.101128]]]},"id":"06013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.348319,38.002543],[-99.019702,38.002543],[-99.014225,37.827281],[-99.014225,37.734173],[-99.56192,37.734173],[-99.567396,37.914912],[-99.567396,38.084697],[-99.348319,38.002543]]]},"id":"20047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.113727,38.084697],[-96.83988,38.084697],[-96.522218,38.084697],[-96.527695,37.608203],[-96.527695,37.476757],[-97.080866,37.476757],[-97.152066,37.476757],[-97.152066,37.914912],[-97.152066,38.090174],[-97.113727,38.084697]]]},"id":"20015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.483456,38.084697],[-79.15484,37.893004],[-79.171271,37.805373],[-79.439641,37.619157],[-79.499887,37.531526],[-79.675149,37.761557],[-79.653241,37.871096],[-79.483456,38.084697]]]},"id":"51163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.921987,37.805373],[-120.927464,38.07922],[-120.653617,37.832758],[-120.385247,37.635588],[-120.385247,37.635588],[-121.228696,37.137186],[-121.475158,37.482234],[-121.469681,37.482234],[-120.921987,37.805373]]]},"id":"06099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.639984,38.07922],[-90.415429,38.040881],[-90.10872,37.673926],[-90.147059,37.641065],[-90.535922,37.641065],[-90.645461,37.734173],[-90.639984,38.07922]]]},"id":"29187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.411315,38.068266],[-93.066268,38.062789],[-93.071745,37.903958],[-93.126515,37.903958],[-93.186761,37.805373],[-93.575624,37.827281],[-93.504423,38.073743],[-93.411315,38.068266]]]},"id":"29085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.501227,38.057312],[-94.057594,38.035405],[-94.063071,37.898481],[-94.074025,37.641065],[-94.490273,37.652019],[-94.616242,37.652019],[-94.616242,37.673926],[-94.616242,38.035405],[-94.616242,38.062789],[-94.501227,38.057312]]]},"id":"29217"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.498053,38.051835],[-83.43233,38.035405],[-83.492576,37.860142],[-83.607592,37.827281],[-83.6295,37.827281],[-83.766424,37.920389],[-83.760947,37.997066],[-83.498053,38.051835]]]},"id":"21165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.859085,38.029928],[-78.837177,38.046358],[-78.645484,37.734173],[-78.826223,37.553434],[-78.870039,37.54248],[-79.171271,37.805373],[-79.15484,37.893004],[-78.859085,38.029928]]]},"id":"51125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.652771,37.843712],[-86.488463,38.046358],[-86.148893,37.799896],[-86.274862,37.591772],[-86.472032,37.602726],[-86.592525,37.564388],[-86.63634,37.662973],[-86.652771,37.843712]]]},"id":"21027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.810215,38.040881],[-95.519938,38.040881],[-95.525414,37.734173],[-95.919754,37.734173],[-95.96357,37.734173],[-95.958093,38.040881],[-95.810215,38.040881]]]},"id":"20207"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.994645,37.95325],[-76.016553,37.95325],[-76.043938,37.95325],[-75.994645,37.95325]]]},"id":"24039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.465168,38.040881],[-95.076305,38.035405],[-95.087259,37.734173],[-95.399445,37.734173],[-95.525414,37.734173],[-95.519938,38.040881],[-95.465168,38.040881]]]},"id":"20001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.933905,38.035405],[-94.616242,38.035405],[-94.616242,37.673926],[-94.884612,37.673926],[-95.087259,37.673926],[-95.087259,37.734173],[-95.076305,38.035405],[-94.933905,38.035405]]]},"id":"20011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.317785,37.679403],[-76.48757,37.838235],[-76.509478,37.838235],[-76.635447,37.964204],[-76.520431,38.035405],[-76.317785,37.679403]]]},"id":"51133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.397659,38.013497],[-75.244304,38.029928],[-75.666029,37.465803],[-75.939876,37.547957],[-75.671506,37.95325],[-75.622213,37.991589],[-75.397659,38.013497]]]},"id":"51001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.931648,38.024451],[-81.608509,37.788942],[-81.800202,37.662973],[-82.189065,37.975158],[-81.931648,38.024451]]]},"id":"54045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.359743,38.018974],[-92.184481,38.018974],[-92.020173,38.00802],[-92.031127,37.602726],[-92.250204,37.602726],[-92.409035,37.860142],[-92.403558,38.018974],[-92.359743,38.018974]]]},"id":"29169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.186737,38.00802],[-105.049814,37.914912],[-104.348765,37.816327],[-105.153876,37.290541],[-105.23603,37.624634],[-105.487969,37.575342],[-105.455107,37.750604],[-105.471538,37.898481],[-105.186737,38.00802]]]},"id":"08055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.68702,38.00802],[-77.643204,37.991589],[-77.347449,37.788942],[-77.122895,37.624634],[-77.226957,37.537003],[-77.63225,37.706788],[-77.796559,37.728696],[-77.68702,38.00802]]]},"id":"51085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.946246,38.00802],[-85.940769,37.997066],[-85.738122,37.81085],[-85.677876,37.734173],[-85.891476,37.438418],[-86.017446,37.449372],[-86.044831,37.449372],[-86.274862,37.591772],[-86.148893,37.799896],[-86.001015,37.997066],[-85.946246,38.00802]]]},"id":"21093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.305914,38.00802],[-78.064929,37.903958],[-78.158037,37.750604],[-78.163514,37.750604],[-78.240191,37.690357],[-78.49213,37.794419],[-78.305914,38.00802]]]},"id":"51065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.659165,38.002543],[-84.43461,37.849189],[-84.527718,37.767034],[-84.648211,37.81085],[-84.713934,37.816327],[-84.708457,37.860142],[-84.659165,38.002543]]]},"id":"21113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.224629,38.002543],[-100.224629,37.914912],[-100.213675,37.476757],[-100.651831,37.476757],[-100.651831,37.734173],[-100.224629,38.002543]]]},"id":"20069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.851774,37.975158],[-82.610789,37.876573],[-82.638174,37.717742],[-82.786051,37.745127],[-82.939406,37.717742],[-83.005129,37.860142],[-82.988698,37.964204],[-82.851774,37.975158]]]},"id":"21115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.811602,37.997066],[-86.652771,37.843712],[-86.63634,37.662973],[-86.822556,37.73965],[-86.981388,37.931343],[-86.811602,37.997066]]]},"id":"21091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.497137,37.986112],[-85.49166,37.991589],[-85.16852,37.969681],[-85.152089,37.898481],[-85.404029,37.728696],[-85.519044,37.553434],[-85.677876,37.734173],[-85.738122,37.81085],[-85.497137,37.986112]]]},"id":"21179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.564693,37.931343],[-81.455155,37.986112],[-81.378478,37.969681],[-80.945799,37.821804],[-81.093677,37.586295],[-81.126538,37.591772],[-81.219646,37.509618],[-81.515401,37.788942],[-81.564693,37.931343]]]},"id":"54081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.698867,37.898481],[-87.452404,37.942297],[-87.304527,37.898481],[-87.408589,37.68488],[-87.49622,37.646542],[-87.731728,37.635588],[-87.928898,37.903958],[-87.698867,37.898481]]]},"id":"21101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.103666,37.95325],[-106.999605,37.958727],[-106.692896,37.832758],[-106.709327,37.405556],[-107.131051,37.421987],[-107.103666,37.95325]]]},"id":"08079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.30408,37.942297],[-82.189065,37.975158],[-81.800202,37.662973],[-81.854971,37.547957],[-81.926172,37.509618],[-81.969987,37.537003],[-82.145249,37.569865],[-82.331465,37.73965],[-82.413619,37.854665],[-82.30408,37.942297]]]},"id":"54059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.073602,37.964204],[-77.068125,37.964204],[-76.750463,37.728696],[-76.651878,37.602726],[-76.712124,37.432941],[-76.739509,37.465803],[-76.794278,37.515095],[-77.177664,37.893004],[-77.183141,37.893004],[-77.073602,37.964204]]]},"id":"51097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.796088,37.969681],[-84.708457,37.860142],[-84.713934,37.816327],[-84.746796,37.712265],[-84.856335,37.695834],[-85.02612,37.679403],[-85.031597,37.893004],[-84.796088,37.969681]]]},"id":"21167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.569206,37.964204],[-107.481575,37.641065],[-107.804715,37.641065],[-107.9745,37.641065],[-107.859484,37.777988],[-107.738991,37.903958],[-107.569206,37.964204]]]},"id":"08111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.413619,37.854665],[-82.331465,37.73965],[-82.561497,37.68488],[-82.638174,37.717742],[-82.610789,37.876573],[-82.495773,37.947773],[-82.413619,37.854665]]]},"id":"21159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.998289,37.958727],[-79.653241,37.871096],[-79.675149,37.761557],[-79.790165,37.794419],[-80.020196,37.646542],[-80.222843,37.630111],[-80.294043,37.690357],[-80.058535,37.95325],[-79.998289,37.958727]]]},"id":"51005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.566503,37.95325],[-89.177641,37.947773],[-89.150256,37.860142],[-89.155733,37.602726],[-89.522688,37.569865],[-89.676042,37.805373],[-89.593888,37.95325],[-89.566503,37.95325]]]},"id":"17077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.016553,37.95325],[-75.994645,37.95325],[-76.043938,37.95325],[-76.016553,37.95325]]]},"id":"51001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.990978,37.914912],[-83.96907,37.931343],[-83.766424,37.920389],[-83.6295,37.827281],[-83.706177,37.717742],[-83.722608,37.717742],[-84.001932,37.838235],[-83.990978,37.914912]]]},"id":"21197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.266188,37.876573],[-86.981388,37.931343],[-86.822556,37.73965],[-87.036157,37.558911],[-87.408589,37.68488],[-87.304527,37.898481],[-87.266188,37.876573]]]},"id":"21059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.270302,37.914912],[-84.078609,37.854665],[-84.089563,37.564388],[-84.199102,37.520572],[-84.231963,37.520572],[-84.346979,37.537003],[-84.527718,37.767034],[-84.43461,37.849189],[-84.336025,37.893004],[-84.270302,37.914912]]]},"id":"21151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.152089,37.898481],[-85.031597,37.893004],[-85.02612,37.679403],[-85.031597,37.630111],[-85.404029,37.728696],[-85.152089,37.898481]]]},"id":"21229"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.137022,37.909435],[-88.054868,37.88205],[-88.027483,37.799896],[-88.131545,37.575342],[-88.378007,37.597249],[-88.37253,37.909435],[-88.37253,37.909435],[-88.137022,37.909435]]]},"id":"17059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.874105,37.914912],[-99.567396,37.914912],[-99.56192,37.734173],[-99.556443,37.465803],[-100.054844,37.47128],[-100.109614,37.476757],[-100.213675,37.476757],[-100.224629,37.914912],[-99.874105,37.914912]]]},"id":"20057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.157543,37.914912],[-97.152066,37.914912],[-97.152066,37.476757],[-97.349236,37.476757],[-97.809299,37.476757],[-97.809299,37.734173],[-97.69976,37.914912],[-97.157543,37.914912]]]},"id":"20173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.177664,37.893004],[-76.794278,37.515095],[-77.122895,37.624634],[-77.347449,37.788942],[-77.183141,37.893004],[-77.177664,37.893004]]]},"id":"51101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.4273,37.909435],[-88.37253,37.909435],[-88.378007,37.597249],[-88.410869,37.597249],[-88.706624,37.597249],[-88.706624,37.865619],[-88.706624,37.909435],[-88.4273,37.909435]]]},"id":"17165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.938935,37.876573],[-89.676042,37.805373],[-89.522688,37.569865],[-89.522688,37.564388],[-89.796535,37.602726],[-89.862258,37.597249],[-90.147059,37.597249],[-90.147059,37.641065],[-90.10872,37.673926],[-89.938935,37.876573]]]},"id":"29157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.064929,37.903958],[-77.796559,37.728696],[-77.63225,37.706788],[-77.654158,37.564388],[-78.015636,37.641065],[-78.070406,37.657496],[-78.158037,37.750604],[-78.064929,37.903958]]]},"id":"51075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.269314,37.903958],[-121.557312,37.821804],[-121.469681,37.482234],[-121.475158,37.482234],[-121.853067,37.482234],[-122.083098,37.476757],[-122.11596,37.504141],[-122.31313,37.898481],[-122.269314,37.903958]]]},"id":"06001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.126515,37.903958],[-93.071745,37.903958],[-92.852668,37.893004],[-92.852668,37.482234],[-93.071745,37.48771],[-93.071745,37.41651],[-93.181284,37.41651],[-93.186761,37.805373],[-93.126515,37.903958]]]},"id":"29059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.084015,37.827281],[-119.30629,37.777988],[-120.051153,37.181002],[-120.385247,37.635588],[-120.385247,37.635588],[-120.084015,37.827281]]]},"id":"06043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.027483,37.799896],[-87.928898,37.903958],[-87.731728,37.635588],[-87.934375,37.482234],[-88.060345,37.504141],[-88.131545,37.575342],[-88.027483,37.799896]]]},"id":"21225"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.063071,37.898481],[-93.630393,37.827281],[-93.613962,37.575342],[-94.074025,37.580818],[-94.074025,37.641065],[-94.063071,37.898481]]]},"id":"29039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.852668,37.893004],[-92.409035,37.860142],[-92.250204,37.602726],[-92.250204,37.47128],[-92.688359,37.482234],[-92.852668,37.482234],[-92.852668,37.893004]]]},"id":"29105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.042503,37.88205],[-107.859484,37.777988],[-107.9745,37.641065],[-109.042503,37.482234],[-109.042503,37.88205]]]},"id":"08033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.005129,37.860142],[-82.939406,37.717742],[-82.922975,37.48771],[-82.944882,37.498664],[-82.950359,37.504141],[-83.246114,37.668449],[-83.262545,37.712265],[-83.005129,37.860142]]]},"id":"21153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.808876,37.871096],[-80.660998,37.734173],[-80.858168,37.427464],[-80.858168,37.427464],[-81.093677,37.586295],[-80.945799,37.821804],[-80.808876,37.871096]]]},"id":"54089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.728531,37.865619],[-88.706624,37.865619],[-88.706624,37.597249],[-88.876409,37.597249],[-89.040717,37.597249],[-89.155733,37.602726],[-89.150256,37.860142],[-88.728531,37.865619]]]},"id":"17199"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.607592,37.827281],[-83.492576,37.860142],[-83.262545,37.712265],[-83.246114,37.668449],[-83.377561,37.695834],[-83.519961,37.641065],[-83.706177,37.717742],[-83.6295,37.827281],[-83.607592,37.827281]]]},"id":"21237"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.078609,37.854665],[-84.001932,37.838235],[-83.722608,37.717742],[-83.903347,37.54248],[-83.963593,37.580818],[-84.089563,37.564388],[-84.078609,37.854665]]]},"id":"21065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.48757,37.838235],[-76.317785,37.679403],[-76.640924,37.794419],[-76.509478,37.838235],[-76.48757,37.838235]]]},"id":"51103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.692896,37.832758],[-106.04114,37.750604],[-106.04114,37.400079],[-106.523111,37.400079],[-106.676465,37.405556],[-106.709327,37.405556],[-106.692896,37.832758]]]},"id":"08105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.648211,37.81085],[-84.527718,37.767034],[-84.346979,37.537003],[-84.445564,37.48771],[-84.659165,37.635588],[-84.746796,37.712265],[-84.713934,37.816327],[-84.648211,37.81085]]]},"id":"21079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.630393,37.827281],[-93.575624,37.827281],[-93.186761,37.805373],[-93.181284,37.41651],[-93.619439,37.427464],[-93.613962,37.575342],[-93.630393,37.827281]]]},"id":"29167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.904687,37.827281],[-98.472008,37.827281],[-98.466531,37.734173],[-98.466531,37.47128],[-98.482962,37.47128],[-99.014225,37.47128],[-99.014225,37.734173],[-99.014225,37.827281],[-98.904687,37.827281]]]},"id":"20151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.348765,37.816327],[-104.058488,37.734173],[-103.406732,37.641065],[-103.078115,37.641065],[-103.083592,37.000263],[-104.009195,36.994786],[-105.153876,36.994786],[-105.153876,37.290541],[-104.348765,37.816327]]]},"id":"08071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.439641,37.619157],[-79.171271,37.805373],[-78.870039,37.54248],[-79.017916,37.427464],[-79.083639,37.394602],[-79.187701,37.465803],[-79.439641,37.619157]]]},"id":"51009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.428146,37.706788],[-122.504823,37.706788],[-122.389807,37.706788],[-122.428146,37.706788]]]},"id":"06075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.790165,37.794419],[-79.675149,37.761557],[-79.499887,37.531526],[-79.844934,37.306971],[-80.074966,37.421987],[-80.020196,37.646542],[-79.790165,37.794419]]]},"id":"51023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.49213,37.794419],[-78.240191,37.690357],[-78.464745,37.339833],[-78.596192,37.400079],[-78.826223,37.553434],[-78.645484,37.734173],[-78.49213,37.794419]]]},"id":"51029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.515401,37.788942],[-81.219646,37.509618],[-81.312754,37.421987],[-81.838541,37.547957],[-81.854971,37.547957],[-81.800202,37.662973],[-81.608509,37.788942],[-81.515401,37.788942]]]},"id":"54109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.806572,37.597249],[-91.527248,37.788942],[-91.154816,37.695834],[-91.154816,37.586295],[-91.209585,37.41651],[-91.554633,37.421987],[-91.647741,37.421987],[-91.806572,37.597249]]]},"id":"29065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.267951,37.73965],[-119.021489,37.586295],[-119.821122,36.846908],[-120.281185,36.764754],[-120.544078,37.044078],[-120.051153,37.181002],[-119.30629,37.777988],[-119.267951,37.73965]]]},"id":"06039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.356123,37.526049],[-76.356123,37.526049],[-76.438277,37.515095],[-76.62997,37.591772],[-76.651878,37.602726],[-76.750463,37.728696],[-76.68474,37.772511],[-76.356123,37.526049]]]},"id":"51119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.786051,37.745127],[-82.638174,37.717742],[-82.561497,37.68488],[-82.709374,37.285064],[-82.922975,37.48771],[-82.939406,37.717742],[-82.786051,37.745127]]]},"id":"21071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.707047,37.750604],[-105.455107,37.750604],[-105.487969,37.575342],[-105.745385,37.356264],[-106.04114,37.400079],[-106.04114,37.750604],[-105.707047,37.750604]]]},"id":"08003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.163514,37.750604],[-78.158037,37.750604],[-78.070406,37.657496],[-78.130652,37.454849],[-78.234714,37.367218],[-78.262098,37.34531],[-78.464745,37.339833],[-78.240191,37.690357],[-78.163514,37.750604]]]},"id":"51049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.145249,37.569865],[-81.969987,37.537003],[-82.315034,37.296018],[-82.55602,37.20291],[-82.566974,37.197433],[-82.731282,37.27411],[-82.709374,37.285064],[-82.561497,37.68488],[-82.331465,37.73965],[-82.145249,37.569865]]]},"id":"21195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.645461,37.734173],[-90.535922,37.641065],[-90.552353,37.317925],[-90.733092,37.268633],[-90.77143,37.476757],[-91.154816,37.586295],[-91.154816,37.695834],[-91.100047,37.73965],[-90.645461,37.734173]]]},"id":"29093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.042974,37.73965],[-101.528141,37.734173],[-101.528141,37.389126],[-101.555526,37.389126],[-101.884142,37.389126],[-102.042974,37.389126],[-102.042974,37.646542],[-102.042974,37.73965]]]},"id":"20187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.822556,37.73965],[-86.63634,37.662973],[-86.592525,37.564388],[-86.614433,37.394602],[-86.899233,37.213863],[-87.10188,37.41651],[-87.036157,37.558911],[-86.822556,37.73965]]]},"id":"21183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.651831,37.734173],[-100.651831,37.476757],[-100.651831,37.389126],[-100.750416,37.389126],[-101.068078,37.389126],[-101.089986,37.389126],[-101.089986,37.734173],[-100.651831,37.734173]]]},"id":"20081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.17214,37.734173],[-101.089986,37.734173],[-101.089986,37.389126],[-101.528141,37.389126],[-101.528141,37.734173],[-101.17214,37.734173]]]},"id":"20067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.56192,37.734173],[-99.014225,37.734173],[-99.014225,37.47128],[-99.014225,37.383649],[-99.545489,37.383649],[-99.556443,37.465803],[-99.56192,37.734173]]]},"id":"20097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.919754,37.734173],[-95.525414,37.734173],[-95.525414,37.383649],[-95.96357,37.389126],[-95.96357,37.602726],[-95.96357,37.734173],[-95.919754,37.734173]]]},"id":"20205"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.399445,37.734173],[-95.087259,37.734173],[-95.087259,37.673926],[-95.087259,37.383649],[-95.125598,37.383649],[-95.519938,37.383649],[-95.525414,37.383649],[-95.525414,37.734173],[-95.399445,37.734173]]]},"id":"20133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.918837,37.734173],[-97.809299,37.734173],[-97.809299,37.476757],[-97.809299,37.383649],[-98.351516,37.383649],[-98.466531,37.47128],[-98.466531,37.734173],[-97.918837,37.734173]]]},"id":"20095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.677876,37.734173],[-85.519044,37.553434],[-85.464275,37.465803],[-85.584768,37.47128],[-85.590245,37.47128],[-85.655968,37.421987],[-85.891476,37.438418],[-85.677876,37.734173]]]},"id":"21123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.660998,37.734173],[-80.294043,37.690357],[-80.222843,37.630111],[-80.474782,37.421987],[-80.858168,37.427464],[-80.660998,37.734173]]]},"id":"54063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.404029,37.728696],[-85.031597,37.630111],[-85.037074,37.54248],[-85.075412,37.411033],[-85.464275,37.465803],[-85.519044,37.553434],[-85.404029,37.728696]]]},"id":"21155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.706177,37.717742],[-83.519961,37.641065],[-83.580208,37.504141],[-83.651408,37.537003],[-83.886916,37.520572],[-83.903347,37.54248],[-83.722608,37.717742],[-83.706177,37.717742]]]},"id":"21129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.856335,37.695834],[-84.746796,37.712265],[-84.659165,37.635588],[-84.845381,37.547957],[-85.037074,37.54248],[-85.031597,37.630111],[-85.02612,37.679403],[-84.856335,37.695834]]]},"id":"21021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.63225,37.706788],[-77.226957,37.537003],[-77.177664,37.493187],[-77.248864,37.383649],[-77.41865,37.449372],[-77.473419,37.597249],[-77.593912,37.553434],[-77.654158,37.564388],[-77.63225,37.706788]]]},"id":"51087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.428146,37.706788],[-122.389807,37.706788],[-122.11596,37.504141],[-122.083098,37.476757],[-122.154299,37.285064],[-122.291222,37.109802],[-122.504823,37.706788],[-122.428146,37.706788]]]},"id":"06081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.377561,37.695834],[-83.246114,37.668449],[-82.950359,37.504141],[-83.125621,37.405556],[-83.547346,37.334356],[-83.580208,37.504141],[-83.519961,37.641065],[-83.377561,37.695834]]]},"id":"21025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.015636,37.641065],[-77.654158,37.564388],[-77.856805,37.41651],[-77.988251,37.48771],[-78.130652,37.454849],[-78.070406,37.657496],[-78.015636,37.641065]]]},"id":"51145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.408589,37.68488],[-87.036157,37.558911],[-87.10188,37.41651],[-87.293573,37.389126],[-87.375727,37.569865],[-87.49622,37.646542],[-87.408589,37.68488]]]},"id":"21149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.884612,37.673926],[-94.616242,37.673926],[-94.616242,37.652019],[-94.616242,37.361741],[-94.616242,37.339833],[-94.829843,37.339833],[-95.076305,37.339833],[-95.087259,37.383649],[-95.087259,37.673926],[-94.884612,37.673926]]]},"id":"20037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.020196,37.646542],[-80.074966,37.421987],[-80.173551,37.378172],[-80.261182,37.339833],[-80.430967,37.312448],[-80.474782,37.421987],[-80.222843,37.630111],[-80.020196,37.646542]]]},"id":"51045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.23603,37.624634],[-105.153876,37.290541],[-105.153876,36.994786],[-105.219599,36.994786],[-105.718001,36.994786],[-105.745385,37.356264],[-105.487969,37.575342],[-105.23603,37.624634]]]},"id":"08023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.490273,37.652019],[-94.074025,37.641065],[-94.074025,37.580818],[-94.079502,37.350787],[-94.577904,37.361741],[-94.616242,37.361741],[-94.616242,37.652019],[-94.490273,37.652019]]]},"id":"29011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.49622,37.646542],[-87.375727,37.569865],[-87.813882,37.350787],[-87.802929,37.378172],[-87.934375,37.482234],[-87.731728,37.635588],[-87.49622,37.646542]]]},"id":"21233"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.749499,37.641065],[-102.042974,37.646542],[-102.042974,37.389126],[-102.042974,36.994786],[-103.001438,37.000263],[-103.083592,37.000263],[-103.078115,37.641065],[-102.749499,37.641065]]]},"id":"08009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.535922,37.641065],[-90.147059,37.641065],[-90.147059,37.597249],[-90.218259,37.312448],[-90.552353,37.317925],[-90.535922,37.641065]]]},"id":"29123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.659165,37.635588],[-84.445564,37.48771],[-84.500334,37.328879],[-84.670119,37.27411],[-84.719411,37.235771],[-84.845381,37.547957],[-84.659165,37.635588]]]},"id":"21137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.804715,37.641065],[-107.481575,37.641065],[-107.481575,37.421987],[-107.481575,37.000263],[-108.379794,37.000263],[-107.9745,37.641065],[-107.804715,37.641065]]]},"id":"08067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.9745,37.641065],[-108.379794,37.000263],[-109.042503,37.000263],[-109.042503,37.482234],[-107.9745,37.641065]]]},"id":"08083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.385247,37.635588],[-120.051153,37.181002],[-120.544078,37.044078],[-120.91651,36.742847],[-121.217742,36.961924],[-121.228696,37.137186],[-120.385247,37.635588]]]},"id":"06047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.122895,37.624634],[-76.794278,37.515095],[-76.739509,37.465803],[-76.903817,37.378172],[-77.040741,37.427464],[-77.177664,37.493187],[-77.226957,37.537003],[-77.122895,37.624634]]]},"id":"51127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.472032,37.602726],[-86.274862,37.591772],[-86.044831,37.449372],[-86.159846,37.334356],[-86.466555,37.323402],[-86.614433,37.394602],[-86.592525,37.564388],[-86.472032,37.602726]]]},"id":"21085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.053904,37.602726],[-112.898269,37.498664],[-112.898269,37.000263],[-114.048427,37.000263],[-114.053904,37.602726]]]},"id":"49053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.439641,37.619157],[-79.187701,37.465803],[-79.187701,37.465803],[-79.258902,37.356264],[-79.445118,37.055032],[-79.592995,37.044078],[-79.784688,37.230294],[-79.844934,37.224817],[-79.844934,37.306971],[-79.499887,37.531526],[-79.439641,37.619157]]]},"id":"51019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.308617,37.608203],[-95.96357,37.602726],[-95.96357,37.389126],[-95.96357,37.301494],[-96.522218,37.301494],[-96.527695,37.476757],[-96.527695,37.608203],[-96.308617,37.608203]]]},"id":"20049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.796535,37.602726],[-89.522688,37.564388],[-89.484349,37.334356],[-89.489826,37.252202],[-89.763673,37.126232],[-89.867735,37.126232],[-89.867735,37.126232],[-89.862258,37.597249],[-89.796535,37.602726]]]},"id":"29031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.250204,37.602726],[-92.031127,37.602726],[-91.806572,37.597249],[-91.647741,37.421987],[-91.653218,37.049555],[-92.074942,37.055032],[-92.091373,37.055032],[-92.250204,37.060509],[-92.250204,37.47128],[-92.250204,37.602726]]]},"id":"29215"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.77143,37.476757],[-90.733092,37.268633],[-90.776907,37.049555],[-91.017893,37.093371],[-91.209585,37.41651],[-91.154816,37.586295],[-90.77143,37.476757]]]},"id":"29179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.62997,37.591772],[-76.438277,37.515095],[-76.405416,37.400079],[-76.498524,37.241248],[-76.657355,37.378172],[-76.712124,37.432941],[-76.651878,37.602726],[-76.62997,37.591772]]]},"id":"51073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.473419,37.597249],[-77.41865,37.449372],[-77.593912,37.553434],[-77.473419,37.597249]]]},"id":"51760"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.876409,37.597249],[-88.706624,37.597249],[-88.712101,37.334356],[-88.931178,37.301494],[-89.046194,37.328879],[-89.040717,37.597249],[-88.876409,37.597249]]]},"id":"17087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.155733,37.602726],[-89.040717,37.597249],[-89.046194,37.328879],[-89.248841,37.334356],[-89.259795,37.334356],[-89.484349,37.334356],[-89.522688,37.564388],[-89.522688,37.569865],[-89.155733,37.602726]]]},"id":"17181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.410869,37.597249],[-88.416346,37.421987],[-88.487546,37.065986],[-88.712101,37.334356],[-88.706624,37.597249],[-88.410869,37.597249]]]},"id":"17151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.378007,37.597249],[-88.131545,37.575342],[-88.060345,37.504141],[-88.3561,37.405556],[-88.361576,37.405556],[-88.416346,37.421987],[-88.410869,37.597249],[-88.378007,37.597249]]]},"id":"17069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.862258,37.597249],[-89.867735,37.126232],[-90.10872,37.038601],[-90.218259,37.312448],[-90.147059,37.597249],[-89.862258,37.597249]]]},"id":"29017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.126538,37.591772],[-81.093677,37.586295],[-80.858168,37.427464],[-80.978661,37.290541],[-81.225123,37.235771],[-81.362047,37.339833],[-81.312754,37.421987],[-81.219646,37.509618],[-81.126538,37.591772]]]},"id":"54055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.021489,37.586295],[-118.775026,37.460326],[-118.358779,36.742847],[-118.98315,36.742847],[-119.57466,36.490907],[-119.958045,36.403276],[-120.314047,35.904875],[-120.681002,36.266353],[-120.91651,36.742847],[-120.544078,37.044078],[-120.281185,36.764754],[-119.821122,36.846908],[-119.021489,37.586295]]]},"id":"06019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.074025,37.580818],[-93.613962,37.575342],[-93.619439,37.427464],[-93.619439,37.427464],[-93.624916,37.279587],[-94.008302,37.290541],[-94.052118,37.290541],[-94.079502,37.350787],[-94.074025,37.580818]]]},"id":"29057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.963593,37.580818],[-83.903347,37.54248],[-83.886916,37.520572],[-83.782854,37.350787],[-83.941686,37.252202],[-84.138855,37.317925],[-84.199102,37.520572],[-84.089563,37.564388],[-83.963593,37.580818]]]},"id":"21109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.375727,37.569865],[-87.293573,37.389126],[-87.331912,37.159094],[-87.682436,37.14814],[-87.813882,37.350787],[-87.375727,37.569865]]]},"id":"21107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.654158,37.564388],[-77.593912,37.553434],[-77.41865,37.449372],[-77.248864,37.383649],[-77.270772,37.323402],[-77.281726,37.312448],[-77.298157,37.312448],[-77.298157,37.312448],[-77.336496,37.312448],[-77.374834,37.246725],[-77.402219,37.241248],[-77.402219,37.235771],[-77.41865,37.235771],[-77.446034,37.224817],[-77.648681,37.263156],[-77.856805,37.41651],[-77.654158,37.564388]]]},"id":"51041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.826223,37.553434],[-78.596192,37.400079],[-78.683823,37.246725],[-78.6893,37.246725],[-78.826223,37.20291],[-79.001485,37.400079],[-79.017916,37.427464],[-78.870039,37.54248],[-78.826223,37.553434]]]},"id":"51011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.037074,37.54248],[-84.845381,37.547957],[-84.719411,37.235771],[-84.90015,37.115279],[-85.042551,37.186479],[-85.163043,37.312448],[-85.075412,37.411033],[-85.037074,37.54248]]]},"id":"21045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.838541,37.547957],[-81.312754,37.421987],[-81.362047,37.339833],[-81.373001,37.323402],[-81.739956,37.241248],[-81.926172,37.509618],[-81.854971,37.547957],[-81.838541,37.547957]]]},"id":"54047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.060345,37.504141],[-87.934375,37.482234],[-87.802929,37.378172],[-88.098683,37.181002],[-88.191791,37.14814],[-88.3561,37.405556],[-88.060345,37.504141]]]},"id":"21055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.903746,37.498664],[-112.684669,37.54248],[-110.647247,37.54248],[-111.414018,37.000263],[-112.542268,37.000263],[-112.898269,37.000263],[-112.898269,37.498664],[-112.903746,37.498664]]]},"id":"49025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.651408,37.537003],[-83.580208,37.504141],[-83.547346,37.334356],[-83.525438,37.257679],[-83.574731,37.279587],[-83.782854,37.350787],[-83.886916,37.520572],[-83.651408,37.537003]]]},"id":"21189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.231963,37.520572],[-84.199102,37.520572],[-84.138855,37.317925],[-84.138855,37.306971],[-84.286733,37.153617],[-84.500334,37.328879],[-84.445564,37.48771],[-84.346979,37.537003],[-84.231963,37.520572]]]},"id":"21203"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.969987,37.537003],[-81.926172,37.509618],[-81.739956,37.241248],[-81.898787,37.142663],[-82.150726,37.044078],[-82.315034,37.296018],[-82.315034,37.296018],[-81.969987,37.537003]]]},"id":"51027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.356123,37.526049],[-76.356123,37.526049],[-76.405416,37.400079],[-76.438277,37.515095],[-76.356123,37.526049]]]},"id":"51115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.944882,37.498664],[-82.922975,37.48771],[-82.709374,37.285064],[-82.731282,37.27411],[-82.999652,37.197433],[-83.125621,37.405556],[-82.950359,37.504141],[-82.944882,37.498664]]]},"id":"21119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.988251,37.48771],[-77.856805,37.41651],[-77.648681,37.263156],[-77.796559,37.191956],[-78.229237,37.296018],[-78.234714,37.367218],[-78.130652,37.454849],[-77.988251,37.48771]]]},"id":"51007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.040741,37.427464],[-76.903817,37.378172],[-76.881909,37.224817],[-76.975017,37.246725],[-77.270772,37.323402],[-77.248864,37.383649],[-77.177664,37.493187],[-77.040741,37.427464]]]},"id":"51036"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.071745,37.48771],[-92.852668,37.482234],[-92.688359,37.482234],[-92.688359,37.065986],[-92.90196,37.071463],[-93.066268,37.087894],[-93.071745,37.41651],[-93.071745,37.48771]]]},"id":"29225"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.853067,37.482234],[-121.475158,37.482234],[-121.228696,37.137186],[-121.217742,36.961924],[-121.447773,36.989309],[-121.57922,36.901678],[-122.154299,37.285064],[-122.083098,37.476757],[-121.853067,37.482234]]]},"id":"06085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.584768,37.47128],[-85.464275,37.465803],[-85.075412,37.411033],[-85.163043,37.312448],[-85.354736,37.191956],[-85.584768,37.47128]]]},"id":"21217"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.474782,37.421987],[-80.430967,37.312448],[-80.606229,37.246725],[-80.852691,37.14814],[-80.978661,37.290541],[-80.858168,37.427464],[-80.858168,37.427464],[-80.474782,37.421987]]]},"id":"51071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.688359,37.482234],[-92.250204,37.47128],[-92.250204,37.060509],[-92.688359,37.065986],[-92.688359,37.482234]]]},"id":"29229"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.349236,37.476757],[-97.152066,37.476757],[-97.146589,37.000263],[-97.464251,37.000263],[-97.650467,37.000263],[-97.803822,37.000263],[-97.803822,37.389126],[-97.809299,37.383649],[-97.809299,37.476757],[-97.349236,37.476757]]]},"id":"20191"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.080866,37.476757],[-96.527695,37.476757],[-96.522218,37.301494],[-96.527695,37.000263],[-96.730341,37.000263],[-96.752249,37.000263],[-96.867265,37.000263],[-97.146589,37.000263],[-97.152066,37.476757],[-97.080866,37.476757]]]},"id":"20035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.213675,37.476757],[-100.109614,37.476757],[-100.087706,37.000263],[-100.6354,37.000263],[-100.651831,37.389126],[-100.651831,37.476757],[-100.213675,37.476757]]]},"id":"20119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.054844,37.47128],[-99.556443,37.465803],[-99.545489,37.383649],[-99.540012,37.000263],[-100.000075,37.000263],[-100.087706,37.000263],[-100.109614,37.476757],[-100.054844,37.47128]]]},"id":"20025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.590245,37.47128],[-85.584768,37.47128],[-85.354736,37.191956],[-85.524521,37.109802],[-85.68883,37.181002],[-85.655968,37.421987],[-85.590245,37.47128]]]},"id":"21087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.482962,37.47128],[-98.466531,37.47128],[-98.351516,37.383649],[-98.346039,37.000263],[-98.543209,37.000263],[-99.003272,37.000263],[-99.014225,37.383649],[-99.014225,37.47128],[-98.482962,37.47128]]]},"id":"20007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.187701,37.465803],[-79.187701,37.465803],[-79.083639,37.394602],[-79.258902,37.356264],[-79.187701,37.465803]]]},"id":"51680"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.739509,37.465803],[-76.712124,37.432941],[-76.657355,37.378172],[-76.728555,37.306971],[-76.679263,37.268633],[-76.591632,37.213863],[-76.613539,37.164571],[-76.794278,37.208387],[-76.881909,37.224817],[-76.903817,37.378172],[-76.739509,37.465803]]]},"id":"51095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.937054,37.465803],[-117.832993,37.465803],[-117.164806,36.972878],[-115.899633,36.00346],[-115.647693,35.80629],[-117.630346,35.795336],[-118.008255,35.789859],[-118.358779,36.742847],[-118.775026,37.460326],[-117.937054,37.465803]]]},"id":"06027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.017446,37.449372],[-85.891476,37.438418],[-85.655968,37.421987],[-85.68883,37.181002],[-85.743599,37.170048],[-86.055785,37.164571],[-86.159846,37.334356],[-86.044831,37.449372],[-86.017446,37.449372]]]},"id":"21099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.125621,37.405556],[-82.999652,37.197433],[-83.120145,37.000263],[-83.180391,37.022171],[-83.509007,37.235771],[-83.525438,37.257679],[-83.547346,37.334356],[-83.125621,37.405556]]]},"id":"21193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.001485,37.400079],[-78.826223,37.20291],[-78.9029,37.022171],[-78.974101,37.049555],[-79.094593,37.060509],[-79.302717,37.109802],[-79.445118,37.055032],[-79.258902,37.356264],[-79.083639,37.394602],[-79.017916,37.427464],[-79.001485,37.400079]]]},"id":"51031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.619439,37.427464],[-93.619439,37.427464],[-93.181284,37.41651],[-93.071745,37.41651],[-93.066268,37.087894],[-93.482516,37.098848],[-93.608485,37.098848],[-93.624916,37.279587],[-93.619439,37.427464]]]},"id":"29077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.361576,37.405556],[-88.3561,37.405556],[-88.191791,37.14814],[-88.241084,36.983832],[-88.432777,37.049555],[-88.482069,37.022171],[-88.564223,37.082417],[-88.487546,37.065986],[-88.416346,37.421987],[-88.361576,37.405556]]]},"id":"21139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.131051,37.421987],[-106.709327,37.405556],[-106.676465,37.405556],[-106.473818,36.994786],[-107.421329,37.000263],[-107.481575,37.000263],[-107.481575,37.421987],[-107.131051,37.421987]]]},"id":"08007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.554633,37.421987],[-91.209585,37.41651],[-91.017893,37.093371],[-91.220539,37.038601],[-91.220539,36.885247],[-91.658695,36.890724],[-91.653218,37.049555],[-91.647741,37.421987],[-91.554633,37.421987]]]},"id":"29203"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.173551,37.378172],[-80.074966,37.421987],[-79.844934,37.306971],[-79.844934,37.224817],[-80.129735,37.120755],[-80.179028,37.115279],[-80.261182,37.339833],[-80.173551,37.378172]],[[-79.981858,37.328879],[-80.020196,37.306971],[-80.03115,37.263156],[-79.981858,37.328879]]]},"id":"51161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.10188,37.41651],[-86.899233,37.213863],[-86.943049,37.071463],[-86.954003,37.071463],[-87.052588,37.060509],[-87.260711,37.071463],[-87.331912,37.159094],[-87.293573,37.389126],[-87.10188,37.41651]]]},"id":"21177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.523111,37.400079],[-106.04114,37.400079],[-105.745385,37.356264],[-105.718001,36.994786],[-106.008278,36.994786],[-106.473818,36.994786],[-106.676465,37.405556],[-106.523111,37.400079]]]},"id":"08021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.262098,37.34531],[-78.234714,37.367218],[-78.229237,37.296018],[-78.240191,37.120755],[-78.399022,37.087894],[-78.442837,37.07694],[-78.683823,37.246725],[-78.596192,37.400079],[-78.464745,37.339833],[-78.262098,37.34531]]]},"id":"51147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.614433,37.394602],[-86.466555,37.323402],[-86.400832,37.170048],[-86.674679,37.000263],[-86.943049,37.071463],[-86.899233,37.213863],[-86.614433,37.394602]]]},"id":"21031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.884142,37.389126],[-101.555526,37.389126],[-101.555526,36.994786],[-102.026543,36.994786],[-102.042974,36.994786],[-102.042974,37.389126],[-101.884142,37.389126]]]},"id":"20129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.528141,37.389126],[-101.089986,37.389126],[-101.068078,37.389126],[-101.068078,37.000263],[-101.555526,36.994786],[-101.555526,37.389126],[-101.528141,37.389126]]]},"id":"20189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.750416,37.389126],[-100.651831,37.389126],[-100.6354,37.000263],[-100.947585,37.000263],[-101.068078,37.000263],[-101.068078,37.389126],[-100.750416,37.389126]]]},"id":"20175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.96357,37.389126],[-95.525414,37.383649],[-95.519938,37.383649],[-95.519938,37.000263],[-95.613046,37.000263],[-95.788308,37.000263],[-95.9088,37.000263],[-95.96357,37.000263],[-95.96357,37.301494],[-95.96357,37.389126]]]},"id":"20125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.803822,37.389126],[-97.803822,37.000263],[-98.11053,37.000263],[-98.346039,37.000263],[-98.351516,37.383649],[-97.809299,37.383649],[-97.803822,37.389126]]]},"id":"20077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.125598,37.383649],[-95.087259,37.383649],[-95.076305,37.339833],[-95.070828,37.000263],[-95.152983,37.000263],[-95.410399,37.000263],[-95.519938,37.000263],[-95.519938,37.383649],[-95.125598,37.383649]]]},"id":"20099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.014225,37.383649],[-99.003272,37.000263],[-99.457858,37.000263],[-99.540012,37.000263],[-99.545489,37.383649],[-99.014225,37.383649]]]},"id":"20033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.657355,37.378172],[-76.498524,37.241248],[-76.399939,37.164571],[-76.394462,37.104325],[-76.4328,37.093371],[-76.55877,37.213863],[-76.591632,37.213863],[-76.679263,37.268633],[-76.728555,37.306971],[-76.657355,37.378172]]]},"id":"51199"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.802929,37.378172],[-87.813882,37.350787],[-87.682436,37.14814],[-87.731728,37.000263],[-87.879606,36.961924],[-88.098683,37.181002],[-87.802929,37.378172]]]},"id":"21033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.261182,37.339833],[-80.179028,37.115279],[-80.545983,36.983832],[-80.578844,37.087894],[-80.529552,37.131709],[-80.606229,37.246725],[-80.430967,37.312448],[-80.261182,37.339833]]]},"id":"51121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.577904,37.361741],[-94.079502,37.350787],[-94.052118,37.290541],[-94.057594,37.049555],[-94.616242,37.055032],[-94.616242,37.339833],[-94.616242,37.361741],[-94.577904,37.361741]]]},"id":"29097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.574731,37.279587],[-83.525438,37.257679],[-83.509007,37.235771],[-83.509007,36.940016],[-83.591161,36.956447],[-83.788331,37.033124],[-83.870485,37.055032],[-83.941686,37.252202],[-83.782854,37.350787],[-83.574731,37.279587]]]},"id":"21051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.670119,37.27411],[-84.500334,37.328879],[-84.286733,37.153617],[-84.357933,36.961924],[-84.577011,36.868816],[-84.807042,36.989309],[-84.834427,36.994786],[-84.90015,37.115279],[-84.719411,37.235771],[-84.670119,37.27411]]]},"id":"21199"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.466555,37.323402],[-86.159846,37.334356],[-86.055785,37.164571],[-86.116031,37.060509],[-86.400832,37.170048],[-86.466555,37.323402]]]},"id":"21061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.829843,37.339833],[-94.616242,37.339833],[-94.616242,37.055032],[-94.616242,37.055032],[-94.616242,37.000263],[-94.994151,37.000263],[-95.005105,37.000263],[-95.070828,37.000263],[-95.076305,37.339833],[-94.829843,37.339833]]]},"id":"20021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.373001,37.323402],[-81.362047,37.339833],[-81.225123,37.235771],[-81.438724,37.011217],[-81.477062,36.989309],[-81.778294,36.956447],[-81.898787,37.142663],[-81.739956,37.241248],[-81.373001,37.323402]]]},"id":"51185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.931178,37.301494],[-88.712101,37.334356],[-88.487546,37.065986],[-88.564223,37.082417],[-88.925701,37.224817],[-88.931178,37.301494]]]},"id":"17127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.981858,37.328879],[-80.03115,37.263156],[-80.020196,37.306971],[-79.981858,37.328879]]]},"id":"51770"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.138855,37.306971],[-84.138855,37.317925],[-83.941686,37.252202],[-83.870485,37.055032],[-84.089563,36.956447],[-84.122425,36.967401],[-84.297687,36.945493],[-84.357933,36.961924],[-84.286733,37.153617],[-84.138855,37.306971]]]},"id":"21125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.259795,37.334356],[-89.248841,37.334356],[-89.172164,37.065986],[-89.133825,36.983832],[-89.314564,37.011217],[-89.489826,37.252202],[-89.484349,37.334356],[-89.259795,37.334356]]]},"id":"17003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.046194,37.328879],[-88.931178,37.301494],[-88.925701,37.224817],[-88.936655,37.230294],[-89.172164,37.065986],[-89.248841,37.334356],[-89.046194,37.328879]]]},"id":"17153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.281726,37.312448],[-77.270772,37.323402],[-76.975017,37.246725],[-77.155756,37.109802],[-77.396742,36.994786],[-77.396742,37.170048],[-77.374834,37.246725],[-77.336496,37.312448],[-77.281726,37.312448]]]},"id":"51149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.509007,37.235771],[-83.180391,37.022171],[-83.492576,36.896201],[-83.509007,36.940016],[-83.509007,37.235771]]]},"id":"21131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.552353,37.317925],[-90.218259,37.312448],[-90.10872,37.038601],[-90.256598,36.923586],[-90.568783,36.929063],[-90.678322,36.929063],[-90.776907,37.049555],[-90.733092,37.268633],[-90.552353,37.317925]]]},"id":"29223"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.298157,37.312448],[-77.281726,37.312448],[-77.336496,37.312448],[-77.298157,37.312448],[-77.298157,37.312448]]]},"id":"51670"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.163043,37.312448],[-85.042551,37.186479],[-85.234244,36.923586],[-85.447844,36.940016],[-85.453321,36.940016],[-85.524521,37.109802],[-85.354736,37.191956],[-85.163043,37.312448]]]},"id":"21001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.315034,37.296018],[-82.150726,37.044078],[-82.325988,36.972878],[-82.55602,37.20291],[-82.315034,37.296018],[-82.315034,37.296018]]]},"id":"51051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.522218,37.301494],[-95.96357,37.301494],[-95.96357,37.000263],[-96.001908,37.000263],[-96.527695,37.000263],[-96.522218,37.301494]]]},"id":"20019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.225123,37.235771],[-80.978661,37.290541],[-80.852691,37.14814],[-80.912938,37.071463],[-81.378478,36.95097],[-81.438724,37.011217],[-81.225123,37.235771]]]},"id":"51021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.229237,37.296018],[-77.796559,37.191956],[-77.889666,36.989309],[-78.004682,37.022171],[-78.240191,37.120755],[-78.229237,37.296018]]]},"id":"51135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.008302,37.290541],[-93.624916,37.279587],[-93.608485,37.098848],[-93.608485,36.994786],[-93.608485,36.923586],[-94.008302,36.929063],[-94.063071,36.929063],[-94.057594,37.049555],[-94.052118,37.290541],[-94.008302,37.290541]]]},"id":"29109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.154299,37.285064],[-121.57922,36.901678],[-121.644943,36.896201],[-121.699712,36.918109],[-121.809251,36.852385],[-122.291222,37.109802],[-122.154299,37.285064]]]},"id":"06087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.731282,37.27411],[-82.566974,37.197433],[-82.868205,36.972878],[-82.912021,37.000263],[-83.120145,37.000263],[-82.999652,37.197433],[-82.731282,37.27411]]]},"id":"21133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.648681,37.263156],[-77.446034,37.224817],[-77.396742,37.170048],[-77.396742,36.994786],[-77.621296,36.87977],[-77.659635,36.896201],[-77.889666,36.989309],[-77.796559,37.191956],[-77.648681,37.263156]]]},"id":"51053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.489826,37.252202],[-89.314564,37.011217],[-89.517211,36.868816],[-89.528165,36.868816],[-89.692473,36.857862],[-89.763673,37.126232],[-89.489826,37.252202]]]},"id":"29201"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.6893,37.246725],[-78.683823,37.246725],[-78.442837,37.07694],[-78.49213,36.890724],[-78.650961,36.699031],[-78.9029,37.022171],[-78.826223,37.20291],[-78.6893,37.246725]]]},"id":"51037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.975017,37.246725],[-76.881909,37.224817],[-76.794278,37.208387],[-76.673786,37.142663],[-76.849048,36.994786],[-76.95311,36.945493],[-77.155756,37.109802],[-76.975017,37.246725]]]},"id":"51181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.402219,37.241248],[-77.374834,37.246725],[-77.396742,37.170048],[-77.446034,37.224817],[-77.41865,37.235771],[-77.402219,37.235771],[-77.402219,37.241248]]]},"id":"51730"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.606229,37.246725],[-80.529552,37.131709],[-80.578844,37.087894],[-80.545983,36.983832],[-80.633614,36.929063],[-80.743152,36.87977],[-80.912938,37.071463],[-80.852691,37.14814],[-80.606229,37.246725]]]},"id":"51155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.784688,37.230294],[-79.592995,37.044078],[-79.642287,36.857862],[-79.647764,36.852385],[-80.042104,36.792139],[-80.233797,36.874293],[-80.129735,37.120755],[-79.844934,37.224817],[-79.784688,37.230294]]]},"id":"51067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.936655,37.230294],[-88.816163,36.956447],[-89.100963,36.945493],[-89.133825,36.983832],[-89.172164,37.065986],[-88.936655,37.230294]]]},"id":"21007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.925701,37.224817],[-88.564223,37.082417],[-88.482069,37.022171],[-88.482069,36.940016],[-88.723055,36.945493],[-88.810686,36.945493],[-88.816163,36.956447],[-88.936655,37.230294],[-88.925701,37.224817]]]},"id":"21145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.55877,37.213863],[-76.4328,37.093371],[-76.388985,36.989309],[-76.613539,37.164571],[-76.591632,37.213863],[-76.55877,37.213863]]]},"id":"51700"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.55602,37.20291],[-82.325988,36.972878],[-82.408142,36.874293],[-82.479343,36.885247],[-82.76962,36.797616],[-82.868205,36.885247],[-82.879159,36.890724],[-82.868205,36.972878],[-82.566974,37.197433],[-82.55602,37.20291]]]},"id":"51195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.400832,37.170048],[-86.116031,37.060509],[-86.165323,36.934539],[-86.22557,36.912632],[-86.406309,36.775708],[-86.608956,36.885247],[-86.674679,37.000263],[-86.400832,37.170048]]]},"id":"21227"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.042551,37.186479],[-84.90015,37.115279],[-84.834427,36.994786],[-85.064458,36.857862],[-85.217813,36.852385],[-85.234244,36.923586],[-85.042551,37.186479]]]},"id":"21207"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.68883,37.181002],[-85.524521,37.109802],[-85.453321,36.940016],[-85.595722,36.819524],[-85.738122,36.841432],[-85.743599,37.170048],[-85.68883,37.181002]]]},"id":"21169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.191791,37.14814],[-88.098683,37.181002],[-87.879606,36.961924],[-88.15893,36.868816],[-88.241084,36.983832],[-88.191791,37.14814]]]},"id":"21143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.394462,37.104325],[-76.399939,37.164571],[-76.284923,37.115279],[-76.394462,37.104325]]]},"id":"51735"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.743599,37.170048],[-85.738122,36.841432],[-85.979107,36.720939],[-86.165323,36.934539],[-86.116031,37.060509],[-86.055785,37.164571],[-85.743599,37.170048]]]},"id":"21009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.682436,37.14814],[-87.331912,37.159094],[-87.260711,37.071463],[-87.260711,37.071463],[-87.337389,36.644262],[-87.63862,36.638785],[-87.69339,36.638785],[-87.731728,37.000263],[-87.682436,37.14814]]]},"id":"21047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.898787,37.142663],[-81.778294,36.956447],[-81.838541,36.929063],[-82.331465,36.709985],[-82.408142,36.874293],[-82.325988,36.972878],[-82.150726,37.044078],[-81.898787,37.142663]]]},"id":"51167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.482093,36.929063],[-76.89834,36.644262],[-76.909294,36.649739],[-76.925725,36.709985],[-76.860002,36.961924],[-76.849048,36.994786],[-76.673786,37.142663],[-76.482093,36.929063]]]},"id":"51093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.302717,37.109802],[-79.094593,37.060509],[-79.220563,36.5402],[-79.341056,36.5402],[-79.401302,36.638785],[-79.472502,36.5402],[-79.510841,36.5402],[-79.713488,36.5402],[-79.642287,36.857862],[-79.592995,37.044078],[-79.445118,37.055032],[-79.302717,37.109802]]]},"id":"51143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.867735,37.126232],[-89.763673,37.126232],[-89.692473,36.857862],[-89.960843,36.627831],[-90.048474,36.627831],[-90.147059,36.633308],[-90.256598,36.923586],[-90.10872,37.038601],[-89.867735,37.126232],[-89.867735,37.126232]]]},"id":"29207"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.129735,37.120755],[-80.233797,36.874293],[-80.463828,36.709985],[-80.633614,36.929063],[-80.545983,36.983832],[-80.179028,37.115279],[-80.129735,37.120755]]]},"id":"51063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.399022,37.087894],[-78.240191,37.120755],[-78.004682,37.022171],[-78.02659,36.775708],[-78.475699,36.885247],[-78.49213,36.890724],[-78.442837,37.07694],[-78.399022,37.087894]]]},"id":"51111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.394462,37.104325],[-76.284923,37.115279],[-76.388985,36.989309],[-76.4328,37.093371],[-76.394462,37.104325]]]},"id":"51650"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.155756,37.109802],[-76.95311,36.945493],[-77.429604,36.709985],[-77.621296,36.87977],[-77.396742,36.994786],[-77.155756,37.109802]]]},"id":"51183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.220539,37.038601],[-91.017893,37.093371],[-90.776907,37.049555],[-90.678322,36.929063],[-90.661891,36.814047],[-90.935738,36.814047],[-91.116477,36.825001],[-91.220539,36.885247],[-91.220539,37.038601]]]},"id":"29035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.482516,37.098848],[-93.066268,37.087894],[-92.90196,37.071463],[-92.907437,36.80857],[-93.301777,36.819524],[-93.592055,36.994786],[-93.608485,36.994786],[-93.608485,37.098848],[-93.482516,37.098848]]]},"id":"29043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.260711,37.071463],[-87.260711,37.071463],[-87.052588,37.060509],[-87.058065,36.644262],[-87.112834,36.644262],[-87.337389,36.644262],[-87.260711,37.071463]]]},"id":"21219"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.954003,37.071463],[-86.943049,37.071463],[-86.674679,37.000263],[-86.608956,36.885247],[-86.76231,36.649739],[-87.058065,36.644262],[-87.052588,37.060509],[-86.954003,37.071463]]]},"id":"21141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.912938,37.071463],[-80.743152,36.87977],[-81.044384,36.80857],[-81.263462,36.764754],[-81.378478,36.95097],[-80.912938,37.071463]]]},"id":"51197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.314564,37.011217],[-89.133825,36.983832],[-89.100963,36.945493],[-89.122871,36.786662],[-89.172164,36.649739],[-89.325518,36.633308],[-89.517211,36.868816],[-89.314564,37.011217]]]},"id":"29133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.688359,37.065986],[-92.250204,37.060509],[-92.091373,37.055032],[-92.113281,36.792139],[-92.529528,36.803093],[-92.765037,36.80857],[-92.907437,36.80857],[-92.90196,37.071463],[-92.688359,37.065986]]]},"id":"29067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.432777,37.049555],[-88.241084,36.983832],[-88.15893,36.868816],[-88.109637,36.748324],[-88.487546,36.748324],[-88.482069,36.940016],[-88.482069,37.022171],[-88.432777,37.049555]]]},"id":"21157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.974101,37.049555],[-78.9029,37.022171],[-78.650961,36.699031],[-78.733115,36.5402],[-78.798839,36.5402],[-79.138409,36.5402],[-79.220563,36.5402],[-79.094593,37.060509],[-78.974101,37.049555]]]},"id":"51083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.616242,37.055032],[-94.616242,37.055032],[-94.057594,37.049555],[-94.063071,36.929063],[-94.068548,36.748324],[-94.539565,36.764754],[-94.616242,36.764754],[-94.616242,37.000263],[-94.616242,37.055032]]]},"id":"29145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.074942,37.055032],[-91.653218,37.049555],[-91.658695,36.890724],[-91.669648,36.501861],[-92.118758,36.496384],[-92.113281,36.792139],[-92.091373,37.055032],[-92.074942,37.055032]]]},"id":"29091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.788331,37.033124],[-83.591161,36.956447],[-83.875962,36.688077],[-84.089563,36.956447],[-83.870485,37.055032],[-83.788331,37.033124]]]},"id":"21121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.004682,37.022171],[-77.889666,36.989309],[-77.659635,36.896201],[-77.769174,36.545677],[-77.90062,36.545677],[-78.048498,36.545677],[-78.02659,36.775708],[-78.004682,37.022171]]]},"id":"51025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.912021,37.000263],[-82.868205,36.972878],[-82.879159,36.890724],[-83.459715,36.666169],[-83.492576,36.896201],[-83.180391,37.022171],[-83.120145,37.000263],[-82.912021,37.000263]]]},"id":"21095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.477062,36.989309],[-81.438724,37.011217],[-81.378478,36.95097],[-81.263462,36.764754],[-81.608509,36.638785],[-81.838541,36.929063],[-81.778294,36.956447],[-81.477062,36.989309]]]},"id":"51173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.000968,37.000263],[-110.000968,35.663889],[-109.842137,35.516012],[-109.891429,33.566221],[-110.000968,33.577175],[-110.000968,33.998899],[-110.751309,33.998899],[-110.751309,34.261793],[-110.751309,37.00574],[-110.000968,37.000263]]]},"id":"04017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.751309,37.00574],[-110.751309,34.261793],[-111.556419,34.469916],[-111.775497,34.979272],[-112.334144,34.973795],[-112.438206,35.258596],[-113.336425,35.526966],[-113.352855,36.047275],[-112.629899,36.392322],[-112.542268,37.000263],[-111.414018,37.000263],[-110.751309,37.00574]]]},"id":"04005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.087706,37.000263],[-100.000075,37.000263],[-100.005552,36.594969],[-100.005552,36.501861],[-100.547769,36.501861],[-100.805185,36.501861],[-100.953062,36.501861],[-100.947585,37.000263],[-100.6354,37.000263],[-100.087706,37.000263]]]},"id":"40007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.731728,37.000263],[-87.69339,36.638785],[-88.071299,36.677123],[-88.109637,36.748324],[-88.15893,36.868816],[-87.879606,36.961924],[-87.731728,37.000263]]]},"id":"21221"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.000075,37.000263],[-99.540012,37.000263],[-99.457858,37.000263],[-99.293549,36.819524],[-99.605735,36.594969],[-100.005552,36.594969],[-100.000075,37.000263]]]},"id":"40059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.042974,36.994786],[-102.026543,36.994786],[-102.03202,36.501861],[-102.163466,36.501861],[-103.001438,36.501861],[-103.001438,37.000263],[-102.042974,36.994786]]]},"id":"40025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.898269,37.000263],[-112.542268,37.000263],[-112.629899,36.392322],[-113.352855,36.047275],[-113.336425,35.526966],[-113.330948,34.316562],[-113.418579,34.300131],[-114.136058,34.305608],[-114.634459,35.00118],[-114.754952,36.085614],[-114.048427,36.195153],[-114.048427,36.841432],[-114.048427,37.000263],[-112.898269,37.000263]]]},"id":"04015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.001438,37.000263],[-103.001438,36.501861],[-103.039777,36.052752],[-103.039777,35.740566],[-103.37387,35.740566],[-103.362916,36.085614],[-104.009195,36.21706],[-104.009195,36.994786],[-103.083592,37.000263],[-103.001438,37.000263]]]},"id":"35059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.457858,37.000263],[-99.003272,37.000263],[-98.543209,37.000263],[-98.532255,36.463523],[-98.959456,36.507338],[-99.293549,36.819524],[-99.457858,37.000263]]]},"id":"40151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.421329,37.000263],[-106.473818,36.994786],[-106.008278,36.994786],[-105.958986,36.353984],[-105.531785,36.014414],[-105.718001,35.976075],[-106.068525,35.997983],[-106.243787,35.932259],[-106.249264,35.965121],[-106.884589,36.21706],[-107.623976,36.222537],[-107.421329,37.000263]]]},"id":"35039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.421329,37.000263],[-107.623976,36.222537],[-107.623976,35.997983],[-108.883672,36.00346],[-109.04798,36.00346],[-109.042503,37.000263],[-108.379794,37.000263],[-107.481575,37.000263],[-107.421329,37.000263]]]},"id":"35045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.152983,37.000263],[-95.070828,37.000263],[-95.005105,37.000263],[-94.999628,36.671646],[-95.005105,36.507338],[-95.322768,36.512815],[-95.328245,36.512815],[-95.432306,36.594969],[-95.410399,37.000263],[-95.152983,37.000263]]]},"id":"40035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.994151,37.000263],[-94.616242,37.000263],[-94.616242,36.764754],[-94.616242,36.666169],[-94.890089,36.671646],[-94.999628,36.671646],[-95.005105,37.000263],[-94.994151,37.000263]]]},"id":"40115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.613046,37.000263],[-95.519938,37.000263],[-95.410399,37.000263],[-95.432306,36.594969],[-95.810215,36.594969],[-95.788308,37.000263],[-95.613046,37.000263]]]},"id":"40105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.000968,37.000263],[-109.042503,37.000263],[-109.04798,36.00346],[-109.04798,34.957364],[-109.04798,34.579455],[-109.04798,33.779822],[-109.497089,33.653852],[-109.743552,33.500498],[-109.891429,33.566221],[-109.842137,35.516012],[-110.000968,35.663889],[-110.000968,37.000263]]]},"id":"04001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.9088,37.000263],[-95.788308,37.000263],[-95.810215,36.594969],[-95.810215,36.425184],[-95.919754,36.425184],[-96.001908,36.425184],[-96.001908,37.000263],[-95.96357,37.000263],[-95.9088,37.000263]]]},"id":"40147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.730341,37.000263],[-96.527695,37.000263],[-96.001908,37.000263],[-96.001908,36.425184],[-96.270278,36.162291],[-96.724864,36.529246],[-97.009665,36.507338],[-97.058958,36.594969],[-96.752249,37.000263],[-96.730341,37.000263]]]},"id":"40113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.867265,37.000263],[-96.752249,37.000263],[-97.058958,36.594969],[-97.464251,36.594969],[-97.464251,36.594969],[-97.464251,37.000263],[-97.146589,37.000263],[-96.867265,37.000263]]]},"id":"40071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.650467,37.000263],[-97.464251,37.000263],[-97.464251,36.594969],[-97.984561,36.594969],[-98.105053,36.594969],[-98.11053,37.000263],[-97.803822,37.000263],[-97.650467,37.000263]]]},"id":"40053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.543209,37.000263],[-98.346039,37.000263],[-98.11053,37.000263],[-98.105053,36.594969],[-98.105053,36.463523],[-98.532255,36.463523],[-98.543209,37.000263]]]},"id":"40003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.947585,37.000263],[-100.953062,36.501861],[-101.084509,36.501861],[-101.621249,36.501861],[-101.812942,36.501861],[-102.03202,36.501861],[-102.026543,36.994786],[-101.555526,36.994786],[-101.068078,37.000263],[-100.947585,37.000263]]]},"id":"40139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.807042,36.989309],[-84.577011,36.868816],[-84.779657,36.605923],[-84.785134,36.605923],[-84.976827,36.616877],[-85.064458,36.857862],[-84.834427,36.994786],[-84.807042,36.989309]]]},"id":"21231"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.860002,36.961924],[-76.925725,36.709985],[-76.909294,36.649739],[-76.89834,36.644262],[-76.914771,36.551154],[-76.914771,36.545677],[-77.16671,36.545677],[-77.298157,36.545677],[-77.429604,36.709985],[-76.95311,36.945493],[-76.849048,36.994786],[-76.860002,36.961924]]]},"id":"51175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.009195,36.994786],[-104.009195,36.21706],[-104.436396,36.21706],[-105.340092,36.260876],[-105.219599,36.994786],[-105.153876,36.994786],[-104.009195,36.994786]]]},"id":"35007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.219599,36.994786],[-105.340092,36.260876],[-105.531785,36.014414],[-105.958986,36.353984],[-106.008278,36.994786],[-105.718001,36.994786],[-105.219599,36.994786]]]},"id":"35055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.592055,36.994786],[-93.301777,36.819524],[-93.312731,36.496384],[-93.586578,36.496384],[-93.608485,36.923586],[-93.608485,36.994786],[-93.592055,36.994786]]]},"id":"29209"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.447773,36.989309],[-121.217742,36.961924],[-120.91651,36.742847],[-120.681002,36.266353],[-121.31085,36.501861],[-121.644943,36.896201],[-121.57922,36.901678],[-121.447773,36.989309]]]},"id":"06069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.122425,36.967401],[-84.089563,36.956447],[-83.875962,36.688077],[-83.930732,36.589492],[-83.985501,36.589492],[-84.226487,36.589492],[-84.297687,36.945493],[-84.122425,36.967401]]]},"id":"21235"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.175384,36.929063],[-76.180861,36.923586],[-76.224677,36.841432],[-76.2904,36.819524],[-76.345169,36.918109],[-76.175384,36.929063]]]},"id":"51710"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.357933,36.961924],[-84.297687,36.945493],[-84.226487,36.589492],[-84.259348,36.589492],[-84.779657,36.605923],[-84.577011,36.868816],[-84.357933,36.961924]]]},"id":"21147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.509007,36.940016],[-83.492576,36.896201],[-83.459715,36.666169],[-83.673316,36.600446],[-83.930732,36.589492],[-83.875962,36.688077],[-83.591161,36.956447],[-83.509007,36.940016]]]},"id":"21013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.810686,36.945493],[-88.810686,36.775708],[-89.122871,36.786662],[-89.100963,36.945493],[-88.816163,36.956447],[-88.810686,36.945493]]]},"id":"21039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.723055,36.945493],[-88.482069,36.940016],[-88.487546,36.748324],[-88.487546,36.501861],[-88.514931,36.501861],[-88.816163,36.501861],[-88.810686,36.775708],[-88.810686,36.945493],[-88.723055,36.945493]]]},"id":"21083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.447844,36.940016],[-85.234244,36.923586],[-85.217813,36.852385],[-85.29449,36.627831],[-85.43689,36.616877],[-85.595722,36.819524],[-85.453321,36.940016],[-85.447844,36.940016]]]},"id":"21057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.22557,36.912632],[-86.165323,36.934539],[-85.979107,36.720939],[-85.979107,36.627831],[-86.203662,36.638785],[-86.411786,36.649739],[-86.406309,36.775708],[-86.22557,36.912632]]]},"id":"21003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.180861,36.923586],[-76.175384,36.929063],[-75.868676,36.551154],[-75.901537,36.551154],[-76.120615,36.551154],[-76.224677,36.841432],[-76.180861,36.923586]]]},"id":"51810"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.008302,36.929063],[-93.608485,36.923586],[-93.586578,36.496384],[-93.728978,36.496384],[-93.865902,36.496384],[-94.079502,36.496384],[-94.068548,36.748324],[-94.063071,36.929063],[-94.008302,36.929063]]]},"id":"29009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.633614,36.929063],[-80.463828,36.709985],[-80.611706,36.556631],[-80.83626,36.556631],[-80.83626,36.556631],[-80.912938,36.649739],[-80.934845,36.671646],[-81.044384,36.80857],[-80.743152,36.87977],[-80.633614,36.929063]]]},"id":"51035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.838541,36.929063],[-81.608509,36.638785],[-81.646848,36.6114],[-81.827587,36.616877],[-82.145249,36.594969],[-82.145249,36.671646],[-82.243834,36.594969],[-82.293127,36.594969],[-82.331465,36.709985],[-81.838541,36.929063]]]},"id":"51191"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.405416,36.896201],[-76.421846,36.868816],[-76.493047,36.551154],[-76.542339,36.551154],[-76.914771,36.551154],[-76.89834,36.644262],[-76.482093,36.929063],[-76.405416,36.896201]]]},"id":"51800"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.568783,36.929063],[-90.256598,36.923586],[-90.147059,36.633308],[-90.218259,36.496384],[-90.57426,36.496384],[-90.661891,36.814047],[-90.678322,36.929063],[-90.568783,36.929063]]]},"id":"29023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.345169,36.918109],[-76.2904,36.819524],[-76.405416,36.868816],[-76.421846,36.868816],[-76.405416,36.896201],[-76.345169,36.918109]]]},"id":"51740"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.699712,36.918109],[-121.644943,36.896201],[-121.31085,36.501861],[-120.681002,36.266353],[-120.314047,35.904875],[-120.215462,35.789859],[-121.343711,35.795336],[-121.896882,36.315645],[-121.809251,36.852385],[-121.699712,36.918109]]]},"id":"06053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.621296,36.87977],[-77.429604,36.709985],[-77.298157,36.545677],[-77.769174,36.545677],[-77.659635,36.896201],[-77.621296,36.87977]]]},"id":"51081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.868205,36.885247],[-82.76962,36.797616],[-82.983221,36.594969],[-83.470669,36.594969],[-83.673316,36.600446],[-83.459715,36.666169],[-82.879159,36.890724],[-82.868205,36.885247]]]},"id":"51105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.475699,36.885247],[-78.02659,36.775708],[-78.048498,36.545677],[-78.322345,36.545677],[-78.459268,36.5402],[-78.470222,36.5402],[-78.733115,36.5402],[-78.650961,36.699031],[-78.49213,36.890724],[-78.475699,36.885247]]]},"id":"51117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.658695,36.890724],[-91.220539,36.885247],[-91.116477,36.825001],[-91.127431,36.496384],[-91.406755,36.496384],[-91.450571,36.496384],[-91.450571,36.496384],[-91.669648,36.501861],[-91.658695,36.890724]]]},"id":"29149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.217813,36.852385],[-85.064458,36.857862],[-84.976827,36.616877],[-85.278059,36.627831],[-85.29449,36.627831],[-85.217813,36.852385]]]},"id":"21053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.479343,36.885247],[-82.408142,36.874293],[-82.331465,36.709985],[-82.293127,36.594969],[-82.610789,36.594969],[-82.654605,36.594969],[-82.829867,36.594969],[-82.983221,36.594969],[-82.76962,36.797616],[-82.479343,36.885247]]]},"id":"51169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.608956,36.885247],[-86.406309,36.775708],[-86.411786,36.649739],[-86.56514,36.633308],[-86.76231,36.649739],[-86.608956,36.885247]]]},"id":"21213"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.233797,36.874293],[-80.042104,36.792139],[-80.053058,36.5402],[-80.441921,36.551154],[-80.611706,36.556631],[-80.463828,36.709985],[-80.233797,36.874293]]]},"id":"51141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.528165,36.868816],[-89.517211,36.868816],[-89.325518,36.633308],[-89.418626,36.496384],[-89.484349,36.496384],[-89.539119,36.496384],[-89.544596,36.337553],[-89.714381,36.425184],[-89.960843,36.386845],[-89.960843,36.627831],[-89.692473,36.857862],[-89.528165,36.868816]]]},"id":"29143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.405416,36.868816],[-76.2904,36.819524],[-76.224677,36.841432],[-76.120615,36.551154],[-76.312308,36.551154],[-76.493047,36.551154],[-76.421846,36.868816],[-76.405416,36.868816]]]},"id":"51550"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.647764,36.852385],[-79.642287,36.857862],[-79.713488,36.5402],[-79.965427,36.5402],[-80.025673,36.5402],[-80.053058,36.5402],[-80.042104,36.792139],[-79.647764,36.852385]]]},"id":"51089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.081288,36.841432],[-114.048427,36.841432],[-114.048427,36.195153],[-114.754952,36.085614],[-114.634459,35.00118],[-115.647693,35.80629],[-115.899633,36.00346],[-115.894156,36.841432],[-114.081288,36.841432]]]},"id":"32003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.738122,36.841432],[-85.595722,36.819524],[-85.43689,36.616877],[-85.787415,36.622354],[-85.979107,36.627831],[-85.979107,36.720939],[-85.738122,36.841432]]]},"id":"21171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.935738,36.814047],[-90.661891,36.814047],[-90.57426,36.496384],[-90.782384,36.496384],[-90.848107,36.496384],[-91.127431,36.496384],[-91.116477,36.825001],[-90.935738,36.814047]]]},"id":"29181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.293549,36.819524],[-98.959456,36.507338],[-98.959456,36.501861],[-98.953979,36.162291],[-99.38118,36.162291],[-99.605735,36.594969],[-99.293549,36.819524]]]},"id":"40153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.301777,36.819524],[-92.907437,36.80857],[-92.765037,36.80857],[-92.770513,36.496384],[-92.852668,36.496384],[-93.066268,36.496384],[-93.2963,36.496384],[-93.312731,36.496384],[-93.301777,36.819524]]]},"id":"29213"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.044384,36.80857],[-80.934845,36.671646],[-80.912938,36.649739],[-80.83626,36.556631],[-80.901984,36.562108],[-80.978661,36.562108],[-81.351093,36.573061],[-81.679709,36.589492],[-81.646848,36.6114],[-81.608509,36.638785],[-81.263462,36.764754],[-81.044384,36.80857]]]},"id":"51077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.529528,36.803093],[-92.113281,36.792139],[-92.118758,36.496384],[-92.151619,36.496384],[-92.529528,36.496384],[-92.770513,36.496384],[-92.765037,36.80857],[-92.529528,36.803093]]]},"id":"29153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.122871,36.786662],[-88.810686,36.775708],[-88.816163,36.501861],[-88.827116,36.501861],[-88.832593,36.501861],[-89.095486,36.622354],[-89.172164,36.649739],[-89.122871,36.786662]]]},"id":"21105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.539565,36.764754],[-94.068548,36.748324],[-94.079502,36.496384],[-94.473842,36.501861],[-94.616242,36.501861],[-94.616242,36.666169],[-94.616242,36.764754],[-94.539565,36.764754]]]},"id":"29119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.109637,36.748324],[-88.071299,36.677123],[-88.054868,36.496384],[-88.487546,36.501861],[-88.487546,36.748324],[-88.109637,36.748324]]]},"id":"21035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.358779,36.742847],[-118.008255,35.789859],[-119.536321,35.789859],[-119.57466,36.490907],[-118.98315,36.742847],[-118.358779,36.742847]]]},"id":"06107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.071299,36.677123],[-87.69339,36.638785],[-87.63862,36.638785],[-87.594805,36.364938],[-87.753636,36.34303],[-87.983668,36.353984],[-87.989145,36.359461],[-88.054868,36.496384],[-88.071299,36.677123]]]},"id":"47161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.145249,36.671646],[-82.145249,36.594969],[-82.243834,36.594969],[-82.145249,36.671646]]]},"id":"51520"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.890089,36.671646],[-94.616242,36.666169],[-94.616242,36.501861],[-94.561473,36.162291],[-94.769597,36.162291],[-94.796981,36.162291],[-95.010582,36.162291],[-95.005105,36.507338],[-94.999628,36.671646],[-94.890089,36.671646]]]},"id":"40041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.76231,36.649739],[-86.56514,36.633308],[-86.756833,36.403276],[-86.76231,36.403276],[-86.915664,36.381369],[-87.118311,36.458046],[-87.112834,36.644262],[-87.058065,36.644262],[-86.76231,36.649739]]]},"id":"47147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.411786,36.649739],[-86.203662,36.638785],[-86.231047,36.48543],[-86.285816,36.348507],[-86.36797,36.353984],[-86.592525,36.244445],[-86.756833,36.403276],[-86.56514,36.633308],[-86.411786,36.649739]]]},"id":"47165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.095486,36.622354],[-88.832593,36.501861],[-89.117394,36.501861],[-89.347426,36.501861],[-89.418626,36.496384],[-89.325518,36.633308],[-89.172164,36.649739],[-89.095486,36.622354]]]},"id":"21075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.401302,36.638785],[-79.341056,36.5402],[-79.472502,36.5402],[-79.401302,36.638785]]]},"id":"51590"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.112834,36.644262],[-87.118311,36.458046],[-87.288096,36.321122],[-87.512651,36.332076],[-87.594805,36.364938],[-87.63862,36.638785],[-87.337389,36.644262],[-87.112834,36.644262]]]},"id":"47125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.203662,36.638785],[-85.979107,36.627831],[-85.787415,36.622354],[-85.814799,36.501861],[-85.825753,36.41423],[-85.979107,36.425184],[-86.231047,36.48543],[-86.203662,36.638785]]]},"id":"47111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.048474,36.627831],[-89.960843,36.627831],[-89.960843,36.386845],[-89.960843,35.997983],[-90.289459,35.997983],[-90.377091,35.997983],[-90.190875,36.200629],[-90.218259,36.496384],[-90.147059,36.633308],[-90.048474,36.627831]]]},"id":"29069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.278059,36.627831],[-85.283536,36.529246],[-85.497137,36.403276],[-85.814799,36.501861],[-85.787415,36.622354],[-85.43689,36.616877],[-85.29449,36.627831],[-85.278059,36.627831]]]},"id":"47027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.278059,36.627831],[-84.976827,36.616877],[-84.785134,36.605923],[-84.730365,36.523769],[-85.009689,36.567584],[-85.119228,36.408753],[-85.283536,36.534723],[-85.283536,36.529246],[-85.278059,36.627831]]]},"id":"47137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.827587,36.616877],[-81.986418,36.507338],[-82.298603,36.397799],[-82.473866,36.441615],[-82.681989,36.430661],[-82.610789,36.594969],[-82.293127,36.594969],[-82.243834,36.594969],[-82.145249,36.594969],[-81.827587,36.616877]]]},"id":"47163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.827587,36.616877],[-81.646848,36.6114],[-81.679709,36.589492],[-81.734479,36.392322],[-81.920695,36.288261],[-81.931648,36.266353],[-81.986418,36.507338],[-81.827587,36.616877]]]},"id":"47091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.785134,36.605923],[-84.779657,36.605923],[-84.259348,36.589492],[-84.374364,36.21706],[-84.440087,36.162291],[-84.70298,36.370415],[-84.730365,36.523769],[-84.785134,36.605923]]]},"id":"47151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.673316,36.600446],[-83.470669,36.594969],[-83.388515,36.41423],[-83.667839,36.34303],[-83.903347,36.419707],[-83.985501,36.589492],[-83.930732,36.589492],[-83.673316,36.600446]]]},"id":"47025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.464251,36.594969],[-97.058958,36.594969],[-97.009665,36.507338],[-96.927511,36.244445],[-97.031573,36.244445],[-97.354713,36.156814],[-97.458774,36.162291],[-97.464251,36.594969]]]},"id":"40103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.983221,36.594969],[-82.829867,36.594969],[-83.278976,36.392322],[-83.388515,36.41423],[-83.470669,36.594969],[-82.983221,36.594969]]]},"id":"47067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.810215,36.594969],[-95.432306,36.594969],[-95.328245,36.512815],[-95.437783,36.07466],[-95.618522,36.162291],[-95.760923,36.162291],[-95.810215,36.425184],[-95.810215,36.594969]]]},"id":"40131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.654605,36.594969],[-82.610789,36.594969],[-82.681989,36.430661],[-82.703897,36.408753],[-83.081806,36.244445],[-83.158483,36.332076],[-83.257068,36.288261],[-83.278976,36.392322],[-82.829867,36.594969],[-82.654605,36.594969]]]},"id":"47073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.984561,36.594969],[-97.464251,36.594969],[-97.464251,36.594969],[-97.458774,36.162291],[-97.677852,36.162291],[-98.0941,36.167768],[-98.105053,36.162291],[-98.105053,36.463523],[-98.105053,36.594969],[-97.984561,36.594969]]]},"id":"40047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.605735,36.594969],[-99.38118,36.162291],[-99.38118,36.014414],[-100.000075,35.882967],[-100.000075,36.058229],[-100.005552,36.501861],[-100.005552,36.594969],[-99.605735,36.594969]]]},"id":"40045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.226487,36.589492],[-83.985501,36.589492],[-83.903347,36.419707],[-84.001932,36.27183],[-84.374364,36.21706],[-84.259348,36.589492],[-84.226487,36.589492]]]},"id":"47013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.351093,36.573061],[-81.252508,36.364938],[-81.477062,36.238968],[-81.734479,36.392322],[-81.679709,36.589492],[-81.351093,36.573061]]]},"id":"37009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.009689,36.567584],[-84.730365,36.523769],[-84.70298,36.370415],[-84.724888,36.375892],[-84.905627,36.156814],[-84.987781,36.162291],[-85.102797,36.140383],[-85.119228,36.14586],[-85.119228,36.408753],[-85.009689,36.567584]]]},"id":"47049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.978661,36.562108],[-80.901984,36.562108],[-80.967707,36.403276],[-81.082723,36.430661],[-81.252508,36.364938],[-81.351093,36.573061],[-80.978661,36.562108]]]},"id":"37005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.724864,36.529246],[-96.270278,36.162291],[-96.297663,36.162291],[-96.620803,36.162291],[-96.927511,36.244445],[-97.009665,36.507338],[-96.724864,36.529246]]]},"id":"40117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.83626,36.556631],[-80.611706,36.556631],[-80.441921,36.551154],[-80.452875,36.260876],[-80.452875,36.238968],[-80.874599,36.238968],[-80.967707,36.403276],[-80.901984,36.562108],[-80.83626,36.556631],[-80.83626,36.556631]]]},"id":"37171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.914771,36.551154],[-76.542339,36.551154],[-76.493047,36.512815],[-76.454708,36.375892],[-76.55877,36.353984],[-76.695693,36.293737],[-76.914771,36.545677],[-76.914771,36.551154]]]},"id":"37073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.493047,36.551154],[-76.312308,36.551154],[-75.885106,36.162291],[-76.049415,36.184199],[-76.493047,36.512815],[-76.542339,36.551154],[-76.493047,36.551154]]]},"id":"37029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.901537,36.551154],[-75.868676,36.551154],[-75.775568,36.233491],[-75.791998,36.228014],[-75.885106,36.162291],[-76.312308,36.551154],[-76.120615,36.551154],[-75.901537,36.551154]]]},"id":"37053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.441921,36.551154],[-80.053058,36.5402],[-80.025673,36.5402],[-80.036627,36.255399],[-80.036627,36.255399],[-80.452875,36.260876],[-80.441921,36.551154]]]},"id":"37169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.298157,36.545677],[-77.16671,36.545677],[-77.210526,36.244445],[-77.29268,36.167768],[-77.90062,36.507338],[-77.90062,36.545677],[-77.769174,36.545677],[-77.298157,36.545677]]]},"id":"37131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.914771,36.545677],[-76.695693,36.293737],[-76.706647,36.244445],[-77.210526,36.244445],[-77.16671,36.545677],[-76.914771,36.545677]]]},"id":"37091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.322345,36.545677],[-78.048498,36.545677],[-77.90062,36.545677],[-77.90062,36.507338],[-78.004682,36.200629],[-78.163514,36.249922],[-78.305914,36.266353],[-78.322345,36.545677]]]},"id":"37185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.322345,36.545677],[-78.305914,36.266353],[-78.497607,36.173245],[-78.459268,36.5402],[-78.322345,36.545677]]]},"id":"37181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.965427,36.5402],[-79.713488,36.5402],[-79.510841,36.5402],[-79.532749,36.249922],[-79.532749,36.238968],[-80.036627,36.255399],[-80.025673,36.5402],[-79.965427,36.5402]]]},"id":"37157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.470222,36.5402],[-78.459268,36.5402],[-78.497607,36.173245],[-78.546899,36.01989],[-78.749546,36.069183],[-78.804316,36.233491],[-78.798839,36.5402],[-78.733115,36.5402],[-78.470222,36.5402]]]},"id":"37077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.138409,36.5402],[-78.798839,36.5402],[-78.804316,36.233491],[-78.952193,36.238968],[-79.15484,36.244445],[-79.138409,36.5402]]]},"id":"37145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.138409,36.5402],[-79.15484,36.244445],[-79.247948,36.244445],[-79.258902,36.244445],[-79.532749,36.249922],[-79.510841,36.5402],[-79.472502,36.5402],[-79.341056,36.5402],[-79.220563,36.5402],[-79.138409,36.5402]]]},"id":"37033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.283536,36.534723],[-85.119228,36.408753],[-85.119228,36.14586],[-85.497137,36.304691],[-85.497137,36.403276],[-85.283536,36.529246],[-85.283536,36.534723]]]},"id":"47133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.814799,36.501861],[-85.497137,36.403276],[-85.497137,36.304691],[-85.497137,36.299214],[-85.781938,36.238968],[-85.825753,36.41423],[-85.814799,36.501861]]]},"id":"47087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.90062,36.507338],[-77.29268,36.167768],[-77.325542,36.07466],[-77.402219,36.00346],[-77.697974,36.151337],[-78.004682,36.200629],[-77.90062,36.507338]]]},"id":"37083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.986418,36.507338],[-81.931648,36.266353],[-82.079526,36.107521],[-82.221926,36.156814],[-82.320511,36.260876],[-82.342419,36.255399],[-82.298603,36.397799],[-81.986418,36.507338]]]},"id":"47019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.493047,36.512815],[-76.049415,36.184199],[-76.191815,36.118475],[-76.454708,36.375892],[-76.493047,36.512815]]]},"id":"37139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.322768,36.512815],[-95.005105,36.507338],[-95.010582,36.162291],[-95.027013,36.162291],[-95.207752,36.07466],[-95.437783,36.07466],[-95.328245,36.512815],[-95.322768,36.512815]]]},"id":"40097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.117394,36.501861],[-88.832593,36.501861],[-88.827116,36.501861],[-88.958563,36.222537],[-89.155733,36.206106],[-89.265272,36.206106],[-89.484349,36.211583],[-89.347426,36.501861],[-89.117394,36.501861]]]},"id":"47131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.959456,36.501861],[-98.959456,36.507338],[-98.532255,36.463523],[-98.105053,36.463523],[-98.105053,36.162291],[-98.209115,36.162291],[-98.488439,36.162291],[-98.636317,36.162291],[-98.953979,36.162291],[-98.959456,36.501861]]]},"id":"40093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.347426,36.501861],[-89.484349,36.211583],[-89.62675,36.184199],[-89.544596,36.337553],[-89.539119,36.496384],[-89.484349,36.496384],[-89.418626,36.496384],[-89.347426,36.501861]]]},"id":"47095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.827116,36.501861],[-88.816163,36.501861],[-88.514931,36.501861],[-88.531362,36.151337],[-88.690193,36.063706],[-88.958563,36.222537],[-88.827116,36.501861]]]},"id":"47183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.514931,36.501861],[-88.487546,36.501861],[-88.054868,36.496384],[-87.989145,36.359461],[-88.213699,36.118475],[-88.531362,36.151337],[-88.514931,36.501861]]]},"id":"47079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.001438,36.501861],[-102.163466,36.501861],[-102.163466,36.052752],[-102.30039,36.052752],[-103.039777,36.052752],[-103.001438,36.501861]]]},"id":"48111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.812942,36.501861],[-101.621249,36.501861],[-101.621249,36.052752],[-102.125128,36.058229],[-102.163466,36.052752],[-102.163466,36.501861],[-102.03202,36.501861],[-101.812942,36.501861]]]},"id":"48421"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.005552,36.501861],[-100.000075,36.058229],[-100.542292,36.058229],[-100.547769,36.058229],[-100.547769,36.501861],[-100.005552,36.501861]]]},"id":"48295"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.805185,36.501861],[-100.547769,36.501861],[-100.547769,36.058229],[-100.947585,36.058229],[-101.084509,36.058229],[-101.084509,36.501861],[-100.953062,36.501861],[-100.805185,36.501861]]]},"id":"48357"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.473842,36.501861],[-94.079502,36.496384],[-93.865902,36.496384],[-93.816609,36.304691],[-93.887809,36.233491],[-94.013779,36.206106],[-94.550519,36.102045],[-94.561473,36.162291],[-94.616242,36.501861],[-94.473842,36.501861]]]},"id":"05007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.084509,36.501861],[-101.084509,36.058229],[-101.084509,36.052752],[-101.621249,36.052752],[-101.621249,36.501861],[-101.084509,36.501861]]]},"id":"48195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.669648,36.501861],[-91.450571,36.496384],[-91.691556,36.255399],[-92.124235,36.260876],[-92.157096,36.260876],[-92.151619,36.496384],[-92.118758,36.496384],[-91.669648,36.501861]]]},"id":"05049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.728978,36.496384],[-93.586578,36.496384],[-93.312731,36.496384],[-93.2963,36.496384],[-93.301777,36.123952],[-93.477039,36.123952],[-93.816609,36.304691],[-93.865902,36.496384],[-93.728978,36.496384]]]},"id":"05015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.529528,36.496384],[-92.151619,36.496384],[-92.157096,36.260876],[-92.195435,36.134906],[-92.414512,35.976075],[-92.409035,36.063706],[-92.529528,36.496384]]]},"id":"05005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.770513,36.496384],[-92.529528,36.496384],[-92.409035,36.063706],[-92.891006,36.112998],[-92.852668,36.496384],[-92.770513,36.496384]]]},"id":"05089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.782384,36.496384],[-90.57426,36.496384],[-90.218259,36.496384],[-90.190875,36.200629],[-90.804292,36.266353],[-90.782384,36.496384]]]},"id":"05021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.848107,36.496384],[-90.782384,36.496384],[-90.804292,36.266353],[-90.809769,36.151337],[-91.242447,36.255399],[-91.258878,36.255399],[-91.406755,36.496384],[-91.127431,36.496384],[-90.848107,36.496384]]]},"id":"05121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.066268,36.496384],[-92.852668,36.496384],[-92.891006,36.112998],[-92.945776,36.112998],[-93.301777,36.123952],[-93.2963,36.496384],[-93.066268,36.496384]]]},"id":"05009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.450571,36.496384],[-91.406755,36.496384],[-91.258878,36.255399],[-91.357463,35.888444],[-91.707987,35.943213],[-91.691556,36.255399],[-91.450571,36.496384],[-91.450571,36.496384]]]},"id":"05135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.57466,36.490907],[-119.536321,35.789859],[-120.193554,35.789859],[-120.215462,35.789859],[-120.314047,35.904875],[-119.958045,36.403276],[-119.57466,36.490907]]]},"id":"06031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.231047,36.48543],[-85.979107,36.425184],[-86.137939,36.293737],[-86.285816,36.348507],[-86.231047,36.48543]]]},"id":"47169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.118311,36.458046],[-86.915664,36.381369],[-87.052588,36.047275],[-87.184034,36.047275],[-87.288096,36.321122],[-87.118311,36.458046]]]},"id":"47021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.473866,36.441615],[-82.298603,36.397799],[-82.342419,36.255399],[-82.594358,36.096568],[-82.632697,36.419707],[-82.703897,36.408753],[-82.681989,36.430661],[-82.473866,36.441615]]]},"id":"47179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.082723,36.430661],[-80.967707,36.403276],[-80.874599,36.238968],[-80.880076,36.058229],[-81.027953,36.047275],[-81.329185,35.997983],[-81.542786,36.118475],[-81.477062,36.238968],[-81.252508,36.364938],[-81.082723,36.430661]]]},"id":"37193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.903347,36.419707],[-83.667839,36.34303],[-83.733562,36.162291],[-83.925255,36.173245],[-83.941686,36.184199],[-84.001932,36.27183],[-83.903347,36.419707]]]},"id":"47173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.714381,36.425184],[-89.544596,36.337553],[-89.62675,36.184199],[-89.730812,35.997983],[-89.960843,35.997983],[-89.960843,36.386845],[-89.714381,36.425184]]]},"id":"29155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.979107,36.425184],[-85.825753,36.41423],[-85.781938,36.238968],[-85.809322,36.129429],[-86.061262,36.085614],[-86.137939,36.293737],[-85.979107,36.425184]]]},"id":"47159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.919754,36.425184],[-95.810215,36.425184],[-95.760923,36.162291],[-95.821169,35.855582],[-96.03477,35.855582],[-96.297663,36.162291],[-96.270278,36.162291],[-96.001908,36.425184],[-95.919754,36.425184]]]},"id":"40143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.278976,36.392322],[-83.257068,36.288261],[-83.465192,36.173245],[-83.602115,36.151337],[-83.667839,36.080137],[-83.733562,36.162291],[-83.667839,36.34303],[-83.388515,36.41423],[-83.278976,36.392322]]]},"id":"47057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.632697,36.419707],[-82.594358,36.096568],[-82.605312,36.041798],[-82.786051,35.987029],[-82.901067,35.943213],[-83.16396,36.178722],[-83.081806,36.244445],[-82.703897,36.408753],[-82.632697,36.419707]]]},"id":"47059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.76231,36.403276],[-86.756833,36.403276],[-86.592525,36.244445],[-86.515848,36.102045],[-86.619909,35.970598],[-86.921141,36.052752],[-87.052588,36.047275],[-86.915664,36.381369],[-86.76231,36.403276]]]},"id":"47037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.734479,36.392322],[-81.477062,36.238968],[-81.542786,36.118475],[-81.685186,36.123952],[-81.811156,36.112998],[-81.920695,36.288261],[-81.734479,36.392322]]]},"id":"37189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.454708,36.375892],[-76.191815,36.118475],[-76.410893,36.07466],[-76.55877,36.353984],[-76.454708,36.375892]]]},"id":"37143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.724888,36.375892],[-84.70298,36.370415],[-84.440087,36.162291],[-84.341502,36.047275],[-84.681073,35.910352],[-84.905627,36.156814],[-84.724888,36.375892]]]},"id":"47129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.753636,36.34303],[-87.594805,36.364938],[-87.512651,36.332076],[-87.56742,36.178722],[-87.879606,36.233491],[-87.950806,36.244445],[-87.983668,36.353984],[-87.753636,36.34303]]]},"id":"47083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.989145,36.359461],[-87.983668,36.353984],[-87.950806,36.244445],[-87.96176,35.839151],[-87.972714,35.817244],[-88.175361,35.844628],[-88.213699,36.118475],[-87.989145,36.359461]]]},"id":"47005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.36797,36.353984],[-86.285816,36.348507],[-86.137939,36.293737],[-86.061262,36.085614],[-86.017446,35.959644],[-86.15437,35.954167],[-86.515848,36.102045],[-86.592525,36.244445],[-86.36797,36.353984]]]},"id":"47189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.695693,36.293737],[-76.55877,36.353984],[-76.410893,36.07466],[-76.668309,36.01989],[-76.706647,36.244445],[-76.695693,36.293737]]]},"id":"37041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.158483,36.332076],[-83.081806,36.244445],[-83.16396,36.178722],[-83.23516,36.085614],[-83.465192,36.173245],[-83.257068,36.288261],[-83.158483,36.332076]]]},"id":"47063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.512651,36.332076],[-87.288096,36.321122],[-87.184034,36.047275],[-87.205942,35.959644],[-87.512651,35.992506],[-87.534558,35.992506],[-87.56742,36.178722],[-87.512651,36.332076]]]},"id":"47043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.816609,36.304691],[-93.477039,36.123952],[-93.520854,35.762474],[-93.696116,35.767951],[-93.909717,35.762474],[-93.964486,35.762474],[-93.887809,36.233491],[-93.816609,36.304691]]]},"id":"05087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.497137,36.299214],[-85.497137,36.304691],[-85.119228,36.14586],[-85.102797,36.140383],[-85.261628,35.981552],[-85.508091,36.080137],[-85.645014,36.014414],[-85.809322,36.129429],[-85.781938,36.238968],[-85.497137,36.299214]]]},"id":"47141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.001932,36.27183],[-83.941686,36.184199],[-84.270302,35.910352],[-84.341502,36.047275],[-84.440087,36.162291],[-84.374364,36.21706],[-84.001932,36.27183]]]},"id":"47001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.452875,36.238968],[-80.49669,36.047275],[-80.69386,36.052752],[-80.880076,36.058229],[-80.874599,36.238968],[-80.452875,36.238968]]]},"id":"37197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.931648,36.266353],[-81.920695,36.288261],[-81.811156,36.112998],[-81.805679,35.959644],[-81.898787,35.997983],[-81.942602,35.959644],[-81.948079,35.954167],[-81.980941,35.910352],[-82.079526,36.107521],[-81.931648,36.266353]]]},"id":"37011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.804292,36.266353],[-90.190875,36.200629],[-90.377091,35.997983],[-90.853584,35.970598],[-90.809769,36.151337],[-90.804292,36.266353]]]},"id":"05055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.163514,36.249922],[-78.004682,36.200629],[-78.053975,36.134906],[-78.256622,35.817244],[-78.546899,36.01989],[-78.497607,36.173245],[-78.305914,36.266353],[-78.163514,36.249922]]]},"id":"37069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.340092,36.260876],[-104.436396,36.21706],[-104.365196,35.778905],[-105.718001,35.872013],[-105.718001,35.976075],[-105.531785,36.014414],[-105.340092,36.260876]]]},"id":"35033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.452875,36.260876],[-80.036627,36.255399],[-80.042104,36.008937],[-80.211889,36.008937],[-80.398105,35.970598],[-80.49669,36.047275],[-80.452875,36.238968],[-80.452875,36.260876]]]},"id":"37067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.124235,36.260876],[-91.691556,36.255399],[-91.707987,35.943213],[-91.850387,35.866536],[-92.195435,36.134906],[-92.157096,36.260876],[-92.124235,36.260876]]]},"id":"05065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.320511,36.260876],[-82.221926,36.156814],[-82.419096,36.07466],[-82.506727,35.976075],[-82.605312,36.041798],[-82.594358,36.096568],[-82.342419,36.255399],[-82.320511,36.260876]]]},"id":"47171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.242447,36.255399],[-90.809769,36.151337],[-90.853584,35.970598],[-91.034323,35.882967],[-91.198632,35.888444],[-91.357463,35.888444],[-91.258878,36.255399],[-91.242447,36.255399]]]},"id":"05075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.036627,36.255399],[-80.036627,36.255399],[-79.532749,36.238968],[-79.543702,35.899398],[-80.036627,35.921306],[-80.047581,35.921306],[-80.042104,36.008937],[-80.036627,36.255399]]]},"id":"37081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.532749,36.249922],[-79.258902,36.244445],[-79.247948,35.87749],[-79.543702,35.844628],[-79.543702,35.899398],[-79.532749,36.238968],[-79.532749,36.249922]]]},"id":"37001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.706647,36.244445],[-76.668309,36.01989],[-76.690217,35.943213],[-76.761417,35.866536],[-77.325542,36.07466],[-77.29268,36.167768],[-77.210526,36.244445],[-76.706647,36.244445]]]},"id":"37015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.031573,36.244445],[-96.927511,36.244445],[-96.620803,36.162291],[-96.620803,35.943213],[-97.080866,35.943213],[-97.141112,35.943213],[-97.354713,36.156814],[-97.031573,36.244445]]]},"id":"40119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.879606,36.233491],[-87.56742,36.178722],[-87.534558,35.992506],[-87.715298,35.839151],[-87.96176,35.839151],[-87.950806,36.244445],[-87.879606,36.233491]]]},"id":"47085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.247948,36.244445],[-79.15484,36.244445],[-78.952193,36.238968],[-79.017916,35.861059],[-79.187701,35.872013],[-79.247948,35.87749],[-79.258902,36.244445],[-79.247948,36.244445]]]},"id":"37135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.952193,36.238968],[-78.804316,36.233491],[-78.749546,36.069183],[-78.908377,35.866536],[-79.017916,35.861059],[-78.952193,36.238968]]]},"id":"37063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.013779,36.206106],[-93.887809,36.233491],[-93.964486,35.762474],[-94.490273,35.756997],[-94.550519,36.102045],[-94.013779,36.206106]]]},"id":"05143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.155733,36.206106],[-88.958563,36.222537],[-88.690193,36.063706],[-88.706624,35.789859],[-88.914747,35.795336],[-89.188594,35.997983],[-89.188594,35.997983],[-89.155733,36.206106]]]},"id":"47053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.623976,36.222537],[-106.884589,36.21706],[-106.249264,35.965121],[-106.249264,35.756997],[-106.243787,35.21478],[-107.196774,35.220257],[-107.31179,35.307888],[-107.306313,35.997983],[-107.623976,35.997983],[-107.623976,36.222537]]]},"id":"35043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.436396,36.21706],[-104.009195,36.21706],[-103.362916,36.085614],[-103.37387,35.740566],[-103.636763,35.390042],[-103.976333,35.800813],[-104.365196,35.778905],[-104.436396,36.21706]]]},"id":"35021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.265272,36.206106],[-89.155733,36.206106],[-89.188594,35.997983],[-89.341949,35.882967],[-89.489826,35.94869],[-89.643181,35.904875],[-89.730812,35.997983],[-89.62675,36.184199],[-89.484349,36.211583],[-89.265272,36.206106]]]},"id":"47045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.053975,36.134906],[-78.004682,36.200629],[-77.697974,36.151337],[-77.82942,35.866536],[-78.190898,35.729613],[-78.256622,35.817244],[-78.053975,36.134906]]]},"id":"37127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.602115,36.151337],[-83.465192,36.173245],[-83.23516,36.085614],[-83.311837,35.893921],[-83.673316,36.036321],[-83.667839,36.080137],[-83.602115,36.151337]]]},"id":"47089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.925255,36.173245],[-83.733562,36.162291],[-83.667839,36.080137],[-83.673316,36.036321],[-83.678792,36.030844],[-83.793808,35.888444],[-84.16624,35.80629],[-84.264825,35.899398],[-84.270302,35.910352],[-83.941686,36.184199],[-83.925255,36.173245]]]},"id":"47093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.16396,36.178722],[-82.901067,35.943213],[-82.961313,35.789859],[-83.257068,35.713182],[-83.311837,35.893921],[-83.23516,36.085614],[-83.16396,36.178722]]]},"id":"47029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.987781,36.162291],[-84.905627,36.156814],[-84.681073,35.910352],[-84.779657,35.822721],[-84.916581,35.762474],[-85.256151,35.767951],[-85.256151,35.767951],[-85.272582,35.789859],[-85.267105,35.795336],[-85.261628,35.981552],[-85.102797,36.140383],[-84.987781,36.162291]]]},"id":"47035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.488439,36.162291],[-98.209115,36.162291],[-98.209115,35.724136],[-98.313177,35.548874],[-98.587024,35.548874],[-98.625363,35.548874],[-98.63084,35.811767],[-98.636317,36.162291],[-98.488439,36.162291]]]},"id":"40011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.0941,36.167768],[-97.677852,36.162291],[-97.672375,35.724136],[-97.973607,35.724136],[-98.209115,35.724136],[-98.209115,36.162291],[-98.105053,36.162291],[-98.0941,36.167768]]]},"id":"40073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.636317,36.162291],[-98.63084,35.811767],[-98.817056,35.811767],[-99.375704,35.811767],[-99.38118,36.014414],[-99.38118,36.162291],[-98.953979,36.162291],[-98.636317,36.162291]]]},"id":"40043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.677852,36.162291],[-97.458774,36.162291],[-97.354713,36.156814],[-97.141112,35.943213],[-97.141112,35.724136],[-97.672375,35.724136],[-97.677852,36.162291]]]},"id":"40083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.620803,36.162291],[-96.297663,36.162291],[-96.03477,35.855582],[-96.138832,35.855582],[-96.193601,35.636505],[-96.478402,35.636505],[-96.620803,35.636505],[-96.620803,35.943213],[-96.620803,36.162291]]]},"id":"40037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.618522,36.162291],[-95.437783,36.07466],[-95.207752,36.07466],[-95.267998,35.811767],[-95.656861,35.855582],[-95.7664,35.855582],[-95.821169,35.855582],[-95.760923,36.162291],[-95.618522,36.162291]]]},"id":"40145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.027013,36.162291],[-95.010582,36.162291],[-94.796981,36.162291],[-94.807935,35.636505],[-94.851751,35.636505],[-95.125598,35.636505],[-95.267998,35.811767],[-95.207752,36.07466],[-95.027013,36.162291]]]},"id":"40021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.769597,36.162291],[-94.561473,36.162291],[-94.550519,36.102045],[-94.490273,35.756997],[-94.473842,35.636505],[-94.807935,35.636505],[-94.796981,36.162291],[-94.769597,36.162291]]]},"id":"40001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.079526,36.107521],[-81.980941,35.910352],[-82.134295,35.822721],[-82.419096,36.07466],[-82.221926,36.156814],[-82.079526,36.107521]]]},"id":"37121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.697974,36.151337],[-77.402219,36.00346],[-77.352926,35.817244],[-77.413173,35.822721],[-77.659635,35.674843],[-77.82942,35.866536],[-77.82942,35.866536],[-77.697974,36.151337]]]},"id":"37065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.531362,36.151337],[-88.213699,36.118475],[-88.175361,35.844628],[-88.180837,35.817244],[-88.514931,35.822721],[-88.608039,35.789859],[-88.706624,35.789859],[-88.690193,36.063706],[-88.531362,36.151337]]]},"id":"47017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.195435,36.134906],[-91.850387,35.866536],[-91.839434,35.702228],[-91.998265,35.707705],[-92.23925,35.713182],[-92.414512,35.789859],[-92.414512,35.976075],[-92.195435,36.134906]]]},"id":"05137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.809322,36.129429],[-85.645014,36.014414],[-85.683353,35.833674],[-85.885999,35.839151],[-86.017446,35.959644],[-86.061262,36.085614],[-85.809322,36.129429]]]},"id":"47041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.301777,36.123952],[-92.945776,36.112998],[-92.951253,35.724136],[-93.016976,35.724136],[-93.164853,35.729613],[-93.520854,35.762474],[-93.477039,36.123952],[-93.301777,36.123952]]]},"id":"05101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.685186,36.123952],[-81.542786,36.118475],[-81.329185,35.997983],[-81.334662,35.795336],[-81.362047,35.767951],[-81.805679,35.959644],[-81.811156,36.112998],[-81.685186,36.123952]]]},"id":"37027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.945776,36.112998],[-92.891006,36.112998],[-92.409035,36.063706],[-92.414512,35.976075],[-92.414512,35.789859],[-92.611682,35.789859],[-92.808852,35.724136],[-92.951253,35.724136],[-92.945776,36.112998]]]},"id":"05129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.515848,36.102045],[-86.15437,35.954167],[-86.209139,35.702228],[-86.247477,35.631028],[-86.521325,35.691274],[-86.641817,35.685797],[-86.685633,35.707705],[-86.619909,35.970598],[-86.515848,36.102045]]]},"id":"47149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.419096,36.07466],[-82.134295,35.822721],[-82.276696,35.702228],[-82.408142,35.817244],[-82.506727,35.976075],[-82.419096,36.07466]]]},"id":"37199"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.508091,36.080137],[-85.261628,35.981552],[-85.267105,35.795336],[-85.42046,35.817244],[-85.601199,35.795336],[-85.683353,35.833674],[-85.645014,36.014414],[-85.508091,36.080137]]]},"id":"47185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.749546,36.069183],[-78.546899,36.01989],[-78.256622,35.817244],[-78.711208,35.521489],[-78.913854,35.581735],[-78.908377,35.866536],[-78.749546,36.069183]]]},"id":"37183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.325542,36.07466],[-76.761417,35.866536],[-76.843571,35.707705],[-77.172187,35.73509],[-77.352926,35.817244],[-77.402219,36.00346],[-77.325542,36.07466]]]},"id":"37117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.786051,35.987029],[-82.605312,36.041798],[-82.506727,35.976075],[-82.408142,35.817244],[-82.884636,35.68032],[-82.961313,35.789859],[-82.901067,35.943213],[-82.786051,35.987029]]]},"id":"37115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.69386,36.052752],[-80.49669,36.047275],[-80.398105,35.970598],[-80.458352,35.740566],[-80.688383,35.861059],[-80.710291,35.850105],[-80.69386,36.052752]]]},"id":"37059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.947585,36.058229],[-100.547769,36.058229],[-100.542292,36.058229],[-100.542292,35.620074],[-101.084509,35.620074],[-101.084509,35.625551],[-101.084509,35.625551],[-101.084509,36.052752],[-101.084509,36.058229],[-100.947585,36.058229]]]},"id":"48393"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.880076,36.058229],[-80.69386,36.052752],[-80.710291,35.850105],[-80.737675,35.505058],[-80.781491,35.505058],[-80.907461,35.516012],[-80.945799,35.488627],[-80.96223,35.548874],[-81.110107,35.778905],[-81.027953,36.047275],[-80.880076,36.058229]]]},"id":"37097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.000075,36.058229],[-100.000075,35.882967],[-100.000075,35.620074],[-100.542292,35.620074],[-100.542292,36.058229],[-100.000075,36.058229]]]},"id":"48211"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.125128,36.058229],[-101.621249,36.052752],[-101.621249,35.625551],[-101.621249,35.620074],[-101.659588,35.620074],[-102.163466,35.620074],[-102.163466,35.625551],[-102.163466,36.052752],[-102.125128,36.058229]]]},"id":"48341"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.30039,36.052752],[-102.163466,36.052752],[-102.163466,35.625551],[-103.039777,35.620074],[-103.039777,35.740566],[-103.039777,36.052752],[-102.30039,36.052752]]]},"id":"48205"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.621249,36.052752],[-101.084509,36.052752],[-101.084509,35.625551],[-101.621249,35.625551],[-101.621249,36.052752]]]},"id":"48233"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.921141,36.052752],[-86.619909,35.970598],[-86.685633,35.707705],[-86.784218,35.707705],[-87.216896,35.850105],[-87.205942,35.959644],[-87.184034,36.047275],[-87.052588,36.047275],[-86.921141,36.052752]]]},"id":"47187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.582488,35.641982],[-84.620826,35.641982],[-84.724888,35.75152],[-84.768704,35.80629],[-84.779657,35.822721],[-84.681073,35.910352],[-84.341502,36.047275],[-84.270302,35.910352],[-84.264825,35.899398],[-84.582488,35.641982]]]},"id":"47145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.027953,36.047275],[-81.110107,35.778905],[-81.192262,35.822721],[-81.334662,35.795336],[-81.329185,35.997983],[-81.027953,36.047275]]]},"id":"37003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.678792,36.030844],[-83.673316,36.036321],[-83.311837,35.893921],[-83.257068,35.713182],[-83.257068,35.696751],[-83.662362,35.570781],[-83.793808,35.888444],[-83.678792,36.030844]]]},"id":"47155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.211889,36.008937],[-80.042104,36.008937],[-80.047581,35.921306],[-80.064012,35.505058],[-80.184505,35.505058],[-80.458352,35.740566],[-80.398105,35.970598],[-80.211889,36.008937]]]},"id":"37057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.38118,36.014414],[-99.375704,35.811767],[-99.36475,35.510535],[-100.000075,35.422904],[-100.000075,35.620074],[-100.000075,35.882967],[-99.38118,36.014414]]]},"id":"40129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.883672,36.00346],[-107.623976,35.997983],[-107.306313,35.997983],[-107.31179,35.307888],[-107.985454,35.307888],[-108.467425,35.307888],[-108.467425,34.957364],[-109.04798,34.957364],[-109.04798,36.00346],[-108.883672,36.00346]]]},"id":"35031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.068525,35.997983],[-105.718001,35.976075],[-105.718001,35.872013],[-105.712524,35.039518],[-106.243787,35.039518],[-106.243787,35.21478],[-106.249264,35.756997],[-106.249264,35.839151],[-106.249264,35.855582],[-106.243787,35.932259],[-106.068525,35.997983]]]},"id":"35049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.730812,35.997983],[-89.643181,35.904875],[-89.911551,35.53792],[-90.141582,35.439335],[-90.289459,35.439335],[-90.289459,35.702228],[-90.289459,35.997983],[-89.960843,35.997983],[-89.730812,35.997983]]]},"id":"05093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.188594,35.997983],[-88.914747,35.795336],[-89.068102,35.691274],[-89.341949,35.789859],[-89.35838,35.817244],[-89.341949,35.882967],[-89.188594,35.997983],[-89.188594,35.997983]]]},"id":"47033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.898787,35.997983],[-81.805679,35.959644],[-81.362047,35.767951],[-81.531832,35.570781],[-81.537309,35.565304],[-81.586601,35.565304],[-81.690663,35.581735],[-81.82211,35.576258],[-81.942602,35.959644],[-81.898787,35.997983]]]},"id":"37023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.289459,35.997983],[-90.289459,35.702228],[-90.930262,35.707705],[-91.034323,35.707705],[-91.034323,35.882967],[-90.853584,35.970598],[-90.377091,35.997983],[-90.289459,35.997983]]]},"id":"05031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.512651,35.992506],[-87.205942,35.959644],[-87.216896,35.850105],[-87.337389,35.658412],[-87.660528,35.60912],[-87.720774,35.795336],[-87.715298,35.839151],[-87.534558,35.992506],[-87.512651,35.992506]]]},"id":"47081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.000122,35.904875],[-76.027507,35.669366],[-76.394462,35.696751],[-76.367077,35.943213],[-76.000122,35.904875]]]},"id":"37177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.367077,35.943213],[-76.394462,35.696751],[-76.635447,35.707705],[-76.640924,35.707705],[-76.843571,35.707705],[-76.761417,35.866536],[-76.690217,35.943213],[-76.367077,35.943213]]]},"id":"37187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.868676,35.581735],[-76.027507,35.669366],[-76.000122,35.904875],[-75.868676,35.581735]]]},"id":"37055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.017446,35.959644],[-85.885999,35.839151],[-85.984584,35.658412],[-86.209139,35.702228],[-86.15437,35.954167],[-86.017446,35.959644]]]},"id":"47015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.249264,35.965121],[-106.243787,35.932259],[-106.249264,35.855582],[-106.249264,35.839151],[-106.249264,35.756997],[-106.249264,35.965121]]]},"id":"35028"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.948079,35.954167],[-81.942602,35.959644],[-81.82211,35.576258],[-82.167157,35.526966],[-82.276696,35.702228],[-82.134295,35.822721],[-81.980941,35.910352],[-81.948079,35.954167]]]},"id":"37111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.489826,35.94869],[-89.341949,35.882967],[-89.35838,35.817244],[-89.50078,35.581735],[-89.643181,35.647459],[-89.911551,35.53792],[-89.643181,35.904875],[-89.489826,35.94869]]]},"id":"47097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.850387,35.866536],[-91.707987,35.943213],[-91.357463,35.888444],[-91.198632,35.888444],[-91.582017,35.532443],[-91.795618,35.532443],[-91.839434,35.702228],[-91.850387,35.866536]]]},"id":"05063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.080866,35.943213],[-96.620803,35.943213],[-96.620803,35.636505],[-96.626279,35.461243],[-97.141112,35.466719],[-97.141112,35.724136],[-97.141112,35.943213],[-97.080866,35.943213]]]},"id":"40081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.036627,35.921306],[-79.543702,35.899398],[-79.543702,35.844628],[-79.554656,35.516012],[-79.768257,35.510535],[-80.064012,35.505058],[-80.047581,35.921306],[-80.036627,35.921306]]]},"id":"37151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.264825,35.899398],[-84.16624,35.80629],[-84.188148,35.60912],[-84.43461,35.669366],[-84.527718,35.625551],[-84.582488,35.641982],[-84.264825,35.899398]]]},"id":"47105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.198632,35.888444],[-91.034323,35.882967],[-91.034323,35.707705],[-91.0398,35.444812],[-91.0398,35.351704],[-91.346509,35.439335],[-91.582017,35.532443],[-91.198632,35.888444]]]},"id":"05067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.793808,35.888444],[-83.662362,35.570781],[-83.952639,35.461243],[-83.963593,35.461243],[-84.188148,35.60912],[-84.16624,35.80629],[-83.793808,35.888444]]]},"id":"47009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.187701,35.872013],[-79.017916,35.861059],[-78.908377,35.866536],[-78.913854,35.581735],[-78.968624,35.521489],[-79.242471,35.570781],[-79.35201,35.516012],[-79.554656,35.516012],[-79.543702,35.844628],[-79.247948,35.87749],[-79.187701,35.872013]]]},"id":"37037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.365196,35.778905],[-103.976333,35.800813],[-103.636763,35.390042],[-104.124211,35.14358],[-105.290799,35.21478],[-105.290799,35.039518],[-105.712524,35.039518],[-105.718001,35.872013],[-104.365196,35.778905]]]},"id":"35047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.82942,35.866536],[-77.659635,35.674843],[-77.697974,35.652935],[-77.823943,35.570781],[-78.064929,35.587212],[-78.190898,35.729613],[-77.82942,35.866536],[-77.82942,35.866536]]]},"id":"37195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.688383,35.861059],[-80.458352,35.740566],[-80.184505,35.505058],[-80.233797,35.505058],[-80.294043,35.505058],[-80.737675,35.505058],[-80.710291,35.850105],[-80.688383,35.861059]]]},"id":"37159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.138832,35.855582],[-96.03477,35.855582],[-95.821169,35.855582],[-95.7664,35.855582],[-95.71163,35.554351],[-95.980001,35.379088],[-96.193601,35.636505],[-96.138832,35.855582]]]},"id":"40111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.656861,35.855582],[-95.267998,35.811767],[-95.125598,35.636505],[-95.048921,35.461243],[-95.344675,35.291457],[-95.476122,35.554351],[-95.71163,35.554351],[-95.7664,35.855582],[-95.656861,35.855582]]]},"id":"40101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.683353,35.833674],[-85.601199,35.795336],[-85.557383,35.532443],[-85.606675,35.532443],[-85.875046,35.521489],[-85.984584,35.658412],[-85.885999,35.839151],[-85.683353,35.833674]]]},"id":"47177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.216896,35.850105],[-86.784218,35.707705],[-86.95948,35.417427],[-87.129265,35.455766],[-87.205942,35.433858],[-87.293573,35.444812],[-87.337389,35.658412],[-87.216896,35.850105]]]},"id":"47119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.175361,35.844628],[-87.972714,35.817244],[-88.005575,35.422904],[-88.022006,35.390042],[-88.241084,35.422904],[-88.180837,35.817244],[-88.175361,35.844628]]]},"id":"47039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.720774,35.795336],[-87.660528,35.60912],[-87.715298,35.48315],[-87.956283,35.461243],[-88.005575,35.422904],[-87.972714,35.817244],[-87.96176,35.839151],[-87.715298,35.839151],[-87.720774,35.795336]]]},"id":"47135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.413173,35.822721],[-77.352926,35.817244],[-77.172187,35.73509],[-77.188618,35.417427],[-77.391265,35.34075],[-77.446034,35.379088],[-77.473419,35.428381],[-77.681543,35.636505],[-77.697974,35.652935],[-77.659635,35.674843],[-77.413173,35.822721]]]},"id":"37147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.192262,35.822721],[-81.110107,35.778905],[-80.96223,35.548874],[-81.488016,35.570781],[-81.531832,35.570781],[-81.362047,35.767951],[-81.334662,35.795336],[-81.192262,35.822721]]]},"id":"37035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.768704,35.80629],[-84.724888,35.75152],[-85.015166,35.41195],[-85.130182,35.455766],[-85.135659,35.455766],[-84.916581,35.762474],[-84.779657,35.822721],[-84.768704,35.80629]]]},"id":"47143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.514931,35.822721],[-88.180837,35.817244],[-88.241084,35.422904],[-88.361576,35.417427],[-88.613516,35.587212],[-88.608039,35.789859],[-88.514931,35.822721]]]},"id":"47077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.276696,35.702228],[-82.167157,35.526966],[-82.265742,35.466719],[-82.408142,35.472196],[-82.747713,35.422904],[-82.884636,35.68032],[-82.408142,35.817244],[-82.276696,35.702228]]]},"id":"37021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.341949,35.789859],[-89.068102,35.691274],[-89.079056,35.433858],[-89.150256,35.433858],[-89.183118,35.395519],[-89.473395,35.400996],[-89.50078,35.581735],[-89.35838,35.817244],[-89.341949,35.789859]]]},"id":"47075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.42046,35.817244],[-85.267105,35.795336],[-85.272582,35.789859],[-85.256151,35.767951],[-85.256151,35.767951],[-85.256151,35.767951],[-85.425936,35.565304],[-85.557383,35.532443],[-85.601199,35.795336],[-85.42046,35.817244]]]},"id":"47175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.256622,35.817244],[-78.190898,35.729613],[-78.064929,35.587212],[-78.305914,35.28598],[-78.541422,35.313365],[-78.711208,35.521489],[-78.256622,35.817244]]]},"id":"37101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.817056,35.811767],[-98.63084,35.811767],[-98.625363,35.548874],[-98.625363,35.466719],[-99.16758,35.466719],[-99.36475,35.466719],[-99.36475,35.510535],[-99.375704,35.811767],[-98.817056,35.811767]]]},"id":"40039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.630346,35.795336],[-115.647693,35.80629],[-114.634459,35.00118],[-114.136058,34.305608],[-114.43729,34.081054],[-114.733044,34.081054],[-117.559146,34.031761],[-117.674161,33.87293],[-117.7837,33.94413],[-117.668684,34.820441],[-117.630346,35.795336]]]},"id":"06071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.008255,35.789859],[-117.630346,35.795336],[-117.668684,34.820441],[-118.884565,34.793056],[-119.443213,34.902595],[-119.470598,34.902595],[-120.193554,35.789859],[-119.536321,35.789859],[-118.008255,35.789859]]]},"id":"06029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.914747,35.795336],[-88.706624,35.789859],[-88.608039,35.789859],[-88.613516,35.587212],[-88.701147,35.477673],[-88.843547,35.428381],[-89.079056,35.433858],[-89.068102,35.691274],[-88.914747,35.795336]]]},"id":"47113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.343711,35.795336],[-120.215462,35.789859],[-120.193554,35.789859],[-119.470598,34.902595],[-120.094969,35.116195],[-120.64814,34.973795],[-121.343711,35.795336]]]},"id":"06079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.961313,35.789859],[-82.884636,35.68032],[-82.747713,35.422904],[-82.922975,35.291457],[-83.185868,35.516012],[-83.257068,35.696751],[-83.257068,35.713182],[-82.961313,35.789859]]]},"id":"37087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.611682,35.789859],[-92.414512,35.789859],[-92.23925,35.713182],[-92.250204,35.362658],[-92.480236,35.368135],[-92.480236,35.368135],[-92.852668,35.461243],[-92.808852,35.724136],[-92.611682,35.789859]]]},"id":"05141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.909717,35.762474],[-93.696116,35.767951],[-93.712547,35.373611],[-94.03021,35.21478],[-94.074025,35.444812],[-93.909717,35.762474]]]},"id":"05047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.256151,35.767951],[-85.256151,35.767951],[-84.916581,35.762474],[-85.135659,35.455766],[-85.22329,35.351704],[-85.425936,35.565304],[-85.256151,35.767951]]]},"id":"47007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.696116,35.767951],[-93.520854,35.762474],[-93.164853,35.729613],[-93.2963,35.329796],[-93.422269,35.329796],[-93.712547,35.373611],[-93.696116,35.767951]]]},"id":"05071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.964486,35.762474],[-93.909717,35.762474],[-94.074025,35.444812],[-94.380734,35.444812],[-94.430026,35.395519],[-94.473842,35.636505],[-94.490273,35.756997],[-93.964486,35.762474]]]},"id":"05033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.620826,35.641982],[-84.861812,35.351704],[-84.872765,35.357181],[-84.943966,35.28598],[-85.015166,35.41195],[-84.724888,35.75152],[-84.620826,35.641982]]]},"id":"47121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.37387,35.740566],[-103.039777,35.740566],[-103.039777,35.620074],[-103.039777,35.181919],[-103.045254,34.951887],[-103.264331,34.951887],[-103.740825,34.60684],[-103.948949,34.60684],[-104.129688,34.776625],[-104.124211,35.14358],[-103.636763,35.390042],[-103.37387,35.740566]]]},"id":"35037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.172187,35.73509],[-76.843571,35.707705],[-76.640924,35.707705],[-76.547816,35.390042],[-76.602586,35.335273],[-76.624493,35.253119],[-76.89834,35.253119],[-77.188618,35.417427],[-77.172187,35.73509]]]},"id":"37013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.016976,35.724136],[-92.951253,35.724136],[-92.808852,35.724136],[-92.852668,35.461243],[-92.896483,35.170965],[-93.279869,35.318842],[-93.2963,35.329796],[-93.164853,35.729613],[-93.016976,35.724136]]]},"id":"05115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.973607,35.724136],[-97.672375,35.724136],[-97.672375,35.379088],[-97.672375,35.335273],[-97.672375,35.335273],[-98.0941,35.379088],[-98.313177,35.548874],[-98.209115,35.724136],[-97.973607,35.724136]]]},"id":"40017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.672375,35.724136],[-97.141112,35.724136],[-97.141112,35.466719],[-97.141112,35.379088],[-97.425913,35.379088],[-97.672375,35.379088],[-97.672375,35.724136]]]},"id":"40109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.998265,35.707705],[-91.839434,35.702228],[-91.795618,35.532443],[-92.113281,35.362658],[-92.250204,35.362658],[-92.23925,35.713182],[-91.998265,35.707705]]]},"id":"05023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.784218,35.707705],[-86.685633,35.707705],[-86.641817,35.685797],[-86.598002,35.362658],[-86.828033,35.264073],[-86.95948,35.417427],[-86.784218,35.707705]]]},"id":"47117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.930262,35.707705],[-90.289459,35.702228],[-90.289459,35.439335],[-90.50306,35.439335],[-90.744046,35.444812],[-91.0398,35.444812],[-91.034323,35.707705],[-90.930262,35.707705]]]},"id":"05111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.635447,35.707705],[-76.394462,35.696751],[-76.027507,35.669366],[-75.868676,35.581735],[-76.547816,35.390042],[-76.640924,35.707705],[-76.635447,35.707705]]]},"id":"37095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.209139,35.702228],[-85.984584,35.658412],[-85.875046,35.521489],[-85.913384,35.291457],[-86.214616,35.346227],[-86.263908,35.335273],[-86.258431,35.41195],[-86.258431,35.41195],[-86.247477,35.631028],[-86.209139,35.702228]]]},"id":"47031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.521325,35.691274],[-86.247477,35.631028],[-86.258431,35.41195],[-86.526801,35.357181],[-86.598002,35.362658],[-86.641817,35.685797],[-86.521325,35.691274]]]},"id":"47003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.662362,35.570781],[-83.257068,35.696751],[-83.185868,35.516012],[-83.207776,35.516012],[-83.339222,35.329796],[-83.678792,35.280503],[-83.952639,35.461243],[-83.662362,35.570781]]]},"id":"37173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.43461,35.669366],[-84.188148,35.60912],[-83.963593,35.461243],[-84.029317,35.291457],[-84.29221,35.209303],[-84.494857,35.28598],[-84.522241,35.60912],[-84.522241,35.620074],[-84.527718,35.625551],[-84.43461,35.669366]]]},"id":"47123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.337389,35.658412],[-87.293573,35.444812],[-87.435974,35.455766],[-87.572897,35.400996],[-87.715298,35.48315],[-87.660528,35.60912],[-87.337389,35.658412]]]},"id":"47101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.681543,35.636505],[-77.473419,35.428381],[-77.807512,35.368135],[-77.823943,35.570781],[-77.697974,35.652935],[-77.681543,35.636505]]]},"id":"37079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.643181,35.647459],[-89.50078,35.581735],[-89.473395,35.400996],[-89.550073,35.400996],[-89.632227,35.373611],[-89.774627,35.406473],[-90.075859,35.384565],[-90.141582,35.439335],[-89.911551,35.53792],[-89.643181,35.647459]]]},"id":"47167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.582488,35.641982],[-84.527718,35.625551],[-84.522241,35.620074],[-84.522241,35.60912],[-84.494857,35.28598],[-84.686549,35.253119],[-84.70298,35.242165],[-84.861812,35.351704],[-84.620826,35.641982],[-84.582488,35.641982]]]},"id":"47107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.478402,35.636505],[-96.193601,35.636505],[-95.980001,35.379088],[-95.980001,35.291457],[-96.199078,35.291457],[-96.440064,35.291457],[-96.440064,35.466719],[-96.626279,35.400996],[-96.626279,35.461243],[-96.620803,35.636505],[-96.478402,35.636505]]]},"id":"40107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.851751,35.636505],[-94.807935,35.636505],[-94.473842,35.636505],[-94.430026,35.395519],[-94.430026,35.379088],[-94.813412,35.324319],[-95.048921,35.461243],[-95.125598,35.636505],[-94.851751,35.636505]]]},"id":"40135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.242471,35.570781],[-78.968624,35.521489],[-79.182224,35.307888],[-79.35201,35.516012],[-79.242471,35.570781]]]},"id":"37105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.163466,35.625551],[-102.163466,35.620074],[-102.168943,35.181919],[-102.579714,35.187396],[-103.039777,35.181919],[-103.039777,35.620074],[-102.163466,35.625551]]]},"id":"48359"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.084509,35.625551],[-101.084509,35.620074],[-101.084509,35.181919],[-101.621249,35.181919],[-101.621249,35.620074],[-101.621249,35.625551],[-101.084509,35.625551],[-101.084509,35.625551]]]},"id":"48065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.084509,35.620074],[-100.542292,35.620074],[-100.536815,35.181919],[-100.969493,35.181919],[-101.084509,35.181919],[-101.084509,35.620074]]]},"id":"48179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.659588,35.620074],[-101.621249,35.620074],[-101.621249,35.181919],[-101.988204,35.181919],[-102.168943,35.181919],[-102.163466,35.620074],[-101.659588,35.620074]]]},"id":"48375"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.542292,35.620074],[-100.000075,35.620074],[-100.000075,35.422904],[-100.000075,35.181919],[-100.093183,35.181919],[-100.536815,35.181919],[-100.542292,35.620074]]]},"id":"48483"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.82211,35.576258],[-81.690663,35.581735],[-81.76734,35.181919],[-81.876879,35.181919],[-81.969987,35.187396],[-82.09048,35.357181],[-82.260265,35.395519],[-82.265742,35.466719],[-82.167157,35.526966],[-81.82211,35.576258]]]},"id":"37161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.064929,35.587212],[-77.823943,35.570781],[-77.807512,35.368135],[-77.834897,35.176442],[-78.043021,35.192872],[-78.163514,35.187396],[-78.305914,35.28598],[-78.064929,35.587212]]]},"id":"37191"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.701147,35.477673],[-88.613516,35.587212],[-88.361576,35.417427],[-88.361576,35.379088],[-88.378007,35.373611],[-88.783301,35.247642],[-88.843547,35.428381],[-88.701147,35.477673]]]},"id":"47023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.586601,35.565304],[-81.537309,35.565304],[-81.455155,35.417427],[-81.329185,35.165488],[-81.367524,35.165488],[-81.76734,35.181919],[-81.690663,35.581735],[-81.586601,35.565304]]]},"id":"37045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.913854,35.581735],[-78.711208,35.521489],[-78.541422,35.313365],[-78.6181,35.247642],[-78.952193,35.21478],[-79.094593,35.192872],[-79.182224,35.307888],[-78.968624,35.521489],[-78.913854,35.581735]]]},"id":"37085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.488016,35.570781],[-80.96223,35.548874],[-80.945799,35.488627],[-80.956753,35.400996],[-81.455155,35.417427],[-81.537309,35.565304],[-81.531832,35.570781],[-81.488016,35.570781]]]},"id":"37109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.425936,35.565304],[-85.22329,35.351704],[-85.387598,35.149057],[-85.557383,35.318842],[-85.590245,35.521489],[-85.606675,35.532443],[-85.557383,35.532443],[-85.425936,35.565304]]]},"id":"47153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.476122,35.554351],[-95.344675,35.291457],[-95.448737,35.296934],[-95.706154,35.203826],[-95.985477,35.149057],[-95.980001,35.291457],[-95.980001,35.379088],[-95.71163,35.554351],[-95.476122,35.554351]]]},"id":"40091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.587024,35.548874],[-98.313177,35.548874],[-98.0941,35.379088],[-98.0941,34.853302],[-98.619886,34.853302],[-98.619886,35.099764],[-98.625363,35.466719],[-98.625363,35.548874],[-98.587024,35.548874]]]},"id":"40015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.795618,35.532443],[-91.582017,35.532443],[-91.346509,35.439335],[-91.467002,35.088811],[-91.587494,35.023087],[-91.801095,35.028564],[-92.118758,35.066903],[-92.113281,35.362658],[-91.795618,35.532443]]]},"id":"05145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.590245,35.521489],[-85.557383,35.318842],[-85.601199,35.307888],[-85.875046,35.225734],[-85.913384,35.291457],[-85.875046,35.521489],[-85.606675,35.532443],[-85.590245,35.521489]]]},"id":"47061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.336425,35.526966],[-112.438206,35.258596],[-112.334144,34.973795],[-111.775497,34.979272],[-111.556419,34.469916],[-111.496173,33.998899],[-112.273898,33.883884],[-113.336425,33.998899],[-113.330948,34.316562],[-113.336425,35.526966]]]},"id":"04025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.207776,35.516012],[-83.185868,35.516012],[-82.922975,35.291457],[-83.010606,35.028564],[-83.109191,35.00118],[-83.339222,35.329796],[-83.207776,35.516012]]]},"id":"37099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.35201,35.516012],[-79.182224,35.307888],[-79.094593,35.192872],[-79.10007,35.176442],[-79.127455,35.165488],[-79.461548,35.044995],[-79.614903,35.165488],[-79.768257,35.510535],[-79.554656,35.516012],[-79.35201,35.516012]]]},"id":"37125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.907461,35.516012],[-80.781491,35.505058],[-80.55146,35.209303],[-80.841737,35.00118],[-80.907461,35.077857],[-81.044384,35.149057],[-80.956753,35.400996],[-80.945799,35.488627],[-80.907461,35.516012]]]},"id":"37119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.768257,35.510535],[-79.614903,35.165488],[-79.729918,35.176442],[-80.074966,35.14358],[-80.184505,35.505058],[-80.064012,35.505058],[-79.768257,35.510535]]]},"id":"37123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.36475,35.510535],[-99.36475,35.466719],[-99.359273,35.116195],[-99.408565,35.116195],[-99.709797,35.116195],[-99.890536,35.028564],[-99.934351,35.028564],[-100.000075,35.028564],[-100.000075,35.181919],[-100.000075,35.422904],[-99.36475,35.510535]]]},"id":"40009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.737675,35.505058],[-80.294043,35.505058],[-80.507644,35.187396],[-80.55146,35.209303],[-80.781491,35.505058],[-80.737675,35.505058]]]},"id":"37025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.233797,35.505058],[-80.184505,35.505058],[-80.074966,35.14358],[-80.173551,35.149057],[-80.277612,35.198349],[-80.507644,35.187396],[-80.294043,35.505058],[-80.233797,35.505058]]]},"id":"37167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.408142,35.472196],[-82.265742,35.466719],[-82.260265,35.395519],[-82.353373,35.192872],[-82.572451,35.14358],[-82.747713,35.422904],[-82.408142,35.472196]]]},"id":"37089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.956283,35.461243],[-87.715298,35.48315],[-87.572897,35.400996],[-87.605759,35.00118],[-87.983668,35.006656],[-88.022006,35.390042],[-88.005575,35.422904],[-87.956283,35.461243]]]},"id":"47181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.440064,35.466719],[-96.440064,35.291457],[-96.489356,34.908072],[-96.774157,34.902595],[-96.626279,35.400996],[-96.440064,35.466719]]]},"id":"40133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.952639,35.461243],[-83.678792,35.280503],[-83.7007,35.247642],[-84.029317,35.291457],[-83.963593,35.461243],[-83.952639,35.461243]]]},"id":"37075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.16758,35.466719],[-98.625363,35.466719],[-98.619886,35.099764],[-99.184011,35.116195],[-99.359273,35.116195],[-99.36475,35.466719],[-99.16758,35.466719]]]},"id":"40149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.141112,35.466719],[-96.626279,35.461243],[-96.626279,35.400996],[-96.774157,34.902595],[-96.932988,34.962841],[-97.141112,34.929979],[-97.141112,35.379088],[-97.141112,35.466719]]]},"id":"40125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.852668,35.461243],[-92.480236,35.368135],[-92.556913,35.110718],[-93.038884,35.077857],[-92.896483,35.170965],[-92.852668,35.461243]]]},"id":"05029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.130182,35.455766],[-85.015166,35.41195],[-84.943966,35.28598],[-84.976827,34.990226],[-84.982304,34.990226],[-85.267105,34.984749],[-85.272582,34.984749],[-85.36569,34.984749],[-85.475229,34.984749],[-85.387598,35.149057],[-85.22329,35.351704],[-85.135659,35.455766],[-85.130182,35.455766]]]},"id":"47065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.048921,35.461243],[-94.813412,35.324319],[-94.928428,35.055949],[-95.333722,35.055949],[-95.350152,35.055949],[-95.448737,35.296934],[-95.344675,35.291457],[-95.048921,35.461243]]]},"id":"40061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.435974,35.455766],[-87.293573,35.444812],[-87.205942,35.433858],[-87.222373,35.00118],[-87.605759,35.00118],[-87.572897,35.400996],[-87.435974,35.455766]]]},"id":"47099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.129265,35.455766],[-86.95948,35.417427],[-86.828033,35.264073],[-86.838987,34.990226],[-87.211419,35.00118],[-87.222373,35.00118],[-87.205942,35.433858],[-87.129265,35.455766]]]},"id":"47055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.380734,35.444812],[-94.074025,35.444812],[-94.03021,35.21478],[-94.139749,35.099764],[-94.183564,35.083334],[-94.446457,34.935456],[-94.430026,35.379088],[-94.430026,35.395519],[-94.380734,35.444812]]]},"id":"05131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.744046,35.444812],[-90.50306,35.439335],[-90.50306,35.14358],[-90.831677,35.149057],[-91.045277,35.149057],[-91.0398,35.351704],[-91.0398,35.444812],[-90.744046,35.444812]]]},"id":"05037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.346509,35.439335],[-91.0398,35.351704],[-91.045277,35.149057],[-91.149339,35.00118],[-91.275309,34.984749],[-91.368417,34.913548],[-91.467002,35.088811],[-91.346509,35.439335]]]},"id":"05147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.50306,35.439335],[-90.289459,35.439335],[-90.141582,35.439335],[-90.075859,35.384565],[-90.311367,34.995703],[-90.30589,34.858779],[-90.409952,34.831394],[-90.409952,34.902595],[-90.50306,35.14358],[-90.50306,35.439335]]]},"id":"05035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.150256,35.433858],[-89.079056,35.433858],[-88.843547,35.428381],[-88.783301,35.247642],[-88.788778,34.995703],[-88.821639,34.995703],[-89.018809,34.995703],[-89.199548,34.995703],[-89.183118,35.395519],[-89.150256,35.433858]]]},"id":"47069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.422269,35.329796],[-93.2963,35.329796],[-93.279869,35.318842],[-93.70707,35.01761],[-94.139749,35.099764],[-94.03021,35.21478],[-93.712547,35.373611],[-93.422269,35.329796]]]},"id":"05083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.446034,35.379088],[-77.391265,35.34075],[-77.473419,35.231211],[-77.730835,35.006656],[-77.834897,35.176442],[-77.807512,35.368135],[-77.473419,35.428381],[-77.446034,35.379088]]]},"id":"37107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.361576,35.417427],[-88.241084,35.422904],[-88.022006,35.390042],[-87.983668,35.006656],[-88.202745,34.995703],[-88.252038,34.995703],[-88.361576,34.995703],[-88.378007,34.995703],[-88.361576,35.379088],[-88.361576,35.417427]]]},"id":"47071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.747713,35.422904],[-82.572451,35.14358],[-82.764143,35.066903],[-82.89559,35.055949],[-83.010606,35.028564],[-82.922975,35.291457],[-82.747713,35.422904]]]},"id":"37175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.455155,35.417427],[-80.956753,35.400996],[-81.044384,35.149057],[-81.329185,35.165488],[-81.455155,35.417427]]]},"id":"37071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.188618,35.417427],[-76.89834,35.253119],[-76.712124,34.979272],[-77.090033,34.80401],[-77.473419,35.231211],[-77.391265,35.34075],[-77.188618,35.417427]]]},"id":"37049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.258431,35.41195],[-86.263908,35.335273],[-86.318678,35.127149],[-86.526801,35.357181],[-86.258431,35.41195],[-86.258431,35.41195]]]},"id":"47127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.774627,35.406473],[-89.632227,35.373611],[-89.643181,34.995703],[-89.725335,34.995703],[-89.829396,34.995703],[-90.311367,34.995703],[-90.075859,35.384565],[-89.774627,35.406473]]]},"id":"47157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.09048,35.357181],[-81.969987,35.187396],[-82.216449,35.198349],[-82.353373,35.192872],[-82.260265,35.395519],[-82.09048,35.357181]]]},"id":"37149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.550073,35.400996],[-89.473395,35.400996],[-89.183118,35.395519],[-89.199548,34.995703],[-89.352903,34.995703],[-89.643181,34.995703],[-89.632227,35.373611],[-89.550073,35.400996]]]},"id":"47047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.378007,35.373611],[-88.361576,35.379088],[-88.378007,34.995703],[-88.471115,34.995703],[-88.788778,34.995703],[-88.783301,35.247642],[-88.378007,35.373611]]]},"id":"47109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.0941,35.379088],[-97.672375,35.335273],[-97.666898,34.853302],[-97.666898,34.683517],[-97.995515,34.683517],[-98.088623,34.683517],[-98.0941,34.853302],[-98.0941,35.379088]]]},"id":"40051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.430026,35.379088],[-94.446457,34.935456],[-94.451934,34.727333],[-94.462888,34.508255],[-94.616242,34.508255],[-94.939382,34.508255],[-95.059875,34.67804],[-94.928428,35.055949],[-94.813412,35.324319],[-94.430026,35.379088]]]},"id":"40079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.425913,35.379088],[-97.141112,35.379088],[-97.141112,34.929979],[-97.672375,35.335273],[-97.672375,35.379088],[-97.425913,35.379088]]]},"id":"40027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.598002,35.362658],[-86.526801,35.357181],[-86.318678,35.127149],[-86.318678,34.990226],[-86.784218,34.990226],[-86.838987,34.990226],[-86.828033,35.264073],[-86.598002,35.362658]]]},"id":"47103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.480236,35.368135],[-92.250204,35.362658],[-92.113281,35.362658],[-92.118758,35.066903],[-92.118758,35.012133],[-92.228296,34.957364],[-92.545959,34.951887],[-92.556913,35.110718],[-92.480236,35.368135],[-92.480236,35.368135]]]},"id":"05045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.214616,35.346227],[-85.913384,35.291457],[-85.875046,35.225734],[-85.864092,34.990226],[-86.313201,34.990226],[-86.318678,34.990226],[-86.318678,35.127149],[-86.263908,35.335273],[-86.214616,35.346227]]]},"id":"47051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.872765,35.357181],[-84.861812,35.351704],[-84.70298,35.242165],[-84.774181,34.990226],[-84.812519,34.990226],[-84.976827,34.990226],[-84.943966,35.28598],[-84.872765,35.357181]]]},"id":"47011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.985454,35.307888],[-107.31179,35.307888],[-107.196774,35.220257],[-107.065328,34.957364],[-107.196774,34.957364],[-107.202251,34.579455],[-107.536345,34.579455],[-107.722561,34.579455],[-108.987734,34.579455],[-109.04798,34.579455],[-109.04798,34.957364],[-108.467425,34.957364],[-108.467425,35.307888],[-107.985454,35.307888]]]},"id":"35006"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.624493,35.253119],[-76.602586,35.335273],[-76.646401,35.01761],[-76.712124,34.979272],[-76.89834,35.253119],[-76.624493,35.253119]]]},"id":"37137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.672375,35.335273],[-97.141112,34.929979],[-96.932988,34.962841],[-96.932988,34.853302],[-97.425913,34.853302],[-97.666898,34.853302],[-97.672375,35.335273],[-97.672375,35.335273]]]},"id":"40087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.339222,35.329796],[-83.109191,35.00118],[-83.481623,34.995703],[-83.739039,35.154534],[-83.7007,35.247642],[-83.678792,35.280503],[-83.339222,35.329796]]]},"id":"37113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.601199,35.307888],[-85.557383,35.318842],[-85.387598,35.149057],[-85.475229,34.984749],[-85.606675,34.984749],[-85.864092,34.990226],[-85.875046,35.225734],[-85.601199,35.307888]]]},"id":"47115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.279869,35.318842],[-92.896483,35.170965],[-93.038884,35.077857],[-93.285346,34.771148],[-93.394885,34.743763],[-93.570147,34.743763],[-93.712547,34.743763],[-93.70707,35.01761],[-93.279869,35.318842]]]},"id":"05149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.541422,35.313365],[-78.305914,35.28598],[-78.163514,35.187396],[-78.114221,34.721856],[-78.256622,34.55207],[-78.49213,34.847825],[-78.49213,34.858779],[-78.6181,35.247642],[-78.541422,35.313365]]]},"id":"37163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.706154,35.203826],[-95.448737,35.296934],[-95.350152,35.055949],[-95.514461,34.683517],[-95.673292,34.595886],[-96.089539,34.67804],[-96.089539,34.765671],[-95.985477,35.149057],[-95.706154,35.203826]]]},"id":"40121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.7007,35.247642],[-83.739039,35.154534],[-84.007409,34.984749],[-84.127902,34.990226],[-84.319594,34.990226],[-84.29221,35.209303],[-84.029317,35.291457],[-83.7007,35.247642]]]},"id":"37039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.199078,35.291457],[-95.980001,35.291457],[-95.985477,35.149057],[-96.089539,34.765671],[-96.407202,34.765671],[-96.489356,34.908072],[-96.440064,35.291457],[-96.199078,35.291457]]]},"id":"40063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.686549,35.253119],[-84.494857,35.28598],[-84.29221,35.209303],[-84.319594,34.990226],[-84.620826,34.990226],[-84.774181,34.990226],[-84.70298,35.242165],[-84.686549,35.253119]]]},"id":"47139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.952193,35.21478],[-78.6181,35.247642],[-78.49213,34.858779],[-78.9029,34.836871],[-79.034347,34.951887],[-79.10007,35.176442],[-79.094593,35.192872],[-78.952193,35.21478]]]},"id":"37051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.473419,35.231211],[-77.090033,34.80401],[-77.16671,34.787579],[-77.676066,34.973795],[-77.730835,35.006656],[-77.473419,35.231211]]]},"id":"37103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.196774,35.220257],[-106.243787,35.21478],[-106.243787,35.039518],[-106.413572,34.869733],[-107.065328,34.957364],[-107.196774,35.220257]]]},"id":"35001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.124211,35.14358],[-104.129688,34.776625],[-104.890983,34.60684],[-104.890983,34.349424],[-105.312707,34.349424],[-105.290799,35.039518],[-105.290799,35.21478],[-104.124211,35.14358]]]},"id":"35019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.353373,35.192872],[-82.216449,35.198349],[-82.145249,34.787579],[-82.315034,34.486347],[-82.484819,34.820441],[-82.621743,35.066903],[-82.764143,35.066903],[-82.572451,35.14358],[-82.353373,35.192872]]]},"id":"45045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.127455,35.165488],[-79.10007,35.176442],[-79.034347,34.951887],[-79.346533,34.836871],[-79.461548,35.044995],[-79.127455,35.165488]]]},"id":"37093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.173551,35.149057],[-80.074966,35.14358],[-79.927088,34.80401],[-80.321428,34.814964],[-80.277612,35.198349],[-80.173551,35.149057]]]},"id":"37007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.55146,35.209303],[-80.507644,35.187396],[-80.277612,35.198349],[-80.321428,34.814964],[-80.562413,34.814964],[-80.841737,35.00118],[-80.55146,35.209303]]]},"id":"37179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.216449,35.198349],[-81.969987,35.187396],[-81.876879,35.181919],[-81.712571,34.913548],[-81.712571,34.913548],[-81.854971,34.595886],[-82.145249,34.787579],[-82.216449,35.198349]]]},"id":"45083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.043021,35.192872],[-77.834897,35.176442],[-77.730835,35.006656],[-77.676066,34.973795],[-77.681543,34.721856],[-78.015636,34.732809],[-78.114221,34.721856],[-78.163514,35.187396],[-78.043021,35.192872]]]},"id":"37061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.579714,35.187396],[-102.168943,35.181919],[-102.168943,34.74924],[-102.524944,34.74924],[-103.045254,34.74924],[-103.045254,34.951887],[-103.039777,35.181919],[-102.579714,35.187396]]]},"id":"48117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.76734,35.181919],[-81.367524,35.165488],[-81.455155,34.836871],[-81.712571,34.913548],[-81.876879,35.181919],[-81.76734,35.181919]]]},"id":"45021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.729918,35.176442],[-79.614903,35.165488],[-79.461548,35.044995],[-79.686103,34.80401],[-79.927088,34.80401],[-80.074966,35.14358],[-79.729918,35.176442]]]},"id":"37153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.988204,35.181919],[-101.621249,35.181919],[-101.626726,34.74924],[-101.999158,34.74924],[-102.004635,34.74924],[-102.168943,34.74924],[-102.168943,35.181919],[-101.988204,35.181919]]]},"id":"48381"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.969493,35.181919],[-100.536815,35.181919],[-100.542292,34.74924],[-100.947585,34.74924],[-101.089986,34.74924],[-101.084509,35.181919],[-100.969493,35.181919]]]},"id":"48129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.093183,35.181919],[-100.000075,35.181919],[-100.000075,35.028564],[-100.000075,34.743763],[-100.416322,34.74924],[-100.542292,34.74924],[-100.536815,35.181919],[-100.093183,35.181919]]]},"id":"48087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.621249,35.181919],[-101.084509,35.181919],[-101.089986,34.74924],[-101.473372,34.74924],[-101.626726,34.74924],[-101.621249,35.181919]]]},"id":"48011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.367524,35.165488],[-81.329185,35.165488],[-81.044384,35.149057],[-80.907461,35.077857],[-80.907461,35.077857],[-80.896507,34.820441],[-81.28537,34.820441],[-81.477062,34.820441],[-81.455155,34.836871],[-81.367524,35.165488]]]},"id":"45091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.739039,35.154534],[-83.481623,34.995703],[-83.547346,34.990226],[-83.936209,34.984749],[-84.007409,34.984749],[-83.739039,35.154534]]]},"id":"37043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.831677,35.149057],[-90.50306,35.14358],[-90.409952,34.902595],[-91.100047,34.869733],[-91.149339,35.00118],[-91.045277,35.149057],[-90.831677,35.149057]]]},"id":"05123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.184011,35.116195],[-98.619886,35.099764],[-98.619886,34.853302],[-98.795148,34.853302],[-98.82801,34.595886],[-99.101857,34.639701],[-99.244257,34.820441],[-99.408565,35.116195],[-99.359273,35.116195],[-99.184011,35.116195]]]},"id":"40075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.709797,35.116195],[-99.408565,35.116195],[-99.244257,34.820441],[-99.397611,34.814964],[-99.665981,34.727333],[-99.890536,35.028564],[-99.709797,35.116195]]]},"id":"40055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.038884,35.077857],[-92.556913,35.110718],[-92.545959,34.951887],[-92.737652,34.853302],[-92.967683,34.858779],[-93.077222,34.771148],[-93.285346,34.771148],[-93.038884,35.077857]]]},"id":"05105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-120.094969,35.116195],[-119.470598,34.902595],[-119.443213,34.902595],[-119.476075,34.376808],[-120.64814,34.579455],[-120.64814,34.973795],[-120.094969,35.116195]]]},"id":"06083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.183564,35.083334],[-94.139749,35.099764],[-93.70707,35.01761],[-93.712547,34.743763],[-93.931625,34.667086],[-94.451934,34.727333],[-94.446457,34.935456],[-94.183564,35.083334]]]},"id":"05127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.587494,35.023087],[-91.467002,35.088811],[-91.368417,34.913548],[-91.379371,34.563024],[-91.587494,34.568501],[-91.680602,34.48087],[-91.801095,35.028564],[-91.587494,35.023087]]]},"id":"05117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.621743,35.066903],[-82.484819,34.820441],[-82.490296,34.820441],[-82.840821,34.623271],[-82.89559,35.055949],[-82.764143,35.066903],[-82.621743,35.066903]]]},"id":"45077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.111941,34.639701],[-77.16671,34.787579],[-77.090033,34.80401],[-76.712124,34.979272],[-76.646401,35.01761],[-76.279446,34.940933],[-76.536862,34.590409],[-77.111941,34.639701]]]},"id":"37031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.907461,35.077857],[-80.907461,35.077857],[-80.841737,35.00118],[-80.562413,34.814964],[-80.409059,34.612317],[-80.880076,34.458962],[-80.880076,34.541117],[-80.896507,34.820441],[-80.907461,35.077857]]]},"id":"45057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.801095,35.028564],[-91.680602,34.48087],[-91.70251,34.48087],[-92.031127,34.491824],[-92.118758,35.012133],[-92.118758,35.066903],[-91.801095,35.028564]]]},"id":"05085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.333722,35.055949],[-94.928428,35.055949],[-95.059875,34.67804],[-95.311814,34.683517],[-95.514461,34.683517],[-95.350152,35.055949],[-95.333722,35.055949]]]},"id":"40077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.89559,35.055949],[-82.840821,34.623271],[-82.846298,34.617794],[-82.857251,34.60684],[-82.994175,34.48087],[-83.048944,34.497301],[-83.103714,34.53564],[-83.278976,34.645178],[-83.339222,34.688994],[-83.350176,34.716379],[-83.109191,35.00118],[-83.010606,35.028564],[-82.89559,35.055949]]]},"id":"45073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.461548,35.044995],[-79.346533,34.836871],[-79.461548,34.628748],[-79.686103,34.80401],[-79.461548,35.044995]]]},"id":"37165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.290799,35.039518],[-105.312707,34.349424],[-105.926124,34.261793],[-106.419049,34.442532],[-106.413572,34.869733],[-106.243787,35.039518],[-105.712524,35.039518],[-105.290799,35.039518]]]},"id":"35057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.934351,35.028564],[-99.890536,35.028564],[-99.665981,34.727333],[-99.84672,34.508255],[-100.000075,34.563024],[-100.000075,34.743763],[-100.000075,35.028564],[-99.934351,35.028564]]]},"id":"40057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.228296,34.957364],[-92.118758,35.012133],[-92.031127,34.491824],[-92.069465,34.491824],[-92.206389,34.491824],[-92.244727,34.491824],[-92.737652,34.853302],[-92.545959,34.951887],[-92.228296,34.957364]]]},"id":"05119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.983668,35.006656],[-87.605759,35.00118],[-87.222373,35.00118],[-87.211419,35.00118],[-87.260711,34.760194],[-87.42502,34.798533],[-88.098683,34.891641],[-88.202745,34.995703],[-87.983668,35.006656]]]},"id":"01077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.275309,34.984749],[-91.149339,35.00118],[-91.100047,34.869733],[-91.050754,34.645178],[-91.056231,34.33847],[-91.379371,34.563024],[-91.368417,34.913548],[-91.275309,34.984749]]]},"id":"05095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.109191,35.00118],[-83.350176,34.716379],[-83.651408,34.820441],[-83.547346,34.990226],[-83.481623,34.995703],[-83.109191,35.00118]]]},"id":"13241"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.211419,35.00118],[-86.838987,34.990226],[-86.784218,34.990226],[-86.789695,34.55207],[-87.03068,34.650655],[-87.107357,34.683517],[-87.260711,34.760194],[-87.211419,35.00118]]]},"id":"01083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.471115,34.995703],[-88.378007,34.995703],[-88.361576,34.995703],[-88.367053,34.754717],[-88.717578,34.754717],[-88.821639,34.995703],[-88.788778,34.995703],[-88.471115,34.995703]]]},"id":"28003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.018809,34.995703],[-88.821639,34.995703],[-88.717578,34.754717],[-88.734008,34.595886],[-89.09001,34.595886],[-89.018809,34.995703]]]},"id":"28139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.829396,34.995703],[-89.725335,34.995703],[-89.725335,34.771148],[-89.845827,34.771148],[-90.201828,34.721856],[-90.267552,34.858779],[-90.30589,34.858779],[-90.311367,34.995703],[-89.829396,34.995703]]]},"id":"28033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.252038,34.995703],[-88.202745,34.995703],[-88.098683,34.891641],[-88.142499,34.579455],[-88.15893,34.464439],[-88.328715,34.464439],[-88.367053,34.754717],[-88.361576,34.995703],[-88.252038,34.995703]]]},"id":"28141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.643181,34.995703],[-89.352903,34.995703],[-89.243364,34.584932],[-89.248841,34.497301],[-89.62675,34.557547],[-89.670565,34.55207],[-89.725335,34.771148],[-89.725335,34.995703],[-89.643181,34.995703]]]},"id":"28093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.199548,34.995703],[-89.018809,34.995703],[-89.09001,34.595886],[-89.243364,34.584932],[-89.352903,34.995703],[-89.199548,34.995703]]]},"id":"28009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.936209,34.984749],[-83.547346,34.990226],[-83.651408,34.820441],[-83.684269,34.798533],[-83.782854,34.793056],[-83.936209,34.984749]]]},"id":"13281"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.784218,34.990226],[-86.318678,34.990226],[-86.313201,34.990226],[-86.329632,34.601363],[-86.548709,34.546593],[-86.789695,34.55207],[-86.784218,34.990226]]]},"id":"01089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.864092,34.990226],[-85.606675,34.984749],[-85.584768,34.858779],[-86.055785,34.475393],[-86.329632,34.601363],[-86.313201,34.990226],[-85.864092,34.990226]]]},"id":"01071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.319594,34.990226],[-84.127902,34.990226],[-84.155286,34.650655],[-84.188148,34.601363],[-84.199102,34.617794],[-84.620826,34.853302],[-84.620826,34.990226],[-84.319594,34.990226]]]},"id":"13111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.620826,34.990226],[-84.620826,34.853302],[-84.653688,34.584932],[-84.916581,34.634225],[-84.812519,34.990226],[-84.774181,34.990226],[-84.620826,34.990226]]]},"id":"13213"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.976827,34.990226],[-84.812519,34.990226],[-84.916581,34.634225],[-85.048028,34.623271],[-85.146612,34.765671],[-84.982304,34.990226],[-84.976827,34.990226]]]},"id":"13313"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.267105,34.984749],[-84.982304,34.990226],[-85.146612,34.765671],[-85.267105,34.984749]]]},"id":"13047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.007409,34.984749],[-83.936209,34.984749],[-83.782854,34.793056],[-83.854055,34.721856],[-84.155286,34.650655],[-84.127902,34.990226],[-84.007409,34.984749]]]},"id":"13291"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.272582,34.984749],[-85.267105,34.984749],[-85.146612,34.765671],[-85.048028,34.623271],[-85.069935,34.584932],[-85.09732,34.584932],[-85.108274,34.584932],[-85.529998,34.590409],[-85.535475,34.623271],[-85.36569,34.984749],[-85.272582,34.984749]]]},"id":"13295"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.475229,34.984749],[-85.36569,34.984749],[-85.535475,34.623271],[-85.584768,34.858779],[-85.606675,34.984749],[-85.475229,34.984749]]]},"id":"13083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.676066,34.973795],[-77.16671,34.787579],[-77.111941,34.639701],[-77.517235,34.442532],[-77.681543,34.721856],[-77.676066,34.973795]]]},"id":"37133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.932988,34.962841],[-96.774157,34.902595],[-96.489356,34.908072],[-96.407202,34.765671],[-96.511264,34.502778],[-96.828926,34.508255],[-96.932988,34.634225],[-96.932988,34.853302],[-96.932988,34.962841]]]},"id":"40123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.196774,34.957364],[-107.065328,34.957364],[-106.413572,34.869733],[-106.419049,34.442532],[-107.202251,34.579455],[-107.196774,34.957364]]]},"id":"35061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.264331,34.951887],[-103.045254,34.951887],[-103.045254,34.74924],[-103.045254,34.311085],[-103.045254,34.300131],[-103.740825,34.305608],[-103.740825,34.60684],[-103.264331,34.951887]]]},"id":"35009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.034347,34.951887],[-78.9029,34.836871],[-78.870039,34.48087],[-79.072686,34.300131],[-79.450595,34.623271],[-79.461548,34.628748],[-79.346533,34.836871],[-79.034347,34.951887]]]},"id":"37155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.712571,34.913548],[-81.712571,34.913548],[-81.455155,34.836871],[-81.477062,34.820441],[-81.422293,34.573978],[-81.422293,34.491824],[-81.641371,34.53564],[-81.854971,34.595886],[-81.712571,34.913548]]]},"id":"45087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.100047,34.869733],[-90.409952,34.902595],[-90.409952,34.831394],[-90.585214,34.639701],[-91.050754,34.645178],[-91.100047,34.869733]]]},"id":"05077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.098683,34.891641],[-87.42502,34.798533],[-87.529082,34.568501],[-88.142499,34.579455],[-88.098683,34.891641]]]},"id":"01033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-119.443213,34.902595],[-118.884565,34.793056],[-118.638103,34.289177],[-118.944811,34.042715],[-119.476075,34.376808],[-119.443213,34.902595]]]},"id":"06111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.267552,34.858779],[-90.201828,34.721856],[-90.196352,34.55207],[-90.196352,34.508255],[-90.398998,34.426101],[-90.568783,34.524686],[-90.585214,34.639701],[-90.409952,34.831394],[-90.30589,34.858779],[-90.267552,34.858779]]]},"id":"28143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.584768,34.858779],[-85.535475,34.623271],[-85.529998,34.590409],[-85.513567,34.524686],[-85.842184,34.201546],[-86.105077,34.201546],[-86.055785,34.475393],[-85.584768,34.858779]]]},"id":"01049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.397611,34.814964],[-99.244257,34.820441],[-99.101857,34.639701],[-99.211395,34.33847],[-99.474288,34.398716],[-99.84672,34.508255],[-99.665981,34.727333],[-99.397611,34.814964]]]},"id":"40065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.967683,34.858779],[-92.737652,34.853302],[-92.244727,34.491824],[-92.392605,34.497301],[-92.666452,34.415147],[-92.792421,34.502778],[-93.077222,34.771148],[-92.967683,34.858779]]]},"id":"05125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.49213,34.847825],[-78.256622,34.55207],[-78.256622,34.398716],[-78.870039,34.48087],[-78.9029,34.836871],[-78.49213,34.858779],[-78.49213,34.847825]]]},"id":"37017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.795148,34.853302],[-98.619886,34.853302],[-98.0941,34.853302],[-98.088623,34.683517],[-98.143392,34.508255],[-98.663701,34.404193],[-98.82801,34.595886],[-98.795148,34.853302]]]},"id":"40031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.620826,34.853302],[-84.199102,34.617794],[-84.346979,34.563024],[-84.653688,34.546593],[-84.653688,34.584932],[-84.620826,34.853302]]]},"id":"13123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.425913,34.853302],[-96.932988,34.853302],[-96.932988,34.634225],[-97.091819,34.639701],[-97.354713,34.508255],[-97.562836,34.508255],[-97.666898,34.683517],[-97.666898,34.853302],[-97.425913,34.853302]]]},"id":"40049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.651408,34.820441],[-83.350176,34.716379],[-83.339222,34.688994],[-83.459715,34.48087],[-83.552823,34.486347],[-83.613069,34.431578],[-83.667839,34.502778],[-83.684269,34.798533],[-83.651408,34.820441]]]},"id":"13137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.668684,34.820441],[-117.7837,33.94413],[-118.117793,33.741483],[-118.944811,34.042715],[-118.638103,34.289177],[-118.884565,34.793056],[-117.668684,34.820441]]]},"id":"06037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.28537,34.820441],[-80.896507,34.820441],[-80.880076,34.541117],[-81.416816,34.573978],[-81.422293,34.573978],[-81.477062,34.820441],[-81.28537,34.820441]]]},"id":"45023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.490296,34.820441],[-82.484819,34.820441],[-82.315034,34.486347],[-82.325988,34.475393],[-82.742236,34.207023],[-82.775097,34.289177],[-82.994175,34.48087],[-82.857251,34.60684],[-82.846298,34.617794],[-82.840821,34.623271],[-82.490296,34.820441]]]},"id":"45007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.562413,34.814964],[-80.321428,34.814964],[-79.927088,34.80401],[-79.828503,34.530163],[-79.866842,34.508255],[-80.288566,34.365854],[-80.387151,34.595886],[-80.409059,34.612317],[-80.562413,34.814964]]]},"id":"45025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.927088,34.80401],[-79.686103,34.80401],[-79.461548,34.628748],[-79.450595,34.623271],[-79.631334,34.300131],[-79.658718,34.305608],[-79.828503,34.530163],[-79.927088,34.80401]]]},"id":"45069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.42502,34.798533],[-87.260711,34.760194],[-87.107357,34.683517],[-87.112834,34.311085],[-87.107357,34.300131],[-87.529082,34.305608],[-87.529082,34.568501],[-87.42502,34.798533]]]},"id":"01079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.782854,34.793056],[-83.684269,34.798533],[-83.667839,34.502778],[-83.788331,34.513732],[-83.843101,34.502778],[-83.854055,34.721856],[-83.782854,34.793056]]]},"id":"13311"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.145249,34.787579],[-81.854971,34.595886],[-81.641371,34.53564],[-81.646848,34.519209],[-81.942602,34.201546],[-82.243834,34.40967],[-82.315034,34.486347],[-82.145249,34.787579]]]},"id":"45059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.129688,34.776625],[-103.948949,34.60684],[-103.943472,34.081054],[-104.890983,34.08653],[-104.890983,34.349424],[-104.890983,34.60684],[-104.129688,34.776625]]]},"id":"35011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.285346,34.771148],[-93.077222,34.771148],[-92.792421,34.502778],[-93.405839,34.398716],[-93.394885,34.743763],[-93.285346,34.771148]]]},"id":"05051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.845827,34.771148],[-89.725335,34.771148],[-89.670565,34.55207],[-89.719858,34.55207],[-90.097767,34.55207],[-90.196352,34.55207],[-90.201828,34.721856],[-89.845827,34.771148]]]},"id":"28137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.089539,34.765671],[-96.089539,34.67804],[-96.407202,34.420624],[-96.511264,34.502778],[-96.407202,34.765671],[-96.089539,34.765671]]]},"id":"40029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.717578,34.754717],[-88.367053,34.754717],[-88.328715,34.464439],[-88.493023,34.464439],[-88.542316,34.464439],[-88.635423,34.508255],[-88.734008,34.508255],[-88.734008,34.595886],[-88.717578,34.754717]]]},"id":"28117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.473372,34.74924],[-101.089986,34.74924],[-100.947585,34.74924],[-100.947585,34.311085],[-101.040693,34.311085],[-101.473372,34.311085],[-101.473372,34.74924]]]},"id":"48045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.947585,34.74924],[-100.542292,34.74924],[-100.416322,34.74924],[-100.416322,34.311085],[-100.514907,34.316562],[-100.673738,34.311085],[-100.947585,34.311085],[-100.947585,34.74924]]]},"id":"48191"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.999158,34.74924],[-101.626726,34.74924],[-101.473372,34.74924],[-101.473372,34.311085],[-101.56648,34.311085],[-101.999158,34.311085],[-101.999158,34.74924]]]},"id":"48437"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.004635,34.74924],[-101.999158,34.74924],[-101.999158,34.311085],[-102.092266,34.311085],[-102.327774,34.311085],[-102.524944,34.311085],[-102.524944,34.74924],[-102.168943,34.74924],[-102.004635,34.74924]]]},"id":"48069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.045254,34.74924],[-102.524944,34.74924],[-102.524944,34.311085],[-102.612575,34.311085],[-103.045254,34.311085],[-103.045254,34.74924]]]},"id":"48369"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.416322,34.74924],[-100.000075,34.743763],[-100.000075,34.563024],[-100.000075,34.311085],[-100.416322,34.311085],[-100.416322,34.74924]]]},"id":"48075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.570147,34.743763],[-93.394885,34.743763],[-93.405839,34.398716],[-93.405839,34.33847],[-93.477039,34.33847],[-93.750886,34.349424],[-93.937102,34.349424],[-93.931625,34.667086],[-93.712547,34.743763],[-93.570147,34.743763]]]},"id":"05097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.854055,34.721856],[-83.843101,34.502778],[-83.980024,34.420624],[-84.188148,34.601363],[-84.155286,34.650655],[-83.854055,34.721856]]]},"id":"13187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.015636,34.732809],[-77.681543,34.721856],[-77.517235,34.442532],[-77.714404,34.294654],[-77.960867,34.376808],[-78.032067,34.332993],[-78.125175,34.365854],[-78.163514,34.354901],[-78.256622,34.398716],[-78.256622,34.55207],[-78.114221,34.721856],[-78.015636,34.732809]]]},"id":"37141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.451934,34.727333],[-93.931625,34.667086],[-93.937102,34.349424],[-94.24381,34.190592],[-94.468365,34.190592],[-94.462888,34.508255],[-94.451934,34.727333]]]},"id":"05113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.278976,34.645178],[-83.103714,34.53564],[-83.125621,34.519209],[-83.399469,34.458962],[-83.459715,34.48087],[-83.339222,34.688994],[-83.278976,34.645178]]]},"id":"13257"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.03068,34.650655],[-86.789695,34.55207],[-86.548709,34.546593],[-86.581571,34.305608],[-86.986864,34.311085],[-87.112834,34.311085],[-87.107357,34.683517],[-87.03068,34.650655]]]},"id":"01103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.995515,34.683517],[-97.666898,34.683517],[-97.562836,34.508255],[-97.562836,34.289177],[-98.061238,34.289177],[-98.137915,34.289177],[-98.143392,34.508255],[-98.143392,34.508255],[-98.088623,34.683517],[-97.995515,34.683517]]]},"id":"40137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.311814,34.683517],[-95.059875,34.67804],[-94.939382,34.508255],[-95.158459,34.157731],[-95.383014,34.157731],[-95.777354,34.157731],[-95.673292,34.595886],[-95.514461,34.683517],[-95.311814,34.683517]]]},"id":"40127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.673292,34.595886],[-95.777354,34.157731],[-95.990954,34.157731],[-96.407202,34.157731],[-96.407202,34.420624],[-96.089539,34.67804],[-95.673292,34.595886]]]},"id":"40005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.050754,34.645178],[-90.585214,34.639701],[-90.568783,34.524686],[-90.957646,34.119392],[-90.952169,34.119392],[-91.116477,34.119392],[-91.056231,34.33847],[-91.050754,34.645178]]]},"id":"05107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.101857,34.639701],[-98.82801,34.595886],[-98.663701,34.404193],[-98.608932,34.157731],[-98.953979,34.2125],[-99.211395,34.33847],[-99.101857,34.639701]]]},"id":"40141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.091819,34.639701],[-96.932988,34.634225],[-96.828926,34.508255],[-96.878219,34.502778],[-96.932988,34.332993],[-97.354713,34.508255],[-97.091819,34.639701]]]},"id":"40099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.916581,34.634225],[-84.653688,34.584932],[-84.653688,34.546593],[-84.653688,34.415147],[-84.933012,34.398716],[-85.004212,34.393239],[-85.069935,34.584932],[-85.048028,34.623271],[-84.916581,34.634225]]]},"id":"13129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.450595,34.623271],[-79.072686,34.300131],[-79.078163,34.294654],[-79.127455,34.256316],[-79.36844,34.300131],[-79.549179,34.228931],[-79.631334,34.300131],[-79.450595,34.623271]]]},"id":"45033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.199102,34.617794],[-84.188148,34.601363],[-83.980024,34.420624],[-83.958116,34.332993],[-84.259348,34.332993],[-84.259348,34.382285],[-84.346979,34.563024],[-84.199102,34.617794]]]},"id":"13085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.387151,34.595886],[-80.288566,34.365854],[-80.288566,34.365854],[-80.480259,34.168685],[-80.617183,34.097484],[-80.825307,34.26727],[-80.880076,34.458962],[-80.409059,34.612317],[-80.387151,34.595886]]]},"id":"45055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.740825,34.60684],[-103.740825,34.305608],[-103.045254,34.300131],[-103.045254,33.823637],[-103.050731,33.571698],[-103.510794,33.571698],[-103.877749,34.081054],[-103.943472,34.081054],[-103.948949,34.60684],[-103.740825,34.60684]]]},"id":"35041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.329632,34.601363],[-86.055785,34.475393],[-86.105077,34.201546],[-86.302247,34.097484],[-86.455601,34.261793],[-86.581571,34.305608],[-86.548709,34.546593],[-86.329632,34.601363]]]},"id":"01095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.09001,34.595886],[-88.734008,34.595886],[-88.734008,34.508255],[-88.827116,34.365854],[-89.09001,34.382285],[-89.248841,34.376808],[-89.248841,34.497301],[-89.243364,34.584932],[-89.09001,34.595886]]]},"id":"28145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.108274,34.584932],[-85.464275,34.2837],[-85.513567,34.524686],[-85.529998,34.590409],[-85.108274,34.584932]]]},"id":"13055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.09732,34.584932],[-85.069935,34.584932],[-85.004212,34.393239],[-85.048028,34.097484],[-85.42046,34.081054],[-85.464275,34.2837],[-85.108274,34.584932],[-85.09732,34.584932]]]},"id":"13115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.142499,34.579455],[-87.529082,34.568501],[-87.529082,34.305608],[-87.633143,34.305608],[-88.175361,34.322039],[-88.15893,34.464439],[-88.142499,34.579455]]]},"id":"01059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.987734,34.579455],[-107.722561,34.579455],[-107.711607,33.47859],[-108.001885,33.199266],[-108.182624,33.199266],[-109.04798,33.21022],[-109.04798,33.779822],[-109.04798,34.579455],[-108.987734,34.579455]]]},"id":"35003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.536345,34.579455],[-107.202251,34.579455],[-106.419049,34.442532],[-105.926124,34.261793],[-106.052094,33.648375],[-106.375233,33.47859],[-107.711607,33.47859],[-107.722561,34.579455],[-107.536345,34.579455]]]},"id":"35053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.84672,34.508255],[-99.474288,34.398716],[-99.474288,34.08653],[-100.000075,34.223454],[-100.000075,34.311085],[-100.000075,34.563024],[-99.84672,34.508255]]]},"id":"48197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.416816,34.573978],[-80.880076,34.541117],[-80.880076,34.458962],[-80.825307,34.26727],[-80.863645,34.261793],[-81.318231,34.239885],[-81.422293,34.491824],[-81.422293,34.573978],[-81.416816,34.573978]]]},"id":"45039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.587494,34.568501],[-91.379371,34.563024],[-91.056231,34.33847],[-91.116477,34.119392],[-91.423186,34.01533],[-91.445094,34.081054],[-91.70251,34.48087],[-91.680602,34.48087],[-91.587494,34.568501]]]},"id":"05001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.346979,34.563024],[-84.259348,34.382285],[-84.582488,34.387762],[-84.653688,34.415147],[-84.653688,34.546593],[-84.346979,34.563024]]]},"id":"13227"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.62675,34.557547],[-89.248841,34.497301],[-89.248841,34.376808],[-89.243364,34.163208],[-89.511734,34.163208],[-89.719858,34.190592],[-89.719858,34.55207],[-89.670565,34.55207],[-89.62675,34.557547]]]},"id":"28071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.097767,34.55207],[-89.719858,34.55207],[-89.719858,34.190592],[-89.933458,34.163208],[-90.136105,34.157731],[-90.196352,34.508255],[-90.196352,34.55207],[-90.097767,34.55207]]]},"id":"28107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.125621,34.519209],[-83.103714,34.53564],[-83.048944,34.497301],[-83.114668,34.272746],[-83.120145,34.272746],[-83.355653,34.223454],[-83.399469,34.458962],[-83.125621,34.519209]]]},"id":"13119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.866842,34.508255],[-79.828503,34.530163],[-79.658718,34.305608],[-80.074966,34.08653],[-80.244751,34.322039],[-80.288566,34.365854],[-80.288566,34.365854],[-79.866842,34.508255]]]},"id":"45031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.646848,34.519209],[-81.641371,34.53564],[-81.422293,34.491824],[-81.318231,34.239885],[-81.340139,34.196069],[-81.471585,34.075577],[-81.739956,34.185115],[-81.871402,34.135823],[-81.942602,34.201546],[-81.646848,34.519209]]]},"id":"45071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.513567,34.524686],[-85.464275,34.2837],[-85.42046,34.081054],[-85.398552,33.966038],[-85.529998,33.94413],[-85.738122,33.966038],[-85.842184,34.201546],[-85.513567,34.524686]]]},"id":"01019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.568783,34.524686],[-90.398998,34.426101],[-90.448291,34.075577],[-90.448291,33.987946],[-90.656414,33.987946],[-90.738569,34.119392],[-90.957646,34.119392],[-90.568783,34.524686]]]},"id":"28027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.788331,34.513732],[-83.667839,34.502778],[-83.613069,34.431578],[-83.618546,34.294654],[-83.815716,34.124869],[-83.990978,34.1413],[-84.062178,34.168685],[-83.958116,34.332993],[-83.980024,34.420624],[-83.843101,34.502778],[-83.788331,34.513732]]]},"id":"13139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.196352,34.508255],[-90.136105,34.157731],[-90.448291,34.075577],[-90.398998,34.426101],[-90.196352,34.508255]]]},"id":"28119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.635423,34.508255],[-88.542316,34.464439],[-88.542316,34.08653],[-88.706624,34.092007],[-88.717578,34.075577],[-88.827116,34.075577],[-88.827116,34.365854],[-88.734008,34.508255],[-88.635423,34.508255]]]},"id":"28081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.616242,34.508255],[-94.462888,34.508255],[-94.468365,34.190592],[-94.479319,33.938653],[-94.484796,33.637421],[-94.736735,33.703145],[-95.158459,33.938653],[-95.158459,34.157731],[-94.939382,34.508255],[-94.616242,34.508255]]]},"id":"40089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.143392,34.508255],[-98.137915,34.289177],[-98.137915,34.1413],[-98.422716,34.081054],[-98.608932,34.157731],[-98.663701,34.404193],[-98.143392,34.508255],[-98.143392,34.508255]]]},"id":"40033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.562836,34.508255],[-97.354713,34.508255],[-96.932988,34.332993],[-96.932988,34.174162],[-96.971327,34.0701],[-97.562836,34.0701],[-97.562836,34.289177],[-97.562836,34.508255]]]},"id":"40019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.878219,34.502778],[-96.828926,34.508255],[-96.511264,34.502778],[-96.407202,34.420624],[-96.407202,34.157731],[-96.412679,34.157731],[-96.587941,34.113915],[-96.932988,34.174162],[-96.932988,34.332993],[-96.878219,34.502778]]]},"id":"40069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.792421,34.502778],[-92.666452,34.415147],[-92.677405,34.152254],[-92.885529,34.157731],[-93.405839,34.33847],[-93.405839,34.398716],[-92.792421,34.502778]]]},"id":"05059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.556419,34.469916],[-110.751309,34.261793],[-110.751309,33.998899],[-110.000968,33.998899],[-110.000968,33.577175],[-110.450077,33.193789],[-110.778693,32.985665],[-111.041587,33.467636],[-111.496173,33.998899],[-111.556419,34.469916]]]},"id":"04007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.048944,34.497301],[-82.994175,34.48087],[-82.775097,34.289177],[-83.076329,34.228931],[-83.114668,34.272746],[-83.048944,34.497301]]]},"id":"13147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.392605,34.497301],[-92.244727,34.491824],[-92.206389,34.491824],[-92.233773,34.064623],[-92.337835,34.059146],[-92.677405,34.152254],[-92.666452,34.415147],[-92.392605,34.497301]]]},"id":"05053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.069465,34.491824],[-92.031127,34.491824],[-91.70251,34.48087],[-91.445094,34.081054],[-91.603925,34.113915],[-91.954449,34.064623],[-92.058511,34.064623],[-92.233773,34.064623],[-92.206389,34.491824],[-92.069465,34.491824]]]},"id":"05069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.552823,34.486347],[-83.459715,34.48087],[-83.399469,34.458962],[-83.355653,34.223454],[-83.404945,34.196069],[-83.618546,34.289177],[-83.618546,34.294654],[-83.613069,34.431578],[-83.552823,34.486347]]]},"id":"13011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.325988,34.475393],[-82.315034,34.486347],[-82.243834,34.40967],[-82.325988,34.064623],[-82.594358,34.01533],[-82.742236,34.207023],[-82.325988,34.475393]]]},"id":"45001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.870039,34.48087],[-78.256622,34.398716],[-78.163514,34.354901],[-78.650961,33.94413],[-79.072686,34.300131],[-78.870039,34.48087]]]},"id":"37047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.493023,34.464439],[-88.328715,34.464439],[-88.15893,34.464439],[-88.175361,34.322039],[-88.202745,34.08653],[-88.542316,34.08653],[-88.542316,34.464439],[-88.493023,34.464439]]]},"id":"28057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.211395,34.33847],[-98.953979,34.2125],[-98.953979,33.834591],[-98.992318,33.834591],[-99.474288,33.834591],[-99.474288,34.08653],[-99.474288,34.398716],[-99.211395,34.33847]]]},"id":"48487"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.933012,34.398716],[-84.653688,34.415147],[-84.659165,34.075577],[-84.735842,34.081054],[-84.922058,34.081054],[-85.048028,34.097484],[-85.004212,34.393239],[-84.933012,34.398716]]]},"id":"13015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.582488,34.387762],[-84.259348,34.382285],[-84.259348,34.332993],[-84.259348,34.185115],[-84.407226,34.108438],[-84.418179,34.075577],[-84.615349,34.081054],[-84.659165,34.075577],[-84.653688,34.415147],[-84.582488,34.387762]]]},"id":"13057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.243834,34.40967],[-81.942602,34.201546],[-81.871402,34.135823],[-82.008326,33.960561],[-82.046664,33.955084],[-82.325988,34.064623],[-82.243834,34.40967]]]},"id":"45047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.960867,34.376808],[-77.714404,34.294654],[-77.938959,33.927699],[-78.032067,34.332993],[-77.960867,34.376808]]]},"id":"37129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.09001,34.382285],[-88.827116,34.365854],[-88.827116,34.075577],[-89.139302,34.075577],[-89.243364,34.163208],[-89.248841,34.376808],[-89.09001,34.382285]]]},"id":"28115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.125175,34.365854],[-78.032067,34.332993],[-77.938959,33.927699],[-78.541422,33.851022],[-78.650961,33.94413],[-78.163514,34.354901],[-78.125175,34.365854]]]},"id":"37019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.244751,34.322039],[-80.074966,34.08653],[-79.998289,34.048192],[-80.480259,34.168685],[-80.288566,34.365854],[-80.244751,34.322039]]]},"id":"45061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.24381,34.190592],[-93.937102,34.349424],[-93.822086,34.009853],[-93.95901,33.752437],[-93.95901,33.752437],[-94.189041,34.190592],[-94.24381,34.190592]]]},"id":"05061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.750886,34.349424],[-93.477039,34.33847],[-93.372977,33.955084],[-93.455131,33.955084],[-93.811132,34.009853],[-93.822086,34.009853],[-93.937102,34.349424],[-93.750886,34.349424]]]},"id":"05109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.890983,34.349424],[-104.890983,34.08653],[-104.907413,33.13902],[-105.318184,33.133543],[-105.728954,33.390959],[-106.347849,33.390959],[-106.375233,33.47859],[-106.052094,33.648375],[-105.926124,34.261793],[-105.312707,34.349424],[-104.890983,34.349424]]]},"id":"35027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.477039,34.33847],[-93.405839,34.33847],[-92.885529,34.157731],[-92.891006,33.807207],[-93.104607,33.779822],[-93.372977,33.955084],[-93.477039,34.33847]]]},"id":"05019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.259348,34.332993],[-83.958116,34.332993],[-84.062178,34.168685],[-84.09504,34.048192],[-84.259348,34.185115],[-84.259348,34.332993]]]},"id":"13117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.175361,34.322039],[-87.633143,34.305608],[-87.63862,34.004376],[-87.63862,33.916745],[-87.950806,33.922222],[-88.208222,34.059146],[-88.202745,34.08653],[-88.175361,34.322039]]]},"id":"01093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.418579,34.300131],[-113.330948,34.316562],[-113.336425,33.998899],[-113.336425,33.380005],[-113.993657,33.462159],[-114.513967,33.029481],[-114.628982,33.434775],[-114.43729,34.081054],[-114.136058,34.305608],[-113.418579,34.300131]]]},"id":"04012"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.673738,34.311085],[-100.514907,34.316562],[-100.520384,33.834591],[-100.90377,33.834591],[-101.040693,33.834591],[-101.040693,34.311085],[-100.947585,34.311085],[-100.673738,34.311085]]]},"id":"48345"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.514907,34.316562],[-100.416322,34.311085],[-100.000075,34.311085],[-100.000075,34.223454],[-100.049367,33.834591],[-100.520384,33.834591],[-100.514907,34.316562]]]},"id":"48101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.986864,34.311085],[-86.581571,34.305608],[-86.455601,34.261793],[-86.488463,34.261793],[-86.964957,33.856499],[-87.151173,33.993423],[-87.107357,34.300131],[-87.112834,34.311085],[-86.986864,34.311085]]]},"id":"01043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.327774,34.311085],[-102.092266,34.311085],[-102.086789,33.823637],[-102.618052,33.823637],[-102.612575,34.311085],[-102.524944,34.311085],[-102.327774,34.311085]]]},"id":"48279"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.092266,34.311085],[-101.999158,34.311085],[-101.56648,34.311085],[-101.561003,33.829114],[-101.571957,33.829114],[-102.086789,33.823637],[-102.092266,34.311085]]]},"id":"48189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.612575,34.311085],[-102.618052,33.823637],[-103.001438,33.823637],[-103.045254,33.823637],[-103.045254,34.300131],[-103.045254,34.311085],[-102.612575,34.311085]]]},"id":"48017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.473372,34.311085],[-101.040693,34.311085],[-101.040693,33.834591],[-101.561003,33.829114],[-101.56648,34.311085],[-101.473372,34.311085]]]},"id":"48153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.658718,34.305608],[-79.631334,34.300131],[-79.549179,34.228931],[-79.324625,33.80173],[-79.83398,33.883884],[-79.877796,33.883884],[-79.976381,33.94413],[-79.998289,34.048192],[-80.074966,34.08653],[-79.658718,34.305608]]]},"id":"45041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.633143,34.305608],[-87.529082,34.305608],[-87.107357,34.300131],[-87.151173,33.993423],[-87.627666,34.004376],[-87.63862,34.004376],[-87.633143,34.305608]]]},"id":"01133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.36844,34.300131],[-79.127455,34.256316],[-79.187701,33.703145],[-79.319148,33.779822],[-79.324625,33.80173],[-79.549179,34.228931],[-79.36844,34.300131]]]},"id":"45067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.078163,34.294654],[-79.072686,34.300131],[-78.650961,33.94413],[-78.541422,33.851022],[-79.001485,33.571698],[-79.187701,33.703145],[-79.127455,34.256316],[-79.078163,34.294654]]]},"id":"45051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.618546,34.289177],[-83.404945,34.196069],[-83.36113,34.042715],[-83.536392,33.966038],[-83.815716,34.124869],[-83.618546,34.294654],[-83.618546,34.289177]]]},"id":"13157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.061238,34.289177],[-97.562836,34.289177],[-97.562836,34.0701],[-97.562836,33.894838],[-97.979084,33.889361],[-98.137915,34.1413],[-98.137915,34.289177],[-98.061238,34.289177]]]},"id":"40067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.775097,34.289177],[-82.742236,34.207023],[-82.594358,34.01533],[-82.566974,33.955084],[-82.643651,33.982469],[-82.731282,33.982469],[-82.780574,33.971515],[-82.977744,34.042715],[-83.076329,34.228931],[-82.775097,34.289177]]]},"id":"13105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.120145,34.272746],[-83.114668,34.272746],[-83.076329,34.228931],[-82.977744,34.042715],[-83.098237,34.026284],[-83.257068,33.998899],[-83.36113,34.042715],[-83.404945,34.196069],[-83.355653,34.223454],[-83.120145,34.272746]]]},"id":"13195"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.863645,34.261793],[-80.825307,34.26727],[-80.617183,34.097484],[-80.62266,33.741483],[-81.011523,33.878407],[-81.340139,34.196069],[-81.318231,34.239885],[-80.863645,34.261793]]]},"id":"45079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.488463,34.261793],[-86.455601,34.261793],[-86.302247,34.097484],[-86.324155,33.938653],[-86.576094,33.763391],[-86.685633,33.796253],[-86.954003,33.812683],[-86.964957,33.856499],[-86.488463,34.261793]]]},"id":"01009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.000075,34.223454],[-99.474288,34.08653],[-99.474288,33.834591],[-99.474288,33.736006],[-99.868628,33.834591],[-99.994598,33.834591],[-100.049367,33.834591],[-100.000075,34.223454]]]},"id":"48155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.608932,34.157731],[-98.422716,34.081054],[-98.422716,33.834591],[-98.43367,33.834591],[-98.953979,33.834591],[-98.953979,34.2125],[-98.608932,34.157731]]]},"id":"48485"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.105077,34.201546],[-85.842184,34.201546],[-85.738122,33.966038],[-86.066738,33.840068],[-86.291293,33.982469],[-86.324155,33.938653],[-86.302247,34.097484],[-86.105077,34.201546]]]},"id":"01055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.340139,34.196069],[-81.011523,33.878407],[-81.044384,33.796253],[-81.044384,33.708622],[-81.186785,33.653852],[-81.57017,33.878407],[-81.471585,34.075577],[-81.340139,34.196069]]]},"id":"45063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.189041,34.190592],[-93.95901,33.752437],[-94.446457,33.927699],[-94.479319,33.938653],[-94.468365,34.190592],[-94.24381,34.190592],[-94.189041,34.190592]]]},"id":"05133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.511734,34.163208],[-89.506257,33.867453],[-89.927981,33.900315],[-89.933458,34.163208],[-89.719858,34.190592],[-89.511734,34.163208]]]},"id":"28161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.739956,34.185115],[-81.471585,34.075577],[-81.57017,33.878407],[-81.652325,33.812683],[-82.008326,33.960561],[-81.871402,34.135823],[-81.739956,34.185115]]]},"id":"45081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.407226,34.108438],[-84.259348,34.185115],[-84.09504,34.048192],[-84.275779,33.955084],[-84.352456,33.648375],[-84.456518,33.54979],[-84.609872,33.500498],[-84.681073,33.511452],[-84.850858,33.511452],[-84.807042,33.571698],[-84.577011,33.741483],[-84.418179,34.075577],[-84.407226,34.108438]]]},"id":"13121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.603925,34.113915],[-91.445094,34.081054],[-91.423186,34.01533],[-91.56011,33.785299],[-91.664172,33.790776],[-91.976357,33.790776],[-91.954449,34.064623],[-91.603925,34.113915]]]},"id":"05079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.932988,34.174162],[-96.587941,34.113915],[-96.587941,33.894838],[-96.932988,33.955084],[-96.971327,34.0701],[-96.932988,34.174162]]]},"id":"40095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.480259,34.168685],[-79.998289,34.048192],[-79.976381,33.94413],[-80.332382,33.779822],[-80.535029,33.642898],[-80.62266,33.741483],[-80.617183,34.097484],[-80.480259,34.168685]]]},"id":"45085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.990978,34.1413],[-83.815716,34.124869],[-83.799285,33.927699],[-83.980024,33.785299],[-84.02384,33.752437],[-84.275779,33.955084],[-84.275779,33.955084],[-84.09504,34.048192],[-84.062178,34.168685],[-83.990978,34.1413]]]},"id":"13135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.933458,34.163208],[-89.927981,33.900315],[-90.136105,33.719575],[-90.453768,33.812683],[-90.448291,33.987946],[-90.448291,34.075577],[-90.136105,34.157731],[-89.933458,34.163208]]]},"id":"28135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.511734,34.163208],[-89.243364,34.163208],[-89.139302,34.075577],[-89.194071,33.736006],[-89.506257,33.719575],[-89.506257,33.867453],[-89.511734,34.163208]]]},"id":"28013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.412679,34.157731],[-96.407202,34.157731],[-95.990954,34.157731],[-95.760923,33.87293],[-95.843077,33.840068],[-96.379817,33.725052],[-96.587941,33.894838],[-96.587941,34.113915],[-96.412679,34.157731]]]},"id":"40013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.137915,34.1413],[-97.979084,33.889361],[-97.979084,33.467636],[-98.422716,33.467636],[-98.422716,33.834591],[-98.422716,34.081054],[-98.137915,34.1413]]]},"id":"48077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.383014,34.157731],[-95.158459,34.157731],[-95.158459,33.938653],[-95.311814,33.878407],[-95.760923,33.87293],[-95.990954,34.157731],[-95.777354,34.157731],[-95.383014,34.157731]]]},"id":"40023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.885529,34.157731],[-92.677405,34.152254],[-92.337835,34.059146],[-92.332358,33.796253],[-92.584298,33.80173],[-92.891006,33.807207],[-92.885529,34.157731]]]},"id":"05039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.799285,33.927699],[-83.815716,34.124869],[-83.536392,33.966038],[-83.645931,33.905791],[-83.799285,33.927699]]]},"id":"13013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.738569,34.119392],[-90.656414,33.987946],[-90.765953,33.527883],[-91.001462,33.527883],[-91.215062,33.527883],[-91.231493,33.560744],[-90.952169,34.119392],[-90.957646,34.119392],[-90.738569,34.119392]]]},"id":"28011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.116477,34.119392],[-90.952169,34.119392],[-91.231493,33.560744],[-91.390325,33.560744],[-91.456048,33.566221],[-91.56011,33.785299],[-91.423186,34.01533],[-91.116477,34.119392]]]},"id":"05041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.42046,34.081054],[-85.048028,34.097484],[-84.922058,34.081054],[-85.048028,33.905791],[-85.310921,33.900315],[-85.387598,33.900315],[-85.398552,33.966038],[-85.42046,34.081054]]]},"id":"13233"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.706624,34.092007],[-88.542316,34.08653],[-88.202745,34.08653],[-88.208222,34.059146],[-88.246561,33.74696],[-88.514931,33.648375],[-88.717578,33.812683],[-88.717578,34.075577],[-88.706624,34.092007]]]},"id":"28095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.877749,34.081054],[-103.510794,33.571698],[-103.812025,32.963758],[-104.102303,32.963758],[-104.84169,32.963758],[-104.852644,32.520126],[-105.356522,32.520126],[-105.318184,33.133543],[-104.907413,33.13902],[-104.890983,34.08653],[-103.943472,34.081054],[-103.877749,34.081054]]]},"id":"35005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.922058,34.081054],[-84.735842,34.081054],[-84.724888,33.807207],[-84.90015,33.779822],[-85.037074,33.812683],[-85.048028,33.905791],[-84.922058,34.081054]]]},"id":"13223"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.615349,34.081054],[-84.418179,34.075577],[-84.577011,33.741483],[-84.724888,33.807207],[-84.735842,34.081054],[-84.659165,34.075577],[-84.615349,34.081054]]]},"id":"13067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.594358,34.01533],[-82.325988,34.064623],[-82.046664,33.955084],[-82.117864,33.599083],[-82.216449,33.686714],[-82.566974,33.955084],[-82.594358,34.01533]]]},"id":"45065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.733044,34.081054],[-114.43729,34.081054],[-114.628982,33.434775],[-114.733044,33.434775],[-116.085849,33.423821],[-117.476991,33.505975],[-117.509853,33.505975],[-117.674161,33.87293],[-117.559146,34.031761],[-114.733044,34.081054]]]},"id":"06065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.827116,34.075577],[-88.717578,34.075577],[-88.717578,33.812683],[-88.887363,33.812683],[-89.03524,33.741483],[-89.117394,33.741483],[-89.194071,33.736006],[-89.139302,34.075577],[-88.827116,34.075577]]]},"id":"28017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.562836,34.0701],[-96.971327,34.0701],[-96.932988,33.955084],[-96.943942,33.949607],[-97.486159,33.916745],[-97.562836,33.894838],[-97.562836,34.0701]]]},"id":"40085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.058511,34.064623],[-91.954449,34.064623],[-91.976357,33.790776],[-91.976357,33.703145],[-92.332358,33.708622],[-92.332358,33.796253],[-92.337835,34.059146],[-92.233773,34.064623],[-92.058511,34.064623]]]},"id":"05025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.208222,34.059146],[-87.950806,33.922222],[-87.945329,33.522406],[-88.273945,33.53336],[-88.246561,33.74696],[-88.208222,34.059146]]]},"id":"01075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.496173,33.998899],[-111.041587,33.467636],[-111.578327,33.467636],[-111.583804,33.204743],[-112.202698,33.308805],[-112.202698,32.509172],[-113.336425,32.503695],[-113.336425,33.380005],[-113.336425,33.998899],[-112.273898,33.883884],[-111.496173,33.998899]]]},"id":"04013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.098237,34.026284],[-82.977744,34.042715],[-82.780574,33.971515],[-82.950359,33.736006],[-82.994175,33.692191],[-83.278976,33.763391],[-83.273499,33.845545],[-83.257068,33.998899],[-83.098237,34.026284]]]},"id":"13221"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.36113,34.042715],[-83.257068,33.998899],[-83.273499,33.845545],[-83.530915,33.960561],[-83.536392,33.966038],[-83.36113,34.042715]]]},"id":"13059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.811132,34.009853],[-93.455131,33.955084],[-93.482516,33.47859],[-93.723501,33.484067],[-93.827563,33.610037],[-93.95901,33.752437],[-93.822086,34.009853],[-93.811132,34.009853]]]},"id":"05057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.627666,34.004376],[-87.151173,33.993423],[-86.964957,33.856499],[-86.954003,33.812683],[-87.266188,33.511452],[-87.42502,33.60456],[-87.63862,33.916745],[-87.63862,34.004376],[-87.627666,34.004376]]]},"id":"01127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.562836,33.894838],[-97.486159,33.916745],[-97.486159,33.434775],[-97.50259,33.434775],[-97.918837,33.434775],[-97.979084,33.467636],[-97.979084,33.889361],[-97.562836,33.894838]]]},"id":"48337"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.731282,33.982469],[-82.643651,33.982469],[-82.479343,33.637421],[-82.649128,33.610037],[-82.681989,33.599083],[-82.950359,33.736006],[-82.780574,33.971515],[-82.731282,33.982469]]]},"id":"13317"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.291293,33.982469],[-86.066738,33.840068],[-86.143416,33.681237],[-86.198185,33.697668],[-86.378924,33.390959],[-86.515848,33.544313],[-86.576094,33.763391],[-86.324155,33.938653],[-86.291293,33.982469]]]},"id":"01115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.448291,33.987946],[-90.453768,33.812683],[-90.453768,33.330713],[-90.716661,33.270466],[-90.765953,33.527883],[-90.656414,33.987946],[-90.448291,33.987946]]]},"id":"28133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.643651,33.982469],[-82.566974,33.955084],[-82.216449,33.686714],[-82.424573,33.648375],[-82.479343,33.637421],[-82.643651,33.982469]]]},"id":"13181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.008326,33.960561],[-81.652325,33.812683],[-82.013803,33.53336],[-82.030233,33.544313],[-82.117864,33.599083],[-82.046664,33.955084],[-82.008326,33.960561]]]},"id":"45037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.275779,33.955084],[-84.02384,33.752437],[-84.182671,33.648375],[-84.226487,33.637421],[-84.281256,33.648375],[-84.352456,33.648375],[-84.275779,33.955084],[-84.275779,33.955084]]]},"id":"13089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.738122,33.966038],[-85.529998,33.94413],[-85.798368,33.555267],[-86.143416,33.681237],[-86.066738,33.840068],[-85.738122,33.966038]]]},"id":"01015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.530915,33.960561],[-83.273499,33.845545],[-83.278976,33.763391],[-83.28993,33.736006],[-83.404945,33.697668],[-83.50353,33.81816],[-83.645931,33.905791],[-83.536392,33.966038],[-83.530915,33.960561]]]},"id":"13219"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.398552,33.966038],[-85.387598,33.900315],[-85.338305,33.653852],[-85.305444,33.484067],[-85.645014,33.495021],[-85.853138,33.500498],[-85.798368,33.555267],[-85.529998,33.94413],[-85.398552,33.966038]]]},"id":"01029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.158459,33.938653],[-94.736735,33.703145],[-94.747689,33.330713],[-94.807935,33.363574],[-95.125598,33.390959],[-95.306337,33.380005],[-95.306337,33.380005],[-95.311814,33.878407],[-95.158459,33.938653]]]},"id":"48387"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.455131,33.955084],[-93.372977,33.955084],[-93.104607,33.779822],[-93.115561,33.451205],[-93.247007,33.440252],[-93.3675,33.445728],[-93.482516,33.47859],[-93.455131,33.955084]]]},"id":"05099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.587941,33.894838],[-96.379817,33.725052],[-96.385294,33.396436],[-96.834403,33.40739],[-96.943942,33.418344],[-96.943942,33.949607],[-96.932988,33.955084],[-96.587941,33.894838]]]},"id":"48181"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.943942,33.949607],[-96.943942,33.418344],[-97.382097,33.429298],[-97.486159,33.434775],[-97.486159,33.916745],[-96.943942,33.949607]]]},"id":"48097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.7837,33.94413],[-117.674161,33.87293],[-117.509853,33.505975],[-117.597484,33.385482],[-118.117793,33.741483],[-117.7837,33.94413]]]},"id":"06059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.332382,33.779822],[-79.976381,33.94413],[-79.877796,33.883884],[-80.10235,33.495021],[-80.222843,33.445728],[-80.49669,33.560744],[-80.535029,33.642898],[-80.332382,33.779822]]]},"id":"45027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.446457,33.927699],[-93.95901,33.752437],[-93.95901,33.752437],[-93.827563,33.610037],[-94.041164,33.54979],[-94.484796,33.637421],[-94.479319,33.938653],[-94.446457,33.927699]]]},"id":"05081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.311814,33.878407],[-95.306337,33.380005],[-95.651384,33.484067],[-95.859508,33.462159],[-95.843077,33.840068],[-95.760923,33.87293],[-95.311814,33.878407]]]},"id":"48277"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.799285,33.927699],[-83.645931,33.905791],[-83.50353,33.81816],[-83.509007,33.812683],[-83.678792,33.599083],[-83.914301,33.74696],[-83.980024,33.785299],[-83.799285,33.927699]]]},"id":"13297"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.950806,33.922222],[-87.63862,33.916745],[-87.42502,33.60456],[-87.841267,33.522406],[-87.945329,33.522406],[-87.950806,33.922222]]]},"id":"01057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.310921,33.900315],[-85.048028,33.905791],[-85.037074,33.812683],[-85.338305,33.653852],[-85.387598,33.900315],[-85.310921,33.900315]]]},"id":"13143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.927981,33.900315],[-89.506257,33.867453],[-89.506257,33.719575],[-89.506257,33.67576],[-89.785581,33.67576],[-90.114197,33.67576],[-90.130628,33.67576],[-90.136105,33.719575],[-89.927981,33.900315]]]},"id":"28043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.83398,33.883884],[-79.324625,33.80173],[-79.319148,33.779822],[-79.319148,33.779822],[-79.675149,33.303328],[-80.053058,33.505975],[-80.10235,33.495021],[-79.877796,33.883884],[-79.83398,33.883884]]]},"id":"45089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.843077,33.840068],[-95.859508,33.462159],[-95.859508,33.40739],[-96.297663,33.35262],[-96.385294,33.396436],[-96.379817,33.725052],[-95.843077,33.840068]]]},"id":"48147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.044384,33.796253],[-81.011523,33.878407],[-80.62266,33.741483],[-80.535029,33.642898],[-80.49669,33.560744],[-81.044384,33.708622],[-81.044384,33.796253]]]},"id":"45017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.57017,33.878407],[-81.186785,33.653852],[-81.373001,33.489544],[-81.756386,33.199266],[-81.849494,33.248559],[-82.013803,33.53336],[-81.652325,33.812683],[-81.57017,33.878407]]]},"id":"45003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.685633,33.796253],[-86.576094,33.763391],[-86.515848,33.544313],[-87.025203,33.248559],[-87.063542,33.248559],[-87.266188,33.511452],[-86.954003,33.812683],[-86.685633,33.796253]]]},"id":"01073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.43367,33.834591],[-98.422716,33.834591],[-98.422716,33.467636],[-98.422716,33.396436],[-98.953979,33.396436],[-98.953979,33.834591],[-98.43367,33.834591]]]},"id":"48009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.994598,33.834591],[-99.989121,33.396436],[-100.197245,33.396436],[-100.514907,33.396436],[-100.520384,33.834591],[-100.049367,33.834591],[-99.994598,33.834591]]]},"id":"48269"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.868628,33.834591],[-99.474288,33.736006],[-99.474288,33.396436],[-99.518104,33.396436],[-99.989121,33.396436],[-99.994598,33.834591],[-99.868628,33.834591]]]},"id":"48275"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.90377,33.834591],[-100.520384,33.834591],[-100.514907,33.396436],[-100.816139,33.396436],[-101.040693,33.396436],[-101.040693,33.834591],[-100.90377,33.834591]]]},"id":"48125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.992318,33.834591],[-98.953979,33.834591],[-98.953979,33.396436],[-99.474288,33.396436],[-99.474288,33.736006],[-99.474288,33.834591],[-98.992318,33.834591]]]},"id":"48023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.561003,33.829114],[-101.040693,33.834591],[-101.040693,33.396436],[-101.111894,33.396436],[-101.555526,33.396436],[-101.561003,33.829114]]]},"id":"48107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.571957,33.829114],[-101.561003,33.829114],[-101.555526,33.396436],[-102.075835,33.390959],[-102.086789,33.823637],[-101.571957,33.829114]]]},"id":"48303"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.001438,33.823637],[-102.618052,33.823637],[-102.596144,33.390959],[-103.056207,33.390959],[-103.050731,33.571698],[-103.045254,33.823637],[-103.001438,33.823637]]]},"id":"48079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.618052,33.823637],[-102.086789,33.823637],[-102.075835,33.390959],[-102.366113,33.390959],[-102.596144,33.390959],[-102.618052,33.823637]]]},"id":"48219"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.891006,33.807207],[-92.584298,33.80173],[-92.567867,33.369051],[-92.737652,33.385482],[-92.978637,33.380005],[-93.115561,33.451205],[-93.104607,33.779822],[-92.891006,33.807207]]]},"id":"05103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.509007,33.812683],[-83.50353,33.81816],[-83.404945,33.697668],[-83.278976,33.484067],[-83.278976,33.484067],[-83.536392,33.434775],[-83.684269,33.527883],[-83.678792,33.599083],[-83.509007,33.812683]]]},"id":"13211"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.037074,33.812683],[-84.90015,33.779822],[-84.807042,33.571698],[-84.850858,33.511452],[-85.015166,33.423821],[-85.29449,33.429298],[-85.305444,33.484067],[-85.338305,33.653852],[-85.037074,33.812683]]]},"id":"13045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.887363,33.812683],[-88.717578,33.812683],[-88.514931,33.648375],[-88.673762,33.505975],[-89.018809,33.560744],[-89.03524,33.741483],[-88.887363,33.812683]]]},"id":"28025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.453768,33.812683],[-90.136105,33.719575],[-90.130628,33.67576],[-90.174444,33.330713],[-90.333275,33.303328],[-90.453768,33.330713],[-90.453768,33.812683]]]},"id":"28083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.724888,33.807207],[-84.577011,33.741483],[-84.807042,33.571698],[-84.90015,33.779822],[-84.724888,33.807207]]]},"id":"13097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.584298,33.80173],[-92.332358,33.796253],[-92.332358,33.708622],[-92.348789,33.297851],[-92.567867,33.369051],[-92.584298,33.80173]]]},"id":"05013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.664172,33.790776],[-91.56011,33.785299],[-91.456048,33.566221],[-91.456048,33.390959],[-91.992788,33.396436],[-91.976357,33.703145],[-91.976357,33.790776],[-91.664172,33.790776]]]},"id":"05043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.980024,33.785299],[-83.914301,33.74696],[-84.045747,33.527883],[-84.182671,33.648375],[-84.02384,33.752437],[-83.980024,33.785299]]]},"id":"13247"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.319148,33.779822],[-79.319148,33.779822],[-79.187701,33.703145],[-79.001485,33.571698],[-79.291763,33.111635],[-79.445118,33.215697],[-79.675149,33.303328],[-79.319148,33.779822]]]},"id":"45043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.497089,33.653852],[-109.04798,33.779822],[-109.04798,33.21022],[-109.04798,32.777542],[-109.04798,32.427018],[-109.113704,32.427018],[-109.497089,33.078773],[-109.497089,33.653852]]]},"id":"04011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.28993,33.736006],[-83.278976,33.763391],[-82.994175,33.692191],[-83.010606,33.467636],[-83.16396,33.35262],[-83.278976,33.484067],[-83.404945,33.697668],[-83.28993,33.736006]]]},"id":"13133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.246561,33.74696],[-88.273945,33.53336],[-88.306807,33.286897],[-88.668285,33.286897],[-88.673762,33.505975],[-88.514931,33.648375],[-88.246561,33.74696]]]},"id":"28087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.914301,33.74696],[-83.678792,33.599083],[-83.684269,33.527883],[-83.865008,33.369051],[-83.925255,33.451205],[-84.045747,33.527883],[-83.914301,33.74696]]]},"id":"13217"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.117394,33.741483],[-89.03524,33.741483],[-89.018809,33.560744],[-89.051671,33.560744],[-89.09001,33.53336],[-89.139302,33.53336],[-89.380287,33.462159],[-89.506257,33.67576],[-89.506257,33.719575],[-89.194071,33.736006],[-89.117394,33.741483]]]},"id":"28155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.950359,33.736006],[-82.681989,33.599083],[-82.851774,33.445728],[-83.010606,33.467636],[-83.010606,33.467636],[-82.994175,33.692191],[-82.950359,33.736006]]]},"id":"13265"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.736735,33.703145],[-94.484796,33.637421],[-94.041164,33.54979],[-94.041164,33.270466],[-94.194518,33.297851],[-94.654581,33.270466],[-94.747689,33.330713],[-94.736735,33.703145]]]},"id":"48037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.332358,33.708622],[-91.976357,33.703145],[-91.992788,33.396436],[-92.135188,33.160928],[-92.348789,33.297851],[-92.332358,33.708622]]]},"id":"05011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.044384,33.708622],[-80.49669,33.560744],[-80.222843,33.445728],[-80.359767,33.259513],[-80.502167,33.33619],[-80.792445,33.182835],[-80.797922,33.177358],[-81.10463,33.380005],[-81.225123,33.440252],[-81.373001,33.489544],[-81.186785,33.653852],[-81.044384,33.708622]]]},"id":"45075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.216449,33.686714],[-82.117864,33.599083],[-82.030233,33.544313],[-82.293127,33.35262],[-82.424573,33.648375],[-82.216449,33.686714]]]},"id":"13073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.198185,33.697668],[-86.143416,33.681237],[-85.798368,33.555267],[-85.853138,33.500498],[-85.875046,33.500498],[-86.176277,33.106158],[-86.488463,33.100681],[-86.378924,33.390959],[-86.198185,33.697668]]]},"id":"01121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.506257,33.67576],[-89.380287,33.462159],[-89.451488,33.286897],[-89.643181,33.286897],[-89.785581,33.67576],[-89.506257,33.67576]]]},"id":"28097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.114197,33.67576],[-89.785581,33.67576],[-89.643181,33.286897],[-89.747242,33.215697],[-90.174444,33.330713],[-90.130628,33.67576],[-90.114197,33.67576]]]},"id":"28015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.424573,33.648375],[-82.293127,33.35262],[-82.353373,33.314282],[-82.386235,33.314282],[-82.649128,33.610037],[-82.479343,33.637421],[-82.424573,33.648375]]]},"id":"13189"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.743552,33.500498],[-109.497089,33.653852],[-109.497089,33.078773],[-109.113704,32.427018],[-109.831183,32.427018],[-110.450077,32.427018],[-110.450077,32.514649],[-110.450077,33.193789],[-110.000968,33.577175],[-109.891429,33.566221],[-109.743552,33.500498]]]},"id":"04009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.352456,33.648375],[-84.281256,33.648375],[-84.352456,33.35262],[-84.368887,33.35262],[-84.385318,33.35262],[-84.451041,33.54979],[-84.456518,33.54979],[-84.352456,33.648375]]]},"id":"13063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.226487,33.637421],[-84.182671,33.648375],[-84.045747,33.527883],[-83.925255,33.451205],[-84.100517,33.297851],[-84.352456,33.35262],[-84.281256,33.648375],[-84.226487,33.637421]]]},"id":"13151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.827563,33.610037],[-93.723501,33.484067],[-93.805655,33.018527],[-93.816609,33.018527],[-94.041164,33.018527],[-94.041164,33.270466],[-94.041164,33.54979],[-93.827563,33.610037]]]},"id":"05091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.649128,33.610037],[-82.386235,33.314282],[-82.43005,33.275943],[-82.687466,33.270466],[-82.75319,33.254036],[-82.851774,33.445728],[-82.681989,33.599083],[-82.649128,33.610037]]]},"id":"13301"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.841267,33.522406],[-87.42502,33.60456],[-87.266188,33.511452],[-87.063542,33.248559],[-87.419543,33.002096],[-87.644097,33.007573],[-87.715298,33.007573],[-87.83579,33.155451],[-87.841267,33.522406]]]},"id":"01125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.050731,33.571698],[-103.056207,33.390959],[-103.067161,32.958281],[-103.067161,32.520126],[-103.061684,32.087447],[-103.324578,31.999816],[-103.71344,31.999816],[-103.724394,31.999816],[-103.812025,32.963758],[-103.510794,33.571698],[-103.050731,33.571698]]]},"id":"35025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.051671,33.560744],[-89.018809,33.560744],[-88.673762,33.505975],[-88.668285,33.286897],[-88.810686,33.286897],[-89.09001,33.286897],[-89.09001,33.53336],[-89.051671,33.560744]]]},"id":"28105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.390325,33.560744],[-91.231493,33.560744],[-91.215062,33.527883],[-91.16577,33.01305],[-91.16577,33.002096],[-91.264355,33.007573],[-91.30817,33.007573],[-91.43414,33.007573],[-91.461525,33.007573],[-91.456048,33.390959],[-91.456048,33.566221],[-91.390325,33.560744]]]},"id":"05017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.451041,33.54979],[-84.385318,33.35262],[-84.494857,33.259513],[-84.609872,33.500498],[-84.456518,33.54979],[-84.451041,33.54979]]]},"id":"13113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.515848,33.544313],[-86.378924,33.390959],[-86.488463,33.100681],[-86.515848,33.018527],[-86.882803,33.051389],[-87.025203,33.248559],[-86.515848,33.544313]]]},"id":"01117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.030233,33.544313],[-82.013803,33.53336],[-81.849494,33.248559],[-82.189065,33.292374],[-82.265742,33.264989],[-82.353373,33.314282],[-82.293127,33.35262],[-82.030233,33.544313]]]},"id":"13245"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.273945,33.53336],[-87.945329,33.522406],[-87.841267,33.522406],[-87.83579,33.155451],[-88.169884,32.996619],[-88.339669,32.991142],[-88.306807,33.286897],[-88.273945,33.53336]]]},"id":"01107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.139302,33.53336],[-89.09001,33.53336],[-89.09001,33.286897],[-89.320041,33.106158],[-89.396718,33.286897],[-89.451488,33.286897],[-89.380287,33.462159],[-89.139302,33.53336]]]},"id":"28019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.001462,33.527883],[-90.765953,33.527883],[-90.716661,33.270466],[-90.70023,33.095204],[-90.913831,33.095204],[-90.913831,33.007573],[-91.16577,33.01305],[-91.215062,33.527883],[-91.001462,33.527883]]]},"id":"28151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.684269,33.527883],[-83.536392,33.434775],[-83.547346,33.171881],[-83.815716,33.133543],[-83.821193,33.182835],[-83.865008,33.369051],[-83.684269,33.527883]]]},"id":"13159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.681073,33.511452],[-84.609872,33.500498],[-84.494857,33.259513],[-84.500334,33.221174],[-84.861812,33.193789],[-84.938489,33.226651],[-85.015166,33.423821],[-84.850858,33.511452],[-84.681073,33.511452]]]},"id":"13077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.053058,33.505975],[-79.675149,33.303328],[-79.445118,33.215697],[-79.49441,33.188312],[-79.927088,32.821357],[-80.151643,33.024004],[-80.359767,33.259513],[-80.222843,33.445728],[-80.10235,33.495021],[-80.053058,33.505975]]]},"id":"45015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.476991,33.505975],[-116.085849,33.423821],[-116.107756,32.61871],[-117.126467,32.536556],[-117.597484,33.385482],[-117.509853,33.505975],[-117.476991,33.505975]]]},"id":"06073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.645014,33.495021],[-85.305444,33.484067],[-85.29449,33.429298],[-85.234244,33.128066],[-85.234244,33.106158],[-85.404029,33.106158],[-85.595722,33.106158],[-85.655968,33.106158],[-85.645014,33.495021]]]},"id":"01111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.875046,33.500498],[-85.853138,33.500498],[-85.645014,33.495021],[-85.655968,33.106158],[-86.006492,33.089727],[-86.176277,33.106158],[-85.875046,33.500498]]]},"id":"01027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.651384,33.484067],[-95.306337,33.380005],[-95.306337,33.380005],[-95.306337,33.374528],[-95.492553,33.35262],[-95.859508,33.221174],[-95.859508,33.40739],[-95.859508,33.462159],[-95.651384,33.484067]]]},"id":"48119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.373001,33.489544],[-81.225123,33.440252],[-81.192262,33.117112],[-81.613986,33.095204],[-81.756386,33.199266],[-81.373001,33.489544]]]},"id":"45011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.278976,33.484067],[-83.278976,33.484067],[-83.16396,33.35262],[-83.273499,33.188312],[-83.426853,33.182835],[-83.547346,33.171881],[-83.536392,33.434775],[-83.278976,33.484067]]]},"id":"13237"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.723501,33.484067],[-93.482516,33.47859],[-93.3675,33.445728],[-93.487993,33.018527],[-93.49347,33.018527],[-93.520854,33.018527],[-93.805655,33.018527],[-93.723501,33.484067]]]},"id":"05073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.375233,33.47859],[-106.347849,33.390959],[-106.342372,33.051389],[-107.300836,32.777542],[-107.300836,32.607757],[-107.607545,32.607757],[-108.001885,33.199266],[-107.711607,33.47859],[-106.375233,33.47859]]]},"id":"35051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.010606,33.467636],[-82.851774,33.445728],[-82.75319,33.254036],[-82.747713,33.237605],[-83.054421,33.078773],[-83.273499,33.188312],[-83.16396,33.35262],[-83.010606,33.467636],[-83.010606,33.467636]]]},"id":"13141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.422716,33.467636],[-97.979084,33.467636],[-97.918837,33.434775],[-97.924314,33.002096],[-98.055761,33.002096],[-98.055761,33.002096],[-98.428193,33.007573],[-98.422716,33.396436],[-98.422716,33.467636]]]},"id":"48237"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.578327,33.467636],[-111.041587,33.467636],[-110.778693,32.985665],[-110.450077,33.193789],[-110.450077,32.514649],[-110.696539,32.514649],[-112.202698,32.509172],[-112.202698,33.308805],[-111.583804,33.204743],[-111.578327,33.467636]]]},"id":"04021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113.993657,33.462159],[-113.336425,33.380005],[-113.336425,32.503695],[-113.336425,32.038155],[-114.815198,32.492741],[-114.72209,32.717295],[-114.513967,33.029481],[-113.993657,33.462159]]]},"id":"04027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.247007,33.440252],[-93.115561,33.451205],[-92.978637,33.380005],[-92.989591,33.018527],[-93.236053,33.018527],[-93.487993,33.018527],[-93.3675,33.445728],[-93.247007,33.440252]]]},"id":"05027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.925255,33.451205],[-83.865008,33.369051],[-83.821193,33.182835],[-84.001932,33.204743],[-84.040271,33.204743],[-84.122425,33.204743],[-84.100517,33.297851],[-83.925255,33.451205]]]},"id":"13035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.10463,33.380005],[-80.797922,33.177358],[-81.082723,33.024004],[-81.192262,33.117112],[-81.225123,33.440252],[-81.10463,33.380005]]]},"id":"45009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.50259,33.434775],[-97.486159,33.434775],[-97.382097,33.429298],[-97.398528,32.991142],[-97.535452,32.996619],[-97.546405,32.996619],[-97.924314,33.002096],[-97.918837,33.434775],[-97.50259,33.434775]]]},"id":"48497"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-114.733044,33.434775],[-114.628982,33.434775],[-114.513967,33.029481],[-114.72209,32.717295],[-116.107756,32.61871],[-116.085849,33.423821],[-114.733044,33.434775]]]},"id":"06025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.382097,33.429298],[-96.943942,33.418344],[-96.834403,33.40739],[-96.834403,33.40739],[-96.845357,32.985665],[-96.856311,32.985665],[-97.031573,32.985665],[-97.398528,32.991142],[-97.382097,33.429298]]]},"id":"48121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.015166,33.423821],[-84.938489,33.226651],[-84.938489,33.226651],[-85.234244,33.128066],[-85.29449,33.429298],[-85.015166,33.423821]]]},"id":"13149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.859508,33.40739],[-95.859508,33.221174],[-95.864985,32.980189],[-95.936185,32.837788],[-96.062155,32.837788],[-96.078585,32.837788],[-96.297663,32.843265],[-96.297663,32.980189],[-96.297663,33.35262],[-95.859508,33.40739]]]},"id":"48231"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.834403,33.40739],[-96.834403,33.40739],[-96.385294,33.396436],[-96.297663,33.35262],[-96.297663,32.980189],[-96.440064,32.980189],[-96.516741,32.980189],[-96.845357,32.985665],[-96.834403,33.40739]]]},"id":"48085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.816139,33.396436],[-100.514907,33.396436],[-100.520384,32.963758],[-100.657308,32.963758],[-101.040693,32.969235],[-101.040693,33.396436],[-100.816139,33.396436]]]},"id":"48263"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.518104,33.396436],[-99.474288,33.396436],[-99.468812,32.958281],[-99.611212,32.958281],[-99.989121,32.958281],[-99.989121,33.396436],[-99.518104,33.396436]]]},"id":"48207"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.474288,33.396436],[-98.953979,33.396436],[-98.948502,32.958281],[-99.09638,32.958281],[-99.233303,32.958281],[-99.468812,32.958281],[-99.474288,33.396436]]]},"id":"48447"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.992788,33.396436],[-91.456048,33.390959],[-91.461525,33.007573],[-92.069465,33.007573],[-92.135188,33.160928],[-91.992788,33.396436]]]},"id":"05003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.197245,33.396436],[-99.989121,33.396436],[-99.989121,32.958281],[-100.109614,32.958281],[-100.142475,32.958281],[-100.520384,32.963758],[-100.514907,33.396436],[-100.197245,33.396436]]]},"id":"48433"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.807935,33.363574],[-94.818889,32.980189],[-95.125598,33.034958],[-95.125598,33.390959],[-94.807935,33.363574]]]},"id":"48449"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.953979,33.396436],[-98.422716,33.396436],[-98.428193,33.007573],[-98.57607,32.952804],[-98.762286,32.958281],[-98.948502,32.958281],[-98.953979,33.396436]]]},"id":"48503"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.111894,33.396436],[-101.040693,33.396436],[-101.040693,32.969235],[-101.17214,32.963758],[-101.555526,32.963758],[-101.555526,33.396436],[-101.111894,33.396436]]]},"id":"48169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.555526,33.396436],[-101.555526,32.963758],[-101.692449,32.963758],[-102.075835,32.958281],[-102.075835,33.390959],[-101.555526,33.396436]]]},"id":"48305"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.728954,33.390959],[-105.318184,33.133543],[-105.356522,32.520126],[-104.852644,32.520126],[-104.847167,31.999816],[-104.918367,31.999816],[-105.997324,31.999816],[-106.375233,31.999816],[-106.342372,33.051389],[-106.347849,33.390959],[-105.728954,33.390959]]]},"id":"35035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.366113,33.390959],[-102.075835,33.390959],[-102.075835,32.958281],[-102.207282,32.958281],[-102.596144,32.958281],[-102.596144,33.390959],[-102.366113,33.390959]]]},"id":"48445"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.306337,33.380005],[-95.125598,33.390959],[-95.125598,33.034958],[-95.152983,33.01305],[-95.306337,32.963758],[-95.306337,33.374528],[-95.306337,33.380005]]]},"id":"48159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.056207,33.390959],[-102.596144,33.390959],[-102.596144,32.958281],[-103.067161,32.958281],[-103.056207,33.390959]]]},"id":"48501"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.737652,33.385482],[-92.567867,33.369051],[-92.348789,33.297851],[-92.135188,33.160928],[-92.069465,33.007573],[-92.710267,33.01305],[-92.726698,33.01305],[-92.989591,33.018527],[-92.978637,33.380005],[-92.737652,33.385482]]]},"id":"05139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.492553,33.35262],[-95.306337,33.374528],[-95.306337,32.963758],[-95.667815,32.958281],[-95.864985,32.980189],[-95.859508,33.221174],[-95.492553,33.35262]]]},"id":"48223"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.174444,33.330713],[-89.747242,33.215697],[-89.96632,32.881604],[-90.366137,33.01305],[-90.333275,33.303328],[-90.174444,33.330713]]]},"id":"28051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.807935,33.363574],[-94.747689,33.330713],[-94.654581,33.270466],[-94.654581,32.881604],[-94.703873,32.881604],[-94.720304,32.903511],[-94.818889,32.980189],[-94.807935,33.363574]]]},"id":"48343"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.368887,33.35262],[-84.352456,33.35262],[-84.100517,33.297851],[-84.122425,33.204743],[-84.248394,33.188312],[-84.494857,33.182835],[-84.500334,33.221174],[-84.494857,33.259513],[-84.385318,33.35262],[-84.368887,33.35262]]]},"id":"13255"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.502167,33.33619],[-80.359767,33.259513],[-80.151643,33.024004],[-80.403582,32.859696],[-80.792445,33.182835],[-80.502167,33.33619]]]},"id":"45035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.453768,33.330713],[-90.333275,33.303328],[-90.366137,33.01305],[-90.656414,32.919942],[-90.70023,33.095204],[-90.716661,33.270466],[-90.453768,33.330713]]]},"id":"28053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.687466,33.270466],[-82.43005,33.275943],[-82.660082,33.128066],[-82.747713,33.237605],[-82.75319,33.254036],[-82.687466,33.270466]]]},"id":"13125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.386235,33.314282],[-82.353373,33.314282],[-82.265742,33.264989],[-82.315034,32.837788],[-82.435527,32.761111],[-82.523158,32.821357],[-82.660082,33.128066],[-82.43005,33.275943],[-82.386235,33.314282]]]},"id":"13163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.194518,33.297851],[-94.041164,33.270466],[-94.041164,33.018527],[-94.041164,32.881604],[-94.249287,32.881604],[-94.654581,32.881604],[-94.654581,33.270466],[-94.194518,33.297851]]]},"id":"48067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.189065,33.292374],[-81.849494,33.248559],[-81.756386,33.199266],[-81.613986,33.095204],[-81.542786,33.045912],[-81.76734,32.908988],[-81.860448,32.952804],[-82.145249,32.810403],[-82.315034,32.837788],[-82.265742,33.264989],[-82.189065,33.292374]]]},"id":"13033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.668285,33.286897],[-88.306807,33.286897],[-88.339669,32.991142],[-88.345146,32.930896],[-88.810686,32.925419],[-88.810686,33.286897],[-88.668285,33.286897]]]},"id":"28103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.09001,33.286897],[-88.810686,33.286897],[-88.810686,32.925419],[-88.914747,32.925419],[-89.155733,32.930896],[-89.320041,32.930896],[-89.320041,33.106158],[-89.09001,33.286897]]]},"id":"28159"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.396718,33.286897],[-89.320041,33.106158],[-89.320041,32.930896],[-89.473395,32.930896],[-89.730812,32.887081],[-89.96632,32.881604],[-89.747242,33.215697],[-89.643181,33.286897],[-89.451488,33.286897],[-89.396718,33.286897]]]},"id":"28007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.063542,33.248559],[-87.025203,33.248559],[-86.882803,33.051389],[-87.019726,32.837788],[-87.326435,32.876127],[-87.419543,32.876127],[-87.419543,33.002096],[-87.063542,33.248559]]]},"id":"01007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.747713,33.237605],[-82.660082,33.128066],[-82.523158,32.821357],[-82.944882,32.761111],[-83.076329,32.947327],[-83.054421,33.078773],[-82.747713,33.237605]]]},"id":"13303"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.861812,33.193789],[-84.500334,33.221174],[-84.494857,33.182835],[-84.527718,32.969235],[-84.50581,32.881604],[-84.70298,32.843265],[-84.861812,32.87065],[-84.861812,32.87065],[-84.861812,33.193789]]]},"id":"13199"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.938489,33.226651],[-84.938489,33.226651],[-84.861812,33.193789],[-84.861812,32.87065],[-85.184951,32.87065],[-85.234244,33.106158],[-85.234244,33.128066],[-84.938489,33.226651]]]},"id":"13285"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.49441,33.188312],[-79.445118,33.215697],[-79.291763,33.111635],[-80.250228,32.531079],[-80.403582,32.859696],[-80.151643,33.024004],[-79.927088,32.821357],[-79.49441,33.188312]]]},"id":"45019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-108.182624,33.199266],[-108.001885,33.199266],[-107.607545,32.607757],[-108.231916,32.514649],[-108.215485,31.862893],[-108.522194,31.862893],[-108.538625,32.514649],[-109.04798,32.777542],[-109.04798,33.21022],[-108.182624,33.199266]]]},"id":"35017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.494857,33.182835],[-84.248394,33.188312],[-84.270302,32.991142],[-84.36341,32.991142],[-84.527718,32.969235],[-84.494857,33.182835]]]},"id":"13231"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.040271,33.204743],[-84.122425,32.930896],[-84.270302,32.991142],[-84.248394,33.188312],[-84.122425,33.204743],[-84.040271,33.204743]]]},"id":"13171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.001932,33.204743],[-83.821193,33.182835],[-83.815716,33.133543],[-83.711654,32.952804],[-83.722608,32.952804],[-83.892393,32.848742],[-84.122425,32.848742],[-84.122425,32.930896],[-84.040271,33.204743],[-84.001932,33.204743]]]},"id":"13207"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.273499,33.188312],[-83.054421,33.078773],[-83.076329,32.947327],[-83.355653,32.925419],[-83.426853,33.182835],[-83.273499,33.188312]]]},"id":"13009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.426853,33.182835],[-83.355653,32.925419],[-83.404945,32.898034],[-83.514484,32.843265],[-83.711654,32.952804],[-83.815716,33.133543],[-83.547346,33.171881],[-83.426853,33.182835]]]},"id":"13169"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.792445,33.182835],[-80.403582,32.859696],[-80.250228,32.531079],[-80.474782,32.487264],[-80.825307,32.706342],[-81.055338,33.002096],[-81.082723,33.024004],[-80.797922,33.177358],[-80.792445,33.182835]]]},"id":"45029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.613986,33.095204],[-81.192262,33.117112],[-81.082723,33.024004],[-81.411339,32.74468],[-81.542786,33.045912],[-81.613986,33.095204]]]},"id":"45005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.83579,33.155451],[-87.715298,33.007573],[-87.813882,32.525602],[-87.852221,32.531079],[-88.169884,32.996619],[-87.83579,33.155451]]]},"id":"01063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.404029,33.106158],[-85.234244,33.106158],[-85.184951,32.87065],[-85.130182,32.74468],[-85.184951,32.74468],[-85.595722,32.728249],[-85.595722,33.106158],[-85.404029,33.106158]]]},"id":"01017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.655968,33.106158],[-85.595722,33.106158],[-85.595722,32.728249],[-85.694307,32.596803],[-85.885999,32.492741],[-86.006492,32.755634],[-86.006492,33.089727],[-85.655968,33.106158]]]},"id":"01123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.176277,33.106158],[-86.006492,33.089727],[-86.006492,32.755634],[-86.378924,32.755634],[-86.515848,33.018527],[-86.488463,33.100681],[-86.176277,33.106158]]]},"id":"01037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.913831,33.095204],[-90.70023,33.095204],[-90.656414,32.919942],[-90.722138,32.662526],[-90.913831,33.007573],[-90.913831,33.095204]]]},"id":"28125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.125598,33.034958],[-94.818889,32.980189],[-94.720304,32.903511],[-94.780551,32.903511],[-95.152983,32.903511],[-95.152983,33.01305],[-95.125598,33.034958]]]},"id":"48063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.515848,33.018527],[-86.378924,32.755634],[-86.411786,32.706342],[-86.915664,32.662526],[-87.019726,32.728249],[-87.019726,32.837788],[-86.882803,33.051389],[-86.515848,33.018527]]]},"id":"01021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-106.342372,33.051389],[-106.375233,31.999816],[-106.528588,31.786216],[-107.295359,31.786216],[-107.300836,32.607757],[-107.300836,32.777542],[-106.342372,33.051389]]]},"id":"35013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.542786,33.045912],[-81.411339,32.74468],[-81.389431,32.596803],[-81.548263,32.487264],[-81.827587,32.651572],[-81.838541,32.651572],[-81.76734,32.908988],[-81.542786,33.045912]]]},"id":"13251"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.055338,33.002096],[-80.825307,32.706342],[-80.869122,32.662526],[-81.142969,32.657049],[-81.279893,32.558464],[-81.389431,32.596803],[-81.411339,32.74468],[-81.082723,33.024004],[-81.055338,33.002096]]]},"id":"45049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.366137,33.01305],[-89.96632,32.881604],[-90.448291,32.574895],[-90.486629,32.542033],[-90.552353,32.509172],[-90.722138,32.61871],[-90.722138,32.662526],[-90.656414,32.919942],[-90.366137,33.01305]]]},"id":"28163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.805655,33.018527],[-93.520854,33.018527],[-93.372977,32.410587],[-93.427746,32.235325],[-93.471562,32.235325],[-93.816609,33.018527],[-93.805655,33.018527]]]},"id":"22015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.816609,33.018527],[-93.471562,32.235325],[-93.613962,32.235325],[-93.750886,32.339387],[-94.041164,32.196986],[-94.041164,32.394156],[-94.041164,32.695388],[-94.041164,32.881604],[-94.041164,33.018527],[-93.816609,33.018527]]]},"id":"22017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.49347,33.018527],[-93.487993,33.018527],[-93.236053,33.018527],[-93.181284,32.585849],[-93.372977,32.410587],[-93.520854,33.018527],[-93.49347,33.018527]]]},"id":"22119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.236053,33.018527],[-92.989591,33.018527],[-92.726698,33.01305],[-92.726698,32.761111],[-92.880052,32.585849],[-92.912914,32.585849],[-93.181284,32.585849],[-93.236053,33.018527]]]},"id":"22027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.710267,33.01305],[-92.069465,33.007573],[-92.063988,32.722772],[-92.414512,32.580372],[-92.726698,32.761111],[-92.726698,33.01305],[-92.710267,33.01305]]]},"id":"22111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.152983,33.01305],[-95.152983,32.903511],[-95.152983,32.569418],[-95.574707,32.67348],[-95.596615,32.684434],[-95.634953,32.722772],[-95.667815,32.958281],[-95.306337,32.963758],[-95.152983,33.01305]]]},"id":"48499"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.913831,33.007573],[-90.722138,32.662526],[-90.722138,32.61871],[-91.045277,32.574895],[-91.16577,33.002096],[-91.16577,33.01305],[-90.913831,33.007573]]]},"id":"28055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.076329,32.947327],[-82.944882,32.761111],[-82.955836,32.706342],[-83.224206,32.585849],[-83.393992,32.876127],[-83.404945,32.898034],[-83.355653,32.925419],[-83.076329,32.947327]]]},"id":"13319"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.069465,33.007573],[-91.461525,33.007573],[-91.43414,33.007573],[-91.636787,32.668003],[-91.910634,32.503695],[-91.998265,32.706342],[-92.063988,32.722772],[-92.069465,33.007573]]]},"id":"22067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.428193,33.007573],[-98.055761,33.002096],[-98.066715,32.558464],[-98.066715,32.509172],[-98.477485,32.514649],[-98.57607,32.514649],[-98.57607,32.952804],[-98.428193,33.007573]]]},"id":"48363"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.644097,33.007573],[-87.419543,33.002096],[-87.419543,32.876127],[-87.523605,32.481787],[-87.813882,32.525602],[-87.715298,33.007573],[-87.644097,33.007573]]]},"id":"01065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.30817,33.007573],[-91.264355,33.007573],[-91.445094,32.580372],[-91.598448,32.668003],[-91.636787,32.668003],[-91.43414,33.007573],[-91.30817,33.007573]]]},"id":"22123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.16577,33.002096],[-91.045277,32.574895],[-91.067185,32.563941],[-91.368417,32.536556],[-91.456048,32.536556],[-91.445094,32.580372],[-91.264355,33.007573],[-91.16577,33.002096]]]},"id":"22035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.055761,33.002096],[-97.924314,33.002096],[-97.546405,32.996619],[-97.551882,32.552987],[-97.617606,32.552987],[-98.066715,32.558464],[-98.055761,33.002096],[-98.055761,33.002096]]]},"id":"48367"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.36341,32.991142],[-84.270302,32.991142],[-84.122425,32.930896],[-84.122425,32.848742],[-84.204579,32.689911],[-84.286733,32.750157],[-84.50581,32.881604],[-84.527718,32.969235],[-84.36341,32.991142]]]},"id":"13293"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.339669,32.991142],[-88.169884,32.996619],[-87.852221,32.531079],[-87.928898,32.312002],[-87.994621,32.312002],[-88.421823,32.306525],[-88.388961,32.580372],[-88.345146,32.930896],[-88.339669,32.991142]]]},"id":"01119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.535452,32.996619],[-97.398528,32.991142],[-97.031573,32.985665],[-97.03705,32.54751],[-97.086342,32.54751],[-97.551882,32.552987],[-97.546405,32.996619],[-97.535452,32.996619]]]},"id":"48439"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.856311,32.985665],[-96.845357,32.985665],[-96.516741,32.980189],[-96.516741,32.81588],[-96.527695,32.54751],[-97.03705,32.54751],[-97.031573,32.985665],[-96.856311,32.985665]]]},"id":"48113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.440064,32.980189],[-96.297663,32.980189],[-96.297663,32.843265],[-96.516741,32.81588],[-96.516741,32.980189],[-96.440064,32.980189]]]},"id":"48397"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.864985,32.980189],[-95.667815,32.958281],[-95.634953,32.722772],[-95.936185,32.837788],[-95.864985,32.980189]]]},"id":"48379"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.040693,32.969235],[-100.657308,32.963758],[-100.662785,32.525602],[-101.17214,32.525602],[-101.17214,32.963758],[-101.040693,32.969235]]]},"id":"48415"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.102303,32.963758],[-103.812025,32.963758],[-103.724394,31.999816],[-103.98181,31.999816],[-104.025626,31.999816],[-104.847167,31.999816],[-104.852644,32.520126],[-104.84169,32.963758],[-104.102303,32.963758]]]},"id":"35015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.17214,32.963758],[-101.17214,32.525602],[-101.17214,32.525602],[-101.686972,32.525602],[-101.692449,32.963758],[-101.555526,32.963758],[-101.17214,32.963758]]]},"id":"48033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.520384,32.963758],[-100.142475,32.958281],[-100.147952,32.520126],[-100.662785,32.525602],[-100.657308,32.963758],[-100.520384,32.963758]]]},"id":"48151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.692449,32.963758],[-101.686972,32.525602],[-102.201805,32.525602],[-102.207282,32.958281],[-102.075835,32.958281],[-101.692449,32.963758]]]},"id":"48115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.109614,32.958281],[-99.989121,32.958281],[-99.611212,32.958281],[-99.611212,32.514649],[-99.627643,32.514649],[-100.136998,32.520126],[-100.147952,32.520126],[-100.142475,32.958281],[-100.109614,32.958281]]]},"id":"48253"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.067161,32.958281],[-102.596144,32.958281],[-102.207282,32.958281],[-102.201805,32.525602],[-102.212759,32.525602],[-102.995961,32.525602],[-103.067161,32.520126],[-103.067161,32.958281]]]},"id":"48165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.762286,32.958281],[-98.57607,32.952804],[-98.57607,32.514649],[-98.740378,32.514649],[-99.09638,32.514649],[-99.09638,32.958281],[-98.948502,32.958281],[-98.762286,32.958281]]]},"id":"48429"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.233303,32.958281],[-99.09638,32.958281],[-99.09638,32.514649],[-99.11281,32.514649],[-99.194965,32.514649],[-99.611212,32.514649],[-99.611212,32.958281],[-99.468812,32.958281],[-99.233303,32.958281]]]},"id":"48417"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.860448,32.952804],[-81.76734,32.908988],[-81.838541,32.651572],[-82.002849,32.607757],[-82.145249,32.810403],[-81.860448,32.952804]]]},"id":"13165"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.722608,32.952804],[-83.711654,32.952804],[-83.514484,32.843265],[-83.596638,32.662526],[-83.7007,32.689911],[-83.892393,32.848742],[-83.722608,32.952804]]]},"id":"13021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.155733,32.930896],[-88.914747,32.925419],[-88.914747,32.574895],[-89.133825,32.574895],[-89.320041,32.574895],[-89.320041,32.930896],[-89.155733,32.930896]]]},"id":"28099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.473395,32.930896],[-89.320041,32.930896],[-89.320041,32.574895],[-89.320041,32.574895],[-89.730812,32.635141],[-89.730812,32.887081],[-89.473395,32.930896]]]},"id":"28079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.345146,32.930896],[-88.388961,32.580372],[-88.651854,32.574895],[-88.914747,32.574895],[-88.914747,32.925419],[-88.810686,32.925419],[-88.345146,32.930896]]]},"id":"28069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.780551,32.903511],[-94.720304,32.903511],[-94.703873,32.881604],[-94.703873,32.793973],[-94.703873,32.651572],[-94.988674,32.536556],[-95.152983,32.569418],[-95.152983,32.903511],[-94.780551,32.903511]]]},"id":"48459"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.393992,32.876127],[-83.224206,32.585849],[-83.498053,32.454402],[-83.596638,32.662526],[-83.514484,32.843265],[-83.404945,32.898034],[-83.393992,32.876127]]]},"id":"13289"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.96632,32.881604],[-89.730812,32.887081],[-89.730812,32.635141],[-89.785581,32.585849],[-90.03752,32.448925],[-90.064905,32.399633],[-90.448291,32.574895],[-89.96632,32.881604]]]},"id":"28089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.50581,32.881604],[-84.286733,32.750157],[-84.445564,32.563941],[-84.637257,32.536556],[-84.692026,32.520126],[-84.692026,32.585849],[-84.70298,32.843265],[-84.50581,32.881604]]]},"id":"13263"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.249287,32.881604],[-94.041164,32.881604],[-94.041164,32.695388],[-94.703873,32.793973],[-94.703873,32.881604],[-94.654581,32.881604],[-94.249287,32.881604]]]},"id":"48315"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.326435,32.876127],[-87.019726,32.837788],[-87.019726,32.728249],[-87.025203,32.717295],[-87.474312,32.306525],[-87.523605,32.481787],[-87.419543,32.876127],[-87.326435,32.876127]]]},"id":"01105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.861812,32.87065],[-84.70298,32.843265],[-84.692026,32.585849],[-85.02612,32.607757],[-85.080889,32.607757],[-85.130182,32.74468],[-85.184951,32.87065],[-84.861812,32.87065],[-84.861812,32.87065]]]},"id":"13145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.122425,32.848742],[-83.892393,32.848742],[-83.7007,32.689911],[-83.7007,32.689911],[-83.766424,32.695388],[-84.001932,32.531079],[-84.204579,32.689911],[-84.122425,32.848742]]]},"id":"13079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.297663,32.843265],[-96.078585,32.837788],[-96.078585,32.355817],[-96.215509,32.361294],[-96.451017,32.361294],[-96.527695,32.54751],[-96.516741,32.81588],[-96.297663,32.843265]]]},"id":"48257"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.315034,32.837788],[-82.145249,32.810403],[-82.002849,32.607757],[-82.030233,32.536556],[-82.23288,32.317479],[-82.408142,32.355817],[-82.550543,32.498218],[-82.649128,32.514649],[-82.435527,32.761111],[-82.315034,32.837788]]]},"id":"13107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.062155,32.837788],[-95.936185,32.837788],[-95.634953,32.722772],[-95.596615,32.684434],[-95.448737,32.355817],[-96.078585,32.355817],[-96.078585,32.837788],[-96.062155,32.837788]]]},"id":"48467"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.523158,32.821357],[-82.435527,32.761111],[-82.649128,32.514649],[-82.955836,32.706342],[-82.944882,32.761111],[-82.523158,32.821357]]]},"id":"13167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.703873,32.793973],[-94.041164,32.695388],[-94.041164,32.394156],[-94.462888,32.377725],[-94.490273,32.394156],[-94.577904,32.394156],[-94.703873,32.651572],[-94.703873,32.793973]]]},"id":"48203"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.04798,32.777542],[-108.538625,32.514649],[-108.522194,31.862893],[-108.215485,31.862893],[-108.210008,31.786216],[-108.210008,31.331629],[-109.04798,31.331629],[-109.04798,32.427018],[-109.04798,32.777542]]]},"id":"35023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.006492,32.755634],[-85.885999,32.492741],[-86.022923,32.421541],[-86.307724,32.416064],[-86.411786,32.410587],[-86.411786,32.706342],[-86.378924,32.755634],[-86.006492,32.755634]]]},"id":"01051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.726698,32.761111],[-92.414512,32.580372],[-92.414512,32.498218],[-92.578821,32.498218],[-92.77599,32.454402],[-92.880052,32.585849],[-92.726698,32.761111]]]},"id":"22061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.142969,32.657049],[-80.869122,32.662526],[-80.880076,32.08197],[-80.885553,32.032678],[-81.148446,32.224371],[-81.279893,32.558464],[-81.142969,32.657049]]]},"id":"45053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.286733,32.750157],[-84.204579,32.689911],[-84.001932,32.531079],[-84.051224,32.520126],[-84.253871,32.372248],[-84.36341,32.399633],[-84.390795,32.416064],[-84.445564,32.563941],[-84.286733,32.750157]]]},"id":"13269"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.184951,32.74468],[-85.130182,32.74468],[-85.080889,32.607757],[-84.998735,32.509172],[-85.020643,32.509172],[-85.431413,32.410587],[-85.694307,32.580372],[-85.694307,32.596803],[-85.595722,32.728249],[-85.184951,32.74468]]]},"id":"01081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.025203,32.717295],[-87.019726,32.728249],[-86.915664,32.662526],[-86.817079,32.339387],[-86.90471,32.049109],[-87.277142,32.147694],[-87.474312,32.262709],[-87.474312,32.306525],[-87.025203,32.717295]]]},"id":"01047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.998265,32.706342],[-91.910634,32.503695],[-92.036603,32.27914],[-92.16805,32.27914],[-92.31045,32.27914],[-92.414512,32.498218],[-92.414512,32.580372],[-92.063988,32.722772],[-91.998265,32.706342]]]},"id":"22073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.224206,32.585849],[-82.955836,32.706342],[-82.649128,32.514649],[-82.720328,32.312002],[-82.884636,32.196986],[-83.136575,32.421541],[-83.224206,32.585849]]]},"id":"13175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.411786,32.706342],[-86.411786,32.410587],[-86.499417,32.344863],[-86.817079,32.339387],[-86.915664,32.662526],[-86.411786,32.706342]]]},"id":"01001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.825307,32.706342],[-80.474782,32.487264],[-80.880076,32.08197],[-80.869122,32.662526],[-80.825307,32.706342]]]},"id":"45013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.766424,32.695388],[-83.7007,32.689911],[-83.848578,32.465356],[-84.018363,32.503695],[-84.007409,32.520126],[-84.001932,32.531079],[-83.766424,32.695388]]]},"id":"13225"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.7007,32.689911],[-83.7007,32.689911],[-83.596638,32.662526],[-83.498053,32.454402],[-83.498053,32.399633],[-83.613069,32.290094],[-83.848578,32.290094],[-83.848578,32.465356],[-83.7007,32.689911]]]},"id":"13153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.574707,32.67348],[-95.152983,32.569418],[-94.988674,32.536556],[-94.988674,32.366771],[-94.983197,32.13674],[-95.459691,32.13674],[-95.448737,32.355817],[-95.596615,32.684434],[-95.574707,32.67348]]]},"id":"48423"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.598448,32.668003],[-91.445094,32.580372],[-91.456048,32.536556],[-91.477956,32.40511],[-91.57654,32.40511],[-91.894203,32.153171],[-92.036603,32.27914],[-91.910634,32.503695],[-91.636787,32.668003],[-91.598448,32.668003]]]},"id":"22083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.703873,32.651572],[-94.577904,32.394156],[-94.988674,32.366771],[-94.988674,32.536556],[-94.703873,32.651572]]]},"id":"48183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.827587,32.651572],[-81.548263,32.487264],[-81.433247,32.240802],[-81.783771,32.153171],[-81.969987,32.268186],[-82.030233,32.536556],[-82.002849,32.607757],[-81.838541,32.651572],[-81.827587,32.651572]]]},"id":"13031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.730812,32.635141],[-89.320041,32.574895],[-89.320041,32.224371],[-89.456965,32.224371],[-89.730812,32.224371],[-89.785581,32.585849],[-89.730812,32.635141]]]},"id":"28123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.045277,32.574895],[-90.722138,32.61871],[-90.552353,32.509172],[-90.727615,32.224371],[-91.028846,32.114832],[-91.028846,32.120309],[-91.050754,32.125786],[-91.121954,32.213417],[-91.067185,32.563941],[-91.045277,32.574895]]]},"id":"28149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.02612,32.607757],[-84.692026,32.585849],[-84.692026,32.520126],[-84.982304,32.372248],[-84.998735,32.509172],[-85.080889,32.607757],[-85.02612,32.607757]]]},"id":"13215"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.607545,32.607757],[-107.300836,32.607757],[-107.295359,31.786216],[-108.210008,31.786216],[-108.215485,31.862893],[-108.231916,32.514649],[-107.607545,32.607757]]]},"id":"35029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.694307,32.580372],[-85.431413,32.410587],[-85.431413,32.235325],[-85.918861,32.273663],[-86.022923,32.421541],[-85.885999,32.492741],[-85.694307,32.596803],[-85.694307,32.580372]]]},"id":"01087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.389431,32.596803],[-81.279893,32.558464],[-81.148446,32.224371],[-81.1594,32.229848],[-81.389431,32.098401],[-81.42777,32.235325],[-81.433247,32.240802],[-81.548263,32.487264],[-81.389431,32.596803]]]},"id":"13103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.03752,32.448925],[-89.785581,32.585849],[-89.730812,32.224371],[-89.730812,32.049109],[-90.190875,32.049109],[-90.229213,32.049109],[-90.064905,32.399633],[-90.03752,32.448925]]]},"id":"28121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.912914,32.585849],[-92.880052,32.585849],[-92.77599,32.454402],[-92.814329,32.147694],[-92.940299,32.147694],[-93.131992,32.147694],[-93.186761,32.147694],[-93.427746,32.235325],[-93.372977,32.410587],[-93.181284,32.585849],[-92.912914,32.585849]]]},"id":"22013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.224206,32.585849],[-83.136575,32.421541],[-83.344699,32.273663],[-83.498053,32.399633],[-83.498053,32.454402],[-83.224206,32.585849]]]},"id":"13023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.651854,32.574895],[-88.388961,32.580372],[-88.421823,32.306525],[-88.432777,32.229848],[-88.914747,32.224371],[-88.914747,32.574895],[-88.651854,32.574895]]]},"id":"28075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.133825,32.574895],[-88.914747,32.574895],[-88.914747,32.224371],[-89.018809,32.224371],[-89.320041,32.224371],[-89.320041,32.574895],[-89.320041,32.574895],[-89.133825,32.574895]]]},"id":"28101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.486629,32.542033],[-90.448291,32.574895],[-90.064905,32.399633],[-90.229213,32.049109],[-90.716661,32.049109],[-90.727615,32.224371],[-90.552353,32.509172],[-90.486629,32.542033]]]},"id":"28049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.368417,32.536556],[-91.067185,32.563941],[-91.121954,32.213417],[-91.494386,32.202463],[-91.477956,32.40511],[-91.456048,32.536556],[-91.368417,32.536556]]]},"id":"22065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.637257,32.536556],[-84.445564,32.563941],[-84.390795,32.416064],[-84.429133,32.164124],[-84.429133,32.13674],[-84.648211,32.235325],[-84.659165,32.235325],[-84.637257,32.536556]]]},"id":"13197"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.030233,32.536556],[-81.969987,32.268186],[-82.024756,32.27914],[-82.23288,32.317479],[-82.030233,32.536556]]]},"id":"13043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.066715,32.558464],[-97.617606,32.552987],[-97.617606,32.317479],[-97.946222,32.235325],[-98.066715,32.509172],[-98.066715,32.558464]]]},"id":"48221"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.551882,32.552987],[-97.086342,32.54751],[-97.086342,32.268186],[-97.113727,32.257232],[-97.475205,32.175078],[-97.617606,32.202463],[-97.617606,32.317479],[-97.617606,32.552987],[-97.551882,32.552987]]]},"id":"48251"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.086342,32.54751],[-97.03705,32.54751],[-96.527695,32.54751],[-96.451017,32.361294],[-96.385294,32.328433],[-96.89465,32.076493],[-97.086342,32.268186],[-97.086342,32.54751]]]},"id":"48139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.813882,32.525602],[-87.523605,32.481787],[-87.474312,32.306525],[-87.474312,32.262709],[-87.666005,31.988862],[-87.819359,31.988862],[-88.071299,31.988862],[-87.928898,32.312002],[-87.852221,32.531079],[-87.813882,32.525602]]]},"id":"01091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.637257,32.536556],[-84.659165,32.235325],[-84.922058,32.229848],[-84.982304,32.372248],[-84.692026,32.520126],[-84.637257,32.536556]]]},"id":"13053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.001932,32.531079],[-84.007409,32.520126],[-84.051224,32.520126],[-84.051224,32.520126],[-84.001932,32.531079]]]},"id":"13193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.662785,32.525602],[-100.662785,32.087447],[-100.821616,32.087447],[-101.183094,32.087447],[-101.17214,32.525602],[-101.17214,32.525602],[-100.662785,32.525602]]]},"id":"48335"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.686972,32.525602],[-101.692449,32.087447],[-101.747219,32.087447],[-101.774603,32.087447],[-101.933435,32.087447],[-102.212759,32.087447],[-102.212759,32.525602],[-102.201805,32.525602],[-101.686972,32.525602]]]},"id":"48317"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.147952,32.520126],[-100.153429,32.08197],[-100.235583,32.08197],[-100.662785,32.087447],[-100.662785,32.525602],[-100.147952,32.520126]]]},"id":"48353"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.17214,32.525602],[-101.183094,32.087447],[-101.265248,32.087447],[-101.692449,32.087447],[-101.686972,32.525602],[-101.17214,32.525602]]]},"id":"48227"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.995961,32.525602],[-102.212759,32.525602],[-102.212759,32.087447],[-102.289436,32.087447],[-102.798791,32.087447],[-103.061684,32.087447],[-103.067161,32.520126],[-102.995961,32.525602]]]},"id":"48003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.136998,32.520126],[-99.627643,32.514649],[-99.63312,32.08197],[-99.715274,32.08197],[-100.054844,32.08197],[-100.153429,32.08197],[-100.147952,32.520126],[-100.136998,32.520126]]]},"id":"48441"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.018363,32.503695],[-83.848578,32.465356],[-83.848578,32.290094],[-84.029317,32.169601],[-84.182671,32.229848],[-84.253871,32.372248],[-84.051224,32.520126],[-84.018363,32.503695]]]},"id":"13193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.051224,32.520126],[-84.007409,32.520126],[-84.018363,32.503695],[-84.051224,32.520126],[-84.051224,32.520126]]]},"id":"13269"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.740378,32.514649],[-98.57607,32.514649],[-98.477485,32.514649],[-98.548686,32.262709],[-98.926594,32.076493],[-99.118287,32.08197],[-99.11281,32.514649],[-99.09638,32.514649],[-98.740378,32.514649]]]},"id":"48133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.194965,32.514649],[-99.11281,32.514649],[-99.118287,32.08197],[-99.194965,32.08197],[-99.63312,32.08197],[-99.627643,32.514649],[-99.611212,32.514649],[-99.194965,32.514649]]]},"id":"48059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.696539,32.514649],[-110.450077,32.514649],[-110.450077,32.427018],[-110.450077,31.731446],[-110.789647,31.731446],[-111.364726,31.424737],[-113.336425,32.038155],[-113.336425,32.503695],[-112.202698,32.509172],[-110.696539,32.514649]]]},"id":"04019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.066715,32.509172],[-97.946222,32.235325],[-97.864068,32.087447],[-98.006468,32.016247],[-98.209115,31.917662],[-98.548686,32.262709],[-98.477485,32.514649],[-98.066715,32.509172]]]},"id":"48143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.550543,32.498218],[-82.408142,32.355817],[-82.654605,32.295571],[-82.720328,32.312002],[-82.649128,32.514649],[-82.550543,32.498218]]]},"id":"13283"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.020643,32.509172],[-84.998735,32.509172],[-84.982304,32.372248],[-84.922058,32.229848],[-85.053504,32.06554],[-85.354736,32.147694],[-85.409506,32.147694],[-85.431413,32.235325],[-85.431413,32.410587],[-85.020643,32.509172]]]},"id":"01113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.307724,32.416064],[-86.022923,32.421541],[-85.918861,32.273663],[-85.995538,32.049109],[-86.192708,31.966955],[-86.302247,31.988862],[-86.406309,32.049109],[-86.499417,32.344863],[-86.411786,32.410587],[-86.307724,32.416064]]]},"id":"01101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.578821,32.498218],[-92.414512,32.498218],[-92.31045,32.27914],[-92.31045,32.147694],[-92.814329,32.147694],[-92.77599,32.454402],[-92.578821,32.498218]]]},"id":"22049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.136575,32.421541],[-82.884636,32.196986],[-82.928452,32.13674],[-82.950359,32.120309],[-83.207776,31.901231],[-83.339222,32.103878],[-83.344699,32.273663],[-83.136575,32.421541]]]},"id":"13091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.36341,32.399633],[-84.253871,32.372248],[-84.182671,32.229848],[-84.429133,32.164124],[-84.390795,32.416064],[-84.36341,32.399633]]]},"id":"13249"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.831183,32.427018],[-109.113704,32.427018],[-109.04798,32.427018],[-109.04798,31.331629],[-110.461031,31.331629],[-110.450077,31.731446],[-110.450077,32.427018],[-109.831183,32.427018]]]},"id":"04003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.577904,32.394156],[-94.490273,32.394156],[-94.512181,31.972432],[-94.451934,31.846462],[-94.512181,31.846462],[-94.939382,31.846462],[-94.983197,32.13674],[-94.988674,32.366771],[-94.577904,32.394156]]]},"id":"48401"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.499417,32.344863],[-86.406309,32.049109],[-86.450124,31.966955],[-86.477509,31.966955],[-86.855418,31.961478],[-86.90471,32.049109],[-86.817079,32.339387],[-86.499417,32.344863]]]},"id":"01085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.57654,32.40511],[-91.477956,32.40511],[-91.494386,32.202463],[-91.57654,31.8848],[-91.647741,31.972432],[-91.888726,31.972432],[-91.894203,32.153171],[-91.57654,32.40511]]]},"id":"22041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.613069,32.290094],[-83.498053,32.399633],[-83.344699,32.273663],[-83.339222,32.103878],[-83.607592,32.120309],[-83.613069,32.290094]]]},"id":"13235"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.462888,32.377725],[-94.041164,32.394156],[-94.041164,32.196986],[-94.013779,31.977908],[-94.134272,31.977908],[-94.512181,31.972432],[-94.490273,32.394156],[-94.462888,32.377725]]]},"id":"48365"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.215509,32.361294],[-96.078585,32.355817],[-95.448737,32.355817],[-95.459691,32.13674],[-95.42683,32.08197],[-96.051201,32.005293],[-96.056678,32.01077],[-96.385294,32.328433],[-96.451017,32.361294],[-96.215509,32.361294]]]},"id":"48213"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.408142,32.355817],[-82.23288,32.317479],[-82.227403,31.912185],[-82.43005,31.966955],[-82.468389,31.966955],[-82.479343,31.972432],[-82.408142,32.355817]]]},"id":"13279"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.408142,32.355817],[-82.479343,31.972432],[-82.545066,31.961478],[-82.654605,32.295571],[-82.408142,32.355817]]]},"id":"13209"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.750886,32.339387],[-93.613962,32.235325],[-93.356546,31.934093],[-93.4387,31.846462],[-93.619439,31.846462],[-93.882332,31.846462],[-94.013779,31.977908],[-94.041164,32.196986],[-93.750886,32.339387]]]},"id":"22031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.385294,32.328433],[-96.056678,32.01077],[-96.494833,31.797169],[-96.719387,31.8136],[-96.89465,32.076493],[-96.385294,32.328433]]]},"id":"48349"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.23288,32.317479],[-82.024756,32.27914],[-81.761863,32.049109],[-81.82211,32.016247],[-81.969987,31.791692],[-82.046664,31.824554],[-82.227403,31.912185],[-82.23288,32.317479]]]},"id":"13267"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.946222,32.235325],[-97.617606,32.317479],[-97.617606,32.202463],[-97.62856,32.20794],[-97.864068,32.087447],[-97.946222,32.235325]]]},"id":"48425"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.994621,32.312002],[-87.928898,32.312002],[-88.071299,31.988862],[-88.087729,31.698584],[-88.186314,31.698584],[-88.465638,31.698584],[-88.471115,31.895754],[-88.432777,32.229848],[-88.421823,32.306525],[-87.994621,32.312002]]]},"id":"01023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.720328,32.312002],[-82.654605,32.295571],[-82.545066,31.961478],[-82.643651,31.917662],[-82.928452,32.13674],[-82.884636,32.196986],[-82.720328,32.312002]]]},"id":"13309"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.918861,32.273663],[-85.431413,32.235325],[-85.409506,32.147694],[-85.655968,31.879324],[-85.995538,32.049109],[-85.918861,32.273663]]]},"id":"01011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.848578,32.290094],[-83.613069,32.290094],[-83.607592,32.120309],[-83.607592,32.027201],[-83.963593,32.032678],[-84.029317,32.169601],[-83.848578,32.290094]]]},"id":"13093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.024756,32.27914],[-81.969987,32.268186],[-81.783771,32.153171],[-81.718048,32.087447],[-81.761863,32.049109],[-82.024756,32.27914]]]},"id":"13109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.16805,32.27914],[-92.036603,32.27914],[-91.894203,32.153171],[-91.888726,31.972432],[-92.003742,31.928616],[-92.184481,31.928616],[-92.31045,31.928616],[-92.31045,32.147694],[-92.31045,32.27914],[-92.16805,32.27914]]]},"id":"22021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.277142,32.147694],[-86.90471,32.049109],[-86.855418,31.961478],[-86.90471,31.830031],[-87.501697,31.830031],[-87.666005,31.988862],[-87.474312,32.262709],[-87.277142,32.147694]]]},"id":"01131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.113727,32.257232],[-97.086342,32.268186],[-96.89465,32.076493],[-96.719387,31.8136],[-96.932988,31.709538],[-97.080866,31.840985],[-97.278035,31.747877],[-97.475205,32.175078],[-97.113727,32.257232]]]},"id":"48217"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.548686,32.262709],[-98.209115,31.917662],[-98.461055,31.682154],[-98.669178,31.698584],[-98.926594,32.076493],[-98.548686,32.262709]]]},"id":"48093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.494386,32.202463],[-91.121954,32.213417],[-91.050754,32.125786],[-91.028846,32.120309],[-91.028846,32.114832],[-91.247924,31.86837],[-91.346509,31.753354],[-91.379371,31.731446],[-91.428663,31.753354],[-91.543679,31.753354],[-91.57654,31.8848],[-91.494386,32.202463]]]},"id":"22107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.42777,32.235325],[-81.389431,32.098401],[-81.153923,31.725969],[-81.197738,31.725969],[-81.707094,32.087447],[-81.718048,32.087447],[-81.783771,32.153171],[-81.433247,32.240802],[-81.42777,32.235325]]]},"id":"13029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.471562,32.235325],[-93.427746,32.235325],[-93.186761,32.147694],[-93.356546,31.934093],[-93.613962,32.235325],[-93.471562,32.235325]]]},"id":"22081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.1594,32.229848],[-81.148446,32.224371],[-80.885553,32.032678],[-81.153923,31.725969],[-81.389431,32.098401],[-81.1594,32.229848]]]},"id":"13051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.648211,32.235325],[-84.429133,32.13674],[-84.445564,31.966955],[-84.598918,31.917662],[-84.653688,31.917662],[-84.648211,32.235325]]]},"id":"13307"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.659165,32.235325],[-84.648211,32.235325],[-84.653688,31.917662],[-84.905627,31.923139],[-85.069935,31.994339],[-85.053504,32.06554],[-84.922058,32.229848],[-84.659165,32.235325]]]},"id":"13259"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.182671,32.229848],[-84.029317,32.169601],[-83.963593,32.032678],[-83.925255,31.912185],[-84.259348,31.917662],[-84.336025,31.873847],[-84.445564,31.966955],[-84.429133,32.13674],[-84.429133,32.164124],[-84.182671,32.229848]]]},"id":"13261"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.914747,32.224371],[-88.432777,32.229848],[-88.471115,31.895754],[-88.909271,31.824554],[-88.914747,32.224371]]]},"id":"28023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.727615,32.224371],[-90.716661,32.049109],[-90.738569,31.786216],[-91.247924,31.86837],[-91.028846,32.114832],[-90.727615,32.224371]]]},"id":"28021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.018809,32.224371],[-88.914747,32.224371],[-88.909271,31.824554],[-88.942132,31.824554],[-89.314564,31.802646],[-89.320041,32.224371],[-89.018809,32.224371]]]},"id":"28061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.456965,32.224371],[-89.320041,32.224371],[-89.314564,31.802646],[-89.402195,31.797169],[-89.654134,31.780739],[-89.730812,32.049109],[-89.730812,32.224371],[-89.456965,32.224371]]]},"id":"28129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.62856,32.20794],[-97.617606,32.202463],[-97.475205,32.175078],[-97.278035,31.747877],[-97.606652,31.589046],[-97.688806,31.709538],[-97.765483,31.6712],[-98.006468,32.016247],[-97.864068,32.087447],[-97.62856,32.20794]]]},"id":"48035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.950359,32.120309],[-82.928452,32.13674],[-82.643651,31.917662],[-82.835344,31.8136],[-82.994175,31.780739],[-83.180391,31.846462],[-83.207776,31.901231],[-82.950359,32.120309]]]},"id":"13271"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.131992,32.147694],[-92.940299,32.147694],[-92.97316,31.709538],[-92.721221,31.517845],[-92.984114,31.34806],[-93.236053,31.364491],[-93.4387,31.846462],[-93.356546,31.934093],[-93.186761,32.147694],[-93.131992,32.147694]]]},"id":"22069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.354736,32.147694],[-85.053504,32.06554],[-85.069935,31.994339],[-85.141136,31.780739],[-85.124705,31.764308],[-85.414983,31.621907],[-85.694307,31.61643],[-85.749076,31.61643],[-85.655968,31.879324],[-85.409506,32.147694],[-85.354736,32.147694]]]},"id":"01005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.940299,32.147694],[-92.814329,32.147694],[-92.31045,32.147694],[-92.31045,31.928616],[-92.36522,31.797169],[-92.97316,31.709538],[-92.940299,32.147694]]]},"id":"22127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.983197,32.13674],[-94.939382,31.846462],[-94.868182,31.528799],[-95.005105,31.424737],[-95.273475,31.594523],[-95.42683,32.08197],[-95.459691,32.13674],[-94.983197,32.13674]]]},"id":"48073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.607592,32.120309],[-83.339222,32.103878],[-83.207776,31.901231],[-83.180391,31.846462],[-83.481623,31.846462],[-83.613069,31.851939],[-83.607592,32.027201],[-83.607592,32.120309]]]},"id":"13315"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.707094,32.087447],[-81.197738,31.725969],[-81.192262,31.567138],[-81.493493,31.698584],[-81.811156,31.999816],[-81.82211,32.016247],[-81.761863,32.049109],[-81.718048,32.087447],[-81.707094,32.087447]]]},"id":"13179"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.747219,32.087447],[-101.692449,32.087447],[-101.265248,32.087447],[-101.265248,31.649292],[-101.686972,31.649292],[-101.774603,31.649292],[-101.774603,32.087447],[-101.747219,32.087447]]]},"id":"48173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.265248,32.087447],[-101.183094,32.087447],[-100.821616,32.087447],[-100.827093,31.698584],[-101.265248,31.556184],[-101.265248,31.649292],[-101.265248,32.087447]]]},"id":"48431"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.061684,32.087447],[-102.798791,32.087447],[-102.798791,31.649292],[-103.330055,31.649292],[-103.324578,31.999816],[-103.061684,32.087447]]]},"id":"48495"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.933435,32.087447],[-101.774603,32.087447],[-101.774603,31.649292],[-102.223713,31.649292],[-102.289436,31.649292],[-102.289436,32.087447],[-102.212759,32.087447],[-101.933435,32.087447]]]},"id":"48329"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.289436,32.087447],[-102.289436,31.649292],[-102.316821,31.649292],[-102.76593,31.649292],[-102.798791,31.649292],[-102.798791,32.087447],[-102.289436,32.087447]]]},"id":"48135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.821616,32.087447],[-100.662785,32.087447],[-100.235583,32.08197],[-100.235583,31.693108],[-100.827093,31.698584],[-100.821616,32.087447]]]},"id":"48081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.42683,32.08197],[-95.273475,31.594523],[-95.623999,31.54523],[-95.739015,31.501415],[-95.728061,31.643815],[-95.788308,31.61643],[-96.051201,32.005293],[-95.42683,32.08197]]]},"id":"48001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.054844,32.08197],[-99.715274,32.08197],[-99.720751,31.578092],[-99.726228,31.578092],[-100.109614,31.578092],[-100.235583,31.693108],[-100.235583,32.08197],[-100.153429,32.08197],[-100.054844,32.08197]]]},"id":"48399"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.63312,32.08197],[-99.194965,32.08197],[-99.200441,31.468553],[-99.430473,31.468553],[-99.600258,31.490461],[-99.720751,31.578092],[-99.715274,32.08197],[-99.63312,32.08197]]]},"id":"48083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.118287,32.08197],[-98.926594,32.076493],[-98.669178,31.698584],[-98.992318,31.484984],[-99.090903,31.463076],[-99.200441,31.468553],[-99.194965,32.08197],[-99.118287,32.08197]]]},"id":"48049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.995538,32.049109],[-85.655968,31.879324],[-85.749076,31.61643],[-85.787415,31.61643],[-86.055785,31.61643],[-86.143416,31.61643],[-86.192708,31.966955],[-85.995538,32.049109]]]},"id":"01109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.302247,31.988862],[-86.192708,31.966955],[-86.143416,31.61643],[-86.192708,31.441168],[-86.400832,31.47403],[-86.499417,31.523322],[-86.450124,31.966955],[-86.406309,32.049109],[-86.302247,31.988862]]]},"id":"01041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.716661,32.049109],[-90.229213,32.049109],[-90.125151,31.753354],[-90.245644,31.715015],[-90.311367,31.698584],[-90.738569,31.698584],[-90.738569,31.786216],[-90.716661,32.049109]]]},"id":"28029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.190875,32.049109],[-89.730812,32.049109],[-89.654134,31.780739],[-89.752719,31.775262],[-89.977274,31.764308],[-90.125151,31.753354],[-90.229213,32.049109],[-90.190875,32.049109]]]},"id":"28127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.963593,32.032678],[-83.607592,32.027201],[-83.613069,31.851939],[-83.804762,31.802646],[-83.941686,31.846462],[-83.925255,31.912185],[-83.963593,32.032678]]]},"id":"13081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.006468,32.016247],[-97.765483,31.6712],[-98.181731,31.463076],[-98.269362,31.413784],[-98.461055,31.682154],[-98.209115,31.917662],[-98.006468,32.016247]]]},"id":"48193"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.811156,31.999816],[-81.493493,31.698584],[-81.663278,31.539753],[-81.969987,31.791692],[-81.82211,32.016247],[-81.811156,31.999816]]]},"id":"13183"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.051201,32.005293],[-95.788308,31.61643],[-96.237417,31.413784],[-96.494833,31.797169],[-96.056678,32.01077],[-96.051201,32.005293]]]},"id":"48161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.997324,31.999816],[-105.997324,31.386399],[-106.528588,31.786216],[-106.375233,31.999816],[-105.997324,31.999816]]]},"id":"48141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-105.997324,31.999816],[-104.918367,31.999816],[-104.918367,30.663443],[-104.98409,30.630581],[-104.98409,30.630581],[-105.997324,31.386399],[-105.997324,31.999816]]]},"id":"48229"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.71344,31.999816],[-103.324578,31.999816],[-103.330055,31.649292],[-103.609378,31.649292],[-103.98181,31.999816],[-103.724394,31.999816],[-103.71344,31.999816]]]},"id":"48301"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.847167,31.999816],[-104.025626,31.999816],[-104.102303,31.107075],[-104.918367,30.663443],[-104.918367,31.999816],[-104.847167,31.999816]]]},"id":"48109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.025626,31.999816],[-103.98181,31.999816],[-103.609378,31.649292],[-103.012392,31.369968],[-103.587471,30.767505],[-104.102303,31.107075],[-104.025626,31.999816]]]},"id":"48389"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.069935,31.994339],[-84.905627,31.923139],[-84.960397,31.775262],[-85.124705,31.780739],[-85.141136,31.780739],[-85.069935,31.994339]]]},"id":"13239"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.819359,31.988862],[-87.666005,31.988862],[-87.501697,31.830031],[-87.76459,31.298768],[-87.945329,31.194706],[-88.087729,31.698584],[-88.071299,31.988862],[-87.819359,31.988862]]]},"id":"01025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.134272,31.977908],[-94.013779,31.977908],[-93.882332,31.846462],[-93.83304,31.583569],[-93.843994,31.589046],[-93.986394,31.567138],[-94.002825,31.578092],[-94.397165,31.654769],[-94.451934,31.846462],[-94.512181,31.972432],[-94.134272,31.977908]]]},"id":"48419"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.468389,31.966955],[-82.43005,31.966955],[-82.523158,31.709538],[-82.62722,31.6712],[-82.835344,31.8136],[-82.643651,31.917662],[-82.545066,31.961478],[-82.479343,31.972432],[-82.468389,31.966955]]]},"id":"13161"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.647741,31.972432],[-91.57654,31.8848],[-91.543679,31.753354],[-91.833957,31.265906],[-92.009219,31.326153],[-92.003742,31.928616],[-91.888726,31.972432],[-91.647741,31.972432]]]},"id":"22025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.297687,31.621907],[-84.451041,31.621907],[-84.544149,31.621907],[-84.598918,31.917662],[-84.445564,31.966955],[-84.336025,31.873847],[-84.297687,31.621907]]]},"id":"13273"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.43005,31.966955],[-82.227403,31.912185],[-82.046664,31.824554],[-82.134295,31.632861],[-82.134295,31.468553],[-82.227403,31.528799],[-82.523158,31.709538],[-82.43005,31.966955]]]},"id":"13001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.477509,31.966955],[-86.450124,31.966955],[-86.499417,31.523322],[-86.702064,31.523322],[-86.90471,31.753354],[-86.90471,31.830031],[-86.855418,31.961478],[-86.477509,31.966955]]]},"id":"01013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.905627,31.923139],[-84.653688,31.917662],[-84.598918,31.917662],[-84.544149,31.621907],[-84.817996,31.621907],[-84.960397,31.775262],[-84.905627,31.923139]]]},"id":"13243"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.184481,31.928616],[-92.003742,31.928616],[-92.009219,31.326153],[-92.085896,31.337106],[-92.195435,31.479507],[-92.36522,31.797169],[-92.31045,31.928616],[-92.184481,31.928616]]]},"id":"22059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.259348,31.917662],[-83.925255,31.912185],[-83.941686,31.846462],[-84.018363,31.649292],[-84.297687,31.621907],[-84.336025,31.873847],[-84.259348,31.917662]]]},"id":"13177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.471115,31.895754],[-88.465638,31.698584],[-88.449208,31.435691],[-88.460161,31.435691],[-88.843547,31.435691],[-88.942132,31.435691],[-88.942132,31.824554],[-88.909271,31.824554],[-88.471115,31.895754]]]},"id":"28153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.247924,31.86837],[-90.738569,31.786216],[-90.738569,31.698584],[-90.738569,31.610953],[-91.154816,31.610953],[-91.319124,31.758831],[-91.346509,31.753354],[-91.247924,31.86837]]]},"id":"28063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.080866,31.840985],[-96.932988,31.709538],[-96.801542,31.523322],[-97.278035,31.282337],[-97.404005,31.304245],[-97.420436,31.320676],[-97.606652,31.589046],[-97.278035,31.747877],[-97.080866,31.840985]]]},"id":"48309"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.613069,31.851939],[-83.481623,31.846462],[-83.454238,31.758831],[-83.498053,31.594523],[-83.645931,31.594523],[-83.651408,31.567138],[-83.804762,31.802646],[-83.613069,31.851939]]]},"id":"13287"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.481623,31.846462],[-83.180391,31.846462],[-82.994175,31.780739],[-82.999652,31.6712],[-83.454238,31.758831],[-83.481623,31.846462]]]},"id":"13017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.941686,31.846462],[-83.804762,31.802646],[-83.651408,31.567138],[-83.651408,31.331629],[-83.974547,31.337106],[-84.001932,31.337106],[-83.996455,31.441168],[-84.018363,31.649292],[-83.941686,31.846462]]]},"id":"13321"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.512181,31.846462],[-94.451934,31.846462],[-94.397165,31.654769],[-94.325965,31.222091],[-94.868182,31.528799],[-94.939382,31.846462],[-94.512181,31.846462]]]},"id":"48347"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.619439,31.846462],[-93.4387,31.846462],[-93.236053,31.364491],[-93.553716,31.183752],[-93.603008,31.178275],[-93.83304,31.583569],[-93.882332,31.846462],[-93.619439,31.846462]]]},"id":"22085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.501697,31.830031],[-86.90471,31.830031],[-86.90471,31.753354],[-86.910187,31.753354],[-87.42502,31.260429],[-87.616713,31.243998],[-87.76459,31.298768],[-87.501697,31.830031]]]},"id":"01099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.134295,31.632861],[-82.046664,31.824554],[-81.969987,31.791692],[-81.663278,31.539753],[-81.62494,31.452122],[-81.729002,31.331629],[-82.041187,31.375445],[-82.134295,31.468553],[-82.134295,31.632861]]]},"id":"13305"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.942132,31.824554],[-88.942132,31.435691],[-89.144779,31.435691],[-89.396718,31.435691],[-89.402195,31.797169],[-89.314564,31.802646],[-88.942132,31.824554]]]},"id":"28067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.994175,31.780739],[-82.835344,31.8136],[-82.62722,31.6712],[-82.599835,31.468553],[-82.62722,31.364491],[-83.142052,31.419261],[-83.147529,31.47403],[-82.999652,31.6712],[-82.994175,31.780739]]]},"id":"13069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.719387,31.8136],[-96.494833,31.797169],[-96.237417,31.413784],[-96.319571,31.359014],[-96.598895,31.222091],[-96.801542,31.523322],[-96.932988,31.709538],[-96.719387,31.8136]]]},"id":"48293"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.36522,31.797169],[-92.195435,31.479507],[-92.721221,31.517845],[-92.97316,31.709538],[-92.36522,31.797169]]]},"id":"22043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.402195,31.797169],[-89.396718,31.435691],[-89.42958,31.435691],[-89.451488,31.435691],[-89.588411,31.435691],[-89.752719,31.775262],[-89.654134,31.780739],[-89.402195,31.797169]]]},"id":"28031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.124705,31.780739],[-84.960397,31.775262],[-84.817996,31.621907],[-84.817996,31.501415],[-85.048028,31.517845],[-85.124705,31.764308],[-85.141136,31.780739],[-85.124705,31.780739]]]},"id":"13061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.977274,31.764308],[-89.752719,31.775262],[-89.588411,31.435691],[-89.654134,31.435691],[-89.659611,31.435691],[-89.960843,31.391876],[-89.977274,31.753354],[-89.977274,31.764308]]]},"id":"28065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.414983,31.621907],[-85.124705,31.764308],[-85.048028,31.517845],[-85.086366,31.309722],[-85.414983,31.315199],[-85.414983,31.621907]]]},"id":"01067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.454238,31.758831],[-82.999652,31.6712],[-83.147529,31.47403],[-83.240637,31.47403],[-83.339222,31.47403],[-83.498053,31.594523],[-83.454238,31.758831]]]},"id":"13155"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.428663,31.753354],[-91.379371,31.731446],[-91.587494,31.189229],[-91.636787,30.997536],[-91.664172,30.970151],[-91.658695,30.992059],[-91.724418,31.046829],[-91.833957,31.265906],[-91.543679,31.753354],[-91.428663,31.753354]]]},"id":"22029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.977274,31.753354],[-89.960843,31.391876],[-90.042997,31.337106],[-90.190875,31.34806],[-90.245644,31.34806],[-90.245644,31.715015],[-90.125151,31.753354],[-89.977274,31.764308],[-89.977274,31.753354]]]},"id":"28077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.319124,31.758831],[-91.154816,31.610953],[-91.160293,31.34806],[-91.264355,31.369968],[-91.587494,31.189229],[-91.379371,31.731446],[-91.346509,31.753354],[-91.319124,31.758831]]]},"id":"28001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.910187,31.753354],[-86.90471,31.753354],[-86.702064,31.523322],[-86.702064,31.194706],[-86.948526,31.260429],[-87.42502,31.260429],[-86.910187,31.753354]]]},"id":"01035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-110.789647,31.731446],[-110.450077,31.731446],[-110.461031,31.331629],[-111.364726,31.424737],[-110.789647,31.731446]]]},"id":"04023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.669178,31.698584],[-98.461055,31.682154],[-98.269362,31.413784],[-98.565116,31.233045],[-98.992318,31.484984],[-98.669178,31.698584]]]},"id":"48333"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.311367,31.698584],[-90.245644,31.715015],[-90.245644,31.34806],[-90.262075,31.34806],[-90.355183,31.34806],[-90.546876,31.34806],[-90.634507,31.34806],[-90.738569,31.610953],[-90.738569,31.698584],[-90.311367,31.698584]]]},"id":"28085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.688806,31.709538],[-97.606652,31.589046],[-97.420436,31.320676],[-97.907884,31.068736],[-98.181731,31.463076],[-97.765483,31.6712],[-97.688806,31.709538]]]},"id":"48099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.523158,31.709538],[-82.227403,31.528799],[-82.419096,31.419261],[-82.473866,31.419261],[-82.599835,31.468553],[-82.62722,31.6712],[-82.523158,31.709538]]]},"id":"13005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.827093,31.698584],[-100.235583,31.693108],[-100.109614,31.578092],[-100.115091,31.090644],[-100.690169,31.085167],[-100.695646,31.523322],[-101.265248,31.528799],[-101.265248,31.556184],[-100.827093,31.698584]]]},"id":"48451"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.493493,31.698584],[-81.192262,31.567138],[-81.268939,31.293291],[-81.279893,31.293291],[-81.62494,31.452122],[-81.663278,31.539753],[-81.493493,31.698584]]]},"id":"13191"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.186314,31.698584],[-88.087729,31.698584],[-87.945329,31.194706],[-87.972714,31.161844],[-88.432777,31.112552],[-88.449208,31.435691],[-88.465638,31.698584],[-88.186314,31.698584]]]},"id":"01129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.728061,31.643815],[-95.739015,31.501415],[-95.7664,31.096121],[-95.903323,31.090644],[-96.242894,30.975628],[-96.319571,31.359014],[-96.237417,31.413784],[-95.788308,31.61643],[-95.728061,31.643815]]]},"id":"48289"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.002825,31.578092],[-93.986394,31.567138],[-94.041164,31.13446],[-94.128795,31.101598],[-94.325965,31.222091],[-94.397165,31.654769],[-94.002825,31.578092]]]},"id":"48405"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.223713,31.649292],[-101.774603,31.649292],[-101.774603,31.07969],[-102.30039,31.085167],[-102.316821,31.649292],[-102.289436,31.649292],[-102.223713,31.649292]]]},"id":"48461"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.798791,31.649292],[-102.76593,31.649292],[-102.76593,31.293291],[-102.83713,31.282337],[-103.012392,31.369968],[-103.609378,31.649292],[-103.330055,31.649292],[-102.798791,31.649292]]]},"id":"48475"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.76593,31.649292],[-102.316821,31.649292],[-102.30039,31.085167],[-102.388021,31.085167],[-102.76593,31.293291],[-102.76593,31.649292]]]},"id":"48103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.686972,31.649292],[-101.265248,31.649292],[-101.265248,31.556184],[-101.265248,31.528799],[-101.276202,31.07969],[-101.774603,31.07969],[-101.774603,31.649292],[-101.686972,31.649292]]]},"id":"48383"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.018363,31.649292],[-83.996455,31.441168],[-84.062178,31.441168],[-84.138855,31.441168],[-84.429133,31.435691],[-84.451041,31.621907],[-84.297687,31.621907],[-84.018363,31.649292]]]},"id":"13095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.544149,31.621907],[-84.451041,31.621907],[-84.429133,31.435691],[-84.637257,31.435691],[-84.817996,31.501415],[-84.817996,31.621907],[-84.544149,31.621907]]]},"id":"13037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.694307,31.61643],[-85.414983,31.621907],[-85.414983,31.315199],[-85.710737,31.194706],[-85.792891,31.194706],[-85.787415,31.61643],[-85.749076,31.61643],[-85.694307,31.61643]]]},"id":"01045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.055785,31.61643],[-85.787415,31.61643],[-85.792891,31.194706],[-86.192708,31.194706],[-86.192708,31.441168],[-86.143416,31.61643],[-86.055785,31.61643]]]},"id":"01031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.843994,31.589046],[-93.83304,31.583569],[-93.603008,31.178275],[-93.909717,31.156367],[-93.997348,31.139937],[-94.041164,31.13446],[-93.986394,31.567138],[-93.843994,31.589046]]]},"id":"48403"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.154816,31.610953],[-90.738569,31.610953],[-90.634507,31.34806],[-90.722138,31.34806],[-91.09457,31.320676],[-91.160293,31.34806],[-91.154816,31.610953]]]},"id":"28037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.645931,31.594523],[-83.498053,31.594523],[-83.339222,31.47403],[-83.43233,31.34806],[-83.514484,31.326153],[-83.651408,31.331629],[-83.651408,31.567138],[-83.645931,31.594523]]]},"id":"13277"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.623999,31.54523],[-95.273475,31.594523],[-95.005105,31.424737],[-94.955813,31.386399],[-95.432306,31.057782],[-95.618522,30.931813],[-95.7664,31.096121],[-95.739015,31.501415],[-95.623999,31.54523]]]},"id":"48225"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.726228,31.578092],[-99.720751,31.578092],[-99.600258,31.490461],[-99.605735,31.085167],[-100.115091,31.090644],[-100.109614,31.578092],[-99.726228,31.578092]]]},"id":"48095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.227403,31.528799],[-82.134295,31.468553],[-82.041187,31.375445],[-82.041187,31.369968],[-82.282173,31.227568],[-82.419096,31.419261],[-82.227403,31.528799]]]},"id":"13229"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.265248,31.528799],[-100.695646,31.523322],[-100.690169,31.085167],[-100.964016,31.085167],[-101.276202,31.07969],[-101.265248,31.528799]]]},"id":"48235"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.400832,31.47403],[-86.192708,31.441168],[-86.192708,31.194706],[-86.187231,30.992059],[-86.389878,30.992059],[-86.685633,30.992059],[-86.702064,31.194706],[-86.702064,31.523322],[-86.499417,31.523322],[-86.400832,31.47403]]]},"id":"01039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.868182,31.528799],[-94.325965,31.222091],[-94.128795,31.101598],[-94.457411,31.035875],[-94.561473,31.057782],[-94.813412,31.13446],[-94.840797,31.145414],[-94.950336,31.342583],[-94.955813,31.386399],[-95.005105,31.424737],[-94.868182,31.528799]]]},"id":"48005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.801542,31.523322],[-96.598895,31.222091],[-96.828926,31.107075],[-97.069912,30.986582],[-97.278035,31.282337],[-96.801542,31.523322]]]},"id":"48145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.086366,31.309722],[-85.048028,31.517845],[-84.817996,31.501415],[-84.637257,31.435691],[-84.642734,31.260429],[-84.922058,31.074213],[-85.02612,31.074213],[-85.086366,31.309722]]]},"id":"13099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.721221,31.517845],[-92.195435,31.479507],[-92.085896,31.337106],[-92.283066,30.964674],[-92.387128,31.003013],[-92.595251,30.893474],[-92.660975,30.898951],[-92.825283,30.887997],[-92.984114,31.34806],[-92.721221,31.517845]]]},"id":"22079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.430473,31.468553],[-99.200441,31.468553],[-99.090903,31.463076],[-99.090903,30.942767],[-99.485242,30.942767],[-99.605735,31.085167],[-99.600258,31.490461],[-99.430473,31.468553]]]},"id":"48307"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.992318,31.484984],[-98.565116,31.233045],[-98.439147,31.030398],[-98.444624,30.920859],[-98.515824,30.920859],[-98.964933,30.920859],[-99.090903,30.942767],[-99.090903,31.463076],[-98.992318,31.484984]]]},"id":"48411"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.240637,31.47403],[-83.147529,31.47403],[-83.142052,31.419261],[-83.048944,31.183752],[-83.196822,31.024921],[-83.295407,31.024921],[-83.43233,31.34806],[-83.339222,31.47403],[-83.240637,31.47403]]]},"id":"13019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.473866,31.419261],[-82.419096,31.419261],[-82.282173,31.227568],[-82.134295,31.00849],[-82.216449,30.570335],[-82.419096,30.581289],[-82.671035,31.183752],[-82.62722,31.364491],[-82.599835,31.468553],[-82.473866,31.419261]]]},"id":"13299"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.181731,31.463076],[-97.907884,31.068736],[-97.91336,31.035875],[-98.017422,31.035875],[-98.439147,31.030398],[-98.565116,31.233045],[-98.269362,31.413784],[-98.181731,31.463076]]]},"id":"48281"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.429133,31.435691],[-84.138855,31.441168],[-84.50581,31.07969],[-84.544149,31.07969],[-84.642734,31.260429],[-84.637257,31.435691],[-84.429133,31.435691]]]},"id":"13007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.279893,31.293291],[-81.268939,31.293291],[-81.444201,31.013967],[-81.76734,31.167321],[-81.729002,31.331629],[-81.62494,31.452122],[-81.279893,31.293291]]]},"id":"13127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.062178,31.441168],[-83.996455,31.441168],[-84.001932,31.337106],[-84.001932,31.07969],[-84.100517,31.07969],[-84.116948,31.07969],[-84.270302,31.07969],[-84.374364,31.07969],[-84.50581,31.07969],[-84.138855,31.441168],[-84.062178,31.441168]]]},"id":"13205"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.460161,31.435691],[-88.449208,31.435691],[-88.432777,31.112552],[-88.4273,30.997536],[-88.679239,30.997536],[-88.832593,30.997536],[-88.843547,31.435691],[-88.460161,31.435691]]]},"id":"28041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.42958,31.435691],[-89.396718,31.435691],[-89.144779,31.435691],[-89.139302,30.909905],[-89.341949,30.909905],[-89.347426,31.00849],[-89.451488,31.435691],[-89.42958,31.435691]]]},"id":"28035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.659611,31.435691],[-89.654134,31.435691],[-89.654134,31.003013],[-89.730812,31.003013],[-89.834873,31.003013],[-90.042997,31.337106],[-89.960843,31.391876],[-89.659611,31.435691]]]},"id":"28091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.144779,31.435691],[-88.942132,31.435691],[-88.843547,31.435691],[-88.832593,30.997536],[-88.887363,30.909905],[-88.996902,30.909905],[-89.139302,30.909905],[-89.144779,31.435691]]]},"id":"28111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.451488,31.435691],[-89.347426,31.00849],[-89.599365,31.003013],[-89.654134,31.003013],[-89.654134,31.435691],[-89.588411,31.435691],[-89.451488,31.435691]]]},"id":"28073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.142052,31.419261],[-82.62722,31.364491],[-82.671035,31.183752],[-82.972267,31.183752],[-83.032514,31.183752],[-83.048944,31.183752],[-83.142052,31.419261]]]},"id":"13003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.950336,31.342583],[-94.840797,31.145414],[-95.202275,30.822274],[-95.311814,30.88252],[-95.328245,30.860613],[-95.432306,31.057782],[-94.955813,31.386399],[-94.950336,31.342583]]]},"id":"48455"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.264355,31.369968],[-91.160293,31.34806],[-91.09457,31.320676],[-91.061708,30.997536],[-91.176724,30.997536],[-91.636787,30.997536],[-91.587494,31.189229],[-91.264355,31.369968]]]},"id":"28157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.041187,31.369968],[-82.041187,31.375445],[-81.729002,31.331629],[-81.76734,31.167321],[-81.937125,31.046829],[-81.986418,31.057782],[-82.134295,31.00849],[-82.282173,31.227568],[-82.041187,31.369968]]]},"id":"13025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.83713,31.282337],[-102.76593,31.293291],[-102.388021,31.085167],[-101.769126,30.652489],[-102.344205,30.597719],[-102.56876,30.050025],[-103.346485,30.603196],[-103.439593,30.663443],[-103.587471,30.767505],[-103.012392,31.369968],[-102.83713,31.282337]]]},"id":"48371"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.236053,31.364491],[-92.984114,31.34806],[-92.825283,30.887997],[-92.978637,30.877043],[-93.011499,30.877043],[-93.559193,30.86609],[-93.553716,31.183752],[-93.236053,31.364491]]]},"id":"22115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.319571,31.359014],[-96.242894,30.975628],[-96.566033,30.696304],[-96.620803,30.729166],[-96.828926,31.107075],[-96.598895,31.222091],[-96.319571,31.359014]]]},"id":"48395"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.190875,31.34806],[-90.042997,31.337106],[-89.834873,31.003013],[-90.262075,31.003013],[-90.262075,31.34806],[-90.245644,31.34806],[-90.190875,31.34806]]]},"id":"28147"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.43233,31.34806],[-83.295407,31.024921],[-83.383038,31.030398],[-83.476146,31.030398],[-83.498053,31.052306],[-83.574731,31.07969],[-83.514484,31.326153],[-83.43233,31.34806]]]},"id":"13075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.355183,31.34806],[-90.262075,31.34806],[-90.262075,31.003013],[-90.349706,31.003013],[-90.371614,30.997536],[-90.546876,30.997536],[-90.546876,31.34806],[-90.355183,31.34806]]]},"id":"28113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.722138,31.34806],[-90.634507,31.34806],[-90.546876,31.34806],[-90.546876,30.997536],[-90.568783,30.997536],[-90.8262,30.997536],[-91.061708,30.997536],[-91.09457,31.320676],[-90.722138,31.34806]]]},"id":"28005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.085896,31.337106],[-92.009219,31.326153],[-91.833957,31.265906],[-91.724418,31.046829],[-91.751803,31.019444],[-91.762756,31.00849],[-91.817526,30.849659],[-92.085896,30.849659],[-92.211866,30.849659],[-92.283066,30.964674],[-92.085896,31.337106]]]},"id":"22009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.974547,31.337106],[-83.651408,31.331629],[-83.514484,31.326153],[-83.574731,31.07969],[-83.739039,31.035875],[-84.001932,31.07969],[-84.001932,31.337106],[-83.974547,31.337106]]]},"id":"13071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.404005,31.304245],[-97.278035,31.282337],[-97.069912,30.986582],[-97.316374,30.751074],[-97.831206,30.904428],[-97.91336,31.035875],[-97.907884,31.068736],[-97.420436,31.320676],[-97.404005,31.304245]]]},"id":"48027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.76459,31.298768],[-87.616713,31.243998],[-87.600282,30.997536],[-87.518128,30.280057],[-88.005575,30.685351],[-87.972714,31.161844],[-87.945329,31.194706],[-87.76459,31.298768]]]},"id":"01003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.414983,31.315199],[-85.086366,31.309722],[-85.02612,31.074213],[-85.004212,31.003013],[-85.486183,30.997536],[-85.486183,31.200183],[-85.710737,31.194706],[-85.414983,31.315199]]]},"id":"01069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.948526,31.260429],[-86.702064,31.194706],[-86.685633,30.992059],[-86.784218,30.997536],[-87.162127,30.997536],[-87.249758,30.997536],[-87.600282,30.997536],[-87.616713,31.243998],[-87.42502,31.260429],[-86.948526,31.260429]]]},"id":"01053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.642734,31.260429],[-84.544149,31.07969],[-84.544149,31.07969],[-84.730365,31.068736],[-84.922058,31.074213],[-84.642734,31.260429]]]},"id":"13201"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.486183,31.200183],[-85.486183,30.997536],[-85.497137,30.997536],[-86.033877,30.992059],[-86.187231,30.992059],[-86.192708,31.194706],[-85.792891,31.194706],[-85.710737,31.194706],[-85.486183,31.200183]]]},"id":"01061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.603008,31.178275],[-93.553716,31.183752],[-93.559193,30.86609],[-93.739932,30.40055],[-93.70707,30.247195],[-93.898763,30.241718],[-93.909717,31.156367],[-93.603008,31.178275]]]},"id":"48351"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.972267,31.183752],[-82.671035,31.183752],[-82.419096,30.581289],[-82.457435,30.586766],[-82.583404,30.592243],[-82.972267,30.871567],[-82.972267,31.183752]]]},"id":"13065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.032514,31.183752],[-82.972267,31.183752],[-82.972267,30.871567],[-83.02156,30.849659],[-83.196822,31.024921],[-83.048944,31.183752],[-83.032514,31.183752]]]},"id":"13173"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.972714,31.161844],[-88.005575,30.685351],[-88.394438,30.367688],[-88.410869,30.734643],[-88.4273,30.997536],[-88.432777,31.112552],[-87.972714,31.161844]]]},"id":"01097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.76734,31.167321],[-81.444201,31.013967],[-81.444201,30.707258],[-81.904264,30.816797],[-81.937125,31.046829],[-81.76734,31.167321]]]},"id":"13039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.997348,31.139937],[-93.909717,31.156367],[-93.898763,30.241718],[-94.117841,30.241718],[-94.074025,30.526519],[-94.29858,31.035875],[-94.457411,31.035875],[-94.128795,31.101598],[-94.041164,31.13446],[-93.997348,31.139937]]]},"id":"48241"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.813412,31.13446],[-94.561473,31.057782],[-94.545042,30.526519],[-94.731258,30.488181],[-94.851751,30.493658],[-95.202275,30.822274],[-94.840797,31.145414],[-94.813412,31.13446]]]},"id":"48373"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.828926,31.107075],[-96.620803,30.729166],[-96.96585,30.559381],[-97.157543,30.455319],[-97.316374,30.751074],[-97.069912,30.986582],[-96.828926,31.107075]]]},"id":"48331"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.102303,31.107075],[-103.587471,30.767505],[-103.439593,30.663443],[-103.801071,30.411504],[-104.98409,30.630581],[-104.918367,30.663443],[-104.102303,31.107075]]]},"id":"48243"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.903323,31.090644],[-95.7664,31.096121],[-95.618522,30.931813],[-95.864985,30.86609],[-96.166217,30.822274],[-96.237417,30.964674],[-96.242894,30.975628],[-95.903323,31.090644]]]},"id":"48313"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.690169,31.085167],[-100.115091,31.090644],[-100.115091,30.712735],[-100.958539,30.707258],[-100.964016,31.085167],[-100.690169,31.085167]]]},"id":"48413"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.115091,31.090644],[-99.605735,31.085167],[-99.485242,30.942767],[-99.485242,30.712735],[-99.759089,30.712735],[-100.115091,30.712735],[-100.115091,31.090644]]]},"id":"48327"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.388021,31.085167],[-102.30039,31.085167],[-101.774603,31.07969],[-101.276202,31.07969],[-100.964016,31.085167],[-100.958539,30.707258],[-100.958539,30.285534],[-101.544572,30.285534],[-101.758173,30.285534],[-101.769126,30.652489],[-102.388021,31.085167]]]},"id":"48105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.544149,31.07969],[-84.544149,31.07969],[-84.50581,31.07969],[-84.374364,31.07969],[-84.379841,30.690827],[-84.861812,30.712735],[-84.730365,31.068736],[-84.544149,31.07969]]]},"id":"13087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.270302,31.07969],[-84.116948,31.07969],[-84.084086,30.674397],[-84.281256,30.685351],[-84.379841,30.690827],[-84.374364,31.07969],[-84.270302,31.07969]]]},"id":"13131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.498053,31.052306],[-83.476146,31.030398],[-83.355653,30.636058],[-83.613069,30.652489],[-83.744516,30.657966],[-83.739039,31.035875],[-83.574731,31.07969],[-83.498053,31.052306]]]},"id":"13027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.100517,31.07969],[-84.001932,31.07969],[-83.739039,31.035875],[-83.744516,30.657966],[-84.007409,30.674397],[-84.084086,30.674397],[-84.116948,31.07969],[-84.100517,31.07969]]]},"id":"13275"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.986418,31.057782],[-81.937125,31.046829],[-81.904264,30.816797],[-82.052141,30.362211],[-82.216449,30.570335],[-82.134295,31.00849],[-81.986418,31.057782]]]},"id":"13049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.02612,31.074213],[-84.922058,31.074213],[-84.730365,31.068736],[-84.861812,30.712735],[-84.867289,30.712735],[-85.004212,31.003013],[-85.02612,31.074213]]]},"id":"13253"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.29858,31.035875],[-94.074025,30.526519],[-94.44098,30.526519],[-94.545042,30.526519],[-94.561473,31.057782],[-94.457411,31.035875],[-94.29858,31.035875]]]},"id":"48457"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.432306,31.057782],[-95.328245,30.860613],[-95.361106,30.504611],[-95.832123,30.630581],[-95.864985,30.86609],[-95.618522,30.931813],[-95.432306,31.057782]]]},"id":"48471"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.724418,31.046829],[-91.658695,30.992059],[-91.751803,31.019444],[-91.724418,31.046829]]]},"id":"22125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.017422,31.035875],[-97.91336,31.035875],[-97.831206,30.904428],[-98.050284,30.625104],[-98.126961,30.427934],[-98.351516,30.488181],[-98.444624,30.920859],[-98.439147,31.030398],[-98.017422,31.035875]]]},"id":"48053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.383038,31.030398],[-83.295407,31.024921],[-83.196822,31.024921],[-83.02156,30.849659],[-83.136575,30.625104],[-83.311837,30.636058],[-83.355653,30.636058],[-83.476146,31.030398],[-83.383038,31.030398]]]},"id":"13185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.762756,31.00849],[-91.751803,31.019444],[-91.658695,30.992059],[-91.664172,30.970151],[-91.330078,30.657966],[-91.483432,30.499135],[-91.521771,30.499135],[-91.70251,30.499135],[-91.75728,30.499135],[-91.817526,30.849659],[-91.762756,31.00849]]]},"id":"22077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.599365,31.003013],[-89.347426,31.00849],[-89.341949,30.909905],[-89.341949,30.647012],[-89.495303,30.647012],[-89.686996,30.460796],[-89.84035,30.663443],[-89.730812,31.003013],[-89.654134,31.003013],[-89.599365,31.003013]]]},"id":"28109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.834873,31.003013],[-89.730812,31.003013],[-89.84035,30.663443],[-90.256598,30.712735],[-90.349706,31.003013],[-90.262075,31.003013],[-89.834873,31.003013]]]},"id":"22117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.387128,31.003013],[-92.283066,30.964674],[-92.211866,30.849659],[-92.49119,30.482704],[-92.63359,30.482704],[-92.628113,30.488181],[-92.595251,30.893474],[-92.387128,31.003013]]]},"id":"22039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.486183,30.997536],[-85.004212,31.003013],[-84.867289,30.712735],[-84.933012,30.608673],[-85.16852,30.608673],[-85.382121,30.564858],[-85.43689,30.570335],[-85.601199,30.833228],[-85.497137,30.997536],[-85.486183,30.997536]]]},"id":"12063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.371614,30.997536],[-90.349706,31.003013],[-90.256598,30.712735],[-90.245644,30.225288],[-90.278506,30.230764],[-90.398998,30.285534],[-90.568783,30.652489],[-90.568783,30.997536],[-90.546876,30.997536],[-90.371614,30.997536]]]},"id":"22105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.568783,30.997536],[-90.568783,30.652489],[-90.744046,30.652489],[-90.908354,30.647012],[-90.848107,30.718212],[-90.8262,30.997536],[-90.568783,30.997536]]]},"id":"22091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.061708,30.997536],[-90.8262,30.997536],[-90.848107,30.718212],[-90.864538,30.718212],[-91.297217,30.647012],[-91.302693,30.652489],[-91.176724,30.997536],[-91.061708,30.997536]]]},"id":"22037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.162127,30.997536],[-86.784218,30.997536],[-86.800648,30.384119],[-86.921141,30.373165],[-87.310004,30.734643],[-87.162127,30.997536]]]},"id":"12113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.636787,30.997536],[-91.176724,30.997536],[-91.302693,30.652489],[-91.330078,30.657966],[-91.664172,30.970151],[-91.636787,30.997536]]]},"id":"22125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.249758,30.997536],[-87.162127,30.997536],[-87.310004,30.734643],[-86.921141,30.373165],[-87.518128,30.280057],[-87.600282,30.997536],[-87.249758,30.997536]]]},"id":"12033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.679239,30.997536],[-88.4273,30.997536],[-88.410869,30.734643],[-88.865455,30.734643],[-88.881886,30.734643],[-88.887363,30.909905],[-88.832593,30.997536],[-88.679239,30.997536]]]},"id":"28039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.685633,30.992059],[-86.389878,30.992059],[-86.395355,30.378642],[-86.800648,30.384119],[-86.784218,30.997536],[-86.685633,30.992059]]]},"id":"12091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.033877,30.992059],[-85.497137,30.997536],[-85.601199,30.833228],[-85.842184,30.701781],[-86.033877,30.992059]]]},"id":"12059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-86.389878,30.992059],[-86.187231,30.992059],[-86.033877,30.992059],[-85.842184,30.701781],[-85.990061,30.389596],[-85.995538,30.269103],[-86.395355,30.378642],[-86.389878,30.992059]]]},"id":"12131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.237417,30.964674],[-96.166217,30.822274],[-96.155263,30.329349],[-96.297663,30.378642],[-96.566033,30.696304],[-96.242894,30.975628],[-96.237417,30.964674]]]},"id":"48041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.485242,30.942767],[-99.090903,30.942767],[-98.964933,30.920859],[-98.964933,30.499135],[-99.304503,30.499135],[-99.485242,30.712735],[-99.485242,30.942767]]]},"id":"48319"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.515824,30.920859],[-98.444624,30.920859],[-98.351516,30.488181],[-98.411762,30.504611],[-98.592501,30.499135],[-98.964933,30.499135],[-98.964933,30.920859],[-98.515824,30.920859]]]},"id":"48299"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.996902,30.909905],[-88.887363,30.909905],[-88.881886,30.734643],[-88.881886,30.679874],[-89.341949,30.647012],[-89.341949,30.909905],[-89.139302,30.909905],[-88.996902,30.909905]]]},"id":"28131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.311814,30.88252],[-95.202275,30.822274],[-94.851751,30.493658],[-95.163936,30.34578],[-95.361106,30.504611],[-95.328245,30.860613],[-95.311814,30.88252]]]},"id":"48407"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.831206,30.904428],[-97.316374,30.751074],[-97.157543,30.455319],[-97.332805,30.40055],[-97.371143,30.41698],[-97.973607,30.625104],[-98.050284,30.625104],[-97.831206,30.904428]]]},"id":"48491"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.660975,30.898951],[-92.595251,30.893474],[-92.628113,30.488181],[-92.770513,30.488181],[-93.131992,30.422457],[-92.978637,30.877043],[-92.825283,30.887997],[-92.660975,30.898951]]]},"id":"22003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.011499,30.877043],[-92.978637,30.877043],[-93.131992,30.422457],[-93.131992,30.40055],[-93.460608,30.488181],[-93.739932,30.40055],[-93.559193,30.86609],[-93.011499,30.877043]]]},"id":"22011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.972267,30.871567],[-82.583404,30.592243],[-82.687466,30.597719],[-83.136575,30.625104],[-83.02156,30.849659],[-82.972267,30.871567]]]},"id":"13101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.166217,30.822274],[-95.864985,30.86609],[-95.832123,30.630581],[-95.804738,30.247195],[-95.821169,30.247195],[-96.095016,30.225288],[-96.155263,30.329349],[-96.166217,30.822274]]]},"id":"48185"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.085896,30.849659],[-91.817526,30.849659],[-91.75728,30.499135],[-91.987311,30.367688],[-92.053034,30.378642],[-92.140665,30.296488],[-92.49119,30.482704],[-92.211866,30.849659],[-92.085896,30.849659]]]},"id":"22097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.601199,30.833228],[-85.43689,30.570335],[-85.990061,30.389596],[-85.842184,30.701781],[-85.601199,30.833228]]]},"id":"12133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.904264,30.816797],[-81.444201,30.707258],[-81.444201,30.510088],[-81.608509,30.586766],[-82.046664,30.27458],[-82.052141,30.362211],[-81.904264,30.816797]]]},"id":"12089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.865455,30.734643],[-88.410869,30.734643],[-88.394438,30.367688],[-88.843547,30.406027],[-88.881886,30.679874],[-88.881886,30.734643],[-88.865455,30.734643]]]},"id":"28059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.620803,30.729166],[-96.566033,30.696304],[-96.297663,30.378642],[-96.64271,30.296488],[-96.96585,30.559381],[-96.620803,30.729166]]]},"id":"48051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.864538,30.718212],[-90.848107,30.718212],[-90.908354,30.647012],[-90.891923,30.34578],[-91.023369,30.323872],[-91.143862,30.323872],[-91.297217,30.647012],[-90.864538,30.718212]]]},"id":"22033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.256598,30.712735],[-89.84035,30.663443],[-89.686996,30.460796],[-89.522688,30.181472],[-89.62675,30.14861],[-89.900597,30.192426],[-90.103244,30.192426],[-90.245644,30.225288],[-90.256598,30.712735]]]},"id":"22103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.867289,30.712735],[-84.861812,30.712735],[-84.379841,30.690827],[-84.281256,30.685351],[-84.648211,30.389596],[-84.933012,30.608673],[-84.867289,30.712735]]]},"id":"12039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.759089,30.712735],[-99.485242,30.712735],[-99.304503,30.499135],[-99.304503,30.285534],[-99.605735,30.291011],[-99.753612,30.291011],[-100.115091,30.291011],[-100.115091,30.712735],[-99.759089,30.712735]]]},"id":"48267"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.115091,30.712735],[-100.115091,30.291011],[-100.701123,30.291011],[-100.958539,30.285534],[-100.958539,30.707258],[-100.115091,30.712735]]]},"id":"48435"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.084086,30.674397],[-84.007409,30.674397],[-84.073132,30.27458],[-84.303164,30.301965],[-84.713934,30.301965],[-84.648211,30.389596],[-84.281256,30.685351],[-84.084086,30.674397]]]},"id":"12073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.881886,30.679874],[-88.843547,30.406027],[-89.341949,30.373165],[-89.341949,30.647012],[-88.881886,30.679874]]]},"id":"28047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.744516,30.657966],[-83.613069,30.652489],[-83.821193,30.301965],[-83.990978,30.082887],[-84.078609,30.093841],[-84.073132,30.27458],[-84.007409,30.674397],[-83.744516,30.657966]]]},"id":"12065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.346485,30.603196],[-102.56876,30.050025],[-102.322297,29.88024],[-102.678299,29.73784],[-102.919284,29.190146],[-103.280762,28.982022],[-103.790117,29.261346],[-103.801071,30.411504],[-103.439593,30.663443],[-103.346485,30.603196]]]},"id":"48043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.330078,30.657966],[-91.302693,30.652489],[-91.297217,30.647012],[-91.143862,30.323872],[-91.483432,30.499135],[-91.330078,30.657966]]]},"id":"22121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-102.56876,30.050025],[-102.344205,30.597719],[-101.769126,30.652489],[-101.758173,30.285534],[-101.76365,29.781655],[-102.322297,29.88024],[-102.56876,30.050025]]]},"id":"48443"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.355653,30.636058],[-83.311837,30.636058],[-83.169437,30.384119],[-83.246114,30.258149],[-83.366607,30.258149],[-83.509007,30.301965],[-83.821193,30.301965],[-83.613069,30.652489],[-83.355653,30.636058]]]},"id":"12079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.744046,30.652489],[-90.568783,30.652489],[-90.398998,30.285534],[-90.634507,30.219811],[-90.891923,30.34578],[-90.908354,30.647012],[-90.744046,30.652489]]]},"id":"22063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.495303,30.647012],[-89.341949,30.647012],[-89.341949,30.373165],[-89.522688,30.181472],[-89.686996,30.460796],[-89.495303,30.647012]]]},"id":"28045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.311837,30.636058],[-83.136575,30.625104],[-82.687466,30.597719],[-82.69842,30.597719],[-82.797005,30.334826],[-83.081806,30.438888],[-83.169437,30.384119],[-83.311837,30.636058]]]},"id":"12047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.832123,30.630581],[-95.361106,30.504611],[-95.163936,30.34578],[-95.098213,30.165041],[-95.218706,30.066456],[-95.804738,30.088364],[-95.804738,30.247195],[-95.832123,30.630581]]]},"id":"48339"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.98409,30.630581],[-103.801071,30.411504],[-103.790117,29.261346],[-104.507597,29.639255],[-104.98409,30.630581],[-104.98409,30.630581]]]},"id":"48377"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.973607,30.625104],[-97.371143,30.41698],[-97.650467,30.071933],[-97.666898,30.066456],[-97.710714,30.022641],[-98.170777,30.356734],[-98.126961,30.427934],[-98.050284,30.625104],[-97.973607,30.625104]]]},"id":"48453"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.16852,30.608673],[-84.933012,30.608673],[-85.113751,30.197903],[-85.22329,30.20338],[-85.387598,30.20338],[-85.382121,30.564858],[-85.16852,30.608673]]]},"id":"12013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.933012,30.608673],[-84.648211,30.389596],[-84.713934,30.301965],[-84.544149,30.011687],[-85.004212,30.011687],[-85.02612,29.973348],[-85.113751,30.197903],[-84.933012,30.608673]]]},"id":"12077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.69842,30.597719],[-82.687466,30.597719],[-82.583404,30.592243],[-82.457435,30.586766],[-82.457435,30.137656],[-82.528635,29.940487],[-82.660082,29.830948],[-82.802482,29.93501],[-82.797005,30.334826],[-82.69842,30.597719]]]},"id":"12023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.608509,30.586766],[-81.444201,30.510088],[-81.378478,30.252672],[-81.389431,30.252672],[-81.679709,30.121226],[-81.701617,30.192426],[-82.052141,30.186949],[-82.046664,30.27458],[-81.608509,30.586766]]]},"id":"12031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.419096,30.581289],[-82.216449,30.570335],[-82.052141,30.362211],[-82.046664,30.27458],[-82.052141,30.186949],[-82.052141,30.143133],[-82.145249,30.143133],[-82.298603,30.143133],[-82.457435,30.137656],[-82.457435,30.586766],[-82.419096,30.581289]]]},"id":"12003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.382121,30.564858],[-85.387598,30.20338],[-85.387598,29.924056],[-85.995538,30.269103],[-85.990061,30.389596],[-85.43689,30.570335],[-85.382121,30.564858]]]},"id":"12005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.157543,30.455319],[-96.96585,30.559381],[-96.64271,30.296488],[-96.796065,30.159564],[-96.801542,30.154087],[-97.026096,30.050025],[-97.332805,30.40055],[-97.157543,30.455319]]]},"id":"48287"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.44098,30.526519],[-94.074025,30.526519],[-94.117841,30.241718],[-94.117841,30.159564],[-94.216426,30.175995],[-94.446457,30.110272],[-94.731258,30.488181],[-94.545042,30.526519],[-94.44098,30.526519]]]},"id":"48199"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.411762,30.504611],[-98.351516,30.488181],[-98.126961,30.427934],[-98.170777,30.356734],[-98.296746,30.039072],[-98.411762,29.93501],[-98.587024,30.137656],[-98.592501,30.499135],[-98.411762,30.504611]]]},"id":"48031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.304503,30.499135],[-98.964933,30.499135],[-98.592501,30.499135],[-98.587024,30.137656],[-98.921118,30.137656],[-99.304503,30.285534],[-99.304503,30.499135]]]},"id":"48171"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.75728,30.499135],[-91.70251,30.499135],[-91.368417,30.060979],[-91.724418,30.121226],[-91.948972,30.071933],[-91.987311,30.367688],[-91.75728,30.499135]]]},"id":"22099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.521771,30.499135],[-91.483432,30.499135],[-91.143862,30.323872],[-91.023369,30.323872],[-91.105524,30.060979],[-91.226016,30.022641],[-91.368417,30.060979],[-91.70251,30.499135],[-91.521771,30.499135]]]},"id":"22047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.851751,30.493658],[-94.731258,30.488181],[-94.446457,30.110272],[-94.44098,29.891194],[-94.97772,29.885717],[-95.098213,30.165041],[-95.163936,30.34578],[-94.851751,30.493658]]]},"id":"48291"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.460608,30.488181],[-93.131992,30.40055],[-92.995068,30.039072],[-93.372977,30.050025],[-93.723501,30.050025],[-93.70707,30.247195],[-93.739932,30.40055],[-93.460608,30.488181]]]},"id":"22019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.770513,30.488181],[-92.628113,30.488181],[-92.63359,30.482704],[-92.628113,30.093841],[-92.737652,30.039072],[-92.995068,30.039072],[-93.131992,30.40055],[-93.131992,30.422457],[-92.770513,30.488181]]]},"id":"22053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.63359,30.482704],[-92.49119,30.482704],[-92.140665,30.296488],[-92.283066,30.14861],[-92.628113,30.093841],[-92.63359,30.482704]]]},"id":"22001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.081806,30.438888],[-82.797005,30.334826],[-82.802482,29.93501],[-82.879159,29.885717],[-83.246114,30.258149],[-83.169437,30.384119],[-83.081806,30.438888]]]},"id":"12121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.332805,30.40055],[-97.026096,30.050025],[-97.316374,29.787132],[-97.650467,30.071933],[-97.371143,30.41698],[-97.332805,30.40055]]]},"id":"48021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.297663,30.378642],[-96.155263,30.329349],[-96.095016,30.225288],[-96.144309,30.071933],[-96.379817,30.082887],[-96.620803,30.044549],[-96.796065,30.159564],[-96.64271,30.296488],[-96.297663,30.378642]]]},"id":"48477"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.053034,30.378642],[-91.987311,30.367688],[-91.948972,30.071933],[-91.965403,30.033595],[-92.250204,30.143133],[-92.283066,30.14861],[-92.140665,30.296488],[-92.053034,30.378642]]]},"id":"22055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.170777,30.356734],[-97.710714,30.022641],[-97.875022,29.858333],[-98.000992,29.754271],[-98.296746,30.039072],[-98.170777,30.356734]]]},"id":"48209"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.891923,30.34578],[-90.634507,30.219811],[-90.639984,30.165041],[-90.963123,30.066456],[-91.078139,30.07741],[-91.105524,30.060979],[-91.023369,30.323872],[-90.891923,30.34578]]]},"id":"22005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.509007,30.301965],[-83.366607,30.258149],[-83.317314,29.819994],[-83.410422,29.66664],[-83.990978,30.082887],[-83.821193,30.301965],[-83.509007,30.301965]]]},"id":"12123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-84.303164,30.301965],[-84.073132,30.27458],[-84.078609,30.093841],[-84.341502,29.962394],[-84.544149,30.011687],[-84.713934,30.301965],[-84.303164,30.301965]]]},"id":"12129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.398998,30.285534],[-90.278506,30.230764],[-90.420906,30.060979],[-90.541399,29.891194],[-90.656414,29.891194],[-90.639984,30.165041],[-90.634507,30.219811],[-90.398998,30.285534]]]},"id":"22095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.605735,30.291011],[-99.304503,30.285534],[-98.921118,30.137656],[-98.915641,29.781655],[-99.600258,29.907625],[-99.759089,30.071933],[-99.753612,30.291011],[-99.605735,30.291011]]]},"id":"48265"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.753612,30.291011],[-99.759089,30.071933],[-100.016506,29.622824],[-100.109614,29.622824],[-100.575153,29.622824],[-100.701123,29.622824],[-100.701123,30.291011],[-100.115091,30.291011],[-99.753612,30.291011]]]},"id":"48137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.544572,30.285534],[-100.958539,30.285534],[-100.701123,30.291011],[-100.701123,29.622824],[-100.794231,29.239438],[-101.413125,29.754271],[-101.76365,29.781655],[-101.758173,30.285534],[-101.544572,30.285534]]]},"id":"48465"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.246114,30.258149],[-82.879159,29.885717],[-82.906544,29.825471],[-82.917498,29.825471],[-82.922975,29.825471],[-82.939406,29.825471],[-83.317314,29.819994],[-83.366607,30.258149],[-83.246114,30.258149]]]},"id":"12067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.389431,30.252672],[-81.378478,30.252672],[-81.214169,29.672117],[-81.214169,29.672117],[-81.526355,29.622824],[-81.581124,29.841902],[-81.679709,30.121226],[-81.389431,30.252672]]]},"id":"12109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.821169,30.247195],[-95.804738,30.247195],[-95.804738,30.088364],[-95.826646,29.787132],[-95.826646,29.787132],[-96.03477,29.726886],[-96.144309,30.071933],[-96.095016,30.225288],[-95.821169,30.247195]]]},"id":"48473"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.70707,30.247195],[-93.723501,30.050025],[-93.854948,29.863809],[-94.117841,30.159564],[-94.117841,30.241718],[-93.898763,30.241718],[-93.70707,30.247195]]]},"id":"48361"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.420906,30.060979],[-90.278506,30.230764],[-90.229213,29.694024],[-90.541399,29.891194],[-90.420906,30.060979]]]},"id":"22089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.278506,30.230764],[-90.245644,30.225288],[-90.103244,30.192426],[-90.010136,29.896671],[-89.977274,29.447562],[-90.032043,29.431131],[-90.229213,29.694024],[-90.278506,30.230764]]]},"id":"22051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.22329,30.20338],[-85.113751,30.197903],[-85.02612,29.973348],[-85.217813,29.694024],[-85.387598,29.924056],[-85.387598,30.20338],[-85.22329,30.20338]]]},"id":"12045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.900597,30.192426],[-89.62675,30.14861],[-89.856781,30.00621],[-89.862258,30.000733],[-89.911551,29.869286],[-89.988228,29.907625],[-90.010136,29.896671],[-90.103244,30.192426],[-89.900597,30.192426]]]},"id":"22071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.701617,30.192426],[-81.679709,30.121226],[-81.581124,29.841902],[-82.046664,29.715932],[-82.052141,30.143133],[-82.052141,30.186949],[-81.701617,30.192426]]]},"id":"12019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.216426,30.175995],[-94.117841,30.159564],[-93.854948,29.863809],[-93.838517,29.688547],[-94.353349,29.562578],[-94.44098,29.891194],[-94.446457,30.110272],[-94.216426,30.175995]]]},"id":"48245"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.218706,30.066456],[-95.098213,30.165041],[-94.97772,29.885717],[-94.928428,29.672117],[-95.016059,29.557101],[-95.202275,29.562578],[-95.218706,29.557101],[-95.295383,29.595439],[-95.42683,29.579009],[-95.826646,29.787132],[-95.804738,30.088364],[-95.218706,30.066456]]]},"id":"48201"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.639984,30.165041],[-90.656414,29.891194],[-90.727615,29.913102],[-90.886446,29.907625],[-90.963123,30.066456],[-90.639984,30.165041]]]},"id":"22093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.801542,30.154087],[-96.796065,30.159564],[-96.620803,30.044549],[-96.57151,29.962394],[-96.872742,29.633778],[-97.141112,29.628301],[-97.316374,29.787132],[-97.316374,29.787132],[-97.026096,30.050025],[-96.801542,30.154087]]]},"id":"48149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.250204,30.143133],[-91.965403,30.033595],[-91.97088,29.803563],[-91.998265,29.61187],[-92.04208,29.579009],[-92.617159,29.579009],[-92.737652,30.039072],[-92.628113,30.093841],[-92.283066,30.14861],[-92.250204,30.143133]]]},"id":"22113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.145249,30.143133],[-82.052141,30.143133],[-82.046664,29.715932],[-82.052141,29.715932],[-82.419096,29.924056],[-82.145249,30.143133]]]},"id":"12007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.298603,30.143133],[-82.145249,30.143133],[-82.419096,29.924056],[-82.506727,29.940487],[-82.528635,29.940487],[-82.457435,30.137656],[-82.298603,30.143133]]]},"id":"12125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.921118,30.137656],[-98.587024,30.137656],[-98.411762,29.93501],[-98.64727,29.743317],[-98.778717,29.721409],[-98.915641,29.781655],[-98.921118,30.137656]]]},"id":"48259"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.724418,30.121226],[-91.368417,30.060979],[-91.226016,30.022641],[-91.253401,29.973348],[-91.472479,29.956917],[-91.532725,29.951441],[-91.877772,29.721409],[-91.97088,29.803563],[-91.965403,30.033595],[-91.948972,30.071933],[-91.724418,30.121226]]]},"id":"22045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.379817,30.082887],[-96.144309,30.071933],[-96.03477,29.726886],[-96.089539,29.600916],[-96.17717,29.633778],[-96.57151,29.962394],[-96.620803,30.044549],[-96.379817,30.082887]]]},"id":"48015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.759089,30.071933],[-99.600258,29.907625],[-99.605735,29.628301],[-100.016506,29.622824],[-99.759089,30.071933]]]},"id":"48385"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.078139,30.07741],[-90.963123,30.066456],[-90.886446,29.907625],[-91.006939,29.715932],[-91.083616,29.628301],[-91.100047,29.699501],[-91.253401,29.973348],[-91.226016,30.022641],[-91.105524,30.060979],[-91.078139,30.07741]]]},"id":"22007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.862258,30.000733],[-89.856781,30.00621],[-89.369334,29.913102],[-89.484349,29.622824],[-89.911551,29.869286],[-89.862258,30.000733]]]},"id":"22087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.666898,30.066456],[-97.650467,30.071933],[-97.316374,29.787132],[-97.316374,29.787132],[-97.634037,29.650209],[-97.798345,29.754271],[-97.875022,29.858333],[-97.710714,30.022641],[-97.666898,30.066456]]]},"id":"48055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.372977,30.050025],[-92.995068,30.039072],[-92.737652,30.039072],[-92.617159,29.579009],[-93.2251,29.776178],[-93.838517,29.688547],[-93.854948,29.863809],[-93.723501,30.050025],[-93.372977,30.050025]]]},"id":"22023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.296746,30.039072],[-98.000992,29.754271],[-98.313177,29.595439],[-98.64727,29.743317],[-98.411762,29.93501],[-98.296746,30.039072]]]},"id":"48091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.004212,30.011687],[-84.544149,30.011687],[-84.341502,29.962394],[-85.217813,29.694024],[-85.02612,29.973348],[-85.004212,30.011687]]]},"id":"12037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.472479,29.956917],[-91.253401,29.973348],[-91.100047,29.699501],[-91.472479,29.956917]]]},"id":"22099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.57151,29.962394],[-96.17717,29.633778],[-96.64271,29.250392],[-96.659141,29.261346],[-96.872742,29.633778],[-96.57151,29.962394]]]},"id":"48089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.532725,29.951441],[-91.472479,29.956917],[-91.100047,29.699501],[-91.083616,29.628301],[-91.275309,29.474947],[-91.877772,29.721409],[-91.532725,29.951441]]]},"id":"22101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.506727,29.940487],[-82.419096,29.924056],[-82.052141,29.715932],[-82.057618,29.46947],[-82.408142,29.485901],[-82.654605,29.562578],[-82.660082,29.830948],[-82.528635,29.940487],[-82.506727,29.940487]]]},"id":"12001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.879159,29.885717],[-82.802482,29.93501],[-82.660082,29.830948],[-82.654605,29.562578],[-82.873682,29.589962],[-82.939406,29.589962],[-82.922975,29.825471],[-82.917498,29.825471],[-82.906544,29.825471],[-82.879159,29.885717]]]},"id":"12041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.727615,29.913102],[-90.656414,29.891194],[-90.541399,29.891194],[-90.229213,29.694024],[-90.032043,29.431131],[-90.064905,29.212054],[-90.086813,29.162761],[-90.409952,29.195623],[-90.815246,29.776178],[-91.006939,29.715932],[-90.886446,29.907625],[-90.727615,29.913102]]]},"id":"22057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.600258,29.907625],[-98.915641,29.781655],[-98.778717,29.721409],[-98.806102,29.688547],[-99.414042,29.628301],[-99.605735,29.628301],[-99.600258,29.907625]]]},"id":"48019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-89.988228,29.907625],[-89.911551,29.869286],[-89.484349,29.622824],[-89.002379,29.179192],[-89.16121,29.009407],[-89.977274,29.447562],[-90.010136,29.896671],[-89.988228,29.907625]]]},"id":"22075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.44098,29.891194],[-94.353349,29.562578],[-94.36978,29.557101],[-94.36978,29.595439],[-94.512181,29.54067],[-94.928428,29.672117],[-94.97772,29.885717],[-94.44098,29.891194]]]},"id":"48071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.798345,29.754271],[-97.634037,29.650209],[-97.84216,29.376362],[-98.132438,29.442085],[-98.313177,29.595439],[-98.000992,29.754271],[-97.875022,29.858333],[-97.798345,29.754271]]]},"id":"48187"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.581124,29.841902],[-81.526355,29.622824],[-81.433247,29.39827],[-81.679709,29.327069],[-81.844017,29.518762],[-82.057618,29.46947],[-82.052141,29.715932],[-82.046664,29.715932],[-81.581124,29.841902]]]},"id":"12107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.939406,29.825471],[-82.922975,29.825471],[-82.939406,29.589962],[-83.16396,29.288731],[-83.410422,29.66664],[-83.317314,29.819994],[-82.939406,29.825471]]]},"id":"12029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.826646,29.787132],[-95.826646,29.787132],[-95.42683,29.579009],[-95.848554,29.261346],[-96.089539,29.600916],[-96.03477,29.726886],[-95.826646,29.787132]]]},"id":"48157"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.316374,29.787132],[-97.141112,29.628301],[-97.239697,29.381839],[-97.612129,29.107992],[-97.727145,29.223007],[-97.84216,29.376362],[-97.634037,29.650209],[-97.316374,29.787132]]]},"id":"48177"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.815246,29.776178],[-90.409952,29.195623],[-90.837154,29.036791],[-91.275309,29.474947],[-91.083616,29.628301],[-91.006939,29.715932],[-90.815246,29.776178]]]},"id":"22109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.64727,29.743317],[-98.313177,29.595439],[-98.132438,29.442085],[-98.285792,29.255869],[-98.406285,29.113469],[-98.800625,29.250392],[-98.806102,29.250392],[-98.806102,29.688547],[-98.778717,29.721409],[-98.64727,29.743317]]]},"id":"48029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.806102,29.688547],[-98.806102,29.250392],[-98.806102,29.091561],[-98.904687,29.091561],[-99.414042,29.091561],[-99.414042,29.628301],[-98.806102,29.688547]]]},"id":"48325"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.214169,29.672117],[-81.214169,29.672117],[-81.10463,29.425654],[-81.110107,29.425654],[-81.433247,29.39827],[-81.526355,29.622824],[-81.214169,29.672117]]]},"id":"12035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.17717,29.633778],[-96.089539,29.600916],[-95.848554,29.261346],[-95.875939,29.228484],[-96.308617,28.965591],[-96.64271,29.250392],[-96.17717,29.633778]]]},"id":"48481"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.872742,29.633778],[-96.659141,29.261346],[-96.938465,29.064176],[-96.976804,29.102515],[-97.239697,29.381839],[-97.141112,29.628301],[-96.872742,29.633778]]]},"id":"48285"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.605735,29.628301],[-99.414042,29.628301],[-99.414042,29.091561],[-100.109614,29.086084],[-100.109614,29.622824],[-100.016506,29.622824],[-99.605735,29.628301]]]},"id":"48463"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.575153,29.622824],[-100.109614,29.622824],[-100.109614,29.086084],[-100.668261,29.086084],[-100.794231,29.239438],[-100.701123,29.622824],[-100.575153,29.622824]]]},"id":"48271"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.295383,29.595439],[-95.218706,29.557101],[-95.120121,29.07513],[-95.508984,28.823191],[-95.864985,29.223007],[-95.875939,29.228484],[-95.848554,29.261346],[-95.42683,29.579009],[-95.295383,29.595439]]]},"id":"48039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.36978,29.595439],[-94.36978,29.557101],[-94.512181,29.54067],[-94.36978,29.595439]]]},"id":"48167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.873682,29.589962],[-82.654605,29.562578],[-82.408142,29.485901],[-82.534112,29.042268],[-82.758666,28.992976],[-83.16396,29.288731],[-82.939406,29.589962],[-82.873682,29.589962]]]},"id":"12075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.202275,29.562578],[-95.016059,29.557101],[-95.120121,29.07513],[-95.218706,29.557101],[-95.202275,29.562578]]]},"id":"48167"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.844017,29.518762],[-81.679709,29.327069],[-81.641371,29.277777],[-81.953556,28.960114],[-82.013803,28.960114],[-82.309557,28.960114],[-82.523158,29.042268],[-82.534112,29.042268],[-82.408142,29.485901],[-82.057618,29.46947],[-81.844017,29.518762]]]},"id":"12083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.285792,29.255869],[-98.132438,29.442085],[-97.84216,29.376362],[-97.727145,29.223007],[-98.192684,28.883437],[-98.406285,29.113469],[-98.285792,29.255869]]]},"id":"48493"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.110107,29.425654],[-81.10463,29.425654],[-80.732199,28.790329],[-80.989615,28.615067],[-81.367524,28.87796],[-81.641371,29.277777],[-81.679709,29.327069],[-81.433247,29.39827],[-81.110107,29.425654]]]},"id":"12127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.239697,29.381839],[-96.976804,29.102515],[-97.30542,28.861529],[-97.57379,28.812237],[-97.612129,29.107992],[-97.239697,29.381839]]]},"id":"48123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.641371,29.277777],[-81.367524,28.87796],[-81.411339,28.784852],[-81.542786,28.784852],[-81.657801,28.346697],[-81.959033,28.346697],[-81.953556,28.960114],[-81.641371,29.277777]]]},"id":"12069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.659141,29.261346],[-96.64271,29.250392],[-96.308617,28.965591],[-96.325048,28.675313],[-96.576987,28.708175],[-96.576987,28.702698],[-96.64271,28.713652],[-96.938465,29.064176],[-96.659141,29.261346]]]},"id":"48239"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.800625,29.250392],[-98.406285,29.113469],[-98.192684,28.883437],[-98.099576,28.784852],[-98.335085,28.615067],[-98.581547,28.642452],[-98.800625,28.636975],[-98.800625,28.647929],[-98.806102,29.091561],[-98.806102,29.250392],[-98.800625,29.250392]]]},"id":"48013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-95.864985,29.223007],[-95.508984,28.823191],[-96.379817,28.385036],[-96.37434,28.401466],[-96.325048,28.642452],[-96.325048,28.675313],[-96.308617,28.965591],[-95.875939,29.228484],[-95.864985,29.223007]]]},"id":"48321"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.727145,29.223007],[-97.612129,29.107992],[-97.57379,28.812237],[-97.776437,28.669836],[-97.935268,28.713652],[-98.006468,28.691744],[-98.099576,28.784852],[-98.192684,28.883437],[-97.727145,29.223007]]]},"id":"48255"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.976804,29.102515],[-96.938465,29.064176],[-96.64271,28.713652],[-96.653664,28.702698],[-96.889173,28.505528],[-97.146589,28.549344],[-97.16302,28.554821],[-97.30542,28.861529],[-96.976804,29.102515]]]},"id":"48469"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.904687,29.091561],[-98.806102,29.091561],[-98.800625,28.647929],[-99.397611,28.642452],[-99.408565,28.642452],[-99.414042,29.091561],[-98.904687,29.091561]]]},"id":"48163"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.414042,29.091561],[-99.408565,28.642452],[-99.780997,28.642452],[-100.115091,28.647929],[-100.109614,29.086084],[-99.414042,29.091561]]]},"id":"48507"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.109614,29.086084],[-100.115091,28.647929],[-100.115091,28.19882],[-100.213675,28.19882],[-100.668261,29.086084],[-100.109614,29.086084]]]},"id":"48323"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.523158,29.042268],[-82.309557,28.960114],[-82.265742,28.669836],[-82.649128,28.691744],[-82.758666,28.992976],[-82.534112,29.042268],[-82.523158,29.042268]]]},"id":"12017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.013803,28.960114],[-81.953556,28.960114],[-81.959033,28.346697],[-82.057618,28.313835],[-82.057618,28.478144],[-82.265742,28.669836],[-82.309557,28.960114],[-82.013803,28.960114]]]},"id":"12119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.30542,28.861529],[-97.16302,28.554821],[-97.37662,28.390513],[-97.776437,28.669836],[-97.57379,28.812237],[-97.30542,28.861529]]]},"id":"48175"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.411339,28.784852],[-81.367524,28.87796],[-80.989615,28.615067],[-81.411339,28.784852]]]},"id":"12117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.447398,27.859249],[-80.869122,27.820911],[-80.863645,28.346697],[-80.989615,28.615067],[-80.732199,28.790329],[-80.447398,27.859249]]]},"id":"12009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.099576,28.784852],[-98.006468,28.691744],[-97.820252,28.176912],[-97.880499,28.056419],[-98.2365,28.056419],[-98.335085,28.056419],[-98.335085,28.615067],[-98.099576,28.784852]]]},"id":"48297"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.542786,28.784852],[-81.411339,28.784852],[-80.989615,28.615067],[-80.863645,28.346697],[-81.2306,28.346697],[-81.657801,28.346697],[-81.542786,28.784852]]]},"id":"12095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.576987,28.708175],[-96.325048,28.675313],[-96.325048,28.642452],[-96.576987,28.702698],[-96.576987,28.708175]]]},"id":"48057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.935268,28.713652],[-97.776437,28.669836],[-97.37662,28.390513],[-97.540929,28.165958],[-97.820252,28.176912],[-98.006468,28.691744],[-97.935268,28.713652]]]},"id":"48025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.763203,28.41242],[-96.889173,28.505528],[-96.653664,28.702698],[-96.763203,28.41242]]]},"id":"48057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.265742,28.669836],[-82.057618,28.478144],[-82.254788,28.478144],[-82.676512,28.434328],[-82.649128,28.691744],[-82.265742,28.669836]]]},"id":"12053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.780997,28.642452],[-99.408565,28.642452],[-99.397611,28.642452],[-99.392134,28.204297],[-100.115091,28.19882],[-100.115091,28.647929],[-99.780997,28.642452]]]},"id":"48127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.800625,28.647929],[-98.800625,28.636975],[-98.800625,28.056419],[-99.392134,28.204297],[-99.397611,28.642452],[-98.800625,28.647929]]]},"id":"48283"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.581547,28.642452],[-98.335085,28.615067],[-98.335085,28.056419],[-98.800625,28.056419],[-98.800625,28.636975],[-98.581547,28.642452]]]},"id":"48311"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.146589,28.549344],[-96.889173,28.505528],[-96.763203,28.41242],[-96.790588,28.319312],[-97.261605,28.078327],[-97.540929,28.165958],[-97.37662,28.390513],[-97.16302,28.554821],[-97.146589,28.549344]]]},"id":"48391"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.254788,28.478144],[-82.057618,28.478144],[-82.057618,28.313835],[-82.106911,28.171435],[-82.649128,28.171435],[-82.802482,28.171435],[-82.676512,28.434328],[-82.254788,28.478144]]]},"id":"12101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.657801,28.346697],[-81.142969,27.645649],[-81.49897,27.645649],[-81.564693,27.645649],[-82.052141,27.645649],[-82.106911,28.171435],[-82.057618,28.313835],[-81.959033,28.346697],[-81.657801,28.346697]]]},"id":"12105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.2306,28.346697],[-80.863645,28.346697],[-80.869122,27.820911],[-80.874599,27.640172],[-81.142969,27.645649],[-81.657801,28.346697],[-81.2306,28.346697]]]},"id":"12097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.801542,28.275497],[-96.812495,28.21525],[-97.135635,27.903065],[-97.261605,28.078327],[-96.790588,28.319312],[-96.801542,28.275497]]]},"id":"48007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.115091,28.19882],[-99.392134,28.204297],[-98.800625,28.056419],[-98.800625,27.355371],[-98.953979,27.26774],[-99.359273,27.306078],[-99.452381,27.262263],[-100.213675,28.19882],[-100.115091,28.19882]]]},"id":"48479"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.820252,28.176912],[-97.540929,28.165958],[-97.261605,28.078327],[-97.135635,27.903065],[-97.365666,27.848295],[-97.803822,27.979742],[-97.798345,27.996173],[-97.880499,28.056419],[-97.820252,28.176912]]]},"id":"48409"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.649128,28.171435],[-82.106911,28.171435],[-82.052141,27.645649],[-82.28765,27.645649],[-82.55602,27.645649],[-82.649128,27.968788],[-82.649128,28.171435]]]},"id":"12057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.649128,28.171435],[-82.649128,27.968788],[-82.802482,28.171435],[-82.649128,28.171435]]]},"id":"12103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-96.828926,28.111189],[-96.856311,28.061896],[-97.048004,27.837342],[-97.053481,27.842818],[-96.828926,28.111189]]]},"id":"48007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.335085,28.056419],[-98.2365,28.056419],[-98.231023,27.262263],[-98.521301,27.26774],[-98.800625,27.355371],[-98.800625,28.056419],[-98.335085,28.056419]]]},"id":"48131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.2365,28.056419],[-97.880499,28.056419],[-97.798345,27.996173],[-97.940745,27.634695],[-98.011945,27.634695],[-98.055761,27.262263],[-98.231023,27.262263],[-98.2365,28.056419]]]},"id":"48249"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.803822,27.979742],[-97.365666,27.848295],[-97.327328,27.563495],[-97.940745,27.634695],[-97.798345,27.996173],[-97.803822,27.979742]]]},"id":"48355"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.321428,27.558018],[-80.677429,27.558018],[-80.792445,27.645649],[-80.874599,27.640172],[-80.869122,27.820911],[-80.447398,27.859249],[-80.321428,27.558018]]]},"id":"12061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.053481,27.842818],[-97.048004,27.837342],[-97.223266,27.574448],[-97.245174,27.579925],[-97.053481,27.842818]]]},"id":"48355"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.49897,27.645649],[-81.142969,27.645649],[-80.945799,27.21297],[-81.564693,27.032231],[-81.564693,27.33894],[-81.564693,27.645649],[-81.49897,27.645649]]]},"id":"12055"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.28765,27.645649],[-82.052141,27.645649],[-82.057618,27.33894],[-82.057618,27.207493],[-82.62722,27.388232],[-82.643651,27.388232],[-82.55602,27.645649],[-82.28765,27.645649]]]},"id":"12081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.052141,27.645649],[-81.564693,27.645649],[-81.564693,27.33894],[-81.581124,27.33894],[-82.057618,27.33894],[-82.052141,27.645649]]]},"id":"12049"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.792445,27.645649],[-80.677429,27.558018],[-80.677429,27.207493],[-80.885553,26.961031],[-80.945799,27.21297],[-81.142969,27.645649],[-80.874599,27.640172],[-80.792445,27.645649]]]},"id":"12093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.011945,27.634695],[-97.940745,27.634695],[-97.327328,27.563495],[-97.634037,27.284171],[-97.738098,27.273217],[-97.984561,27.207493],[-98.055761,27.262263],[-98.011945,27.634695]]]},"id":"48273"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.245174,27.579925],[-97.223266,27.574448],[-97.349236,27.278694],[-97.371143,27.278694],[-97.245174,27.579925]]]},"id":"48273"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.677429,27.558018],[-80.321428,27.558018],[-80.200935,27.262263],[-80.677429,27.207493],[-80.677429,27.558018]]]},"id":"12111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.62722,27.388232],[-82.057618,27.207493],[-82.057618,27.032231],[-82.375281,26.9446],[-82.643651,27.388232],[-82.62722,27.388232]]]},"id":"12115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.521301,27.26774],[-98.422716,26.785769],[-98.953979,26.785769],[-98.953979,27.26774],[-98.800625,27.355371],[-98.521301,27.26774]]]},"id":"48247"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.581124,27.33894],[-81.564693,27.33894],[-81.564693,27.032231],[-82.041187,27.032231],[-82.057618,27.032231],[-82.057618,27.207493],[-82.057618,27.33894],[-81.581124,27.33894]]]},"id":"12027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-99.359273,27.306078],[-98.953979,27.26774],[-98.953979,26.785769],[-99.16758,26.572168],[-99.452381,27.262263],[-99.359273,27.306078]]]},"id":"48505"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.738098,27.273217],[-97.634037,27.284171],[-97.442344,26.599553],[-97.655944,26.599553],[-97.957176,26.610507],[-97.984561,26.780292],[-97.984561,27.207493],[-97.738098,27.273217]]]},"id":"48261"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.371143,27.278694],[-97.349236,27.278694],[-97.288989,26.599553],[-97.316374,26.599553],[-97.371143,27.278694]]]},"id":"48261"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.521301,27.26774],[-98.231023,27.262263],[-98.055761,27.262263],[-97.984561,27.207493],[-97.984561,26.780292],[-98.318654,26.785769],[-98.422716,26.785769],[-98.521301,27.26774]]]},"id":"48047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.080443,26.971985],[-80.885553,26.961031],[-80.677429,27.207493],[-80.200935,27.262263],[-80.080443,26.971985]]]},"id":"12085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.945799,27.21297],[-80.885553,26.961031],[-80.96223,26.769338],[-81.564693,26.769338],[-81.564693,27.032231],[-80.945799,27.21297]]]},"id":"12043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.041187,27.032231],[-81.564693,27.032231],[-81.564693,26.769338],[-82.063095,26.769338],[-82.210972,26.774815],[-82.23288,26.780292],[-82.23288,26.785769],[-82.271219,26.791246],[-82.375281,26.9446],[-82.057618,27.032231],[-82.041187,27.032231]]]},"id":"12015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.885553,26.961031],[-80.080443,26.971985],[-80.074966,26.320229],[-80.250228,26.33666],[-80.880076,26.331183],[-80.885553,26.961031]]]},"id":"12099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.96223,26.769338],[-80.885553,26.961031],[-80.880076,26.331183],[-80.880076,26.259983],[-81.564693,26.511922],[-81.564693,26.769338],[-80.96223,26.769338]]]},"id":"12051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.953979,26.785769],[-98.422716,26.785769],[-98.318654,26.785769],[-98.587024,26.254506],[-99.16758,26.572168],[-98.953979,26.785769]]]},"id":"48427"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-98.318654,26.785769],[-97.984561,26.780292],[-97.957176,26.610507],[-97.864068,26.347614],[-97.864068,26.051859],[-98.587024,26.254506],[-98.318654,26.785769]]]},"id":"48215"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.063095,26.769338],[-81.564693,26.769338],[-81.564693,26.511922],[-81.844017,26.331183],[-82.063095,26.769338]]]},"id":"12071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.655944,26.599553],[-97.442344,26.599553],[-97.382097,26.413337],[-97.864068,26.347614],[-97.957176,26.610507],[-97.655944,26.599553]]]},"id":"48489"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.316374,26.599553],[-97.288989,26.599553],[-97.223266,26.413337],[-97.239697,26.413337],[-97.316374,26.599553]]]},"id":"48489"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-81.564693,26.511922],[-80.880076,26.259983],[-80.874599,25.980659],[-80.874599,25.805397],[-81.345616,25.805397],[-81.679709,25.843735],[-81.844017,26.331183],[-81.564693,26.511922]]]},"id":"12021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.864068,26.347614],[-97.382097,26.413337],[-97.371143,25.838258],[-97.864068,26.051859],[-97.864068,26.347614]]]},"id":"48061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.250228,26.33666],[-80.074966,26.320229],[-80.118781,25.975182],[-80.874599,25.980659],[-80.880076,26.259983],[-80.880076,26.331183],[-80.250228,26.33666]]]},"id":"12011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.874599,25.980659],[-80.118781,25.975182],[-80.304997,25.383672],[-80.858168,25.175549],[-80.874599,25.805397],[-80.874599,25.980659]]]},"id":"12086"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.874599,25.805397],[-80.858168,25.175549],[-81.077246,25.120779],[-81.345616,25.805397],[-80.874599,25.805397]]]},"id":"12087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-157.951581,21.697691],[-157.655826,21.303352],[-158.110412,21.303352],[-157.951581,21.697691]]]},"id":"15003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-156.587823,21.029505],[-156.00179,20.793996],[-156.379699,20.580396],[-156.587823,21.029505]]]},"id":"15009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-155.634835,18.948267],[-155.881297,19.035898],[-156.062036,19.73147],[-155.87582,20.26821],[-155.284311,20.021748],[-154.807817,19.523346],[-155.634835,18.948267]]]},"id":"15001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.105571,18.515589],[-67.105571,18.515589],[-66.957694,18.488204],[-66.919355,18.395096],[-67.012463,18.395096],[-67.028894,18.395096],[-67.056278,18.46082],[-67.105571,18.515589]]]},"id":"72071"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.105571,18.515589],[-67.056278,18.46082],[-67.132956,18.389619],[-67.16034,18.417004],[-67.105571,18.515589],[-67.105571,18.515589]]]},"id":"72005"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.585262,18.482727],[-66.585262,18.482727],[-66.590739,18.389619],[-66.590739,18.340327],[-66.607169,18.329373],[-66.711231,18.312942],[-66.771478,18.323896],[-66.766001,18.482727],[-66.585262,18.482727]]]},"id":"72013"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.766001,18.482727],[-66.771478,18.323896],[-66.826247,18.323896],[-66.826247,18.340327],[-66.837201,18.488204],[-66.766001,18.482727]]]},"id":"72065"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.902924,18.482727],[-66.897447,18.367712],[-66.919355,18.395096],[-66.957694,18.488204],[-66.902924,18.482727]]]},"id":"72115"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.837201,18.488204],[-66.826247,18.340327],[-66.89197,18.367712],[-66.897447,18.367712],[-66.902924,18.482727],[-66.837201,18.488204]]]},"id":"72027"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.585262,18.482727],[-66.585262,18.482727],[-66.535969,18.482727],[-66.541446,18.40605],[-66.590739,18.389619],[-66.585262,18.482727]]]},"id":"72017"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.349753,18.488204],[-66.377138,18.345804],[-66.442861,18.373189],[-66.437384,18.482727],[-66.437384,18.488204],[-66.349753,18.488204]]]},"id":"72145"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.316892,18.47725],[-66.305938,18.384142],[-66.316892,18.367712],[-66.366184,18.33485],[-66.377138,18.345804],[-66.349753,18.488204],[-66.316892,18.47725]]]},"id":"72143"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.437384,18.482727],[-66.442861,18.373189],[-66.464769,18.373189],[-66.475723,18.367712],[-66.535969,18.351281],[-66.541446,18.400573],[-66.541446,18.40605],[-66.535969,18.482727],[-66.437384,18.488204],[-66.437384,18.482727]]]},"id":"72091"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.196399,18.466297],[-66.251168,18.395096],[-66.305938,18.384142],[-66.316892,18.47725],[-66.196399,18.466297]]]},"id":"72051"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.037568,18.449866],[-65.999229,18.378666],[-66.043044,18.312942],[-66.064952,18.301988],[-66.081383,18.296511],[-66.108768,18.438912],[-66.125199,18.46082],[-66.037568,18.449866]]]},"id":"72127"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.141629,18.46082],[-66.169014,18.433435],[-66.196399,18.389619],[-66.218307,18.395096],[-66.251168,18.395096],[-66.196399,18.466297],[-66.141629,18.46082]]]},"id":"72137"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.125199,18.46082],[-66.108768,18.438912],[-66.130676,18.422481],[-66.130676,18.422481],[-66.169014,18.433435],[-66.141629,18.46082],[-66.125199,18.46082]]]},"id":"72033"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.056278,18.46082],[-67.028894,18.395096],[-67.050802,18.307465],[-67.122002,18.323896],[-67.127479,18.318419],[-67.132956,18.389619],[-67.056278,18.46082]]]},"id":"72099"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.829444,18.422481],[-65.867782,18.378666],[-65.911598,18.400573],[-65.917075,18.400573],[-65.993752,18.46082],[-65.829444,18.422481]]]},"id":"72087"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.993752,18.46082],[-65.917075,18.400573],[-65.917075,18.269127],[-65.94446,18.291034],[-65.999229,18.378666],[-66.037568,18.449866],[-65.993752,18.46082]]]},"id":"72031"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.130676,18.422481],[-66.108768,18.438912],[-66.081383,18.296511],[-66.141629,18.280081],[-66.130676,18.422481],[-66.130676,18.422481]]]},"id":"72061"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.169014,18.433435],[-66.130676,18.422481],[-66.141629,18.280081],[-66.190922,18.258173],[-66.207353,18.274604],[-66.207353,18.318419],[-66.196399,18.389619],[-66.169014,18.433435]]]},"id":"72021"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.752767,18.384142],[-65.758244,18.291034],[-65.769197,18.280081],[-65.823967,18.274604],[-65.834921,18.274604],[-65.867782,18.378666],[-65.829444,18.422481],[-65.752767,18.384142]]]},"id":"72119"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.16034,18.417004],[-67.132956,18.389619],[-67.127479,18.318419],[-67.182248,18.312942],[-67.237017,18.373189],[-67.16034,18.417004]]]},"id":"72003"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.911598,18.400573],[-65.867782,18.378666],[-65.834921,18.274604],[-65.851352,18.252696],[-65.917075,18.269127],[-65.917075,18.400573],[-65.911598,18.400573]]]},"id":"72029"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.541446,18.400573],[-66.535969,18.351281],[-66.590739,18.340327],[-66.590739,18.389619],[-66.541446,18.40605],[-66.541446,18.400573]]]},"id":"72054"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.218307,18.395096],[-66.196399,18.389619],[-66.207353,18.318419],[-66.256645,18.329373],[-66.278553,18.329373],[-66.305938,18.367712],[-66.316892,18.367712],[-66.305938,18.384142],[-66.251168,18.395096],[-66.218307,18.395096]]]},"id":"72135"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.012463,18.395096],[-66.919355,18.395096],[-66.897447,18.367712],[-66.89197,18.367712],[-66.908401,18.252696],[-67.039848,18.291034],[-67.050802,18.307465],[-67.028894,18.395096],[-67.012463,18.395096]]]},"id":"72131"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.632274,18.285558],[-65.752767,18.296511],[-65.670613,18.362235],[-65.632274,18.285558]]]},"id":"72053"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.758244,18.291034],[-65.752767,18.384142],[-65.670613,18.362235],[-65.752767,18.296511],[-65.758244,18.291034]]]},"id":"72089"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.999229,18.378666],[-65.94446,18.291034],[-65.982798,18.312942],[-66.021137,18.307465],[-66.043044,18.312942],[-65.999229,18.378666]]]},"id":"72139"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.442861,18.373189],[-66.377138,18.345804],[-66.366184,18.33485],[-66.377138,18.296511],[-66.453815,18.258173],[-66.464769,18.373189],[-66.442861,18.373189]]]},"id":"72101"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.237017,18.373189],[-67.182248,18.312942],[-67.226064,18.296511],[-67.237017,18.373189]]]},"id":"72117"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.475723,18.367712],[-66.464769,18.373189],[-66.453815,18.258173],[-66.541446,18.165065],[-66.568831,18.296511],[-66.607169,18.329373],[-66.590739,18.340327],[-66.535969,18.351281],[-66.475723,18.367712]]]},"id":"72039"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.305938,18.367712],[-66.278553,18.329373],[-66.311415,18.247219],[-66.349753,18.241742],[-66.377138,18.296511],[-66.366184,18.33485],[-66.316892,18.367712],[-66.305938,18.367712]]]},"id":"72047"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.89197,18.367712],[-66.826247,18.340327],[-66.826247,18.323896],[-66.815293,18.230788],[-66.826247,18.170542],[-66.837201,18.170542],[-66.897447,18.186973],[-66.908401,18.252696],[-66.89197,18.367712]]]},"id":"72081"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.711231,18.312942],[-66.607169,18.329373],[-66.568831,18.296511],[-66.650985,18.159588],[-66.672893,18.154111],[-66.722185,18.219834],[-66.815293,18.230788],[-66.826247,18.323896],[-66.771478,18.323896],[-66.711231,18.312942]]]},"id":"72141"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.256645,18.329373],[-66.207353,18.318419],[-66.207353,18.274604],[-66.267599,18.247219],[-66.311415,18.247219],[-66.278553,18.329373],[-66.256645,18.329373]]]},"id":"72105"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.122002,18.323896],[-67.050802,18.307465],[-67.039848,18.291034],[-67.083663,18.252696],[-67.16034,18.274604],[-67.187725,18.269127],[-67.226064,18.296511],[-67.182248,18.312942],[-67.127479,18.318419],[-67.122002,18.323896]]]},"id":"72011"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.021137,18.307465],[-65.999229,18.20888],[-66.053998,18.115772],[-66.097814,18.170542],[-66.119722,18.20888],[-66.064952,18.301988],[-66.043044,18.312942],[-66.021137,18.307465]]]},"id":"72025"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.982798,18.312942],[-65.94446,18.291034],[-65.917075,18.269127],[-65.949936,18.230788],[-65.966367,18.230788],[-65.999229,18.20888],[-66.021137,18.307465],[-65.982798,18.312942]]]},"id":"72063"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.064952,18.301988],[-66.119722,18.20888],[-66.147106,18.230788],[-66.169014,18.225311],[-66.190922,18.258173],[-66.141629,18.280081],[-66.081383,18.296511],[-66.064952,18.301988]]]},"id":"72007"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.568831,18.296511],[-66.541446,18.165065],[-66.546923,18.154111],[-66.5524,18.154111],[-66.650985,18.159588],[-66.568831,18.296511]]]},"id":"72073"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.752767,18.296511],[-65.632274,18.285558],[-65.659659,18.20888],[-65.769197,18.280081],[-65.758244,18.291034],[-65.752767,18.296511]]]},"id":"72037"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.823967,18.274604],[-65.769197,18.280081],[-65.659659,18.20888],[-65.741813,18.176019],[-65.823967,18.197926],[-65.823967,18.274604]]]},"id":"72103"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.377138,18.296511],[-66.349753,18.241742],[-66.371661,18.176019],[-66.442861,18.176019],[-66.453815,18.176019],[-66.519538,18.154111],[-66.546923,18.154111],[-66.541446,18.165065],[-66.453815,18.258173],[-66.377138,18.296511]]]},"id":"72107"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.039848,18.291034],[-66.908401,18.252696],[-66.897447,18.186973],[-66.913878,18.19245],[-67.01794,18.197926],[-67.083663,18.252696],[-67.039848,18.291034]]]},"id":"72083"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.207353,18.274604],[-66.190922,18.258173],[-66.169014,18.225311],[-66.240214,18.186973],[-66.267599,18.247219],[-66.207353,18.274604]]]},"id":"72045"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.823967,18.274604],[-65.823967,18.197926],[-65.878736,18.115772],[-65.906121,18.126726],[-65.928029,18.121249],[-65.928029,18.143157],[-65.851352,18.252696],[-65.834921,18.274604],[-65.823967,18.274604]]]},"id":"72085"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.16034,18.274604],[-67.083663,18.252696],[-67.01794,18.197926],[-67.050802,18.176019],[-67.083663,18.148634],[-67.116525,18.159588],[-67.16034,18.154111],[-67.182248,18.170542],[-67.187725,18.269127],[-67.16034,18.274604]]]},"id":"72097"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.917075,18.269127],[-65.851352,18.252696],[-65.928029,18.143157],[-65.949936,18.230788],[-65.917075,18.269127]]]},"id":"72077"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.722185,18.219834],[-66.672893,18.154111],[-66.6948,18.132203],[-66.716708,18.132203],[-66.771478,18.13768],[-66.798862,18.132203],[-66.826247,18.170542],[-66.815293,18.230788],[-66.722185,18.219834]]]},"id":"72001"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.311415,18.247219],[-66.267599,18.247219],[-66.240214,18.186973],[-66.240214,18.181496],[-66.278553,18.176019],[-66.316892,18.154111],[-66.371661,18.176019],[-66.349753,18.241742],[-66.311415,18.247219]]]},"id":"72019"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.147106,18.230788],[-66.119722,18.20888],[-66.097814,18.170542],[-66.097814,18.159588],[-66.218307,18.143157],[-66.240214,18.181496],[-66.240214,18.186973],[-66.169014,18.225311],[-66.147106,18.230788]]]},"id":"72041"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.966367,18.230788],[-65.949936,18.230788],[-65.928029,18.143157],[-65.928029,18.121249],[-66.010183,18.077434],[-66.053998,18.110295],[-66.053998,18.115772],[-65.999229,18.20888],[-65.966367,18.230788]]]},"id":"72129"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.913878,18.19245],[-66.897447,18.186973],[-66.837201,18.170542],[-66.924832,18.148634],[-66.979601,18.143157],[-67.050802,18.176019],[-67.01794,18.197926],[-66.913878,18.19245]]]},"id":"72093"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.823967,18.197926],[-65.741813,18.176019],[-65.796582,18.071957],[-65.878736,18.115772],[-65.823967,18.197926]]]},"id":"72069"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.278553,18.176019],[-66.240214,18.181496],[-66.218307,18.143157],[-66.223784,18.093865],[-66.256645,18.077434],[-66.316892,18.154111],[-66.278553,18.176019]]]},"id":"72009"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.453815,18.176019],[-66.442861,18.176019],[-66.431907,18.082911],[-66.519538,18.154111],[-66.453815,18.176019]]]},"id":"72149"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.371661,18.176019],[-66.316892,18.154111],[-66.256645,18.077434],[-66.333322,18.017187],[-66.382615,18.039095],[-66.42643,18.044572],[-66.431907,18.082911],[-66.442861,18.176019],[-66.371661,18.176019]]]},"id":"72043"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.050802,18.176019],[-66.979601,18.143157],[-66.985078,18.050049],[-67.067232,18.06648],[-67.111048,18.055526],[-67.100094,18.104819],[-67.083663,18.148634],[-67.050802,18.176019]]]},"id":"72125"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.650985,18.159588],[-66.5524,18.154111],[-66.535969,17.978849],[-66.700277,17.978849],[-66.6948,18.132203],[-66.672893,18.154111],[-66.650985,18.159588]]]},"id":"72113"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.826247,18.170542],[-66.798862,18.132203],[-66.853632,17.956941],[-66.859109,17.956941],[-66.886493,18.022664],[-66.924832,18.148634],[-66.837201,18.170542],[-66.826247,18.170542]]]},"id":"72153"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.097814,18.159588],[-66.097814,18.170542],[-66.053998,18.115772],[-66.053998,18.110295],[-66.053998,18.104819],[-66.075906,18.104819],[-66.163537,18.050049],[-66.223784,18.093865],[-66.218307,18.143157],[-66.097814,18.159588]]]},"id":"72035"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.182248,18.170542],[-67.16034,18.154111],[-67.100094,18.104819],[-67.111048,18.055526],[-67.111048,17.945987],[-67.182248,18.170542]]]},"id":"72023"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.116525,18.159588],[-67.083663,18.148634],[-67.100094,18.104819],[-67.16034,18.154111],[-67.116525,18.159588]]]},"id":"72067"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.546923,18.154111],[-66.519538,18.154111],[-66.431907,18.082911],[-66.42643,18.044572],[-66.448338,17.984326],[-66.535969,17.978849],[-66.5524,18.154111],[-66.546923,18.154111]]]},"id":"72075"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.924832,18.148634],[-66.886493,18.022664],[-66.957694,18.033618],[-66.985078,18.050049],[-66.979601,18.143157],[-66.924832,18.148634]]]},"id":"72121"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.798862,18.132203],[-66.771478,18.13768],[-66.755047,18.000757],[-66.853632,17.956941],[-66.798862,18.132203]]]},"id":"72059"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.716708,18.132203],[-66.6948,18.132203],[-66.700277,17.978849],[-66.755047,18.000757],[-66.771478,18.13768],[-66.716708,18.132203]]]},"id":"72111"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.906121,18.126726],[-65.878736,18.115772],[-65.796582,18.071957],[-65.851352,18.011711],[-65.988275,18.061003],[-66.010183,18.077434],[-65.928029,18.121249],[-65.906121,18.126726]]]},"id":"72151"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.053998,18.104819],[-66.053998,18.110295],[-66.010183,18.077434],[-65.988275,18.061003],[-65.911598,17.984326],[-66.021137,17.978849],[-66.059475,18.039095],[-66.081383,18.033618],[-66.053998,18.104819]]]},"id":"72109"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.075906,18.104819],[-66.053998,18.104819],[-66.081383,18.033618],[-66.070429,17.967895],[-66.207353,17.962418],[-66.163537,18.050049],[-66.075906,18.104819]]]},"id":"72057"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.223784,18.093865],[-66.163537,18.050049],[-66.207353,17.962418],[-66.338799,17.978849],[-66.333322,18.017187],[-66.256645,18.077434],[-66.223784,18.093865]]]},"id":"72123"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-67.067232,18.06648],[-66.985078,18.050049],[-66.957694,18.033618],[-66.979601,17.951464],[-67.111048,17.945987],[-67.111048,18.055526],[-67.067232,18.06648]]]},"id":"72079"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.988275,18.061003],[-65.851352,18.011711],[-65.911598,17.984326],[-65.988275,18.061003]]]},"id":"72095"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.382615,18.039095],[-66.333322,18.017187],[-66.338799,17.978849],[-66.448338,17.984326],[-66.42643,18.044572],[-66.382615,18.039095]]]},"id":"72133"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.059475,18.039095],[-66.021137,17.978849],[-66.070429,17.967895],[-66.081383,18.033618],[-66.059475,18.039095]]]},"id":"72015"},
+{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.957694,18.033618],[-66.886493,18.022664],[-66.859109,17.956941],[-66.979601,17.951464],[-66.957694,18.033618]]]},"id":"72055"}]}
Index: /Dev/trunk/d3/examples/data/us-state-centroids.json
===================================================================
--- /Dev/trunk/d3/examples/data/us-state-centroids.json	(revision 76)
+++ /Dev/trunk/d3/examples/data/us-state-centroids.json	(revision 76)
@@ -0,0 +1,1 @@
+{"type":"FeatureCollection","features":[{"type":"Feature","id":"01","geometry":{"type":"Point","coordinates":[-86.766233,33.001471]},"properties":{"name":"Alabama              ","population":4447100}},{"type":"Feature","id":"02","geometry":{"type":"Point","coordinates":[-148.716968,61.288254]},"properties":{"name":"Alaska                ","population":626932}},{"type":"Feature","id":"04","geometry":{"type":"Point","coordinates":[-111.828711,33.373506]},"properties":{"name":"Arizona              ","population":5130632}},{"type":"Feature","id":"05","geometry":{"type":"Point","coordinates":[-92.576816,35.080251]},"properties":{"name":"Arkansas             ","population":2673400}},{"type":"Feature","id":"06","geometry":{"type":"Point","coordinates":[-119.355165,35.458606]},"properties":{"name":"California          ","population":33871648}},{"type":"Feature","id":"08","geometry":{"type":"Point","coordinates":[-105.203628,39.500656]},"properties":{"name":"Colorado             ","population":4301261}},{"type":"Feature","id":"09","geometry":{"type":"Point","coordinates":[-72.874365,41.494852]},"properties":{"name":"Connecticut          ","population":3405565}},{"type":"Feature","id":"10","geometry":{"type":"Point","coordinates":[-75.561908,39.397164]},"properties":{"name":"Delaware              ","population":783600}},{"type":"Feature","id":"11","geometry":{"type":"Point","coordinates":[-77.014001,38.910092]},"properties":{"name":"District of Columbia  ","population":572059}},{"type":"Feature","id":"12","geometry":{"type":"Point","coordinates":[-81.634622,27.795850]},"properties":{"name":"Florida             ","population":15982378}},{"type":"Feature","id":"13","geometry":{"type":"Point","coordinates":[-83.868887,33.332208]},"properties":{"name":"Georgia              ","population":8186453}},{"type":"Feature","id":"15","geometry":{"type":"Point","coordinates":[-157.524452,21.146768]},"properties":{"name":"Hawaii               ","population":1211537}},{"type":"Feature","id":"16","geometry":{"type":"Point","coordinates":[-115.133222,44.242605]},"properties":{"name":"Idaho                ","population":1293953}},{"type":"Feature","id":"17","geometry":{"type":"Point","coordinates":[-88.380238,41.278216]},"properties":{"name":"Illinois            ","population":12419293}},{"type":"Feature","id":"18","geometry":{"type":"Point","coordinates":[-86.261515,40.163935]},"properties":{"name":"Indiana              ","population":6080485}},{"type":"Feature","id":"19","geometry":{"type":"Point","coordinates":[-93.049161,41.960392]},"properties":{"name":"Iowa                 ","population":2926324}},{"type":"Feature","id":"20","geometry":{"type":"Point","coordinates":[-96.536052,38.454303]},"properties":{"name":"Kansas               ","population":2688418}},{"type":"Feature","id":"21","geometry":{"type":"Point","coordinates":[-85.241819,37.808159]},"properties":{"name":"Kentucky             ","population":4041769}},{"type":"Feature","id":"22","geometry":{"type":"Point","coordinates":[-91.457133,30.699270]},"properties":{"name":"Louisiana            ","population":4468976}},{"type":"Feature","id":"23","geometry":{"type":"Point","coordinates":[-69.719931,44.313614]},"properties":{"name":"Maine                ","population":1274923}},{"type":"Feature","id":"24","geometry":{"type":"Point","coordinates":[-76.797396,39.145653]},"properties":{"name":"Maryland             ","population":5296486}},{"type":"Feature","id":"25","geometry":{"type":"Point","coordinates":[-71.363628,42.271831]},"properties":{"name":"Massachusetts        ","population":6349097}},{"type":"Feature","id":"26","geometry":{"type":"Point","coordinates":[-84.170753,42.866412]},"properties":{"name":"Michigan             ","population":9938444}},{"type":"Feature","id":"27","geometry":{"type":"Point","coordinates":[-93.583003,45.210782]},"properties":{"name":"Minnesota            ","population":4919479}},{"type":"Feature","id":"28","geometry":{"type":"Point","coordinates":[-89.593164,32.566420]},"properties":{"name":"Mississippi          ","population":2844658}},{"type":"Feature","id":"29","geometry":{"type":"Point","coordinates":[-92.153770,38.437715]},"properties":{"name":"Missouri             ","population":5595211}},{"type":"Feature","id":"30","geometry":{"type":"Point","coordinates":[-111.209708,46.813302]},"properties":{"name":"Montana               ","population":902195}},{"type":"Feature","id":"31","geometry":{"type":"Point","coordinates":[-97.403875,41.183753]},"properties":{"name":"Nebraska             ","population":1711263}},{"type":"Feature","id":"32","geometry":{"type":"Point","coordinates":[-116.304648,37.165965]},"properties":{"name":"Nevada               ","population":1998257}},{"type":"Feature","id":"33","geometry":{"type":"Point","coordinates":[-71.463342,43.153046]},"properties":{"name":"New Hampshire        ","population":1235786}},{"type":"Feature","id":"34","geometry":{"type":"Point","coordinates":[-74.428055,40.438458]},"properties":{"name":"New Jersey           ","population":8414350}},{"type":"Feature","id":"35","geometry":{"type":"Point","coordinates":[-106.342108,34.623012]},"properties":{"name":"New Mexico           ","population":1819046}},{"type":"Feature","id":"36","geometry":{"type":"Point","coordinates":[-74.645228,41.507548]},"properties":{"name":"New York            ","population":18976457}},{"type":"Feature","id":"37","geometry":{"type":"Point","coordinates":[-79.667654,35.553334]},"properties":{"name":"North Carolina       ","population":8049313}},{"type":"Feature","id":"38","geometry":{"type":"Point","coordinates":[-99.334736,47.375168]},"properties":{"name":"North Dakota          ","population":642200}},{"type":"Feature","id":"39","geometry":{"type":"Point","coordinates":[-82.749366,40.480854]},"properties":{"name":"Ohio                ","population":11353140}},{"type":"Feature","id":"40","geometry":{"type":"Point","coordinates":[-96.834653,35.597940]},"properties":{"name":"Oklahoma             ","population":3450654}},{"type":"Feature","id":"41","geometry":{"type":"Point","coordinates":[-122.579524,44.732273]},"properties":{"name":"Oregon               ","population":3421399}},{"type":"Feature","id":"42","geometry":{"type":"Point","coordinates":[-77.075925,40.463528]},"properties":{"name":"Pennsylvania        ","population":12281054}},{"type":"Feature","id":"44","geometry":{"type":"Point","coordinates":[-71.448902,41.753318]},"properties":{"name":"Rhode Island         ","population":1048319}},{"type":"Feature","id":"45","geometry":{"type":"Point","coordinates":[-81.032387,34.034551]},"properties":{"name":"South Carolina       ","population":4012012}},{"type":"Feature","id":"46","geometry":{"type":"Point","coordinates":[-99.043799,44.047502]},"properties":{"name":"South Dakota          ","population":754844}},{"type":"Feature","id":"47","geometry":{"type":"Point","coordinates":[-86.397772,35.795862]},"properties":{"name":"Tennessee            ","population":5689283}},{"type":"Feature","id":"48","geometry":{"type":"Point","coordinates":[-97.388631,30.943149]},"properties":{"name":"Texas               ","population":20851820}},{"type":"Feature","id":"49","geometry":{"type":"Point","coordinates":[-111.900160,40.438987]},"properties":{"name":"Utah                 ","population":2233169}},{"type":"Feature","id":"50","geometry":{"type":"Point","coordinates":[-72.814309,44.081127]},"properties":{"name":"Vermont               ","population":608827}},{"type":"Feature","id":"51","geometry":{"type":"Point","coordinates":[-77.835857,37.750345]},"properties":{"name":"Virginia             ","population":7078515}},{"type":"Feature","id":"53","geometry":{"type":"Point","coordinates":[-121.624501,47.341728]},"properties":{"name":"Washington           ","population":5894121}},{"type":"Feature","id":"54","geometry":{"type":"Point","coordinates":[-80.820221,38.767195]},"properties":{"name":"West Virginia        ","population":1808344}},{"type":"Feature","id":"55","geometry":{"type":"Point","coordinates":[-89.001006,43.728544]},"properties":{"name":"Wisconsin            ","population":5363675}},{"type":"Feature","id":"56","geometry":{"type":"Point","coordinates":[-107.008835,42.675762]},"properties":{"name":"Wyoming               ","population":493782}},{"type":"Feature","id":"72","geometry":{"type":"Point","coordinates":[-66.58765,18.19958]},"properties":{"code":"PR","name":"Puerto Rico","population":3808610}}]}
Index: /Dev/trunk/d3/examples/data/us-states.json
===================================================================
--- /Dev/trunk/d3/examples/data/us-states.json	(revision 76)
+++ /Dev/trunk/d3/examples/data/us-states.json	(revision 76)
@@ -0,0 +1,54 @@
+{"type":"FeatureCollection","features":[
+{"type":"Feature","id":"01","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-87.359296,35.00118],[-85.606675,34.984749],[-85.431413,34.124869],[-85.184951,32.859696],[-85.069935,32.580372],[-84.960397,32.421541],[-85.004212,32.322956],[-84.889196,32.262709],[-85.058981,32.13674],[-85.053504,32.01077],[-85.141136,31.840985],[-85.042551,31.539753],[-85.113751,31.27686],[-85.004212,31.003013],[-85.497137,30.997536],[-87.600282,30.997536],[-87.633143,30.86609],[-87.408589,30.674397],[-87.446927,30.510088],[-87.37025,30.427934],[-87.518128,30.280057],[-87.655051,30.247195],[-87.90699,30.411504],[-87.934375,30.657966],[-88.011052,30.685351],[-88.10416,30.499135],[-88.137022,30.318396],[-88.394438,30.367688],[-88.471115,31.895754],[-88.241084,33.796253],[-88.098683,34.891641],[-88.202745,34.995703],[-87.359296,35.00118]]]}},
+{"type":"Feature","id":"02","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-131.602021,55.117982],[-131.569159,55.28229],[-131.355558,55.183705],[-131.38842,55.01392],[-131.645836,55.035827],[-131.602021,55.117982]]],[[[-131.832052,55.42469],[-131.645836,55.304197],[-131.749898,55.128935],[-131.832052,55.189182],[-131.832052,55.42469]]],[[[-132.976733,56.437924],[-132.735747,56.459832],[-132.631685,56.421493],[-132.664547,56.273616],[-132.878148,56.240754],[-133.069841,56.333862],[-132.976733,56.437924]]],[[[-133.595627,56.350293],[-133.162949,56.317431],[-133.05341,56.125739],[-132.620732,55.912138],[-132.472854,55.780691],[-132.4619,55.671152],[-132.357838,55.649245],[-132.341408,55.506844],[-132.166146,55.364444],[-132.144238,55.238474],[-132.029222,55.276813],[-131.97993,55.178228],[-131.958022,54.789365],[-132.029222,54.701734],[-132.308546,54.718165],[-132.385223,54.915335],[-132.483808,54.898904],[-132.686455,55.046781],[-132.746701,54.997489],[-132.916486,55.046781],[-132.889102,54.898904],[-132.73027,54.937242],[-132.626209,54.882473],[-132.675501,54.679826],[-132.867194,54.701734],[-133.157472,54.95915],[-133.239626,55.090597],[-133.223195,55.22752],[-133.453227,55.216566],[-133.453227,55.320628],[-133.277964,55.331582],[-133.102702,55.42469],[-133.17938,55.588998],[-133.387503,55.62186],[-133.420365,55.884753],[-133.497042,56.0162],[-133.639442,55.923092],[-133.694212,56.070969],[-133.546335,56.142169],[-133.666827,56.311955],[-133.595627,56.350293]]],[[[-133.738027,55.556137],[-133.546335,55.490413],[-133.414888,55.572568],[-133.283441,55.534229],[-133.420365,55.386352],[-133.633966,55.430167],[-133.738027,55.556137]]],[[[-133.907813,56.930849],[-134.050213,57.029434],[-133.885905,57.095157],[-133.343688,57.002049],[-133.102702,57.007526],[-132.932917,56.82131],[-132.620732,56.667956],[-132.653593,56.55294],[-132.817901,56.492694],[-133.042456,56.520078],[-133.201287,56.448878],[-133.420365,56.492694],[-133.66135,56.448878],[-133.710643,56.684386],[-133.688735,56.837741],[-133.869474,56.843218],[-133.907813,56.930849]]],[[[-134.115936,56.48174],[-134.25286,56.558417],[-134.400737,56.722725],[-134.417168,56.848695],[-134.296675,56.908941],[-134.170706,56.848695],[-134.143321,56.952757],[-133.748981,56.772017],[-133.710643,56.596755],[-133.847566,56.574848],[-133.935197,56.377678],[-133.836612,56.322908],[-133.957105,56.092877],[-134.110459,56.142169],[-134.132367,55.999769],[-134.230952,56.070969],[-134.291198,56.350293],[-134.115936,56.48174]]],[[[-134.636246,56.28457],[-134.669107,56.169554],[-134.806031,56.235277],[-135.178463,56.67891],[-135.413971,56.810356],[-135.331817,56.914418],[-135.424925,57.166357],[-135.687818,57.369004],[-135.419448,57.566174],[-135.298955,57.48402],[-135.063447,57.418296],[-134.849846,57.407343],[-134.844369,57.248511],[-134.636246,56.728202],[-134.636246,56.28457]]],[[[-134.712923,58.223407],[-134.373353,58.14673],[-134.176183,58.157683],[-134.187137,58.081006],[-133.902336,57.807159],[-134.099505,57.850975],[-134.148798,57.757867],[-133.935197,57.615466],[-133.869474,57.363527],[-134.083075,57.297804],[-134.154275,57.210173],[-134.499322,57.029434],[-134.603384,57.034911],[-134.6472,57.226604],[-134.575999,57.341619],[-134.608861,57.511404],[-134.729354,57.719528],[-134.707446,57.829067],[-134.784123,58.097437],[-134.91557,58.212453],[-134.953908,58.409623],[-134.712923,58.223407]]],[[[-135.857603,57.330665],[-135.715203,57.330665],[-135.567326,57.149926],[-135.633049,57.023957],[-135.857603,56.996572],[-135.824742,57.193742],[-135.857603,57.330665]]],[[[-136.279328,58.206976],[-135.978096,58.201499],[-135.780926,58.28913],[-135.496125,58.168637],[-135.64948,58.037191],[-135.59471,57.987898],[-135.45231,58.135776],[-135.107263,58.086483],[-134.91557,57.976944],[-135.025108,57.779775],[-134.937477,57.763344],[-134.822462,57.500451],[-135.085355,57.462112],[-135.572802,57.675713],[-135.556372,57.456635],[-135.709726,57.369004],[-135.890465,57.407343],[-136.000004,57.544266],[-136.208128,57.637374],[-136.366959,57.829067],[-136.569606,57.916698],[-136.558652,58.075529],[-136.421728,58.130299],[-136.377913,58.267222],[-136.279328,58.206976]]],[[[-147.079854,60.200582],[-147.501579,59.948643],[-147.53444,59.850058],[-147.874011,59.784335],[-147.80281,59.937689],[-147.435855,60.09652],[-147.205824,60.271782],[-147.079854,60.200582]]],[[[-147.561825,60.578491],[-147.616594,60.370367],[-147.758995,60.156767],[-147.956165,60.227967],[-147.791856,60.474429],[-147.561825,60.578491]]],[[[-147.786379,70.245291],[-147.682318,70.201475],[-147.162008,70.15766],[-146.888161,70.185044],[-146.510252,70.185044],[-146.099482,70.146706],[-145.858496,70.168614],[-145.622988,70.08646],[-145.195787,69.993352],[-144.620708,69.971444],[-144.461877,70.026213],[-144.078491,70.059075],[-143.914183,70.130275],[-143.497935,70.141229],[-143.503412,70.091936],[-143.25695,70.119321],[-142.747594,70.042644],[-142.402547,69.916674],[-142.079408,69.856428],[-142.008207,69.801659],[-141.712453,69.790705],[-141.433129,69.697597],[-141.378359,69.63735],[-141.208574,69.686643],[-141.00045,69.648304],[-141.00045,60.304644],[-140.53491,60.22249],[-140.474664,60.310121],[-139.987216,60.184151],[-139.696939,60.342983],[-139.088998,60.359413],[-139.198537,60.091043],[-139.045183,59.997935],[-138.700135,59.910304],[-138.623458,59.767904],[-137.604747,59.242118],[-137.445916,58.908024],[-137.265177,59.001132],[-136.827022,59.159963],[-136.580559,59.16544],[-136.465544,59.285933],[-136.476498,59.466672],[-136.301236,59.466672],[-136.25742,59.625503],[-135.945234,59.663842],[-135.479694,59.800766],[-135.025108,59.565257],[-135.068924,59.422857],[-134.959385,59.280456],[-134.701969,59.247595],[-134.378829,59.033994],[-134.400737,58.973748],[-134.25286,58.858732],[-133.842089,58.727285],[-133.173903,58.152206],[-133.075318,57.998852],[-132.867194,57.845498],[-132.560485,57.505928],[-132.253777,57.21565],[-132.368792,57.095157],[-132.05113,57.051341],[-132.127807,56.876079],[-131.870391,56.804879],[-131.837529,56.602232],[-131.580113,56.613186],[-131.087188,56.405062],[-130.78048,56.366724],[-130.621648,56.268139],[-130.468294,56.240754],[-130.424478,56.142169],[-130.101339,56.114785],[-130.002754,55.994292],[-130.150631,55.769737],[-130.128724,55.583521],[-129.986323,55.276813],[-130.095862,55.200136],[-130.336847,54.920812],[-130.687372,54.718165],[-130.785957,54.822227],[-130.917403,54.789365],[-131.010511,54.997489],[-130.983126,55.08512],[-131.092665,55.189182],[-130.862634,55.298721],[-130.928357,55.337059],[-131.158389,55.200136],[-131.284358,55.287767],[-131.426759,55.238474],[-131.843006,55.457552],[-131.700606,55.698537],[-131.963499,55.616383],[-131.974453,55.49589],[-132.182576,55.588998],[-132.226392,55.704014],[-132.083991,55.829984],[-132.127807,55.955953],[-132.324977,55.851892],[-132.522147,56.076446],[-132.642639,56.032631],[-132.719317,56.218847],[-132.527624,56.339339],[-132.341408,56.339339],[-132.396177,56.487217],[-132.297592,56.67891],[-132.450946,56.673433],[-132.768609,56.837741],[-132.993164,57.034911],[-133.51895,57.177311],[-133.507996,57.577128],[-133.677781,57.62642],[-133.639442,57.790728],[-133.814705,57.834544],[-134.072121,58.053622],[-134.143321,58.168637],[-134.586953,58.206976],[-135.074401,58.502731],[-135.282525,59.192825],[-135.38111,59.033994],[-135.337294,58.891593],[-135.140124,58.617746],[-135.189417,58.573931],[-135.05797,58.349376],[-135.085355,58.201499],[-135.277048,58.234361],[-135.430402,58.398669],[-135.633049,58.426053],[-135.91785,58.382238],[-135.912373,58.617746],[-136.087635,58.814916],[-136.246466,58.75467],[-136.876314,58.962794],[-136.931084,58.902547],[-136.586036,58.836824],[-136.317666,58.672516],[-136.213604,58.667039],[-136.180743,58.535592],[-136.043819,58.382238],[-136.388867,58.294607],[-136.591513,58.349376],[-136.59699,58.212453],[-136.859883,58.316515],[-136.947514,58.393192],[-137.111823,58.393192],[-137.566409,58.590362],[-137.900502,58.765624],[-137.933364,58.869686],[-138.11958,59.02304],[-138.634412,59.132579],[-138.919213,59.247595],[-139.417615,59.379041],[-139.746231,59.505011],[-139.718846,59.641934],[-139.625738,59.598119],[-139.5162,59.68575],[-139.625738,59.88292],[-139.488815,59.992458],[-139.554538,60.041751],[-139.801,59.833627],[-140.315833,59.696704],[-140.92925,59.745996],[-141.444083,59.871966],[-141.46599,59.970551],[-141.706976,59.948643],[-141.964392,60.019843],[-142.539471,60.085566],[-142.873564,60.091043],[-143.623905,60.036274],[-143.892275,59.997935],[-144.231845,60.140336],[-144.65357,60.206059],[-144.785016,60.29369],[-144.834309,60.441568],[-145.124586,60.430614],[-145.223171,60.299167],[-145.738004,60.474429],[-145.820158,60.551106],[-146.351421,60.408706],[-146.608837,60.238921],[-146.718376,60.397752],[-146.608837,60.485383],[-146.455483,60.463475],[-145.951604,60.578491],[-146.017328,60.666122],[-146.252836,60.622307],[-146.345944,60.737322],[-146.565022,60.753753],[-146.784099,61.044031],[-146.866253,60.972831],[-147.172962,60.934492],[-147.271547,60.972831],[-147.375609,60.879723],[-147.758995,60.912584],[-147.775426,60.808523],[-148.032842,60.781138],[-148.153334,60.819476],[-148.065703,61.005692],[-148.175242,61.000215],[-148.350504,60.803046],[-148.109519,60.737322],[-148.087611,60.594922],[-147.939734,60.441568],[-148.027365,60.277259],[-148.219058,60.332029],[-148.273827,60.249875],[-148.087611,60.217013],[-147.983549,59.997935],[-148.251919,59.95412],[-148.399797,59.997935],[-148.635305,59.937689],[-148.755798,59.986981],[-149.067984,59.981505],[-149.05703,60.063659],[-149.204907,60.008889],[-149.287061,59.904827],[-149.418508,59.997935],[-149.582816,59.866489],[-149.511616,59.806242],[-149.741647,59.729565],[-149.949771,59.718611],[-150.031925,59.61455],[-150.25648,59.521442],[-150.409834,59.554303],[-150.579619,59.444764],[-150.716543,59.450241],[-151.001343,59.225687],[-151.308052,59.209256],[-151.406637,59.280456],[-151.592853,59.159963],[-151.976239,59.253071],[-151.888608,59.422857],[-151.636669,59.483103],[-151.47236,59.472149],[-151.423068,59.537872],[-151.127313,59.669319],[-151.116359,59.778858],[-151.505222,59.63098],[-151.828361,59.718611],[-151.8667,59.778858],[-151.702392,60.030797],[-151.423068,60.211536],[-151.379252,60.359413],[-151.297098,60.386798],[-151.264237,60.545629],[-151.406637,60.720892],[-151.06159,60.786615],[-150.404357,61.038554],[-150.245526,60.939969],[-150.042879,60.912584],[-149.741647,61.016646],[-150.075741,61.15357],[-150.207187,61.257632],[-150.47008,61.246678],[-150.656296,61.29597],[-150.711066,61.252155],[-151.023251,61.180954],[-151.165652,61.044031],[-151.477837,61.011169],[-151.800977,60.852338],[-151.833838,60.748276],[-152.080301,60.693507],[-152.13507,60.578491],[-152.310332,60.507291],[-152.392486,60.304644],[-152.732057,60.173197],[-152.567748,60.069136],[-152.704672,59.915781],[-153.022334,59.888397],[-153.049719,59.691227],[-153.345474,59.620026],[-153.438582,59.702181],[-153.586459,59.548826],[-153.761721,59.543349],[-153.72886,59.433811],[-154.117723,59.368087],[-154.1944,59.066856],[-153.750768,59.050425],[-153.400243,58.968271],[-153.301658,58.869686],[-153.444059,58.710854],[-153.679567,58.612269],[-153.898645,58.606793],[-153.920553,58.519161],[-154.062953,58.4863],[-153.99723,58.376761],[-154.145107,58.212453],[-154.46277,58.059098],[-154.643509,58.059098],[-154.818771,58.004329],[-154.988556,58.015283],[-155.120003,57.955037],[-155.081664,57.872883],[-155.328126,57.829067],[-155.377419,57.708574],[-155.547204,57.785251],[-155.73342,57.549743],[-156.045606,57.566174],[-156.023698,57.440204],[-156.209914,57.473066],[-156.34136,57.418296],[-156.34136,57.248511],[-156.549484,56.985618],[-156.883577,56.952757],[-157.157424,56.832264],[-157.20124,56.766541],[-157.376502,56.859649],[-157.672257,56.607709],[-157.754411,56.67891],[-157.918719,56.657002],[-157.957058,56.514601],[-158.126843,56.459832],[-158.32949,56.48174],[-158.488321,56.339339],[-158.208997,56.295524],[-158.510229,55.977861],[-159.375585,55.873799],[-159.616571,55.594475],[-159.676817,55.654722],[-159.643955,55.829984],[-159.813741,55.857368],[-160.027341,55.791645],[-160.060203,55.720445],[-160.394296,55.605429],[-160.536697,55.473983],[-160.580512,55.567091],[-160.668143,55.457552],[-160.865313,55.528752],[-161.232268,55.358967],[-161.506115,55.364444],[-161.467776,55.49589],[-161.588269,55.62186],[-161.697808,55.517798],[-161.686854,55.408259],[-162.053809,55.074166],[-162.179779,55.15632],[-162.218117,55.03035],[-162.470057,55.052258],[-162.508395,55.249428],[-162.661749,55.293244],[-162.716519,55.222043],[-162.579595,55.134412],[-162.645319,54.997489],[-162.847965,54.926289],[-163.00132,55.079643],[-163.187536,55.090597],[-163.220397,55.03035],[-163.034181,54.942719],[-163.373752,54.800319],[-163.14372,54.76198],[-163.138243,54.696257],[-163.329936,54.74555],[-163.587352,54.614103],[-164.085754,54.61958],[-164.332216,54.531949],[-164.354124,54.466226],[-164.638925,54.389548],[-164.847049,54.416933],[-164.918249,54.603149],[-164.710125,54.663395],[-164.551294,54.88795],[-164.34317,54.893427],[-163.894061,55.041304],[-163.532583,55.046781],[-163.39566,54.904381],[-163.291598,55.008443],[-163.313505,55.128935],[-163.105382,55.183705],[-162.880827,55.183705],[-162.579595,55.446598],[-162.245502,55.682106],[-161.807347,55.89023],[-161.292514,55.983338],[-161.078914,55.939523],[-160.87079,55.999769],[-160.816021,55.912138],[-160.931036,55.813553],[-160.805067,55.736876],[-160.766728,55.857368],[-160.509312,55.868322],[-160.438112,55.791645],[-160.27928,55.76426],[-160.273803,55.857368],[-160.536697,55.939523],[-160.558604,55.994292],[-160.383342,56.251708],[-160.147834,56.399586],[-159.830171,56.541986],[-159.326293,56.667956],[-158.959338,56.848695],[-158.784076,56.782971],[-158.641675,56.810356],[-158.701922,56.925372],[-158.658106,57.034911],[-158.378782,57.264942],[-157.995396,57.41282],[-157.688688,57.609989],[-157.705118,57.719528],[-157.458656,58.497254],[-157.07527,58.705377],[-157.119086,58.869686],[-158.039212,58.634177],[-158.32949,58.661562],[-158.40069,58.760147],[-158.564998,58.803962],[-158.619768,58.913501],[-158.767645,58.864209],[-158.860753,58.694424],[-158.701922,58.480823],[-158.893615,58.387715],[-159.0634,58.420577],[-159.392016,58.760147],[-159.616571,58.929932],[-159.731586,58.929932],[-159.808264,58.803962],[-159.906848,58.782055],[-160.054726,58.886116],[-160.235465,58.902547],[-160.317619,59.072332],[-160.854359,58.88064],[-161.33633,58.743716],[-161.374669,58.667039],[-161.752577,58.552023],[-161.938793,58.656085],[-161.769008,58.776578],[-161.829255,59.061379],[-161.955224,59.36261],[-161.703285,59.48858],[-161.911409,59.740519],[-162.092148,59.88292],[-162.234548,60.091043],[-162.448149,60.178674],[-162.502918,59.997935],[-162.760334,59.959597],[-163.171105,59.844581],[-163.66403,59.795289],[-163.9324,59.806242],[-164.162431,59.866489],[-164.189816,60.02532],[-164.386986,60.074613],[-164.699171,60.29369],[-164.962064,60.337506],[-165.268773,60.578491],[-165.060649,60.68803],[-165.016834,60.890677],[-165.175665,60.846861],[-165.197573,60.972831],[-165.120896,61.076893],[-165.323543,61.170001],[-165.34545,61.071416],[-165.591913,61.109754],[-165.624774,61.279539],[-165.816467,61.301447],[-165.920529,61.416463],[-165.915052,61.558863],[-166.106745,61.49314],[-166.139607,61.630064],[-165.904098,61.662925],[-166.095791,61.81628],[-165.756221,61.827233],[-165.756221,62.013449],[-165.674067,62.139419],[-165.044219,62.539236],[-164.912772,62.659728],[-164.819664,62.637821],[-164.874433,62.807606],[-164.633448,63.097884],[-164.425324,63.212899],[-164.036462,63.262192],[-163.73523,63.212899],[-163.313505,63.037637],[-163.039658,63.059545],[-162.661749,63.22933],[-162.272887,63.486746],[-162.075717,63.514131],[-162.026424,63.448408],[-161.555408,63.448408],[-161.13916,63.503177],[-160.766728,63.771547],[-160.766728,63.837271],[-160.952944,64.08921],[-160.974852,64.237087],[-161.26513,64.395918],[-161.374669,64.532842],[-161.078914,64.494503],[-160.79959,64.609519],[-160.783159,64.719058],[-161.144637,64.921705],[-161.413007,64.762873],[-161.664946,64.790258],[-161.900455,64.702627],[-162.168825,64.680719],[-162.234548,64.620473],[-162.541257,64.532842],[-162.634365,64.384965],[-162.787719,64.324718],[-162.858919,64.49998],[-163.045135,64.538319],[-163.176582,64.401395],[-163.253259,64.467119],[-163.598306,64.565704],[-164.304832,64.560227],[-164.80871,64.450688],[-165.000403,64.434257],[-165.411174,64.49998],[-166.188899,64.576658],[-166.391546,64.636904],[-166.484654,64.735489],[-166.413454,64.872412],[-166.692778,64.987428],[-166.638008,65.113398],[-166.462746,65.179121],[-166.517516,65.337952],[-166.796839,65.337952],[-167.026871,65.381768],[-167.47598,65.414629],[-167.711489,65.496784],[-168.072967,65.578938],[-168.105828,65.682999],[-167.541703,65.819923],[-166.829701,66.049954],[-166.3313,66.186878],[-166.046499,66.110201],[-165.756221,66.09377],[-165.690498,66.203309],[-165.86576,66.21974],[-165.88219,66.312848],[-165.186619,66.466202],[-164.403417,66.581218],[-163.981692,66.592172],[-163.751661,66.553833],[-163.872153,66.389525],[-163.828338,66.274509],[-163.915969,66.192355],[-163.768091,66.060908],[-163.494244,66.082816],[-163.149197,66.060908],[-162.749381,66.088293],[-162.634365,66.039001],[-162.371472,66.028047],[-162.14144,66.077339],[-161.840208,66.02257],[-161.549931,66.241647],[-161.341807,66.252601],[-161.199406,66.208786],[-161.128206,66.334755],[-161.528023,66.395002],[-161.911409,66.345709],[-161.87307,66.510017],[-162.174302,66.68528],[-162.502918,66.740049],[-162.601503,66.89888],[-162.344087,66.937219],[-162.015471,66.778388],[-162.075717,66.652418],[-161.916886,66.553833],[-161.571838,66.438817],[-161.489684,66.55931],[-161.884024,66.718141],[-161.714239,67.002942],[-161.851162,67.052235],[-162.240025,66.991988],[-162.639842,67.008419],[-162.700088,67.057712],[-162.902735,67.008419],[-163.740707,67.128912],[-163.757138,67.254881],[-164.009077,67.534205],[-164.211724,67.638267],[-164.534863,67.725898],[-165.192096,67.966884],[-165.493328,68.059992],[-165.794559,68.081899],[-166.243668,68.246208],[-166.681824,68.339316],[-166.703731,68.372177],[-166.375115,68.42147],[-166.227238,68.574824],[-166.216284,68.881533],[-165.329019,68.859625],[-164.255539,68.930825],[-163.976215,68.985595],[-163.532583,69.138949],[-163.110859,69.374457],[-163.023228,69.609966],[-162.842489,69.812613],[-162.470057,69.982398],[-162.311225,70.108367],[-161.851162,70.311014],[-161.779962,70.256245],[-161.396576,70.239814],[-160.837928,70.343876],[-160.487404,70.453415],[-159.649432,70.792985],[-159.33177,70.809416],[-159.298908,70.760123],[-158.975769,70.798462],[-158.658106,70.787508],[-158.033735,70.831323],[-157.420318,70.979201],[-156.812377,71.285909],[-156.565915,71.351633],[-156.522099,71.296863],[-155.585543,71.170894],[-155.508865,71.083263],[-155.832005,70.968247],[-155.979882,70.96277],[-155.974405,70.809416],[-155.503388,70.858708],[-155.476004,70.940862],[-155.262403,71.017539],[-155.191203,70.973724],[-155.032372,71.148986],[-154.566832,70.990155],[-154.643509,70.869662],[-154.353231,70.8368],[-154.183446,70.7656],[-153.931507,70.880616],[-153.487874,70.886093],[-153.235935,70.924431],[-152.589656,70.886093],[-152.26104,70.842277],[-152.419871,70.606769],[-151.817408,70.546523],[-151.773592,70.486276],[-151.187559,70.382214],[-151.182082,70.431507],[-150.760358,70.49723],[-150.355064,70.491753],[-150.349588,70.436984],[-150.114079,70.431507],[-149.867617,70.508184],[-149.462323,70.519138],[-149.177522,70.486276],[-148.78866,70.404122],[-148.607921,70.420553],[-148.350504,70.305537],[-148.202627,70.349353],[-147.961642,70.316491],[-147.786379,70.245291]]],[[[-152.94018,58.026237],[-152.945657,57.982421],[-153.290705,58.048145],[-153.044242,58.305561],[-152.819688,58.327469],[-152.666333,58.562977],[-152.496548,58.354853],[-152.354148,58.426053],[-152.080301,58.311038],[-152.080301,58.152206],[-152.480117,58.130299],[-152.655379,58.059098],[-152.94018,58.026237]]],[[[-153.958891,57.538789],[-153.67409,57.670236],[-153.931507,57.69762],[-153.936983,57.812636],[-153.723383,57.889313],[-153.570028,57.834544],[-153.548121,57.719528],[-153.46049,57.796205],[-153.455013,57.96599],[-153.268797,57.889313],[-153.235935,57.998852],[-153.071627,57.933129],[-152.874457,57.933129],[-152.721103,57.993375],[-152.469163,57.889313],[-152.469163,57.599035],[-152.151501,57.620943],[-152.359625,57.42925],[-152.74301,57.505928],[-152.60061,57.379958],[-152.710149,57.275896],[-152.907319,57.325188],[-152.912796,57.128019],[-153.214027,57.073249],[-153.312612,56.991095],[-153.498828,57.067772],[-153.695998,56.859649],[-153.849352,56.837741],[-154.013661,56.744633],[-154.073907,56.969187],[-154.303938,56.848695],[-154.314892,56.919895],[-154.523016,56.991095],[-154.539447,57.193742],[-154.742094,57.275896],[-154.627078,57.511404],[-154.227261,57.659282],[-153.980799,57.648328],[-153.958891,57.538789]]],[[[-154.53397,56.602232],[-154.742094,56.399586],[-154.807817,56.432447],[-154.53397,56.602232]]],[[[-155.634835,55.923092],[-155.476004,55.912138],[-155.530773,55.704014],[-155.793666,55.731399],[-155.837482,55.802599],[-155.634835,55.923092]]],[[[-159.890418,55.28229],[-159.950664,55.068689],[-160.257373,54.893427],[-160.109495,55.161797],[-160.005433,55.134412],[-159.890418,55.28229]]],[[[-160.520266,55.358967],[-160.33405,55.358967],[-160.339527,55.249428],[-160.525743,55.128935],[-160.690051,55.211089],[-160.794113,55.134412],[-160.854359,55.320628],[-160.79959,55.380875],[-160.520266,55.358967]]],[[[-162.256456,54.981058],[-162.234548,54.893427],[-162.349564,54.838658],[-162.437195,54.931766],[-162.256456,54.981058]]],[[[-162.415287,63.634624],[-162.563165,63.536039],[-162.612457,63.62367],[-162.415287,63.634624]]],[[[-162.80415,54.488133],[-162.590549,54.449795],[-162.612457,54.367641],[-162.782242,54.373118],[-162.80415,54.488133]]],[[[-165.548097,54.29644],[-165.476897,54.181425],[-165.630251,54.132132],[-165.685021,54.252625],[-165.548097,54.29644]]],[[[-165.73979,54.15404],[-166.046499,54.044501],[-166.112222,54.121178],[-165.980775,54.219763],[-165.73979,54.15404]]],[[[-166.364161,60.359413],[-166.13413,60.397752],[-166.084837,60.326552],[-165.88219,60.342983],[-165.685021,60.277259],[-165.646682,59.992458],[-165.750744,59.89935],[-166.00816,59.844581],[-166.062929,59.745996],[-166.440838,59.855535],[-166.6161,59.850058],[-166.994009,59.992458],[-167.125456,59.992458],[-167.344534,60.074613],[-167.421211,60.206059],[-167.311672,60.238921],[-166.93924,60.206059],[-166.763978,60.310121],[-166.577762,60.321075],[-166.495608,60.392275],[-166.364161,60.359413]]],[[[-166.375115,54.01164],[-166.210807,53.934962],[-166.5449,53.748746],[-166.539423,53.715885],[-166.117699,53.852808],[-166.112222,53.776131],[-166.282007,53.683023],[-166.555854,53.622777],[-166.583239,53.529669],[-166.878994,53.431084],[-167.13641,53.425607],[-167.306195,53.332499],[-167.623857,53.250345],[-167.793643,53.337976],[-167.459549,53.442038],[-167.355487,53.425607],[-167.103548,53.513238],[-167.163794,53.611823],[-167.021394,53.715885],[-166.807793,53.666592],[-166.785886,53.732316],[-167.015917,53.754223],[-167.141887,53.825424],[-167.032348,53.945916],[-166.643485,54.017116],[-166.561331,53.880193],[-166.375115,54.01164]]],[[[-168.790446,53.157237],[-168.40706,53.34893],[-168.385152,53.431084],[-168.237275,53.524192],[-168.007243,53.568007],[-167.886751,53.518715],[-167.842935,53.387268],[-168.270136,53.244868],[-168.500168,53.036744],[-168.686384,52.965544],[-168.790446,53.157237]]],[[[-169.74891,52.894344],[-169.705095,52.795759],[-169.962511,52.790282],[-169.989896,52.856005],[-169.74891,52.894344]]],[[[-170.148727,57.221127],[-170.28565,57.128019],[-170.313035,57.221127],[-170.148727,57.221127]]],[[[-170.669036,52.697174],[-170.603313,52.604066],[-170.789529,52.538343],[-170.816914,52.636928],[-170.669036,52.697174]]],[[[-171.742517,63.716778],[-170.94836,63.5689],[-170.488297,63.69487],[-170.280174,63.683916],[-170.093958,63.612716],[-170.044665,63.492223],[-169.644848,63.4265],[-169.518879,63.366254],[-168.99857,63.338869],[-168.686384,63.295053],[-168.856169,63.147176],[-169.108108,63.180038],[-169.376478,63.152653],[-169.513402,63.08693],[-169.639372,62.939052],[-169.831064,63.075976],[-170.055619,63.169084],[-170.263743,63.180038],[-170.362328,63.2841],[-170.866206,63.415546],[-171.101715,63.421023],[-171.463193,63.306007],[-171.73704,63.366254],[-171.852055,63.486746],[-171.742517,63.716778]]],[[[-172.432611,52.390465],[-172.41618,52.275449],[-172.607873,52.253542],[-172.569535,52.352127],[-172.432611,52.390465]]],[[[-173.626584,52.14948],[-173.495138,52.105664],[-173.122706,52.111141],[-173.106275,52.07828],[-173.549907,52.028987],[-173.626584,52.14948]]],[[[-174.322156,52.280926],[-174.327632,52.379511],[-174.185232,52.41785],[-173.982585,52.319265],[-174.059262,52.226157],[-174.179755,52.231634],[-174.141417,52.127572],[-174.333109,52.116618],[-174.738403,52.007079],[-174.968435,52.039941],[-174.902711,52.116618],[-174.656249,52.105664],[-174.322156,52.280926]]],[[[-176.469116,51.853725],[-176.288377,51.870156],[-176.288377,51.744186],[-176.518409,51.760617],[-176.80321,51.61274],[-176.912748,51.80991],[-176.792256,51.815386],[-176.775825,51.963264],[-176.627947,51.968741],[-176.627947,51.859202],[-176.469116,51.853725]]],[[[-177.153734,51.946833],[-177.044195,51.897541],[-177.120872,51.727755],[-177.274226,51.678463],[-177.279703,51.782525],[-177.153734,51.946833]]],[[[-178.123152,51.919448],[-177.953367,51.913971],[-177.800013,51.793479],[-177.964321,51.651078],[-178.123152,51.919448]]],[[[173.107557,52.992929],[173.293773,52.927205],[173.304726,52.823143],[172.90491,52.762897],[172.642017,52.927205],[172.642017,53.003883],[173.107557,52.992929]]]]}},
+{"type":"Feature","id":"04","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.042503,37.000263],[-109.04798,31.331629],[-111.074448,31.331629],[-112.246513,31.704061],[-114.815198,32.492741],[-114.72209,32.717295],[-114.524921,32.755634],[-114.470151,32.843265],[-114.524921,33.029481],[-114.661844,33.034958],[-114.727567,33.40739],[-114.524921,33.54979],[-114.497536,33.697668],[-114.535874,33.933176],[-114.415382,34.108438],[-114.256551,34.174162],[-114.136058,34.305608],[-114.333228,34.448009],[-114.470151,34.710902],[-114.634459,34.87521],[-114.634459,35.00118],[-114.574213,35.138103],[-114.596121,35.324319],[-114.678275,35.516012],[-114.738521,36.102045],[-114.371566,36.140383],[-114.251074,36.01989],[-114.152489,36.025367],[-114.048427,36.195153],[-114.048427,37.000263],[-110.499369,37.00574],[-109.042503,37.000263]]]}},
+{"type":"Feature","id":"05","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-94.473842,36.501861],[-90.152536,36.496384],[-90.064905,36.304691],[-90.218259,36.184199],[-90.377091,35.997983],[-89.730812,35.997983],[-89.763673,35.811767],[-89.911551,35.756997],[-89.944412,35.603643],[-90.130628,35.439335],[-90.114197,35.198349],[-90.212782,35.023087],[-90.311367,34.995703],[-90.251121,34.908072],[-90.409952,34.831394],[-90.481152,34.661609],[-90.585214,34.617794],[-90.568783,34.420624],[-90.749522,34.365854],[-90.744046,34.300131],[-90.952169,34.135823],[-90.891923,34.026284],[-91.072662,33.867453],[-91.231493,33.560744],[-91.056231,33.429298],[-91.143862,33.347144],[-91.089093,33.13902],[-91.16577,33.002096],[-93.608485,33.018527],[-94.041164,33.018527],[-94.041164,33.54979],[-94.183564,33.593606],[-94.380734,33.544313],[-94.484796,33.637421],[-94.430026,35.395519],[-94.616242,36.501861],[-94.473842,36.501861]]]}},
+{"type":"Feature","id":"06","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.233256,42.006186],[-122.378853,42.011663],[-121.037003,41.995232],[-120.001861,41.995232],[-119.996384,40.264519],[-120.001861,38.999346],[-118.71478,38.101128],[-117.498899,37.21934],[-116.540435,36.501861],[-115.85034,35.970598],[-114.634459,35.00118],[-114.634459,34.87521],[-114.470151,34.710902],[-114.333228,34.448009],[-114.136058,34.305608],[-114.256551,34.174162],[-114.415382,34.108438],[-114.535874,33.933176],[-114.497536,33.697668],[-114.524921,33.54979],[-114.727567,33.40739],[-114.661844,33.034958],[-114.524921,33.029481],[-114.470151,32.843265],[-114.524921,32.755634],[-114.72209,32.717295],[-116.04751,32.624187],[-117.126467,32.536556],[-117.24696,32.668003],[-117.252437,32.876127],[-117.329114,33.122589],[-117.471515,33.297851],[-117.7837,33.538836],[-118.183517,33.763391],[-118.260194,33.703145],[-118.413548,33.741483],[-118.391641,33.840068],[-118.566903,34.042715],[-118.802411,33.998899],[-119.218659,34.146777],[-119.278905,34.26727],[-119.558229,34.415147],[-119.875891,34.40967],[-120.138784,34.475393],[-120.472878,34.448009],[-120.64814,34.579455],[-120.609801,34.858779],[-120.670048,34.902595],[-120.631709,35.099764],[-120.894602,35.247642],[-120.905556,35.450289],[-121.004141,35.461243],[-121.168449,35.636505],[-121.283465,35.674843],[-121.332757,35.784382],[-121.716143,36.195153],[-121.896882,36.315645],[-121.935221,36.638785],[-121.858544,36.6114],[-121.787344,36.803093],[-121.929744,36.978355],[-122.105006,36.956447],[-122.335038,37.115279],[-122.417192,37.241248],[-122.400761,37.361741],[-122.515777,37.520572],[-122.515777,37.783465],[-122.329561,37.783465],[-122.406238,38.15042],[-122.488392,38.112082],[-122.504823,37.931343],[-122.701993,37.893004],[-122.937501,38.029928],[-122.97584,38.265436],[-123.129194,38.451652],[-123.331841,38.566668],[-123.44138,38.698114],[-123.737134,38.95553],[-123.687842,39.032208],[-123.824765,39.366301],[-123.764519,39.552517],[-123.85215,39.831841],[-124.109566,40.105688],[-124.361506,40.259042],[-124.410798,40.439781],[-124.158859,40.877937],[-124.109566,41.025814],[-124.158859,41.14083],[-124.065751,41.442061],[-124.147905,41.715908],[-124.257444,41.781632],[-124.213628,42.000709],[-123.233256,42.006186]]]}},
+{"type":"Feature","id":"08","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.919731,41.003906],[-105.728954,40.998429],[-104.053011,41.003906],[-102.053927,41.003906],[-102.053927,40.001626],[-102.042974,36.994786],[-103.001438,37.000263],[-104.337812,36.994786],[-106.868158,36.994786],[-107.421329,37.000263],[-109.042503,37.000263],[-109.042503,38.166851],[-109.058934,38.27639],[-109.053457,39.125316],[-109.04798,40.998429],[-107.919731,41.003906]]]}},
+{"type":"Feature","id":"09","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.053528,42.039048],[-71.799309,42.022617],[-71.799309,42.006186],[-71.799309,41.414677],[-71.859555,41.321569],[-71.947186,41.338],[-72.385341,41.261322],[-72.905651,41.28323],[-73.130205,41.146307],[-73.371191,41.102491],[-73.655992,40.987475],[-73.727192,41.102491],[-73.48073,41.21203],[-73.55193,41.294184],[-73.486206,42.050002],[-73.053528,42.039048]]]}},
+{"type":"Feature","id":"10","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.414089,39.804456],[-75.507197,39.683964],[-75.611259,39.61824],[-75.589352,39.459409],[-75.441474,39.311532],[-75.403136,39.065069],[-75.189535,38.807653],[-75.09095,38.796699],[-75.047134,38.451652],[-75.693413,38.462606],[-75.786521,39.722302],[-75.616736,39.831841],[-75.414089,39.804456]]]}},
+{"type":"Feature","id":"11","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.035264,38.993869],[-76.909294,38.895284],[-77.040741,38.791222],[-77.117418,38.933623],[-77.035264,38.993869]]]}},
+{"type":"Feature","id":"12","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.497137,30.997536],[-85.004212,31.003013],[-84.867289,30.712735],[-83.498053,30.647012],[-82.216449,30.570335],[-82.167157,30.356734],[-82.046664,30.362211],[-82.002849,30.564858],[-82.041187,30.751074],[-81.948079,30.827751],[-81.718048,30.745597],[-81.444201,30.707258],[-81.383954,30.27458],[-81.257985,29.787132],[-80.967707,29.14633],[-80.524075,28.461713],[-80.589798,28.41242],[-80.56789,28.094758],[-80.381674,27.738757],[-80.091397,27.021277],[-80.03115,26.796723],[-80.036627,26.566691],[-80.146166,25.739673],[-80.239274,25.723243],[-80.337859,25.465826],[-80.304997,25.383672],[-80.49669,25.197456],[-80.573367,25.241272],[-80.759583,25.164595],[-81.077246,25.120779],[-81.170354,25.224841],[-81.126538,25.378195],[-81.351093,25.821827],[-81.526355,25.903982],[-81.679709,25.843735],[-81.800202,26.090198],[-81.833064,26.292844],[-82.041187,26.517399],[-82.09048,26.665276],[-82.057618,26.878877],[-82.172634,26.917216],[-82.145249,26.791246],[-82.249311,26.758384],[-82.566974,27.300601],[-82.692943,27.437525],[-82.391711,27.837342],[-82.588881,27.815434],[-82.720328,27.689464],[-82.851774,27.886634],[-82.676512,28.434328],[-82.643651,28.888914],[-82.764143,28.998453],[-82.802482,29.14633],[-82.994175,29.179192],[-83.218729,29.420177],[-83.399469,29.518762],[-83.410422,29.66664],[-83.536392,29.721409],[-83.640454,29.885717],[-84.02384,30.104795],[-84.357933,30.055502],[-84.341502,29.902148],[-84.451041,29.929533],[-84.867289,29.743317],[-85.310921,29.699501],[-85.299967,29.80904],[-85.404029,29.940487],[-85.924338,30.236241],[-86.29677,30.362211],[-86.630863,30.395073],[-86.910187,30.373165],[-87.518128,30.280057],[-87.37025,30.427934],[-87.446927,30.510088],[-87.408589,30.674397],[-87.633143,30.86609],[-87.600282,30.997536],[-85.497137,30.997536]]]}},
+{"type":"Feature","id":"13","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.109191,35.00118],[-83.322791,34.787579],[-83.339222,34.683517],[-83.005129,34.469916],[-82.901067,34.486347],[-82.747713,34.26727],[-82.714851,34.152254],[-82.55602,33.94413],[-82.325988,33.81816],[-82.194542,33.631944],[-81.926172,33.462159],[-81.937125,33.347144],[-81.761863,33.160928],[-81.493493,33.007573],[-81.42777,32.843265],[-81.416816,32.629664],[-81.279893,32.558464],[-81.121061,32.290094],[-81.115584,32.120309],[-80.885553,32.032678],[-81.132015,31.693108],[-81.175831,31.517845],[-81.279893,31.364491],[-81.290846,31.20566],[-81.400385,31.13446],[-81.444201,30.707258],[-81.718048,30.745597],[-81.948079,30.827751],[-82.041187,30.751074],[-82.002849,30.564858],[-82.046664,30.362211],[-82.167157,30.356734],[-82.216449,30.570335],[-83.498053,30.647012],[-84.867289,30.712735],[-85.004212,31.003013],[-85.113751,31.27686],[-85.042551,31.539753],[-85.141136,31.840985],[-85.053504,32.01077],[-85.058981,32.13674],[-84.889196,32.262709],[-85.004212,32.322956],[-84.960397,32.421541],[-85.069935,32.580372],[-85.184951,32.859696],[-85.431413,34.124869],[-85.606675,34.984749],[-84.319594,34.990226],[-83.618546,34.984749],[-83.109191,35.00118]]]}},
+{"type":"Feature","id":"15","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-155.634835,18.948267],[-155.881297,19.035898],[-155.919636,19.123529],[-155.886774,19.348084],[-156.062036,19.73147],[-155.925113,19.857439],[-155.826528,20.032702],[-155.897728,20.147717],[-155.87582,20.26821],[-155.596496,20.12581],[-155.284311,20.021748],[-155.092618,19.868393],[-155.092618,19.736947],[-154.807817,19.523346],[-154.983079,19.348084],[-155.295265,19.26593],[-155.514342,19.134483],[-155.634835,18.948267]]],[[[-156.587823,21.029505],[-156.472807,20.892581],[-156.324929,20.952827],[-156.00179,20.793996],[-156.051082,20.651596],[-156.379699,20.580396],[-156.445422,20.60778],[-156.461853,20.783042],[-156.631638,20.821381],[-156.697361,20.919966],[-156.587823,21.029505]]],[[[-156.982162,21.210244],[-157.080747,21.106182],[-157.310779,21.106182],[-157.239579,21.221198],[-156.982162,21.210244]]],[[[-157.951581,21.697691],[-157.842042,21.462183],[-157.896811,21.325259],[-158.110412,21.303352],[-158.252813,21.582676],[-158.126843,21.588153],[-157.951581,21.697691]]],[[[-159.468693,22.228955],[-159.353678,22.218001],[-159.298908,22.113939],[-159.33177,21.966061],[-159.446786,21.872953],[-159.764448,21.987969],[-159.726109,22.152277],[-159.468693,22.228955]]]]}},
+{"type":"Feature","id":"16","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-116.04751,49.000239],[-116.04751,47.976051],[-115.724371,47.696727],[-115.718894,47.42288],[-115.527201,47.302388],[-115.324554,47.258572],[-115.302646,47.187372],[-114.930214,46.919002],[-114.886399,46.809463],[-114.623506,46.705401],[-114.612552,46.639678],[-114.322274,46.645155],[-114.464674,46.272723],[-114.492059,46.037214],[-114.387997,45.88386],[-114.568736,45.774321],[-114.497536,45.670259],[-114.546828,45.560721],[-114.333228,45.456659],[-114.086765,45.593582],[-113.98818,45.703121],[-113.807441,45.604536],[-113.834826,45.522382],[-113.736241,45.330689],[-113.571933,45.128042],[-113.45144,45.056842],[-113.456917,44.865149],[-113.341901,44.782995],[-113.133778,44.772041],[-113.002331,44.448902],[-112.887315,44.394132],[-112.783254,44.48724],[-112.471068,44.481763],[-112.241036,44.569394],[-112.104113,44.520102],[-111.868605,44.563917],[-111.819312,44.509148],[-111.616665,44.547487],[-111.386634,44.75561],[-111.227803,44.580348],[-111.047063,44.476286],[-111.047063,42.000709],[-112.164359,41.995232],[-114.04295,41.995232],[-117.027882,42.000709],[-117.027882,43.830007],[-116.896436,44.158624],[-116.97859,44.240778],[-117.170283,44.257209],[-117.241483,44.394132],[-117.038836,44.750133],[-116.934774,44.782995],[-116.830713,44.930872],[-116.847143,45.02398],[-116.732128,45.144473],[-116.671881,45.319735],[-116.463758,45.61549],[-116.545912,45.752413],[-116.78142,45.823614],[-116.918344,45.993399],[-116.92382,46.168661],[-117.055267,46.343923],[-117.038836,46.426077],[-117.044313,47.762451],[-117.033359,49.000239],[-116.04751,49.000239]]]}},
+{"type":"Feature","id":"17","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.639984,42.510065],[-88.788778,42.493634],[-87.802929,42.493634],[-87.83579,42.301941],[-87.682436,42.077386],[-87.523605,41.710431],[-87.529082,39.34987],[-87.63862,39.169131],[-87.512651,38.95553],[-87.49622,38.780268],[-87.62219,38.637868],[-87.655051,38.506421],[-87.83579,38.292821],[-87.950806,38.27639],[-87.923421,38.15042],[-88.000098,38.101128],[-88.060345,37.865619],[-88.027483,37.799896],[-88.15893,37.657496],[-88.065822,37.482234],[-88.476592,37.389126],[-88.514931,37.285064],[-88.421823,37.153617],[-88.547792,37.071463],[-88.914747,37.224817],[-89.029763,37.213863],[-89.183118,37.038601],[-89.133825,36.983832],[-89.292656,36.994786],[-89.517211,37.279587],[-89.435057,37.34531],[-89.517211,37.537003],[-89.517211,37.690357],[-89.84035,37.903958],[-89.949889,37.88205],[-90.059428,38.013497],[-90.355183,38.216144],[-90.349706,38.374975],[-90.179921,38.632391],[-90.207305,38.725499],[-90.10872,38.845992],[-90.251121,38.917192],[-90.470199,38.961007],[-90.585214,38.867899],[-90.661891,38.928146],[-90.727615,39.256762],[-91.061708,39.470363],[-91.368417,39.727779],[-91.494386,40.034488],[-91.50534,40.237135],[-91.417709,40.379535],[-91.401278,40.560274],[-91.121954,40.669813],[-91.09457,40.823167],[-90.963123,40.921752],[-90.946692,41.097014],[-91.111001,41.239415],[-91.045277,41.414677],[-90.656414,41.463969],[-90.344229,41.589939],[-90.311367,41.743293],[-90.179921,41.809016],[-90.141582,42.000709],[-90.168967,42.126679],[-90.393521,42.225264],[-90.420906,42.329326],[-90.639984,42.510065]]]}},
+{"type":"Feature","id":"18","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.990061,41.759724],[-84.807042,41.759724],[-84.807042,41.694001],[-84.801565,40.500028],[-84.817996,39.103408],[-84.894673,39.059592],[-84.812519,38.785745],[-84.987781,38.780268],[-85.173997,38.68716],[-85.431413,38.730976],[-85.42046,38.533806],[-85.590245,38.451652],[-85.655968,38.325682],[-85.83123,38.27639],[-85.924338,38.024451],[-86.039354,37.958727],[-86.263908,38.051835],[-86.302247,38.166851],[-86.521325,38.040881],[-86.504894,37.931343],[-86.729448,37.893004],[-86.795172,37.991589],[-87.047111,37.893004],[-87.129265,37.788942],[-87.381204,37.93682],[-87.512651,37.903958],[-87.600282,37.975158],[-87.682436,37.903958],[-87.934375,37.893004],[-88.027483,37.799896],[-88.060345,37.865619],[-88.000098,38.101128],[-87.923421,38.15042],[-87.950806,38.27639],[-87.83579,38.292821],[-87.655051,38.506421],[-87.62219,38.637868],[-87.49622,38.780268],[-87.512651,38.95553],[-87.63862,39.169131],[-87.529082,39.34987],[-87.523605,41.710431],[-87.42502,41.644708],[-87.118311,41.644708],[-86.822556,41.759724],[-85.990061,41.759724]]]}},
+{"type":"Feature","id":"19","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.368417,43.501391],[-91.215062,43.501391],[-91.204109,43.353514],[-91.056231,43.254929],[-91.176724,43.134436],[-91.143862,42.909881],[-91.067185,42.75105],[-90.711184,42.636034],[-90.639984,42.510065],[-90.420906,42.329326],[-90.393521,42.225264],[-90.168967,42.126679],[-90.141582,42.000709],[-90.179921,41.809016],[-90.311367,41.743293],[-90.344229,41.589939],[-90.656414,41.463969],[-91.045277,41.414677],[-91.111001,41.239415],[-90.946692,41.097014],[-90.963123,40.921752],[-91.09457,40.823167],[-91.121954,40.669813],[-91.401278,40.560274],[-91.417709,40.379535],[-91.527248,40.412397],[-91.729895,40.615043],[-91.833957,40.609566],[-93.257961,40.582182],[-94.632673,40.571228],[-95.7664,40.587659],[-95.881416,40.719105],[-95.826646,40.976521],[-95.925231,41.201076],[-95.919754,41.453015],[-96.095016,41.540646],[-96.122401,41.67757],[-96.062155,41.798063],[-96.127878,41.973325],[-96.264801,42.039048],[-96.44554,42.488157],[-96.631756,42.707235],[-96.544125,42.855112],[-96.511264,43.052282],[-96.434587,43.123482],[-96.560556,43.222067],[-96.527695,43.397329],[-96.582464,43.479483],[-96.451017,43.501391],[-91.368417,43.501391]]]}},
+{"type":"Feature","id":"20","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.90605,40.001626],[-95.306337,40.001626],[-95.207752,39.908518],[-94.884612,39.831841],[-95.109167,39.541563],[-94.983197,39.442978],[-94.824366,39.20747],[-94.610765,39.158177],[-94.616242,37.000263],[-100.087706,37.000263],[-102.042974,36.994786],[-102.053927,40.001626],[-101.90605,40.001626]]]}},
+{"type":"Feature","id":"21","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83.903347,38.769315],[-83.678792,38.632391],[-83.519961,38.703591],[-83.142052,38.626914],[-83.032514,38.725499],[-82.890113,38.758361],[-82.846298,38.588575],[-82.731282,38.561191],[-82.594358,38.424267],[-82.621743,38.123036],[-82.50125,37.931343],[-82.342419,37.783465],[-82.293127,37.668449],[-82.101434,37.553434],[-81.969987,37.537003],[-82.353373,37.268633],[-82.720328,37.120755],[-82.720328,37.044078],[-82.868205,36.978355],[-82.879159,36.890724],[-83.070852,36.852385],[-83.136575,36.742847],[-83.673316,36.600446],[-83.689746,36.584015],[-84.544149,36.594969],[-85.289013,36.627831],[-85.486183,36.616877],[-86.592525,36.655216],[-87.852221,36.633308],[-88.071299,36.677123],[-88.054868,36.496384],[-89.298133,36.507338],[-89.418626,36.496384],[-89.363857,36.622354],[-89.215979,36.578538],[-89.133825,36.983832],[-89.183118,37.038601],[-89.029763,37.213863],[-88.914747,37.224817],[-88.547792,37.071463],[-88.421823,37.153617],[-88.514931,37.285064],[-88.476592,37.389126],[-88.065822,37.482234],[-88.15893,37.657496],[-88.027483,37.799896],[-87.934375,37.893004],[-87.682436,37.903958],[-87.600282,37.975158],[-87.512651,37.903958],[-87.381204,37.93682],[-87.129265,37.788942],[-87.047111,37.893004],[-86.795172,37.991589],[-86.729448,37.893004],[-86.504894,37.931343],[-86.521325,38.040881],[-86.302247,38.166851],[-86.263908,38.051835],[-86.039354,37.958727],[-85.924338,38.024451],[-85.83123,38.27639],[-85.655968,38.325682],[-85.590245,38.451652],[-85.42046,38.533806],[-85.431413,38.730976],[-85.173997,38.68716],[-84.987781,38.780268],[-84.812519,38.785745],[-84.894673,39.059592],[-84.817996,39.103408],[-84.43461,39.103408],[-84.231963,38.895284],[-84.215533,38.807653],[-83.903347,38.769315]]]}},
+{"type":"Feature","id":"22","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.608485,33.018527],[-91.16577,33.002096],[-91.072662,32.887081],[-91.143862,32.843265],[-91.154816,32.640618],[-91.006939,32.514649],[-90.985031,32.218894],[-91.105524,31.988862],[-91.341032,31.846462],[-91.401278,31.621907],[-91.499863,31.643815],[-91.516294,31.27686],[-91.636787,31.265906],[-91.565587,31.068736],[-91.636787,30.997536],[-89.747242,30.997536],[-89.845827,30.66892],[-89.681519,30.449842],[-89.643181,30.285534],[-89.522688,30.181472],[-89.818443,30.044549],[-89.84035,29.945964],[-89.599365,29.88024],[-89.495303,30.039072],[-89.287179,29.88024],[-89.30361,29.754271],[-89.424103,29.699501],[-89.648657,29.748794],[-89.621273,29.655686],[-89.69795,29.513285],[-89.506257,29.387316],[-89.199548,29.348977],[-89.09001,29.2011],[-89.002379,29.179192],[-89.16121,29.009407],[-89.336472,29.042268],[-89.484349,29.217531],[-89.851304,29.310638],[-89.851304,29.480424],[-90.032043,29.425654],[-90.021089,29.283254],[-90.103244,29.151807],[-90.23469,29.129899],[-90.333275,29.277777],[-90.563307,29.283254],[-90.645461,29.129899],[-90.798815,29.086084],[-90.963123,29.179192],[-91.09457,29.190146],[-91.220539,29.436608],[-91.445094,29.546147],[-91.532725,29.529716],[-91.620356,29.73784],[-91.883249,29.710455],[-91.888726,29.836425],[-92.146142,29.715932],[-92.113281,29.622824],[-92.31045,29.535193],[-92.617159,29.579009],[-92.97316,29.715932],[-93.2251,29.776178],[-93.767317,29.726886],[-93.838517,29.688547],[-93.926148,29.787132],[-93.690639,30.143133],[-93.767317,30.334826],[-93.696116,30.438888],[-93.728978,30.575812],[-93.630393,30.679874],[-93.526331,30.93729],[-93.542762,31.15089],[-93.816609,31.556184],[-93.822086,31.775262],[-94.041164,31.994339],[-94.041164,33.018527],[-93.608485,33.018527]]]}},
+{"type":"Feature","id":"23","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.703921,43.057759],[-70.824413,43.128959],[-70.807983,43.227544],[-70.966814,43.34256],[-71.032537,44.657025],[-71.08183,45.303304],[-70.649151,45.440228],[-70.720352,45.511428],[-70.556043,45.664782],[-70.386258,45.735983],[-70.41912,45.796229],[-70.260289,45.889337],[-70.309581,46.064599],[-70.210996,46.327492],[-70.057642,46.415123],[-69.997395,46.694447],[-69.225147,47.461219],[-69.044408,47.428357],[-69.033454,47.242141],[-68.902007,47.176418],[-68.578868,47.285957],[-68.376221,47.285957],[-68.233821,47.357157],[-67.954497,47.198326],[-67.790188,47.066879],[-67.779235,45.944106],[-67.801142,45.675736],[-67.456095,45.604536],[-67.505388,45.48952],[-67.417757,45.379982],[-67.488957,45.281397],[-67.346556,45.128042],[-67.16034,45.160904],[-66.979601,44.804903],[-67.187725,44.646072],[-67.308218,44.706318],[-67.406803,44.596779],[-67.549203,44.624164],[-67.565634,44.531056],[-67.75185,44.54201],[-68.047605,44.328409],[-68.118805,44.476286],[-68.222867,44.48724],[-68.173574,44.328409],[-68.403606,44.251732],[-68.458375,44.377701],[-68.567914,44.311978],[-68.82533,44.311978],[-68.830807,44.459856],[-68.984161,44.426994],[-68.956777,44.322932],[-69.099177,44.103854],[-69.071793,44.043608],[-69.258008,43.923115],[-69.444224,43.966931],[-69.553763,43.840961],[-69.707118,43.82453],[-69.833087,43.720469],[-69.986442,43.742376],[-70.030257,43.851915],[-70.254812,43.676653],[-70.194565,43.567114],[-70.358873,43.528776],[-70.369827,43.435668],[-70.556043,43.320652],[-70.703921,43.057759]]]}},
+{"type":"Feature","id":"24","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-75.994645,37.95325],[-76.016553,37.95325],[-76.043938,37.95325],[-75.994645,37.95325]]],[[[-79.477979,39.722302],[-75.786521,39.722302],[-75.693413,38.462606],[-75.047134,38.451652],[-75.244304,38.029928],[-75.397659,38.013497],[-75.671506,37.95325],[-75.885106,37.909435],[-75.879629,38.073743],[-75.961783,38.139466],[-75.846768,38.210667],[-76.000122,38.374975],[-76.049415,38.303775],[-76.257538,38.320205],[-76.328738,38.500944],[-76.263015,38.500944],[-76.257538,38.736453],[-76.191815,38.829561],[-76.279446,39.147223],[-76.169907,39.333439],[-76.000122,39.366301],[-75.972737,39.557994],[-76.098707,39.536086],[-76.104184,39.437501],[-76.367077,39.311532],[-76.443754,39.196516],[-76.460185,38.906238],[-76.55877,38.769315],[-76.514954,38.539283],[-76.383508,38.380452],[-76.399939,38.259959],[-76.317785,38.139466],[-76.3616,38.057312],[-76.591632,38.216144],[-76.920248,38.292821],[-77.018833,38.446175],[-77.205049,38.358544],[-77.276249,38.479037],[-77.128372,38.632391],[-77.040741,38.791222],[-76.909294,38.895284],[-77.035264,38.993869],[-77.117418,38.933623],[-77.248864,39.026731],[-77.456988,39.076023],[-77.456988,39.223901],[-77.566527,39.306055],[-77.719881,39.322485],[-77.834897,39.601809],[-78.004682,39.601809],[-78.174467,39.694917],[-78.267575,39.61824],[-78.431884,39.623717],[-78.470222,39.514178],[-78.765977,39.585379],[-78.963147,39.437501],[-79.094593,39.470363],[-79.291763,39.300578],[-79.488933,39.20747],[-79.477979,39.722302]]]]}},
+{"type":"Feature","id":"25","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.917521,42.887974],[-70.818936,42.871543],[-70.780598,42.696281],[-70.824413,42.55388],[-70.983245,42.422434],[-70.988722,42.269079],[-70.769644,42.247172],[-70.638197,42.08834],[-70.660105,41.962371],[-70.550566,41.929509],[-70.539613,41.814493],[-70.260289,41.715908],[-69.937149,41.809016],[-70.008349,41.672093],[-70.484843,41.5516],[-70.660105,41.546123],[-70.764167,41.639231],[-70.928475,41.611847],[-70.933952,41.540646],[-71.120168,41.496831],[-71.196845,41.67757],[-71.22423,41.710431],[-71.328292,41.781632],[-71.383061,42.01714],[-71.530939,42.01714],[-71.799309,42.006186],[-71.799309,42.022617],[-73.053528,42.039048],[-73.486206,42.050002],[-73.508114,42.08834],[-73.267129,42.745573],[-72.456542,42.729142],[-71.29543,42.696281],[-71.185891,42.789389],[-70.917521,42.887974]]]}},
+{"type":"Feature","id":"26","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-83.454238,41.732339],[-84.807042,41.694001],[-84.807042,41.759724],[-85.990061,41.759724],[-86.822556,41.759724],[-86.619909,41.891171],[-86.482986,42.115725],[-86.357016,42.252649],[-86.263908,42.444341],[-86.209139,42.718189],[-86.231047,43.013943],[-86.526801,43.594499],[-86.433693,43.813577],[-86.499417,44.07647],[-86.269385,44.34484],[-86.220093,44.569394],[-86.252954,44.689887],[-86.088646,44.73918],[-86.066738,44.903488],[-85.809322,44.947303],[-85.612152,45.128042],[-85.628583,44.766564],[-85.524521,44.750133],[-85.393075,44.930872],[-85.387598,45.237581],[-85.305444,45.314258],[-85.031597,45.363551],[-85.119228,45.577151],[-84.938489,45.75789],[-84.713934,45.768844],[-84.461995,45.653829],[-84.215533,45.637398],[-84.09504,45.494997],[-83.908824,45.484043],[-83.596638,45.352597],[-83.4871,45.358074],[-83.317314,45.144473],[-83.454238,45.029457],[-83.322791,44.88158],[-83.273499,44.711795],[-83.333745,44.339363],[-83.536392,44.246255],[-83.585684,44.054562],[-83.82667,43.988839],[-83.958116,43.758807],[-83.908824,43.671176],[-83.667839,43.589022],[-83.481623,43.714992],[-83.262545,43.972408],[-82.917498,44.070993],[-82.747713,43.994316],[-82.643651,43.851915],[-82.539589,43.435668],[-82.523158,43.227544],[-82.413619,42.975605],[-82.517681,42.614127],[-82.681989,42.559357],[-82.687466,42.690804],[-82.797005,42.652465],[-82.922975,42.351234],[-83.125621,42.236218],[-83.185868,42.006186],[-83.437807,41.814493],[-83.454238,41.732339]]],[[[-85.508091,45.730506],[-85.49166,45.610013],[-85.623106,45.588105],[-85.568337,45.75789],[-85.508091,45.730506]]],[[[-87.589328,45.095181],[-87.742682,45.199243],[-87.649574,45.341643],[-87.885083,45.363551],[-87.791975,45.500474],[-87.781021,45.675736],[-87.989145,45.796229],[-88.10416,45.922199],[-88.531362,46.020784],[-88.662808,45.987922],[-89.09001,46.135799],[-90.119674,46.338446],[-90.229213,46.508231],[-90.415429,46.568478],[-90.026566,46.672539],[-89.851304,46.793032],[-89.413149,46.842325],[-89.128348,46.990202],[-88.996902,46.995679],[-88.887363,47.099741],[-88.575177,47.247618],[-88.416346,47.373588],[-88.180837,47.455742],[-87.956283,47.384542],[-88.350623,47.077833],[-88.443731,46.973771],[-88.438254,46.787555],[-88.246561,46.929956],[-87.901513,46.908048],[-87.633143,46.809463],[-87.392158,46.535616],[-87.260711,46.486323],[-87.008772,46.530139],[-86.948526,46.469893],[-86.696587,46.437031],[-86.159846,46.667063],[-85.880522,46.68897],[-85.508091,46.678016],[-85.256151,46.754694],[-85.064458,46.760171],[-85.02612,46.480847],[-84.82895,46.442508],[-84.63178,46.486323],[-84.549626,46.4206],[-84.418179,46.502754],[-84.127902,46.530139],[-84.122425,46.179615],[-83.990978,46.031737],[-83.793808,45.993399],[-83.7719,46.091984],[-83.580208,46.091984],[-83.476146,45.987922],[-83.563777,45.911245],[-84.111471,45.976968],[-84.374364,45.933153],[-84.659165,46.053645],[-84.741319,45.944106],[-84.70298,45.850998],[-84.82895,45.872906],[-85.015166,46.00983],[-85.338305,46.091984],[-85.502614,46.097461],[-85.661445,45.966014],[-85.924338,45.933153],[-86.209139,45.960537],[-86.324155,45.905768],[-86.351539,45.796229],[-86.663725,45.703121],[-86.647294,45.834568],[-86.784218,45.861952],[-86.838987,45.725029],[-87.069019,45.719552],[-87.17308,45.659305],[-87.326435,45.423797],[-87.611236,45.122565],[-87.589328,45.095181]]],[[[-88.805209,47.976051],[-89.057148,47.850082],[-89.188594,47.833651],[-89.177641,47.937713],[-88.547792,48.173221],[-88.668285,48.008913],[-88.805209,47.976051]]]]}},
+{"type":"Feature","id":"27","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-92.014696,46.705401],[-92.091373,46.749217],[-92.29402,46.667063],[-92.29402,46.075553],[-92.354266,46.015307],[-92.639067,45.933153],[-92.869098,45.719552],[-92.885529,45.577151],[-92.770513,45.566198],[-92.644544,45.440228],[-92.75956,45.286874],[-92.737652,45.117088],[-92.808852,44.750133],[-92.545959,44.569394],[-92.337835,44.552964],[-92.233773,44.443425],[-91.927065,44.333886],[-91.877772,44.202439],[-91.592971,44.032654],[-91.43414,43.994316],[-91.242447,43.775238],[-91.269832,43.616407],[-91.215062,43.501391],[-91.368417,43.501391],[-96.451017,43.501391],[-96.451017,45.297827],[-96.681049,45.412843],[-96.856311,45.604536],[-96.582464,45.818137],[-96.560556,45.933153],[-96.598895,46.332969],[-96.719387,46.437031],[-96.801542,46.656109],[-96.785111,46.924479],[-96.823449,46.968294],[-96.856311,47.609096],[-97.053481,47.948667],[-97.130158,48.140359],[-97.16302,48.545653],[-97.097296,48.682577],[-97.228743,49.000239],[-95.152983,49.000239],[-95.152983,49.383625],[-94.955813,49.372671],[-94.824366,49.295994],[-94.69292,48.775685],[-94.588858,48.715438],[-94.260241,48.699007],[-94.221903,48.649715],[-93.838517,48.627807],[-93.794701,48.518268],[-93.466085,48.545653],[-93.466085,48.589469],[-93.208669,48.644238],[-92.984114,48.62233],[-92.726698,48.540176],[-92.655498,48.436114],[-92.50762,48.447068],[-92.370697,48.222514],[-92.304974,48.315622],[-92.053034,48.359437],[-92.009219,48.266329],[-91.713464,48.200606],[-91.713464,48.112975],[-91.565587,48.041775],[-91.264355,48.080113],[-91.083616,48.178698],[-90.837154,48.238944],[-90.749522,48.091067],[-90.579737,48.123929],[-90.377091,48.091067],[-90.141582,48.112975],[-89.873212,47.987005],[-89.615796,48.008913],[-89.637704,47.954144],[-89.971797,47.828174],[-90.437337,47.729589],[-90.738569,47.625527],[-91.171247,47.368111],[-91.357463,47.20928],[-91.642264,47.028541],[-92.091373,46.787555],[-92.014696,46.705401]]]}},
+{"type":"Feature","id":"28","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.471115,34.995703],[-88.202745,34.995703],[-88.098683,34.891641],[-88.241084,33.796253],[-88.471115,31.895754],[-88.394438,30.367688],[-88.503977,30.323872],[-88.744962,30.34578],[-88.843547,30.411504],[-89.084533,30.367688],[-89.418626,30.252672],[-89.522688,30.181472],[-89.643181,30.285534],[-89.681519,30.449842],[-89.845827,30.66892],[-89.747242,30.997536],[-91.636787,30.997536],[-91.565587,31.068736],[-91.636787,31.265906],[-91.516294,31.27686],[-91.499863,31.643815],[-91.401278,31.621907],[-91.341032,31.846462],[-91.105524,31.988862],[-90.985031,32.218894],[-91.006939,32.514649],[-91.154816,32.640618],[-91.143862,32.843265],[-91.072662,32.887081],[-91.16577,33.002096],[-91.089093,33.13902],[-91.143862,33.347144],[-91.056231,33.429298],[-91.231493,33.560744],[-91.072662,33.867453],[-90.891923,34.026284],[-90.952169,34.135823],[-90.744046,34.300131],[-90.749522,34.365854],[-90.568783,34.420624],[-90.585214,34.617794],[-90.481152,34.661609],[-90.409952,34.831394],[-90.251121,34.908072],[-90.311367,34.995703],[-88.471115,34.995703]]]}},
+{"type":"Feature","id":"29","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-91.833957,40.609566],[-91.729895,40.615043],[-91.527248,40.412397],[-91.417709,40.379535],[-91.50534,40.237135],[-91.494386,40.034488],[-91.368417,39.727779],[-91.061708,39.470363],[-90.727615,39.256762],[-90.661891,38.928146],[-90.585214,38.867899],[-90.470199,38.961007],[-90.251121,38.917192],[-90.10872,38.845992],[-90.207305,38.725499],[-90.179921,38.632391],[-90.349706,38.374975],[-90.355183,38.216144],[-90.059428,38.013497],[-89.949889,37.88205],[-89.84035,37.903958],[-89.517211,37.690357],[-89.517211,37.537003],[-89.435057,37.34531],[-89.517211,37.279587],[-89.292656,36.994786],[-89.133825,36.983832],[-89.215979,36.578538],[-89.363857,36.622354],[-89.418626,36.496384],[-89.484349,36.496384],[-89.539119,36.496384],[-89.533642,36.249922],[-89.730812,35.997983],[-90.377091,35.997983],[-90.218259,36.184199],[-90.064905,36.304691],[-90.152536,36.496384],[-94.473842,36.501861],[-94.616242,36.501861],[-94.616242,37.000263],[-94.610765,39.158177],[-94.824366,39.20747],[-94.983197,39.442978],[-95.109167,39.541563],[-94.884612,39.831841],[-95.207752,39.908518],[-95.306337,40.001626],[-95.552799,40.264519],[-95.7664,40.587659],[-94.632673,40.571228],[-93.257961,40.582182],[-91.833957,40.609566]]]}},
+{"type":"Feature","id":"30","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.047534,49.000239],[-104.042057,47.861036],[-104.047534,45.944106],[-104.042057,44.996596],[-104.058488,44.996596],[-105.91517,45.002073],[-109.080842,45.002073],[-111.05254,45.002073],[-111.047063,44.476286],[-111.227803,44.580348],[-111.386634,44.75561],[-111.616665,44.547487],[-111.819312,44.509148],[-111.868605,44.563917],[-112.104113,44.520102],[-112.241036,44.569394],[-112.471068,44.481763],[-112.783254,44.48724],[-112.887315,44.394132],[-113.002331,44.448902],[-113.133778,44.772041],[-113.341901,44.782995],[-113.456917,44.865149],[-113.45144,45.056842],[-113.571933,45.128042],[-113.736241,45.330689],[-113.834826,45.522382],[-113.807441,45.604536],[-113.98818,45.703121],[-114.086765,45.593582],[-114.333228,45.456659],[-114.546828,45.560721],[-114.497536,45.670259],[-114.568736,45.774321],[-114.387997,45.88386],[-114.492059,46.037214],[-114.464674,46.272723],[-114.322274,46.645155],[-114.612552,46.639678],[-114.623506,46.705401],[-114.886399,46.809463],[-114.930214,46.919002],[-115.302646,47.187372],[-115.324554,47.258572],[-115.527201,47.302388],[-115.718894,47.42288],[-115.724371,47.696727],[-116.04751,47.976051],[-116.04751,49.000239],[-111.50165,48.994762],[-109.453274,49.000239],[-104.047534,49.000239]]]}},
+{"type":"Feature","id":"31","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-103.324578,43.002989],[-101.626726,42.997512],[-98.499393,42.997512],[-98.466531,42.94822],[-97.951699,42.767481],[-97.831206,42.866066],[-97.688806,42.844158],[-97.217789,42.844158],[-96.692003,42.657942],[-96.626279,42.515542],[-96.44554,42.488157],[-96.264801,42.039048],[-96.127878,41.973325],[-96.062155,41.798063],[-96.122401,41.67757],[-96.095016,41.540646],[-95.919754,41.453015],[-95.925231,41.201076],[-95.826646,40.976521],[-95.881416,40.719105],[-95.7664,40.587659],[-95.552799,40.264519],[-95.306337,40.001626],[-101.90605,40.001626],[-102.053927,40.001626],[-102.053927,41.003906],[-104.053011,41.003906],[-104.053011,43.002989],[-103.324578,43.002989]]]}},
+{"type":"Feature","id":"32","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-117.027882,42.000709],[-114.04295,41.995232],[-114.048427,37.000263],[-114.048427,36.195153],[-114.152489,36.025367],[-114.251074,36.01989],[-114.371566,36.140383],[-114.738521,36.102045],[-114.678275,35.516012],[-114.596121,35.324319],[-114.574213,35.138103],[-114.634459,35.00118],[-115.85034,35.970598],[-116.540435,36.501861],[-117.498899,37.21934],[-118.71478,38.101128],[-120.001861,38.999346],[-119.996384,40.264519],[-120.001861,41.995232],[-118.698349,41.989755],[-117.027882,42.000709]]]}},
+{"type":"Feature","id":"33","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.08183,45.303304],[-71.032537,44.657025],[-70.966814,43.34256],[-70.807983,43.227544],[-70.824413,43.128959],[-70.703921,43.057759],[-70.818936,42.871543],[-70.917521,42.887974],[-71.185891,42.789389],[-71.29543,42.696281],[-72.456542,42.729142],[-72.544173,42.80582],[-72.533219,42.953697],[-72.445588,43.008466],[-72.456542,43.150867],[-72.379864,43.572591],[-72.204602,43.769761],[-72.116971,43.994316],[-72.02934,44.07647],[-72.034817,44.322932],[-71.700724,44.41604],[-71.536416,44.585825],[-71.629524,44.750133],[-71.4926,44.914442],[-71.503554,45.013027],[-71.361154,45.270443],[-71.131122,45.243058],[-71.08183,45.303304]]]}},
+{"type":"Feature","id":"34","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.236547,41.14083],[-73.902454,40.998429],[-74.022947,40.708151],[-74.187255,40.642428],[-74.274886,40.489074],[-74.001039,40.412397],[-73.979131,40.297381],[-74.099624,39.760641],[-74.411809,39.360824],[-74.614456,39.245808],[-74.795195,38.993869],[-74.888303,39.158177],[-75.178581,39.240331],[-75.534582,39.459409],[-75.55649,39.607286],[-75.561967,39.629194],[-75.507197,39.683964],[-75.414089,39.804456],[-75.145719,39.88661],[-75.129289,39.963288],[-74.82258,40.127596],[-74.773287,40.215227],[-75.058088,40.417874],[-75.069042,40.543843],[-75.195012,40.576705],[-75.205966,40.691721],[-75.052611,40.866983],[-75.134765,40.971045],[-74.882826,41.179168],[-74.828057,41.288707],[-74.69661,41.359907],[-74.236547,41.14083]]]}},
+{"type":"Feature","id":"35","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-107.421329,37.000263],[-106.868158,36.994786],[-104.337812,36.994786],[-103.001438,37.000263],[-103.001438,36.501861],[-103.039777,36.501861],[-103.045254,34.01533],[-103.067161,33.002096],[-103.067161,31.999816],[-106.616219,31.999816],[-106.643603,31.901231],[-106.528588,31.786216],[-108.210008,31.786216],[-108.210008,31.331629],[-109.04798,31.331629],[-109.042503,37.000263],[-107.421329,37.000263]]]}},
+{"type":"Feature","id":"36","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.343806,45.013027],[-73.332852,44.804903],[-73.387622,44.618687],[-73.294514,44.437948],[-73.321898,44.246255],[-73.436914,44.043608],[-73.349283,43.769761],[-73.404052,43.687607],[-73.245221,43.523299],[-73.278083,42.833204],[-73.267129,42.745573],[-73.508114,42.08834],[-73.486206,42.050002],[-73.55193,41.294184],[-73.48073,41.21203],[-73.727192,41.102491],[-73.655992,40.987475],[-73.22879,40.905321],[-73.141159,40.965568],[-72.774204,40.965568],[-72.587988,40.998429],[-72.28128,41.157261],[-72.259372,41.042245],[-72.100541,40.992952],[-72.467496,40.845075],[-73.239744,40.625997],[-73.562884,40.582182],[-73.776484,40.593136],[-73.935316,40.543843],[-74.022947,40.708151],[-73.902454,40.998429],[-74.236547,41.14083],[-74.69661,41.359907],[-74.740426,41.431108],[-74.89378,41.436584],[-75.074519,41.60637],[-75.052611,41.754247],[-75.173104,41.869263],[-75.249781,41.863786],[-75.35932,42.000709],[-79.76278,42.000709],[-79.76278,42.252649],[-79.76278,42.269079],[-79.149363,42.55388],[-79.050778,42.690804],[-78.853608,42.783912],[-78.930285,42.953697],[-79.012439,42.986559],[-79.072686,43.260406],[-78.486653,43.375421],[-77.966344,43.369944],[-77.75822,43.34256],[-77.533665,43.233021],[-77.391265,43.276836],[-76.958587,43.271359],[-76.695693,43.34256],[-76.41637,43.523299],[-76.235631,43.528776],[-76.230154,43.802623],[-76.137046,43.961454],[-76.3616,44.070993],[-76.312308,44.196962],[-75.912491,44.366748],[-75.764614,44.514625],[-75.282643,44.848718],[-74.828057,45.018503],[-74.148916,44.991119],[-73.343806,45.013027]]]}},
+{"type":"Feature","id":"37","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.978661,36.562108],[-80.294043,36.545677],[-79.510841,36.5402],[-75.868676,36.551154],[-75.75366,36.151337],[-76.032984,36.189676],[-76.071322,36.140383],[-76.410893,36.080137],[-76.460185,36.025367],[-76.68474,36.008937],[-76.673786,35.937736],[-76.399939,35.987029],[-76.3616,35.943213],[-76.060368,35.992506],[-75.961783,35.899398],[-75.781044,35.937736],[-75.715321,35.696751],[-75.775568,35.581735],[-75.89606,35.570781],[-76.147999,35.324319],[-76.482093,35.313365],[-76.536862,35.14358],[-76.394462,34.973795],[-76.279446,34.940933],[-76.493047,34.661609],[-76.673786,34.694471],[-76.991448,34.667086],[-77.210526,34.60684],[-77.555573,34.415147],[-77.82942,34.163208],[-77.971821,33.845545],[-78.179944,33.916745],[-78.541422,33.851022],[-79.675149,34.80401],[-80.797922,34.820441],[-80.781491,34.935456],[-80.934845,35.105241],[-81.038907,35.044995],[-81.044384,35.149057],[-82.276696,35.198349],[-82.550543,35.160011],[-82.764143,35.066903],[-83.109191,35.00118],[-83.618546,34.984749],[-84.319594,34.990226],[-84.29221,35.225734],[-84.09504,35.247642],[-84.018363,35.41195],[-83.7719,35.559827],[-83.498053,35.565304],[-83.251591,35.718659],[-82.994175,35.773428],[-82.775097,35.997983],[-82.638174,36.063706],[-82.610789,35.965121],[-82.216449,36.156814],[-82.03571,36.118475],[-81.909741,36.304691],[-81.723525,36.353984],[-81.679709,36.589492],[-80.978661,36.562108]]]}},
+{"type":"Feature","id":"38","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.228743,49.000239],[-97.097296,48.682577],[-97.16302,48.545653],[-97.130158,48.140359],[-97.053481,47.948667],[-96.856311,47.609096],[-96.823449,46.968294],[-96.785111,46.924479],[-96.801542,46.656109],[-96.719387,46.437031],[-96.598895,46.332969],[-96.560556,45.933153],[-104.047534,45.944106],[-104.042057,47.861036],[-104.047534,49.000239],[-97.228743,49.000239]]]}},
+{"type":"Feature","id":"39","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.518598,41.978802],[-80.518598,40.636951],[-80.666475,40.582182],[-80.595275,40.472643],[-80.600752,40.319289],[-80.737675,40.078303],[-80.830783,39.711348],[-81.219646,39.388209],[-81.345616,39.344393],[-81.455155,39.410117],[-81.57017,39.267716],[-81.685186,39.273193],[-81.811156,39.0815],[-81.783771,38.966484],[-81.887833,38.873376],[-82.03571,39.026731],[-82.221926,38.785745],[-82.172634,38.632391],[-82.293127,38.577622],[-82.331465,38.446175],[-82.594358,38.424267],[-82.731282,38.561191],[-82.846298,38.588575],[-82.890113,38.758361],[-83.032514,38.725499],[-83.142052,38.626914],[-83.519961,38.703591],[-83.678792,38.632391],[-83.903347,38.769315],[-84.215533,38.807653],[-84.231963,38.895284],[-84.43461,39.103408],[-84.817996,39.103408],[-84.801565,40.500028],[-84.807042,41.694001],[-83.454238,41.732339],[-83.065375,41.595416],[-82.933929,41.513262],[-82.835344,41.589939],[-82.616266,41.431108],[-82.479343,41.381815],[-82.013803,41.513262],[-81.739956,41.485877],[-81.444201,41.672093],[-81.011523,41.852832],[-80.518598,41.978802],[-80.518598,41.978802]]]}},
+{"type":"Feature","id":"40","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-100.087706,37.000263],[-94.616242,37.000263],[-94.616242,36.501861],[-94.430026,35.395519],[-94.484796,33.637421],[-94.868182,33.74696],[-94.966767,33.861976],[-95.224183,33.960561],[-95.289906,33.87293],[-95.547322,33.878407],[-95.602092,33.933176],[-95.8376,33.834591],[-95.936185,33.889361],[-96.149786,33.840068],[-96.346956,33.686714],[-96.423633,33.774345],[-96.631756,33.845545],[-96.850834,33.845545],[-96.922034,33.960561],[-97.173974,33.736006],[-97.256128,33.861976],[-97.371143,33.823637],[-97.458774,33.905791],[-97.694283,33.982469],[-97.869545,33.851022],[-97.946222,33.987946],[-98.088623,34.004376],[-98.170777,34.113915],[-98.36247,34.157731],[-98.488439,34.064623],[-98.570593,34.146777],[-98.767763,34.135823],[-98.986841,34.223454],[-99.189488,34.2125],[-99.260688,34.404193],[-99.57835,34.415147],[-99.698843,34.382285],[-99.923398,34.573978],[-100.000075,34.563024],[-100.000075,36.501861],[-101.812942,36.501861],[-103.001438,36.501861],[-103.001438,37.000263],[-102.042974,36.994786],[-100.087706,37.000263]]]}},
+{"type":"Feature","id":"41","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.211348,46.174138],[-123.11824,46.185092],[-122.904639,46.08103],[-122.811531,45.960537],[-122.762239,45.659305],[-122.247407,45.549767],[-121.809251,45.708598],[-121.535404,45.725029],[-121.217742,45.670259],[-121.18488,45.604536],[-120.637186,45.746937],[-120.505739,45.697644],[-120.209985,45.725029],[-119.963522,45.823614],[-119.525367,45.911245],[-119.125551,45.933153],[-118.988627,45.998876],[-116.918344,45.993399],[-116.78142,45.823614],[-116.545912,45.752413],[-116.463758,45.61549],[-116.671881,45.319735],[-116.732128,45.144473],[-116.847143,45.02398],[-116.830713,44.930872],[-116.934774,44.782995],[-117.038836,44.750133],[-117.241483,44.394132],[-117.170283,44.257209],[-116.97859,44.240778],[-116.896436,44.158624],[-117.027882,43.830007],[-117.027882,42.000709],[-118.698349,41.989755],[-120.001861,41.995232],[-121.037003,41.995232],[-122.378853,42.011663],[-123.233256,42.006186],[-124.213628,42.000709],[-124.356029,42.115725],[-124.432706,42.438865],[-124.416275,42.663419],[-124.553198,42.838681],[-124.454613,43.002989],[-124.383413,43.271359],[-124.235536,43.55616],[-124.169813,43.8081],[-124.060274,44.657025],[-124.076705,44.772041],[-123.97812,45.144473],[-123.939781,45.659305],[-123.994551,45.944106],[-123.945258,46.113892],[-123.545441,46.261769],[-123.370179,46.146753],[-123.211348,46.174138]]]}},
+{"type":"Feature","id":"42","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-79.76278,42.252649],[-79.76278,42.000709],[-75.35932,42.000709],[-75.249781,41.863786],[-75.173104,41.869263],[-75.052611,41.754247],[-75.074519,41.60637],[-74.89378,41.436584],[-74.740426,41.431108],[-74.69661,41.359907],[-74.828057,41.288707],[-74.882826,41.179168],[-75.134765,40.971045],[-75.052611,40.866983],[-75.205966,40.691721],[-75.195012,40.576705],[-75.069042,40.543843],[-75.058088,40.417874],[-74.773287,40.215227],[-74.82258,40.127596],[-75.129289,39.963288],[-75.145719,39.88661],[-75.414089,39.804456],[-75.616736,39.831841],[-75.786521,39.722302],[-79.477979,39.722302],[-80.518598,39.722302],[-80.518598,40.636951],[-80.518598,41.978802],[-80.518598,41.978802],[-80.332382,42.033571],[-79.76278,42.269079],[-79.76278,42.252649]]]}},
+{"type":"Feature","id":"44","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-71.196845,41.67757],[-71.120168,41.496831],[-71.317338,41.474923],[-71.196845,41.67757]]],[[[-71.530939,42.01714],[-71.383061,42.01714],[-71.328292,41.781632],[-71.22423,41.710431],[-71.344723,41.726862],[-71.448785,41.578985],[-71.481646,41.370861],[-71.859555,41.321569],[-71.799309,41.414677],[-71.799309,42.006186],[-71.530939,42.01714]]]]}},
+{"type":"Feature","id":"45","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.764143,35.066903],[-82.550543,35.160011],[-82.276696,35.198349],[-81.044384,35.149057],[-81.038907,35.044995],[-80.934845,35.105241],[-80.781491,34.935456],[-80.797922,34.820441],[-79.675149,34.80401],[-78.541422,33.851022],[-78.716684,33.80173],[-78.935762,33.637421],[-79.149363,33.380005],[-79.187701,33.171881],[-79.357487,33.007573],[-79.582041,33.007573],[-79.631334,32.887081],[-79.866842,32.755634],[-79.998289,32.613234],[-80.206412,32.552987],[-80.430967,32.399633],[-80.452875,32.328433],[-80.660998,32.246279],[-80.885553,32.032678],[-81.115584,32.120309],[-81.121061,32.290094],[-81.279893,32.558464],[-81.416816,32.629664],[-81.42777,32.843265],[-81.493493,33.007573],[-81.761863,33.160928],[-81.937125,33.347144],[-81.926172,33.462159],[-82.194542,33.631944],[-82.325988,33.81816],[-82.55602,33.94413],[-82.714851,34.152254],[-82.747713,34.26727],[-82.901067,34.486347],[-83.005129,34.469916],[-83.339222,34.683517],[-83.322791,34.787579],[-83.109191,35.00118],[-82.764143,35.066903]]]}},
+{"type":"Feature","id":"46","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-104.047534,45.944106],[-96.560556,45.933153],[-96.582464,45.818137],[-96.856311,45.604536],[-96.681049,45.412843],[-96.451017,45.297827],[-96.451017,43.501391],[-96.582464,43.479483],[-96.527695,43.397329],[-96.560556,43.222067],[-96.434587,43.123482],[-96.511264,43.052282],[-96.544125,42.855112],[-96.631756,42.707235],[-96.44554,42.488157],[-96.626279,42.515542],[-96.692003,42.657942],[-97.217789,42.844158],[-97.688806,42.844158],[-97.831206,42.866066],[-97.951699,42.767481],[-98.466531,42.94822],[-98.499393,42.997512],[-101.626726,42.997512],[-103.324578,43.002989],[-104.053011,43.002989],[-104.058488,44.996596],[-104.042057,44.996596],[-104.047534,45.944106]]]}},
+{"type":"Feature","id":"47","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-88.054868,36.496384],[-88.071299,36.677123],[-87.852221,36.633308],[-86.592525,36.655216],[-85.486183,36.616877],[-85.289013,36.627831],[-84.544149,36.594969],[-83.689746,36.584015],[-83.673316,36.600446],[-81.679709,36.589492],[-81.723525,36.353984],[-81.909741,36.304691],[-82.03571,36.118475],[-82.216449,36.156814],[-82.610789,35.965121],[-82.638174,36.063706],[-82.775097,35.997983],[-82.994175,35.773428],[-83.251591,35.718659],[-83.498053,35.565304],[-83.7719,35.559827],[-84.018363,35.41195],[-84.09504,35.247642],[-84.29221,35.225734],[-84.319594,34.990226],[-85.606675,34.984749],[-87.359296,35.00118],[-88.202745,34.995703],[-88.471115,34.995703],[-90.311367,34.995703],[-90.212782,35.023087],[-90.114197,35.198349],[-90.130628,35.439335],[-89.944412,35.603643],[-89.911551,35.756997],[-89.763673,35.811767],[-89.730812,35.997983],[-89.533642,36.249922],[-89.539119,36.496384],[-89.484349,36.496384],[-89.418626,36.496384],[-89.298133,36.507338],[-88.054868,36.496384]]]}},
+{"type":"Feature","id":"48","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-101.812942,36.501861],[-100.000075,36.501861],[-100.000075,34.563024],[-99.923398,34.573978],[-99.698843,34.382285],[-99.57835,34.415147],[-99.260688,34.404193],[-99.189488,34.2125],[-98.986841,34.223454],[-98.767763,34.135823],[-98.570593,34.146777],[-98.488439,34.064623],[-98.36247,34.157731],[-98.170777,34.113915],[-98.088623,34.004376],[-97.946222,33.987946],[-97.869545,33.851022],[-97.694283,33.982469],[-97.458774,33.905791],[-97.371143,33.823637],[-97.256128,33.861976],[-97.173974,33.736006],[-96.922034,33.960561],[-96.850834,33.845545],[-96.631756,33.845545],[-96.423633,33.774345],[-96.346956,33.686714],[-96.149786,33.840068],[-95.936185,33.889361],[-95.8376,33.834591],[-95.602092,33.933176],[-95.547322,33.878407],[-95.289906,33.87293],[-95.224183,33.960561],[-94.966767,33.861976],[-94.868182,33.74696],[-94.484796,33.637421],[-94.380734,33.544313],[-94.183564,33.593606],[-94.041164,33.54979],[-94.041164,33.018527],[-94.041164,31.994339],[-93.822086,31.775262],[-93.816609,31.556184],[-93.542762,31.15089],[-93.526331,30.93729],[-93.630393,30.679874],[-93.728978,30.575812],[-93.696116,30.438888],[-93.767317,30.334826],[-93.690639,30.143133],[-93.926148,29.787132],[-93.838517,29.688547],[-94.002825,29.68307],[-94.523134,29.546147],[-94.70935,29.622824],[-94.742212,29.787132],[-94.873659,29.672117],[-94.966767,29.699501],[-95.016059,29.557101],[-94.911997,29.496854],[-94.895566,29.310638],[-95.081782,29.113469],[-95.383014,28.867006],[-95.985477,28.604113],[-96.045724,28.647929],[-96.226463,28.582205],[-96.23194,28.642452],[-96.478402,28.598636],[-96.593418,28.724606],[-96.664618,28.697221],[-96.401725,28.439805],[-96.593418,28.357651],[-96.774157,28.406943],[-96.801542,28.226204],[-97.026096,28.039988],[-97.256128,27.694941],[-97.404005,27.333463],[-97.513544,27.360848],[-97.540929,27.229401],[-97.425913,27.262263],[-97.480682,26.99937],[-97.557359,26.988416],[-97.562836,26.840538],[-97.469728,26.758384],[-97.442344,26.457153],[-97.332805,26.353091],[-97.30542,26.161398],[-97.217789,25.991613],[-97.524498,25.887551],[-97.650467,26.018997],[-97.885976,26.06829],[-98.198161,26.057336],[-98.466531,26.221644],[-98.669178,26.238075],[-98.822533,26.369522],[-99.030656,26.413337],[-99.173057,26.539307],[-99.266165,26.840538],[-99.446904,27.021277],[-99.424996,27.174632],[-99.50715,27.33894],[-99.479765,27.48134],[-99.605735,27.640172],[-99.709797,27.656603],[-99.879582,27.799003],[-99.934351,27.979742],[-100.082229,28.14405],[-100.29583,28.280974],[-100.399891,28.582205],[-100.498476,28.66436],[-100.629923,28.905345],[-100.673738,29.102515],[-100.799708,29.244915],[-101.013309,29.370885],[-101.062601,29.458516],[-101.259771,29.535193],[-101.413125,29.754271],[-101.851281,29.803563],[-102.114174,29.792609],[-102.338728,29.869286],[-102.388021,29.765225],[-102.629006,29.732363],[-102.809745,29.524239],[-102.919284,29.190146],[-102.97953,29.184669],[-103.116454,28.987499],[-103.280762,28.982022],[-103.527224,29.135376],[-104.146119,29.381839],[-104.266611,29.513285],[-104.507597,29.639255],[-104.677382,29.924056],[-104.688336,30.181472],[-104.858121,30.389596],[-104.896459,30.570335],[-105.005998,30.685351],[-105.394861,30.855136],[-105.602985,31.085167],[-105.77277,31.167321],[-105.953509,31.364491],[-106.205448,31.468553],[-106.38071,31.731446],[-106.528588,31.786216],[-106.643603,31.901231],[-106.616219,31.999816],[-103.067161,31.999816],[-103.067161,33.002096],[-103.045254,34.01533],[-103.039777,36.501861],[-103.001438,36.501861],[-101.812942,36.501861]]]}},
+{"type":"Feature","id":"49","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.164359,41.995232],[-111.047063,42.000709],[-111.047063,40.998429],[-109.04798,40.998429],[-109.053457,39.125316],[-109.058934,38.27639],[-109.042503,38.166851],[-109.042503,37.000263],[-110.499369,37.00574],[-114.048427,37.000263],[-114.04295,41.995232],[-112.164359,41.995232]]]}},
+{"type":"Feature","id":"50","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-71.503554,45.013027],[-71.4926,44.914442],[-71.629524,44.750133],[-71.536416,44.585825],[-71.700724,44.41604],[-72.034817,44.322932],[-72.02934,44.07647],[-72.116971,43.994316],[-72.204602,43.769761],[-72.379864,43.572591],[-72.456542,43.150867],[-72.445588,43.008466],[-72.533219,42.953697],[-72.544173,42.80582],[-72.456542,42.729142],[-73.267129,42.745573],[-73.278083,42.833204],[-73.245221,43.523299],[-73.404052,43.687607],[-73.349283,43.769761],[-73.436914,44.043608],[-73.321898,44.246255],[-73.294514,44.437948],[-73.387622,44.618687],[-73.332852,44.804903],[-73.343806,45.013027],[-72.308664,45.002073],[-71.503554,45.013027]]]}},
+{"type":"Feature","id":"51","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-75.397659,38.013497],[-75.244304,38.029928],[-75.375751,37.860142],[-75.512674,37.799896],[-75.594828,37.569865],[-75.802952,37.197433],[-75.972737,37.120755],[-76.027507,37.257679],[-75.939876,37.564388],[-75.671506,37.95325],[-75.397659,38.013497]]],[[[-76.016553,37.95325],[-75.994645,37.95325],[-76.043938,37.95325],[-76.016553,37.95325]]],[[[-78.349729,39.464886],[-77.82942,39.130793],[-77.719881,39.322485],[-77.566527,39.306055],[-77.456988,39.223901],[-77.456988,39.076023],[-77.248864,39.026731],[-77.117418,38.933623],[-77.040741,38.791222],[-77.128372,38.632391],[-77.248864,38.588575],[-77.325542,38.446175],[-77.281726,38.342113],[-77.013356,38.374975],[-76.964064,38.216144],[-76.613539,38.15042],[-76.514954,38.024451],[-76.235631,37.887527],[-76.3616,37.608203],[-76.246584,37.389126],[-76.383508,37.285064],[-76.399939,37.159094],[-76.273969,37.082417],[-76.410893,36.961924],[-76.619016,37.120755],[-76.668309,37.065986],[-76.48757,36.95097],[-75.994645,36.923586],[-75.868676,36.551154],[-79.510841,36.5402],[-80.294043,36.545677],[-80.978661,36.562108],[-81.679709,36.589492],[-83.673316,36.600446],[-83.136575,36.742847],[-83.070852,36.852385],[-82.879159,36.890724],[-82.868205,36.978355],[-82.720328,37.044078],[-82.720328,37.120755],[-82.353373,37.268633],[-81.969987,37.537003],[-81.986418,37.454849],[-81.849494,37.285064],[-81.679709,37.20291],[-81.55374,37.208387],[-81.362047,37.339833],[-81.225123,37.235771],[-80.967707,37.290541],[-80.513121,37.482234],[-80.474782,37.421987],[-80.29952,37.509618],[-80.294043,37.690357],[-80.184505,37.849189],[-79.998289,37.997066],[-79.921611,38.177805],[-79.724442,38.364021],[-79.647764,38.594052],[-79.477979,38.457129],[-79.313671,38.413313],[-79.209609,38.495467],[-78.996008,38.851469],[-78.870039,38.763838],[-78.404499,39.169131],[-78.349729,39.464886]]]]}},
+{"type":"Feature","id":"53","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-117.033359,49.000239],[-117.044313,47.762451],[-117.038836,46.426077],[-117.055267,46.343923],[-116.92382,46.168661],[-116.918344,45.993399],[-118.988627,45.998876],[-119.125551,45.933153],[-119.525367,45.911245],[-119.963522,45.823614],[-120.209985,45.725029],[-120.505739,45.697644],[-120.637186,45.746937],[-121.18488,45.604536],[-121.217742,45.670259],[-121.535404,45.725029],[-121.809251,45.708598],[-122.247407,45.549767],[-122.762239,45.659305],[-122.811531,45.960537],[-122.904639,46.08103],[-123.11824,46.185092],[-123.211348,46.174138],[-123.370179,46.146753],[-123.545441,46.261769],[-123.72618,46.300108],[-123.874058,46.239861],[-124.065751,46.327492],[-124.027412,46.464416],[-123.895966,46.535616],[-124.098612,46.74374],[-124.235536,47.285957],[-124.31769,47.357157],[-124.427229,47.740543],[-124.624399,47.88842],[-124.706553,48.184175],[-124.597014,48.381345],[-124.394367,48.288237],[-123.983597,48.162267],[-123.704273,48.167744],[-123.424949,48.118452],[-123.162056,48.167744],[-123.036086,48.080113],[-122.800578,48.08559],[-122.636269,47.866512],[-122.515777,47.882943],[-122.493869,47.587189],[-122.422669,47.318818],[-122.324084,47.346203],[-122.422669,47.576235],[-122.395284,47.800789],[-122.230976,48.030821],[-122.362422,48.123929],[-122.373376,48.288237],[-122.471961,48.468976],[-122.422669,48.600422],[-122.488392,48.753777],[-122.647223,48.775685],[-122.795101,48.8907],[-122.756762,49.000239],[-117.033359,49.000239]]],[[[-122.718423,48.310145],[-122.586977,48.35396],[-122.608885,48.151313],[-122.767716,48.227991],[-122.718423,48.310145]]],[[[-123.025132,48.583992],[-122.915593,48.715438],[-122.767716,48.556607],[-122.811531,48.419683],[-123.041563,48.458022],[-123.025132,48.583992]]]]}},
+{"type":"Feature","id":"54","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-80.518598,40.636951],[-80.518598,39.722302],[-79.477979,39.722302],[-79.488933,39.20747],[-79.291763,39.300578],[-79.094593,39.470363],[-78.963147,39.437501],[-78.765977,39.585379],[-78.470222,39.514178],[-78.431884,39.623717],[-78.267575,39.61824],[-78.174467,39.694917],[-78.004682,39.601809],[-77.834897,39.601809],[-77.719881,39.322485],[-77.82942,39.130793],[-78.349729,39.464886],[-78.404499,39.169131],[-78.870039,38.763838],[-78.996008,38.851469],[-79.209609,38.495467],[-79.313671,38.413313],[-79.477979,38.457129],[-79.647764,38.594052],[-79.724442,38.364021],[-79.921611,38.177805],[-79.998289,37.997066],[-80.184505,37.849189],[-80.294043,37.690357],[-80.29952,37.509618],[-80.474782,37.421987],[-80.513121,37.482234],[-80.967707,37.290541],[-81.225123,37.235771],[-81.362047,37.339833],[-81.55374,37.208387],[-81.679709,37.20291],[-81.849494,37.285064],[-81.986418,37.454849],[-81.969987,37.537003],[-82.101434,37.553434],[-82.293127,37.668449],[-82.342419,37.783465],[-82.50125,37.931343],[-82.621743,38.123036],[-82.594358,38.424267],[-82.331465,38.446175],[-82.293127,38.577622],[-82.172634,38.632391],[-82.221926,38.785745],[-82.03571,39.026731],[-81.887833,38.873376],[-81.783771,38.966484],[-81.811156,39.0815],[-81.685186,39.273193],[-81.57017,39.267716],[-81.455155,39.410117],[-81.345616,39.344393],[-81.219646,39.388209],[-80.830783,39.711348],[-80.737675,40.078303],[-80.600752,40.319289],[-80.595275,40.472643],[-80.666475,40.582182],[-80.518598,40.636951]]]}},
+{"type":"Feature","id":"55","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.415429,46.568478],[-90.229213,46.508231],[-90.119674,46.338446],[-89.09001,46.135799],[-88.662808,45.987922],[-88.531362,46.020784],[-88.10416,45.922199],[-87.989145,45.796229],[-87.781021,45.675736],[-87.791975,45.500474],[-87.885083,45.363551],[-87.649574,45.341643],[-87.742682,45.199243],[-87.589328,45.095181],[-87.627666,44.974688],[-87.819359,44.95278],[-87.983668,44.722749],[-88.043914,44.563917],[-87.928898,44.536533],[-87.775544,44.640595],[-87.611236,44.837764],[-87.403112,44.914442],[-87.238804,45.166381],[-87.03068,45.22115],[-87.047111,45.089704],[-87.189511,44.969211],[-87.468835,44.552964],[-87.545512,44.322932],[-87.540035,44.158624],[-87.644097,44.103854],[-87.737205,43.8793],[-87.704344,43.687607],[-87.791975,43.561637],[-87.912467,43.249452],[-87.885083,43.002989],[-87.76459,42.783912],[-87.802929,42.493634],[-88.788778,42.493634],[-90.639984,42.510065],[-90.711184,42.636034],[-91.067185,42.75105],[-91.143862,42.909881],[-91.176724,43.134436],[-91.056231,43.254929],[-91.204109,43.353514],[-91.215062,43.501391],[-91.269832,43.616407],[-91.242447,43.775238],[-91.43414,43.994316],[-91.592971,44.032654],[-91.877772,44.202439],[-91.927065,44.333886],[-92.233773,44.443425],[-92.337835,44.552964],[-92.545959,44.569394],[-92.808852,44.750133],[-92.737652,45.117088],[-92.75956,45.286874],[-92.644544,45.440228],[-92.770513,45.566198],[-92.885529,45.577151],[-92.869098,45.719552],[-92.639067,45.933153],[-92.354266,46.015307],[-92.29402,46.075553],[-92.29402,46.667063],[-92.091373,46.749217],[-92.014696,46.705401],[-91.790141,46.694447],[-91.09457,46.864232],[-90.837154,46.95734],[-90.749522,46.88614],[-90.886446,46.754694],[-90.55783,46.584908],[-90.415429,46.568478]]]}},
+{"type":"Feature","id":"56","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.080842,45.002073],[-105.91517,45.002073],[-104.058488,44.996596],[-104.053011,43.002989],[-104.053011,41.003906],[-105.728954,40.998429],[-107.919731,41.003906],[-109.04798,40.998429],[-111.047063,40.998429],[-111.047063,42.000709],[-111.047063,44.476286],[-111.05254,45.002073],[-109.080842,45.002073]]]}},
+{"type":"Feature","id":"72","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-66.448338,17.984326],[-66.771478,18.006234],[-66.924832,17.929556],[-66.985078,17.973372],[-67.209633,17.956941],[-67.154863,18.19245],[-67.269879,18.362235],[-67.094617,18.515589],[-66.957694,18.488204],[-66.409999,18.488204],[-65.840398,18.433435],[-65.632274,18.367712],[-65.626797,18.203403],[-65.730859,18.186973],[-65.834921,18.017187],[-66.234737,17.929556],[-66.448338,17.984326]]]}}
+]}
Index: /Dev/trunk/d3/examples/data/world-countries.json
===================================================================
--- /Dev/trunk/d3/examples/data/world-countries.json	(revision 76)
+++ /Dev/trunk/d3/examples/data/world-countries.json	(revision 76)
@@ -0,0 +1,246 @@
+{"type":"FeatureCollection","features":[
+{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-163.71289063,-78.59559631],[-163.1056366,-78.22330475],[-161.24511719,-78.38008118],[-160.24621582,-78.69356537],[-159.48219299,-79.0463028],[-159.20806885,-79.49697876],[-161.12753296,-79.6341095],[-162.43980408,-79.2813797],[-163.02728271,-78.92876434],[-163.06645203,-78.86988068],[-163.71289063,-78.59559631],[-163.71289063,-78.59559631]],[[-127.28314209,-73.46179199],[-126.55847168,-73.24619293],[-125.55957031,-73.48126984],[-124.03182983,-73.87317657],[-124.61942291,-73.83399963],[-125.91217041,-73.7360611],[-127.28314209,-73.46179199],[-127.28314209,-73.46179199]],[[-122.62168121,-73.65766907],[-122.40625,-73.32454681],[-121.2114563,-73.50097656],[-119.9187851,-73.65769196],[-118.72410583,-73.48126984],[-119.29199982,-73.83399963],[-120.23213196,-74.08878326],[-121.62276459,-74.01042175],[-122.62168121,-73.65766907],[-122.62168121,-73.65766907]],[[-102.33065796,-71.89414978],[-101.70388031,-71.71773529],[-100.4309082,-71.85498047],[-98.98146057,-71.93334198],[-97.88466644,-72.07045746],[-96.78787231,-71.95292664],[-96.20027161,-72.52114868],[-96.98365021,-72.44277954],[-98.19802856,-72.48195648],[-99.43199158,-72.44277954],[-100.78344727,-72.5015564],[-101.80187988,-72.30565643],[-102.33065796,-71.89414978],[-102.33065796,-71.89414978]],[[-74.06821442,-71.34552002],[-73.38273621,-71.22786713],[-72.22717285,-71.2670517],[-71.93340302,-70.75760651],[-71.87463379,-70.38527679],[-71.89421844,-69.58197021],[-71.32620239,-69.11161041],[-70.40558624,-68.95488739],[-69.87688446,-69.32720947],[-69.64182281,-69.69941711],[-69.21091461,-70.15009308],[-68.87798309,-70.58129883],[-68.60372925,-71.03197479],[-68.48626709,-71.48265839],[-68.6625061,-71.87456512],[-68.93667603,-72.24688721],[-70.11182404,-72.38401794],[-71.22833252,-72.57991028],[-72.54047394,-72.56031799],[-72.05086517,-72.16841125],[-73.22595978,-72.30565643],[-74.342453,-72.44277954],[-75.10629272,-72.14881897],[-75.16500854,-71.73731995],[-74.06821442,-71.34552002],[-74.06821442,-71.34552002]],[[-66.89974976,-80.06528473],[-64.64746094,-80.10449219],[-62.49300385,-80.20244598],[-61.74874878,-79.79094696],[-61.21990967,-79.43821716],[-60.18182755,-79.84971619],[-60.47559357,-80.35915375],[-60.76942825,-80.80983734],[-62.86512375,-80.67272186],[-65.0978775,-80.73148346],[-66.35144043,-80.39834595],[-66.35144043,-80.35915375],[-66.89974976,-80.06528473],[-66.89974976,-80.06528473]],[[-49.19412613,-78.04699707],[-48.68492126,-78.04694366],[-47.19641113,-77.83146667],[-45.6882782,-78.04694366],[-44.45436096,-78.47808838],[-44.02349854,-79.08547974],[-43.90596008,-79.51657104],[-43.86681366,-80.02602386],[-45.41407776,-80.33956909],[-47.03967667,-80.59436035],[-48.91992569,-80.82943726],[-51.01564026,-81.02544403],[-53.38555908,-80.96656036],[-54.69781113,-80.63353729],[-54.52148819,-80.22203827],[-52.38668823,-79.94765472],[-51.52484512,-79.61452484],[-50.89810562,-79.18343353],[-50.44764328,-78.81111145],[-49.84051132,-78.45844269],[-49.19412613,-78.04699707],[-49.19412613,-78.04699707]],[[166.6000061,-77],[168.36000061,-77.25894165],[169.44999695,-77.3499527],[169.55000305,-77.5999527],[168.25,-77.79997253],[166.8999939,-77.89992523],[166.1499939,-77.5999527],[166.1499939,-77.25],[166.6000061,-77],[166.6000061,-77]],[[180,-90],[-180,-90],[-180,-84.71335602],[-179.94250488,-84.72142792],[-179.0585022,-84.13928986],[-177.25665283,-84.45284271],[-176.02278137,-84.08053589],[-174.29908752,-84.41366577],[-172.88896179,-84.06093597],[-169.95111084,-83.88463593],[-169,-84.11782074],[-168.53010559,-84.23735809],[-167.02207947,-84.57038116],[-164.18212891,-84.82517242],[-161.92959595,-85.13872528],[-158.07121277,-85.37378693],[-155.19226074,-85.09954834],[-150.94192505,-85.29544067],[-148.53285217,-85.6089859],[-145.88891602,-85.31502533],[-143.10760498,-85.04077148],[-142.89215088,-84.57038116],[-146.82887268,-84.53121185],[-150.06060791,-84.29613495],[-150.90274048,-83.90422058],[-153.58616638,-83.68862152],[-153.40968323,-83.2379303],[-153.03767395,-82.82643127],[-152.66542053,-82.45411682],[-152.8613739,-82.0426178],[-154.52618408,-81.76836395],[-155.29014587,-81.41564178],[-156.83735657,-81.1020813],[-154.40858459,-81.16085052],[-152.09765625,-81.00414276],[-150.64808655,-81.33727264],[-148.86592102,-81.04331207],[-147.22065735,-80.67098999],[-146.41769409,-80.33785248],[-146.77023315,-79.92634583],[-148.06278992,-79.65209961],[-149.53181458,-79.35813141],[-151.58834839,-79.29936218],[-153.39021301,-79.16223145],[-155.32931519,-79.06417084],[-155.97550964,-78.69184875],[-157.26831055,-78.37830353],[-158.05174255,-78.02568817],[-158.36509705,-76.88910675],[-157.8752594,-76.98714447],[-156.97441101,-77.30069733],[-155.32931519,-77.2026825],[-153.74275208,-77.06550598],[-152.92007446,-77.49664307],[-151.33369446,-77.39864349],[-150.00195313,-77.1831665],[-148.74833679,-76.90879059],[-147.61236572,-76.57564545],[-146.1043396,-76.47770691],[-146.14334106,-76.1053772],[-146.49586487,-75.73305511],[-146.20222473,-75.38033295],[-144.9094696,-75.20401764],[-144.32199097,-75.53716278],[-142.79426575,-75.34114075],[-141.63858032,-75.08648682],[-140.20895386,-75.06678009],[-138.85751343,-74.96883392],[-137.50601196,-74.73374939],[-136.42875671,-74.51815033],[-135.21437073,-74.30266571],[-134.43112183,-74.36144257],[-133.74555969,-74.43978882],[-132.25700378,-74.30266571],[-130.92527771,-74.47896576],[-129.55410767,-74.4593811],[-128.24183655,-74.32225037],[-126.89051819,-74.42020416],[-125.40200806,-74.51815033],[-124.01145935,-74.47896576],[-122.56212616,-74.49856567],[-121.07349396,-74.51815033],[-119.70246887,-74.47896576],[-118.68414307,-74.18500519],[-117.46977234,-74.02828979],[-116.21619415,-74.24389648],[-115.02153015,-74.06746674],[-113.94432831,-73.71473694],[-113.29795837,-74.02828979],[-112.94541931,-74.38102722],[-112.29905701,-74.71416473],[-111.2610321,-74.42020416],[-110.0662384,-74.79252625],[-108.71479034,-74.91005707],[-107.55930328,-75.18443298],[-106.14907837,-75.12566376],[-104.87599182,-74.94924164],[-103.36789703,-74.98841858],[-102.0164566,-75.12566376],[-100.64548492,-75.30196381],[-100.11658478,-74.87088013],[-100.76295471,-74.53773499],[-101.25267029,-74.18500519],[-102.54523468,-74.10665131],[-103.11325073,-73.73432922],[-103.32872009,-73.36201477],[-103.68125916,-72.61745453],[-102.91748047,-72.75461578],[-101.60520935,-72.81337738],[-100.31246948,-72.75461578],[-99.13739014,-72.91132355],[-98.11889648,-73.20529175],[-97.68795013,-73.55802917],[-96.33649445,-73.61679077],[-95.04393768,-73.47966003],[-93.67290497,-73.28365326],[-92.4389267,-73.16611481],[-91.42050171,-73.40119171],[-90.08864594,-73.32282257],[-89.22692108,-72.55870056],[-88.42383575,-73.00939941],[-87.26828003,-73.18569946],[-86.01472473,-73.0877533],[-85.19216919,-73.47966003],[-83.8799057,-73.51883698],[-82.66564941,-73.63637543],[-81.47085571,-73.85198975],[-80.68741608,-73.47966003],[-80.29576111,-73.12693787],[-79.29685211,-73.51883698],[-77.92581177,-73.42089844],[-76.90732574,-73.63637543],[-76.22184753,-73.9695282],[-74.88999176,-73.8715744],[-73.85195923,-73.65597534],[-72.83346558,-73.40119171],[-71.61920166,-73.26406097],[-70.20893097,-73.14653015],[-68.93590546,-73.00939941],[-67.95658875,-72.79379272],[-67.36898041,-72.48023987],[-67.1340332,-72.04914856],[-67.25151062,-71.63764954],[-67.56493378,-71.24573517],[-67.91747284,-70.85394287],[-68.23082733,-70.46192169],[-68.48536682,-70.10930634],[-68.54418182,-69.71740723],[-68.44618225,-69.32549286],[-67.9761734,-68.95317078],[-67.5844574,-68.54166412],[-67.42774963,-68.14982605],[-67.62363434,-67.71874237],[-67.74111176,-67.326828],[-67.25151062,-66.87613678],[-66.70307922,-66.58217621],[-66.05671692,-66.20986176],[-65.37122345,-65.89631653],[-64.56820679,-65.60246277],[-64.17649078,-65.17137146],[-63.62812805,-64.8970108],[-63.00134659,-64.64222717],[-62.0416832,-64.58345032],[-61.41490555,-64.27001953],[-60.70982742,-64.07401276],[-59.88721466,-63.95646286],[-59.16255569,-63.70174408],[-58.59453583,-63.38818741],[-57.81110382,-63.2706604],[-57.22356415,-63.525383],[-57.59568787,-63.85852051],[-58.61412048,-64.15235901],[-59.04501724,-64.36797333],[-59.78933334,-64.21124268],[-60.61193848,-64.30919647],[-61.2973671,-64.54427338],[-62.02209091,-64.79905701],[-62.51174927,-65.09290314],[-62.64880753,-65.48480988],[-62.59010696,-65.85712433],[-62.12003326,-66.1902771],[-62.80552292,-66.42546082],[-63.74565125,-66.50382996],[-64.29402161,-66.83695984],[-64.88162231,-67.15040588],[-65.50840759,-67.58148956],[-65.66500092,-67.95380402],[-65.31246185,-68.365242],[-64.78368378,-68.6788559],[-63.96107101,-68.91399384],[-63.19724274,-69.22753906],[-62.78593063,-69.61933136],[-62.57052231,-69.99164581],[-62.27668762,-70.38356018],[-61.80667114,-70.71670532],[-61.51290894,-71.0890274],[-61.37578583,-72.00997162],[-61.08195114,-72.38230133],[-61.00365448,-72.77420044],[-60.69023132,-73.16611481],[-60.82735443,-73.69515228],[-61.37578583,-74.10665131],[-61.9633255,-74.43978882],[-63.29518127,-74.57691956],[-63.74565125,-74.92964172],[-64.3527298,-75.26279449],[-65.86094666,-75.63511658],[-67.19280243,-75.79183197],[-68.44618225,-76.00743103],[-69.79763031,-76.22292328],[-70.60070801,-76.6344223],[-72.2066803,-76.67359924],[-73.96943665,-76.6344223],[-75.55594635,-76.71289063],[-77.24034119,-76.71289063],[-76.9269104,-77.10468292],[-75.39929199,-77.28104401],[-74.28279114,-77.55541992],[-73.65601349,-77.90803528],[-74.77251434,-78.22158813],[-76.49608612,-78.12363434],[-77.92581177,-78.37830353],[-77.98458862,-78.78980255],[-78.02370453,-79.18171692],[-76.84862518,-79.5148468],[-76.63314819,-79.88717651],[-75.35999298,-80.25949097],[-73.24476624,-80.41620636],[-71.44290161,-80.69058228],[-70.01309204,-81.00414276],[-68.19165039,-81.31768799],[-65.70417786,-81.47440338],[-63.25599289,-81.7487793],[-61.55202484,-82.0426178],[-59.69138336,-82.37575531],[-58.71212387,-82.84603119],[-58.22246552,-83.21834564],[-57.00811386,-82.86562347],[-55.36285782,-82.57177734],[-53.6197319,-82.25823212],[-51.54362106,-82.00344086],[-49.76129532,-81.72918701],[-47.27391052,-81.70948029],[-44.82566833,-81.84671783],[-42.80834961,-82.08179474],[-42.16201401,-81.65070343],[-40.77136612,-81.35686493],[-38.24479294,-81.33727264],[-36.26660538,-81.12166595],[-34.38635635,-80.90618896],[-32.3102951,-80.76893616],[-30.09708405,-80.59263611],[-28.54979897,-80.33785248],[-29.25488663,-79.98511505],[-29.68578148,-79.63239288],[-29.68578148,-79.26018524],[-31.62479401,-79.29936218],[-33.68128967,-79.45608521],[-35.6398735,-79.45608521],[-35.91407776,-79.08376312],[-35.77700424,-78.3392334],[-35.32653427,-78.12363434],[-33.89675903,-77.88843536],[-32.21237183,-77.65343475],[-30.99804306,-77.35946655],[-29.78371429,-77.06550598],[-28.88276291,-76.67359924],[-27.51173782,-76.49729156],[-26.16031837,-76.36016846],[-25.47481537,-76.28168488],[-23.92752266,-76.24250793],[-22.4585762,-76.1053772],[-21.22468185,-75.90937042],[-20.01036072,-75.67429352],[-18.91353798,-75.43909454],[-17.52293777,-75.12566376],[-16.64158249,-74.79252625],[-15.70147419,-74.49856567],[-15.40767384,-74.10665131],[-16.46531296,-73.8715744],[-16.11275482,-73.46007538],[-15.44684219,-73.14653015],[-14.40879631,-72.95051575],[-13.31198788,-72.71543884],[-12.29351044,-72.40188599],[-11.51007652,-72.00997162],[-11.02043819,-71.539711],[-10.29576778,-71.26533508],[-9.10102654,-71.32410431],[-8.61136246,-71.65723419],[-7.41662979,-71.69642639],[-7.3774662,-71.32410431],[-6.86822796,-70.93231201],[-5.79099321,-71.03025818],[-5.53638697,-71.40257263],[-4.34165907,-71.46134186],[-3.04898667,-71.28491974],[-1.7954886,-71.16738129],[-0.65948927,-71.22615051],[-0.22861987,-71.63764954],[0.86821002,-71.30451202],[1.88668001,-71.12821198],[3.02265,-70.99108124],[4.13905001,-70.85394287],[5.15751982,-70.61875916],[6.27392006,-70.46192169],[7.13569021,-70.24642944],[7.74285984,-69.89370728],[8.48711967,-70.14848328],[9.52515984,-70.01124573],[10.24985981,-70.48151398],[10.81783009,-70.83423615],[11.95382977,-70.63834381],[12.40429974,-70.24642944],[13.42276001,-69.97206116],[14.73501015,-70.03083038],[15.12674046,-70.40314484],[15.94933987,-70.03083038],[17.02656937,-69.91329956],[18.20170975,-69.87412262],[19.2593708,-69.89370728],[20.37574959,-70.01124573],[21.45298004,-70.07001495],[21.92304993,-70.40314484],[22.56937981,-70.69712067],[23.66617966,-70.52081299],[24.84133911,-70.48151398],[25.97731972,-70.48151398],[27.09371948,-70.46192169],[28.09259033,-70.32479858],[29.15023041,-70.20726013],[30.03160095,-69.93288422],[30.97172928,-69.75658417],[31.99019051,-69.65863037],[32.75403976,-69.38425446],[33.30245972,-68.83562469],[33.87044144,-68.50255585],[34.90850067,-68.65921021],[35.30020142,-69.01193237],[36.16199875,-69.24713135],[37.20003891,-69.1686554],[37.90513992,-69.52138519],[38.6493988,-69.77616882],[39.66786957,-69.54096985],[40.02040863,-69.10988617],[40.92137146,-68.93357849],[41.95941162,-68.60044098],[42.93870926,-68.46331787],[44.11386108,-68.26735687],[44.89730835,-68.05187988],[45.71990967,-67.81668091],[46.5033493,-67.60108185],[47.44345856,-67.71874237],[48.34442139,-67.36600494],[48.99074936,-67.09162903],[49.9308815,-67.11122131],[50.75349045,-66.87613678],[50.94932938,-66.52341461],[51.79153061,-66.2490387],[52.61412811,-66.05314636],[53.61302948,-65.89631653],[54.53356934,-65.81794739],[55.41492844,-65.87671661],[56.3550415,-65.97478485],[57.15806961,-66.2490387],[57.25600052,-66.68013],[58.13734818,-67.01326752],[58.74451065,-67.28765106],[59.93930054,-67.40518188],[60.60519028,-67.67955017],[61.4277916,-67.95380402],[62.38748932,-68.01258087],[63.19049835,-67.81668091],[64.05233765,-67.40518188],[64.99243927,-67.62072754],[65.97174072,-67.73832703],[66.9118576,-67.85586548],[67.89115143,-67.93421936],[68.8900528,-67.93421936],[69.71263885,-68.97275543],[69.67344666,-69.22753906],[69.55593872,-69.67822266],[68.59622955,-69.93288422],[67.81276703,-70.3052063],[67.94988251,-70.69712067],[69.06629181,-70.67753601],[68.92917633,-71.06943512],[68.41999817,-71.4417572],[67.94988251,-71.85325623],[68.71375275,-72.16680908],[69.86929321,-72.26474762],[71.02488708,-72.0883255],[71.57327271,-71.69642639],[71.90627289,-71.32410431],[72.45465088,-71.01066589],[73.08141327,-70.71670532],[73.33602905,-70.36397552],[73.86486816,-69.87412262],[74.49156952,-69.77616882],[75.62757111,-69.73699188],[76.62647247,-69.61933136],[77.64489746,-69.4626236],[78.134552,-69.07070923],[78.42835999,-68.69838715],[79.11385345,-68.32613373],[80.09314728,-68.07146454],[80.93534088,-67.87545013],[81.48377991,-67.54230499],[82.05175018,-67.36600494],[82.77642059,-67.20928955],[83.77532196,-67.30724335],[84.67623138,-67.20928955],[85.65553284,-67.09162903],[86.75234985,-67.15040588],[87.47702789,-66.87613678],[87.98626709,-66.20989227],[88.3584137,-66.48423767],[88.82846069,-66.95450592],[89.67064667,-67.15040588],[90.63036346,-67.22887421],[91.59011841,-67.11122131],[92.60855103,-67.18969727],[93.54866028,-67.20928955],[94.17542267,-67.11122131],[95.01760864,-67.16999054],[95.78147888,-67.3855896],[96.68240356,-67.24846649],[97.75961304,-67.24846649],[98.68019104,-67.11122131],[99.71820831,-67.24846649],[100.3841629,-66.91532898],[100.89334869,-66.58217621],[101.57888794,-66.30781555],[102.83241272,-65.5632782],[103.47870636,-65.70041656],[104.2425766,-65.97478485],[104.90846252,-66.32740021],[106.18157959,-66.93482971],[107.16088104,-66.95450592],[108.08139038,-66.95450592],[109.15860748,-66.83695984],[110.23583221,-66.69972992],[111.05847931,-66.42546082],[111.74397278,-66.13150024],[112.86038208,-66.0923233],[113.6046524,-65.87671661],[114.38804626,-66.07273865],[114.89729309,-66.38628387],[115.60237885,-66.69972992],[116.69918823,-66.66053772],[117.38468933,-66.91532898],[118.57946014,-67.16999054],[119.83293152,-67.26805115],[120.87101746,-67.18969727],[121.65441132,-66.87613678],[122.32037354,-66.56259155],[123.22129059,-66.48423767],[124.12226105,-66.62136078],[125.16027832,-66.71930695],[126.10040283,-66.56259155],[127.0014267,-66.56259155],[127.88275146,-66.66053772],[128.80326843,-66.75849152],[129.70423889,-66.58217621],[130.78146362,-66.42546082],[131.79995728,-66.38628387],[132.93588257,-66.38628387],[133.85647583,-66.28821564],[134.75738525,-66.20986176],[135.03161621,-65.72000122],[135.07078552,-65.3085022],[135.69749451,-65.58287811],[135.87379456,-66.03356171],[136.20675659,-66.4450531],[136.61807251,-66.77819824],[137.46026611,-66.95450592],[138.59625244,-66.89573669],[139.90844727,-66.87613678],[140.80943298,-66.81737518],[142.12167358,-66.81737518],[143.06184387,-66.79779053],[144.37408447,-66.83695984],[145.49043274,-66.91532898],[146.1955719,-67.22887421],[145.99967957,-67.60108185],[146.64604187,-67.89503479],[147.72325134,-68.13024139],[148.83966064,-68.38489532],[150.13230896,-68.56125641],[151.48374939,-68.71804047],[152.50224304,-68.87481689],[153.63818359,-68.89446259],[154.2845459,-68.56125641],[155.16592407,-68.83562469],[155.92977905,-69.14913177],[156.81111145,-69.38425446],[158.02549744,-69.48220825],[159.18103027,-69.5997467],[159.67068481,-69.99164581],[160.80662537,-70.22684479],[161.57049561,-70.57958221],[162.68690491,-70.73629761],[163.84243774,-70.71670532],[164.91966248,-70.77547455],[166.11445618,-70.75588226],[167.30912781,-70.83423615],[168.42559814,-70.97149658],[169.46362305,-71.20655823],[170.50164795,-71.40257263],[171.20678711,-71.69642639],[171.08921814,-72.0883255],[170.5604248,-72.44106293],[170.10992432,-72.89173889],[169.75737,-73.24447632],[169.287323,-73.65597534],[167.9750824,-73.81269073],[167.38749695,-74.16542053],[166.0947876,-74.38102722],[165.64439392,-74.77294159],[164.95884705,-75.14524841],[164.23417664,-75.45868683],[163.82286072,-75.87018585],[163.5682373,-76.24250793],[163.4703064,-76.6931839],[163.48991394,-77.06550598],[164.05787659,-77.45735168],[164.27337646,-77.82967377],[164.74342346,-78.18247223],[166.60411072,-78.31952667],[166.99577332,-78.75073242],[165.19387817,-78.90744781],[163.66619873,-79.12294006],[161.76638794,-79.16223145],[160.9241333,-79.73046112],[160.74789429,-80.20072937],[160.31697083,-80.57303619],[159.78819275,-80.94536591],[161.11999512,-81.27850342],[161.62928772,-81.69000244],[162.49101257,-82.06221008],[163.70533752,-82.39533997],[165.09596252,-82.70890808],[166.60411072,-83.02245331],[168.89564514,-83.33588409],[169.40484619,-83.8258667],[172.28393555,-84.04134369],[173.22412109,-84.41366577],[175.98570251,-84.15888214],[177.13999939,-84.31687164],[178.27726746,-84.472435],[180,-84.71335602],[180,-90],[180,-90]]]},"properties":{"name":"Antarctica"},"id":"AQ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[74.92,37.24],[74.57,37.03],[72.56,36.82],[71.24,36.13],[71.65,35.42],[71.08,34.06],[69.91,34.04],[70.33,33.33],[69.51,33.03],[69.33,31.94],[66.72,31.21],[66.26,29.85],[62.48,29.41],[60.87,29.86],[61.85,31.02],[60.84,31.5],[60.58,33.07],[60.94,33.52],[60.51,34.14],[61.28,35.61],[62.72,35.25],[63.12,35.86],[64.5,36.28],[64.8,37.12],[66.54,37.37],[67.78,37.19],[69.32,37.12],[70.97,38.47],[71.59,37.9],[71.68,36.68],[73.31,37.46],[74.92,37.24]]]]},"properties":{"name":"Afghanistan"},"id":"AF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[19.44,41.02],[19.37,41.85],[19.65,42.62],[20.07,42.56],[20.59,41.88],[20.82,40.91],[20.98,40.86],[20.01,39.69],[19.29,40.42],[19.44,41.02]]]]},"properties":{"name":"Albania"},"id":"AL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[2.96,36.8],[8.62,36.94],[8.18,36.52],[8.25,34.64],[7.49,33.89],[9.06,32.1],[9.54,30.23],[9.95,27.82],[9.87,26.51],[9.4,26.15],[10.25,24.61],[11.56,24.3],[11.99,23.52],[5.81,19.45],[4.25,19.15],[3.33,18.98],[3.23,19.82],[1.8,20.31],[-4.81,25],[-6.66,26.13],[-8.67,27.29],[-8.67,27.67],[-8.67,28.71],[-3.63,30.97],[-3.82,31.7],[-1.18,32.11],[-1.75,34.75],[-2.21,35.09],[0.95,36.45],[2.96,36.8]]]]},"properties":{"name":"Algeria"},"id":"DZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-170.64,-14.29],[-170.83,-14.33],[-170.56,-14.27],[-170.64,-14.29]]],[[[-169.44,-14.26],[-169.51,-14.28],[-169.54,-14.23],[-169.44,-14.26]]]]},"properties":{"name":"Samoa"},"id":"WS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[1.78,42.57],[1.72,42.51],[1.45,42.6],[1.78,42.57]]]]},"properties":{"name":"Andorra"},"id":"AD"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[14,-5.85],[16.58,-5.9],[17.62,-8.1],[19.37,-8],[19.54,-7],[21.78,-7.28],[22.25,-11.21],[23.99,-10.87],[24.02,-13.01],[22,-13],[22,-16.17],[23.48,-17.63],[23.28,-17.66],[20.85,-18.02],[18.45,-17.39],[13.99,-17.42],[13.16,-16.95],[11.75,-17.25],[12.51,-13.43],[13.79,-11.79],[12.98,-9.09],[13.39,-8.39],[12.24,-6.1],[13.18,-5.86],[14,-5.85]]],[[[13.09,-4.66],[12.21,-5.77],[12.03,-5.01],[12.78,-4.39],[13.09,-4.63],[13.09,-4.66]]]]},"properties":{"name":"Angola"},"id":"AO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-61.69,17.02],[-61.89,17.11],[-61.79,17.16],[-61.69,17.02]]],[[[-61.73,17.61],[-61.85,17.58],[-61.87,17.7],[-61.73,17.61]]]]},"properties":{"name":"Antigua and Barbuda"},"id":"AG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[45.08,39.77],[45.82,39.55],[46.18,38.84],[45,39.42],[44.81,39.63],[44.78,39.71],[45.08,39.77]]],[[[45.51,40.61],[45.52,40.67],[45.57,40.63],[45.51,40.61]]],[[[46.57,41.87],[47.77,41.2],[48.58,41.84],[50.37,40.26],[49.49,40.15],[48.89,38.44],[48.02,38.84],[48.36,39.39],[47.98,39.72],[46.54,38.88],[46.54,39.56],[45.6,39.98],[46,40.23],[45.15,41.2],[45.02,41.3],[46.52,41.05],[46.45,41.9],[46.57,41.87]]]]},"properties":{"name":"Azerbaijan"},"id":"AZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-68.26,-52.99],[-68.54,-53.23],[-67.36,-54.03],[-65.14,-54.65],[-66.45,-55.05],[-68.64,-54.79],[-68.62,-52.64],[-68.26,-52.99]]],[[[-65.75,-22.11],[-65.19,-22.09],[-64.59,-22.21],[-64.32,-22.87],[-63.94,-22],[-62.64,-22.24],[-61.01,-23.81],[-57.76,-25.18],[-57.58,-25.55],[-58.6,-27.32],[-55.74,-27.44],[-54.7,-26.44],[-54.6,-25.57],[-53.86,-25.68],[-53.81,-27.13],[-55.77,-28.23],[-57.61,-30.18],[-57.81,-30.75],[-58.2,-32.45],[-58.15,-33.05],[-58.43,-33.1],[-58.53,-33.52],[-58.47,-34.54],[-57.19,-35.32],[-57.38,-35.96],[-56.66,-36.9],[-58.3,-38.49],[-62.38,-38.8],[-62.02,-39.38],[-62.39,-40.9],[-65.13,-40.85],[-65.01,-42.09],[-64.45,-42.45],[-63.75,-42.09],[-63.58,-42.62],[-64.96,-42.67],[-64.3,-42.99],[-65.32,-43.65],[-65.6,-45.02],[-66.95,-45.26],[-67.58,-46],[-66.82,-46.99],[-65.78,-47.19],[-66.24,-47.86],[-65.79,-47.96],[-67.58,-49.03],[-67.9,-49.99],[-69.01,-50.01],[-68.37,-50.15],[-69.41,-51.08],[-68.97,-51.57],[-69.61,-51.63],[-68.99,-51.62],[-68.44,-52.38],[-71.91,-52],[-72.4,-51.51],[-72.29,-50.65],[-73.17,-50.75],[-73.58,-49.54],[-72.56,-48.8],[-72.36,-47.47],[-71.67,-46.68],[-71.78,-45.65],[-71.3,-45.29],[-72.08,-44.77],[-71.11,-44.54],[-71.86,-44.37],[-72.13,-42.29],[-71.73,-42.1],[-71.7,-39.58],[-70.82,-38.57],[-71.19,-36.84],[-70.42,-36.14],[-70.57,-35.25],[-69.81,-34.24],[-70.53,-31.19],[-69.83,-30.19],[-69.66,-28.4],[-68.29,-26.92],[-68.57,-24.77],[-67.34,-24.02],[-67.18,-22.82],[-66.22,-21.78],[-65.75,-22.11]]]]},"properties":{"name":"Argentina"},"id":"AR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[145.11,-40.82],[146.59,-41.19],[148.22,-40.85],[148,-43.23],[147.32,-42.85],[146.92,-43.62],[146.04,-43.5],[144.68,-41.22],[144.7,-40.76],[145.11,-40.82]]],[[[142.51,-10.87],[143.78,-14.41],[144.51,-14.17],[145.32,-14.95],[146.28,-18.88],[148.78,-20.23],[149.66,-22.5],[150.64,-22.34],[150.87,-23.51],[153.18,-25.95],[153.03,-27.18],[153.63,-28.67],[153.05,-31.04],[150.16,-35.94],[149.97,-37.52],[147.76,-37.98],[146.22,-38.71],[146.39,-39.15],[145.45,-38.23],[144.9,-38.5],[144.93,-37.87],[143.54,-38.86],[141.57,-38.42],[139.81,-37.3],[139.82,-36.55],[139.08,-35.68],[139.67,-36.23],[139.1,-35.62],[139.36,-35.37],[138.09,-35.62],[138.51,-35.03],[138.1,-34.14],[137.74,-35.14],[136.83,-35.25],[137.44,-34.93],[137.95,-33.56],[137.77,-32.52],[135.95,-35.01],[135.11,-34.6],[135.51,-34.62],[134.18,-32.49],[131.15,-31.47],[125.97,-32.27],[124.28,-32.99],[123.54,-33.91],[120,-33.93],[117.93,-35.13],[115.01,-34.26],[114.99,-33.52],[115.71,-33.27],[115.74,-31.87],[114.89,-29.2],[113.22,-26.24],[113.86,-26.51],[113.47,-25.54],[114.22,-26.31],[113.39,-24.43],[114.02,-21.85],[114.15,-22.53],[116.71,-20.65],[121.03,-19.59],[122.35,-18.11],[122.17,-17.24],[122.92,-16.42],[123.58,-17.6],[123.6,-16.99],[123.92,-17.2],[123.57,-16.17],[123.73,-16.14],[123.89,-16.38],[123.96,-16.25],[124.24,-16.41],[124.9,-16.42],[124.4,-16.33],[124.43,-16.1],[124.59,-16.11],[124.73,-15.81],[124.4,-15.87],[124.45,-15.49],[125.18,-15.52],[124.83,-15.16],[125.43,-15.14],[125.14,-14.74],[125.61,-14.22],[125.64,-14.64],[126.04,-14.52],[126.02,-13.92],[126.29,-14.23],[126.86,-13.75],[127.42,-13.95],[128.17,-14.7],[128.01,-15.5],[128.53,-14.76],[129.73,-15.2],[129.94,-14.77],[129.37,-14.33],[130.58,-12.4],[132.75,-12.13],[131.98,-11.13],[135.23,-12.29],[135.91,-11.76],[135.67,-12.2],[136.04,-12.47],[136.56,-11.93],[136.98,-12.36],[136.46,-13.25],[135.92,-13.28],[135.46,-14.94],[139.26,-17.34],[140.49,-17.64],[141.43,-16.08],[141.58,-12.99],[141.94,-12.88],[141.59,-12.55],[142.51,-10.87]]]]},"properties":{"name":"Australia"},"id":"AU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[13.83,48.77],[14.7,48.58],[15.03,49.02],[16.95,48.62],[17.17,48.01],[16.45,47.7],[16.51,47.01],[16.11,46.87],[13.72,46.53],[12.13,47],[10.47,46.87],[9.6,47.06],[9.53,47.27],[9.57,47.54],[13.02,47.47],[12.76,48.12],[13.83,48.77]]]]},"properties":{"name":"Austria"},"id":"AT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-73.04,21.14],[-73.69,20.94],[-73.02,21.33],[-73.04,21.14]]],[[[-77.74,24.03],[-77.68,24.3],[-77.57,23.74],[-77.74,24.03]]],[[[-78.19,25.2],[-77.72,24.51],[-78.02,24.27],[-78.44,24.61],[-78.19,25.2]]],[[[-77.92,26.75],[-78.71,26.49],[-78.98,26.7],[-77.92,26.75]]],[[[-77.74,26.91],[-77.04,26.51],[-77.2,25.88],[-77.15,26.55],[-77.74,26.91]]]]},"properties":{"name":"Bahamas, The"},"id":"BS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[50.53,26.23],[50.57,25.81],[50.46,25.97],[50.53,26.23]]]]},"properties":{"name":"Bahrain"},"id":"BH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[90.76,22.06],[90.6,22.78],[90.88,22.46],[90.76,22.06]]],[[[88.43,26.55],[89.74,26.16],[89.85,25.29],[92.41,25.03],[91.16,23.64],[91.61,22.94],[92.28,23.71],[92.6,21.98],[92.26,21.05],[92.32,20.74],[91.7,22.49],[90.83,22.69],[90.59,23.6],[90.27,21.85],[90.02,21.86],[90.07,22.16],[89.93,22],[90,22.48],[89.58,21.7],[89.62,22.32],[89.25,21.64],[89.06,22.12],[88.75,24.22],[88.04,24.68],[89.01,25.29],[88.11,25.84],[88.43,26.55]],[[90.24,22.19],[90.06,21.99],[90.22,22.11],[90.24,22.19]]]]},"properties":{"name":"Bangladesh"},"id":"BD"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[45.15,41.2],[46,40.23],[45.6,39.98],[46.54,39.56],[46.54,38.88],[46.18,38.84],[45.82,39.55],[45.08,39.77],[44.78,39.71],[43.66,40.11],[43.46,41.11],[45.02,41.3],[45.15,41.2]],[[45.57,40.63],[45.52,40.67],[45.51,40.61],[45.57,40.63]]]]},"properties":{"name":"Armenia"},"id":"AM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-59.53,13.05],[-59.64,13.33],[-59.43,13.16],[-59.53,13.05]]]]},"properties":{"name":"Barbados"},"id":"BB"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[4.3,51.26],[4.25,51.38],[5.04,51.49],[6.01,50.76],[6.13,50.13],[6.03,50.18],[5.81,49.55],[4.83,50.17],[4.15,49.98],[2.54,51.09],[3.37,51.37],[4.24,51.35],[4.3,51.26]]]]},"properties":{"name":"Belgium"},"id":"BE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-64.78,32.27],[-64.86,32.27],[-64.67,32.38],[-64.78,32.27]]]]},"properties":{"name":"Bermuda"},"id":"BM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[90.47,28.07],[91.66,27.76],[92.07,26.86],[89.64,26.72],[88.92,27.32],[89.59,28.14],[90.47,28.07]]]]},"properties":{"name":"Bhutan"},"id":"BT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-65.19,-22.09],[-65.75,-22.11],[-66.22,-21.78],[-67.18,-22.82],[-67.88,-22.83],[-68.76,-20.41],[-68.44,-19.43],[-69.48,-17.64],[-69.5,-17.51],[-68.82,-16.34],[-69.42,-15.62],[-68.67,-12.5],[-69.57,-10.95],[-68.58,-11.11],[-66.63,-9.91],[-65.38,-9.7],[-64.99,-12.01],[-60.47,-13.81],[-60.16,-16.26],[-58.33,-16.28],[-58.4,-17.25],[-57.52,-18.2],[-58.16,-20.17],[-59.1,-19.35],[-61.74,-19.65],[-62.64,-22.24],[-63.94,-22],[-64.32,-22.87],[-64.59,-22.21],[-65.19,-22.09]]]]},"properties":{"name":"Bolivia"},"id":"BO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[17.65,42.89],[17.58,42.94],[16.14,44.2],[15.79,45.17],[19.04,44.86],[19.62,44.05],[19.23,43.51],[18.46,42.57],[17.65,42.89]]]]},"properties":{"name":"Bosnia and Herzegovina"},"id":"BA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[26.96,-23.75],[25.51,-25.68],[23.01,-25.3],[21.67,-26.86],[20.64,-26.83],[20.81,-25.88],[20,-24.77],[20,-22.01],[20.99,-22],[20.99,-18.32],[23.3,-18],[23.62,-18.49],[25.26,-17.8],[26.17,-19.53],[27.71,-20.51],[28.02,-21.57],[29.37,-22.19],[26.96,-23.75]]]]},"properties":{"name":"Botswana"},"id":"BW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[3.36,-54.46],[3.37,-54.4],[3.48,-54.4],[3.36,-54.46]]]]},"properties":{"name":"Bouvet Island"},"id":"BV"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-51.9,-1.48],[-51.89,-1.18],[-51.66,-1.08],[-51.61,-0.73],[-51.2,-0.53],[-51.27,-1.01],[-51.9,-1.48]]],[[[-49.71,-0.23],[-48.37,-0.29],[-48.63,-1.06],[-49.17,-1.61],[-50.58,-1.8],[-50.66,-0.28],[-49.71,-0.23]]],[[[-60.1,5.22],[-60.15,4.52],[-59.57,3.9],[-59.99,2.69],[-59.64,1.73],[-58.81,1.19],[-56.47,1.94],[-55.9,1.89],[-55.97,2.53],[-54.6,2.33],[-52.91,2.2],[-51.68,4.03],[-51.54,4.39],[-51.09,3.91],[-50.68,2.16],[-49.93,1.71],[-49.9,1.17],[-51.26,-0.14],[-51.7,-0.75],[-51.71,-1.03],[-51.92,-1.17],[-51.94,-1.34],[-52.71,-1.6],[-52.21,-1.69],[-50.85,-0.92],[-50.66,-1.77],[-51.34,-1.65],[-51.45,-2.27],[-51.31,-1.76],[-50.85,-2.51],[-50.68,-1.81],[-49.29,-1.71],[-49.49,-2.56],[-48.7,-1.47],[-48.18,-1.47],[-48.5,-1.46],[-48.24,-0.87],[-47.43,-0.58],[-45.33,-1.31],[-45.35,-1.74],[-44.86,-1.43],[-44.36,-2.34],[-44.79,-3.3],[-44.06,-2.41],[-44.34,-2.83],[-43.35,-2.37],[-41.25,-3.02],[-40,-2.85],[-37.17,-4.92],[-35.42,-5.21],[-34.8,-7.63],[-35.29,-9.18],[-37.15,-10.75],[-38.04,-12.63],[-38.49,-13.02],[-38.9,-12.71],[-39.13,-17.68],[-40.97,-21.99],[-42.03,-22.92],[-43.08,-22.67],[-44.66,-23.05],[-44.58,-23.36],[-46.38,-23.87],[-48.21,-25.46],[-48.72,-25.42],[-48.36,-25.58],[-48.8,-26.07],[-48.49,-27.21],[-48.77,-28.52],[-52.07,-32.17],[-50.57,-30.46],[-51.28,-30.01],[-51.27,-30.8],[-53.37,-33.74],[-53.52,-33.15],[-53.09,-32.73],[-53.88,-31.97],[-55.58,-30.85],[-56.01,-31.08],[-56.81,-30.11],[-57.61,-30.18],[-55.77,-28.23],[-53.81,-27.13],[-53.86,-25.68],[-54.6,-25.57],[-54.33,-24.68],[-54.41,-23.92],[-55.41,-23.96],[-55.85,-22.29],[-57.99,-22.09],[-58.16,-20.17],[-57.52,-18.2],[-58.4,-17.25],[-58.33,-16.28],[-60.16,-16.26],[-60.47,-13.81],[-64.99,-12.01],[-65.38,-9.7],[-66.63,-9.91],[-68.58,-11.11],[-69.57,-10.95],[-70.63,-11.01],[-70.51,-9.43],[-72.14,-10],[-72.37,-9.49],[-73.21,-9.41],[-72.96,-8.98],[-74.01,-7.54],[-73.12,-6.45],[-72.85,-5.12],[-70.77,-4.15],[-69.96,-4.24],[-69.38,-1.34],[-70.04,0.59],[-69.12,0.65],[-69.84,1.07],[-69.85,1.71],[-67.91,1.75],[-67.42,2.14],[-66.87,1.22],[-65.52,0.65],[-63.39,2.15],[-64.05,2.48],[-64.8,4.28],[-62.88,3.56],[-62.75,4.03],[-60.99,4.52],[-60.73,5.2],[-60.1,5.22]]]]},"properties":{"name":"Brazil"},"id":"BR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-88.38,18.48],[-88.3,18.48],[-88.21,16.97],[-88.91,15.89],[-89.22,15.89],[-89.14,17.82],[-88.38,18.48]]]]},"properties":{"name":"Belize"},"id":"BZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[72.49,-7.38],[72.36,-7.27],[72.45,-7.23],[72.49,-7.38]]]]},"properties":{"name":"British Indian Ocean Territory"},"id":"IO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[161.55,-10.28],[162.39,-10.84],[161.28,-10.33],[161.55,-10.28]]],[[[159.94,-9.43],[160.83,-9.86],[159.83,-9.8],[159.6,-9.32],[159.94,-9.43]]],[[[160.97,-8.85],[161.38,-9.64],[160.58,-8.33],[160.97,-8.85]]],[[[157.63,-8.24],[157.81,-8.62],[157.21,-8.24],[157.63,-8.24]]],[[[159.85,-8.33],[159.89,-8.57],[158.49,-7.55],[159.85,-8.33]]],[[[157.43,-7.32],[156.94,-7.22],[156.44,-6.64],[157.43,-7.32]]]]},"properties":{"name":"Solomon Islands"},"id":"SB"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-64.42,18.44],[-64.41,18.51],[-64.32,18.51],[-64.42,18.44]]]]},"properties":{"name":"British Virgin Islands"},"id":"VG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[115.22,4.8],[115.34,4.31],[115.03,4.82],[115.15,4.9],[115.22,4.8]]],[[[114.98,4.89],[115.02,4.9],[114.64,4.02],[114.1,4.59],[114.98,4.89]]]]},"properties":{"name":"Brunei"},"id":"BN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[27.88,42.84],[27.45,42.47],[28.01,41.98],[27.39,42.01],[26.36,41.71],[26.29,41.71],[25.29,41.24],[22.94,41.34],[22.37,42.32],[23,43.19],[22.37,43.83],[22.68,44.22],[24.18,43.68],[27.04,44.15],[28.58,43.75],[27.88,42.84]]]]},"properties":{"name":"Bulgaria"},"id":"BG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[97.81,28.34],[98.7,27.54],[98.78,26.64],[98.71,25.86],[97.55,24.74],[97.54,23.94],[98.89,24.16],[98.93,23.19],[99.57,22.94],[99.16,22.16],[99.96,22.05],[100.21,21.43],[101.15,21.57],[100.09,20.35],[100.08,20.35],[98.05,19.81],[97.77,18.57],[97.35,18.56],[98.93,16.39],[98.2,15.07],[99.17,13.73],[99.66,11.83],[98.74,10.35],[98.55,9.98],[98.89,11.7],[97.8,14.88],[97.74,16.56],[97.38,16.49],[96.88,17.45],[96.78,16.7],[96.24,16.8],[95.43,15.73],[95.36,16.14],[94.85,15.78],[94.99,16.25],[94.65,15.85],[94.63,16.34],[94.25,15.96],[94.61,17.55],[93.99,19.46],[93.73,19.93],[93.13,19.84],[93.08,20.55],[92.86,20.12],[92.26,21.05],[92.6,21.98],[93.2,22.26],[93.34,24.08],[94.15,23.86],[95.14,26.61],[96.19,27.27],[97.14,27.09],[96.89,27.61],[97.35,28.22],[97.81,28.34]]]]},"properties":{"name":"Burma"},"id":"MM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[29.23,-3.75],[29.02,-2.74],[29.85,-2.76],[29.95,-2.31],[30.57,-2.4],[30.83,-3.26],[29.42,-4.45],[29.23,-3.75]]]]},"properties":{"name":"Burundi"},"id":"BI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[26.61,55.67],[28.17,56.15],[30.93,55.6],[30.78,54.79],[32.74,53.46],[31.27,53.02],[31.78,52.11],[30.94,52.07],[30.55,51.25],[25.78,51.94],[23.6,51.53],[23.64,52.08],[23.17,52.28],[23.94,52.73],[23.5,53.95],[25.79,54.16],[25.79,54.87],[26.82,55.28],[26.61,55.67]]]]},"properties":{"name":"Belarus"},"id":"BY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[107.49,14.45],[107.55,12.35],[105.85,11.66],[106.2,10.77],[105.1,10.96],[104.45,10.42],[103.62,10.5],[103.56,11.16],[103.13,10.88],[102.92,11.64],[102.38,13.57],[103.18,14.33],[105.21,14.35],[106.06,13.93],[106,14.37],[107.55,14.71],[107.49,14.45]]]]},"properties":{"name":"Cambodia"},"id":"KH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[14.58,12.74],[15.68,9.99],[13.96,9.64],[15.2,8.49],[15.5,7.53],[14.42,6.04],[14.73,4.62],[16.21,2.22],[16.07,1.65],[13.29,2.16],[12.52,2.28],[11.34,2.17],[10.03,2.17],[9.81,2.34],[9.72,3.87],[8.98,4.1],[8.59,4.81],[9.8,6.8],[10.62,7.07],[11.34,6.44],[11.86,7.08],[13.81,11.06],[14.65,11.58],[14.07,13.08],[14.5,13],[14.58,12.74]]]]},"properties":{"name":"Cameroon"},"id":"CM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-127.23,50.64],[-125.45,50.32],[-123.29,48.41],[-125.11,48.73],[-124.81,49.24],[-125.48,48.92],[-125.9,49.44],[-126.54,49.37],[-126.09,49.66],[-127.9,50.11],[-127.41,50.59],[-128.42,50.77],[-127.23,50.64]]],[[[-53.76,48.5],[-52.98,48.6],[-53.95,48.18],[-53.55,47.53],[-52.83,48.1],[-53.27,47.61],[-52.61,47.52],[-53.1,46.64],[-53.62,46.64],[-53.59,47.16],[-54.19,46.82],[-53.87,47.4],[-54.2,47.86],[-55.69,46.86],[-55.98,46.95],[-54.94,47.78],[-55.59,47.4],[-56.17,47.5],[-55.77,47.96],[-56.84,47.52],[-59.41,47.89],[-58.42,48.49],[-59.26,48.48],[-58.4,49.13],[-57.88,48.97],[-58.22,49.39],[-57.7,49.46],[-57.38,50.69],[-55.9,51.63],[-55.41,51.56],[-56.09,51.37],[-55.73,51.08],[-56.85,49.54],[-56.15,50.15],[-55.49,50.01],[-56.13,49.43],[-55.14,49.55],[-55.38,49.04],[-53.78,49.4],[-53.49,49.22],[-54.1,48.81],[-53.76,48.5]],[[-53.76,48.5],[-54.09,48.43],[-54.14,48.36],[-53.76,48.5]]],[[[-85.48,65.79],[-84.92,65.21],[-84.44,65.46],[-81.76,64.5],[-81.99,63.99],[-80.17,63.77],[-81.08,63.45],[-83.07,64.19],[-85.27,63.12],[-85.72,63.72],[-87.19,63.59],[-86.19,64.1],[-86.1,65.53],[-85.48,65.79]]],[[[-95.9,66.95],[-95.22,66.97],[-95.71,67.73],[-95.47,68.06],[-93.55,68.59],[-93.67,68.97],[-94.63,68.76],[-94.3,69.3],[-93.36,69.37],[-96.53,70.13],[-95.79,70.54],[-96.61,70.79],[-96.5,71.28],[-94.61,71.86],[-95.22,71.94],[-93.71,71.76],[-92.97,71.34],[-93.03,70.85],[-91.51,70.17],[-92.92,69.67],[-90.31,69.45],[-91.45,69.35],[-90.44,68.87],[-90.27,68.24],[-89.31,69.25],[-88.05,68.82],[-87.79,68.33],[-88.37,67.96],[-87.51,67.11],[-86.52,67.35],[-85.66,68.73],[-84.53,69.02],[-85.47,69.27],[-85.57,69.86],[-82.26,69.64],[-83.23,69.54],[-81.33,69.18],[-82.06,68.87],[-81.27,68.63],[-82.64,68.5],[-81.24,67.47],[-81.5,67],[-83.4,66.35],[-83.92,66.88],[-84.27,66.72],[-84.37,66.97],[-84.92,67.06],[-84.64,66.98],[-85.23,66.88],[-84.6,66.94],[-83.69,66.19],[-86.78,66.53],[-85.9,66.17],[-87.4,65.32],[-91.43,65.95],[-86.93,65.14],[-88.11,64.14],[-90.12,64.13],[-89.81,63.94],[-90.28,64],[-90.21,63.61],[-92.48,63.81],[-90.63,63.06],[-92.42,62.83],[-91.89,62.6],[-93.62,61.94],[-93.24,61.78],[-93.98,61.46],[-94.82,59.64],[-94.23,58.78],[-94.36,58.22],[-94.14,58.76],[-93.15,58.74],[-92.42,57.34],[-92.88,56.91],[-90.82,57.26],[-85.71,55.63],[-85.12,55.34],[-85.42,54.99],[-82.31,55.15],[-82.3,53.02],[-81.55,52.44],[-81.88,52.19],[-80.44,51.46],[-81.02,51.03],[-80.12,51.3],[-79.33,50.72],[-79.75,51.18],[-79.32,51.66],[-78.85,51.17],[-79.04,51.77],[-78.51,52.46],[-79.05,54.18],[-79.76,54.65],[-77.75,55.3],[-76.53,56.32],[-76.86,57.72],[-78.57,58.64],[-77.77,59.71],[-77.31,59.56],[-77.43,59.91],[-76.76,60.16],[-77.59,60.06],[-77.41,60.54],[-77.83,60.64],[-77.51,60.84],[-78.19,60.79],[-77.47,61.54],[-78.16,62.28],[-77.51,62.56],[-74.57,62.1],[-73.68,62.48],[-72.01,61.68],[-72.3,61.57],[-71.58,61.61],[-71.89,61.43],[-71.39,61.14],[-69.52,61.07],[-69.62,60.07],[-70.95,60.06],[-69.6,59.83],[-69.76,59.32],[-69.23,59.23],[-70.15,58.78],[-69.82,58.59],[-68.36,58.78],[-68.34,58.13],[-69.37,57.77],[-68.4,58.04],[-68,58.58],[-68.13,58.07],[-67.72,58.46],[-67.71,57.92],[-66.39,58.85],[-66.06,58.32],[-65.99,58.9],[-65.32,59.04],[-65.56,59.49],[-64.98,59.38],[-65.53,59.72],[-64.47,60.28],[-64.83,59.99],[-64.17,60.02],[-63.72,59.51],[-64.06,59.38],[-63.36,59.2],[-64.04,59.02],[-62.85,58.69],[-63.59,58.3],[-62.56,58.48],[-63.34,57.98],[-62.45,58.18],[-62.67,57.93],[-61.88,57.63],[-62.55,57.5],[-61.36,57.09],[-61.67,56.62],[-62.57,56.79],[-60.67,55.59],[-60.33,55.78],[-60.68,54.99],[-59.78,55.33],[-59.43,55.14],[-59.94,54.75],[-59.16,55.24],[-59.39,54.98],[-57.35,54.58],[-60.13,53.53],[-60.86,53.79],[-60.1,53.5],[-60.42,53.27],[-57.79,54.07],[-58.18,54.24],[-57.38,54.15],[-57.34,53.44],[-56.46,53.78],[-55.81,53.34],[-56.17,53.03],[-55.76,52.61],[-56.5,52.59],[-55.65,52.44],[-56.2,52.44],[-55.7,52.08],[-56.95,51.42],[-58.63,51.28],[-60.01,50.25],[-66.47,50.26],[-67.38,49.33],[-69.06,48.77],[-71.3,46.74],[-68.21,48.64],[-65,49.22],[-64.22,48.9],[-64.55,48.88],[-64.25,48.49],[-66.84,47.99],[-64.8,47.81],[-65.37,47.09],[-64.8,47.08],[-64.5,46.24],[-62.46,45.61],[-61.92,45.89],[-60.96,45.31],[-64.2,44.58],[-65.48,43.46],[-66.17,43.86],[-65.84,44.58],[-66.19,44.42],[-64.49,45.34],[-64.16,44.98],[-63.36,45.36],[-64.94,45.33],[-64.28,45.8],[-64.75,46.09],[-64.78,45.61],[-67.21,45.18],[-67.8,45.7],[-67.79,47.07],[-69.23,47.47],[-70.88,45.24],[-74.99,44.99],[-76.8,43.63],[-78.72,43.63],[-79.18,43.47],[-78.99,42.82],[-82.7,41.68],[-83.17,42.05],[-82.13,43.59],[-82.54,45.36],[-84.13,46.53],[-88.37,48.31],[-91.42,48.04],[-94.61,48.72],[-95.08,49.36],[-95.15,49],[-122.76,49],[-123.21,49.13],[-122.85,49.44],[-123.24,49.34],[-123.16,49.7],[-123.96,49.51],[-123.53,49.7],[-123.83,50.16],[-123.98,49.8],[-124.77,49.99],[-124.35,50.5],[-125.08,50.32],[-124.81,50.92],[-125.71,50.43],[-126.27,50.63],[-125.62,50.75],[-125.63,51.1],[-126.13,50.68],[-126.56,50.84],[-126.18,50.95],[-127.18,50.93],[-127.03,50.82],[-127.54,51.01],[-126.66,51.19],[-127.79,51.17],[-126.62,51.68],[-127.88,51.67],[-127.17,52.31],[-126.67,51.98],[-126.73,52.37],[-127.19,52.38],[-127.02,52.85],[-128.39,52.29],[-128.13,52.88],[-128.97,53.55],[-127.87,53.24],[-128.81,53.62],[-128.6,54.03],[-129.27,53.38],[-130.05,53.89],[-129.47,54.24],[-130.48,54.36],[-129.96,54.32],[-130.37,54.65],[-129.91,54.61],[-130.17,54.85],[-129.47,55.47],[-130.11,55],[-130.16,55.09],[-129.94,55.28],[-130.1,55.56],[-130.13,55.72],[-130.02,55.91],[-131.82,56.6],[-133.43,58.46],[-135.47,59.8],[-137.48,58.91],[-139.07,60.35],[-141,60.31],[-141,69.64],[-134.31,68.68],[-134.55,69.09],[-132.89,69.65],[-129.4,70.12],[-133.49,68.83],[-132.92,68.69],[-133.35,68.83],[-127.52,70.22],[-128,70.59],[-125.43,69.31],[-124.82,69.71],[-125.2,70],[-124.44,70.15],[-124.5,69.73],[-124.04,69.7],[-124.45,69.37],[-121.68,69.79],[-114.07,68.48],[-115.54,67.92],[-115.1,67.8],[-110.08,68.01],[-108.02,67.29],[-108.62,67.15],[-107.25,66.35],[-107.75,66.92],[-107.08,66.82],[-107.89,68.08],[-106.43,68.15],[-106.47,68.34],[-105.74,68.42],[-105.64,68.63],[-106.54,68.51],[-106.54,68.29],[-107.89,68.27],[-107.6,68.17],[-108.82,68.27],[-106.23,68.94],[-105.49,68.73],[-105.54,68.41],[-104.61,68.24],[-104.5,68.03],[-102.25,67.73],[-98.35,67.8],[-98.62,68.07],[-97.51,67.6],[-97.12,67.79],[-98.71,68.37],[-95.98,68.25],[-96.46,67.48],[-95.33,67.03],[-95.9,66.95]],[[-95.9,66.95],[-96.46,67.06],[-95.63,66.68],[-95.9,66.95]],[[-93.52,63.84],[-92.51,63.82],[-93.78,64.19],[-93.52,63.84]],[[-70.78,48.38],[-69.83,48.17],[-71.05,48.45],[-70.78,48.38]]],[[[-114,72.8],[-114.6,72.6],[-113.03,73.01],[-111.22,72.72],[-111.66,72.28],[-109.78,72.43],[-110.76,72.97],[-109.66,72.92],[-108.62,72.55],[-107.83,71.6],[-107.25,71.9],[-108.29,73.15],[-106.76,73.29],[-105.33,72.75],[-104.36,71.57],[-104.59,71.07],[-101,70.17],[-100.87,69.79],[-103.48,69.69],[-103.02,69.49],[-103.19,69.11],[-102.31,69.5],[-101.75,69.18],[-102.89,68.8],[-105.14,68.9],[-106.6,69.5],[-109.1,68.71],[-113.27,68.45],[-113.52,69.18],[-116.53,69.41],[-117.44,69.99],[-111.49,70.34],[-117.56,70.6],[-118.42,70.99],[-115.06,71.52],[-118.11,71.37],[-117.7,71.67],[-119.13,71.77],[-117.35,72.92],[-114.56,73.38],[-114,72.8]]],[[[-73.35,68.33],[-74.82,69.08],[-76.66,68.7],[-75.59,69.22],[-77.2,69.65],[-76.98,69.94],[-77.63,69.74],[-77.68,70.19],[-79.01,70.68],[-79.59,70.4],[-78.79,69.89],[-81.76,70.12],[-80.95,69.71],[-82.1,70.11],[-83.01,70.3],[-81.71,69.93],[-81.74,69.87],[-82.02,69.87],[-82.14,69.78],[-83.07,70.01],[-85.82,70],[-86.55,70.23],[-86.37,70.53],[-87.92,70.24],[-89.55,71.09],[-87,70.99],[-89.83,71.33],[-90.05,71.95],[-88.41,73.52],[-85.07,73.8],[-86.73,72.72],[-86.24,72.42],[-86.42,72.01],[-84.83,71.27],[-86.82,70.99],[-84.8,70.92],[-84.63,71.67],[-86.05,72.01],[-84.16,72.02],[-85.69,72.89],[-83.95,72.75],[-85.45,73.12],[-83.63,72.98],[-85.19,73.23],[-81.55,73.72],[-80.25,72.73],[-81.38,72.24],[-80.52,72.5],[-80.97,71.88],[-79.67,72.13],[-80.17,72.32],[-79.8,72.5],[-79.01,72.27],[-79.2,71.96],[-77.79,71.79],[-78.87,72.23],[-77,72.13],[-78.56,72.44],[-77.61,72.75],[-75.19,72.49],[-74.95,72.25],[-76.35,71.89],[-74.12,71.98],[-75.39,71.68],[-74.63,71.66],[-75.08,71.18],[-73.75,71.78],[-74.24,71.2],[-73.62,71.58],[-73.38,71.39],[-73.9,71.06],[-73.05,71.27],[-73.38,70.98],[-72.54,71.66],[-71.12,71.26],[-72.57,70.61],[-70.6,71.05],[-71.8,70.43],[-71.16,70.53],[-71.54,70.02],[-69.9,70.88],[-70.5,70.48],[-68.31,70.56],[-70.47,69.84],[-67.79,70.26],[-67.13,69.73],[-70.03,69.54],[-66.8,69.34],[-69.02,69.35],[-68.08,69.22],[-69.03,68.97],[-68.18,69.15],[-67.71,69.02],[-68.56,68.96],[-67.77,68.78],[-69.4,68.86],[-68.04,68.68],[-68.9,68.6],[-68.47,68.61],[-68.71,68.57],[-67.5,68.54],[-67.61,68.38],[-66.71,68.44],[-67.88,68.27],[-67.23,68.36],[-67.01,68.32],[-67.6,68.16],[-67.01,68.29],[-66.77,68.24],[-66.95,68.01],[-66.18,68.02],[-66.73,67.87],[-66.36,67.82],[-65.91,68.16],[-66.01,67.63],[-64.72,67.99],[-65.2,67.65],[-64.51,67.81],[-63.9,67.31],[-64.8,67.36],[-63.96,67.27],[-64.69,67],[-63.11,67.33],[-63.77,66.81],[-62.1,67.05],[-61.26,66.63],[-62.9,66.33],[-61.95,66.02],[-62.97,66.15],[-62.32,65.81],[-63.72,65.68],[-63.32,65.59],[-63.55,64.89],[-65.51,65.74],[-64.36,66.35],[-65.92,65.95],[-65.47,66.39],[-66.07,66.12],[-67.05,66.64],[-67.74,66.57],[-67.28,66.28],[-67.99,66.51],[-67.19,65.91],[-68.85,66.19],[-64.66,64.03],[-64.99,63.82],[-64.53,63.25],[-65.3,63.81],[-64.63,62.9],[-65.25,62.99],[-65.19,62.56],[-66.64,63.37],[-66.55,62.99],[-67.91,63.76],[-67.69,63.37],[-69,63.75],[-65.99,62.24],[-66.07,61.87],[-71.4,63.05],[-72.15,63.45],[-71.23,63.6],[-72.32,63.68],[-73.38,64.27],[-73.3,64.66],[-74.06,64.33],[-74.64,64.9],[-74.99,64.8],[-74.69,64.37],[-75.82,64.61],[-76.67,64.18],[-78.18,64.57],[-77.42,65.46],[-75.77,65.22],[-75.37,64.71],[-75.19,65.1],[-75.95,65.32],[-73.5,65.47],[-74.47,66.15],[-72.26,67.25],[-73.35,68.33]],[[-73.35,68.33],[-73.21,68.38],[-73.32,68.39],[-73.35,68.33]]],[[[-99.8,73.89],[-96.96,73.74],[-98.45,72.87],[-96.52,72.71],[-96.3,72.42],[-96.87,72.04],[-96.49,71.91],[-98.27,71.9],[-98.04,71.53],[-98.73,71.27],[-102.74,72.72],[-102.14,73.09],[-100.41,72.74],[-100.03,72.93],[-100.58,73.17],[-99.77,73.21],[-101.62,73.49],[-100.43,73.41],[-101.12,73.73],[-99.8,73.89]]],[[[-92.64,74.1],[-90.19,73.9],[-92.1,72.74],[-94.32,72.76],[-93.46,72.46],[-94.06,71.98],[-95.21,71.99],[-94.75,72.15],[-95.67,72.81],[-95.67,73.72],[-92.64,74.1]]],[[[-120.15,74.27],[-117.42,74.23],[-115.32,73.48],[-119.14,72.63],[-120.25,72.26],[-120.54,71.52],[-122.78,71.09],[-126,71.97],[-123.77,73.76],[-124.77,74.34],[-120.15,74.27]]],[[[-94.36,75.59],[-93.49,75.26],[-93.47,74.7],[-96.62,74.99],[-94.36,75.59]]],[[[-98.42,76.67],[-97.51,76.19],[-97.94,75.74],[-97.28,75.4],[-98.17,75.33],[-97.58,75.14],[-100.15,74.99],[-100.78,75.35],[-98.95,75.71],[-102.88,75.62],[-101.18,75.78],[-101.91,76.08],[-101.39,76.25],[-102.17,76.24],[-101.89,76.44],[-99.89,75.89],[-99.44,75.97],[-100.15,76.13],[-99.41,76.16],[-100.98,76.5],[-98.42,76.67]]],[[[-108.65,76.81],[-108.08,76.28],[-108.4,76.05],[-107.63,75.99],[-108.02,75.78],[-106.34,76.05],[-105.39,75.64],[-106.01,75.05],[-112.75,74.4],[-114.45,74.67],[-110.91,75.23],[-117.68,75.25],[-115,75.69],[-117.25,75.6],[-114.82,75.88],[-116.73,75.92],[-114.66,76.16],[-115.93,76.29],[-114.9,76.52],[-112.45,76.18],[-111.25,75.52],[-108.9,75.48],[-110.06,75.89],[-109.31,76.11],[-110.39,76.39],[-108.65,76.81]]],[[[-95.66,77.06],[-93.18,76.74],[-93.55,76.39],[-91.41,76.69],[-89.29,76.3],[-91.61,76.26],[-88.95,75.43],[-81.54,75.81],[-79.57,75.45],[-80.44,75.04],[-79.33,74.89],[-81.81,74.46],[-83.51,74.9],[-83.47,74.58],[-84.29,74.5],[-88.5,74.5],[-88.55,74.91],[-91.54,74.65],[-92.49,75.21],[-92.11,75.86],[-93.08,76.36],[-95.38,76.23],[-94.8,76.32],[-96.96,76.73],[-95.66,77.06]]],[[[-116.35,77.54],[-115.39,77.31],[-116.28,77.18],[-115.9,76.69],[-117.1,76.3],[-118.06,76.41],[-117.84,76.82],[-118.97,76.51],[-118.57,76.34],[-119.08,76.08],[-119.65,76.3],[-119.48,75.97],[-119.87,75.86],[-123.04,76.08],[-119.15,77.33],[-116.35,77.54]]],[[[-96.77,78.68],[-94.89,78.1],[-97.1,77.8],[-97.78,78.03],[-96.87,78.13],[-98.41,78.5],[-96.77,78.68]]],[[[-103.59,79.33],[-99.95,78.73],[-98.95,78.06],[-99.91,77.78],[-104.47,78.27],[-105.05,78.49],[-103.32,78.73],[-105.63,79.16],[-103.59,79.33]]],[[[-92.73,81.31],[-88.78,80.13],[-87.68,80.41],[-88.07,80.12],[-86.96,79.9],[-87.46,79.53],[-84.9,79.27],[-87.62,78.65],[-88,78.81],[-87.72,79.08],[-88.16,78.99],[-87.91,78.55],[-88.8,78.61],[-88.82,78.15],[-89.98,78.61],[-89.45,78.16],[-92.06,78.21],[-92.99,78.47],[-91.64,78.55],[-94.29,78.99],[-90.36,79.25],[-95.09,79.27],[-95.78,79.43],[-94.28,79.76],[-95.85,79.65],[-96.8,80.09],[-94.38,79.98],[-94.75,80.08],[-94.08,80.18],[-96.68,80.34],[-93.79,80.53],[-95.53,80.82],[-93.09,81.16],[-94.27,81.35],[-92.73,81.31]]],[[[-70.11,83.11],[-66.3,82.93],[-68.64,82.63],[-64.73,82.9],[-61.08,82.32],[-64.36,81.73],[-69.29,81.72],[-66.61,81.51],[-70.21,81.17],[-64.44,81.48],[-69.43,80.38],[-70.83,80.56],[-70.15,80.19],[-72.42,80.21],[-70.5,80.08],[-71.46,79.9],[-71.18,79.78],[-78.05,79.35],[-74.44,79.06],[-78.89,79.06],[-74.72,78.71],[-76.69,78.51],[-75.06,78.31],[-76.91,78.2],[-75.58,78.11],[-75.92,77.96],[-78.26,78],[-77.72,77.61],[-78.69,77.32],[-81.93,77.68],[-81.17,77.34],[-82.17,77.29],[-81.83,77.16],[-77.78,76.79],[-81.05,76.13],[-80.77,76.42],[-82.73,76.82],[-82.13,76.44],[-89.68,76.57],[-86.74,77.17],[-88.07,77.82],[-84.48,77.29],[-84.61,77.39],[-83.46,77.35],[-83.84,77.46],[-82.32,78.07],[-83.9,77.49],[-84.78,77.52],[-84.43,77.72],[-84.95,77.6],[-85.35,77.73],[-85.05,77.83],[-85.4,77.82],[-84.33,77.9],[-85.68,77.93],[-84.13,78.17],[-84.97,78.2],[-84.64,78.59],[-85.49,78.1],[-87.54,78.14],[-86.86,78.73],[-82.34,78.57],[-83.25,78.83],[-81.48,79.05],[-84.75,79.03],[-83.36,79.05],[-86.49,79.76],[-85.26,79.92],[-86.51,80.3],[-79.9,79.65],[-83.2,80.32],[-78.04,80.57],[-79.96,80.61],[-76.48,80.87],[-78.93,80.88],[-76.75,81.44],[-80.92,80.66],[-85.07,80.51],[-86.74,80.6],[-82.36,81.18],[-87.59,80.63],[-89.47,80.91],[-84.73,81.28],[-89.82,81.01],[-90.35,81.17],[-87.24,81.49],[-91.96,81.66],[-88.08,82.1],[-84.6,81.89],[-86.88,82.2],[-85.05,82.48],[-79.23,81.82],[-82.73,82.4],[-80.58,82.55],[-81.47,82.82],[-78.5,82.68],[-80.43,82.89],[-79.79,82.96],[-75.89,82.59],[-76.23,82.44],[-75.4,82.61],[-77.38,82.99],[-72.63,82.69],[-73.65,82.93],[-70.11,83.11]]]]},"properties":{"name":"Canada"},"id":"CA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-24.37,14.81],[-24.53,14.92],[-24.38,15.05],[-24.37,14.81]]],[[[-23.45,14.98],[-23.68,14.94],[-23.77,15.25],[-23.45,14.98]]],[[[-22.71,16.04],[-22.96,16.09],[-22.8,16.24],[-22.71,16.04]]],[[[-24.03,16.59],[-24.32,16.48],[-24.43,16.64],[-24.03,16.59]]],[[[-25.28,16.91],[-25.33,17.1],[-24.97,17.11],[-25.28,16.91]]]]},"properties":{"name":"Cape Verde"},"id":"CV"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-81.1,19.31],[-81.4,19.29],[-81.25,19.35],[-81.1,19.31]]]]},"properties":{"name":"Cayman Islands"},"id":"KY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[19.06,8.58],[18.99,8.96],[20.37,9.11],[21.72,10.64],[22.87,10.92],[23.67,9.87],[23.52,8.71],[25.25,7.85],[27.46,5.02],[25.89,5.19],[22.9,4.82],[22.38,4.13],[20.59,4.41],[19.42,5.13],[18.54,4.34],[18.62,3.48],[16.66,3.53],[16.21,2.22],[14.73,4.62],[14.42,6.04],[15.5,7.53],[18.59,8.04],[19.06,8.58]]]]},"properties":{"name":"Central African Republic"},"id":"CF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[80.27,9.78],[80.82,9.26],[81.13,8.5],[81.36,8.49],[81.88,7.29],[81.66,6.44],[80.59,5.92],[80.05,6.24],[79.7,8.08],[80.05,9.59],[80.61,9.44],[79.93,9.74],[80.27,9.78]]]]},"properties":{"name":"Sri Lanka"},"id":"LK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[14.5,13],[14.07,13.08],[13.63,13.72],[13.47,14.46],[15.49,16.91],[16,20.35],[15.2,21.5],[15,23],[16,23.45],[24,19.5],[24,15.7],[22.94,15.56],[21.83,12.8],[22.47,12.62],[22.87,10.92],[21.72,10.64],[20.37,9.11],[18.99,8.96],[19.06,8.58],[18.59,8.04],[15.5,7.53],[15.2,8.49],[13.96,9.64],[15.68,9.99],[14.58,12.74],[14.5,13]]]]},"properties":{"name":"Chad"},"id":"TD"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-68.4,-54.96],[-69.06,-55.06],[-68.21,-55.27],[-68.75,-55.27],[-68.16,-55.4],[-68.05,-55.71],[-68.38,-55.48],[-68.94,-55.46],[-68.78,-55.38],[-68.91,-55.34],[-68.8,-55.19],[-69.43,-55.16],[-69.17,-55.51],[-70.03,-55.16],[-68.4,-54.96]]],[[[-67.78,-54.92],[-67.05,-55.14],[-68.36,-54.94],[-67.78,-54.92]]],[[[-71.26,-54.08],[-71.12,-54.38],[-71.7,-54.16],[-71.26,-54.08]]],[[[-71.67,-53.94],[-71.85,-54.34],[-72.26,-53.94],[-71.67,-53.94]]],[[[-70.44,-53.86],[-70.37,-54.04],[-70.67,-53.93],[-70.52,-54.23],[-70.88,-54.05],[-70.53,-53.56],[-70.44,-53.86]]],[[[-72.91,-53.43],[-72.14,-53.8],[-72.87,-54.14],[-72.73,-53.84],[-73.59,-53.76],[-72.91,-53.43]]],[[[-74.36,-52.95],[-74.75,-52.76],[-73.09,-53.35],[-74.36,-52.95]]],[[[-70.92,-54.71],[-70.77,-54.68],[-70.87,-54.69],[-70.92,-54.71],[-72,-54.46],[-70.13,-54.55],[-70.88,-54.13],[-70.14,-54.43],[-70.06,-54.25],[-69.77,-54.56],[-69.86,-54.28],[-69.24,-54.45],[-69.38,-54.69],[-69.18,-54.58],[-69.16,-54.46],[-68.99,-54.43],[-70.04,-54.1],[-70.18,-53.81],[-69.36,-53.35],[-70.45,-53.37],[-70.1,-52.9],[-70.42,-52.77],[-68.62,-52.64],[-68.64,-54.79],[-70.92,-54.71]]],[[[-74.26,-51.25],[-74.32,-50.92],[-74.19,-51.2],[-74.26,-51.25]]],[[[-74.4,-50.86],[-74.41,-51.09],[-74.96,-50.97],[-74.4,-50.86]]],[[[-74.69,-50.89],[-74.95,-50.73],[-74.75,-50.7],[-74.69,-50.89]]],[[[-74.36,-50.49],[-74.19,-50.85],[-74.67,-50.48],[-74.36,-50.49]]],[[[-75.05,-50.17],[-75.46,-50.36],[-75.4,-50.04],[-75.05,-50.17]]],[[[-75.29,-49.1],[-75.66,-49.22],[-75.36,-48.99],[-75.29,-49.1]]],[[[-74.61,-48.46],[-74.41,-49.73],[-74.77,-50.06],[-74.65,-49.36],[-75.02,-49.9],[-75.47,-49.33],[-74.92,-49.34],[-75.05,-48.8],[-74.61,-48.7],[-75.03,-48.5],[-74.74,-48.12],[-74.61,-48.46]]],[[[-75.24,-48.27],[-75.23,-48.71],[-75.58,-48.09],[-75.24,-48.27]]],[[[-74.93,-48.16],[-75.04,-48.44],[-75.26,-48.07],[-74.93,-48.16]]],[[[-74.46,-45.78],[-74.39,-45.44],[-74.21,-45.64],[-74.46,-45.78]]],[[[-73.65,-45.76],[-73.78,-45.67],[-73.7,-45.44],[-73.65,-45.76]]],[[[-74.02,-45.43],[-73.82,-45.48],[-74.14,-45.58],[-74.02,-45.43]]],[[[-73.98,-45.27],[-73.78,-45.34],[-74.17,-45.25],[-73.98,-45.27]]],[[[-73.85,-45],[-73.73,-45.28],[-74.24,-45.16],[-73.85,-45]]],[[[-74.21,-44.78],[-74.41,-44.63],[-73.87,-44.69],[-74.21,-44.78]]],[[[-72.72,-44.55],[-72.98,-44.61],[-72.83,-44.69],[-73.22,-44.94],[-73.41,-44.82],[-73.21,-44.8],[-73.39,-44.79],[-73.46,-44.64],[-73.23,-44.42],[-72.72,-44.55]]],[[[-73.89,-41.82],[-73.37,-42.25],[-73.82,-42.51],[-73.49,-43.11],[-73.86,-43.4],[-74.41,-43.24],[-73.89,-41.82]]],[[[-69.48,-17.64],[-68.44,-19.43],[-68.76,-20.41],[-67.88,-22.83],[-67.18,-22.82],[-67.34,-24.02],[-68.57,-24.77],[-68.29,-26.92],[-69.66,-28.4],[-69.83,-30.19],[-70.53,-31.19],[-69.81,-34.24],[-70.57,-35.25],[-70.42,-36.14],[-71.19,-36.84],[-70.82,-38.57],[-71.7,-39.58],[-71.73,-42.1],[-72.13,-42.29],[-71.86,-44.37],[-71.11,-44.54],[-72.08,-44.77],[-71.3,-45.29],[-71.78,-45.65],[-71.67,-46.68],[-72.36,-47.47],[-72.56,-48.8],[-73.58,-49.54],[-73.17,-50.75],[-72.29,-50.65],[-72.4,-51.51],[-71.91,-52],[-68.44,-52.38],[-70.81,-52.73],[-71.28,-53.89],[-72.45,-53.4],[-71.8,-53.52],[-71.17,-52.81],[-72.55,-53.07],[-72.19,-53.18],[-72.65,-53.32],[-72.4,-53.54],[-73.22,-53.23],[-71.48,-52.63],[-72.8,-52.54],[-72.98,-53.07],[-73.45,-53.01],[-72.89,-52.52],[-73.69,-52.73],[-73.73,-52.03],[-73.33,-52.22],[-72.99,-52.07],[-72.86,-52.26],[-72.78,-52.06],[-72.94,-52.09],[-72.7,-51.98],[-72.9,-52.46],[-72.47,-51.79],[-73.24,-51.46],[-72.56,-51.78],[-73.28,-51.61],[-72.92,-51.86],[-73.24,-52.09],[-73.39,-51.66],[-73.28,-52.16],[-73.56,-52.05],[-73.64,-51.82],[-73.4,-52.02],[-73.46,-51.69],[-73.91,-51.62],[-73.89,-51.37],[-73.6,-51.62],[-73.71,-51.16],[-74.25,-50.94],[-73.53,-50.71],[-73.72,-50.56],[-73.57,-50.4],[-74.05,-50.83],[-74.29,-50.48],[-73.88,-50.54],[-74.69,-50.2],[-73.87,-50.29],[-74.33,-49.63],[-73.71,-49.76],[-74.11,-49.48],[-73.83,-49.03],[-74.37,-49.43],[-74.02,-48.41],[-74.65,-48.02],[-73.22,-48],[-73.72,-47.53],[-73.93,-47.85],[-74.74,-47.72],[-74.04,-47.62],[-74.53,-47.44],[-73.93,-47.04],[-74.27,-46.79],[-75.01,-46.75],[-74.94,-46.44],[-75.41,-46.93],[-75.72,-46.73],[-74.36,-45.79],[-74.14,-45.81],[-73.97,-46.09],[-74.08,-46.19],[-74.31,-46.25],[-74.49,-46.19],[-74.34,-46.27],[-74.05,-46.2],[-74,-46.29],[-73.85,-46.35],[-74.02,-46.22],[-73.88,-46.14],[-73.76,-46.24],[-73.77,-46.3],[-73.81,-46.39],[-74,-46.56],[-73.91,-46.6],[-73.84,-46.59],[-73.18,-45.67],[-73.59,-45.78],[-73.52,-45.46],[-72.83,-45.42],[-73.39,-44.98],[-73.14,-44.94],[-72.77,-44.75],[-72.61,-44.47],[-73.29,-44.14],[-72.54,-42.56],[-72.85,-42.28],[-72.42,-42.45],[-72.86,-41.91],[-72.31,-41.44],[-73.75,-41.75],[-73.49,-41.52],[-74,-40.97],[-73.22,-39.41],[-73.64,-37.21],[-73.19,-37.14],[-71.44,-32.64],[-71.52,-28.97],[-70.45,-25.36],[-70.62,-23.49],[-70.05,-21.43],[-70.41,-18.35],[-69.5,-17.51],[-69.48,-17.64]],[[-74.07,-46.01],[-74.16,-46.14],[-74.07,-46.1],[-74.07,-46.01]]]]},"properties":{"name":"Chile"},"id":"CL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[110.72,20.06],[111.03,19.64],[110.05,18.38],[108.69,18.51],[108.63,19.28],[109.26,19.9],[110.72,20.06]]],[[[123.38,53.53],[126.1,52.76],[127.53,49.79],[130.67,48.86],[130.99,47.69],[134.74,48.27],[133.12,45.13],[131.86,45.35],[130.95,44.84],[131.31,43.39],[130.41,42.72],[130.6,42.42],[129.91,43.01],[129.71,42.44],[128.06,42],[128.16,41.38],[126.91,41.8],[124.37,40.09],[121.15,38.72],[121.75,39.35],[121.23,39.54],[122.3,40.51],[121.18,40.92],[118.92,39.13],[117.74,39.1],[117.67,38.39],[118.84,38.15],[119.23,37.14],[120.74,37.84],[122.56,37.4],[122.5,36.89],[120.09,36.2],[119.18,34.88],[120.25,34.31],[120.84,32.64],[121.9,31.75],[119.63,32.26],[121.88,30.97],[120.15,30.19],[122.13,29.89],[121.45,29.51],[121.98,29.59],[121.41,29.16],[121.61,28.72],[121.14,28.84],[121.58,28.27],[120.59,28.08],[120.84,27.88],[120.13,26.64],[119.55,26.75],[119.94,26.35],[119.09,26.14],[119.71,25.99],[119.65,25.36],[119.31,25.61],[118.62,24.54],[117.79,24.46],[118.12,24.26],[116.52,23.42],[116.48,22.94],[114.22,22.55],[114.03,22.51],[113.48,23.05],[113.55,22.21],[113.53,22.19],[113.17,22.57],[113.39,22.18],[112.94,21.87],[110.4,21.38],[110.28,20.25],[109.92,20.23],[109.57,21.72],[109.14,21.4],[108.48,21.94],[107.99,21.54],[106.69,22.03],[106.71,22.86],[105.58,23.06],[105.35,23.33],[103.96,22.5],[102.48,22.77],[102.14,22.4],[101.57,22.21],[101.79,21.14],[101.15,21.57],[100.21,21.43],[99.96,22.05],[99.16,22.16],[99.57,22.94],[98.93,23.19],[98.89,24.16],[97.54,23.94],[97.55,24.74],[98.71,25.86],[98.78,26.64],[98.7,27.54],[97.81,28.34],[97.35,28.22],[96.4,28.35],[96.62,28.79],[96.08,29.47],[95.39,29.04],[94.65,29.33],[92.54,27.86],[91.66,27.76],[90.47,28.07],[89.59,28.14],[88.92,27.32],[88.83,28.01],[88.14,27.87],[86.01,27.88],[82.1,30.34],[81.03,30.2],[78.77,31.31],[78.4,32.55],[79.53,32.75],[78.08,35.45],[77.82,35.5],[76.17,35.82],[75.86,36.66],[74.82,37.02],[74.57,37.03],[74.92,37.24],[74.86,38.47],[73.82,38.61],[73.66,39.45],[74.86,40.52],[76.35,40.35],[76.87,41.01],[78.08,41.04],[80.23,42.2],[80.38,43.03],[80.82,43.16],[80.52,44.73],[79.87,44.9],[82.56,45.13],[82.32,45.57],[83.04,47.21],[85.53,47.06],[85.76,48.39],[87.35,49.09],[87.84,49.17],[88.65,48.18],[90.07,47.89],[91.02,46.6],[90.9,45.25],[95.42,44.29],[96.38,42.73],[100.84,42.68],[105.01,41.58],[107.47,42.47],[110.44,42.78],[111.96,43.69],[111.42,44.38],[111.98,45.09],[113.64,44.75],[117.42,46.58],[119.9,46.68],[118.54,47.99],[117.37,47.65],[115.59,47.92],[116.71,49.83],[117.87,49.52],[119.21,50.02],[120.78,52.11],[120.03,52.77],[120.86,53.28],[123.38,53.53]]]]},"properties":{"name":"China"},"id":"CN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[121.73,25.14],[121.84,24.48],[120.72,21.93],[120.11,23.62],[121.01,25.01],[121.73,25.14]]]]},"properties":{"name":"Taiwan"},"id":"TW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[105.7,-10.51],[105.63,-10.44],[105.74,-10.38],[105.7,-10.51]]]]},"properties":{"name":"Christmas Island"},"id":"CX"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[96.86,-12.2],[96.82,-12.18],[96.83,-12.13],[96.86,-12.2]]]]},"properties":{"name":"Cocos (Keeling) Islands"},"id":"CC"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-71.56,12.45],[-71.32,11.85],[-71.98,11.66],[-72.49,11.12],[-73.38,9.17],[-72.78,9.08],[-72,7.02],[-70.12,6.98],[-69.25,6.08],[-67.45,6.19],[-67.86,4.56],[-67.29,3.4],[-67.83,2.83],[-67.19,2.39],[-66.87,1.22],[-67.42,2.14],[-67.91,1.75],[-69.85,1.71],[-69.84,1.07],[-69.12,0.65],[-70.04,0.59],[-69.38,-1.34],[-69.96,-4.24],[-70.72,-3.78],[-70.29,-2.51],[-71.7,-2.15],[-72.88,-2.51],[-73.56,-1.37],[-75.29,-0.12],[-77.38,0.38],[-78.59,1.24],[-78.81,1.44],[-78.57,2.43],[-77.74,2.6],[-77.03,3.92],[-77.43,4.03],[-77.34,6.57],[-77.89,7.23],[-77.22,7.94],[-77.37,8.67],[-76.76,7.92],[-76.93,8.57],[-75.63,9.45],[-75.27,10.8],[-74.86,11.13],[-74.39,10.74],[-74.16,11.33],[-73.28,11.3],[-71.56,12.45]]]]},"properties":{"name":"Colombia"},"id":"CO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[44.49,-12.09],[44.51,-12.38],[44.21,-12.16],[44.49,-12.09]]],[[[43.46,-11.94],[43.22,-11.76],[43.28,-11.38],[43.46,-11.94]]]]},"properties":{"name":"Comoros"},"id":"KM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[45.2,-12.85],[45.1,-12.99],[45.08,-12.66],[45.2,-12.85]]]]},"properties":{"name":"Mayotte"},"id":"YT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[12.78,-4.39],[12.03,-5.01],[11.14,-3.93],[11.93,-3.64],[11.57,-2.33],[12.48,-2.33],[12.65,-1.82],[13,-2.37],[13.76,-2.09],[14.11,-2.49],[14.43,-1.89],[14.52,-0.61],[13.85,-0.2],[14.49,0.91],[14.19,1.39],[13.19,1.22],[13.29,2.16],[16.07,1.65],[16.21,2.22],[16.66,3.53],[18.62,3.48],[17.71,-0.54],[16.2,-2.18],[15.89,-3.94],[14.66,-4.91],[14.4,-4.28],[13.41,-4.88],[13.09,-4.63],[12.78,-4.39]]]]},"properties":{"name":"Congo, Republic of the"},"id":"CG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[25.89,5.19],[27.46,5.02],[28.36,4.29],[29.64,4.64],[30.86,3.49],[30.73,2.45],[31.3,2.12],[29.96,0.83],[29.6,-1.39],[29.02,-2.74],[29.23,-3.75],[29.42,-4.45],[29.55,-6.3],[30.77,-8.19],[28.9,-8.48],[28.37,-9.26],[28.7,-10.65],[28.36,-11.55],[29.03,-12.38],[29.81,-12.16],[29.8,-13.45],[29.02,-13.4],[27.2,-11.57],[26.87,-11.97],[26,-11.9],[25.33,-11.19],[24.45,-11.46],[23.99,-10.87],[22.25,-11.21],[21.78,-7.28],[19.54,-7],[19.37,-8],[17.62,-8.1],[16.58,-5.9],[14,-5.85],[13.18,-5.86],[12.21,-5.77],[13.09,-4.66],[13.09,-4.63],[13.41,-4.88],[14.4,-4.28],[14.66,-4.91],[15.89,-3.94],[16.2,-2.18],[17.71,-0.54],[18.62,3.48],[18.54,4.34],[19.42,5.13],[20.59,4.41],[22.38,4.13],[22.9,4.82],[25.89,5.19]]]]},"properties":{"name":"Congo, Democratic Republic of the"},"id":"CD"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-157.89,-21.94],[-157.96,-21.9],[-157.92,-21.88],[-157.89,-21.94]]],[[[-159.74,-21.25],[-159.83,-21.2],[-159.75,-21.19],[-159.74,-21.25]]],[[[-157.32,-20.19],[-157.33,-20.13],[-157.31,-20.15],[-157.32,-20.19]]]]},"properties":{"name":"Cook Islands"},"id":"CK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-85.09,11.01],[-83.65,10.92],[-82.56,9.56],[-82.93,9.47],[-82.9,8.03],[-84.74,9.97],[-85.24,10.2],[-85.14,9.59],[-85.66,9.91],[-85.69,11.08],[-85.09,11.01]]]]},"properties":{"name":"Costa Rica"},"id":"CR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[17.3,43.01],[17.65,42.89],[18.46,42.57],[18.5,42.45],[17.3,43.01]]],[[[16.85,43.27],[16.4,43.33],[16.75,43.36],[16.85,43.27]]],[[[14.46,44.91],[14.49,44.61],[14.29,44.91],[14.4,44.92],[14.32,45.17],[14.46,44.91]]],[[[14.76,44.94],[14.43,45.08],[14.54,45.24],[14.76,44.94]]],[[[16.57,46.48],[16.61,46.48],[17.67,45.83],[18.82,45.91],[19.42,45.23],[19.04,44.86],[15.79,45.17],[16.14,44.2],[17.58,42.94],[16.88,43.4],[15.99,43.5],[14.48,45.31],[14.29,45.32],[14.17,44.98],[13.9,44.77],[13.59,45.48],[15.17,45.43],[15.65,46.22],[16.57,46.48]]]]},"properties":{"name":"Croatia"},"id":"HR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-82.55,21.57],[-83.19,21.62],[-82.97,21.94],[-82.55,21.57]]],[[[-82,23.19],[-80.03,22.95],[-74.13,20.19],[-77.72,19.83],[-77.24,20.66],[-78.05,20.7],[-78.75,21.64],[-81.82,22.18],[-82.16,22.4],[-81.65,22.49],[-81.89,22.68],[-82.76,22.7],[-83.37,22.2],[-83.93,22.16],[-84.03,21.91],[-84.95,21.86],[-84.34,22.01],[-84.4,22.33],[-84.08,22.66],[-82,23.19]]]]},"properties":{"name":"Cuba"},"id":"CU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[33.65,35.35],[34.59,35.69],[33.03,34.56],[32.27,35.04],[33.65,35.35]]]]},"properties":{"name":"Cyprus"},"id":"CY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[14.7,48.58],[13.83,48.77],[12.09,50.32],[14.83,50.87],[16.34,50.66],[16.64,50.11],[17.72,50.32],[18.85,49.52],[16.95,48.62],[15.03,49.02],[14.7,48.58]]]]},"properties":{"name":"Czech Republic"},"id":"CZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[2.48,6.34],[1.64,6.22],[1.4,9.43],[0.78,10.38],[0.92,11],[2.4,11.9],[2.84,12.4],[3.6,11.69],[3.86,10.58],[2.79,9.04],[2.72,6.37],[2.48,6.34]]]]},"properties":{"name":"Benin"},"id":"BJ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[10.75,55.48],[10.5,55.03],[9.68,55.5],[10.75,55.48]]],[[[12.57,55.99],[12.07,54.97],[10.87,55.73],[12.57,55.99]]],[[[8.92,56.92],[8.77,56.69],[8.51,56.74],[8.92,56.92]]],[[[9.97,57.07],[10.31,56.98],[10.31,56.75],[9.87,56.65],[10.96,56.44],[9.55,55.71],[9.77,54.89],[9.45,54.83],[8.66,54.91],[8.62,55.43],[8.09,55.55],[8.17,56.65],[8.73,56.48],[8.68,56.62],[9.08,56.81],[9.15,56.7],[9.06,56.57],[9.27,56.63],[9.32,56.53],[9.18,56.92],[9.97,57.07]]],[[[10.43,57.59],[10.34,56.99],[10.01,57.09],[9.12,57.05],[8.67,56.95],[8.42,56.68],[8.59,56.69],[8.55,56.58],[8.24,56.71],[8.62,57.12],[9.39,57.15],[9.95,57.58],[10.65,57.74],[10.43,57.59]]]]},"properties":{"name":"Denmark"},"id":"DK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-61.36,15.2],[-61.45,15.63],[-61.25,15.46],[-61.36,15.2]]]]},"properties":{"name":"Dominica"},"id":"DM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-70.78,19.85],[-69.22,19.36],[-69.63,19.1],[-68.73,18.95],[-68.45,18.36],[-70.69,18.43],[-71.42,17.6],[-71.77,18.04],[-71.75,19.71],[-70.78,19.85]]]]},"properties":{"name":"Dominican Republic"},"id":"DO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-91.22,-0.01],[-90.81,-0.73],[-91.38,-1.03],[-91.08,-0.59],[-91.61,0],[-91.22,-0.01]]],[[[-78.59,1.24],[-77.38,0.38],[-75.29,-0.12],[-75.63,-0.11],[-75.22,-0.97],[-75.56,-1.53],[-78.34,-3.42],[-78.71,-4.58],[-79.05,-5.01],[-79.65,-4.43],[-80.47,-4.44],[-80.34,-3.38],[-79.76,-2.01],[-80.26,-2.74],[-80.89,-2.32],[-80.91,-1.03],[-80.26,-0.63],[-80.06,0.83],[-78.81,1.44],[-78.59,1.24]]]]},"properties":{"name":"Ecuador"},"id":"EC"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-89.34,14.42],[-87.75,13.86],[-87.82,13.41],[-88.54,13.19],[-90.1,13.75],[-89.35,14.43],[-89.34,14.42]]]]},"properties":{"name":"El Salvador"},"id":"SV"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[10.03,2.17],[11.34,2.17],[11.35,1],[9.8,1],[9.36,1.17],[9.81,2.34],[10.03,2.17]]]]},"properties":{"name":"Equatorial Guinea"},"id":"GQ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[36.54,14.26],[37.29,14.45],[37.57,14.1],[37.91,14.88],[38.45,14.42],[40.23,14.44],[42.4,12.47],[41.79,11.01],[42.94,11],[42.85,10.22],[44.01,9.01],[47.99,8],[44.95,4.9],[43.69,4.89],[41.91,3.98],[40.78,4.29],[39.52,3.41],[35.94,4.62],[34.7,6.68],[32.99,7.92],[33.25,8.46],[34.12,8.58],[34.29,10.55],[34.86,10.73],[35.1,11.83],[36.14,12.71],[36.54,14.26]]]]},"properties":{"name":"Ethiopia"},"id":"ET"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[38.8,17.65],[39.72,15.08],[39.88,15.49],[41.17,14.63],[43.12,12.71],[42.4,12.47],[40.23,14.44],[38.45,14.42],[37.91,14.88],[37.57,14.1],[37.29,14.45],[36.54,14.26],[37,17.07],[38.6,17.99],[38.8,17.65]]]]},"properties":{"name":"Eritrea"},"id":"ER"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[22.99,58.6],[23.33,58.44],[21.99,57.92],[21.83,58.5],[22.99,58.6]]],[[[22.75,59],[23.05,58.84],[22.04,58.94],[22.75,59]]],[[[25.78,59.63],[28.02,59.48],[27.43,58.81],[27.82,57.87],[27.37,57.54],[25.29,58.08],[24.31,57.87],[24.56,58.33],[23.73,58.37],[23.46,59.21],[25.78,59.63]]]]},"properties":{"name":"Estonia"},"id":"EE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-7.05,62.07],[-7.2,62.02],[-7.44,62.14],[-7.05,62.07]]],[[[-6.71,61.94],[-7.23,62.17],[-7.21,62.28],[-6.71,61.94]]],[[[-6.66,62.09],[-7.06,62.31],[-6.6,62.2],[-6.66,62.09]]]]},"properties":{"name":"Faroe Islands"},"id":"FO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-59.21,-51.41],[-60.37,-52.16],[-60.98,-52.06],[-60.18,-51.76],[-60.64,-51.36],[-59.21,-51.41]]],[[[-58.7,-51.34],[-57.73,-51.69],[-59.72,-52.12],[-58.7,-51.34]]]]},"properties":{"name":"Falkland Islands (Islas Malvinas)"},"id":"FK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-37.5,-54.01],[-35.78,-54.77],[-38.03,-54.05],[-37.5,-54.01]]]]},"properties":{"name":"South Georgia South Sandwich Islands"},"id":"GS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[179.96,-16.2],[179.48,-16.7],[179.93,-16.46],[179.9,-16.77],[178.48,-16.78],[179.96,-16.2]]],[[[-179.97,-16.17],[-180,-16.15],[-179.94,-16.13],[-179.97,-16.17]]]]},"properties":{"name":"Fiji"},"id":"FJ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[28.17,69.91],[29.18,69.64],[28.96,69.05],[28.43,68.9],[28.82,68.84],[28.69,68.2],[30.03,67.69],[29.07,66.9],[30.13,65.72],[29.64,64.93],[30.58,64.22],[29.99,63.74],[31.59,62.91],[27.81,60.55],[22.91,59.8],[23.34,60.02],[23.09,60.35],[21.36,60.65],[21.67,61.55],[21.06,62.61],[21.5,63.21],[25.45,64.95],[25.31,65.51],[24.17,65.81],[23.66,66.31],[24.01,66.8],[23.43,67.47],[23.67,67.94],[21.81,68.57],[20.58,69.06],[21.32,69.33],[22.4,68.71],[24.93,68.58],[26.45,69.93],[28.17,69.91]]]]},"properties":{"name":"Finland"},"id":"FI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[20.08,60.35],[19.94,60.04],[19.65,60.26],[20.08,60.35]]]]},"properties":{"name":"Aland Islands"},"id":"AX"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[9.45,42.68],[9.18,41.36],[8.58,42.38],[9.35,43],[9.45,42.68]]],[[[2.54,51.09],[4.15,49.98],[4.83,50.17],[5.81,49.55],[6.36,49.46],[8.23,48.96],[7.59,47.58],[6.99,47.5],[5.97,46.21],[6.79,46.43],[7.04,45.93],[7.13,45.26],[6.62,45.11],[6.98,44.28],[7.66,44.17],[7.53,43.79],[7.44,43.76],[7.42,43.77],[7.39,43.73],[6.17,43.05],[3.96,43.54],[3.08,43.07],[3.18,42.44],[1.72,42.51],[1.78,42.57],[1.45,42.6],[-1.78,43.36],[-1.04,44.68],[-1.25,44.66],[-1.08,45.56],[-0.54,44.9],[-0.78,45.46],[-1.24,45.7],[-1.11,46.32],[-2.13,46.84],[-2.13,47.28],[-1.73,47.21],[-4.37,47.8],[-4.73,48.04],[-4.19,48.3],[-4.78,48.51],[-1.37,48.64],[-1.94,49.72],[0.42,49.45],[0.07,49.53],[1.46,50.12],[1.63,50.88],[2.54,51.09]]]]},"properties":{"name":"France"},"id":"FR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-53.49,5.57],[-52.29,4.94],[-52.04,4.33],[-51.85,4.65],[-51.68,4.03],[-52.91,2.2],[-54.6,2.33],[-54,3.45],[-54.48,4.75],[-54.17,5.35],[-53.94,5.74],[-53.49,5.57]]]]},"properties":{"name":"French Guiana"},"id":"GF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-149.21,-17.73],[-149.18,-17.87],[-149.63,-17.55],[-149.21,-17.73]]],[[[-151.4,-16.89],[-151.48,-16.9],[-151.48,-16.74],[-151.4,-16.89]]],[[[-138.96,-9.74],[-138.81,-9.74],[-139.17,-9.78],[-138.96,-9.74]]],[[[-140.03,-8.9],[-140.19,-8.95],[-140.25,-8.8],[-140.03,-8.9]]]]},"properties":{"name":"French Polynesia"},"id":"PF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[69,-48.8],[69.58,-49.3],[70.57,-49.25],[69.77,-49.39],[70.25,-49.69],[68.8,-49.72],[69,-48.8]]]]},"properties":{"name":"French Southern and Antarctic Lands"},"id":"TF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[42.87,11.59],[43.25,11.47],[42.94,11],[41.79,11.01],[42.4,12.47],[43.12,12.71],[43.41,12.06],[42.51,11.57],[42.87,11.59]]]]},"properties":{"name":"Djibouti"},"id":"DJ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[12.52,2.28],[13.29,2.16],[13.19,1.22],[14.19,1.39],[14.49,0.91],[13.85,-0.2],[14.52,-0.61],[14.43,-1.89],[14.11,-2.49],[13.76,-2.09],[13,-2.37],[12.65,-1.82],[12.48,-2.33],[11.57,-2.33],[11.93,-3.64],[11.14,-3.93],[9.62,-2.38],[8.71,-0.64],[9.3,-0.37],[9.35,0.36],[9.92,0.19],[9.3,0.53],[9.8,1],[11.35,1],[11.34,2.17],[12.52,2.28]]]]},"properties":{"name":"Gabon"},"id":"GA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[41.55,42.41],[40,43.38],[42.85,43.18],[43.91,42.58],[44.93,42.76],[46.45,41.9],[46.52,41.05],[45.02,41.3],[43.46,41.11],[42.83,41.58],[41.53,41.52],[41.55,42.41]]]]},"properties":{"name":"Georgia"},"id":"GE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-16.73,13.45],[-16.2,13.25],[-16.16,13.43],[-15.3,13.49],[-16.14,13.45],[-16.39,13.33],[-16.57,13.59],[-15.07,13.83],[-13.8,13.41],[-15.11,13.6],[-15.29,13.37],[-15.8,13.35],[-15.81,13.16],[-16.75,13.06],[-16.73,13.45]]]]},"properties":{"name":"Gambia, The"},"id":"GM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[34.33,31.26],[34.27,31.22],[34.22,31.32],[34.49,31.6],[34.33,31.26]]],[[[35.28,32.52],[35.55,32.39],[35.48,31.5],[34.88,31.39],[35.28,32.52]],[[35.25,31.79],[35.26,31.79],[35.25,31.81],[35.25,31.79]]]]},"properties":{"name":"Palestine"},"id":"PS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[10.98,54.38],[10.82,53.89],[12.53,54.47],[14.28,53.7],[14.83,50.87],[12.09,50.32],[13.83,48.77],[12.76,48.12],[13.02,47.47],[9.57,47.54],[7.7,47.54],[7.59,47.58],[8.23,48.96],[6.36,49.46],[6.13,50.13],[6.01,50.76],[5.96,51.81],[6.83,51.97],[7.07,52.39],[6.69,52.55],[7.21,53.24],[7.3,53.69],[8.5,53.35],[8.67,53.89],[9.83,53.54],[8.9,53.94],[8.6,54.33],[9.02,54.5],[8.28,54.75],[8.66,54.91],[9.45,54.83],[10.98,54.38]]]]},"properties":{"name":"Germany"},"id":"DE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[0.64,5.85],[0.66,5.75],[0.26,5.76],[-0.8,5.21],[-1.61,5.02],[-2.06,4.73],[-2.93,5.1],[-3.25,6.61],[-2.49,8.2],[-2.69,9.48],[-2.83,11],[-0.15,11.14],[0.73,8.32],[0.53,6.95],[1.2,6.1],[0.69,5.75],[0.63,5.95],[0.51,6.06],[0.41,6.08],[0.37,6.04],[0.26,6.1],[0.21,6.09],[0.36,6.02],[0.42,6.07],[0.49,6.04],[0.61,5.95],[0.64,5.85]]]]},"properties":{"name":"Ghana"},"id":"GH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-5.33,36.16],[-5.34,36.11],[-5.36,36.16],[-5.33,36.16]]]]},"properties":{"name":"Gibraltar"},"id":"GI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[175.59,-1.92],[175.55,-1.82],[175.59,-1.88],[175.59,-1.92]]],[[[175.04,-1.55],[175,-1.53],[175.05,-1.43],[175.04,-1.55]]],[[[173.62,0.13],[173.6,0.21],[173.63,0.22],[173.62,0.13]]],[[[173.02,1.01],[173.08,0.95],[172.98,0.82],[173.02,1.01]]],[[[173.01,1.71],[172.93,1.94],[173.03,1.82],[173.01,1.71]]],[[[172.87,3.06],[172.77,3],[172.75,3.02],[172.87,3.06]]]]},"properties":{"name":"Kiribati"},"id":"KI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[23.86,35.52],[26.29,35.13],[24.75,34.94],[23.52,35.29],[23.86,35.52]]],[[[23.46,38.85],[24.56,37.99],[22.83,38.83],[23.46,38.85]]],[[[26.29,41.71],[26.36,41.71],[26.63,41.35],[26.04,40.74],[23.74,40.75],[24.4,40.15],[23.35,40.25],[23.71,39.91],[22.59,40.48],[23.34,39.18],[22.94,39.36],[23.07,39.04],[22.52,38.86],[24.07,38.2],[24.03,37.65],[23.52,38.04],[22.99,37.88],[23.51,37.43],[22.73,37.57],[23.2,36.43],[22.63,36.8],[22.49,36.39],[22.15,37.02],[21.7,36.82],[21.11,37.85],[21.86,38.34],[23.23,38.15],[22.4,38.45],[21.15,38.3],[20.73,38.8],[21.15,39],[20.01,39.69],[20.98,40.86],[22.94,41.34],[25.29,41.24],[26.29,41.71]]]]},"properties":{"name":"Greece"},"id":"GR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-52.69,69.92],[-51.83,69.63],[-53.57,69.23],[-54.27,69.4],[-53.35,69.58],[-54.99,69.69],[-54.39,69.68],[-54.94,69.85],[-54.23,69.91],[-54.83,70.08],[-54.43,70.31],[-52.69,69.92]]],[[[-23.61,72.83],[-21.93,72.4],[-22.76,72.44],[-22.13,72.27],[-22.56,72.14],[-24.48,72.83],[-23.61,72.83]]],[[[-32.3,83.57],[-25.65,83.29],[-35.62,82.9],[-25.14,83.16],[-24.75,83],[-25.9,82.78],[-21.31,82.61],[-25.07,82.15],[-31.62,82.21],[-29.9,82.09],[-33.1,81.77],[-25.2,81.99],[-27.63,81.49],[-27.33,81.38],[-22.02,81.93],[-22.23,81.47],[-24.51,80.54],[-19.94,81.68],[-20.31,81.45],[-16.7,81.93],[-12.16,81.6],[-16.01,80.73],[-21.25,80.58],[-16.11,80.5],[-20.55,80.11],[-20.33,79.76],[-17.45,80.06],[-19.63,79.66],[-19.87,79.15],[-19.08,79.2],[-21.18,78.81],[-20.91,78.62],[-22.04,77.69],[-19.24,77.76],[-18.96,77.63],[-21.05,77.54],[-18.4,77.34],[-18.31,76.81],[-22.74,76.7],[-19.81,76.23],[-21.98,75.99],[-19.83,75.91],[-19.34,75.4],[-19.88,75.15],[-22.25,75.66],[-20.52,75.14],[-22.44,75.16],[-18.98,74.48],[-22.48,74.31],[-21.82,73.65],[-21.75,74.06],[-20.28,73.88],[-20.5,73.45],[-22.38,73.25],[-24.03,73.7],[-22.18,73.62],[-24.04,73.81],[-24.46,73.54],[-25.69,73.95],[-24.67,73.51],[-27.34,73.49],[-26.39,73.24],[-27.73,73.13],[-25.05,73.08],[-27.39,72.84],[-24.84,72.72],[-24.61,72.52],[-25.91,72.41],[-22.49,71.89],[-23.13,71.63],[-21.9,71.74],[-22.47,71.26],[-21.81,71.51],[-21.69,71.15],[-22.33,71.05],[-21.68,71.07],[-21.93,70.8],[-21.47,70.54],[-22.38,70.44],[-22.51,70.85],[-22.62,70.45],[-23.35,70.44],[-24.74,71.33],[-28.64,72.12],[-27.33,71.71],[-28.47,71.55],[-25.41,71.35],[-28.41,70.98],[-27.91,70.87],[-29.21,70.39],[-26.32,70.37],[-28.54,70.04],[-25.23,70.41],[-22.08,70.13],[-26.36,68.67],[-29.38,68.2],[-31.57,68.07],[-32.49,68.62],[-32.12,67.86],[-33.2,67.69],[-34.72,66.34],[-35.85,66.43],[-35.59,66.11],[-37.19,65.77],[-37.81,66.03],[-37.18,66.34],[-38.11,66.39],[-37.69,66.26],[-38.48,66.01],[-38.24,65.63],[-40.1,65.57],[-39.76,65.24],[-41.16,64.96],[-40.36,64.35],[-41.57,64.27],[-40.57,64.11],[-40.52,63.7],[-41.62,63.79],[-40.75,63.51],[-41.91,63.46],[-41.43,63.13],[-42.17,63.2],[-41.76,62.84],[-43.15,62.76],[-42.16,62.38],[-42.98,62.52],[-42.12,62.01],[-43.08,61.59],[-42.51,61.36],[-43.25,61.34],[-42.63,61.1],[-43.61,61.13],[-42.7,61.06],[-43.53,60.84],[-42.75,60.68],[-44.2,60.59],[-43.14,60.08],[-44.1,60.38],[-45.15,60.07],[-44.47,60.56],[-45.19,60.13],[-44.63,60.73],[-45.98,60.57],[-45.25,60.9],[-46.22,60.75],[-45.2,61.19],[-46.07,60.92],[-45.77,61.33],[-46.86,60.8],[-48.24,60.82],[-47.69,61],[-48.41,60.99],[-47.92,61.32],[-49.3,61.56],[-48.6,61.64],[-49.15,61.72],[-48.76,61.98],[-49.44,61.84],[-48.84,62.08],[-49.67,62],[-49.29,62.17],[-50.32,62.5],[-49.7,63.06],[-50.38,62.78],[-50.15,63.02],[-50.61,63.09],[-50.06,63.23],[-51.11,63.34],[-50.28,63.4],[-51.22,63.44],[-50.5,63.67],[-51.56,63.71],[-50.92,63.93],[-51.6,64.03],[-50.05,64.19],[-51.76,64.18],[-50.17,64.45],[-50.86,64.63],[-49.58,64.34],[-50,64.87],[-50.98,65.22],[-50.64,64.75],[-52.01,64.2],[-52.12,64.72],[-51.25,65.02],[-52.21,64.81],[-52.1,65.24],[-52.56,65.33],[-50.55,65.71],[-52.5,65.39],[-53.27,65.75],[-51.83,66.06],[-53.46,66.03],[-50,66.98],[-53.48,66.1],[-53.12,66.29],[-53.63,66.5],[-52.42,66.55],[-53.45,66.64],[-52.23,66.84],[-53.97,67.07],[-50.35,67.18],[-53.88,67.26],[-52.5,67.77],[-50.07,67.51],[-51.23,67.7],[-50.42,67.84],[-51.06,67.97],[-53.75,67.6],[-53.19,68.04],[-52.06,67.98],[-53.32,68.18],[-50.15,67.93],[-51.43,68.2],[-50.82,68.5],[-53.39,68.33],[-50.87,68.61],[-51.29,68.75],[-51.07,69.13],[-50.21,68.96],[-50.69,69.12],[-50.38,69.34],[-51.12,69.2],[-50.2,69.52],[-50.88,69.49],[-50.21,70.02],[-54.63,70.65],[-50.49,70.51],[-51.95,71.02],[-50.93,70.99],[-51.23,71.14],[-52.25,71.12],[-51.65,71.36],[-52.56,71.17],[-51.35,71.49],[-52.98,71.42],[-51.64,71.71],[-53.25,71.7],[-52.68,72],[-53.32,71.82],[-53.56,72.36],[-53.96,72.32],[-53.4,71.85],[-54.1,71.71],[-53.92,71.44],[-55.91,71.68],[-54.38,72.22],[-55.3,71.93],[-54.68,72.37],[-55.63,72.46],[-54.3,72.48],[-55.7,73.07],[-55.09,73.36],[-56.08,73.65],[-55.61,73.72],[-56.41,74.07],[-56.13,74.28],[-57.33,74.11],[-56.19,74.55],[-58.7,75.35],[-58.21,75.44],[-58.41,75.72],[-60.88,76.15],[-68.5,76.09],[-69.63,76.38],[-67.98,76.68],[-71.38,77.06],[-66.45,77.13],[-69.1,77.27],[-66.06,77.49],[-69.25,77.45],[-73.05,78.16],[-65.98,79.1],[-64.82,79.53],[-65.07,80.01],[-63.78,80.15],[-67.48,80.33],[-63.68,81.14],[-62.79,80.75],[-63.37,81.16],[-61.06,81.12],[-61.31,81.36],[-60.77,81.5],[-61.45,81.75],[-60.81,81.88],[-56.48,81.33],[-59.47,82],[-54.51,82.37],[-53.56,82.12],[-53.63,81.51],[-52.9,82.03],[-49.61,81.64],[-51.07,81.93],[-49.43,81.93],[-51.12,82.49],[-50.32,82.52],[-44.64,81.75],[-44.18,81.83],[-44.93,81.99],[-44.62,82.28],[-42.3,82.22],[-45.77,82.76],[-39.75,82.4],[-46.89,82.96],[-43.39,82.91],[-45.52,83.12],[-42.7,83.27],[-38.57,82.74],[-39.15,82.98],[-36.88,83.15],[-38.86,83.43],[-32.3,83.57]]]]},"properties":{"name":"Greenland"},"id":"GL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-61.75,12],[-61.61,12.23],[-61.63,12.05],[-61.75,12]]],[[[-61.43,12.45],[-61.5,12.44],[-61.43,12.53],[-61.43,12.45]]]]},"properties":{"name":"Grenada"},"id":"GD"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-61.35,16.33],[-61.7,15.95],[-61.78,16.33],[-61.35,16.33]]]]},"properties":{"name":"Guadeloupe"},"id":"GP"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[144.71,13.23],[144.66,13.43],[144.88,13.65],[144.71,13.23]]]]},"properties":{"name":"Guam"},"id":"GU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-90.63,13.93],[-92.25,14.55],[-91.73,16.07],[-90.44,16.09],[-91.44,17.24],[-90.98,17.26],[-90.98,17.82],[-89.14,17.82],[-89.22,15.89],[-88.91,15.89],[-88.21,15.72],[-89.35,14.43],[-90.1,13.75],[-90.63,13.93]]]]},"properties":{"name":"Guatemala"},"id":"GT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-13.6,9.73],[-15.02,10.96],[-14.69,11.51],[-13.71,11.72],[-13.71,12.68],[-11.37,12.41],[-10.65,11.89],[-9.16,12.49],[-8.53,11.49],[-8.68,10.97],[-8.29,11.01],[-7.97,10.17],[-7.65,8.38],[-8.2,8.5],[-7.95,8.02],[-8.47,7.56],[-9.49,7.36],[-9.48,8.35],[-10.27,8.49],[-10.7,8.3],[-10.57,9.06],[-11.21,10],[-12.46,9.89],[-13.3,9.03],[-13.6,9.73]]]]},"properties":{"name":"Guinea"},"id":"GN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-59.79,8.34],[-58.47,7.35],[-58.65,6.43],[-58.31,6.89],[-57.2,6.15],[-57.25,5.49],[-58.05,4.01],[-56.47,1.94],[-58.81,1.19],[-59.64,1.73],[-59.99,2.69],[-59.57,3.9],[-60.15,4.52],[-60.1,5.22],[-60.73,5.2],[-61.39,5.94],[-61.13,6.71],[-60.29,7.06],[-60.72,7.54],[-59.83,8.24],[-59.99,8.54],[-59.79,8.34]]]]},"properties":{"name":"Guyana"},"id":"GY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-72.67,19.92],[-71.75,19.71],[-71.77,18.04],[-74.45,18.34],[-74.27,18.67],[-72.35,18.53],[-72.72,19.45],[-73.47,19.69],[-72.67,19.92]]]]},"properties":{"name":"Haiti"},"id":"HT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[73.77,-53.13],[73.47,-53.19],[73.23,-52.99],[73.77,-53.13]]]]},"properties":{"name":"Heard Island and McDonald Islands"},"id":"HM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[12.45,41.9],[12.45,41.91],[12.46,41.9],[12.45,41.9]]]]},"properties":{"name":"Holy See (Vatican City)"},"id":"VA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-85.84,16.01],[-84.26,15.83],[-83.13,14.99],[-83.24,14.98],[-84.91,14.81],[-87.3,12.99],[-87.82,13.41],[-87.75,13.86],[-89.34,14.42],[-89.35,14.43],[-88.21,15.72],[-85.84,16.01]]]]},"properties":{"name":"Honduras"},"id":"HN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[114.25,22.2],[114.12,22.28],[114.2,22.29],[114.25,22.2]]],[[[113.9,22.2],[113.83,22.23],[114.05,22.34],[113.9,22.2]]],[[[114.22,22.47],[114.03,22.51],[114.22,22.55],[114.22,22.47]]]]},"properties":{"name":"Hong Kong"},"id":"HK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[18.82,45.91],[17.67,45.83],[16.61,46.48],[16.11,46.87],[16.51,47.01],[16.45,47.7],[17.17,48.01],[17.25,48.02],[18.66,47.76],[20.66,48.56],[22.15,48.41],[22.89,47.95],[20.73,46.18],[20.26,46.11],[18.82,45.91]]]]},"properties":{"name":"Hungary"},"id":"HU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-15.07,66.14],[-14.34,65.78],[-14.56,65.49],[-13.61,65.51],[-14.03,65.19],[-13.5,65.07],[-14.93,64.26],[-18.71,63.39],[-21.05,63.95],[-22.69,63.81],[-21.51,64.65],[-24.06,64.89],[-21.84,65.03],[-22.56,65.17],[-21.7,65.45],[-24.54,65.5],[-23.23,65.74],[-23.87,65.87],[-23.21,65.84],[-23.82,66.01],[-23.47,66.2],[-22.42,65.85],[-22.94,66.47],[-21.4,66.03],[-21.78,65.77],[-21.08,65.16],[-20.18,66.13],[-19.45,65.73],[-18.78,66.19],[-18.07,65.64],[-18.3,66.17],[-16.59,66.09],[-16.53,66.51],[-14.71,66.37],[-15.07,66.14]]]]},"properties":{"name":"Iceland"},"id":"IS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[78.08,35.45],[79.53,32.75],[78.4,32.55],[78.77,31.31],[81.03,30.2],[80.06,28.84],[82.07,27.91],[83.29,27.34],[84.15,27.51],[85.86,26.57],[88.01,26.36],[88.14,27.87],[88.83,28.01],[88.92,27.32],[89.64,26.72],[92.07,26.86],[91.66,27.76],[92.54,27.86],[94.65,29.33],[95.39,29.04],[96.08,29.47],[96.62,28.79],[96.4,28.35],[97.35,28.22],[96.89,27.61],[97.14,27.09],[96.19,27.27],[95.14,26.61],[94.15,23.86],[93.34,24.08],[93.2,22.26],[92.6,21.98],[92.28,23.71],[91.61,22.94],[91.16,23.64],[92.41,25.03],[89.85,25.29],[89.74,26.16],[88.43,26.55],[88.11,25.84],[89.01,25.29],[88.04,24.68],[88.75,24.22],[89.06,22.12],[89.07,21.61],[88.71,21.57],[88.67,22.2],[88.25,21.55],[88.2,22.16],[87.91,22.42],[88.17,22.09],[86.96,21.38],[87.03,20.67],[86.42,19.98],[85.43,19.89],[82.36,17.1],[82.3,16.58],[80.28,15.7],[79.86,10.29],[79.32,10.28],[78.91,9.48],[79.45,9.15],[78.4,9.09],[77.54,8.07],[76.58,8.88],[73.45,16.06],[72.66,19.87],[72.93,20.77],[72.56,21.38],[73.13,21.75],[72.5,21.98],[72.92,22.27],[72.15,22.28],[72.11,21.2],[70.82,20.7],[68.94,22.29],[70.17,22.55],[70.51,23.1],[69.22,22.84],[68.43,23.43],[68.74,23.84],[68.2,23.77],[68.78,24.33],[71.11,24.42],[69.58,27.17],[70.37,28.02],[71.9,27.96],[74.69,31.05],[74.61,31.88],[75.38,32.21],[74.02,33.19],[74.3,33.98],[73.94,34.65],[76.87,34.66],[77.82,35.5],[78.08,35.45]]]]},"properties":{"name":"India"},"id":"IN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[120.03,-9.38],[120.72,-10.2],[118.93,-9.56],[120.03,-9.38]]],[[[125.16,-9.07],[125.13,-9.44],[124.44,-10.16],[123.49,-10.32],[124.05,-9.34],[124.34,-9.46],[124.45,-9.18],[124.95,-8.95],[125.16,-9.07]]],[[[116.55,-8.78],[115.84,-8.76],[116.39,-8.2],[116.55,-8.78]]],[[[124.58,-8.14],[125.14,-8.33],[124.35,-8.45],[124.58,-8.14]]],[[[118.31,-8.37],[119,-8.31],[119.18,-8.72],[116.75,-9.01],[117.12,-8.38],[117.97,-8.75],[118.28,-8.59],[117.74,-8.15],[118.31,-8.37]]],[[[122.98,-8.15],[122.83,-8.6],[121.77,-8.89],[119.8,-8.72],[120.52,-8.26],[122.29,-8.64],[122.98,-8.15]]],[[[115.5,-8.18],[115.13,-8.85],[114.45,-8.1],[115.5,-8.18]]],[[[126.72,-7.67],[125.77,-8.01],[125.97,-7.66],[126.72,-7.67]]],[[[138.97,-7.56],[138.44,-8.38],[137.64,-8.43],[138.15,-7.51],[138.97,-7.56]]],[[[131.74,-7.21],[131.11,-8],[131.24,-7.48],[131.74,-7.21]]],[[[113.99,-6.88],[113.5,-7.23],[112.69,-7.05],[113.99,-6.88]]],[[[106.16,-6.01],[108.31,-6.26],[108.73,-6.82],[110.39,-6.98],[110.92,-6.41],[112.56,-6.91],[112.85,-7.6],[114.45,-7.8],[114.37,-8.52],[114.62,-8.75],[108.16,-7.78],[105.24,-6.81],[106.16,-6.01]]],[[[134.58,-5.43],[134.73,-5.97],[134.3,-6.03],[134.58,-5.43]]],[[[123.21,-4.7],[122.65,-5.69],[122.9,-4.49],[123.21,-4.7]]],[[[126.99,-3.14],[127.24,-3.62],[126.7,-3.83],[126.02,-3.35],[126.99,-3.14]]],[[[129.81,-2.92],[130.58,-3.13],[130.83,-3.87],[128.17,-3.07],[127.91,-3.54],[128.17,-2.86],[129.81,-2.92]]],[[[107.83,-2.54],[108.27,-2.76],[108.07,-3.24],[107.61,-3.21],[107.83,-2.54]]],[[[133.59,-2.53],[133.5,-2.43],[133.61,-2.48],[133.59,-2.53]]],[[[134.57,-2.45],[134.52,-2.4],[134.57,-2.29],[134.57,-2.45]]],[[[134.37,-2.16],[134.33,-2.09],[134.39,-2],[134.37,-2.16]]],[[[130.19,-2.06],[129.72,-1.89],[130.35,-1.68],[130.19,-2.06]]],[[[125.01,-1.72],[125.32,-1.89],[124.33,-1.88],[125.01,-1.72]]],[[[136.29,-1.69],[136.9,-1.8],[135.42,-1.61],[136.29,-1.69]]],[[[106.09,-1.77],[106.72,-3.1],[105.13,-2.07],[105.57,-1.53],[106.09,-1.77]]],[[[127.88,-1.43],[128.15,-1.68],[127.38,-1.63],[127.88,-1.43]]],[[[133.11,-0.54],[134.11,-0.84],[134.16,-2.32],[135,-3.34],[137.86,-1.47],[141,-2.61],[141.01,-9.13],[139.99,-8.19],[140.15,-7.88],[138.91,-8.3],[139.1,-7.56],[138.66,-7.2],[139.22,-7.16],[138.56,-6.91],[139.19,-6.97],[138.06,-5.41],[134.22,-3.96],[133.64,-3.49],[133.83,-2.96],[132.9,-4.09],[132.82,-3.3],[131.96,-2.78],[133.24,-2.42],[133.68,-2.72],[133.94,-2.1],[132.3,-2.27],[130.96,-1.4],[132.27,-0.38],[133.11,-0.54]]],[[[130.88,-0.02],[131.26,-0.39],[130.21,-0.21],[130.88,-0.02]]],[[[97.53,1.42],[97.81,0.55],[97.11,1.39],[97.53,1.42]]],[[[125.14,1.42],[124.25,0.38],[120.24,0.35],[120.07,-0.61],[120.67,-1.4],[121.62,-0.8],[123.45,-0.84],[121.3,-1.8],[122.9,-4.4],[121.55,-4.75],[120.77,-2.61],[120.2,-2.96],[120.46,-5.62],[119.46,-5.56],[119.51,-3.53],[118.92,-3.57],[118.76,-2.77],[119.86,-0.84],[119.62,-0.01],[120.03,0.71],[120.95,1.34],[123.84,0.83],[124.97,1.69],[125.14,1.42]]],[[[127.89,1.8],[127.79,0.8],[128.73,1.56],[128.21,0.78],[128.91,0.2],[127.88,0.31],[128.4,-0.89],[127.67,-0.23],[127.39,1.05],[128.05,2.2],[127.89,1.8]]],[[[116.05,4.28],[117.59,4.17],[117.83,3.7],[117.03,3.59],[118.1,2.31],[117.87,1.88],[119.01,0.98],[117.89,1.12],[117.62,-0.78],[116.74,-1.02],[116.22,-1.78],[116.6,-2.23],[115.98,-3.59],[114.71,-4.18],[114.48,-3.5],[113.06,-2.99],[111.89,-3.57],[111.75,-2.74],[110.24,-2.98],[110.06,-1.33],[109.27,-0.86],[108.85,0.81],[109.65,2.07],[110.56,0.85],[111.83,1],[112.47,1.57],[114.56,1.43],[116.05,4.28]]],[[[95.74,5.59],[97.52,5.25],[100,2.6],[100.94,1.82],[101.06,2.29],[102.93,0.7],[102.54,0.17],[103.74,0.28],[103.36,-0.7],[104.38,-1.04],[104.88,-2.15],[104.53,-2.77],[104.86,-2.29],[105.61,-2.39],[106.06,-3.03],[105.73,-5.9],[105.27,-5.44],[105.14,-5.8],[104.54,-5.51],[104.56,-5.93],[101.63,-3.25],[100.29,-0.81],[99.14,0.26],[98.77,1.75],[95.53,4.68],[95.23,5.57],[95.74,5.59]]]]},"properties":{"name":"Indonesia"},"id":"ID"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[45,39.42],[46.18,38.84],[46.54,38.88],[47.98,39.72],[48.36,39.39],[48.02,38.84],[48.89,38.44],[49.1,37.64],[51.1,36.73],[53.94,36.8],[53.91,37.35],[57.21,38.28],[59.34,37.54],[60.33,36.66],[61.16,36.65],[61.28,35.61],[60.51,34.14],[60.94,33.52],[60.58,33.07],[60.84,31.5],[61.85,31.02],[60.87,29.86],[61.91,28.55],[62.78,28.27],[62.78,27.26],[63.34,27.12],[63.18,26.63],[61.86,26.23],[61.61,25.2],[57.32,25.77],[56.69,27.15],[54.79,26.49],[53.75,26.71],[51.43,27.94],[50.05,30.21],[49.55,30.01],[48.98,30.51],[48.55,29.96],[47.69,31],[47.86,31.8],[47.43,32.4],[46.11,32.97],[45.4,33.98],[45.8,34.91],[46.35,35.82],[45.41,35.99],[44.79,37.15],[44.03,39.38],[44.81,39.63],[45,39.42]]]]},"properties":{"name":"Iran"},"id":"IR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[45.8,34.91],[45.4,33.98],[46.11,32.97],[47.43,32.4],[47.86,31.8],[47.69,31],[48.55,29.96],[47.94,30.02],[47.93,30.02],[47.17,30.02],[46.55,29.1],[44.72,29.2],[42.08,31.11],[39.2,32.15],[38.79,33.38],[41,34.42],[41.29,36.36],[42.36,37.11],[44.79,37.15],[45.41,35.99],[46.35,35.82],[45.8,34.91]]]]},"properties":{"name":"Iraq"},"id":"IQ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-7.41,54.95],[-8.16,54.44],[-6.27,54.1],[-6.01,52.95],[-6.36,52.18],[-9.23,51.48],[-10.34,51.78],[-9.76,52.15],[-10.46,52.18],[-8.82,52.67],[-9.94,52.56],[-8.94,53.26],[-10.18,53.41],[-9.56,53.86],[-10.11,54.23],[-8.47,54.27],[-8.19,54.63],[-8.8,54.69],[-8.32,55.11],[-6.93,55.24],[-7.25,55.07],[-7.41,54.95]]]]},"properties":{"name":"Ireland"},"id":"IE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[35.26,31.79],[35.25,31.79],[35.25,31.81],[35.26,31.79]]],[[[35.62,33.25],[35.65,32.69],[35.55,32.39],[35.28,32.52],[34.88,31.39],[35.48,31.5],[34.98,29.55],[34.9,29.49],[34.27,31.22],[34.33,31.26],[34.49,31.6],[35.1,33.09],[35.62,33.25]]]]},"properties":{"name":"Israel"},"id":"IL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[15.53,38.14],[15.08,36.65],[12.42,37.8],[13.32,38.22],[15.53,38.14]]],[[[9.51,41.15],[9.57,39.15],[8.41,38.96],[8.19,40.91],[9.51,41.15]]],[[[12.13,47],[13.72,46.53],[13.38,46.3],[13.72,45.6],[12.28,45.47],[12.37,44.25],[13.62,43.55],[14.74,42.09],[16.14,41.91],[15.93,41.48],[18.51,40.14],[18.35,39.79],[16.91,40.45],[16.49,39.77],[17.17,38.96],[16.06,37.92],[15.63,38.01],[16.22,38.91],[15.67,40.03],[11.1,42.39],[10.11,44.01],[8.75,44.43],[7.53,43.79],[7.66,44.17],[6.98,44.28],[6.62,45.11],[7.13,45.26],[7.04,45.93],[7.86,45.92],[8.44,46.46],[9.04,45.84],[9.28,46.5],[10.13,46.23],[10.47,46.87],[12.13,47]],[[12.46,43.9],[12.51,43.99],[12.42,43.96],[12.46,43.9]],[[12.45,41.9],[12.46,41.9],[12.45,41.91],[12.45,41.9]]]]},"properties":{"name":"Italy"},"id":"IT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-4.79,5.17],[-7.53,4.35],[-7.42,5.84],[-8.61,6.51],[-8.47,7.56],[-7.95,8.02],[-8.2,8.5],[-7.65,8.38],[-7.97,10.17],[-6.99,10.15],[-6.24,10.74],[-6.11,10.2],[-5.52,10.44],[-4.7,9.7],[-3.63,9.95],[-2.69,9.48],[-2.49,8.2],[-3.25,6.61],[-2.93,5.1],[-4.79,5.17]]]]},"properties":{"name":"Cote d'Ivoire"},"id":"CI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-77.13,17.88],[-78.34,18.36],[-76.95,18.39],[-76.22,17.9],[-77.13,17.88]]]]},"properties":{"name":"Jamaica"},"id":"JM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[131.21,33.6],[131.67,33.65],[131.99,32.83],[131.34,31.37],[130.67,31],[130.81,31.68],[130.64,31.18],[130.23,31.25],[130.16,32.01],[130.61,32.79],[130.21,33.17],[130.35,32.66],[129.75,32.56],[129.58,33.35],[130.69,33.94],[131.21,33.6]]],[[[134.22,34.34],[134.75,33.83],[134.19,33.24],[133.6,33.5],[132.8,32.74],[132.37,33.47],[132.02,33.34],[132.9,34.11],[134.22,34.34]]],[[[141.27,41.34],[142.07,39.55],[141.53,38.27],[140.95,38.15],[140.84,35.74],[140.33,35.13],[139.77,34.95],[139.97,35.66],[138.85,34.59],[138.74,35.12],[138.21,34.6],[137.04,34.56],[137.35,34.72],[136.85,35.08],[136.52,34.69],[136.9,34.27],[135.77,33.45],[135.06,33.88],[135.33,34.72],[132.37,34.36],[132.05,33.77],[130.89,33.92],[130.95,34.42],[133.09,35.58],[136.07,35.65],[136.79,37.36],[137.36,37.5],[136.86,37.09],[137.3,36.75],[138.58,37.4],[140.02,39.38],[139.85,40.6],[140.35,41.25],[141.15,40.86],[141.23,41.23],[140.76,41.17],[141.27,41.34]]],[[[142.05,45.4],[143.77,44.09],[144.78,43.91],[145.34,44.34],[145.26,43.31],[145.82,43.37],[143.99,42.91],[143.24,41.92],[141.79,42.61],[140.46,42.57],[140.28,42.25],[141.2,41.8],[140.07,41.42],[139.84,42.62],[140.47,43.37],[141.41,43.29],[141.58,45.23],[142.05,45.4]]]]},"properties":{"name":"Japan"},"id":"JP"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[69.19,55.34],[70.84,55.3],[71.19,54.1],[73.76,54.07],[73.44,53.44],[76.81,54.45],[76.52,53.99],[77.91,53.27],[80.08,50.76],[80.69,51.31],[81.47,50.74],[83.46,51],[85.26,49.59],[86.77,49.79],[87.35,49.09],[85.76,48.39],[85.53,47.06],[83.04,47.21],[82.32,45.57],[82.56,45.13],[79.87,44.9],[80.52,44.73],[80.82,43.16],[80.38,43.03],[80.23,42.2],[79.19,42.8],[74.29,43.22],[73.58,43.04],[73.52,42.41],[71.75,42.82],[70.97,42.25],[69.06,41.38],[68.46,40.6],[67.94,41.18],[66.72,41.17],[66.53,42],[66.03,42],[66.12,43],[64.93,43.74],[62.03,43.48],[58.57,45.57],[56,45],[56,41.33],[54.17,42.34],[53.01,42.14],[52.44,41.74],[52.74,42.71],[51.27,43.15],[50.24,44.58],[51.57,44.51],[50.95,44.86],[51.41,45.37],[53.23,45.34],[52.73,45.55],[53.19,46.71],[51.19,47.11],[49.22,46.35],[48.56,46.56],[49.03,46.78],[48.2,47.7],[47.38,47.69],[46.5,48.42],[47.52,50.44],[48.8,49.94],[48.7,50.59],[50.77,51.77],[53.43,51.49],[54.52,50.53],[54.65,51.04],[55.69,50.53],[56.51,51.08],[58.34,51.16],[59.54,50.48],[61.38,50.78],[61.69,51.27],[60,51.96],[61.06,52.34],[60.69,52.68],[61.1,52.98],[62.12,53],[61.18,53.31],[61.58,53.51],[60.91,53.62],[61.01,53.95],[65.22,54.32],[69.19,55.34]]]]},"properties":{"name":"Kazakhstan"},"id":"KZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[34.96,29.36],[34.98,29.55],[35.48,31.5],[35.55,32.39],[35.65,32.69],[36.84,32.31],[38.79,33.38],[39.2,32.15],[37.01,31.51],[38,30.5],[37.5,30],[36.07,29.19],[34.96,29.36]]]]},"properties":{"name":"Jordan"},"id":"JO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[35.94,4.62],[39.52,3.41],[40.78,4.29],[41.91,3.98],[40.99,2.83],[41,-0.87],[41.56,-1.67],[40.24,-2.66],[39.2,-4.67],[37.61,-3.5],[37.6,-3],[33.92,-1],[33.91,0.1],[35.01,1.9],[34,4.22],[34.39,4.61],[35.94,4.62]]]]},"properties":{"name":"Kenya"},"id":"KE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[130.64,42.41],[130.7,42.29],[129.7,41.65],[129.71,40.83],[127.51,39.72],[127.39,39.2],[128.36,38.63],[126.69,37.83],[125.59,38.03],[125.34,37.67],[124.66,38.12],[125.65,38.63],[125.14,38.8],[125.45,39.58],[124.62,39.59],[124.37,40.09],[126.91,41.8],[128.16,41.38],[128.06,42],[129.71,42.44],[129.91,43.01],[130.6,42.42],[130.64,42.41]]]]},"properties":{"name":"Korea, North"},"id":"KP"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[128.53,38.33],[129.43,37.06],[129.44,35.48],[126.56,34.3],[126.25,35.12],[126.87,36.05],[126.12,36.71],[126.99,36.91],[126.69,37.83],[128.36,38.63],[128.53,38.33]]]]},"properties":{"name":"Korea, South"},"id":"KR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[47.93,30.02],[47.94,30.02],[48.17,29.55],[47.71,29.38],[48.42,28.55],[46.55,29.1],[47.17,30.02],[47.93,30.02]]]]},"properties":{"name":"Kuwait"},"id":"KW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[80.23,42.2],[78.08,41.04],[76.87,41.01],[76.35,40.35],[74.86,40.52],[73.66,39.45],[69.31,39.54],[69.54,40.13],[70.98,40.24],[73.17,40.82],[71.69,41.56],[71.42,41.12],[70.19,41.53],[71.28,42.2],[70.97,42.25],[71.75,42.82],[73.52,42.41],[73.58,43.04],[74.29,43.22],[79.19,42.8],[80.23,42.2]]]]},"properties":{"name":"Kyrgyzstan"},"id":"KG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[107.55,14.71],[106,14.37],[106.06,13.93],[105.21,14.35],[105.64,15.66],[104.75,16.53],[104.72,17.5],[103.4,18.43],[102.68,17.82],[102.09,18.21],[100.92,17.57],[101.28,19.56],[100.5,19.53],[100.58,20.16],[100.09,20.35],[101.15,21.57],[101.79,21.14],[101.57,22.21],[102.14,22.4],[102.98,21.74],[103.17,20.85],[104.64,20.66],[104.38,20.44],[104.98,20],[103.88,19.29],[105.19,18.64],[106.69,16.46],[107.46,16.08],[107.18,15.78],[107.7,15.27],[107.55,14.71]]]]},"properties":{"name":"Laos"},"id":"LA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[35.62,33.25],[35.1,33.09],[35.97,34.65],[36.62,34.2],[35.62,33.25]]]]},"properties":{"name":"Lebanon"},"id":"LB"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[27.56,-30.4],[27.01,-29.63],[28.57,-28.61],[29.43,-29.28],[29.17,-29.91],[28.08,-30.65],[27.56,-30.4]]]]},"properties":{"name":"Lesotho"},"id":"LS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[21.07,56.44],[21.73,57.58],[22.61,57.76],[23.79,56.97],[24.41,57.26],[24.31,57.87],[25.29,58.08],[27.37,57.54],[27.86,57.3],[28.17,56.15],[26.61,55.67],[25,56.3],[21.05,56.08],[21.07,56.44]]]]},"properties":{"name":"Latvia"},"id":"LV"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-10.81,6.4],[-11.49,6.93],[-10.27,8.49],[-9.48,8.35],[-9.49,7.36],[-8.47,7.56],[-8.61,6.51],[-7.42,5.84],[-7.53,4.35],[-10.81,6.4]]]]},"properties":{"name":"Liberia"},"id":"LR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[9.95,27.82],[9.54,30.23],[10.21,30.73],[10.29,31.69],[11.57,32.44],[11.53,33.17],[15.17,32.4],[15.76,31.39],[19,30.27],[20.06,30.86],[20.08,32.18],[21.62,32.93],[25.15,31.65],[24.71,30.17],[25,22],[25,20],[24,20],[24,19.5],[16,23.45],[15,23],[14.23,22.61],[11.99,23.52],[11.56,24.3],[10.25,24.61],[9.4,26.15],[9.87,26.51],[9.95,27.82]]]]},"properties":{"name":"Libya"},"id":"LY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[9.53,47.27],[9.6,47.06],[9.47,47.06],[9.53,47.27]]]]},"properties":{"name":"Liechtenstein"},"id":"LI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[25,56.3],[26.61,55.67],[26.82,55.28],[25.79,54.87],[25.79,54.16],[23.5,53.95],[22.79,54.36],[22.84,54.9],[21.43,55.25],[21.26,55.25],[21.05,56.08],[25,56.3]]]]},"properties":{"name":"Lithuania"},"id":"LT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[6.03,50.18],[6.13,50.13],[6.36,49.46],[5.81,49.55],[6.03,50.18]]]]},"properties":{"name":"Luxembourg"},"id":"LU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[113.53,22.19],[113.55,22.21],[113.55,22.18],[113.53,22.19]]]]},"properties":{"name":"Macau"},"id":"MO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[49.36,-12.09],[50.43,-15.58],[50.17,-15.98],[49.63,-15.56],[49.79,-16.83],[47.13,-24.93],[45.21,-25.59],[44.02,-24.99],[43.24,-22.28],[44.48,-19.97],[43.94,-17.48],[44.46,-16.18],[46.48,-15.97],[46.34,-15.62],[47.22,-15.45],[47.45,-14.67],[47.43,-15.11],[48,-14.77],[47.91,-13.6],[48.74,-13.43],[48.73,-12.43],[49.36,-12.09]]]]},"properties":{"name":"Madagascar"},"id":"MG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[34.73,-12.1],[34.7,-12.08],[34.72,-12.03],[34.75,-12.04],[34.73,-12.1]]],[[[34.62,-12.04],[34.6,-12.01],[34.63,-12.01],[34.62,-12.04]]],[[[33.13,-9.49],[34.33,-9.73],[34.97,-11.57],[34.38,-12.16],[34.57,-13.34],[35.92,-14.89],[35.81,-16.02],[35.14,-16.55],[35.29,-17.13],[34.26,-15.9],[34.52,-14.57],[33.63,-14.54],[33.22,-14.01],[32.68,-13.61],[33.55,-12.36],[33.25,-10.89],[33.7,-10.56],[32.94,-9.41],[33.13,-9.49]]]]},"properties":{"name":"Malawi"},"id":"MW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[100.65,6.45],[101.14,5.63],[102.1,6.24],[103.41,4.86],[103.44,2.93],[104.28,1.37],[103.96,1.65],[103.51,1.27],[101.28,2.84],[100.13,6.42],[100.65,6.45]]],[[[116.79,6.58],[117.18,6.99],[117.74,6.39],[117.5,5.9],[118.01,6.06],[117.96,5.68],[119.28,5.34],[118.14,4.89],[118.55,4.35],[117.59,4.17],[116.05,4.28],[114.56,1.43],[112.47,1.57],[111.83,1],[110.56,0.85],[109.65,2.07],[111.38,1.34],[111,1.58],[111.44,2.69],[113.01,3.16],[114.1,4.59],[114.64,4.02],[115.02,4.9],[115.03,4.82],[115.34,4.31],[115.22,4.8],[115.15,4.9],[116.76,7.02],[116.79,6.58]]]]},"properties":{"name":"Malaysia"},"id":"MY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[73.18,-0.69],[73.16,-0.68],[73.17,-0.68],[73.18,-0.69]]],[[[73.2,-0.68],[73.19,-0.68],[73.2,-0.67],[73.2,-0.68]]],[[[73.13,-0.67],[73.13,-0.67],[73.12,-0.65],[73.13,-0.67]]],[[[73.23,-0.65],[73.23,-0.63],[73.24,-0.62],[73.23,-0.65]]],[[[73.12,-0.64],[73.09,-0.61],[73.09,-0.58],[73.12,-0.64]]],[[[73.25,-0.61],[73.24,-0.59],[73.25,-0.58],[73.25,-0.61]]]]},"properties":{"name":"Maldives"},"id":"MV"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-8.53,11.49],[-9.16,12.49],[-10.65,11.89],[-11.37,12.41],[-12.24,14.76],[-11.49,15.65],[-10.9,15.11],[-9.34,15.7],[-5.5,15.5],[-6.58,25],[-4.81,25],[1.8,20.31],[3.23,19.82],[3.33,18.98],[4.25,19.15],[4.25,18.65],[4.2,16.39],[3.52,15.36],[0.24,14.92],[-0.73,15.08],[-2.47,14.29],[-3.44,13.17],[-3.96,13.5],[-4.42,12.3],[-5.27,11.84],[-5.52,10.44],[-6.11,10.2],[-6.24,10.74],[-6.99,10.15],[-7.97,10.17],[-8.29,11.01],[-8.68,10.97],[-8.53,11.49]]]]},"properties":{"name":"Mali"},"id":"ML"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[14.56,35.82],[14.37,35.85],[14.33,35.98],[14.56,35.82]]],[[[14.27,36.01],[14.18,36.06],[14.34,36.03],[14.27,36.01]]]]},"properties":{"name":"Malta"},"id":"MT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-60.86,14.4],[-61.17,14.88],[-60.94,14.74],[-60.86,14.4]]]]},"properties":{"name":"Martinique"},"id":"MQ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-6.66,26.13],[-4.81,25],[-6.58,25],[-5.5,15.5],[-9.34,15.7],[-10.9,15.11],[-11.49,15.65],[-12.24,14.76],[-14.35,16.64],[-16.28,16.52],[-16.53,16.06],[-16.04,17.73],[-16.51,19.35],[-16.2,20.22],[-16.92,21.16],[-17.05,20.76],[-16.95,21.34],[-15.74,21.34],[-13,21.34],[-13.11,22.89],[-12,23.45],[-12,26],[-8.67,26],[-8.67,27.29],[-6.66,26.13]]]]},"properties":{"name":"Mauritania"},"id":"MR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[57.57,-20.51],[57.3,-20.45],[57.62,-19.99],[57.57,-20.51]]]]},"properties":{"name":"Mauritius"},"id":"MU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-113.05,31.97],[-111.05,31.33],[-106.4,31.75],[-103.38,29.02],[-102.31,29.89],[-101.41,29.77],[-99.51,27.57],[-99.1,26.43],[-97.14,25.97],[-97.89,22.6],[-95.91,18.83],[-94.48,18.15],[-92,18.73],[-91.48,18.44],[-90.45,19.98],[-90.33,21.03],[-87.03,21.59],[-86.77,21.15],[-87.74,19.67],[-87.41,19.58],[-87.85,18.19],[-88.04,18.87],[-88.3,18.48],[-88.38,18.48],[-89.14,17.82],[-90.98,17.82],[-90.98,17.26],[-91.44,17.24],[-90.44,16.09],[-91.73,16.07],[-92.25,14.55],[-92.77,15.17],[-93.93,16.09],[-94.37,16.29],[-94.06,16.04],[-94.72,16.2],[-94.58,16.32],[-94.79,16.26],[-94.86,16.43],[-96.48,15.64],[-97.79,15.97],[-104.98,19.34],[-105.68,20.39],[-105.24,20.57],[-105.54,20.79],[-105.19,21.44],[-105.82,22.66],[-108.04,25.07],[-109.11,25.53],[-108.83,25.8],[-109.39,25.76],[-109.1,26.28],[-110.53,27.37],[-110.51,27.87],[-112.16,28.97],[-113.09,31.23],[-115.03,31.97],[-114.55,30],[-111.56,26.72],[-110.66,24.34],[-109.41,23.47],[-110,22.89],[-112.09,24.76],[-112.4,26.27],[-114.99,27.72],[-113.98,27.7],[-114.31,27.87],[-114.06,28.53],[-115.69,29.77],[-117.12,32.54],[-114.72,32.72],[-113.05,31.97]]]]},"properties":{"name":"Mexico"},"id":"MX"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[7.44,43.76],[7.39,43.73],[7.42,43.77],[7.44,43.76]]]]},"properties":{"name":"Monaco"},"id":"MC"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[91.02,46.6],[90.07,47.89],[88.65,48.18],[87.84,49.17],[92.32,50.81],[97.34,49.73],[98.29,50.29],[97.83,51],[98.93,52.14],[102.22,51.33],[102.33,50.57],[102.92,50.32],[106.66,50.34],[108.57,49.33],[110.79,49.15],[114.31,50.28],[116.71,49.83],[115.59,47.92],[117.37,47.65],[118.54,47.99],[119.9,46.68],[117.42,46.58],[113.64,44.75],[111.98,45.09],[111.42,44.38],[111.96,43.69],[110.44,42.78],[107.47,42.47],[105.01,41.58],[100.84,42.68],[96.38,42.73],[95.42,44.29],[90.9,45.25],[91.02,46.6]]]]},"properties":{"name":"Mongolia"},"id":"MN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[28.12,46.85],[26.63,48.26],[27.76,48.45],[29.14,47.99],[29.95,46.81],[30.12,46.39],[28.99,46.48],[28.21,45.45],[28.12,46.85]]]]},"properties":{"name":"Moldova"},"id":"MD"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[18.46,42.57],[19.23,43.51],[20.35,42.89],[20.07,42.56],[19.65,42.62],[19.37,41.85],[18.5,42.45],[18.46,42.57]]]]},"properties":{"name":"Montenegro"},"id":"ME"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-62.17,16.67],[-62.24,16.71],[-62.2,16.81],[-62.17,16.67]]]]},"properties":{"name":"Montserrat"},"id":"MS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-9.05,32.73],[-6.81,34.05],[-5.92,35.79],[-5.4,35.92],[-4.42,35.15],[-2.99,35.42],[-2.21,35.09],[-1.75,34.75],[-1.18,32.11],[-3.82,31.7],[-3.63,30.97],[-8.67,28.71],[-8.67,27.67],[-13.17,27.67],[-10.14,29.43],[-9.64,30.17],[-9.81,31.45],[-9.05,32.73]]]]},"properties":{"name":"Morocco"},"id":"MA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[40.5,-11.03],[40.59,-15.48],[39.09,-16.99],[36.84,-17.88],[36.25,-18.89],[34.9,-19.86],[34.62,-19.62],[35.55,-22.23],[35.5,-24.11],[32.81,-25.61],[32.89,-26.85],[32.13,-26.84],[31.97,-25.96],[32.02,-24.46],[31.3,-22.41],[32.49,-21.34],[33.02,-19.94],[32.7,-18.94],[32.99,-17.27],[32.98,-16.71],[30.42,-16.01],[30.42,-15.63],[30.21,-14.98],[33.22,-14.01],[33.63,-14.54],[34.52,-14.57],[34.26,-15.9],[35.29,-17.13],[35.14,-16.55],[35.81,-16.02],[35.92,-14.89],[34.57,-13.34],[34.38,-12.16],[34.97,-11.57],[37.46,-11.73],[40.44,-10.48],[40.5,-11.03]],[[34.6,-12.01],[34.62,-12.04],[34.63,-12.01],[34.6,-12.01]],[[34.72,-12.03],[34.7,-12.08],[34.73,-12.1],[34.75,-12.04],[34.72,-12.03]]]]},"properties":{"name":"Mozambique"},"id":"MZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[56.04,24.94],[56.37,24.98],[57.16,23.94],[58.61,23.63],[59.81,22.23],[58.52,20.41],[57.83,20.22],[57.8,18.97],[56.81,18.75],[56.35,17.93],[55.44,17.83],[55.04,17.02],[53.11,16.64],[52,19],[55,20],[55.67,22],[55.2,22.7],[56.04,24.94]]],[[[56.37,26.38],[56.27,25.64],[56.18,25.65],[56.08,26.07],[56.37,26.38]]]]},"properties":{"name":"Oman"},"id":"OM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[23.28,-17.66],[23.48,-17.63],[24.97,-17.56],[25.26,-17.8],[23.62,-18.49],[23.3,-18],[20.99,-18.32],[20.99,-22],[20,-22.01],[20,-24.77],[20,-28.42],[18.18,-28.91],[17.4,-28.71],[17.06,-28.03],[16.49,-28.58],[15.29,-27.32],[14.51,-22.55],[11.8,-18.08],[11.75,-17.25],[13.16,-16.95],[13.99,-17.42],[18.45,-17.39],[20.85,-18.02],[23.28,-17.66]]]]},"properties":{"name":"Namibia"},"id":"NA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[166.93,-0.55],[166.93,-0.49],[166.96,-0.51],[166.93,-0.55]]]]},"properties":{"name":"Nauru"},"id":"NR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[82.07,27.91],[80.06,28.84],[81.03,30.2],[82.1,30.34],[86.01,27.88],[88.14,27.87],[88.01,26.36],[85.86,26.57],[84.15,27.51],[83.29,27.34],[82.07,27.91]]]]},"properties":{"name":"Nepal"},"id":"NP"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[3.76,51.35],[3.37,51.37],[4.24,51.35],[3.76,51.35]]],[[[5.76,52.42],[5.43,52.26],[5.14,52.38],[5.64,52.6],[5.86,52.54],[5.76,52.42]]],[[[5.42,52.64],[5.05,52.39],[5.04,52.63],[5.42,52.64]]],[[[6.87,53.42],[7.21,53.24],[6.69,52.55],[7.07,52.39],[6.83,51.97],[5.96,51.81],[6.01,50.76],[5.04,51.49],[4.25,51.38],[3.44,51.54],[4.29,51.45],[3.69,51.71],[4.17,51.69],[3.87,51.81],[4.58,52.46],[5.42,52.25],[5.77,52.41],[5.88,52.51],[5.86,52.61],[5.6,52.66],[5.6,52.76],[5.72,52.84],[5.37,52.88],[5.42,52.96],[5.36,53.07],[5.1,52.95],[5.3,52.71],[5.03,52.63],[5.03,52.38],[4.58,52.47],[4.73,52.96],[6.87,53.42]]]]},"properties":{"name":"Netherlands"},"id":"NL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-68.2,12.22],[-68.25,12.02],[-68.42,12.26],[-68.2,12.22]]],[[[-68.97,12.2],[-69.16,12.37],[-68.75,12.04],[-68.97,12.2]]]]},"properties":{"name":"Netherlands Antilles"},"id":"AN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-69.88,12.41],[-70.06,12.54],[-70.06,12.63],[-69.88,12.41]]]]},"properties":{"name":"Aruba"},"id":"AW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[164.32,-20.33],[167.01,-22.32],[165.26,-21.56],[163.99,-20.09],[164.32,-20.33]]]]},"properties":{"name":"New Caledonia"},"id":"NC"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[167.42,-16.11],[167.77,-16.54],[167.18,-15.9],[167.42,-16.11]]],[[[166.8,-15.16],[167.06,-14.95],[167.24,-15.52],[166.76,-15.64],[166.59,-14.62],[166.8,-15.16]]]]},"properties":{"name":"Vanuatu"},"id":"VU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[172.86,-40.51],[173.11,-41.31],[174.32,-41],[174.29,-41.75],[172.76,-43.24],[173.09,-43.86],[171.29,-44.34],[170.78,-45.88],[169.01,-46.68],[166.48,-46.01],[168.37,-44.04],[170.79,-42.9],[172.11,-40.89],[172.86,-40.51]]],[[[173.04,-34.44],[173.27,-35.02],[174.32,-35.23],[174.85,-36.85],[175.58,-37.24],[175.35,-36.48],[175.84,-36.75],[175.99,-37.64],[177.16,-38.01],[178.57,-37.71],[177.91,-39.26],[177.05,-39.2],[176.83,-40.18],[175.32,-41.61],[174.59,-41.28],[175.16,-40.1],[173.75,-39.29],[174.59,-38.82],[174.97,-37.75],[174.55,-37.07],[174.89,-37.06],[174.19,-36.5],[174.51,-36.23],[173.91,-35.87],[174.08,-36.41],[173.4,-35.57],[173.66,-35.31],[173.09,-35.21],[172.72,-34.5],[173.04,-34.44]]]]},"properties":{"name":"New Zealand"},"id":"NZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-83.24,14.98],[-83.13,14.99],[-83.83,11.87],[-83.65,10.92],[-85.09,11.01],[-85.69,11.08],[-87.69,12.91],[-87.3,12.99],[-84.91,14.81],[-83.24,14.98]]]]},"properties":{"name":"Nicaragua"},"id":"NI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[4.25,18.65],[4.25,19.15],[5.81,19.45],[11.99,23.52],[14.23,22.61],[15,23],[15.2,21.5],[16,20.35],[15.49,16.91],[13.47,14.46],[13.63,13.72],[12.46,13.07],[10.72,13.39],[9.63,12.8],[7.82,13.35],[6.93,13],[5.87,13.75],[4.14,13.48],[3.6,11.69],[2.84,12.4],[2.4,11.9],[2.14,12.69],[0.99,13.05],[1.29,13.35],[0.6,13.7],[0.24,14.92],[3.52,15.36],[4.2,16.39],[4.25,18.65]]]]},"properties":{"name":"Niger"},"id":"NE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[5.87,13.75],[6.93,13],[7.82,13.35],[9.63,12.8],[10.72,13.39],[12.46,13.07],[13.63,13.72],[14.07,13.08],[14.65,11.58],[13.81,11.06],[11.86,7.08],[11.34,6.44],[10.62,7.07],[9.8,6.8],[8.59,4.81],[6.96,4.73],[7.01,4.37],[6.77,4.77],[6.85,4.35],[6.1,4.27],[5.45,4.92],[5.64,5.54],[5.26,5.44],[5.5,5.62],[4.53,6.3],[2.72,6.37],[2.79,9.04],[3.86,10.58],[3.6,11.69],[4.14,13.48],[5.87,13.75]]]]},"properties":{"name":"Nigeria"},"id":"NG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-169.89,-19.15],[-169.93,-19.02],[-169.82,-18.97],[-169.89,-19.15]]]]},"properties":{"name":"Niue"},"id":"NU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[167.96,-29.08],[167.91,-29.01],[168,-29.03],[167.96,-29.08]]]]},"properties":{"name":"Norfolk Island"},"id":"NF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[13.97,68.24],[14.14,68.24],[13.45,68.07],[13.97,68.24]]],[[[15.03,68.35],[14.2,68.15],[15.17,68.45],[15.03,68.35]]],[[[15.38,68.85],[15.06,68.57],[14.37,68.68],[15.38,68.85]]],[[[15.99,68.75],[15.74,68.53],[16.57,68.65],[14.99,68.25],[15.64,68.95],[15.99,68.75]]],[[[17.64,69.52],[18.07,69.43],[17.88,69.24],[18,69.19],[16.78,69.06],[17.64,69.52]]],[[[18.89,69.69],[18,69.59],[18.69,69.88],[18.89,69.69]]],[[[23.6,70.58],[23.23,70.28],[22.85,70.41],[23.6,70.58]]],[[[23.45,70.78],[22.78,70.52],[21.95,70.65],[23.45,70.78]]],[[[5.34,61.59],[4.94,61.68],[6.76,61.87],[5.15,61.89],[5.15,62.21],[6.36,62.06],[5.92,62.22],[6.31,62.37],[6.54,62.1],[6.39,62.37],[6.7,62.45],[6.87,62.42],[7,62.25],[6.94,62.11],[7.04,62.09],[7.42,62.23],[6.98,62.31],[6.92,62.36],[6.97,62.37],[6.78,62.48],[6.26,62.45],[6.65,62.5],[6.25,62.57],[8.15,62.69],[7.04,62.97],[8.55,62.65],[7.88,63.01],[8.53,62.84],[8.16,63.12],[9.65,63.62],[10.26,63.26],[10.05,63.41],[10.91,63.45],[11.49,64.02],[11.31,64.12],[10.57,63.8],[11.08,63.84],[10.94,63.74],[10.05,63.5],[9.79,63.66],[10.1,63.76],[9.54,63.76],[12.94,65.31],[12.25,65.23],[12.67,65.92],[13.18,65.85],[12.67,66.07],[14.15,66.32],[13.03,66.19],[13.54,66.3],[12.97,66.52],[13.73,66.6],[13.23,66.71],[13.99,66.78],[13.55,66.93],[15.74,67.17],[14.36,67.23],[15.9,67.56],[14.76,67.81],[15.97,68.25],[16.22,67.89],[16.5,67.79],[16.21,68],[16.52,67.95],[16.36,68.03],[16.72,68.07],[16.1,68.28],[16.81,68.13],[16.32,68.37],[17.35,68.17],[17.55,68.52],[16.46,68.51],[17.68,68.65],[17.24,68.75],[17.79,68.76],[17.43,68.91],[18.15,69.15],[18,69.28],[18.26,69.49],[19.44,69.23],[18.94,69.61],[19.76,69.81],[19.68,69.43],[20.3,69.97],[19.95,69.26],[21.31,70.02],[22.1,69.74],[21.8,70.03],[22.1,70.11],[21.3,70.25],[23.31,69.94],[24.73,70.62],[24.25,70.78],[24.59,70.96],[25.91,70.89],[25.07,70.5],[25.23,70.09],[26.57,70.94],[26.5,70.36],[27.03,70.47],[27.65,71.11],[28.55,70.97],[27.65,70.61],[28.3,70.71],[27.85,70.48],[28.34,70.51],[28.04,70.06],[29.04,70.87],[31.08,70.29],[28.61,70.11],[29.67,69.97],[29.49,69.66],[30.85,69.79],[28.96,69.05],[29.18,69.64],[28.17,69.91],[26.45,69.93],[24.93,68.58],[22.4,68.71],[21.32,69.33],[20.58,69.06],[20.1,69.04],[20.35,68.79],[19.94,68.34],[18.09,68.51],[17.88,67.95],[16.73,67.9],[15.47,66.28],[14.5,66.13],[14.49,65.31],[13.66,64.58],[14.12,64.47],[13.99,64.02],[12.14,63.58],[12.12,61.73],[12.86,61.36],[12.21,61],[12.49,60.11],[11.82,59.85],[11.43,58.99],[10.8,59.19],[10.53,59.88],[10.23,59.04],[9.54,59.11],[8.21,58.12],[6.6,58.07],[5.46,58.74],[6.62,59.05],[5.87,59.07],[6.47,59.56],[5.18,59.51],[7.11,60.49],[5.75,59.99],[5.73,60.39],[5.14,60.35],[5.7,60.69],[4.93,60.8],[6.59,61.15],[7.11,60.86],[7.57,61.48],[5.4,61.07],[4.95,61.26],[5.63,61.36],[4.95,61.41],[5.8,61.45],[5.34,61.59]],[[5.34,61.59],[5.35,61.59],[5.28,61.59],[5.34,61.59]]]]},"properties":{"name":"Norway"},"id":"NO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[145.28,14.16],[145.12,14.12],[145.24,14.19],[145.28,14.16]]],[[[145.62,14.91],[145.57,15.01],[145.63,15.08],[145.62,14.91]]],[[[145.74,15.13],[145.68,15.11],[145.82,15.27],[145.74,15.13]]],[[[145.74,18.04],[145.78,18.17],[145.82,18.16],[145.74,18.04]]],[[[145.68,18.72],[145.66,18.81],[145.71,18.77],[145.68,18.72]]]]},"properties":{"name":"Northern Mariana Islands"},"id":"MP"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[163.01,5.26],[162.9,5.31],[163.02,5.38],[163.01,5.26]]],[[[158.3,6.79],[158.12,6.93],[158.32,6.93],[158.3,6.79]]],[[[138.21,9.52],[138.06,9.42],[138.13,9.57],[138.21,9.52]]]]},"properties":{"name":"Micronesia, Federated States of"},"id":"FM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[168.77,7.3],[168.79,7.29],[168.67,7.33],[168.77,7.3]]],[[[168.57,7.4],[168.55,7.42],[168.56,7.47],[168.57,7.4]]],[[[168.97,7.57],[168.94,7.62],[168.97,7.6],[168.97,7.57]]]]},"properties":{"name":"Marshall Islands"},"id":"MH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[134.56,7.37],[134.49,7.44],[134.63,7.73],[134.56,7.37]]]]},"properties":{"name":"Palau"},"id":"PW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[74.82,37.02],[75.86,36.66],[76.17,35.82],[77.82,35.5],[76.87,34.66],[73.94,34.65],[74.3,33.98],[74.02,33.19],[75.38,32.21],[74.61,31.88],[74.69,31.05],[71.9,27.96],[70.37,28.02],[69.58,27.17],[71.11,24.42],[68.78,24.33],[68.2,23.77],[67.49,23.89],[66.36,25.61],[64.65,25.16],[61.61,25.2],[61.86,26.23],[63.18,26.63],[63.34,27.12],[62.78,27.26],[62.78,28.27],[61.91,28.55],[60.87,29.86],[62.48,29.41],[66.26,29.85],[66.72,31.21],[69.33,31.94],[69.51,33.03],[70.33,33.33],[69.91,34.04],[71.08,34.06],[71.65,35.42],[71.24,36.13],[72.56,36.82],[74.57,37.03],[74.82,37.02]]]]},"properties":{"name":"Pakistan"},"id":"PK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-79.46,9.57],[-77.37,8.67],[-77.22,7.94],[-77.89,7.23],[-78.43,8.05],[-78.14,8.4],[-77.78,8.15],[-78.98,9.14],[-80.47,8.21],[-79.99,7.52],[-80.43,7.24],[-81.74,8.16],[-82.9,8.03],[-82.93,9.47],[-82.56,9.56],[-82.24,9],[-81.2,8.78],[-79.46,9.57]]]]},"properties":{"name":"Panama"},"id":"PA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[152.24,-4.21],[152.1,-5.46],[150.47,-6.28],[148.32,-5.68],[149.88,-5.54],[150.09,-5.01],[150.16,-5.55],[150.92,-5.49],[151.68,-4.91],[151.51,-4.2],[152.24,-4.21]]],[[[141.89,-2.97],[144.51,-3.82],[145.74,-4.8],[145.77,-5.49],[147.48,-5.97],[147.87,-6.66],[146.96,-6.75],[147.18,-7.46],[148.14,-8.07],[148.6,-9.08],[149.31,-9.02],[149.22,-9.47],[150.01,-9.63],[149.91,-10.05],[150.88,-10.23],[150.21,-10.7],[147.95,-10.15],[146.09,-8.09],[144.52,-7.5],[144.21,-7.8],[143.66,-7.47],[143.96,-7.98],[143.36,-7.9],[143.61,-8.24],[142.14,-8.23],[143.11,-8.47],[143.33,-9.03],[141.01,-9.13],[141,-2.61],[141.89,-2.97]]]]},"properties":{"name":"Papua New Guinea"},"id":"PG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-54.33,-24.68],[-54.6,-25.57],[-54.7,-26.44],[-55.74,-27.44],[-58.6,-27.32],[-57.58,-25.55],[-57.76,-25.18],[-61.01,-23.81],[-62.64,-22.24],[-61.74,-19.65],[-59.1,-19.35],[-58.16,-20.17],[-57.99,-22.09],[-55.85,-22.29],[-55.41,-23.96],[-54.41,-23.92],[-54.33,-24.68]]]]},"properties":{"name":"Paraguay"},"id":"PY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-78.71,-4.58],[-78.34,-3.42],[-75.56,-1.53],[-75.22,-0.97],[-75.63,-0.11],[-75.29,-0.12],[-73.56,-1.37],[-72.88,-2.51],[-71.7,-2.15],[-70.29,-2.51],[-70.72,-3.78],[-69.96,-4.24],[-70.77,-4.15],[-72.85,-5.12],[-73.12,-6.45],[-74.01,-7.54],[-72.96,-8.98],[-73.21,-9.41],[-72.37,-9.49],[-72.14,-10],[-70.51,-9.43],[-70.63,-11.01],[-69.57,-10.95],[-68.67,-12.5],[-69.42,-15.62],[-68.82,-16.34],[-69.5,-17.51],[-70.41,-18.35],[-75.93,-14.66],[-78.99,-8.23],[-79.98,-6.76],[-81.17,-6.09],[-80.87,-5.65],[-81.29,-4.31],[-80.34,-3.38],[-80.47,-4.44],[-79.65,-4.43],[-79.05,-5.01],[-78.71,-4.58]]]]},"properties":{"name":"Peru"},"id":"PE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[126.05,9.23],[126.59,7.28],[126.19,6.27],[125.65,7.24],[125.41,5.56],[125.26,6.09],[124.19,6.21],[124.27,7.37],[123.68,7.81],[122.83,7.28],[122.62,7.77],[121.92,6.99],[122.22,7.96],[123.38,8.73],[123.82,8.48],[123.67,7.95],[124.73,8.49],[124.8,9],[125.51,9.01],[125.44,9.81],[126.05,9.23]]],[[[124.48,10.05],[124.37,9.63],[123.79,9.73],[124.48,10.05]]],[[[123.56,10.79],[123.01,9.03],[122.45,9.97],[122.95,10.89],[123.56,10.79]]],[[[124.02,11.12],[124.03,10.38],[123.31,9.41],[124.02,11.12]]],[[[119.51,11.34],[119.71,10.5],[117.19,8.33],[119.31,10.58],[119.22,10.96],[119.46,10.72],[119.51,11.34]]],[[[124.64,11.29],[125.03,11.2],[125.01,10.03],[124.29,11.54],[124.64,11.29]]],[[[122.23,11.8],[123.15,11.6],[123.13,11.17],[121.94,10.42],[121.85,11.76],[122.23,11.8]]],[[[124.46,12.52],[125.3,12.46],[125.76,11.01],[124.84,11.47],[124.46,12.52]]],[[[123.67,12.35],[124.08,11.72],[123.53,12.21],[123.16,11.91],[123.24,12.61],[123.67,12.35]]],[[[120.72,13.48],[121.5,13.15],[121.22,12.23],[120.3,13.44],[120.72,13.48]]],[[[121.26,18.57],[122.24,18.51],[122.53,17.1],[121.38,15.33],[121.73,14.17],[122.23,13.9],[122.71,14.34],[123.1,13.67],[123.34,14.09],[123.92,13.79],[123.53,13.58],[124.2,13.06],[124.08,12.54],[122.56,13.94],[122.61,13.16],[121.75,13.96],[120.66,13.77],[120.96,14.64],[120.09,14.79],[119.79,16.32],[120.42,16.16],[120.57,18.49],[121.26,18.57]]]]},"properties":{"name":"Philippines"},"id":"PH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-128.29,-24.41],[-128.34,-24.33],[-128.3,-24.33],[-128.29,-24.41]]]]},"properties":{"name":"Pitcairn Islands"},"id":"PN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[18.85,49.52],[17.72,50.32],[16.64,50.11],[16.34,50.66],[14.83,50.87],[14.28,53.7],[17.9,54.82],[19.8,54.44],[22.79,54.36],[23.5,53.95],[23.94,52.73],[23.17,52.28],[23.64,52.08],[23.6,51.53],[24.11,50.57],[22.56,49.08],[18.85,49.52]]]]},"properties":{"name":"Poland"},"id":"PL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-8.2,41.87],[-6.59,41.95],[-6.19,41.58],[-6.93,41.02],[-7.02,39.67],[-7.53,39.67],[-6.95,39.03],[-7.43,37.25],[-8.99,37.02],[-8.67,38.41],[-9.18,38.42],[-8.98,38.95],[-9.48,38.71],[-8.66,40.69],[-8.75,41.95],[-8.2,41.87]]]]},"properties":{"name":"Portugal"},"id":"PT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-14.52,12.68],[-13.71,12.68],[-13.71,11.72],[-14.69,11.51],[-15.02,10.96],[-15.51,11.34],[-15.03,11.59],[-15.56,11.72],[-15,11.97],[-15.96,11.73],[-15.7,12],[-16.25,11.93],[-16.11,12.33],[-16.72,12.32],[-14.52,12.68]]]]},"properties":{"name":"Guinea-Bissau"},"id":"GW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[124.45,-9.18],[124.34,-9.46],[124.05,-9.34],[124.45,-9.18]]],[[[127.25,-8.48],[125.13,-9.44],[125.16,-9.07],[124.95,-8.95],[127.25,-8.48]]]]},"properties":{"name":"Timor-Leste"},"id":"TL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-67,18.5],[-65.6,18.23],[-67.19,17.93],[-67,18.5]]]]},"properties":{"name":"Puerto Rico"},"id":"PR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[51.52,25.38],[51.22,24.62],[50.83,24.75],[51.04,26.05],[51.57,25.91],[51.52,25.38]]]]},"properties":{"name":"Qatar"},"id":"QA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[55.71,-21],[55.67,-21.37],[55.22,-21.03],[55.71,-21]]]]},"properties":{"name":"Reunion"},"id":"RE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[20.73,46.18],[22.89,47.95],[24.92,47.71],[26.63,48.26],[28.12,46.85],[28.21,45.45],[29.66,45.21],[29.55,44.82],[28.87,44.94],[28.58,43.75],[27.04,44.15],[24.18,43.68],[22.68,44.22],[22.48,44.71],[21.4,44.78],[21.51,45.15],[20.26,46.11],[20.73,46.18]]]]},"properties":{"name":"Romania"},"id":"RO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[143.66,49.31],[143.02,49.14],[142.53,48],[143.09,46.8],[143.49,46.81],[143.47,46.09],[142.71,46.74],[142.08,45.89],[141.85,48.75],[142.27,51.12],[141.64,52.32],[141.77,53.37],[142.8,53.7],[142.39,54.24],[142.7,54.42],[143.29,53.13],[143.22,51.52],[144.75,48.64],[143.66,49.31]],[[143.66,49.31],[143.25,49.38],[143.32,49.31],[143.66,49.31]]],[[[21.43,55.25],[22.84,54.9],[22.79,54.36],[19.8,54.44],[20.4,54.68],[19.87,54.64],[19.97,54.96],[20.94,55.29],[20.53,54.97],[21.09,54.89],[21.26,55.25],[21.43,55.25]]],[[[-179.63,68.91],[-175.46,67.71],[-174.83,67.38],[-175,66.67],[-174.46,66.3],[-173.76,66.45],[-174.65,67.06],[-173.67,67.13],[-171.73,66.96],[-169.69,66.07],[-170.64,65.61],[-171.54,65.83],[-171.12,65.48],[-172.8,65.68],[-172.13,65.09],[-173.2,64.79],[-172.36,64.46],[-173.19,64.25],[-173.41,64.62],[-175.45,64.78],[-176.08,65.47],[-178.56,65.52],[-178.91,65.99],[-178.52,66.4],[-179.7,66.18],[-179.32,65.54],[-180,65.07],[-180,68.98],[-179.63,68.91]]],[[[55.33,73.33],[56.59,73.14],[55.62,72.96],[56.26,72.96],[55.43,72.78],[55.95,72.67],[55.12,72.45],[55.58,72.2],[55.22,71.93],[57.64,70.73],[53.46,70.81],[54.24,71.13],[51.42,71.74],[53.22,72.65],[52.38,72.72],[53.38,72.88],[53.15,73.16],[55.33,73.33]]],[[[139.19,76.07],[140.48,75.64],[141.62,76.01],[141.36,76.18],[145.39,75.52],[143.95,75.03],[142.9,75.13],[142.5,75.36],[142.51,75.45],[143.04,75.67],[142.45,75.71],[142.16,75.38],[142.61,75.1],[143.71,74.94],[139.1,74.65],[136.86,75.35],[137.4,75.35],[136.96,75.6],[137.74,75.75],[137.45,75.95],[139.19,76.07]]],[[[68.27,76.96],[68.86,76.54],[61.29,75.33],[59.15,74.44],[58.18,74.57],[58.74,74.27],[57.26,74.08],[57.72,73.71],[56.56,73.88],[57.61,73.66],[56.72,73.67],[57.25,73.49],[56.76,73.25],[55.91,73.44],[54.22,73.32],[55.18,73.71],[53.63,73.76],[55.87,74.1],[55.07,74.26],[56.98,74.69],[55.83,74.8],[56.68,74.95],[55.8,75.15],[58,75.67],[68.27,76.96]]],[[[104.27,77.68],[106.29,77.36],[104.12,77.09],[107.5,76.92],[106.4,76.51],[111.1,76.76],[113.89,75.85],[113.51,75.53],[112.34,75.85],[113.72,75.41],[105.21,72.76],[110.91,73.7],[109.53,73.77],[110.2,74.02],[112.89,73.96],[113.5,73.33],[113.49,72.96],[113.1,72.85],[113.18,72.72],[113.53,72.63],[114.04,72.6],[113.36,72.69],[113.23,72.74],[113.15,72.83],[113.53,72.96],[113.55,73.24],[114.03,73.34],[113.48,73.5],[118.63,73.57],[118.99,73.49],[118.39,73.24],[119.82,72.94],[126.37,72.35],[127.22,71.39],[127.33,71.9],[126.72,72.39],[127.66,72.35],[131.13,70.73],[132.73,71.94],[133.68,71.43],[135.86,71.64],[137.85,71.11],[138.07,71.57],[139.93,71.48],[139.34,71.95],[140.2,72.2],[139.09,72.23],[141.02,72.59],[140.75,72.89],[146.85,72.35],[144.39,72.17],[146.93,72.31],[144.96,71.96],[145.32,71.66],[147.14,72.32],[149.19,72.22],[150.08,71.88],[148.82,71.67],[152.54,70.84],[159.05,70.87],[160.04,70.41],[159.73,69.83],[161,69.59],[161.41,68.98],[160.85,68.52],[161.58,68.91],[161.45,69.39],[164.01,69.77],[167.79,69.78],[168.28,69.24],[170.61,68.76],[171.03,69.04],[170.12,69.61],[170.47,70.13],[176.11,69.89],[180,68.98],[180,65.07],[178.52,64.59],[176.9,65.08],[176.3,65.05],[177.3,64.83],[174.44,64.69],[177.49,64.76],[179.56,62.62],[179.06,62.28],[176.98,62.87],[177.27,62.57],[172.71,61.43],[170.25,59.91],[169.21,60.62],[166.14,59.82],[166.35,60.49],[164.83,59.78],[163.64,60.05],[163.19,59.05],[161.94,58.07],[162.35,57.68],[163.21,57.84],[162.74,57.36],[163.35,56.2],[162.39,56.4],[161.71,55.5],[162.11,54.76],[160.01,54.14],[160.06,53.09],[158.43,53.02],[158.28,51.94],[156.67,50.88],[155.54,55.3],[155.95,56.67],[156.98,57.41],[156.75,57.73],[158.23,58.02],[161.91,60.42],[163.66,60.87],[164.13,62.28],[165.64,62.45],[163.26,62.54],[162.95,61.81],[163.29,61.66],[160.14,60.58],[160.39,61.03],[159.78,60.94],[159.83,61.26],[160.35,61.95],[157.49,61.8],[154.23,59.88],[154.11,59.46],[155.19,59.36],[154.74,59.13],[151.31,58.84],[151.07,59.11],[152.29,59.23],[149.6,59.77],[148.9,59.24],[142.16,59.07],[135.15,54.86],[136.82,54.65],[136.76,53.77],[137.74,54.32],[137.31,53.53],[138.55,53.99],[138.44,53.51],[138.64,54.3],[139.75,54.31],[141.42,53.29],[140.71,53.11],[141.51,52.21],[140.46,50.71],[140.7,50.09],[140.18,48.45],[135.13,43.5],[133.15,42.68],[131.81,43.33],[130.7,42.29],[130.64,42.41],[130.6,42.42],[130.41,42.72],[131.31,43.39],[130.95,44.84],[131.86,45.35],[133.12,45.13],[134.74,48.27],[130.99,47.69],[130.67,48.86],[127.53,49.79],[126.1,52.76],[123.38,53.53],[120.86,53.28],[120.03,52.77],[120.78,52.11],[119.21,50.02],[117.87,49.52],[116.71,49.83],[114.31,50.28],[110.79,49.15],[108.57,49.33],[106.66,50.34],[102.92,50.32],[102.33,50.57],[102.22,51.33],[98.93,52.14],[97.83,51],[98.29,50.29],[97.34,49.73],[92.32,50.81],[87.84,49.17],[87.35,49.09],[86.77,49.79],[85.26,49.59],[83.46,51],[81.47,50.74],[80.69,51.31],[80.08,50.76],[77.91,53.27],[76.52,53.99],[76.81,54.45],[73.44,53.44],[73.76,54.07],[71.19,54.1],[70.84,55.3],[69.19,55.34],[65.22,54.32],[61.01,53.95],[60.91,53.62],[61.58,53.51],[61.18,53.31],[62.12,53],[61.1,52.98],[60.69,52.68],[61.06,52.34],[60,51.96],[61.69,51.27],[61.38,50.78],[59.54,50.48],[58.34,51.16],[56.51,51.08],[55.69,50.53],[54.65,51.04],[54.52,50.53],[53.43,51.49],[50.77,51.77],[48.7,50.59],[48.8,49.94],[47.52,50.44],[46.5,48.42],[47.38,47.69],[48.2,47.7],[49.03,46.78],[48.56,46.56],[49.22,46.35],[48.71,45.83],[47.38,45.74],[46.68,44.52],[47.41,43.5],[47.7,43.87],[47.46,43.02],[48.58,41.84],[47.77,41.2],[46.57,41.87],[46.45,41.9],[44.93,42.76],[43.91,42.58],[42.85,43.18],[40,43.38],[36.58,45.18],[37.74,45.3],[37.94,46.03],[38.57,46.09],[37.73,46.67],[39.3,47.08],[38.24,47.11],[38.85,47.86],[39.8,47.86],[39.66,48.62],[40.08,48.87],[39.7,49.01],[40.14,49.6],[38.02,49.9],[37.46,50.44],[35.61,50.37],[35.37,51.04],[34.38,51.26],[34.1,51.65],[34.42,51.81],[33.42,52.36],[31.78,52.11],[31.27,53.02],[32.74,53.46],[30.78,54.79],[30.93,55.6],[28.17,56.15],[27.86,57.3],[27.37,57.54],[27.82,57.87],[27.43,58.81],[28.02,59.48],[30.25,59.98],[28.6,60.38],[28.69,60.74],[27.81,60.55],[31.59,62.91],[29.99,63.74],[30.58,64.22],[29.64,64.93],[30.13,65.72],[29.07,66.9],[30.03,67.69],[28.69,68.2],[28.82,68.84],[28.43,68.9],[28.96,69.05],[30.85,69.79],[33.09,69.75],[32.03,69.64],[33.52,69.42],[33.02,68.95],[33.72,69.33],[35.97,69.17],[40.99,67.72],[41.22,66.84],[38.61,66.05],[31.85,67.15],[34.85,65.9],[34.38,65.38],[34.79,64.55],[37.41,63.8],[37.98,64.32],[36.44,64.94],[37.03,65.21],[38.41,64.86],[38.05,64.64],[40.51,64.54],[39.75,65.55],[42.17,66.52],[44.17,65.87],[44.5,66.91],[43.75,67.32],[44.25,68.27],[43.31,68.68],[46.52,68.14],[46.71,67.81],[44.91,67.37],[46.39,66.74],[47.7,66.99],[47.99,67.65],[49.1,67.63],[48.59,67.93],[52.27,68.31],[52.73,68.47],[52.49,68.59],[52.65,68.65],[52.29,68.61],[53.78,68.97],[54.56,68.99],[53.59,68.9],[54.02,68.86],[53.95,68.4],[53.21,68.26],[54.79,68.16],[58.9,69],[59.43,68.75],[59.07,68.42],[59.84,68.37],[60.91,68.9],[60.14,69.57],[60.87,69.86],[64.15,69.54],[68.44,68.22],[69.22,68.96],[66.8,69.57],[67.34,70.75],[66.62,71.05],[68.47,71.82],[69.33,72.95],[71.56,72.91],[72.83,72.71],[72.88,72.28],[71.8,71.47],[72.84,70.87],[72.42,70.27],[72.55,68.98],[73.65,68.46],[71.41,66.97],[71.56,66.65],[68.97,66.8],[72,66.22],[74.74,67.69],[74.33,68.38],[74.64,68.77],[76.59,68.97],[77.32,68.52],[77.09,67.78],[79.04,67.57],[77.46,67.76],[78.17,68.26],[77.63,68.91],[73.75,69.17],[73.52,69.76],[74.31,70.67],[73.02,71.42],[74.96,72.11],[74.83,72.83],[75.72,72.56],[75.24,71.38],[76.92,71.07],[79.11,71],[76.1,71.93],[78.1,71.88],[77.37,72.1],[78.54,72.4],[83.26,71.72],[82.26,71.26],[82.08,70.57],[82.35,70.2],[82.16,70.58],[83.12,70.89],[82.64,70.17],[83.11,70.07],[83.75,70.46],[83.15,71.24],[83.63,71.62],[80.72,72.53],[80.82,72.97],[80.23,73.17],[80.51,73.57],[87.09,73.86],[85.78,73.46],[86.78,72.99],[85.85,73.48],[87.66,73.89],[85.95,74.28],[87.13,74.37],[85.79,74.63],[86.03,74.81],[86.91,74.61],[87.79,75.02],[86.99,75.15],[94.16,75.94],[92.87,75.95],[93.16,76.1],[99.28,76.21],[99.77,76.03],[99.09,75.55],[100.19,75.17],[99.17,75.57],[99.88,76.09],[98.81,76.49],[102.23,76.38],[100.85,76.88],[104.27,77.68]]],[[[102.97,79.33],[102.39,78.83],[103.95,79.13],[105.41,78.56],[99.34,78.02],[101.62,78.98],[100.99,79.06],[101.55,79.35],[102.97,79.33]]],[[[97.61,80.17],[98.03,80.07],[97.19,79.7],[100.02,79.82],[99.04,79.29],[99.94,78.95],[97.3,78.85],[92.85,79.55],[97.61,80.17]]]]},"properties":{"name":"Russia"},"id":"RU"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[29.95,-2.31],[29.85,-2.76],[29.02,-2.74],[29.6,-1.39],[30.48,-1.06],[30.89,-2.08],[30.57,-2.4],[29.95,-2.31]]]]},"properties":{"name":"Rwanda"},"id":"RW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-63.03,18.02],[-63.14,18.06],[-63.01,18.07],[-63.03,18.02]]]]},"properties":{"name":"Saint Barthelemy"},"id":"BL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-5.66,-15.99],[-5.79,-15.99],[-5.7,-15.9],[-5.66,-15.99]]]]},"properties":{"name":"Saint Helena"},"id":"SH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-62.55,17.09],[-62.62,17.11],[-62.6,17.2],[-62.55,17.09]]],[[[-62.7,17.34],[-62.63,17.22],[-62.86,17.37],[-62.7,17.34]]]]},"properties":{"name":"Saint Kitts and Nevis"},"id":"KN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-63.17,18.16],[-62.97,18.27],[-62.99,18.23],[-63.17,18.16]]]]},"properties":{"name":"Anguilla"},"id":"AI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-60.95,13.71],[-61.08,13.88],[-60.93,14.11],[-60.95,13.71]]]]},"properties":{"name":"Saint Lucia"},"id":"LC"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-63.01,18.08],[-63.01,18.07],[-63.14,18.06],[-63.01,18.08]]]]},"properties":{"name":"Saint Martin"},"id":"MF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-56.15,46.76],[-56.24,46.76],[-56.17,46.81],[-56.15,46.76]]],[[[-56.27,46.99],[-56.37,46.78],[-56.39,47.12],[-56.27,46.99]]]]},"properties":{"name":"Saint Pierre and Miquelon"},"id":"PM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-61.17,13.13],[-61.28,13.21],[-61.18,13.38],[-61.17,13.13]]]]},"properties":{"name":"Saint Vincent and the Grenadines"},"id":"VC"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[12.42,43.96],[12.51,43.99],[12.46,43.9],[12.42,43.96]]]]},"properties":{"name":"San Marino"},"id":"SM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[6.52,0.02],[6.47,0.26],[6.69,0.4],[6.52,0.02]]],[[[7.42,1.56],[7.33,1.61],[7.41,1.7],[7.42,1.56]]]]},"properties":{"name":"Sao Tome and Principe"},"id":"ST"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[44.72,29.2],[46.55,29.1],[48.42,28.55],[48.84,27.62],[50.16,26.66],[49.99,26.02],[50.83,24.75],[51.22,24.62],[51.58,24.26],[52.58,22.94],[55.2,22.7],[55.67,22],[55,20],[52,19],[48.77,18.27],[46.33,15.62],[46.33,16.67],[44.47,17.41],[43.31,17.46],[42.79,16.38],[40.76,19.76],[39.18,21.1],[38.45,23.78],[37.44,24.37],[35.16,28.06],[34.57,28.09],[34.96,29.36],[36.07,29.19],[37.5,30],[38,30.5],[37.01,31.51],[39.2,32.15],[42.08,31.11],[44.72,29.2]]]]},"properties":{"name":"Saudi Arabia"},"id":"SA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-17.15,14.61],[-17.54,14.76],[-16.53,16.06],[-16.28,16.52],[-14.35,16.64],[-12.24,14.76],[-11.37,12.41],[-13.71,12.68],[-14.52,12.68],[-16.72,12.32],[-15.39,12.83],[-16.76,12.56],[-16.75,13.06],[-15.81,13.16],[-15.8,13.35],[-15.29,13.37],[-15.11,13.6],[-13.8,13.41],[-15.07,13.83],[-16.57,13.59],[-16.36,14.17],[-16.78,14.01],[-17.15,14.61]]]]},"properties":{"name":"Senegal"},"id":"SN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[20.07,42.56],[20.35,42.89],[19.23,43.51],[19.62,44.05],[19.04,44.86],[19.42,45.23],[18.82,45.91],[20.26,46.11],[21.51,45.15],[21.4,44.78],[22.48,44.71],[22.68,44.22],[22.37,43.83],[23,43.19],[22.37,42.32],[20.59,41.88],[20.07,42.56]]]]},"properties":{"name":"Serbia"},"id":"RS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[55.54,-4.76],[55.38,-4.63],[55.46,-4.55],[55.54,-4.76]]]]},"properties":{"name":"Seychelles"},"id":"SC"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-11.21,10],[-10.57,9.06],[-10.7,8.3],[-10.27,8.49],[-11.49,6.93],[-12.96,7.9],[-13.3,9.03],[-12.46,9.89],[-11.21,10]]]]},"properties":{"name":"Sierra Leone"},"id":"SL"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[103.99,1.38],[103.64,1.32],[103.71,1.43],[103.99,1.38]]]]},"properties":{"name":"Singapore"},"id":"SG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[17.25,48.02],[17.17,48.01],[16.95,48.62],[18.85,49.52],[22.56,49.08],[22.15,48.41],[20.66,48.56],[18.66,47.76],[17.25,48.02]]]]},"properties":{"name":"Slovakia"},"id":"SK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[105.58,23.06],[106.71,22.86],[106.69,22.03],[107.99,21.54],[106.64,21.02],[105.61,18.98],[108.83,15.42],[109.47,12.89],[109.27,11.89],[108,10.7],[107.27,10.38],[106.74,10.67],[106.42,10.31],[106.78,10.08],[106.29,10.25],[106.62,9.81],[106.12,10.24],[106.54,9.58],[105.82,10],[106.19,9.37],[105.02,8.59],[105.11,9.95],[104.45,10.42],[105.1,10.96],[106.2,10.77],[105.85,11.66],[107.55,12.35],[107.49,14.45],[107.55,14.71],[107.7,15.27],[107.18,15.78],[107.46,16.08],[106.69,16.46],[105.19,18.64],[103.88,19.29],[104.98,20],[104.38,20.44],[104.64,20.66],[103.17,20.85],[102.98,21.74],[102.14,22.4],[102.48,22.77],[103.96,22.5],[105.35,23.33],[105.58,23.06]]]]},"properties":{"name":"Vietnam"},"id":"VN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[13.72,46.53],[16.11,46.87],[16.61,46.48],[16.57,46.48],[15.65,46.22],[15.17,45.43],[13.59,45.48],[13.72,45.6],[13.38,46.3],[13.72,46.53]]]]},"properties":{"name":"Slovenia"},"id":"SI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[42.94,11],[43.25,11.47],[44.28,10.45],[44.9,10.42],[50.77,11.98],[51.28,11.84],[51.01,10.44],[51.41,10.45],[50.9,10.32],[50.84,9.43],[47.95,4.46],[43.49,0.65],[41.56,-1.67],[41,-0.87],[40.99,2.83],[41.91,3.98],[43.69,4.89],[44.95,4.9],[47.99,8],[44.01,9.01],[42.85,10.22],[42.94,11]]]]},"properties":{"name":"Somalia"},"id":"SO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[29.89,-22.19],[31.3,-22.41],[32.02,-24.46],[31.97,-25.96],[31.33,-25.75],[30.9,-26.31],[31.16,-27.2],[31.99,-27.32],[32.13,-26.84],[32.89,-26.85],[32.39,-28.54],[27.9,-33.04],[25.7,-34.03],[22.54,-34.01],[20,-34.82],[18.79,-34.09],[18.4,-34.3],[17.85,-32.83],[18.29,-32.62],[18.28,-31.89],[16.49,-28.58],[17.06,-28.03],[17.4,-28.71],[18.18,-28.91],[20,-28.42],[20,-24.77],[20.81,-25.88],[20.64,-26.83],[21.67,-26.86],[23.01,-25.3],[25.51,-25.68],[26.96,-23.75],[29.37,-22.19],[29.89,-22.19]],[[28.57,-28.61],[27.01,-29.63],[27.56,-30.4],[28.08,-30.65],[29.17,-29.91],[29.43,-29.28],[28.57,-28.61]]]]},"properties":{"name":"South Africa"},"id":"ZA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[32.99,-17.27],[32.7,-18.94],[33.02,-19.94],[32.49,-21.34],[31.3,-22.41],[29.89,-22.19],[29.37,-22.19],[28.02,-21.57],[27.71,-20.51],[26.17,-19.53],[25.26,-17.8],[27.04,-17.96],[28.93,-15.97],[30.42,-15.63],[30.42,-16.01],[32.98,-16.71],[32.99,-17.27]]]]},"properties":{"name":"Zimbabwe"},"id":"ZW"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-16.34,28.37],[-16.67,27.98],[-16.91,28.34],[-16.34,28.37]]],[[[3.25,39.73],[3.06,39.26],[2.36,39.56],[3.25,39.73]]],[[[-7.86,43.76],[-1.78,43.36],[1.45,42.6],[1.72,42.51],[3.18,42.44],[3.18,41.87],[0.96,41.03],[0.05,40.04],[-0.34,39.44],[0.21,38.73],[-0.72,37.61],[-2.13,36.73],[-4.4,36.72],[-5.33,36.16],[-5.36,36.16],[-6.04,36.18],[-6.36,36.86],[-7.43,37.25],[-6.95,39.03],[-7.53,39.67],[-7.02,39.67],[-6.93,41.02],[-6.19,41.58],[-6.59,41.95],[-8.2,41.87],[-8.75,41.95],[-9.21,43.15],[-7.86,43.76]]]]},"properties":{"name":"Spain"},"id":"ES"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-15.74,21.34],[-16.95,21.34],[-17.05,20.76],[-16.92,21.94],[-16.49,22.33],[-16.36,22.57],[-16.28,22.9],[-16.16,22.99],[-16.18,23.08],[-16.08,23.32],[-15.77,23.78],[-15.78,23.91],[-16.01,23.67],[-15.84,23.9],[-15.58,24.06],[-15.18,24.49],[-15.03,24.54],[-14.9,24.69],[-14.48,26.17],[-13.57,26.73],[-13.17,27.67],[-8.67,27.67],[-8.67,27.29],[-8.67,26],[-12,26],[-12,23.45],[-13.11,22.89],[-13,21.34],[-15.74,21.34]]]]},"properties":{"name":"Western Sahara"},"id":"EH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[31.45,22],[36.89,22],[37.43,18.86],[38.6,17.99],[37,17.07],[36.54,14.26],[36.14,12.71],[35.1,11.83],[34.86,10.73],[34.29,10.55],[34.12,8.58],[33.25,8.46],[32.99,7.92],[34.7,6.68],[35.94,4.62],[34.39,4.61],[34,4.22],[33.52,3.75],[30.86,3.49],[29.64,4.64],[28.36,4.29],[27.46,5.02],[25.25,7.85],[23.52,8.71],[23.67,9.87],[22.87,10.92],[22.47,12.62],[21.83,12.8],[22.94,15.56],[24,15.7],[24,19.5],[24,20],[25,20],[25,22],[31.45,22]]]]},"properties":{"name":"Sudan"},"id":"SD"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-55.13,5.82],[-54.03,5.82],[-54.17,5.35],[-54.48,4.75],[-54,3.45],[-54.6,2.33],[-55.97,2.53],[-55.9,1.89],[-56.47,1.94],[-58.05,4.01],[-57.25,5.49],[-56.97,6],[-55.13,5.82]]]]},"properties":{"name":"Suriname"},"id":"SR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[23.34,78.2],[23.06,78.02],[24.91,77.75],[22.64,77.25],[22.78,77.55],[20.86,77.46],[21.64,77.91],[20.9,78.11],[23.34,78.2]]],[[[21.5,78.57],[22.27,78.26],[20.12,78.47],[21.5,78.57]]],[[[16.82,79.87],[18.1,79.72],[17.64,79.37],[18.36,79.63],[18.92,79.16],[21.55,78.77],[18.97,78.46],[19.09,78.1],[16.61,76.57],[15.5,76.88],[16.52,77],[13.91,77.53],[16.22,77.43],[14.74,77.66],[17.01,77.93],[13.94,77.72],[13.59,78.05],[17.3,78.42],[16.33,78.45],[16.83,78.67],[15.46,78.45],[15.38,78.84],[13.01,78.2],[12.36,78.48],[13.2,78.54],[11.33,78.96],[12.51,78.91],[11.76,79.08],[12.11,79.3],[11.24,79.09],[10.68,79.54],[13.82,79.88],[12.45,79.57],[14.06,79.26],[13.89,79.54],[14.58,79.8],[16.45,78.9],[15.64,79.83],[16.82,79.87]]],[[[20.04,80.46],[22.23,79.98],[22.89,80.49],[23.36,80.43],[23.1,80.12],[24.84,80.35],[27.24,79.9],[23.51,79.18],[19.64,79.6],[22.31,79.8],[18.77,79.72],[17.78,80.13],[20.04,80.46]]]]},"properties":{"name":"Svalbard"},"id":"SJ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[30.9,-26.31],[31.33,-25.75],[31.97,-25.96],[32.13,-26.84],[31.99,-27.32],[31.16,-27.2],[30.9,-26.31]]]]},"properties":{"name":"Swaziland"},"id":"SZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[21.81,68.57],[23.67,67.94],[23.43,67.47],[24.01,66.8],[23.66,66.31],[24.17,65.81],[21.77,65.72],[22.2,65.55],[21.26,65.34],[21.62,65.14],[21.04,64.82],[21.58,64.44],[20.78,63.87],[18.21,62.78],[17.7,62.99],[18.05,62.6],[17.33,62.49],[17.65,62.23],[17.15,60.95],[19.08,59.76],[17.94,59.34],[17.59,59.81],[17.73,59.44],[16.02,59.49],[17.38,59.25],[18.65,59.32],[16.19,58.63],[16.94,58.48],[16.41,58.47],[16.82,58.2],[16.42,57.89],[16.69,57.47],[15.87,56.09],[14.7,56.16],[14.19,55.39],[12.98,55.4],[12.45,56.3],[12.89,56.64],[11.7,57.7],[11.8,58.32],[11.2,58.4],[11.11,59],[11.43,58.99],[11.82,59.85],[12.49,60.11],[12.21,61],[12.86,61.36],[12.12,61.73],[12.14,63.58],[13.99,64.02],[14.12,64.47],[13.66,64.58],[14.49,65.31],[14.5,66.13],[15.47,66.28],[16.73,67.9],[17.88,67.95],[18.09,68.51],[19.94,68.34],[20.35,68.79],[20.1,69.04],[20.58,69.06],[21.81,68.57]]]]},"properties":{"name":"Sweden"},"id":"SE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[7.7,47.54],[9.57,47.54],[9.53,47.27],[9.47,47.06],[9.6,47.06],[10.47,46.87],[10.13,46.23],[9.28,46.5],[9.04,45.84],[8.44,46.46],[7.86,45.92],[7.04,45.93],[6.79,46.43],[5.97,46.21],[6.99,47.5],[7.59,47.58],[7.7,47.54]]],[[[8.71,47.7],[8.68,47.69],[8.67,47.71],[8.71,47.7]]]]},"properties":{"name":"Switzerland"},"id":"CH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[42.36,37.11],[41.29,36.36],[41,34.42],[38.79,33.38],[36.84,32.31],[35.65,32.69],[35.62,33.25],[36.62,34.2],[35.97,34.65],[35.92,35.93],[36.69,36.24],[36.66,36.83],[42.36,37.11]]]]},"properties":{"name":"Syria"},"id":"SY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[74.92,37.24],[73.31,37.46],[71.68,36.68],[71.59,37.9],[70.97,38.47],[69.32,37.12],[67.78,37.19],[68.38,38.2],[67.44,39.48],[68.54,39.55],[69.01,40.09],[68.6,40.18],[70.42,41.05],[70.8,40.73],[70.38,40.38],[70.98,40.24],[69.54,40.13],[69.31,39.54],[73.66,39.45],[73.82,38.61],[74.86,38.47],[74.92,37.24]]]]},"properties":{"name":"Tajikistan"},"id":"TJ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[100.08,20.35],[100.09,20.35],[100.58,20.16],[100.5,19.53],[101.28,19.56],[100.92,17.57],[102.09,18.21],[102.68,17.82],[103.4,18.43],[104.72,17.5],[104.75,16.53],[105.64,15.66],[105.21,14.35],[103.18,14.33],[102.38,13.57],[102.92,11.64],[102.06,12.57],[100.85,12.68],[100.98,13.46],[100.07,13.42],[100.02,12.19],[99.15,10.37],[99.24,9.25],[99.85,9.3],[100.42,7.16],[102.1,6.24],[101.14,5.63],[100.65,6.45],[100.13,6.42],[98.66,8.38],[98.27,8.27],[98.74,10.35],[99.66,11.83],[99.17,13.73],[98.2,15.07],[98.93,16.39],[97.35,18.56],[97.77,18.57],[98.05,19.81],[100.08,20.35]]]]},"properties":{"name":"Thailand"},"id":"TH"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[1.4,9.43],[1.64,6.22],[1.2,6.1],[0.53,6.95],[0.73,8.32],[-0.15,11.14],[0.92,11],[0.78,10.38],[1.4,9.43]]]]},"properties":{"name":"Togo"},"id":"TG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-171.84,-9.21],[-171.86,-9.21],[-171.85,-9.17],[-171.84,-9.21]]]]},"properties":{"name":"Tokelau"},"id":"TK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-175.15,-21.18],[-175.36,-21.1],[-175.05,-21.14],[-175.15,-21.18]]]]},"properties":{"name":"Tonga"},"id":"TO"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-60.92,10.8],[-61.01,10.14],[-61.92,10.04],[-61.46,10.28],[-61.66,10.71],[-60.92,10.8]]],[[[-60.64,11.2],[-60.85,11.16],[-60.53,11.35],[-60.64,11.2]]]]},"properties":{"name":"Trinidad and Tobago"},"id":"TT"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[56.18,25.65],[56.27,25.64],[56.37,24.98],[56.04,24.94],[55.2,22.7],[52.58,22.94],[51.58,24.26],[54.12,24.14],[56.08,26.07],[56.18,25.65]]]]},"properties":{"name":"United Arab Emirates"},"id":"AE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[9.85,37.14],[10.38,36.72],[11.07,37.05],[10.46,36.12],[11.13,35.24],[10.01,34.17],[11.53,33.17],[11.57,32.44],[10.29,31.69],[10.21,30.73],[9.54,30.23],[9.06,32.1],[7.49,33.89],[8.25,34.64],[8.18,36.52],[8.62,36.94],[9.85,37.14]]]]},"properties":{"name":"Tunisia"},"id":"TN"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[35.1,41.96],[38.36,40.91],[40.15,40.92],[41.53,41.52],[42.83,41.58],[43.46,41.11],[43.66,40.11],[44.78,39.71],[44.81,39.63],[44.03,39.38],[44.79,37.15],[42.36,37.11],[36.66,36.83],[36.69,36.24],[35.92,35.93],[36.02,36.93],[32.81,36.03],[31.05,36.85],[29.68,36.12],[28.45,36.88],[27.38,36.68],[28.33,37.04],[27.25,36.97],[27.6,37.23],[27.19,37.35],[27.27,37.96],[26.28,38.26],[26.37,38.66],[27.16,38.44],[26.73,38.65],[26.95,39.55],[26.07,39.48],[26.71,40.38],[29.94,40.72],[29.17,41.23],[31.23,41.09],[33.33,42.02],[35.1,41.96]]],[[[27.39,42.01],[28.01,41.98],[29.04,41.06],[27.51,40.98],[26.18,40.05],[26.83,40.59],[26.04,40.74],[26.63,41.35],[26.36,41.71],[27.39,42.01]]]]},"properties":{"name":"Turkey"},"id":"TR"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[58.78,42.66],[60.01,42.22],[60.14,41.38],[61.87,41.13],[62.55,39.93],[64.38,38.95],[66.64,38],[66.54,37.37],[64.8,37.12],[64.5,36.28],[63.12,35.86],[62.72,35.25],[61.28,35.61],[61.16,36.65],[60.33,36.66],[59.34,37.54],[57.21,38.28],[53.91,37.35],[53.98,38.92],[53.16,39.18],[53.26,39.66],[53.73,39.52],[53.58,39.97],[53,39.76],[52.72,40.45],[52.92,41.08],[53.75,40.62],[54.73,41.1],[53.8,42.12],[52.95,41.97],[52.88,41.05],[52.44,41.74],[53.01,42.14],[54.17,42.34],[56,41.33],[57.04,41.26],[56.99,41.89],[58.78,42.66]]]]},"properties":{"name":"Turkmenistan"},"id":"TM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-71.66,21.82],[-71.66,21.74],[-71.85,21.85],[-71.66,21.82]]],[[[-71.88,21.85],[-72.03,21.94],[-71.91,21.94],[-71.88,21.85]]]]},"properties":{"name":"Turks and Caicos Islands"},"id":"TC"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[179.22,-8.55],[179.2,-8.46],[179.23,-8.5],[179.22,-8.55]]]]},"properties":{"name":"Tuvalu"},"id":"TV"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[34,4.22],[35.01,1.9],[33.91,0.1],[33.92,-1],[31.68,-1],[30.48,-1.06],[29.6,-1.39],[29.96,0.83],[31.3,2.12],[30.73,2.45],[30.86,3.49],[33.52,3.75],[34,4.22]]]]},"properties":{"name":"Uganda"},"id":"UG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[33.42,52.36],[34.42,51.81],[34.1,51.65],[34.38,51.26],[35.37,51.04],[35.61,50.37],[37.46,50.44],[38.02,49.9],[40.14,49.6],[39.7,49.01],[40.08,48.87],[39.66,48.62],[39.8,47.86],[38.85,47.86],[38.24,47.11],[35.91,46.65],[34.99,46.08],[35.34,46.32],[35.2,46.44],[35.21,46.39],[35.05,46.26],[34.7,46.18],[34.56,45.98],[33.67,46.22],[35.13,45.33],[35.34,45.33],[35.05,45.61],[34.76,46.02],[34.67,46.09],[34.83,46.07],[34.9,45.88],[35.05,45.65],[35.31,45.38],[35.48,45.29],[36.64,45.38],[33.96,44.38],[33.37,44.58],[33.54,45.11],[32.48,45.4],[33.61,46.15],[31.79,46.28],[32.06,46.4],[31.51,46.58],[32.36,46.46],[32.65,46.64],[32.02,46.63],[31.75,47.25],[31.91,46.65],[31.48,46.63],[31.59,46.8],[30.83,46.55],[30.25,45.88],[29.75,45.62],[29.63,45.82],[29.66,45.21],[28.21,45.45],[28.99,46.48],[30.12,46.39],[29.95,46.81],[29.14,47.99],[27.76,48.45],[26.63,48.26],[24.92,47.71],[22.89,47.95],[22.15,48.41],[22.56,49.08],[24.11,50.57],[23.6,51.53],[25.78,51.94],[30.55,51.25],[30.94,52.07],[31.78,52.11],[33.42,52.36]]]]},"properties":{"name":"Ukraine"},"id":"UA"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[20.82,40.91],[20.59,41.88],[22.37,42.32],[22.94,41.34],[20.98,40.86],[20.82,40.91]]]]},"properties":{"name":"Macedonia"},"id":"MK"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[25.32,31.5],[29.07,30.82],[31.03,31.6],[31.92,31.53],[32.14,31.07],[34.22,31.32],[34.27,31.22],[34.9,29.49],[34.25,27.73],[33.24,28.55],[32.57,30.01],[32.34,29.6],[35.81,23.92],[35.48,23.94],[35.67,22.97],[36.89,22],[31.45,22],[25,22],[24.71,30.17],[25.15,31.65],[25.32,31.5]]]]},"properties":{"name":"Egypt"},"id":"EG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-6.35,55.24],[-5.43,54.48],[-6.27,54.1],[-8.16,54.44],[-7.41,54.95],[-7.25,55.07],[-6.35,55.24]]],[[[-5.78,56.51],[-6.37,56.31],[-6.32,56.6],[-5.78,56.51]]],[[[-6.14,57.57],[-5.66,57.2],[-6.79,57.45],[-6.14,57.57]]],[[[-6.2,58.36],[-7.12,57.82],[-7.04,58.23],[-6.2,58.36]]],[[[-3.01,58.63],[-4.44,57.57],[-1.77,57.46],[-3.28,56.36],[-2.58,56.27],[-3.73,56.03],[-1.63,55.58],[-1.3,54.76],[-0.07,54.11],[0.12,53.56],[-0.72,53.7],[0.24,53.4],[0.000037000000134,52.88],[1.68,52.75],[1.59,52.08],[0.38,51.45],[1.41,51.18],[-5.68,50.04],[-4.23,51.19],[-3.03,51.21],[-2.38,51.76],[-3.35,51.38],[-5.25,51.73],[-4.13,52.33],[-4.13,52.91],[-4.76,52.79],[-4.2,53.21],[-2.7,53.35],[-3.11,53.55],[-2.81,54.22],[-3.63,54.51],[-3.04,54.98],[-4.95,54.65],[-5.17,55],[-4.61,55.49],[-4.92,55.7],[-4.88,55.94],[-4.48,55.92],[-4.83,56.11],[-5.3,55.85],[-5.03,56.23],[-5.78,55.3],[-5.12,56.82],[-6.24,56.71],[-5.4,57.11],[-5.82,57.82],[-5.1,57.85],[-5.46,58.08],[-5,58.62],[-3.01,58.63]]],[[[-2.79,58.95],[-3.19,58.91],[-3.35,59.11],[-2.79,58.95]]],[[[-1.3,60.49],[-1.27,59.85],[-1.69,60.28],[-1.3,60.49]]]]},"properties":{"name":"United Kingdom"},"id":"GB"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-2.59,49.42],[-2.67,49.43],[-2.5,49.51],[-2.59,49.42]]]]},"properties":{"name":"Guernsey"},"id":"GG"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-2.01,49.21],[-2.21,49.18],[-2.25,49.25],[-2.01,49.21]]]]},"properties":{"name":"Jersey"},"id":"JE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-4.78,54.06],[-4.35,54.41],[-4.39,54.19],[-4.78,54.06]]]]},"properties":{"name":"Isle of Man"},"id":"IM"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[31.68,-1],[33.92,-1],[37.6,-3],[37.61,-3.5],[39.2,-4.67],[38.78,-6.05],[39.55,-6.99],[39.39,-8.9],[40.44,-10.48],[37.46,-11.73],[34.97,-11.57],[34.33,-9.73],[33.13,-9.49],[32.94,-9.41],[30.77,-8.19],[29.55,-6.3],[29.42,-4.45],[30.83,-3.26],[30.57,-2.4],[30.89,-2.08],[30.48,-1.06],[31.68,-1]]]]},"properties":{"name":"Tanzania"},"id":"TZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-155.01,19.33],[-155.86,19.03],[-155.86,20.27],[-155.16,19.96],[-155.01,19.33]]],[[[-156.47,20.9],[-155.99,20.75],[-156.42,20.59],[-156.47,20.9]]],[[[-157.73,21.41],[-158.1,21.3],[-158.27,21.58],[-157.73,21.41]]],[[[-159.43,21.88],[-159.79,22.06],[-159.35,22.22],[-159.43,21.88]]],[[[-95.08,49.36],[-94.61,48.72],[-91.42,48.04],[-88.37,48.31],[-84.13,46.53],[-82.54,45.36],[-82.13,43.59],[-83.17,42.05],[-82.7,41.68],[-78.99,42.82],[-79.18,43.47],[-78.72,43.63],[-76.8,43.63],[-74.99,44.99],[-70.88,45.24],[-69.23,47.47],[-67.79,47.07],[-67.8,45.7],[-67.21,45.18],[-67.19,44.66],[-68.8,44.58],[-70.73,43.12],[-70.58,42.65],[-71.04,42.31],[-69.94,41.67],[-71.19,41.47],[-71.39,41.81],[-71.51,41.37],[-74,40.71],[-73.96,41.31],[-74.42,39.36],[-74.96,38.92],[-75.56,39.62],[-75.03,40.01],[-75.59,39.65],[-75.04,38.42],[-75.96,37.15],[-75.64,37.96],[-76.36,38.86],[-75.83,39.58],[-76.62,39.25],[-76.31,38.05],[-77.24,38.4],[-77.06,38.91],[-77.32,38.35],[-76.24,37.9],[-76.35,37.62],[-77.13,38.17],[-76.27,37.08],[-77.23,37.3],[-75.99,36.91],[-75.53,35.8],[-75.94,36.72],[-75.79,36.07],[-76.71,36.26],[-76.73,35.94],[-75.72,35.81],[-76.15,35.34],[-77.05,35.53],[-76.47,35.27],[-76.94,34.98],[-76.34,34.89],[-77.43,34.74],[-77.93,33.93],[-78.83,33.73],[-80.47,32.32],[-80.84,32.52],[-81.5,31.13],[-80.03,26.79],[-80.4,25.18],[-81.09,25.12],[-81.74,25.96],[-81.78,26.71],[-82.06,26.54],[-82.66,27.46],[-82.42,27.92],[-82.85,27.86],[-82.63,28.88],[-83.67,29.91],[-85.35,29.68],[-86.26,30.5],[-88.02,30.22],[-88.02,30.7],[-88.13,30.31],[-90.42,30.2],[-89.4,30.05],[-89.75,29.63],[-89.01,29.18],[-89.4,28.93],[-90.18,29.57],[-90.21,29.09],[-91.25,29.24],[-91.84,29.83],[-92.31,29.54],[-93.85,29.99],[-93.86,29.68],[-94.77,29.36],[-94.48,29.56],[-95.06,29.72],[-95.14,29.06],[-96.21,28.49],[-96.64,28.72],[-96.4,28.44],[-97.52,27.87],[-97.41,27.33],[-97.77,27.46],[-97.14,25.97],[-99.1,26.43],[-99.51,27.57],[-101.41,29.77],[-102.31,29.89],[-103.38,29.02],[-106.4,31.75],[-111.05,31.33],[-113.05,31.97],[-114.72,32.72],[-117.12,32.54],[-118.53,34.05],[-120.62,34.57],[-120.61,35.14],[-122.49,37.52],[-122.39,37.82],[-122.01,37.47],[-122.39,37.96],[-122.24,38.06],[-121.42,38.01],[-122.37,38.16],[-122.49,37.83],[-123,38.01],[-124.33,40.27],[-124.04,41.43],[-124.52,42.87],[-123.95,46.18],[-123.16,46.2],[-124,46.32],[-123.8,46.98],[-124.16,46.94],[-124.72,48.4],[-122.75,48.16],[-123.15,47.37],[-122.45,47.77],[-122.88,47.06],[-122.31,47.4],[-122.76,49],[-95.15,49],[-95.08,49.36]]],[[[-156.45,71.26],[-155.59,71.16],[-155.97,70.76],[-155.09,71.15],[-152.25,70.84],[-152.5,70.65],[-152.08,70.57],[-152.63,70.56],[-151.97,70.44],[-143.28,70.12],[-141,69.64],[-141,60.31],[-139.07,60.35],[-137.48,58.91],[-135.47,59.8],[-133.43,58.46],[-131.82,56.6],[-130.02,55.91],[-130.17,55.75],[-130.14,55.54],[-129.99,55.28],[-130.36,54.91],[-130.69,54.76],[-131.01,55],[-130.46,55.33],[-131.06,55.12],[-130.61,55.3],[-131.01,56.11],[-132.16,55.58],[-131.77,56.2],[-133.51,57.19],[-133.06,57.35],[-133.64,57.7],[-133,57.51],[-133.56,57.9],[-133.12,57.86],[-134.05,58.07],[-133.77,58.52],[-134.76,58.38],[-135.34,59.47],[-135.09,58.23],[-135.92,58.38],[-135.77,58.9],[-137.06,59.07],[-136.03,58.39],[-136.65,58.22],[-139.71,59.5],[-139.49,59.98],[-139.29,59.57],[-138.89,59.81],[-139.5,60.03],[-140.4,59.7],[-141.39,60.14],[-143.92,59.99],[-144.94,60.3],[-144.61,60.72],[-145.29,60.35],[-146.65,60.7],[-146.12,60.84],[-146.76,60.96],[-146.3,61.13],[-147.87,60.83],[-147.72,61.28],[-148.7,60.79],[-148.2,60.63],[-148.68,60.45],[-147.94,60.46],[-148.44,59.95],[-149.42,60.12],[-150.91,59.24],[-151.98,59.28],[-150.99,59.78],[-151.88,59.75],[-151.41,60.73],[-149.03,60.85],[-150.06,61.15],[-149.42,61.51],[-153.1,60.29],[-152.58,60.06],[-154.26,59.14],[-153.27,58.85],[-156.55,56.98],[-158.42,56.44],[-158.12,56.23],[-158.51,55.99],[-161.25,55.35],[-161.56,55.62],[-161.97,55.1],[-162.63,55.3],[-162.56,54.96],[-163.36,54.81],[-161.8,55.89],[-160.25,55.77],[-160.35,56.29],[-157.4,57.49],[-157.61,58.09],[-157.14,58.16],[-157.55,58.38],[-156.78,59.15],[-158.19,58.61],[-158.49,59],[-157.99,58.9],[-158.54,59.18],[-158.9,58.4],[-160.33,59.06],[-162.17,58.65],[-161.57,59.1],[-161.99,59.14],[-161.71,59.5],[-162.24,60.06],[-162.15,60.25],[-162.37,60.18],[-161.88,60.7],[-162.57,60.32],[-162.52,59.99],[-164.07,59.82],[-165.43,60.56],[-163.55,60.9],[-165.15,60.93],[-164.82,61.11],[-165.12,61.08],[-165.14,61.26],[-165.16,61.17],[-165.37,61.2],[-165.29,61.25],[-165.15,61.42],[-165.06,61.42],[-165,61.47],[-164.85,61.49],[-164.72,61.63],[-164.76,61.63],[-165.02,61.5],[-165.08,61.43],[-165.16,61.43],[-165.29,61.33],[-165.27,61.31],[-165.31,61.26],[-165.41,61.21],[-165.34,61.16],[-165.39,61.07],[-166.2,61.59],[-165.25,62.45],[-164.64,62.42],[-164.48,62.75],[-164.88,62.84],[-164.41,63.21],[-161.15,63.51],[-160.78,63.87],[-161.53,64.42],[-160.78,64.72],[-162.79,64.34],[-166.12,64.57],[-166.96,65.19],[-166.06,65.26],[-168.13,65.67],[-164.35,66.59],[-163.63,66.57],[-164.19,66.2],[-163.66,66.07],[-161,66.2],[-161.91,66.27],[-162.64,66.87],[-162.34,66.96],[-161.6,66.45],[-160.23,66.4],[-161.51,66.53],[-161.9,66.73],[-161.5,66.98],[-162.35,67.16],[-163.73,67.11],[-164.12,67.61],[-166.83,68.35],[-166.22,68.88],[-163.65,69.11],[-161.94,70.31],[-159.94,70.59],[-159.84,70.27],[-159.29,70.53],[-160.12,70.62],[-159.67,70.8],[-156.45,71.26]]]]},"properties":{"name":"United States"},"id":"US"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-64.76,17.77],[-64.56,17.75],[-64.9,17.68],[-64.76,17.77]]]]},"properties":{"name":"Virgin Islands"},"id":"VI"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-2.83,11],[-2.69,9.48],[-3.63,9.95],[-4.7,9.7],[-5.52,10.44],[-5.27,11.84],[-4.42,12.3],[-3.96,13.5],[-3.44,13.17],[-2.47,14.29],[-0.73,15.08],[0.24,14.92],[0.6,13.7],[1.29,13.35],[0.99,13.05],[2.14,12.69],[2.4,11.9],[0.92,11],[-0.15,11.14],[-2.83,11]]]]},"properties":{"name":"Burkina Faso"},"id":"BF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-57.81,-30.75],[-57.61,-30.18],[-56.81,-30.11],[-56.01,-31.08],[-55.58,-30.85],[-53.88,-31.97],[-53.09,-32.73],[-53.52,-33.15],[-53.37,-33.74],[-54.15,-34.67],[-56.32,-34.91],[-57.12,-34.46],[-57.84,-34.49],[-58.4,-33.93],[-58.36,-33.13],[-58.15,-33.1],[-58.05,-32.93],[-58.2,-32.45],[-57.81,-30.75]]]]},"properties":{"name":"Uruguay"},"id":"UY"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[64.38,38.95],[62.55,39.93],[61.87,41.13],[60.14,41.38],[60.01,42.22],[58.78,42.66],[56.99,41.89],[57.04,41.26],[56,41.33],[56,45],[58.57,45.57],[62.03,43.48],[64.93,43.74],[66.12,43],[66.03,42],[66.53,42],[66.72,41.17],[67.94,41.18],[68.46,40.6],[69.06,41.38],[70.97,42.25],[71.28,42.2],[70.19,41.53],[71.42,41.12],[71.69,41.56],[73.17,40.82],[70.98,40.24],[70.38,40.38],[70.8,40.73],[70.42,41.05],[68.6,40.18],[69.01,40.09],[68.54,39.55],[67.44,39.48],[68.38,38.2],[67.78,37.19],[66.54,37.37],[66.64,38],[64.38,38.95]]]]},"properties":{"name":"Uzbekistan"},"id":"UZ"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-69.77,11.7],[-68.42,11.18],[-68.16,10.5],[-66.24,10.64],[-65.08,10.06],[-63.7,10.49],[-64.26,10.66],[-61.88,10.73],[-62.92,10.53],[-62.62,10.12],[-63.02,10.1],[-60.85,9.44],[-61.6,8.55],[-59.99,8.54],[-59.83,8.24],[-60.72,7.54],[-60.29,7.06],[-61.13,6.71],[-61.39,5.94],[-60.73,5.2],[-60.99,4.52],[-62.75,4.03],[-62.88,3.56],[-64.8,4.28],[-64.05,2.48],[-63.39,2.15],[-65.52,0.65],[-66.87,1.22],[-67.19,2.39],[-67.83,2.83],[-67.29,3.4],[-67.86,4.56],[-67.45,6.19],[-69.25,6.08],[-70.12,6.98],[-72,7.02],[-72.78,9.08],[-73.38,9.17],[-72.49,11.12],[-71.98,11.66],[-71.32,11.85],[-71.97,11.56],[-71.58,10.71],[-72.13,9.81],[-71.62,9.04],[-71.06,9.34],[-71.5,10.96],[-69.8,11.43],[-70.24,11.63],[-70.03,12.2],[-69.77,11.7]]]]},"properties":{"name":"Venezuela"},"id":"VE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-178.04,-14.32],[-178.14,-14.32],[-178.19,-14.24],[-178.04,-14.32]]],[[[-176.16,-13.35],[-176.16,-13.21],[-176.12,-13.26],[-176.16,-13.35]]]]},"properties":{"name":"Wallis and Futuna"},"id":"WF"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-171.43,-14.02],[-172.06,-13.87],[-171.82,-13.81],[-171.43,-14.02]]],[[[-172.29,-13.49],[-172.21,-13.81],[-172.78,-13.53],[-172.29,-13.49]]]]},"properties":{"name":"Samoa"},"id":"WS"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[52.23,15.67],[43.96,12.59],[43.25,13.21],[42.79,16.38],[43.31,17.46],[44.47,17.41],[46.33,16.67],[46.33,15.62],[48.77,18.27],[52,19],[53.11,16.64],[52.3,16.27],[52.23,15.67]]]]},"properties":{"name":"Yemen"},"id":"YE"},
+{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[24.97,-17.56],[23.48,-17.63],[22,-16.17],[22,-13],[24.02,-13.01],[23.99,-10.87],[24.45,-11.46],[25.33,-11.19],[26,-11.9],[26.87,-11.97],[27.2,-11.57],[29.02,-13.4],[29.8,-13.45],[29.81,-12.16],[29.03,-12.38],[28.36,-11.55],[28.7,-10.65],[28.37,-9.26],[28.9,-8.48],[30.77,-8.19],[32.94,-9.41],[33.7,-10.56],[33.25,-10.89],[33.55,-12.36],[32.68,-13.61],[33.22,-14.01],[30.21,-14.98],[30.42,-15.63],[28.93,-15.97],[27.04,-17.96],[25.26,-17.8],[24.97,-17.56]]]]},"properties":{"name":"Zambia"},"id":"ZM"}]}
Index: /Dev/trunk/d3/examples/delaunay/delaunay.html
===================================================================
--- /Dev/trunk/d3/examples/delaunay/delaunay.html	(revision 76)
+++ /Dev/trunk/d3/examples/delaunay/delaunay.html	(revision 76)
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Delaunay Triangulation</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <style type="text/css">
+
+@import url("../../lib/colorbrewer/colorbrewer.css");
+
+path {
+  stroke: #000;
+  stroke-width: .5px;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500;
+
+var vertices = d3.range(500).map(function(d) {
+  return [Math.random() * w, Math.random() * h];
+});
+
+var svg = d3.select("body")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+    .attr("class", "PiYG");
+
+svg.append("svg:g")
+  .selectAll("path")
+    .data(d3.geom.delaunay(vertices))
+  .enter().append("svg:path")
+    .attr("class", function(d, i) { return "q" + (i % 9) + "-9"; })
+    .attr("d", function(d) { return "M" + d.join("L") + "Z"; });
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/donut/donut.html
===================================================================
--- /Dev/trunk/d3/examples/donut/donut.html	(revision 76)
+++ /Dev/trunk/d3/examples/donut/donut.html	(revision 76)
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Donut Chart</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 400,
+    h = 400,
+    r1 = Math.min(w, h) / 2,
+    r0 = r1 * .6,
+    n = 10,
+    q = 0,
+    data0 = d3.range(n).map(Math.random),
+    data1 = d3.range(n).map(Math.random),
+    data,
+    color = d3.scale.category20(),
+    arc = d3.svg.arc(),
+    donut = d3.layout.pie();
+
+var vis = d3.select("body")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+vis.selectAll("g.arc")
+    .data(arcs(data0, data1))
+  .enter().append("svg:g")
+    .attr("class", "arc")
+    .attr("transform", "translate(" + r1 + "," + r1 + ")")
+  .append("svg:path")
+    .attr("fill", function(d, i) { return color(i); })
+    .attr("d", arc);
+
+window.addEventListener("keypress", swap, false);
+
+function arcs(data0, data1) {
+  var arcs0 = donut(data0),
+      arcs1 = donut(data1),
+      i = -1,
+      arc;
+  while (++i < n) {
+    arc = arcs0[i];
+    arc.innerRadius = r0;
+    arc.outerRadius = r1;
+    arc.next = arcs1[i];
+  }
+  return arcs0;
+}
+
+function swap() {
+  d3.selectAll("g.arc > path")
+      .data(++q & 1 ? arcs(data0, data1) : arcs(data1, data0))
+      .each(transitionSplit);
+}
+
+// 1. Wedges split into two rings.
+function transitionSplit(d, i) {
+  d3.select(this)
+    .transition().duration(1000)
+      .attrTween("d", tweenArc({
+        innerRadius: i & 1 ? r0 : (r0 + r1) / 2,
+        outerRadius: i & 1 ? (r0 + r1) / 2 : r1
+      }))
+      .each("end", transitionRotate);
+}
+
+// 2. Wedges translate to be centered on their final position.
+function transitionRotate(d, i) {
+  var a0 = d.next.startAngle + d.next.endAngle,
+      a1 = d.startAngle - d.endAngle;
+  d3.select(this)
+    .transition().duration(1000)
+      .attrTween("d", tweenArc({
+        startAngle: (a0 + a1) / 2,
+        endAngle: (a0 - a1) / 2
+      }))
+      .each("end", transitionResize);
+}
+
+// 3. Wedges then update their values, changing size.
+function transitionResize(d, i) {
+  d3.select(this)
+    .transition().duration(1000)
+      .attrTween("d", tweenArc({
+        startAngle: d.next.startAngle,
+        endAngle: d.next.endAngle
+      }))
+      .each("end", transitionUnite);
+}
+
+// 4. Wedges reunite into a single ring.
+function transitionUnite(d, i) {
+  d3.select(this)
+    .transition().duration(1000)
+      .attrTween("d", tweenArc({
+        innerRadius: r0,
+        outerRadius: r1
+      }));
+}
+
+function tweenArc(b) {
+  return function(a) {
+    var i = d3.interpolate(a, b);
+    for (var key in b) a[key] = b[key]; // update data
+    return function(t) {
+      return arc(i(t));
+    };
+  };
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/dot/dot.html
===================================================================
--- /Dev/trunk/d3/examples/dot/dot.html	(revision 76)
+++ /Dev/trunk/d3/examples/dot/dot.html	(revision 76)
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Dot Plot</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+path.dot {
+  fill: white;
+  stroke-width: 1.5px;
+}
+
+rect {
+  fill: none;
+  stroke: black;
+  shape-rendering: crispEdges;
+}
+
+.x line, .y line {
+  stroke: #ccc;
+  shape-rendering: crispEdges;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var data = d3.range(100).map(function(i) {
+  return {x: i / 99, y: Math.random()};
+});
+
+var w = 450,
+    h = 450,
+    p = 20,
+    x = d3.scale.linear().range([0, w]),
+    y = d3.scale.linear().range([h, 0]),
+    symbol = d3.scale.ordinal().range(d3.svg.symbolTypes),
+    color = d3.scale.category10();
+
+var vis = d3.select("body")
+  .append("svg:svg")
+    .attr("width", w + p * 2)
+    .attr("height", h + p * 2)
+  .append("svg:g")
+    .attr("transform", "translate(" + p + "," + p + ")");
+
+var xrule = vis.selectAll("g.x")
+    .data(x.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "x");
+
+xrule.append("svg:line")
+    .attr("x1", x)
+    .attr("x2", x)
+    .attr("y1", 0)
+    .attr("y2", h);
+
+xrule.append("svg:text")
+    .attr("x", x)
+    .attr("y", h + 3)
+    .attr("dy", ".71em")
+    .attr("text-anchor", "middle")
+    .text(x.tickFormat(10));
+
+var yrule = vis.selectAll("g.y")
+    .data(y.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "y");
+
+yrule.append("svg:line")
+    .attr("x1", 0)
+    .attr("x2", w)
+    .attr("y1", y)
+    .attr("y2", y);
+
+yrule.append("svg:text")
+    .attr("x", -3)
+    .attr("y", y)
+    .attr("dy", ".35em")
+    .attr("text-anchor", "end")
+    .text(y.tickFormat(10));
+
+vis.append("svg:rect")
+    .attr("width", w)
+    .attr("height", h);
+
+vis.selectAll("path.dot")
+    .data(data)
+  .enter().append("svg:path")
+    .attr("class", "dot")
+    .attr("stroke", function(d, i) { return color(i); })
+    .attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; })
+    .attr("d", d3.svg.symbol()
+    .type(function(d, i) { return symbol(i); }));
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/force/README
===================================================================
--- /Dev/trunk/d3/examples/force/README	(revision 76)
+++ /Dev/trunk/d3/examples/force/README	(revision 76)
@@ -0,0 +1,10 @@
+The miserables.json file contains the weighted network of coappearances of
+characters in Victor Hugo's novel /Les Miserables/. Nodes represent characters
+as indicated by the labels, and edges connect any pair of characters that
+appear in the same chapter of the book. The values on the edges are the number
+of such coappearances. The data on coappearances were taken from D. E. Knuth,
+"The Stanford GraphBase: A Platform for Combinatorial Computing",
+Addison-Wesley, Reading, MA (1993).
+
+The group labels were transcribed from "Finding and evaluating community
+structure in networks" by M. E. J. Newman and M. Girvan.
Index: /Dev/trunk/d3/examples/force/force-cluster.html
===================================================================
--- /Dev/trunk/d3/examples/force/force-cluster.html	(revision 76)
+++ /Dev/trunk/d3/examples/force/force-cluster.html	(revision 76)
@@ -0,0 +1,251 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Clustered Network</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+svg {
+  border: 1px solid #ccc;
+}
+body {
+  font: 10px sans-serif;
+}
+circle.node {
+  fill: lightsteelblue;
+  stroke: #fff;
+  stroke-width: 1.5px;
+}
+path.hull {
+  fill: lightsteelblue;
+  fill-opacity: 0.3;
+}
+line.link {
+  stroke: #333;
+  stroke-opacity: 0.5;
+  pointer-events: none;
+}
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+var w = 960,     // svg width
+    h = 600,     // svg height
+    dr = 4,      // default point radius
+    off = 15,    // cluster hull offset
+    expand = {}, // expanded clusters
+    data, net, force, hullg, hull, linkg, link, nodeg, node,
+    curve = d3.svg.line().interpolate("cardinal-closed").tension(.85),
+    fill = d3.scale.category20();
+
+function noop() { return false; }
+
+function nodeid(n) {
+  return n.size ? "_g_"+n.group : n.name;
+}
+
+function linkid(l) {
+  var u = nodeid(l.source),
+      v = nodeid(l.target);
+  return u<v ? u+"|"+v : v+"|"+u;
+}
+
+function getGroup(n) { return n.group; }
+
+// constructs the network to visualize
+function network(data, prev, index, expand) {
+  expand = expand || {};
+  var gm = {},    // group map
+      nm = {},    // node map
+      lm = {},    // link map
+      gn = {},    // previous group nodes
+      gc = {},    // previous group centroids
+      nodes = [], // output nodes
+      links = []; // output links
+
+  // process previous nodes for reuse or centroid calculation
+  if (prev) {
+    prev.nodes.forEach(function(n) {
+      var i = index(n), o;
+      if (n.size > 0) {
+        gn[i] = n;
+        n.size = 0;
+      } else {
+        o = gc[i] || (gc[i] = {x:0,y:0,count:0});
+        o.x += n.x;
+        o.y += n.y;
+        o.count += 1;
+      }
+    });
+  }
+
+  // determine nodes
+  for (var k=0; k<data.nodes.length; ++k) {
+    var n = data.nodes[k],
+        i = index(n);
+
+    if (expand[i]) {
+      // the node should be directly visible
+      nm[n.name] = nodes.length;
+      nodes.push(n);
+      if (gn[i]) {
+        // place new nodes at cluster location (plus jitter)
+        n.x = gn[i].x + Math.random();
+        n.y = gn[i].y + Math.random();
+      }
+    } else {
+      // the node is part of a collapsed cluster
+      var l = gm[i] || (gm[i]=gn[i]) || (gm[i]={group:i, size:0, nodes:[]});
+      if (l.size == 0) {
+        // if new cluster, add to set and position at centroid of leaf nodes
+        nm[i] = nodes.length;
+        nodes.push(l);
+        if (gc[i]) {
+          l.x = gc[i].x / gc[i].count;
+          l.y = gc[i].y / gc[i].count;
+        }
+      }
+      l.size += 1;
+      l.nodes.push(n);
+    }
+  }
+
+  // determine links
+  for (k=0; k<data.links.length; ++k) {
+    var e = data.links[k],
+        u = index(e.source),
+        v = index(e.target);
+    u = expand[u] ? nm[e.source.name] : nm[u];
+    v = expand[v] ? nm[e.target.name] : nm[v];
+    var i = (u<v ? u+"|"+v : v+"|"+u),
+        l = lm[i] || (lm[i] = {source:u, target:v, size:0});
+    l.size += 1;
+  }
+  for (i in lm) { links.push(lm[i]); }
+
+  return {nodes: nodes, links: links};
+}
+
+function convexHulls(nodes, index, offset) {
+  var h = {};
+
+  // create point sets
+  for (var k=0; k<nodes.length; ++k) {
+    var n = nodes[k];
+    if (n.size) continue;
+    var i = index(n),
+        l = h[i] || (h[i] = []);
+    l.push([n.x-offset, n.y-offset]);
+    l.push([n.x-offset, n.y+offset]);
+    l.push([n.x+offset, n.y-offset]);
+    l.push([n.x+offset, n.y+offset]);
+  }
+
+  // create convex hulls
+  var hulls = [];
+  for (i in h) {
+    hulls.push({group: i, path: d3.geom.hull(h[i])});
+  }
+
+  return hulls;
+}
+
+function drawCluster(d) {
+  return curve(d.path); // 0.8
+}
+
+// --------------------------------------------------------
+
+var body = d3.select("body");
+
+var vis = body.append("svg:svg")
+   .attr("width", w)
+   .attr("height", h);
+
+d3.json("miserables.json", function(json) {
+  data = json;
+  for (var i=0; i<data.links.length; ++i) {
+    o = data.links[i];
+    o.source = data.nodes[o.source];
+    o.target = data.nodes[o.target];
+  }
+
+  hullg = vis.append("svg:g");
+  linkg = vis.append("svg:g");
+  nodeg = vis.append("svg:g");
+
+  init();
+
+  vis.attr("opacity", 1e-6)
+    .transition()
+      .duration(1000)
+      .attr("opacity", 1);
+});
+
+function init() {
+  if (force) force.stop();
+
+  net = network(data, net, getGroup, expand);
+
+  force = d3.layout.force()
+      .nodes(net.nodes)
+      .links(net.links)
+      .size([w, h])
+      .linkDistance(50)
+      .start();
+
+  hullg.selectAll("path.hull").remove();
+  hull = hullg.selectAll("path.hull")
+     .data(convexHulls(net.nodes, getGroup, off))
+    .enter().append("svg:path")
+     .attr("class", "hull")
+     .attr("d", drawCluster)
+     .style("fill", function(d) { return fill(d.group); })
+     .on("dblclick", function(d) { expand[d.group] = false; init(); });
+
+  link = linkg.selectAll("line.link").data(net.links, linkid);
+  link.exit().remove();
+  link.enter().append("svg:line")
+      .attr("class", "link")
+      .attr("x1", function(d) { return d.source.x; })
+      .attr("y1", function(d) { return d.source.y; })
+      .attr("x2", function(d) { return d.target.x; })
+      .attr("y2", function(d) { return d.target.y; })
+      .style("stroke-width", function(d) { return d.size || 1; });
+  link = linkg.selectAll("line.link");
+
+  node = nodeg.selectAll("circle.node").data(net.nodes, nodeid);
+  node.exit().remove();
+  node.enter().append("svg:circle")
+      .attr("class", function(d) { return "node" + (d.size?"":" leaf"); })
+      .attr("r", function(d) { return d.size ? d.size + dr : dr+1; })
+      .attr("cx", function(d) { return d.x; })
+      .attr("cy", function(d) { return d.y; })
+      .style("fill", function(d) { return fill(d.group); })
+      .on("dblclick", function(d) {
+        if (d.size) { expand[d.group] = true; init(); }
+      });
+
+  node = nodeg.selectAll("circle.node")
+      .call(force.drag);
+
+  force.on("tick", function() {
+    if (!hull.empty()) {
+      hull.data(convexHulls(net.nodes, getGroup, off))
+          .attr("d", drawCluster);
+    }
+
+    link.attr("x1", function(d) { return d.source.x; })
+        .attr("y1", function(d) { return d.source.y; })
+        .attr("x2", function(d) { return d.target.x; })
+        .attr("y2", function(d) { return d.target.y; });
+
+    node.attr("cx", function(d) { return d.x; })
+        .attr("cy", function(d) { return d.y; });
+  });
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/force/force-dynamic.html
===================================================================
--- /Dev/trunk/d3/examples/force/force-dynamic.html	(revision 76)
+++ /Dev/trunk/d3/examples/force/force-dynamic.html	(revision 76)
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Force-Directed Layout (Dynamic)</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+rect {
+  fill: #fff;
+}
+
+.node {
+  fill: #000;
+}
+
+.cursor {
+  fill: none;
+  stroke: brown;
+  pointer-events: none;
+}
+
+.link {
+  stroke: #999;
+}
+
+    </style>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500,
+    fill = d3.scale.category20(),
+    nodes = [],
+    links = [];
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+vis.append("svg:rect")
+    .attr("width", w)
+    .attr("height", h);
+
+var force = d3.layout.force()
+    .distance(30)
+    .nodes(nodes)
+    .links(links)
+    .size([w, h]);
+
+var cursor = vis.append("svg:circle")
+    .attr("r", 30)
+    .attr("transform", "translate(-100,-100)")
+    .attr("class", "cursor");
+
+force.on("tick", function() {
+  vis.selectAll("line.link")
+      .attr("x1", function(d) { return d.source.x; })
+      .attr("y1", function(d) { return d.source.y; })
+      .attr("x2", function(d) { return d.target.x; })
+      .attr("y2", function(d) { return d.target.y; });
+
+  vis.selectAll("circle.node")
+      .attr("cx", function(d) { return d.x; })
+      .attr("cy", function(d) { return d.y; });
+});
+
+vis.on("mousemove", function() {
+  cursor.attr("transform", "translate(" + d3.svg.mouse(this) + ")");
+});
+
+vis.on("mousedown", function() {
+  var point = d3.svg.mouse(this),
+      node = {x: point[0], y: point[1]},
+      n = nodes.push(node);
+
+  // add links to any nearby nodes
+  nodes.forEach(function(target) {
+    var x = target.x - node.x,
+        y = target.y - node.y;
+    if (Math.sqrt(x * x + y * y) < 30) {
+      links.push({source: node, target: target});
+    }
+  });
+
+  restart();
+});
+
+restart();
+
+function restart() {
+  force.start();
+
+  vis.selectAll("line.link")
+      .data(links)
+    .enter().insert("svg:line", "circle.node")
+      .attr("class", "link")
+      .attr("x1", function(d) { return d.source.x; })
+      .attr("y1", function(d) { return d.source.y; })
+      .attr("x2", function(d) { return d.target.x; })
+      .attr("y2", function(d) { return d.target.y; });
+
+  vis.selectAll("circle.node")
+      .data(nodes)
+    .enter().insert("svg:circle", "circle.cursor")
+      .attr("class", "node")
+      .attr("cx", function(d) { return d.x; })
+      .attr("cy", function(d) { return d.y; })
+      .attr("r", 4.5)
+      .call(force.drag);
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/force/force-interactive.html
===================================================================
--- /Dev/trunk/d3/examples/force/force-interactive.html	(revision 76)
+++ /Dev/trunk/d3/examples/force/force-interactive.html	(revision 76)
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Force-Directed Graph</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+circle.node {
+  cursor: pointer;
+  stroke: #3182bd;
+  stroke-width: 1.5px;
+}
+
+line.link {
+  fill: none;
+  stroke: #9ecae1;
+  stroke-width: 1.5px;
+}
+
+    </style>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500,
+    root;
+
+var force = d3.layout.force()
+    .size([w, h]);
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+d3.json("../data/flare.json", function(json) {
+  root = json;
+  update();
+});
+
+function update() {
+  var nodes = flatten(root),
+      links = d3.layout.tree().links(nodes);
+
+  // Restart the force layout.
+  force
+      .nodes(nodes)
+      .links(links)
+      .start();
+
+  // Update the linksâŠ
+  var link = vis.selectAll("line.link")
+      .data(links, function(d) { return d.target.id; });
+
+  // Enter any new links.
+  link.enter().insert("svg:line", ".node")
+      .attr("class", "link")
+      .attr("x1", function(d) { return d.source.x; })
+      .attr("y1", function(d) { return d.source.y; })
+      .attr("x2", function(d) { return d.target.x; })
+      .attr("y2", function(d) { return d.target.y; });
+
+  // Exit any old links.
+  link.exit().remove();
+
+  // Update the nodesâŠ
+  var node = vis.selectAll("circle.node")
+      .data(nodes, function(d) { return d.id; })
+      .style("fill", color);
+
+  // Enter any new nodes.
+  node.enter().append("svg:circle")
+      .attr("class", "node")
+      .attr("cx", function(d) { return d.x; })
+      .attr("cy", function(d) { return d.y; })
+      .attr("r", function(d) { return Math.sqrt(d.size) / 10 || 4.5; })
+      .style("fill", color)
+      .on("click", click)
+      .call(force.drag);
+
+  // Exit any old nodes.
+  node.exit().remove();
+
+  // Re-select for update.
+  link = vis.selectAll("line.link");
+  node = vis.selectAll("circle.node");
+
+  force.on("tick", function() {
+    link.attr("x1", function(d) { return d.source.x; })
+        .attr("y1", function(d) { return d.source.y; })
+        .attr("x2", function(d) { return d.target.x; })
+        .attr("y2", function(d) { return d.target.y; });
+
+    node.attr("cx", function(d) { return d.x; })
+        .attr("cy", function(d) { return d.y; });
+  });
+}
+
+// Color leaf nodes orange, and packages white or blue.
+function color(d) {
+  return d._children ? "#3182bd" : d.children ? "#c6dbef" : "#fd8d3c";
+}
+
+// Toggle children on click.
+function click(d) {
+  if (d.children) {
+    d._children = d.children;
+    d.children = null;
+  } else {
+    d.children = d._children;
+    d._children = null;
+  }
+  update();
+}
+
+// Returns a list of all nodes under the root.
+function flatten(root) {
+  var nodes = [], i = 0;
+
+  function recurse(node) {
+    if (node.children) node.children.forEach(recurse);
+    if (!node.id) node.id = ++i;
+    nodes.push(node);
+  }
+
+  recurse(root);
+  return nodes;
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/force/force-map.html
===================================================================
--- /Dev/trunk/d3/examples/force/force-map.html	(revision 76)
+++ /Dev/trunk/d3/examples/force/force-map.html	(revision 76)
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Force-Directed Map</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+path {
+  fill: #ddd;
+  fill-opacity: .8;
+  stroke: #fff;
+  stroke-width: 1.5px;
+}
+
+line {
+  stroke: #999;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500;
+
+var path = d3.geo.path(),
+    force = d3.layout.force().size([w, h]);
+
+var svg = d3.select("body").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+d3.json("../data/us-states.json", function(states) {
+  var nodes = [],
+      links = [];
+
+  states.features.forEach(function(d, i) {
+    if (d.id == "02" || d.id == "15" || d.id == "72") return;
+    var centroid = path.centroid(d);
+    centroid.x = centroid[0];
+    centroid.y = centroid[1];
+    centroid.feature = d;
+    nodes.push(centroid);
+  });
+
+  d3.geom.delaunay(nodes).forEach(function(d) {
+    links.push(edge(d[0], d[1]));
+    links.push(edge(d[1], d[2]));
+    links.push(edge(d[2], d[0]));
+  });
+
+  force
+      .gravity(0)
+      .charge(0)
+      .nodes(nodes)
+      .links(links)
+      .linkDistance(function(d) { return d.distance; })
+      .start();
+
+  var link = svg.selectAll("line")
+      .data(links)
+    .enter().append("svg:line")
+      .attr("x1", function(d) { return d.source.x; })
+      .attr("y1", function(d) { return d.source.y; })
+      .attr("x2", function(d) { return d.target.x; })
+      .attr("y2", function(d) { return d.target.y; });
+
+  var node = svg.selectAll("g")
+      .data(nodes)
+    .enter().append("svg:g")
+      .attr("transform", function(d) { return "translate(" + -d.x + "," + -d.y + ")"; })
+      .call(force.drag)
+    .append("svg:path")
+      .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
+      .attr("d", function(d) { return path(d.feature); });
+
+  force.on("tick", function(e) {
+    link.attr("x1", function(d) { return d.source.x; })
+        .attr("y1", function(d) { return d.source.y; })
+        .attr("x2", function(d) { return d.target.x; })
+        .attr("y2", function(d) { return d.target.y; });
+
+    node.attr("transform", function(d) {
+      return "translate(" + d.x + "," + d.y + ")";
+    });
+  });
+});
+
+function edge(a, b) {
+  var dx = a[0] - b[0], dy = a[1] - b[1];
+  return {
+    source: a,
+    target: b,
+    distance: Math.sqrt(dx * dx + dy * dy)
+  };
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/force/force-multi-foci.html
===================================================================
--- /Dev/trunk/d3/examples/force/force-multi-foci.html	(revision 76)
+++ /Dev/trunk/d3/examples/force/force-multi-foci.html	(revision 76)
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Force-Directed Layout (Multiple Foci)</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500,
+    fill = d3.scale.category10(),
+    nodes = d3.range(100).map(Object);
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+var force = d3.layout.force()
+    .nodes(nodes)
+    .links([])
+    .size([w, h])
+    .start();
+
+var node = vis.selectAll("circle.node")
+    .data(nodes)
+  .enter().append("svg:circle")
+    .attr("class", "node")
+    .attr("cx", function(d) { return d.x; })
+    .attr("cy", function(d) { return d.y; })
+    .attr("r", 8)
+    .style("fill", function(d, i) { return fill(i & 3); })
+    .style("stroke", function(d, i) { return d3.rgb(fill(i & 3)).darker(2); })
+    .style("stroke-width", 1.5)
+    .call(force.drag);
+
+vis.style("opacity", 1e-6)
+  .transition()
+    .duration(1000)
+    .style("opacity", 1);
+
+force.on("tick", function(e) {
+
+  // Push different nodes in different directions for clustering.
+  var k = 6 * e.alpha;
+  nodes.forEach(function(o, i) {
+    o.x += i & 2 ? k : -k;
+    o.y += i & 1 ? k : -k;
+  });
+
+  node.attr("cx", function(d) { return d.x; })
+      .attr("cy", function(d) { return d.y; });
+});
+
+d3.select("body").on("click", function() {
+  nodes.forEach(function(o, i) {
+    o.x += (Math.random() - .5) * 40;
+    o.y += (Math.random() - .5) * 40;
+  });
+  force.resume();
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/force/force.css
===================================================================
--- /Dev/trunk/d3/examples/force/force.css	(revision 76)
+++ /Dev/trunk/d3/examples/force/force.css	(revision 76)
@@ -0,0 +1,9 @@
+circle.node {
+  stroke: #fff;
+  stroke-width: 1.5px;
+}
+
+line.link {
+  stroke: #999;
+  stroke-opacity: .6;
+}
Index: /Dev/trunk/d3/examples/force/force.html
===================================================================
--- /Dev/trunk/d3/examples/force/force.html	(revision 76)
+++ /Dev/trunk/d3/examples/force/force.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Force-Directed Layout</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="force.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="force.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/force/force.js
===================================================================
--- /Dev/trunk/d3/examples/force/force.js	(revision 76)
+++ /Dev/trunk/d3/examples/force/force.js	(revision 76)
@@ -0,0 +1,56 @@
+var w = 960,
+    h = 500,
+    fill = d3.scale.category20();
+
+var vis = d3.select("#chart")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+d3.json("miserables.json", function(json) {
+  var force = d3.layout.force()
+      .charge(-120)
+      .linkDistance(30)
+      .nodes(json.nodes)
+      .links(json.links)
+      .size([w, h])
+      .start();
+
+  var link = vis.selectAll("line.link")
+      .data(json.links)
+    .enter().append("svg:line")
+      .attr("class", "link")
+      .style("stroke-width", function(d) { return Math.sqrt(d.value); })
+      .attr("x1", function(d) { return d.source.x; })
+      .attr("y1", function(d) { return d.source.y; })
+      .attr("x2", function(d) { return d.target.x; })
+      .attr("y2", function(d) { return d.target.y; });
+
+  var node = vis.selectAll("circle.node")
+      .data(json.nodes)
+    .enter().append("svg:circle")
+      .attr("class", "node")
+      .attr("cx", function(d) { return d.x; })
+      .attr("cy", function(d) { return d.y; })
+      .attr("r", 5)
+      .style("fill", function(d) { return fill(d.group); })
+      .call(force.drag);
+
+  node.append("svg:title")
+      .text(function(d) { return d.name; });
+
+  vis.style("opacity", 1e-6)
+    .transition()
+      .duration(1000)
+      .style("opacity", 1);
+
+  force.on("tick", function() {
+    link.attr("x1", function(d) { return d.source.x; })
+        .attr("y1", function(d) { return d.source.y; })
+        .attr("x2", function(d) { return d.target.x; })
+        .attr("y2", function(d) { return d.target.y; });
+
+    node.attr("cx", function(d) { return d.x; })
+        .attr("cy", function(d) { return d.y; });
+  });
+});
Index: /Dev/trunk/d3/examples/force/miserables.json
===================================================================
--- /Dev/trunk/d3/examples/force/miserables.json	(revision 76)
+++ /Dev/trunk/d3/examples/force/miserables.json	(revision 76)
@@ -0,0 +1,1 @@
+{"nodes":[{"name":"Myriel","group":1},{"name":"Napoleon","group":1},{"name":"Mlle.Baptistine","group":1},{"name":"Mme.Magloire","group":1},{"name":"CountessdeLo","group":1},{"name":"Geborand","group":1},{"name":"Champtercier","group":1},{"name":"Cravatte","group":1},{"name":"Count","group":1},{"name":"OldMan","group":1},{"name":"Labarre","group":2},{"name":"Valjean","group":2},{"name":"Marguerite","group":3},{"name":"Mme.deR","group":2},{"name":"Isabeau","group":2},{"name":"Gervais","group":2},{"name":"Tholomyes","group":3},{"name":"Listolier","group":3},{"name":"Fameuil","group":3},{"name":"Blacheville","group":3},{"name":"Favourite","group":3},{"name":"Dahlia","group":3},{"name":"Zephine","group":3},{"name":"Fantine","group":3},{"name":"Mme.Thenardier","group":4},{"name":"Thenardier","group":4},{"name":"Cosette","group":5},{"name":"Javert","group":4},{"name":"Fauchelevent","group":0},{"name":"Bamatabois","group":2},{"name":"Perpetue","group":3},{"name":"Simplice","group":2},{"name":"Scaufflaire","group":2},{"name":"Woman1","group":2},{"name":"Judge","group":2},{"name":"Champmathieu","group":2},{"name":"Brevet","group":2},{"name":"Chenildieu","group":2},{"name":"Cochepaille","group":2},{"name":"Pontmercy","group":4},{"name":"Boulatruelle","group":6},{"name":"Eponine","group":4},{"name":"Anzelma","group":4},{"name":"Woman2","group":5},{"name":"MotherInnocent","group":0},{"name":"Gribier","group":0},{"name":"Jondrette","group":7},{"name":"Mme.Burgon","group":7},{"name":"Gavroche","group":8},{"name":"Gillenormand","group":5},{"name":"Magnon","group":5},{"name":"Mlle.Gillenormand","group":5},{"name":"Mme.Pontmercy","group":5},{"name":"Mlle.Vaubois","group":5},{"name":"Lt.Gillenormand","group":5},{"name":"Marius","group":8},{"name":"BaronessT","group":5},{"name":"Mabeuf","group":8},{"name":"Enjolras","group":8},{"name":"Combeferre","group":8},{"name":"Prouvaire","group":8},{"name":"Feuilly","group":8},{"name":"Courfeyrac","group":8},{"name":"Bahorel","group":8},{"name":"Bossuet","group":8},{"name":"Joly","group":8},{"name":"Grantaire","group":8},{"name":"MotherPlutarch","group":9},{"name":"Gueulemer","group":4},{"name":"Babet","group":4},{"name":"Claquesous","group":4},{"name":"Montparnasse","group":4},{"name":"Toussaint","group":5},{"name":"Child1","group":10},{"name":"Child2","group":10},{"name":"Brujon","group":4},{"name":"Mme.Hucheloup","group":8}],"links":[{"source":1,"target":0,"value":1},{"source":2,"target":0,"value":8},{"source":3,"target":0,"value":10},{"source":3,"target":2,"value":6},{"source":4,"target":0,"value":1},{"source":5,"target":0,"value":1},{"source":6,"target":0,"value":1},{"source":7,"target":0,"value":1},{"source":8,"target":0,"value":2},{"source":9,"target":0,"value":1},{"source":11,"target":10,"value":1},{"source":11,"target":3,"value":3},{"source":11,"target":2,"value":3},{"source":11,"target":0,"value":5},{"source":12,"target":11,"value":1},{"source":13,"target":11,"value":1},{"source":14,"target":11,"value":1},{"source":15,"target":11,"value":1},{"source":17,"target":16,"value":4},{"source":18,"target":16,"value":4},{"source":18,"target":17,"value":4},{"source":19,"target":16,"value":4},{"source":19,"target":17,"value":4},{"source":19,"target":18,"value":4},{"source":20,"target":16,"value":3},{"source":20,"target":17,"value":3},{"source":20,"target":18,"value":3},{"source":20,"target":19,"value":4},{"source":21,"target":16,"value":3},{"source":21,"target":17,"value":3},{"source":21,"target":18,"value":3},{"source":21,"target":19,"value":3},{"source":21,"target":20,"value":5},{"source":22,"target":16,"value":3},{"source":22,"target":17,"value":3},{"source":22,"target":18,"value":3},{"source":22,"target":19,"value":3},{"source":22,"target":20,"value":4},{"source":22,"target":21,"value":4},{"source":23,"target":16,"value":3},{"source":23,"target":17,"value":3},{"source":23,"target":18,"value":3},{"source":23,"target":19,"value":3},{"source":23,"target":20,"value":4},{"source":23,"target":21,"value":4},{"source":23,"target":22,"value":4},{"source":23,"target":12,"value":2},{"source":23,"target":11,"value":9},{"source":24,"target":23,"value":2},{"source":24,"target":11,"value":7},{"source":25,"target":24,"value":13},{"source":25,"target":23,"value":1},{"source":25,"target":11,"value":12},{"source":26,"target":24,"value":4},{"source":26,"target":11,"value":31},{"source":26,"target":16,"value":1},{"source":26,"target":25,"value":1},{"source":27,"target":11,"value":17},{"source":27,"target":23,"value":5},{"source":27,"target":25,"value":5},{"source":27,"target":24,"value":1},{"source":27,"target":26,"value":1},{"source":28,"target":11,"value":8},{"source":28,"target":27,"value":1},{"source":29,"target":23,"value":1},{"source":29,"target":27,"value":1},{"source":29,"target":11,"value":2},{"source":30,"target":23,"value":1},{"source":31,"target":30,"value":2},{"source":31,"target":11,"value":3},{"source":31,"target":23,"value":2},{"source":31,"target":27,"value":1},{"source":32,"target":11,"value":1},{"source":33,"target":11,"value":2},{"source":33,"target":27,"value":1},{"source":34,"target":11,"value":3},{"source":34,"target":29,"value":2},{"source":35,"target":11,"value":3},{"source":35,"target":34,"value":3},{"source":35,"target":29,"value":2},{"source":36,"target":34,"value":2},{"source":36,"target":35,"value":2},{"source":36,"target":11,"value":2},{"source":36,"target":29,"value":1},{"source":37,"target":34,"value":2},{"source":37,"target":35,"value":2},{"source":37,"target":36,"value":2},{"source":37,"target":11,"value":2},{"source":37,"target":29,"value":1},{"source":38,"target":34,"value":2},{"source":38,"target":35,"value":2},{"source":38,"target":36,"value":2},{"source":38,"target":37,"value":2},{"source":38,"target":11,"value":2},{"source":38,"target":29,"value":1},{"source":39,"target":25,"value":1},{"source":40,"target":25,"value":1},{"source":41,"target":24,"value":2},{"source":41,"target":25,"value":3},{"source":42,"target":41,"value":2},{"source":42,"target":25,"value":2},{"source":42,"target":24,"value":1},{"source":43,"target":11,"value":3},{"source":43,"target":26,"value":1},{"source":43,"target":27,"value":1},{"source":44,"target":28,"value":3},{"source":44,"target":11,"value":1},{"source":45,"target":28,"value":2},{"source":47,"target":46,"value":1},{"source":48,"target":47,"value":2},{"source":48,"target":25,"value":1},{"source":48,"target":27,"value":1},{"source":48,"target":11,"value":1},{"source":49,"target":26,"value":3},{"source":49,"target":11,"value":2},{"source":50,"target":49,"value":1},{"source":50,"target":24,"value":1},{"source":51,"target":49,"value":9},{"source":51,"target":26,"value":2},{"source":51,"target":11,"value":2},{"source":52,"target":51,"value":1},{"source":52,"target":39,"value":1},{"source":53,"target":51,"value":1},{"source":54,"target":51,"value":2},{"source":54,"target":49,"value":1},{"source":54,"target":26,"value":1},{"source":55,"target":51,"value":6},{"source":55,"target":49,"value":12},{"source":55,"target":39,"value":1},{"source":55,"target":54,"value":1},{"source":55,"target":26,"value":21},{"source":55,"target":11,"value":19},{"source":55,"target":16,"value":1},{"source":55,"target":25,"value":2},{"source":55,"target":41,"value":5},{"source":55,"target":48,"value":4},{"source":56,"target":49,"value":1},{"source":56,"target":55,"value":1},{"source":57,"target":55,"value":1},{"source":57,"target":41,"value":1},{"source":57,"target":48,"value":1},{"source":58,"target":55,"value":7},{"source":58,"target":48,"value":7},{"source":58,"target":27,"value":6},{"source":58,"target":57,"value":1},{"source":58,"target":11,"value":4},{"source":59,"target":58,"value":15},{"source":59,"target":55,"value":5},{"source":59,"target":48,"value":6},{"source":59,"target":57,"value":2},{"source":60,"target":48,"value":1},{"source":60,"target":58,"value":4},{"source":60,"target":59,"value":2},{"source":61,"target":48,"value":2},{"source":61,"target":58,"value":6},{"source":61,"target":60,"value":2},{"source":61,"target":59,"value":5},{"source":61,"target":57,"value":1},{"source":61,"target":55,"value":1},{"source":62,"target":55,"value":9},{"source":62,"target":58,"value":17},{"source":62,"target":59,"value":13},{"source":62,"target":48,"value":7},{"source":62,"target":57,"value":2},{"source":62,"target":41,"value":1},{"source":62,"target":61,"value":6},{"source":62,"target":60,"value":3},{"source":63,"target":59,"value":5},{"source":63,"target":48,"value":5},{"source":63,"target":62,"value":6},{"source":63,"target":57,"value":2},{"source":63,"target":58,"value":4},{"source":63,"target":61,"value":3},{"source":63,"target":60,"value":2},{"source":63,"target":55,"value":1},{"source":64,"target":55,"value":5},{"source":64,"target":62,"value":12},{"source":64,"target":48,"value":5},{"source":64,"target":63,"value":4},{"source":64,"target":58,"value":10},{"source":64,"target":61,"value":6},{"source":64,"target":60,"value":2},{"source":64,"target":59,"value":9},{"source":64,"target":57,"value":1},{"source":64,"target":11,"value":1},{"source":65,"target":63,"value":5},{"source":65,"target":64,"value":7},{"source":65,"target":48,"value":3},{"source":65,"target":62,"value":5},{"source":65,"target":58,"value":5},{"source":65,"target":61,"value":5},{"source":65,"target":60,"value":2},{"source":65,"target":59,"value":5},{"source":65,"target":57,"value":1},{"source":65,"target":55,"value":2},{"source":66,"target":64,"value":3},{"source":66,"target":58,"value":3},{"source":66,"target":59,"value":1},{"source":66,"target":62,"value":2},{"source":66,"target":65,"value":2},{"source":66,"target":48,"value":1},{"source":66,"target":63,"value":1},{"source":66,"target":61,"value":1},{"source":66,"target":60,"value":1},{"source":67,"target":57,"value":3},{"source":68,"target":25,"value":5},{"source":68,"target":11,"value":1},{"source":68,"target":24,"value":1},{"source":68,"target":27,"value":1},{"source":68,"target":48,"value":1},{"source":68,"target":41,"value":1},{"source":69,"target":25,"value":6},{"source":69,"target":68,"value":6},{"source":69,"target":11,"value":1},{"source":69,"target":24,"value":1},{"source":69,"target":27,"value":2},{"source":69,"target":48,"value":1},{"source":69,"target":41,"value":1},{"source":70,"target":25,"value":4},{"source":70,"target":69,"value":4},{"source":70,"target":68,"value":4},{"source":70,"target":11,"value":1},{"source":70,"target":24,"value":1},{"source":70,"target":27,"value":1},{"source":70,"target":41,"value":1},{"source":70,"target":58,"value":1},{"source":71,"target":27,"value":1},{"source":71,"target":69,"value":2},{"source":71,"target":68,"value":2},{"source":71,"target":70,"value":2},{"source":71,"target":11,"value":1},{"source":71,"target":48,"value":1},{"source":71,"target":41,"value":1},{"source":71,"target":25,"value":1},{"source":72,"target":26,"value":2},{"source":72,"target":27,"value":1},{"source":72,"target":11,"value":1},{"source":73,"target":48,"value":2},{"source":74,"target":48,"value":2},{"source":74,"target":73,"value":3},{"source":75,"target":69,"value":3},{"source":75,"target":68,"value":3},{"source":75,"target":25,"value":3},{"source":75,"target":48,"value":1},{"source":75,"target":41,"value":1},{"source":75,"target":70,"value":1},{"source":75,"target":71,"value":1},{"source":76,"target":64,"value":1},{"source":76,"target":65,"value":1},{"source":76,"target":66,"value":1},{"source":76,"target":63,"value":1},{"source":76,"target":62,"value":1},{"source":76,"target":48,"value":1},{"source":76,"target":58,"value":1}]}
Index: /Dev/trunk/d3/examples/hello-world/hello-data-key.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-data-key.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-data-key.html	(revision 76)
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, data!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    Your lucky numbers are:<br>
+    <script type="text/javascript">
+
+var i = 0, data = [
+  {id: i++, value: 4},
+  {id: i++, value: 8},
+  {id: i++, value: 15},
+  {id: i++, value: 16},
+  {id: i++, value: 23},
+  {id: i++, value: 42}
+];
+
+transform();
+
+function transform() {
+  var t = d3.select("body")
+    .selectAll("span")
+      .data(data, function(d) { return d.id; });
+
+  t.enter().append("span")
+      .attr("id", function(d) { return "span-" + d.id; })
+    .append("svg:svg")
+      .attr("width", 100)
+      .attr("height", 100)
+    .append("svg:text")
+      .attr("x", "50%")
+      .attr("y", "50%")
+      .attr("dy", ".35em")
+      .attr("text-anchor", "middle")
+      .attr("fill", "white")
+      .attr("stroke", "black")
+      .attr("stroke-width", 1.5)
+      .style("font", "36pt Comic Sans MS")
+      .style("text-shadow", "3px 3px 3px rgba(0,0,0,.4)")
+      .text(function(d) { return d.value; });
+
+  t.select("text")
+      .text(function(d) { return d.value; });
+
+  t.exit().remove();
+}
+
+function refresh() {
+  data.shift();
+  data.push({id: i++ % 7, value: ~~(Math.random() * 100)});
+  transform();
+}
+
+window.addEventListener("keypress", refresh, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-data-nested-key.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-data-nested-key.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-data-nested-key.html	(revision 76)
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, data!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body, td {
+  font: 14px Helvetica Neue;
+  text-rendering: optimizeLegibility;
+  margin: 1em;
+}
+
+table {
+  border-collapse: collapse;
+  margin-top: .5em;
+}
+
+td {
+  border: solid 1px #fff;
+  text-align: center;
+  width: 30px;
+  height: 30px;
+}
+
+    </style>
+  </head>
+  <body>
+    Your lucky numbers are:<br>
+    <table id="table"></table>
+    <script type="text/javascript">
+
+var data = [];
+
+for (var i = 0; i < 10; i++) {
+  for (var j = 0, a = []; j < 10; j++) {
+    a.push(~~(Math.random() * 100));
+  }
+  data.push(a);
+}
+
+transform();
+
+function transform() {
+  var t = d3.select("#table")
+    .selectAll("tr")
+      .data(data);
+
+  t.enter().append("tr")
+    .selectAll("td")
+      .data(function(d) { return d; })
+    .enter().append("td")
+      .style("background-color", function(d) { return "hsl(" + d + ",100%,50%)"; })
+      .text(function(d) { return d; });
+
+  t.selectAll("td")
+      .data(function(d) { return d; })
+      .style("background-color", function(d) { return "hsl(" + d + ",100%,50%)"; })
+      .text(function(d) { return d; });
+}
+
+function refresh() {
+  for (var i = 0; i < 10; i++) {
+    for (var j = 0; j < 10; j++) {
+      data[i][j] = (data[i][j] + 1) % 360;
+    }
+  }
+  transform();
+}
+
+window.addEventListener("keypress", refresh, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-data-nested.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-data-nested.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-data-nested.html	(revision 76)
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, data!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body, td {
+  font: 14px Helvetica Neue;
+  text-rendering: optimizeLegibility;
+  margin: 1em;
+}
+
+table {
+  border-collapse: collapse;
+  margin-top: .5em;
+}
+
+td {
+  border: solid 1px #fff;
+  color: #ccc;
+  text-align: center;
+  width: 30px;
+  height: 30px;
+}
+
+    </style>
+  </head>
+  <body>
+    Your lucky numbers are:<br>
+    <table>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+      <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+    </table>
+    <script type="text/javascript">
+
+var data = [];
+
+for (var i = 0; i < 10; i++) {
+  for (var j = 0, a = []; j < 10; j++) {
+    a.push(~~(Math.random() * 100));
+  }
+  data.push(a);
+}
+
+transform();
+
+function transform() {
+  d3.selectAll("tr")
+      .data(data)
+    .selectAll("td")
+      .data(function(d) { return d; })
+      .style("background-color", function(d) { return "hsl(0,50%," + d + "%)"; })
+      .text(function(d) { return d; });
+}
+
+function refresh() {
+  for (var i = 0; i < data.length; i++) {
+    var z = data[i], d = z.shift();
+    z.push(~~(Math.random() * 100));
+  }
+  transform();
+}
+
+window.addEventListener("keypress", refresh, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-data.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-data.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-data.html	(revision 76)
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, data!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    Your lucky numbers are:<br>
+    <span></span>
+    <span></span>
+    <span></span>
+    <span></span>
+    <span></span>
+    <script type="text/javascript">
+
+var data = [4, 8, 15, 16, 23, 42];
+
+d3.selectAll("span")
+    .data(data)
+  .append("svg:svg")
+    .attr("width", 100)
+    .attr("height", 100)
+  .append("svg:text")
+    .attr("x", "50%")
+    .attr("y", "50%")
+    .attr("dy", ".35em")
+    .attr("text-anchor", "middle")
+    .attr("fill", "white")
+    .attr("stroke", "black")
+    .attr("stroke-width", 1.5)
+    .style("font", "36pt Comic Sans MS")
+    .style("text-shadow", "3px 3px 3px rgba(0,0,0,.4)")
+    .text(function(d) { return d; });
+
+function refresh() {
+  for (var i = 0; i < data.length; i++) data[i] = (data[i] + 1) % 100;
+  d3.selectAll("text")
+      .data(data)
+      .text(function(d) { return d; });
+}
+
+window.addEventListener("keypress", refresh, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-event.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-event.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-event.html	(revision 76)
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, world!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    Your lucky numbers are:<br>
+    <span></span>
+    <script type="text/javascript">
+
+var data = [4, 8, 15, 16, 23, 42];
+
+d3.select("span")
+  .selectAll("svg")
+    .data(data)
+  .enter().append("svg:svg")
+    .attr("width", 100)
+    .attr("height", 100)
+  .append("svg:text")
+    .attr("x", "50%")
+    .attr("y", "50%")
+    .attr("dy", ".35em")
+    .attr("text-anchor", "middle")
+    .attr("fill", "white")
+    .attr("stroke", "black")
+    .attr("stroke-width", 1.5)
+    .attr("cursor", "pointer")
+    .style("font", "36pt Comic Sans MS")
+    .style("text-shadow", "3px 3px 3px rgba(0,0,0,.4)")
+    .text(function(d) { return d; })
+    .on("click", click)
+    .on("mouseover", mouseover)
+    .on("mouseout", mouseout);
+
+function click(d, i) {
+  console.log("click", d, i);
+}
+
+function mouseover(d, i) {
+  d3.select(this)
+      .attr("fill", "brown")
+      .attr("stroke", "grey");
+}
+
+function mouseout(d, i) {
+  d3.select(this)
+      .attr("fill", "orange");
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-node-key.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-node-key.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-node-key.html	(revision 76)
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, node!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    Your lucky numbers are:<br>
+    <span value="42"></span>
+    <span value="4"></span>
+    <span value="8"></span>
+    <span value="15"></span>
+    <span value="16"></span>
+    <span value="23"></span>
+    <script type="text/javascript">
+
+var data = [4, 8, 15, 16, 23, 42];
+
+d3.selectAll("span")
+    .data(data, function(d) { return d || this.getAttribute("value"); })
+    .text(String);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-sort.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-sort.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-sort.html	(revision 76)
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, sort!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+html, body, svg {
+  font: 14px Helvetica Neue;
+  margin: 0;
+  width: 100%;
+  height: 100%;
+  display: block;
+}
+
+circle {
+  fill: steelblue;
+  fill-opacity: .8;
+  stroke: #fff;
+}
+
+div {
+  position: fixed;
+  top: 10px;
+  left: 10px;
+}
+
+    </style>
+  </head>
+  <body>
+    <div>
+      <input id="sort" type="checkbox" checked>
+      <label for="sort">Ascending</label>
+    </div>
+    <script type="text/javascript">
+
+d3.select("body")
+  .append("svg:svg")
+    .attr("viewBox", "0 0 1000 1000");
+
+d3.select("#sort")
+    .on("change", sort);
+
+transform();
+
+function transform() {
+  var circle = d3.select("svg")
+    .selectAll("circle")
+      .data(d3.range(400).map(Math.random));
+
+  circle.enter().append("svg:circle")
+      .attr("cx", function() { return 100 + Math.random() * 800; })
+      .attr("cy", function() { return 100 + Math.random() * 800; })
+      .attr("r", function(d) { return 50 * d; });
+
+  circle
+    .transition()
+      .duration(750)
+      .attr("r", function(d) { return 50 * d; });
+
+  sort();
+}
+
+function sort() {
+  d3.selectAll("circle")
+      .sort(d3.select("#sort").property("checked")
+      ? function(a, b) { return b - a; }
+      : function(a, b) { return a - b; });
+}
+
+window.addEventListener("keypress", transform, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-transform.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-transform.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-transform.html	(revision 76)
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, world!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    Your lucky numbers are:<br>
+    <span></span>
+    <span></span>
+    <span></span>
+    <span></span>
+    <span></span>
+    <script type="text/javascript">
+
+d3.selectAll("span")
+  .append("svg:svg")
+    .attr("width", 100)
+    .attr("height", 100)
+  .append("svg:text")
+    .attr("x", "50%")
+    .attr("y", "50%")
+    .attr("dy", ".35em")
+    .attr("text-anchor", "middle")
+    .attr("fill", "white")
+    .attr("stroke", "black")
+    .attr("stroke-width", 1.5)
+    .style("font", "36pt Comic Sans MS")
+    .style("text-shadow", "3px 3px 3px rgba(0,0,0,.4)")
+    .text(function() { return ~~(Math.random() * 100); });
+
+function transform() {
+  d3.selectAll("text")
+      .text(function() { return ~~(Math.random() * 100); });
+}
+
+window.addEventListener("keypress", transform, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-transition-undefined.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-transition-undefined.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-transition-undefined.html	(revision 76)
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, transition undefined!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body {
+  font: 14px Helvetica Neue;
+  text-rendering: optimizeLegibility;
+  margin: 1em;
+}
+
+div {
+  font-size: 42px;
+  margin-top: .5em;
+  text-align: right;
+}
+
+    </style>
+  </head>
+  <body>
+    Your lucky number is:<br>
+    <div>hello</div>
+    <script type="text/javascript">
+
+transform();
+
+function transform() {
+  d3.select("div")
+      .style("width", "0%")
+    .transition()
+      .ease("bounce")
+      .duration(2000)
+      .style("width", "100%")
+      .style("background-color", function() { return d3.hsl(180, Math.random(), .5); });
+}
+
+window.addEventListener("keypress", transform, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-transition.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-transition.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-transition.html	(revision 76)
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, transition!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body {
+  font: 14px Helvetica Neue;
+  text-rendering: optimizeLegibility;
+  margin: 1em;
+}
+
+div {
+  font-size: 42px;
+  margin-top: .5em;
+  background-color: steelblue;
+  color: white;
+  text-align: right;
+}
+
+    </style>
+  </head>
+  <body>
+    Your lucky number is:<br>
+    <div></div>
+    <script type="text/javascript">
+
+transform();
+
+function transform() {
+  d3.select("div")
+      .style("width", "0%")
+      .style("background-color", "steelblue")
+      .text("hello\u00a0")
+    .transition()
+      .ease("bounce")
+      .duration(2000)
+      .style("width", "100%")
+      .style("background-color", "brown");
+}
+
+window.addEventListener("keypress", transform, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/hello-webkit-transition.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/hello-webkit-transition.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/hello-webkit-transition.html	(revision 76)
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hello, data!</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body {
+  font: 14px Helvetica Neue;
+  text-rendering: optimizeLegibility;
+  margin: 1em;
+}
+
+#cells {
+  position: relative;
+  margin-top: .5em;
+  height: 300px;
+  overflow: hidden;
+}
+
+.cell {
+  position: absolute;
+  background: steelblue;
+  color: white;
+  width: 28px;
+  text-align: center;
+  padding-top: 6px;
+  top: 300px;
+  bottom: 0;
+  background: -webkit-gradient(linear, left top, left bottom, from(transparent), to(steelblue));
+  -webkit-transition-property: top, background-color;
+  -webkit-transition-duration: 500ms;
+  -webkit-transition-timing-function: ease, linear;
+}
+
+    </style>
+  </head>
+  <body>
+    Your lucky numbers are:<br>
+    <div id="cells"></div>
+    <script type="text/javascript">
+
+var n = 10;
+
+d3.select("#cells")
+  .selectAll("div")
+    .data(d3.range(n))
+  .enter().append("div")
+    .attr("class", "cell")
+    .style("left", function(i) { return i * 30; });
+
+function transform() {
+  d3.selectAll(".cell")
+      .data(d3.range(n).map(Math.random))
+      .style("top", function(d) { return (1 - d) * 300; })
+      .style("background-color", function(d) { return "rgb(" + ~~(d * 255) + ",50,100)"; })
+      .text(function(d) { return ~~(d * 100); });
+}
+
+window.addEventListener("keypress", transform, false);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/select-enter-add.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/select-enter-add.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/select-enter-add.html	(revision 76)
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Test - select > enter > append</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    <span></span>
+    <span></span>
+    <script type="text/javascript">
+
+var s = d3.select("body")
+  .selectAll("span")
+    .data("The test passed, hooray!".split(/\b/));
+
+// Add missing <span>s.
+s.enter().append("span")
+  .append("b")
+    .text(function(d) { return d; });
+
+// Add missing <b>s.
+s.selectAll("b")
+    .data(function(d) { return [d]; })
+  .enter().append("b")
+    .text(function(d) { return d; });
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/hello-world/selectAll-enter-add.html
===================================================================
--- /Dev/trunk/d3/examples/hello-world/selectAll-enter-add.html	(revision 76)
+++ /Dev/trunk/d3/examples/hello-world/selectAll-enter-add.html	(revision 76)
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Test - selectAll > enter > append</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    <span></span>
+    <script type="text/javascript">
+
+d3.select("body")
+  .selectAll("span")
+    .data(["Test", "passed."])
+    .text(function(d) { return d; })
+  .enter().append("span")
+    .text(function(d) { return d; });
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/histogram/histogram.html
===================================================================
--- /Dev/trunk/d3/examples/histogram/histogram.html	(revision 76)
+++ /Dev/trunk/d3/examples/histogram/histogram.html	(revision 76)
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Histogram</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+rect {
+  fill: steelblue;
+  stroke: white;
+}
+
+line {
+  stroke: black;
+  shape-rendering: crispEdges;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var n = 10000, // number of trials
+    m = 10,    // number of random variables
+    data = [];
+
+// Generate an Irwin-Hall distribution.
+for (var i = 0; i < n; i++) {
+  for (var s = 0, j = 0; j < m; j++) {
+    s += Math.random();
+  }
+  data.push(s);
+}
+
+var w = 400,
+    h = 400;
+
+var histogram = d3.layout.histogram()
+    (data);
+
+var x = d3.scale.ordinal()
+    .domain(histogram.map(function(d) { return d.x; }))
+    .rangeRoundBands([0, w]);
+
+var y = d3.scale.linear()
+    .domain([0, d3.max(histogram, function(d) { return d.y; })])
+    .range([0, h]);
+
+var vis = d3.select("body").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(.5)");
+
+vis.selectAll("rect")
+    .data(histogram)
+  .enter().append("svg:rect")
+    .attr("transform", function(d) { return "translate(" + x(d.x) + "," + (h - y(d.y)) + ")"; })
+    .attr("width", x.rangeBand())
+    .attr("y", function(d) { return y(d.y); })
+    .attr("height", 0)
+  .transition()
+    .duration(750)
+    .attr("y", 0)
+    .attr("height", function(d) { return y(d.y); });
+
+vis.append("svg:line")
+    .attr("x1", 0)
+    .attr("x2", w)
+    .attr("y1", h)
+    .attr("y2", h);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/horizon/horizon.css
===================================================================
--- /Dev/trunk/d3/examples/horizon/horizon.css	(revision 76)
+++ /Dev/trunk/d3/examples/horizon/horizon.css	(revision 76)
@@ -0,0 +1,9 @@
+#controls {
+  position: relative;
+  width: 960px;
+}
+
+#bands {
+  position: absolute;
+  right: 0;
+}
Index: /Dev/trunk/d3/examples/horizon/horizon.html
===================================================================
--- /Dev/trunk/d3/examples/horizon/horizon.html	(revision 76)
+++ /Dev/trunk/d3/examples/horizon/horizon.html	(revision 76)
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Horizon Chart</title>
+    <link type="text/css" rel="stylesheet" href="../button.css"/>
+    <link type="text/css" rel="stylesheet" href="horizon.css"/>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.chart.js"></script>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <div id="controls">
+      <span id="mode">
+        <button class="first active">Offset</button
+        ><button class="last">Mirror</button>
+      </span>
+      <span id="bands">
+        <button class="first">&#x2212;</button
+        ><button class="last">+</button>
+      </span>
+    </div>
+    <script type="text/javascript" src="horizon.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/horizon/horizon.js
===================================================================
--- /Dev/trunk/d3/examples/horizon/horizon.js	(revision 76)
+++ /Dev/trunk/d3/examples/horizon/horizon.js	(revision 76)
@@ -0,0 +1,43 @@
+var w = 960,
+    h = 40;
+
+var chart = d3.chart.horizon()
+    .width(w)
+    .height(h)
+    .bands(5)
+    .mode("offset")
+    .interpolate("basis");
+
+var svg = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+d3.json("unemployment.json", function(data) {
+
+  // Offset so that positive is above-average and negative is below-average.
+  var mean = data.rate.reduce(function(p, v) { return p + v; }, 0) / data.rate.length;
+
+  // Transpose column values to rows.
+  data = data.rate.map(function(rate, i) {
+    return [Date.UTC(data.year[i], data.month[i] - 1), rate - mean];
+  });
+
+  // Render the chart.
+  svg.data([data]).call(chart);
+
+  // Enable mode buttons.
+  d3.selectAll("#mode button")
+      .data(["offset", "mirror"])
+      .on("click", function(m) {
+        svg.call(chart.duration(0).mode(m));
+        d3.selectAll("#mode button")
+            .classed("active", function(d) { return d == m; });
+      });
+
+  // Enable bands buttons.
+  d3.selectAll("#bands button")
+      .data([-1, 1])
+      .on("click", function bands(db) {
+        svg.call(chart.duration(1000).bands(Math.max(1, chart.bands() + db)));
+      });
+});
Index: /Dev/trunk/d3/examples/horizon/unemployment.json
===================================================================
--- /Dev/trunk/d3/examples/horizon/unemployment.json	(revision 76)
+++ /Dev/trunk/d3/examples/horizon/unemployment.json	(revision 76)
@@ -0,0 +1,1 @@
+{"year":[2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2001,2001,2001,2001,2001,2001,2001,2001,2001,2001,2001,2001,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2003,2003,2003,2003,2003,2003,2003,2003,2003,2003,2003,2003,2004,2004,2004,2004,2004,2004,2004,2004,2004,2004,2004,2004,2005,2005,2005,2005,2005,2005,2005,2005,2005,2005,2005,2005,2006,2006,2006,2006,2006,2006,2006,2006,2006,2006,2006,2006,2007,2007,2007,2007,2007,2007,2007,2007,2007,2007,2007,2007,2008,2008,2008,2008,2008,2008,2008,2008,2008,2008,2008,2008,2009,2009,2009,2009,2009,2009,2009,2009,2009,2009,2009,2009,2010,2010],"month":[1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2],"rate":[4.5,4.4,4.3,3.7,3.8,4.1,4.2,4.1,3.8,3.6,3.7,3.7,4.7,4.6,4.5,4.2,4.1,4.7,4.7,4.9,4.7,5,5.3,5.4,6.3,6.1,6.1,5.7,5.5,6,5.9,5.7,5.4,5.3,5.6,5.7,6.5,6.4,6.2,5.8,5.8,6.5,6.3,6,5.8,5.6,5.6,5.4,6.3,6,6,5.4,5.3,5.8,5.7,5.4,5.1,5.1,5.2,5.1,5.7,5.8,5.4,4.9,4.9,5.2,5.2,4.9,4.8,4.6,4.8,4.6,5.1,5.1,4.8,4.5,4.4,4.8,5,4.6,4.4,4.1,4.3,4.3,5,4.9,4.5,4.3,4.3,4.7,4.9,4.6,4.5,4.4,4.5,4.8,5.4,5.2,5.2,4.8,5.2,5.7,6,6.1,6,6.1,6.5,7.1,8.5,8.9,9,8.6,9.1,9.7,9.7,9.6,9.5,9.5,9.4,9.7,10.6,10.4]}
Index: /Dev/trunk/d3/examples/hull/hull.html
===================================================================
--- /Dev/trunk/d3/examples/hull/hull.html	(revision 76)
+++ /Dev/trunk/d3/examples/hull/hull.html	(revision 76)
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Convex Hull</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <style type="text/css">
+
+svg {
+  border: solid 1px #aaa;
+  background: #eee;
+}
+
+path {
+  fill: lightsteelblue;
+  stroke: #000;
+}
+
+circle {
+  fill: #fff;
+  stroke: #000;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500;
+
+var vertices = d3.range(15).map(function(d) {
+  return [
+    w / 4 + Math.random() * w / 2,
+    h / 4 + Math.random() * h / 2
+  ];
+});
+
+var svg = d3.select("body")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+    .attr("pointer-events", "all")
+    .on("mousemove", move)
+    .on("click", click);
+
+update();
+
+function update() {
+  svg.selectAll("path")
+      .data([d3.geom.hull(vertices)])
+      .attr("d", function(d) { return "M" + d.join("L") + "Z"; })
+	  .enter().append("svg:path")
+	    .attr("d", function(d) { return "M" + d.join("L") + "Z"; });
+
+  svg.selectAll("circle")
+      .data(vertices.slice(1))
+    .enter().append("svg:circle")
+      .attr("transform", function(d) { return "translate(" + d + ")"; })
+      .attr("r", 3);
+}
+
+function move() {
+  vertices[0] = d3.svg.mouse(this);
+  update();
+}
+
+function click() {
+  vertices.push(d3.svg.mouse(this));
+  update();
+}
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/kde/kde.css
===================================================================
--- /Dev/trunk/d3/examples/kde/kde.css	(revision 76)
+++ /Dev/trunk/d3/examples/kde/kde.css	(revision 76)
@@ -0,0 +1,9 @@
+body {
+  font: 10px sans-serif;
+}
+
+path {
+  stroke: #000;
+  stroke-width: 1.5px;
+  fill: none;
+}
Index: /Dev/trunk/d3/examples/kde/kde.html
===================================================================
--- /Dev/trunk/d3/examples/kde/kde.html	(revision 76)
+++ /Dev/trunk/d3/examples/kde/kde.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Kernel Density Estimation</title>
+    <link rel="stylesheet" type="text/css" href="kde.css"/>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <script type="text/javascript" src="../../lib/science/science.js"></script>
+    <script type="text/javascript" src="../../lib/science/science.stats.js"></script>
+  </head>
+  <body>
+    <script type="text/javascript" src="kde.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/kde/kde.js
===================================================================
--- /Dev/trunk/d3/examples/kde/kde.js	(revision 76)
+++ /Dev/trunk/d3/examples/kde/kde.js	(revision 76)
@@ -0,0 +1,40 @@
+// Based on http://bl.ocks.org/900762 by John Firebaugh
+d3.json("../data/faithful.json", function(faithful) {
+  data = faithful;
+  var w = 800,
+      h = 400,
+      x = d3.scale.linear().domain([30, 110]).range([0, w]);
+      bins = d3.layout.histogram().frequency(true).bins(x.ticks(60))(data),
+      max = d3.max(bins, function(d) { return d.y; }),
+      y = d3.scale.linear().domain([0, .1]).range([0, h]),
+      kde = science.stats.kde().sample(data);
+
+  var vis = d3.select("body")
+    .append("svg:svg")
+      .attr("width", w)
+      .attr("height", h);
+
+  var bars = vis.selectAll("g.bar")
+      .data(bins)
+    .enter().append("svg:g")
+      .attr("class", "bar")
+      .attr("transform", function(d, i) {
+        return "translate(" + x(d.x) + "," + (h - y(d.y)) + ")";
+      });
+
+  bars.append("svg:rect")
+      .attr("fill", "steelblue")
+      .attr("width", function(d) { return x(d.dx + 30) - 1; })
+      .attr("height", function(d) { return y(d.y); });
+
+  var line = d3.svg.line()
+      .x(function(d) { return x(d[0]); })
+      .y(function(d) { return h - y(d[1]); });
+
+  vis.selectAll("path")
+      .data(d3.values(science.stats.bandwidth))
+    .enter().append("svg:path")
+      .attr("d", function(h) {
+        return line(kde.bandwidth(h)(d3.range(30, 110, .1)));
+      });
+});
Index: /Dev/trunk/d3/examples/line/line.css
===================================================================
--- /Dev/trunk/d3/examples/line/line.css	(revision 76)
+++ /Dev/trunk/d3/examples/line/line.css	(revision 76)
@@ -0,0 +1,22 @@
+body {
+  font: 10px sans-serif;
+}
+
+.rule line {
+  stroke: #eee;
+  shape-rendering: crispEdges;
+}
+
+.rule line.axis {
+  stroke: #000;
+}
+
+.line {
+  fill: none;
+  stroke: steelblue;
+  stroke-width: 1.5px;
+}
+
+circle.line {
+  fill: #fff;
+}
Index: /Dev/trunk/d3/examples/line/line.html
===================================================================
--- /Dev/trunk/d3/examples/line/line.html	(revision 76)
+++ /Dev/trunk/d3/examples/line/line.html	(revision 76)
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Line Chart</title>
+    <link type="text/css" rel="stylesheet" href="line.css"/>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    <script type="text/javascript" src="line.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/line/line.js
===================================================================
--- /Dev/trunk/d3/examples/line/line.js	(revision 76)
+++ /Dev/trunk/d3/examples/line/line.js	(revision 76)
@@ -0,0 +1,63 @@
+var data = d3.range(20).map(function(i) {
+  return {x: i / 19, y: (Math.sin(i / 3) + 1) / 2};
+});
+
+var w = 450,
+    h = 275,
+    p = 20,
+    x = d3.scale.linear().domain([0, 1]).range([0, w]),
+    y = d3.scale.linear().domain([0, 1]).range([h, 0]);
+
+var vis = d3.select("body")
+    .data([data])
+  .append("svg:svg")
+    .attr("width", w + p * 2)
+    .attr("height", h + p * 2)
+  .append("svg:g")
+    .attr("transform", "translate(" + p + "," + p + ")");
+
+var rules = vis.selectAll("g.rule")
+    .data(x.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "rule");
+
+rules.append("svg:line")
+    .attr("x1", x)
+    .attr("x2", x)
+    .attr("y1", 0)
+    .attr("y2", h - 1);
+
+rules.append("svg:line")
+    .attr("class", function(d) { return d ? null : "axis"; })
+    .attr("y1", y)
+    .attr("y2", y)
+    .attr("x1", 0)
+    .attr("x2", w + 1);
+
+rules.append("svg:text")
+    .attr("x", x)
+    .attr("y", h + 3)
+    .attr("dy", ".71em")
+    .attr("text-anchor", "middle")
+    .text(x.tickFormat(10));
+
+rules.append("svg:text")
+    .attr("y", y)
+    .attr("x", -3)
+    .attr("dy", ".35em")
+    .attr("text-anchor", "end")
+    .text(y.tickFormat(10));
+
+vis.append("svg:path")
+    .attr("class", "line")
+    .attr("d", d3.svg.line()
+    .x(function(d) { return x(d.x); })
+    .y(function(d) { return y(d.y); }));
+
+vis.selectAll("circle.line")
+    .data(data)
+  .enter().append("svg:circle")
+    .attr("class", "line")
+    .attr("cx", function(d) { return x(d.x); })
+    .attr("cy", function(d) { return y(d.y); })
+    .attr("r", 3.5);
Index: /Dev/trunk/d3/examples/marimekko/marimekko.html
===================================================================
--- /Dev/trunk/d3/examples/marimekko/marimekko.html	(revision 76)
+++ /Dev/trunk/d3/examples/marimekko/marimekko.html	(revision 76)
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Marimekko Chart</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+rect {
+  stroke: #000;
+}
+
+svg {
+  shape-rendering: crispEdges;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500,
+    m = 20,
+    x = d3.scale.linear().range([0, w - 3 * m]),
+    y = d3.scale.linear().range([0, h - 2 * m]),
+    z = d3.scale.category10(),
+    n = d3.format(",d"),
+    p = d3.format("%");
+
+var svg = d3.select("body").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(" + 2 * m + "," + m + ")");
+
+d3.json("marimekko.json", function(data) {
+  var offset = 0;
+
+  // Nest values by segment. We assume each segment+market is unique.
+  var segments = d3.nest()
+      .key(function(d) { return d.segment; })
+      .entries(data);
+
+  // Compute the total sum, the per-segment sum, and the per-market offset.
+  // You can use reduce rather than reduceRight to reverse the ordering.
+  // We also record a reference to the parent segment for each market.
+  var sum = segments.reduce(function(v, p) {
+    return (p.offset = v) + (p.sum = p.values.reduceRight(function(v, d) {
+      d.parent = p;
+      return (d.offset = v) + d.value;
+    }, 0));
+  }, 0);
+
+  // Add x-axis ticks.
+  var xtick = svg.selectAll(".x")
+      .data(x.ticks(10))
+    .enter().append("svg:g")
+      .attr("class", "x")
+      .attr("transform", function(d) { return "translate(" + x(d) + "," + y(1) + ")"; });
+
+  xtick.append("svg:line")
+      .attr("y2", 6)
+      .style("stroke", "#000");
+
+  xtick.append("svg:text")
+      .attr("y", 8)
+      .attr("text-anchor", "middle")
+      .attr("dy", ".71em")
+      .text(p);
+
+  // Add y-axis ticks.
+  var ytick = svg.selectAll(".y")
+      .data(y.ticks(10))
+    .enter().append("svg:g")
+      .attr("class", "y")
+      .attr("transform", function(d) { return "translate(0," + y(1 - d) + ")"; });
+
+  ytick.append("svg:line")
+      .attr("x1", -6)
+      .style("stroke", "#000");
+
+  ytick.append("svg:text")
+      .attr("x", -8)
+      .attr("text-anchor", "end")
+      .attr("dy", ".35em")
+      .text(p);
+
+  // Add a group for each segment.
+  var segments = svg.selectAll(".segment")
+      .data(segments)
+    .enter().append("svg:g")
+      .attr("class", "segment")
+      .attr("xlink:title", function(d) { return d.key; })
+      .attr("transform", function(d) { return "translate(" + x(d.offset / sum) + ")"; });
+
+  // Add a rect for each market.
+  var markets = segments.selectAll(".market")
+      .data(function(d) { return d.values; })
+    .enter().append("svg:a")
+      .attr("class", "market")
+      .attr("xlink:title", function(d) { return d.market + " " + d.parent.key + ": " + n(d.value); })
+    .append("svg:rect")
+      .attr("y", function(d) { return y(d.offset / d.parent.sum); })
+      .attr("height", function(d) { return y(d.value / d.parent.sum); })
+      .attr("width", function(d) { return x(d.parent.sum / sum); })
+      .style("fill", function(d) { return z(d.market); });
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/marimekko/marimekko.json
===================================================================
--- /Dev/trunk/d3/examples/marimekko/marimekko.json	(revision 76)
+++ /Dev/trunk/d3/examples/marimekko/marimekko.json	(revision 76)
@@ -0,0 +1,18 @@
+[
+{"market": "Auburn, AL", "segment": "Almond lovers", "value": 3840},
+{"market": "Auburn, AL", "segment": "Berry buyers", "value": 1920},
+{"market": "Auburn, AL", "segment": "Carrots-n-more", "value": 960},
+{"market": "Auburn, AL", "segment": "Delicious-n-new", "value": 400},
+{"market": "Birmingham, AL", "segment": "Almond lovers", "value": 1600},
+{"market": "Birmingham, AL", "segment": "Berry buyers", "value": 1440},
+{"market": "Birmingham, AL", "segment": "Carrots-n-more", "value": 960},
+{"market": "Birmingham, AL", "segment": "Delicious-n-new", "value": 400},
+{"market": "Gainesville, FL", "segment": "Almond lovers", "value": 640},
+{"market": "Gainesville, FL", "segment": "Berry buyers", "value": 960},
+{"market": "Gainesville, FL", "segment": "Carrots-n-more", "value": 640},
+{"market": "Gainesville, FL", "segment": "Delicious-n-new", "value": 400},
+{"market": "Durham, NC", "segment": "Almond lovers", "value": 320},
+{"market": "Durham, NC", "segment": "Berry buyers", "value": 480},
+{"market": "Durham, NC", "segment": "Carrots-n-more", "value": 640},
+{"market": "Durham, NC", "segment": "Delicious-n-new", "value": 400}
+]
Index: /Dev/trunk/d3/examples/mercator/mercator.html
===================================================================
--- /Dev/trunk/d3/examples/mercator/mercator.html	(revision 76)
+++ /Dev/trunk/d3/examples/mercator/mercator.html	(revision 76)
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Mercator Projection</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <script type="text/javascript" src="../../lib/jquery/jquery.min.js"></script>
+    <script type="text/javascript" src="../../lib/jquery-ui/jquery-ui.min.js"></script>
+    <style type="text/css">
+
+@import url("../../lib/jquery-ui/jquery-ui.css");
+
+body, .ui-widget {
+  font: 14px Helvetica Neue;
+}
+
+svg {
+  width: 960px;
+  height: 500px;
+  border: solid 1px #ccc;
+  background: #eee;
+}
+
+line {
+  stroke: brown;
+  stroke-dasharray: 4,2;
+}
+
+path {
+  fill: #ccc;
+  stroke: #fff;
+}
+
+div {
+  width: 960px;
+}
+
+    </style>
+  </head>
+  <body>
+    <h3>Mercator Projection</h3>
+    <script type="text/javascript">
+
+// Our projection.
+var xy = d3.geo.mercator(),
+    path = d3.geo.path().projection(xy);
+
+var states = d3.select("body")
+  .append("svg:svg")
+  .append("svg:g")
+    .attr("id", "states");
+
+var equator = d3.select("svg")
+  .append("svg:line")
+    .attr("x1", "0%")
+    .attr("x2", "100%");
+
+d3.json("../data/world-countries.json", function(collection) {
+
+  states
+    .selectAll("path")
+      .data(collection.features)
+    .enter().append("svg:path")
+      .attr("d", path)
+    .append("svg:title")
+      .text(function(d) { return d.properties.name; });
+
+  equator
+      .attr("y1", xy([0, 0])[1])
+      .attr("y2", xy([0, 0])[1])
+});
+
+function refresh() {
+  states
+    .selectAll("path")
+      .attr("d", path);
+
+  equator
+      .attr("y1", xy([0, 0])[1])
+      .attr("y2", xy([0, 0])[1])
+
+  d3.select("#scale span")
+      .text(xy.scale());
+  d3.select("#translate-x span")
+      .text(xy.translate()[0]);
+  d3.select("#translate-y span")
+      .text(xy.translate()[1]);
+}
+
+    </script><p>
+    <div id="scale">scale: <span>500</span></div><p>
+    <div id="translate-x">translate.x: <span>480</span></div>
+    <div id="translate-y">translate.y: <span>250</span></div>
+    <script type="text/javascript">
+
+$("#scale").slider({
+  min: 0,
+  max: 3000,
+  value: 500,
+  slide: function(event, ui) {
+    xy.scale(ui.value);
+    refresh();
+  }
+});
+
+$("#translate-x").slider({
+  min: -2000,
+  max: 2000,
+  value: 480,
+  slide: function(event, ui) {
+    var translate = xy.translate();
+    translate[0] = ui.value;
+    xy.translate(translate);
+    refresh();
+  }
+});
+
+$("#translate-y").slider({
+  min: -2000,
+  max: 2000,
+  value: 250,
+  slide: function(event, ui) {
+    var translate = xy.translate();
+    translate[1] = ui.value;
+    xy.translate(translate);
+    refresh();
+  }
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/moire/moire.html
===================================================================
--- /Dev/trunk/d3/examples/moire/moire.html	(revision 76)
+++ /Dev/trunk/d3/examples/moire/moire.html	(revision 76)
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>MoirÃ© Patterns</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+circle {
+  fill: none;
+  stroke: #000;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500;
+
+var svg = d3.select("body")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+    .attr("pointer-events", "all");
+
+svg.append("svg:g")
+  .selectAll("circle")
+    .data(d3.range(110))
+  .enter().append("svg:circle")
+    .attr("transform", "translate(" + w / 2 + "," + h / 2 + ")")
+    .attr("r", function(d) { return d * 5; });
+
+var circle = svg.append("svg:g")
+  .selectAll("circle")
+    .data(d3.range(60))
+  .enter().append("svg:circle")
+    .attr("transform", "translate(" + w / 2 + "," + h / 2 + ")")
+    .attr("r", function(d) { return d * 3; });
+
+svg.on("mousemove", function() {
+  var mouse = d3.svg.mouse(this),
+      r = (Math.sqrt(mouse[0]) + 10) / 10;
+
+  circle
+      .attr("transform", "translate(" + mouse + ")")
+      .attr("r", function(d) { return d * r; });
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/pack/pack.css
===================================================================
--- /Dev/trunk/d3/examples/pack/pack.css	(revision 76)
+++ /Dev/trunk/d3/examples/pack/pack.css	(revision 76)
@@ -0,0 +1,15 @@
+circle {
+  fill: rgb(31, 119, 180);
+  fill-opacity: .25;
+  stroke: rgb(31, 119, 180);
+  stroke-width: 1px;
+}
+
+.leaf circle {
+  fill: #ff7f0e;
+  fill-opacity: 1;
+}
+
+text {
+  font: 10px sans-serif;
+}
Index: /Dev/trunk/d3/examples/pack/pack.html
===================================================================
--- /Dev/trunk/d3/examples/pack/pack.html	(revision 76)
+++ /Dev/trunk/d3/examples/pack/pack.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Circle Packing</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="pack.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="pack.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/pack/pack.js
===================================================================
--- /Dev/trunk/d3/examples/pack/pack.js	(revision 76)
+++ /Dev/trunk/d3/examples/pack/pack.js	(revision 76)
@@ -0,0 +1,33 @@
+var w = 960,
+    h = 960,
+    format = d3.format(",d");
+
+var pack = d3.layout.pack()
+    .size([w - 4, h - 4])
+    .value(function(d) { return d.size; });
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+    .attr("class", "pack")
+  .append("svg:g")
+    .attr("transform", "translate(2, 2)");
+
+d3.json("../data/flare.json", function(json) {
+  var node = vis.data([json]).selectAll("g.node")
+      .data(pack.nodes)
+    .enter().append("svg:g")
+      .attr("class", function(d) { return d.children ? "node" : "leaf node"; })
+      .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
+
+  node.append("svg:title")
+      .text(function(d) { return d.name + (d.children ? "" : ": " + format(d.size)); });
+
+  node.append("svg:circle")
+      .attr("r", function(d) { return d.r; });
+
+  node.filter(function(d) { return !d.children; }).append("svg:text")
+      .attr("text-anchor", "middle")
+      .attr("dy", ".3em")
+      .text(function(d) { return d.name.substring(0, d.r / 3); });
+});
Index: /Dev/trunk/d3/examples/partition/partition-icicle-zoom.html
===================================================================
--- /Dev/trunk/d3/examples/partition/partition-icicle-zoom.html	(revision 76)
+++ /Dev/trunk/d3/examples/partition/partition-icicle-zoom.html	(revision 76)
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Partition - Icicle</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+rect {
+  stroke: #fff;
+}
+
+    </style>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 250,
+    x = d3.scale.linear().range([0, w]),
+    y = d3.scale.linear().range([0, h]),
+    color = d3.scale.category20c();
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+var partition = d3.layout.partition()
+    .value(function(d) { return d.size; });
+
+d3.json("../data/flare.json", function(json) {
+  var rect = vis.data([json]).selectAll("rect")
+      .data(partition.nodes)
+    .enter().append("svg:rect")
+      .attr("x", function(d) { return x(d.x); })
+      .attr("y", function(d) { return y(d.y); })
+      .attr("width", function(d) { return x(d.dx); })
+      .attr("height", function(d) { return y(d.dy); })
+      .attr("fill", function(d) { return color((d.children ? d : d.parent).name); })
+      .on("click", click);
+
+  function click(d) {
+    x.domain([d.x, d.x + d.dx]);
+    y.domain([d.y, 1]).range([d.y ? 20 : 0, h]);
+
+    rect.transition()
+      .duration(750)
+      .attr("x", function(d) { return x(d.x); })
+      .attr("y", function(d) { return y(d.y); })
+      .attr("width", function(d) { return x(d.x + d.dx) - x(d.x); })
+      .attr("height", function(d) { return y(d.y + d.dy) - y(d.y); });
+  }
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/partition/partition-icicle.html
===================================================================
--- /Dev/trunk/d3/examples/partition/partition-icicle.html	(revision 76)
+++ /Dev/trunk/d3/examples/partition/partition-icicle.html	(revision 76)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Partition - Icicle</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+rect {
+  stroke: #fff;
+}
+
+    </style>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 250,
+    color = d3.scale.category20c();
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+var partition = d3.layout.partition()
+    .size([w, h])
+    .value(function(d) { return d.size; });
+
+d3.json("../data/flare.json", function(json) {
+  vis.data([json]).selectAll("rect")
+      .data(partition.nodes)
+    .enter().append("svg:rect")
+      .attr("x", function(d) { return d.x; })
+      .attr("y", function(d) { return d.y; })
+      .attr("width", function(d) { return d.dx; })
+      .attr("height", function(d) { return d.dy; })
+      .style("fill", function(d) { return color((d.children ? d : d.parent).name); });
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/partition/partition-sunburst-zoom.html
===================================================================
--- /Dev/trunk/d3/examples/partition/partition-sunburst-zoom.html	(revision 76)
+++ /Dev/trunk/d3/examples/partition/partition-sunburst-zoom.html	(revision 76)
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Partition - Sunburst</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+path {
+  stroke: #fff;
+  fill-rule: evenodd;
+}
+
+    </style>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 700,
+    r = Math.min(w, h) / 2,
+    x = d3.scale.linear().range([0, 2 * Math.PI]),
+    y = d3.scale.sqrt().range([0, r]),
+    color = d3.scale.category20c();
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(" + w / 2 + "," + h / 2 + ")");
+
+var partition = d3.layout.partition()
+    .value(function(d) { return d.size; });
+
+var arc = d3.svg.arc()
+    .startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })
+    .endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })
+    .innerRadius(function(d) { return Math.max(0, y(d.y)); })
+    .outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); });
+
+d3.json("../data/flare.json", function(json) {
+  var path = vis.data([json]).selectAll("path")
+      .data(partition.nodes)
+    .enter().append("svg:path")
+      .attr("d", arc)
+      .style("fill", function(d) { return color((d.children ? d : d.parent).name); })
+      .on("click", click);
+
+  function click(d) {
+    path.transition()
+      .duration(750)
+      .attrTween("d", arcTween(d));
+  }
+});
+
+// Interpolate the scales!
+function arcTween(d) {
+  var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
+      yd = d3.interpolate(y.domain(), [d.y, 1]),
+      yr = d3.interpolate(y.range(), [d.y ? 20 : 0, r]);
+  return function(d, i) {
+    return i
+        ? function(t) { return arc(d); }
+        : function(t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return arc(d); };
+  };
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/partition/partition-sunburst.html
===================================================================
--- /Dev/trunk/d3/examples/partition/partition-sunburst.html	(revision 76)
+++ /Dev/trunk/d3/examples/partition/partition-sunburst.html	(revision 76)
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Partition - Sunburst</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="../button.css"/>
+  </head>
+  <body>
+    <div id="chart">
+      <button id="size" class="first">
+        Size
+      </button
+      ><button id="count" class="active last">
+        Count
+      </button><p>
+    </div>
+    <script type="text/javascript" src="partition-sunburst.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/partition/partition-sunburst.js
===================================================================
--- /Dev/trunk/d3/examples/partition/partition-sunburst.js	(revision 76)
+++ /Dev/trunk/d3/examples/partition/partition-sunburst.js	(revision 76)
@@ -0,0 +1,72 @@
+var w = 960,
+    h = 700,
+    r = Math.min(w, h) / 2,
+    color = d3.scale.category20c();
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(" + w / 2 + "," + h / 2 + ")");
+
+var partition = d3.layout.partition()
+    .sort(null)
+    .size([2 * Math.PI, r * r])
+    .value(function(d) { return 1; });
+
+var arc = d3.svg.arc()
+    .startAngle(function(d) { return d.x; })
+    .endAngle(function(d) { return d.x + d.dx; })
+    .innerRadius(function(d) { return Math.sqrt(d.y); })
+    .outerRadius(function(d) { return Math.sqrt(d.y + d.dy); });
+
+d3.json("../data/flare.json", function(json) {
+  var path = vis.data([json]).selectAll("path")
+      .data(partition.nodes)
+    .enter().append("svg:path")
+      .attr("display", function(d) { return d.depth ? null : "none"; }) // hide inner ring
+      .attr("d", arc)
+      .attr("fill-rule", "evenodd")
+      .style("stroke", "#fff")
+      .style("fill", function(d) { return color((d.children ? d : d.parent).name); })
+      .each(stash);
+
+  d3.select("#size").on("click", function() {
+    path
+        .data(partition.value(function(d) { return d.size; }))
+      .transition()
+        .duration(1500)
+        .attrTween("d", arcTween);
+
+    d3.select("#size").classed("active", true);
+    d3.select("#count").classed("active", false);
+  });
+
+  d3.select("#count").on("click", function() {
+    path
+        .data(partition.value(function(d) { return 1; }))
+      .transition()
+        .duration(1500)
+        .attrTween("d", arcTween);
+
+    d3.select("#size").classed("active", false);
+    d3.select("#count").classed("active", true);
+  });
+});
+
+// Stash the old values for transition.
+function stash(d) {
+  d.x0 = d.x;
+  d.dx0 = d.dx;
+}
+
+// Interpolate the arcs in data space.
+function arcTween(a) {
+  var i = d3.interpolate({x: a.x0, dx: a.dx0}, a);
+  return function(t) {
+    var b = i(t);
+    a.x0 = b.x;
+    a.dx0 = b.dx;
+    return arc(b);
+  };
+}
Index: /Dev/trunk/d3/examples/pie/pie-transition.html
===================================================================
--- /Dev/trunk/d3/examples/pie/pie-transition.html	(revision 76)
+++ /Dev/trunk/d3/examples/pie/pie-transition.html	(revision 76)
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Pie Chart</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 400,
+    h = 400,
+    r = Math.min(w, h) / 2,
+    data = d3.range(10).map(Math.random),
+    color = d3.scale.category20(),
+    arc = d3.svg.arc().outerRadius(r),
+    donut = d3.layout.pie();
+
+var vis = d3.select("body")
+  .append("svg:svg")
+    .data([data.sort(d3.descending)])
+    .attr("width", w)
+    .attr("height", h);
+
+var arcs = vis.selectAll("g.arc")
+    .data(donut)
+  .enter().append("svg:g")
+    .attr("class", "arc")
+    .attr("transform", "translate(" + r + "," + r + ")");
+
+var paths = arcs.append("svg:path")
+    .attr("fill", function(d, i) { return color(i); });
+
+paths.transition()
+    .ease("bounce")
+    .duration(2000)
+    .attrTween("d", tweenPie);
+
+paths.transition()
+    .ease("elastic")
+    .delay(function(d, i) { return 2000 + i * 50; })
+    .duration(750)
+    .attrTween("d", tweenDonut);
+
+function tweenPie(b) {
+  b.innerRadius = 0;
+  var i = d3.interpolate({startAngle: 0, endAngle: 0}, b);
+  return function(t) {
+    return arc(i(t));
+  };
+}
+
+function tweenDonut(b) {
+  b.innerRadius = r * .6;
+  var i = d3.interpolate({innerRadius: 0}, b);
+  return function(t) {
+    return arc(i(t));
+  };
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/pie/pie.html
===================================================================
--- /Dev/trunk/d3/examples/pie/pie.html	(revision 76)
+++ /Dev/trunk/d3/examples/pie/pie.html	(revision 76)
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Pie Chart</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 400,
+    h = 400,
+    r = Math.min(w, h) / 2,
+    data = d3.range(10).map(Math.random),
+    color = d3.scale.category20(),
+    donut = d3.layout.pie().sort(d3.descending),
+    arc = d3.svg.arc().innerRadius(r * .6).outerRadius(r);
+
+var vis = d3.select("body")
+  .append("svg:svg")
+    .data([data])
+    .attr("width", w)
+    .attr("height", h);
+
+var arcs = vis.selectAll("g.arc")
+    .data(donut)
+  .enter().append("svg:g")
+    .attr("class", "arc")
+    .attr("transform", "translate(" + r + "," + r + ")");
+
+arcs.append("svg:path")
+    .attr("fill", function(d, i) { return color(i); })
+    .attr("d", arc);
+
+arcs.append("svg:text")
+    .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
+    .attr("dy", ".35em")
+    .attr("text-anchor", "middle")
+    .attr("display", function(d) { return d.value > .15 ? null : "none"; })
+    .text(function(d, i) { return d.value.toFixed(2); });
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/qq/qq.css
===================================================================
--- /Dev/trunk/d3/examples/qq/qq.css	(revision 76)
+++ /Dev/trunk/d3/examples/qq/qq.css	(revision 76)
@@ -0,0 +1,18 @@
+#chart {
+  font: 10px sans-serif;
+  width: 960px;
+  height: 310px;
+}
+
+.qq .box, .qq .tick line, .qq .quantile, .qq .diagonal {
+  stroke: #aaa;
+  fill: none;
+}
+
+.qq .quantile {
+  stroke: #000;
+}
+
+.qq g + g .y.tick {
+  display: none;
+}
Index: /Dev/trunk/d3/examples/qq/qq.html
===================================================================
--- /Dev/trunk/d3/examples/qq/qq.html	(revision 76)
+++ /Dev/trunk/d3/examples/qq/qq.html	(revision 76)
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Q-Q Plots</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.chart.js"></script>
+    <script type="text/javascript" src="../../lib/science/science.js"></script>
+    <script type="text/javascript" src="../../lib/science/science.stats.js"></script>
+    <link type="text/css" rel="stylesheet" href="../button.css"/>
+    <link type="text/css" rel="stylesheet" href="qq.css"/>
+  </head>
+  <body>
+    <div id="chart">
+      <button class="first last" onclick="transition()">
+        Update
+      </button>
+    </div>
+    <script type="text/javascript" src="stats.js"></script>
+    <script type="text/javascript" src="qq.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/qq/qq.js
===================================================================
--- /Dev/trunk/d3/examples/qq/qq.js	(revision 76)
+++ /Dev/trunk/d3/examples/qq/qq.js	(revision 76)
@@ -0,0 +1,66 @@
+var w = 280,
+    h = 280,
+    m = [10, 0, 20, 35], // top right bottom left
+    n = 10000; // number of samples to generate
+
+var chart = d3.chart.qq()
+    .width(w)
+    .height(h)
+    .domain([-.1, 1.1])
+    .tickFormat(function(d) { return ~~(d * 100); });
+
+var vis = d3.select("#chart")
+  .append("svg:svg")
+  .append("svg:g")
+    .attr("transform", "translate(" + m[3] + "," + m[0] + ")");
+
+d3.json("turkers.json", function(turkers) {
+  var tm = science.stats.mean(turkers),
+      td = Math.sqrt(science.stats.variance(turkers)),
+      dd = [
+        [0.10306430789206111, 0.0036139086950272735, 0.30498647327844536],
+        [0.5924252668569606, 0.0462763685758622, 0.4340870312025223],
+        [0.9847627827855167, 2.352350767874714e-4, 0.2609264955190324]
+      ];
+
+  var g = vis.selectAll("g")
+      .data([{
+        x: d3.range(n).map(Math.random),
+        y: turkers,
+        label: "Uniform Distribution"
+      }, {
+        x: d3.range(n).map(normal1(tm, td)),
+        y: turkers,
+        label: "Gaussian (Normal) Distribution"
+      }, {
+        x: d3.range(n).map(normal3(dd)),
+        y: turkers,
+        label: "Mixture of 3 Gaussians"
+      }])
+    .enter().append("svg:g")
+      .attr("class", "qq")
+      .attr("transform", function(d, i) { return "translate(" + (w + m[1] + m[3]) * i + ")"; });
+
+  g.append("svg:rect")
+      .attr("class", "box")
+      .attr("width", w)
+      .attr("height", h);
+
+  g.call(chart);
+
+  g.append("svg:text")
+      .attr("dy", "1.3em")
+      .attr("dx", ".6em")
+      .text(function(d) { return d.label; });
+
+  chart.duration(1000);
+
+  window.transition = function() {
+    g.map(randomize).call(chart);
+  };
+});
+
+function randomize(d) {
+  d.y = d3.range(n).map(Math.random);
+  return d;
+}
Index: /Dev/trunk/d3/examples/qq/stats.js
===================================================================
--- /Dev/trunk/d3/examples/qq/stats.js	(revision 76)
+++ /Dev/trunk/d3/examples/qq/stats.js	(revision 76)
@@ -0,0 +1,28 @@
+// Sample from a normal distribution with mean 0, stddev 1.
+function normal() {
+  var x = 0, y = 0, rds, c;
+  do {
+    x = Math.random() * 2 - 1;
+    y = Math.random() * 2 - 1;
+    rds = x * x + y * y;
+  } while (rds == 0 || rds > 1);
+  c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform
+  return x * c; // throw away extra sample y * c
+}
+
+// Simple 1D Gaussian (normal) distribution
+function normal1(mean, deviation) {
+  return function() {
+    return mean + deviation * normal();
+  };
+}
+
+// Gaussian Mixture Model (k=3) fit using E-M algorithm
+function normal3(dd) {
+  return function() {
+    var r = Math.random(),
+        i = r < dd[0][2] ? 0 : r < dd[0][2] + dd[1][2] ? 1 : 2,
+        d = dd[i];
+    return d[0] + Math.sqrt(d[1]) * normal();
+  }
+}
Index: /Dev/trunk/d3/examples/qq/turkers.json
===================================================================
--- /Dev/trunk/d3/examples/qq/turkers.json	(revision 76)
+++ /Dev/trunk/d3/examples/qq/turkers.json	(revision 76)
@@ -0,0 +1,1 @@
+[0.009259259,0.014285714,0.014285714,0.016666667,0.016666667,0.017857143,0.018518519,0.027777778,0.028571429,0.028571429,0.028571429,0.033333333,0.033333333,0.035714286,0.0375,0.041666667,0.041666667,0.041666667,0.041666667,0.042857143,0.042857143,0.042857143,0.05,0.055555556,0.069444444,0.083333333,0.083333333,0.083333333,0.083333333,0.083333333,0.083333333,0.085714286,0.1,0.1,0.101851852,0.104166667,0.111111111,0.111111111,0.114285714,0.114285714,0.116666667,0.12037037,0.125,0.125,0.128571429,0.133333333,0.138888889,0.141666667,0.142857143,0.142857143,0.15,0.152777778,0.158333333,0.166666667,0.171428571,0.183333333,0.185714286,0.185714286,0.1875,0.190140845,0.194444444,0.2,0.204545455,0.208333333,0.214285714,0.214285714,0.253521127,0.271428571,0.277777778,0.291666667,0.3,0.3,0.307017544,0.324074074,0.328571429,0.333333333,0.333333333,0.342857143,0.357142857,0.358333333,0.378787879,0.381355932,0.395833333,0.4,0.414285714,0.414285714,0.414285714,0.414285714,0.43,0.433333333,0.4375,0.445833333,0.450704225,0.453333333,0.458333333,0.466666667,0.476666667,0.494736842,0.5,0.516666667,0.533333333,0.55,0.557142857,0.56884058,0.569444444,0.571428571,0.585714286,0.61,0.622222222,0.657407407,0.666666667,0.678947368,0.685714286,0.685714286,0.69047619,0.7,0.7,0.7,0.711538462,0.763888889,0.771428571,0.788888889,0.8,0.8,0.808333333,0.824712644,0.828571429,0.836842105,0.839285714,0.839285714,0.84,0.842857143,0.842857143,0.842857143,0.85,0.859649123,0.869791667,0.871428571,0.871428571,0.892344498,0.914285714,0.928571429,0.933908046,0.953703704,0.973684211,0.975,0.981481481,0.983333333,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.985714286,0.987096774,0.990740741,0.991666667,0.992,0.994047619,0.996666667,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
Index: /Dev/trunk/d3/examples/quadtree/quadtree.html
===================================================================
--- /Dev/trunk/d3/examples/quadtree/quadtree.html	(revision 76)
+++ /Dev/trunk/d3/examples/quadtree/quadtree.html	(revision 76)
@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Quadtree</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <style type="text/css">
+
+svg {
+  padding: 2px;
+}
+
+circle {
+  fill: lightsteelblue;
+  stroke: steelblue;
+  stroke-width: 1.5px;
+}
+
+rect {
+  fill: none;
+  stroke: #000;
+  stroke-opacity: .3;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 500;
+
+// Generate random points.
+var data = d3.range(500).map(function() {
+  return {
+    x: Math.random() * w,
+    y: Math.random() * w
+  };
+});
+
+// Generate a quadtree of the specified data.
+var quadtree = d3.geom.quadtree(data, 0, w);
+
+var vis = d3.select("body").append("svg:svg")
+    .attr("width", w)
+    .attr("height", w)
+    .style("pointer-events", "all");
+
+vis.selectAll("rect")
+    .data(nodes(quadtree))
+  .enter().append("svg:rect")
+    .attr("x", function(d) { return d.x; })
+    .attr("y", function(d) { return d.y; })
+    .attr("width", function(d) { return d.width; })
+    .attr("height", function(d) { return d.height; });
+
+vis.selectAll("circle")
+    .data(data)
+  .enter().append("svg:circle")
+    .attr("cx", function(d) { return d.x; })
+    .attr("cy", function(d) { return d.y; })
+    .attr("r", 4.5);
+
+// Highlight selected nodes using the quadtree.
+vis.on("mousedown", function() {
+  var m0 = d3.svg.mouse(this);
+
+  var rect = d3.select(this).append("svg:rect")
+      .style("fill", "#999")
+      .style("fill-opacity", .5);
+
+  d3.select(window).on("mousemove", function() {
+    var m1 = d3.svg.mouse(rect.node()),
+        x0 = Math.min(w, m0[0], m1[0]),
+        y0 = Math.min(w, m0[1], m1[1]),
+        x1 = Math.max(0, m0[0], m1[0]),
+        y1 = Math.max(0, m0[1], m1[1]);
+
+    data.forEach(function(d) { d.z = 0; })
+    find(quadtree, x0, y0, x1, y1).forEach(function(d) { d.z = 1; });
+    vis.selectAll("circle").style("fill", function(d) { return d.z ? "red" : null; });
+    rect.attr("x", x0).attr("y", y0).attr("width", x1 - x0).attr("height", y1 - y0);
+  });
+
+  d3.select(window).on("mouseup", function() {
+    rect.remove();
+    d3.select(window).on("mousemove", null).on("mouseup", null);
+  });
+
+  d3.event.preventDefault();
+});
+
+// Collapse the quadtree into an array of rectangles.
+function nodes(quadtree) {
+  var nodes = [];
+  quadtree.visit(function(node, x1, y1, x2, y2) {
+    nodes.push({x: x1, y: y1, width: x2 - x1, height: y2 - y1});
+  });
+  return nodes;
+}
+
+// Find the nodes within the specified rectangle.
+function find(quadtree, x0, y0, x3, y3) {
+  var points = [];
+  quadtree.visit(function(node, x1, y1, x2, y2) {
+    var p = node.point;
+    if (p && (p.x >= x0) && (p.x < x3) && (p.y >= y0) && (p.y < y3)) points.push(p);
+    return x1 >= x3 || y1 >= y3 || x2 < x0 || y2 < y0;
+  });
+  return points;
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/sizzle/sizzle.html
===================================================================
--- /Dev/trunk/d3/examples/sizzle/sizzle.html	(revision 76)
+++ /Dev/trunk/d3/examples/sizzle/sizzle.html	(revision 76)
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Sizzle</title>
+    <script type="text/javascript" src="../../lib/sizzle/sizzle.js"></script>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+body {
+  margin: 2em;
+  text-align: center;
+  font: 300 36px helvetica neue;
+}
+
+    </style>
+  </head>
+  <body>
+    Sizzle.js disabled.
+    <script type="text/javascript">
+
+// The :first psuedo-class is a custom Sizzle extension.
+d3.select("body:first")
+    .html("Sizzle.js enabled!");
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/sort/sort.css
===================================================================
--- /Dev/trunk/d3/examples/sort/sort.css	(revision 76)
+++ /Dev/trunk/d3/examples/sort/sort.css	(revision 76)
@@ -0,0 +1,4 @@
+line {
+  stroke: #000;
+  stroke-width: 1.5px;
+}
Index: /Dev/trunk/d3/examples/sort/sort.html
===================================================================
--- /Dev/trunk/d3/examples/sort/sort.html	(revision 76)
+++ /Dev/trunk/d3/examples/sort/sort.html	(revision 76)
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Merge Sort</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <link type="text/css" rel="stylesheet" href="sort.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="sort.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/sort/sort.js
===================================================================
--- /Dev/trunk/d3/examples/sort/sort.js	(revision 76)
+++ /Dev/trunk/d3/examples/sort/sort.js	(revision 76)
@@ -0,0 +1,112 @@
+// Based on http://vis.stanford.edu/protovis/ex/sort.html
+// Based on work by Robert Sedgewick
+
+var w = 960,
+    h = 50,
+    n = 240,
+    x = d3.scale.linear().domain([0, n]).range([h, w - h]),
+    a = d3.scale.linear().domain([0, n - 1]).range([90 + 60, 270 - 60]),
+    data = shuffle(d3.range(n)),
+    duration = 250;
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+var line = vis.selectAll("line")
+    .data(data)
+  .enter().append("svg:line")
+    .attr("x1", 0)
+    .attr("y1", 0)
+    .attr("x2", 0)
+    .attr("y2", h)
+    .attr("transform", transform);
+
+start();
+
+// Start the animation!
+function start() {
+  var passes = mergesort(data).reverse();
+
+  update();
+
+  function update() {
+    var pass = passes.pop();
+
+    line.data(pass, Number)
+      .transition()
+        .duration(duration)
+        .attr("transform", transform);
+
+    if (passes.length) {
+      setTimeout(update, duration);
+    } else {
+      shuffle(data);
+      setTimeout(start, duration + 4000);
+    }
+  }
+}
+
+function transform(d, i) {
+  return "translate(" + x(i) + "," + h + ")rotate(" + a(d) + ")";
+}
+
+// Fisher-Yates shuffle
+function shuffle(array) {
+  var i = array.length, j, t;
+  while (--i > 0) {
+    j = ~~(Math.random() * (i + 1));
+    t = array[j];
+    array[j] = array[i];
+    array[i] = t;
+  }
+  return array;
+}
+
+//
+// Sorts the specified array using bottom-up mergesort, returning an array of
+// arrays representing the state of the specified array after each insertion for
+// each parallel pass. The first pass is performed at size = 2.
+//
+function mergesort(array) {
+  var passes = [],
+      i,
+      j,
+      n = array.length,
+      m = 1;
+
+  // double the size each pass
+  while (m < array.length) {
+    i = j = 0; while (i < array.length) j += merge(i, i += m, i += m);
+    if (j) passes.push(array.slice());
+    else m <<= 1;
+  }
+
+  // Merges two adjacent sorted arrays in-place.
+  function merge(start, middle, end) {
+    middle = Math.min(array.length, middle);
+    end = Math.min(array.length, end);
+    for (; start < middle; start++) {
+      if (array[start] > array[middle]) {
+        var v = array[start];
+        array[start] = array[middle];
+        insert(middle, end, v);
+        return true;
+      }
+    }
+    return false;
+  }
+
+  // Inserts the value v into the subarray specified by start and end.
+  function insert(start, end, v) {
+    while (start + 1 < end && array[start + 1] < v) {
+      var tmp = array[start];
+      array[start] = array[start + 1];
+      array[start + 1] = tmp;
+      start++;
+    }
+    array[start] = v;
+  }
+
+  return passes;
+}
Index: /Dev/trunk/d3/examples/spline/spline.css
===================================================================
--- /Dev/trunk/d3/examples/spline/spline.css	(revision 76)
+++ /Dev/trunk/d3/examples/spline/spline.css	(revision 76)
@@ -0,0 +1,30 @@
+body {
+  font: 13px sans-serif;
+}
+
+#chart svg {
+  width: 960px;
+  height: 500px;
+  border: solid 1px #ccc;
+}
+
+rect {
+  fill: #fff;
+}
+
+circle, .line {
+  fill: none;
+  stroke: steelblue;
+  stroke-width: 1.5px;
+}
+
+circle {
+  fill: #fff;
+  fill-opacity: .2;
+  cursor: move;
+}
+
+circle.selected {
+  fill: #ff7f0e;
+  stroke: #ff7f0e;
+}
Index: /Dev/trunk/d3/examples/spline/spline.html
===================================================================
--- /Dev/trunk/d3/examples/spline/spline.html	(revision 76)
+++ /Dev/trunk/d3/examples/spline/spline.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Spline Editor</title>
+    <link type="text/css" rel="stylesheet" href="spline.css"/>
+    <script type="text/javascript" src="../../d3.js"></script>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <label for="interpolate">Interpolate:</label>
+    <select id="interpolate"></select>
+    <script type="text/javascript" src="spline.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/spline/spline.js
===================================================================
--- /Dev/trunk/d3/examples/spline/spline.js	(revision 76)
+++ /Dev/trunk/d3/examples/spline/spline.js	(revision 76)
@@ -0,0 +1,113 @@
+var w = 960,
+    h = 500,
+    line = d3.svg.line(),
+    points = d3.range(1, 5).map(function(i) { return [i * w / 5, 50 + Math.random() * (h - 100)]; }),
+    dragged = null,
+    selected = points[0];
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+vis.append("svg:rect")
+    .attr("width", w)
+    .attr("height", h)
+    .on("mousedown", function() {
+      points.push(selected = dragged = d3.svg.mouse(vis.node()));
+      update();
+    });
+
+vis.append("svg:path")
+    .data([points])
+    .attr("class", "line")
+    .call(update);
+
+d3.select(window)
+    .on("mousemove", mousemove)
+    .on("mouseup", mouseup)
+    .on("keydown", keydown);
+
+// Add interpolator dropdown
+d3.select("#interpolate")
+    .on("change", function() {
+      line.interpolate(this.value);
+      update();
+    })
+  .selectAll("option")
+    .data([
+      "linear",
+      "step-before",
+      "step-after",
+      "basis",
+      "basis-open",
+      "basis-closed",
+      "cardinal",
+      "cardinal-open",
+      "cardinal-closed",
+      "monotone"
+    ])
+  .enter().append("option")
+    .attr("value", String)
+    .text(String);
+
+function update() {
+  vis.select("path").attr("d", line);
+
+  var circle = vis.selectAll("circle")
+      .data(points, function(d) { return d; });
+
+  circle.enter().append("svg:circle")
+      .attr("class", function(d) { return d === selected ? "selected" : null; })
+      .attr("cx", function(d) { return d[0]; })
+      .attr("cy", function(d) { return d[1]; })
+      .attr("r", 1e-6)
+      .on("mousedown", function(d) {
+        selected = dragged = d;
+        update();
+      })
+    .transition()
+      .duration(750)
+      .ease("elastic")
+      .attr("r", 6.5);
+
+  circle
+      .attr("class", function(d) { return d === selected ? "selected" : null; })
+      .attr("cx", function(d) { return d[0]; })
+      .attr("cy", function(d) { return d[1]; });
+
+  circle.exit().remove();
+
+  if (d3.event) {
+    d3.event.preventDefault();
+    d3.event.stopPropagation();
+  }
+}
+
+
+function mousemove() {
+  if (!dragged) return;
+  var m = d3.svg.mouse(vis.node());
+  dragged[0] = Math.max(0, Math.min(w, m[0]));
+  dragged[1] = Math.max(0, Math.min(h, m[1]));
+  update();
+}
+
+function mouseup() {
+  if (!dragged) return;
+  mousemove();
+  dragged = null;
+}
+
+function keydown() {
+  if (!selected) return;
+  switch (d3.event.keyCode) {
+    case 8: // backspace
+    case 46: { // delete
+      var i = points.indexOf(selected);
+      points.splice(i, 1);
+      selected = points.length ? points[i > 0 ? i - 1 : 0] : null;
+      update();
+      break;
+    }
+  }
+}
Index: /Dev/trunk/d3/examples/splom/cross.js
===================================================================
--- /Dev/trunk/d3/examples/splom/cross.js	(revision 76)
+++ /Dev/trunk/d3/examples/splom/cross.js	(revision 76)
@@ -0,0 +1,7 @@
+function cross(a) {
+  return function(d) {
+    var c = [];
+    for (var i = 0, n = a.length; i < n; i++) c.push({x: d, y: a[i]});
+    return c;
+  };
+}
Index: /Dev/trunk/d3/examples/splom/flowers.json
===================================================================
--- /Dev/trunk/d3/examples/splom/flowers.json	(revision 76)
+++ /Dev/trunk/d3/examples/splom/flowers.json	(revision 76)
@@ -0,0 +1,1 @@
+{"traits":["sepalLength","sepalWidth","petalLength","petalWidth"],"species":["setosa","versicolor","virginica"],"values":[{"sepalLength":5.1,"sepalWidth":3.5,"petalLength":1.4,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.9,"sepalWidth":3.0,"petalLength":1.4,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.7,"sepalWidth":3.2,"petalLength":1.3,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.6,"sepalWidth":3.1,"petalLength":1.5,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.0,"sepalWidth":3.6,"petalLength":1.4,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.4,"sepalWidth":3.9,"petalLength":1.7,"petalWidth":0.4,"species":"setosa"},{"sepalLength":4.6,"sepalWidth":3.4,"petalLength":1.4,"petalWidth":0.3,"species":"setosa"},{"sepalLength":5.0,"sepalWidth":3.4,"petalLength":1.5,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.4,"sepalWidth":2.9,"petalLength":1.4,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.9,"sepalWidth":3.1,"petalLength":1.5,"petalWidth":0.1,"species":"setosa"},{"sepalLength":5.4,"sepalWidth":3.7,"petalLength":1.5,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.8,"sepalWidth":3.4,"petalLength":1.6,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.8,"sepalWidth":3.0,"petalLength":1.4,"petalWidth":0.1,"species":"setosa"},{"sepalLength":4.3,"sepalWidth":3.0,"petalLength":1.1,"petalWidth":0.1,"species":"setosa"},{"sepalLength":5.8,"sepalWidth":4.0,"petalLength":1.2,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.7,"sepalWidth":4.4,"petalLength":1.5,"petalWidth":0.4,"species":"setosa"},{"sepalLength":5.4,"sepalWidth":3.9,"petalLength":1.3,"petalWidth":0.4,"species":"setosa"},{"sepalLength":5.1,"sepalWidth":3.5,"petalLength":1.4,"petalWidth":0.3,"species":"setosa"},{"sepalLength":5.7,"sepalWidth":3.8,"petalLength":1.7,"petalWidth":0.3,"species":"setosa"},{"sepalLength":5.1,"sepalWidth":3.8,"petalLength":1.5,"petalWidth":0.3,"species":"setosa"},{"sepalLength":5.4,"sepalWidth":3.4,"petalLength":1.7,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.1,"sepalWidth":3.7,"petalLength":1.5,"petalWidth":0.4,"species":"setosa"},{"sepalLength":4.6,"sepalWidth":3.6,"petalLength":1.0,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.1,"sepalWidth":3.3,"petalLength":1.7,"petalWidth":0.5,"species":"setosa"},{"sepalLength":4.8,"sepalWidth":3.4,"petalLength":1.9,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.0,"sepalWidth":3.0,"petalLength":1.6,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.0,"sepalWidth":3.4,"petalLength":1.6,"petalWidth":0.4,"species":"setosa"},{"sepalLength":5.2,"sepalWidth":3.5,"petalLength":1.5,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.2,"sepalWidth":3.4,"petalLength":1.4,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.7,"sepalWidth":3.2,"petalLength":1.6,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.8,"sepalWidth":3.1,"petalLength":1.6,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.4,"sepalWidth":3.4,"petalLength":1.5,"petalWidth":0.4,"species":"setosa"},{"sepalLength":5.2,"sepalWidth":4.1,"petalLength":1.5,"petalWidth":0.1,"species":"setosa"},{"sepalLength":5.5,"sepalWidth":4.2,"petalLength":1.4,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.9,"sepalWidth":3.1,"petalLength":1.5,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.0,"sepalWidth":3.2,"petalLength":1.2,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.5,"sepalWidth":3.5,"petalLength":1.3,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.9,"sepalWidth":3.6,"petalLength":1.4,"petalWidth":0.1,"species":"setosa"},{"sepalLength":4.4,"sepalWidth":3.0,"petalLength":1.3,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.1,"sepalWidth":3.4,"petalLength":1.5,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.0,"sepalWidth":3.5,"petalLength":1.3,"petalWidth":0.3,"species":"setosa"},{"sepalLength":4.5,"sepalWidth":2.3,"petalLength":1.3,"petalWidth":0.3,"species":"setosa"},{"sepalLength":4.4,"sepalWidth":3.2,"petalLength":1.3,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.0,"sepalWidth":3.5,"petalLength":1.6,"petalWidth":0.6,"species":"setosa"},{"sepalLength":5.1,"sepalWidth":3.8,"petalLength":1.9,"petalWidth":0.4,"species":"setosa"},{"sepalLength":4.8,"sepalWidth":3.0,"petalLength":1.4,"petalWidth":0.3,"species":"setosa"},{"sepalLength":5.1,"sepalWidth":3.8,"petalLength":1.6,"petalWidth":0.2,"species":"setosa"},{"sepalLength":4.6,"sepalWidth":3.2,"petalLength":1.4,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.3,"sepalWidth":3.7,"petalLength":1.5,"petalWidth":0.2,"species":"setosa"},{"sepalLength":5.0,"sepalWidth":3.3,"petalLength":1.4,"petalWidth":0.2,"species":"setosa"},{"sepalLength":7.0,"sepalWidth":3.2,"petalLength":4.7,"petalWidth":1.4,"species":"versicolor"},{"sepalLength":6.4,"sepalWidth":3.2,"petalLength":4.5,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":6.9,"sepalWidth":3.1,"petalLength":4.9,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":5.5,"sepalWidth":2.3,"petalLength":4.0,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":6.5,"sepalWidth":2.8,"petalLength":4.6,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":5.7,"sepalWidth":2.8,"petalLength":4.5,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":6.3,"sepalWidth":3.3,"petalLength":4.7,"petalWidth":1.6,"species":"versicolor"},{"sepalLength":4.9,"sepalWidth":2.4,"petalLength":3.3,"petalWidth":1.0,"species":"versicolor"},{"sepalLength":6.6,"sepalWidth":2.9,"petalLength":4.6,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":5.2,"sepalWidth":2.7,"petalLength":3.9,"petalWidth":1.4,"species":"versicolor"},{"sepalLength":5.0,"sepalWidth":2.0,"petalLength":3.5,"petalWidth":1.0,"species":"versicolor"},{"sepalLength":5.9,"sepalWidth":3.0,"petalLength":4.2,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":6.0,"sepalWidth":2.2,"petalLength":4.0,"petalWidth":1.0,"species":"versicolor"},{"sepalLength":6.1,"sepalWidth":2.9,"petalLength":4.7,"petalWidth":1.4,"species":"versicolor"},{"sepalLength":5.6,"sepalWidth":2.9,"petalLength":3.6,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":6.7,"sepalWidth":3.1,"petalLength":4.4,"petalWidth":1.4,"species":"versicolor"},{"sepalLength":5.6,"sepalWidth":3.0,"petalLength":4.5,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":5.8,"sepalWidth":2.7,"petalLength":4.1,"petalWidth":1.0,"species":"versicolor"},{"sepalLength":6.2,"sepalWidth":2.2,"petalLength":4.5,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":5.6,"sepalWidth":2.5,"petalLength":3.9,"petalWidth":1.1,"species":"versicolor"},{"sepalLength":5.9,"sepalWidth":3.2,"petalLength":4.8,"petalWidth":1.8,"species":"versicolor"},{"sepalLength":6.1,"sepalWidth":2.8,"petalLength":4.0,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":6.3,"sepalWidth":2.5,"petalLength":4.9,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":6.1,"sepalWidth":2.8,"petalLength":4.7,"petalWidth":1.2,"species":"versicolor"},{"sepalLength":6.4,"sepalWidth":2.9,"petalLength":4.3,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":6.6,"sepalWidth":3.0,"petalLength":4.4,"petalWidth":1.4,"species":"versicolor"},{"sepalLength":6.8,"sepalWidth":2.8,"petalLength":4.8,"petalWidth":1.4,"species":"versicolor"},{"sepalLength":6.7,"sepalWidth":3.0,"petalLength":5.0,"petalWidth":1.7,"species":"versicolor"},{"sepalLength":6.0,"sepalWidth":2.9,"petalLength":4.5,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":5.7,"sepalWidth":2.6,"petalLength":3.5,"petalWidth":1.0,"species":"versicolor"},{"sepalLength":5.5,"sepalWidth":2.4,"petalLength":3.8,"petalWidth":1.1,"species":"versicolor"},{"sepalLength":5.5,"sepalWidth":2.4,"petalLength":3.7,"petalWidth":1.0,"species":"versicolor"},{"sepalLength":5.8,"sepalWidth":2.7,"petalLength":3.9,"petalWidth":1.2,"species":"versicolor"},{"sepalLength":6.0,"sepalWidth":2.7,"petalLength":5.1,"petalWidth":1.6,"species":"versicolor"},{"sepalLength":5.4,"sepalWidth":3.0,"petalLength":4.5,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":6.0,"sepalWidth":3.4,"petalLength":4.5,"petalWidth":1.6,"species":"versicolor"},{"sepalLength":6.7,"sepalWidth":3.1,"petalLength":4.7,"petalWidth":1.5,"species":"versicolor"},{"sepalLength":6.3,"sepalWidth":2.3,"petalLength":4.4,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":5.6,"sepalWidth":3.0,"petalLength":4.1,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":5.5,"sepalWidth":2.5,"petalLength":4.0,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":5.5,"sepalWidth":2.6,"petalLength":4.4,"petalWidth":1.2,"species":"versicolor"},{"sepalLength":6.1,"sepalWidth":3.0,"petalLength":4.6,"petalWidth":1.4,"species":"versicolor"},{"sepalLength":5.8,"sepalWidth":2.6,"petalLength":4.0,"petalWidth":1.2,"species":"versicolor"},{"sepalLength":5.0,"sepalWidth":2.3,"petalLength":3.3,"petalWidth":1.0,"species":"versicolor"},{"sepalLength":5.6,"sepalWidth":2.7,"petalLength":4.2,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":5.7,"sepalWidth":3.0,"petalLength":4.2,"petalWidth":1.2,"species":"versicolor"},{"sepalLength":5.7,"sepalWidth":2.9,"petalLength":4.2,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":6.2,"sepalWidth":2.9,"petalLength":4.3,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":5.1,"sepalWidth":2.5,"petalLength":3.0,"petalWidth":1.1,"species":"versicolor"},{"sepalLength":5.7,"sepalWidth":2.8,"petalLength":4.1,"petalWidth":1.3,"species":"versicolor"},{"sepalLength":6.3,"sepalWidth":3.3,"petalLength":6.0,"petalWidth":2.5,"species":"virginica"},{"sepalLength":5.8,"sepalWidth":2.7,"petalLength":5.1,"petalWidth":1.9,"species":"virginica"},{"sepalLength":7.1,"sepalWidth":3.0,"petalLength":5.9,"petalWidth":2.1,"species":"virginica"},{"sepalLength":6.3,"sepalWidth":2.9,"petalLength":5.6,"petalWidth":1.8,"species":"virginica"},{"sepalLength":6.5,"sepalWidth":3.0,"petalLength":5.8,"petalWidth":2.2,"species":"virginica"},{"sepalLength":7.6,"sepalWidth":3.0,"petalLength":6.6,"petalWidth":2.1,"species":"virginica"},{"sepalLength":4.9,"sepalWidth":2.5,"petalLength":4.5,"petalWidth":1.7,"species":"virginica"},{"sepalLength":7.3,"sepalWidth":2.9,"petalLength":6.3,"petalWidth":1.8,"species":"virginica"},{"sepalLength":6.7,"sepalWidth":2.5,"petalLength":5.8,"petalWidth":1.8,"species":"virginica"},{"sepalLength":7.2,"sepalWidth":3.6,"petalLength":6.1,"petalWidth":2.5,"species":"virginica"},{"sepalLength":6.5,"sepalWidth":3.2,"petalLength":5.1,"petalWidth":2.0,"species":"virginica"},{"sepalLength":6.4,"sepalWidth":2.7,"petalLength":5.3,"petalWidth":1.9,"species":"virginica"},{"sepalLength":6.8,"sepalWidth":3.0,"petalLength":5.5,"petalWidth":2.1,"species":"virginica"},{"sepalLength":5.7,"sepalWidth":2.5,"petalLength":5.0,"petalWidth":2.0,"species":"virginica"},{"sepalLength":5.8,"sepalWidth":2.8,"petalLength":5.1,"petalWidth":2.4,"species":"virginica"},{"sepalLength":6.4,"sepalWidth":3.2,"petalLength":5.3,"petalWidth":2.3,"species":"virginica"},{"sepalLength":6.5,"sepalWidth":3.0,"petalLength":5.5,"petalWidth":1.8,"species":"virginica"},{"sepalLength":7.7,"sepalWidth":3.8,"petalLength":6.7,"petalWidth":2.2,"species":"virginica"},{"sepalLength":7.7,"sepalWidth":2.6,"petalLength":6.9,"petalWidth":2.3,"species":"virginica"},{"sepalLength":6.0,"sepalWidth":2.2,"petalLength":5.0,"petalWidth":1.5,"species":"virginica"},{"sepalLength":6.9,"sepalWidth":3.2,"petalLength":5.7,"petalWidth":2.3,"species":"virginica"},{"sepalLength":5.6,"sepalWidth":2.8,"petalLength":4.9,"petalWidth":2.0,"species":"virginica"},{"sepalLength":7.7,"sepalWidth":2.8,"petalLength":6.7,"petalWidth":2.0,"species":"virginica"},{"sepalLength":6.3,"sepalWidth":2.7,"petalLength":4.9,"petalWidth":1.8,"species":"virginica"},{"sepalLength":6.7,"sepalWidth":3.3,"petalLength":5.7,"petalWidth":2.1,"species":"virginica"},{"sepalLength":7.2,"sepalWidth":3.2,"petalLength":6.0,"petalWidth":1.8,"species":"virginica"},{"sepalLength":6.2,"sepalWidth":2.8,"petalLength":4.8,"petalWidth":1.8,"species":"virginica"},{"sepalLength":6.1,"sepalWidth":3.0,"petalLength":4.9,"petalWidth":1.8,"species":"virginica"},{"sepalLength":6.4,"sepalWidth":2.8,"petalLength":5.6,"petalWidth":2.1,"species":"virginica"},{"sepalLength":7.2,"sepalWidth":3.0,"petalLength":5.8,"petalWidth":1.6,"species":"virginica"},{"sepalLength":7.4,"sepalWidth":2.8,"petalLength":6.1,"petalWidth":1.9,"species":"virginica"},{"sepalLength":7.9,"sepalWidth":3.8,"petalLength":6.4,"petalWidth":2.0,"species":"virginica"},{"sepalLength":6.4,"sepalWidth":2.8,"petalLength":5.6,"petalWidth":2.2,"species":"virginica"},{"sepalLength":6.3,"sepalWidth":2.8,"petalLength":5.1,"petalWidth":1.5,"species":"virginica"},{"sepalLength":6.1,"sepalWidth":2.6,"petalLength":5.6,"petalWidth":1.4,"species":"virginica"},{"sepalLength":7.7,"sepalWidth":3.0,"petalLength":6.1,"petalWidth":2.3,"species":"virginica"},{"sepalLength":6.3,"sepalWidth":3.4,"petalLength":5.6,"petalWidth":2.4,"species":"virginica"},{"sepalLength":6.4,"sepalWidth":3.1,"petalLength":5.5,"petalWidth":1.8,"species":"virginica"},{"sepalLength":6.0,"sepalWidth":3.0,"petalLength":4.8,"petalWidth":1.8,"species":"virginica"},{"sepalLength":6.9,"sepalWidth":3.1,"petalLength":5.4,"petalWidth":2.1,"species":"virginica"},{"sepalLength":6.7,"sepalWidth":3.1,"petalLength":5.6,"petalWidth":2.4,"species":"virginica"},{"sepalLength":6.9,"sepalWidth":3.1,"petalLength":5.1,"petalWidth":2.3,"species":"virginica"},{"sepalLength":5.8,"sepalWidth":2.7,"petalLength":5.1,"petalWidth":1.9,"species":"virginica"},{"sepalLength":6.8,"sepalWidth":3.2,"petalLength":5.9,"petalWidth":2.3,"species":"virginica"},{"sepalLength":6.7,"sepalWidth":3.3,"petalLength":5.7,"petalWidth":2.5,"species":"virginica"},{"sepalLength":6.7,"sepalWidth":3.0,"petalLength":5.2,"petalWidth":2.3,"species":"virginica"},{"sepalLength":6.3,"sepalWidth":2.5,"petalLength":5.0,"petalWidth":1.9,"species":"virginica"},{"sepalLength":6.5,"sepalWidth":3.0,"petalLength":5.2,"petalWidth":2.0,"species":"virginica"},{"sepalLength":6.2,"sepalWidth":3.4,"petalLength":5.4,"petalWidth":2.3,"species":"virginica"},{"sepalLength":5.9,"sepalWidth":3.0,"petalLength":5.1,"petalWidth":1.8,"species":"virginica"}]}
Index: /Dev/trunk/d3/examples/splom/splom.css
===================================================================
--- /Dev/trunk/d3/examples/splom/splom.css	(revision 76)
+++ /Dev/trunk/d3/examples/splom/splom.css	(revision 76)
@@ -0,0 +1,8 @@
+line {
+  stroke: #eee;
+  shape-rendering: crispEdges;
+}
+
+rect {
+  cursor: crosshair;
+}
Index: /Dev/trunk/d3/examples/splom/splom.html
===================================================================
--- /Dev/trunk/d3/examples/splom/splom.html	(revision 76)
+++ /Dev/trunk/d3/examples/splom/splom.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Scatterplot Matrix</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="cross.js"></script>
+    <link type="text/css" rel="stylesheet" href="splom.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="splom.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/splom/splom.js
===================================================================
--- /Dev/trunk/d3/examples/splom/splom.js	(revision 76)
+++ /Dev/trunk/d3/examples/splom/splom.js	(revision 76)
@@ -0,0 +1,149 @@
+d3.json("flowers.json", function(flower) {
+
+  // Size parameters.
+  var size = 150,
+      padding = 20;
+
+  // Color scale.
+  var color = d3.scale.ordinal().range([
+    "rgb(50%, 0%, 0%)",
+    "rgb(0%, 50%, 0%)",
+    "rgb(0%, 0%, 50%)"
+  ]);
+
+  // Position scales.
+  var position = {};
+  flower.traits.forEach(function(trait) {
+    function value(d) { return d[trait]; }
+    position[trait] = d3.scale.linear()
+        .domain([d3.min(flower.values, value), d3.max(flower.values, value)])
+        .range([padding / 2, size - padding / 2]);
+  });
+
+  // Root panel.
+  var svg = d3.select("#chart")
+    .append("svg:svg")
+      .attr("width", size * flower.traits.length)
+      .attr("height", size * flower.traits.length);
+
+  // One column per trait.
+  var column = svg.selectAll("g")
+      .data(flower.traits)
+    .enter().append("svg:g")
+      .attr("transform", function(d, i) { return "translate(" + i * size + ",0)"; });
+
+  // One row per trait.
+  var row = column.selectAll("g")
+      .data(cross(flower.traits))
+    .enter().append("svg:g")
+      .attr("transform", function(d, i) { return "translate(0," + i * size + ")"; });
+
+  // X-ticks. TODO Cross the trait into the tick data?
+  row.selectAll("line.x")
+      .data(function(d) { return position[d.x].ticks(5).map(position[d.x]); })
+    .enter().append("svg:line")
+      .attr("class", "x")
+      .attr("x1", function(d) { return d; })
+      .attr("x2", function(d) { return d; })
+      .attr("y1", padding / 2)
+      .attr("y2", size - padding / 2);
+
+  // Y-ticks. TODO Cross the trait into the tick data?
+  row.selectAll("line.y")
+      .data(function(d) { return position[d.y].ticks(5).map(position[d.y]); })
+    .enter().append("svg:line")
+      .attr("class", "y")
+      .attr("x1", padding / 2)
+      .attr("x2", size - padding / 2)
+      .attr("y1", function(d) { return d; })
+      .attr("y2", function(d) { return d; });
+
+  // Frame.
+  row.append("svg:rect")
+      .attr("x", padding / 2)
+      .attr("y", padding / 2)
+      .attr("width", size - padding)
+      .attr("height", size - padding)
+      .style("fill", "none")
+      .style("stroke", "#aaa")
+      .style("stroke-width", 1.5)
+      .attr("pointer-events", "all")
+      .on("mousedown", mousedown);
+
+  // Dot plot.
+  var dot = row.selectAll("circle")
+      .data(cross(flower.values))
+    .enter().append("svg:circle")
+      .attr("cx", function(d) { return position[d.x.x](d.y[d.x.x]); })
+      .attr("cy", function(d) { return size - position[d.x.y](d.y[d.x.y]); })
+      .attr("r", 3)
+      .style("fill", function(d) { return color(d.y.species); })
+      .style("fill-opacity", .5)
+      .attr("pointer-events", "none");
+
+  d3.select(window)
+      .on("mousemove", mousemove)
+      .on("mouseup", mouseup);
+
+  var rect, x0, x1, count;
+
+  function mousedown() {
+    x0 = d3.svg.mouse(this);
+    count = 0;
+
+    rect = d3.select(this.parentNode)
+      .append("svg:rect")
+        .style("fill", "#999")
+        .style("fill-opacity", .5);
+
+    d3.event.preventDefault();
+  }
+
+  function mousemove() {
+    if (!rect) return;
+    x1 = d3.svg.mouse(rect.node());
+
+    x1[0] = Math.max(padding / 2, Math.min(size - padding / 2, x1[0]));
+    x1[1] = Math.max(padding / 2, Math.min(size - padding / 2, x1[1]));
+
+    var minx = Math.min(x0[0], x1[0]),
+        maxx = Math.max(x0[0], x1[0]),
+        miny = Math.min(x0[1], x1[1]),
+        maxy = Math.max(x0[1], x1[1]);
+
+    rect
+        .attr("x", minx - .5)
+        .attr("y", miny - .5)
+        .attr("width", maxx - minx + 1)
+        .attr("height", maxy - miny + 1);
+
+    var v = rect.node().__data__,
+        x = position[v.x],
+        y = position[v.y],
+        mins = x.invert(minx),
+        maxs = x.invert(maxx),
+        mint = y.invert(size - maxy),
+        maxt = y.invert(size - miny);
+
+    count = 0;
+    svg.selectAll("circle")
+        .style("fill", function(d) {
+          return mins <= d.y[v.x] && maxs >= d.y[v.x]
+              && mint <= d.y[v.y] && maxt >= d.y[v.y]
+              ? (count++, color(d.y.species))
+              : "#ccc";
+        });
+  }
+
+  function mouseup() {
+    if (!rect) return;
+    rect.remove();
+    rect = null;
+
+    if (!count) svg.selectAll("circle")
+        .style("fill", function(d) {
+          return color(d.y.species);
+        });
+  }
+
+});
Index: /Dev/trunk/d3/examples/stream/stack.css
===================================================================
--- /Dev/trunk/d3/examples/stream/stack.css	(revision 76)
+++ /Dev/trunk/d3/examples/stream/stack.css	(revision 76)
@@ -0,0 +1,7 @@
+#chart {
+  font: 10px sans-serif;
+}
+
+line {
+  stroke: black;
+}
Index: /Dev/trunk/d3/examples/stream/stack.html
===================================================================
--- /Dev/trunk/d3/examples/stream/stack.html	(revision 76)
+++ /Dev/trunk/d3/examples/stream/stack.html	(revision 76)
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Stacked Bar Chart</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <script type="text/javascript" src="stream_layers.js"></script>
+    <link type="text/css" rel="stylesheet" href="../button.css"/>
+    <link type="text/css" rel="stylesheet" href="stack.css"/>
+  </head>
+  <body>
+    <div id="chart">
+      <button id="group" class="first" onclick="transitionGroup()">
+        Group
+      </button
+      ><button id="stack" class="active last" onclick="transitionStack()">
+        Stack
+      </button><p>
+    </div>
+    <script type="text/javascript" src="stack.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/stream/stack.js
===================================================================
--- /Dev/trunk/d3/examples/stream/stack.js	(revision 76)
+++ /Dev/trunk/d3/examples/stream/stack.js	(revision 76)
@@ -0,0 +1,119 @@
+var n = 4, // number of layers
+    m = 64, // number of samples per layer
+    data = d3.layout.stack()(stream_layers(n, m, .1)),
+    color = d3.interpolateRgb("#aad", "#556");
+
+var p = 20,
+    w = 960,
+    h = 500 - .5 - p,
+    mx = m,
+    my = d3.max(data, function(d) {
+      return d3.max(d, function(d) {
+        return d.y0 + d.y;
+      });
+    }),
+    mz = d3.max(data, function(d) {
+      return d3.max(d, function(d) {
+        return d.y;
+      });
+    }),
+    x = function(d) { return d.x * w / mx; },
+    y0 = function(d) { return h - d.y0 * h / my; },
+    y1 = function(d) { return h - (d.y + d.y0) * h / my; },
+    y2 = function(d) { return d.y * h / mz; }; // or `my` to not rescale
+
+var vis = d3.select("#chart")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h + p);
+
+var layers = vis.selectAll("g.layer")
+    .data(data)
+  .enter().append("svg:g")
+    .style("fill", function(d, i) { return color(i / (n - 1)); })
+    .attr("class", "layer");
+
+var bars = layers.selectAll("g.bar")
+    .data(function(d) { return d; })
+  .enter().append("svg:g")
+    .attr("class", "bar")
+    .attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
+
+bars.append("svg:rect")
+    .attr("width", x({x: .9}))
+    .attr("x", 0)
+    .attr("y", h)
+    .attr("height", 0)
+  .transition()
+    .delay(function(d, i) { return i * 10; })
+    .attr("y", y1)
+    .attr("height", function(d) { return y0(d) - y1(d); });
+
+var labels = vis.selectAll("text.label")
+    .data(data[0])
+  .enter().append("svg:text")
+    .attr("class", "label")
+    .attr("x", x)
+    .attr("y", h + 6)
+    .attr("dx", x({x: .45}))
+    .attr("dy", ".71em")
+    .attr("text-anchor", "middle")
+    .text(function(d, i) { return i; });
+
+vis.append("svg:line")
+    .attr("x1", 0)
+    .attr("x2", w - x({x: .1}))
+    .attr("y1", h)
+    .attr("y2", h);
+
+function transitionGroup() {
+  var group = d3.selectAll("#chart");
+
+  group.select("#group")
+      .attr("class", "first active");
+
+  group.select("#stack")
+      .attr("class", "last");
+
+  group.selectAll("g.layer rect")
+    .transition()
+      .duration(500)
+      .delay(function(d, i) { return (i % m) * 10; })
+      .attr("x", function(d, i) { return x({x: .9 * ~~(i / m) / n}); })
+      .attr("width", x({x: .9 / n}))
+      .each("end", transitionEnd);
+
+  function transitionEnd() {
+    d3.select(this)
+      .transition()
+        .duration(500)
+        .attr("y", function(d) { return h - y2(d); })
+        .attr("height", y2);
+  }
+}
+
+function transitionStack() {
+  var stack = d3.select("#chart");
+
+  stack.select("#group")
+      .attr("class", "first");
+
+  stack.select("#stack")
+      .attr("class", "last active");
+
+  stack.selectAll("g.layer rect")
+    .transition()
+      .duration(500)
+      .delay(function(d, i) { return (i % m) * 10; })
+      .attr("y", y1)
+      .attr("height", function(d) { return y0(d) - y1(d); })
+      .each("end", transitionEnd);
+
+  function transitionEnd() {
+    d3.select(this)
+      .transition()
+        .duration(500)
+        .attr("x", 0)
+        .attr("width", x({x: .9}));
+  }
+}
Index: /Dev/trunk/d3/examples/stream/stream.css
===================================================================
--- /Dev/trunk/d3/examples/stream/stream.css	(revision 76)
+++ /Dev/trunk/d3/examples/stream/stream.css	(revision 76)
@@ -0,0 +1,3 @@
+#chart {
+  font: 10px sans-serif;
+}
Index: /Dev/trunk/d3/examples/stream/stream.html
===================================================================
--- /Dev/trunk/d3/examples/stream/stream.html	(revision 76)
+++ /Dev/trunk/d3/examples/stream/stream.html	(revision 76)
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Streamgraph</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <script type="text/javascript" src="stream_layers.js"></script>
+    <link type="text/css" rel="stylesheet" href="../button.css"/>
+    <link type="text/css" rel="stylesheet" href="stream.css"/>
+  </head>
+  <body>
+    <div id="chart">
+      <button class="first last" onclick="transition()">
+        Update
+      </button><p>
+    </div>
+    <script type="text/javascript" src="stream.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/stream/stream.js
===================================================================
--- /Dev/trunk/d3/examples/stream/stream.js	(revision 76)
+++ /Dev/trunk/d3/examples/stream/stream.js	(revision 76)
@@ -0,0 +1,42 @@
+var n = 20, // number of layers
+    m = 200, // number of samples per layer
+    data0 = d3.layout.stack().offset("wiggle")(stream_layers(n, m)),
+    data1 = d3.layout.stack().offset("wiggle")(stream_layers(n, m)),
+    color = d3.interpolateRgb("#aad", "#556");
+
+var w = 960,
+    h = 500,
+    mx = m - 1,
+    my = d3.max(data0.concat(data1), function(d) {
+      return d3.max(d, function(d) {
+        return d.y0 + d.y;
+      });
+    });
+
+var area = d3.svg.area()
+    .x(function(d) { return d.x * w / mx; })
+    .y0(function(d) { return h - d.y0 * h / my; })
+    .y1(function(d) { return h - (d.y + d.y0) * h / my; });
+
+var vis = d3.select("#chart")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h);
+
+vis.selectAll("path")
+    .data(data0)
+  .enter().append("svg:path")
+    .style("fill", function() { return color(Math.random()); })
+    .attr("d", area);
+
+function transition() {
+  d3.selectAll("path")
+      .data(function() {
+        var d = data1;
+        data1 = data0;
+        return data0 = d;
+      })
+    .transition()
+      .duration(2500)
+      .attr("d", area);
+}
Index: /Dev/trunk/d3/examples/stream/stream_layers.js
===================================================================
--- /Dev/trunk/d3/examples/stream/stream_layers.js	(revision 76)
+++ /Dev/trunk/d3/examples/stream/stream_layers.js	(revision 76)
@@ -0,0 +1,33 @@
+/* Inspired by Lee Byron's test data generator. */
+function stream_layers(n, m, o) {
+  if (arguments.length < 3) o = 0;
+  function bump(a) {
+    var x = 1 / (.1 + Math.random()),
+        y = 2 * Math.random() - .5,
+        z = 10 / (.1 + Math.random());
+    for (var i = 0; i < m; i++) {
+      var w = (i / m - y) * z;
+      a[i] += x * Math.exp(-w * w);
+    }
+  }
+  return d3.range(n).map(function() {
+      var a = [], i;
+      for (i = 0; i < m; i++) a[i] = o + o * Math.random();
+      for (i = 0; i < 5; i++) bump(a);
+      return a.map(stream_index);
+    });
+}
+
+/* Another layer generator using gamma distributions. */
+function stream_waves(n, m) {
+  return d3.range(n).map(function(i) {
+    return d3.range(m).map(function(j) {
+        var x = 20 * j / m - i / 3;
+        return 2 * x * Math.exp(-.5 * x);
+      }).map(stream_index);
+    });
+}
+
+function stream_index(d, i) {
+  return {x: i, y: Math.max(0, d)};
+}
Index: /Dev/trunk/d3/examples/superformula/dot.html
===================================================================
--- /Dev/trunk/d3/examples/superformula/dot.html	(revision 76)
+++ /Dev/trunk/d3/examples/superformula/dot.html	(revision 76)
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Dot Plot</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="superformula.js"></script>
+    <style type="text/css">
+
+body {
+  font: 10px sans-serif;
+}
+
+path.dot {
+  fill: white;
+  stroke-width: 1.5px;
+}
+
+rect {
+  fill: none;
+  stroke: black;
+  shape-rendering: crispEdges;
+}
+
+.x line, .y line {
+  stroke: #ccc;
+  shape-rendering: crispEdges;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var data = d3.range(100).map(function(i) {
+  return {x: i / 99, y: Math.random()};
+});
+
+var w = 450,
+    h = 450,
+    p = 20,
+    x = d3.scale.linear().range([0, w]),
+    y = d3.scale.linear().range([h, 0]),
+    type = d3.scale.ordinal().range(superformulaTypes),
+    color = d3.scale.category10();
+
+var vis = d3.select("body")
+  .append("svg:svg")
+    .attr("width", w + p * 2)
+    .attr("height", h + p * 2)
+  .append("svg:g")
+    .attr("transform", "translate(" + p + "," + p + ")");
+
+var xrule = vis.selectAll("g.x")
+    .data(x.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "x");
+
+xrule.append("svg:line")
+    .attr("x1", x)
+    .attr("x2", x)
+    .attr("y1", 0)
+    .attr("y2", h);
+
+xrule.append("svg:text")
+    .attr("x", x)
+    .attr("y", h + 3)
+    .attr("dy", ".71em")
+    .attr("text-anchor", "middle")
+    .text(x.tickFormat(10));
+
+var yrule = vis.selectAll("g.y")
+    .data(y.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "y");
+
+yrule.append("svg:line")
+    .attr("x1", 0)
+    .attr("x2", w)
+    .attr("y1", y)
+    .attr("y2", y);
+
+yrule.append("svg:text")
+    .attr("x", -3)
+    .attr("y", y)
+    .attr("dy", ".35em")
+    .attr("text-anchor", "end")
+    .text(y.tickFormat(10));
+
+vis.append("svg:rect")
+    .attr("width", w)
+    .attr("height", h);
+
+vis.selectAll("path.dot")
+    .data(data)
+  .enter().append("svg:path")
+    .attr("class", "dot")
+    .attr("stroke", function(d, i) { return color(i); })
+    .attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; })
+    .attr("d", superformula()
+    .type(function(d, i) { return type(i); }));
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/superformula/explorer.html
===================================================================
--- /Dev/trunk/d3/examples/superformula/explorer.html	(revision 76)
+++ /Dev/trunk/d3/examples/superformula/explorer.html	(revision 76)
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+  <html>
+  <head>
+    <title>Superformula</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="superformula.js"></script>
+    <style type="text/css">
+
+path {
+  stroke-width: 1.5px;
+  stroke: #666;
+  fill: #ddd;
+}
+
+#controls {
+  position: absolute;
+  width: 240px;
+  font: 10px sans-serif;
+}
+
+#controls span, #controls label {
+  position: relative;
+  top: -5px;
+  padding: 5px;
+  display: inline-block;
+  width: 20px;
+}
+
+#controls button {
+  font: 10px sans-serif;
+  padding: 5px;
+  width: 70px;
+}
+
+    </style>
+  </head>
+  <body>
+    <div id="controls"></div>
+    <script type="text/javascript">
+
+var types = {
+  asterisk: {m: 12, n1: .3, n2: 0, n3: 10, a: 1, b: 1},
+  bean: {m: 2, n1: 1, n2: 4, n3: 8, a: 1, b: 1},
+  butterfly: {m: 3, n1: 1, n2: 6, n3: 2, a: .6, b: 1},
+  circle: {m: 4, n1: 2, n2: 2, n3: 2, a: 1, b: 1},
+  clover: {m: 6, n1: .3, n2: 0, n3: 10, a: 1, b: 1},
+  cloverFour: {m: 8, n1: 10, n2: -1, n3: -8, a: 1, b: 1},
+  cross: {m: 8, n1: 1.3, n2: .01, n3: 8, a: 1, b: 1},
+  diamond: {m: 4, n1: 1, n2: 1, n3: 1, a: 1, b: 1},
+  drop: {m: 1, n1: .5, n2: .5, n3: .5, a: 1, b: 1},
+  ellipse: {m: 4, n1: 2, n2: 2, n3: 2, a: 9, b: 6},
+  gear: {m: 19, n1: 100, n2: 50, n3: 50, a: 1, b: 1},
+  heart: {m: 1, n1: .8, n2: 1, n3: -8, a: 1, b: .18},
+  heptagon: {m: 7, n1: 1000, n2: 400, n3: 400, a: 1, b: 1},
+  hexagon: {m: 6, n1: 1000, n2: 400, n3: 400, a: 1, b: 1},
+  malteseCross: {m: 8, n1: .9, n2: .1, n3: 100, a: 1, b: 1},
+  pentagon: {m: 5, n1: 1000, n2: 600, n3: 600, a: 1, b: 1},
+  rectangle: {m: 4, n1: 100, n2: 100, n3: 100, a: 2, b: 1},
+  roundedStar: {m: 5, n1: 2, n2: 7, n3: 7, a: 1, b: 1},
+  square: {m: 4, n1: 100, n2: 100, n3: 100, a: 1, b: 1},
+  star: {m: 5, n1: 30, n2: 100, n3: 100, a: 1, b: 1},
+  triangle: {m: 3, n1: 100, n2: 200, n3: 200, a: 1, b: 1}
+};
+
+var format = d3.format(".4n"),
+    scale = d3.scale.linear().domain([-10, 20, 1000]).range([0, 800, 1000]);
+
+var svg = d3.select("body").append("svg:svg")
+    .attr("width", 960)
+    .attr("height", 500);
+
+var shape = superformula()
+    .type("asterisk")
+    .size(100000)
+    .segments(3600);
+
+var path = svg.append("svg:path")
+    .attr("class", "big")
+    .attr("transform", "translate(480,250)")
+    .attr("d", shape);
+
+var control = d3.select("#controls").selectAll("div")
+    .data(d3.entries(types.asterisk))
+  .enter().append("div")
+    .attr("id", function(d) { return d.key; });
+
+control.append("label")
+    .text(function(d) { return d.key; });
+
+control.append("input")
+    .attr("type", "range")
+    .attr("max", 1000)
+    .attr("min", 0)
+    .property("value", function(d) { return scale(d.value); })
+    .on("change", function(d) {
+      var v = scale.invert(this.value);
+      path.attr("d", shape.param(d.key, v));
+      d3.select(this.nextSibling).text(format(v));
+    });
+
+control.append("span")
+    .text(function(d) { return format(d.value); });
+
+var types = d3.select("#controls").append("div").selectAll("button")
+    .data(d3.entries(types))
+  .enter().append("button")
+    .text(function(d) { return d.key; })
+    .on("click", function(d) {
+      for (var param in d.value) {
+        var control = d3.select("#" + param);
+        control.select("input").property("value", scale(d.value[param]));
+        control.select("span").text(format(d.value[param]));
+        shape.param(param, d.value[param]);
+      }
+      path.attr("d", shape);
+    });
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/superformula/superformula.html
===================================================================
--- /Dev/trunk/d3/examples/superformula/superformula.html	(revision 76)
+++ /Dev/trunk/d3/examples/superformula/superformula.html	(revision 76)
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+  <html>
+  <head>
+    <title>Superformula</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="superformula.js"></script>
+    <style type="text/css">
+
+path {
+  stroke-width: 1.5px;
+}
+
+path.small {
+  fill: steelblue;
+}
+
+path.big {
+  stroke: #666;
+  fill: #ddd;
+}
+
+path.small:hover {
+  stroke: steelblue;
+  fill: lightsteelblue;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var size = 1000;
+
+var x = d3.scale.ordinal()
+    .domain(superformulaTypes)
+    .rangePoints([0, 960], 1);
+
+var svg = d3.select("body").append("svg:svg")
+    .attr("width", 960)
+    .attr("height", 500);
+
+var small = superformula()
+    .type(String)
+    .size(size);
+
+var big = superformula()
+    .type("square")
+    .size(size * 50)
+    .segments(360);
+
+svg.selectAll("a")
+    .data(superformulaTypes)
+  .enter().append("svg:a")
+    .attr("xlink:title", String)
+    .attr("transform", function(d, i) { return "translate("+ x(d) + ",40)"; })
+  .append("svg:path")
+    .attr("class", "small")
+    .attr("d", small)
+    .on("mousedown", function() { d3.select(this).style("fill", "aliceblue"); })
+    .on("mouseup", function() { d3.select(this).style("fill", null); })
+    .on("click", function(d) { d3.select(".big").transition().duration(500).attr("d", big.type(d)); });
+
+svg.append("svg:path")
+    .attr("class", "big")
+    .attr("transform", "translate(450,250)")
+    .attr("d", big);
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/superformula/superformula.js
===================================================================
--- /Dev/trunk/d3/examples/superformula/superformula.js	(revision 76)
+++ /Dev/trunk/d3/examples/superformula/superformula.js	(revision 76)
@@ -0,0 +1,98 @@
+(function() {
+  var _symbol = d3.svg.symbol(),
+      _line = d3.svg.line();
+
+  superformula = function() {
+    var type = _symbol.type(),
+        size = _symbol.size(),
+        segments = size,
+        params = {};
+
+    function superformula(d, i) {
+      var n, p = _superformulaTypes[type.call(this, d, i)];
+      for (n in params) p[n] = params[n].call(this, d, i);
+      return _superformulaPath(p, segments.call(this, d, i), Math.sqrt(size.call(this, d, i)));
+    }
+
+    superformula.type = function(x) {
+      if (!arguments.length) return type;
+      type = d3.functor(x);
+      return superformula;
+    };
+
+    superformula.param = function(name, value) {
+      if (arguments.length < 2) return params[name];
+      params[name] = d3.functor(value);
+      return superformula;
+    };
+
+    // size of superformula in square pixels
+    superformula.size = function(x) {
+      if (!arguments.length) return size;
+      size = d3.functor(x);
+      return superformula;
+    };
+
+    // number of discrete line segments
+    superformula.segments = function(x) {
+      if (!arguments.length) return segments;
+      segments = d3.functor(x);
+      return superformula;
+    };
+
+    return superformula;
+  };
+
+  function _superformulaPath(params, n, diameter) {
+    var i = -1,
+        dt = 2 * Math.PI / n,
+        t,
+        r = 0,
+        x,
+        y,
+        points = [];
+
+    while (++i < n) {
+      t = params.m * (i * dt - Math.PI) / 4;
+      t = Math.pow(Math.abs(Math.pow(Math.abs(Math.cos(t) / params.a), params.n2)
+        + Math.pow(Math.abs(Math.sin(t) / params.b), params.n3)), -1 / params.n1);
+      if (t > r) r = t;
+      points.push(t);
+    }
+
+    r = diameter * Math.SQRT1_2 / r;
+    i = -1; while (++i < n) {
+      x = (t = points[i] * r) * Math.cos(i * dt);
+      y = t * Math.sin(i * dt);
+      points[i] = [Math.abs(x) < 1e-6 ? 0 : x, Math.abs(y) < 1e-6 ? 0 : y];
+    }
+
+    return _line(points) + "Z";
+  }
+
+  var _superformulaTypes = {
+    asterisk: {m: 12, n1: .3, n2: 0, n3: 10, a: 1, b: 1},
+    bean: {m: 2, n1: 1, n2: 4, n3: 8, a: 1, b: 1},
+    butterfly: {m: 3, n1: 1, n2: 6, n3: 2, a: .6, b: 1},
+    circle: {m: 4, n1: 2, n2: 2, n3: 2, a: 1, b: 1},
+    clover: {m: 6, n1: .3, n2: 0, n3: 10, a: 1, b: 1},
+    cloverFour: {m: 8, n1: 10, n2: -1, n3: -8, a: 1, b: 1},
+    cross: {m: 8, n1: 1.3, n2: .01, n3: 8, a: 1, b: 1},
+    diamond: {m: 4, n1: 1, n2: 1, n3: 1, a: 1, b: 1},
+    drop: {m: 1, n1: .5, n2: .5, n3: .5, a: 1, b: 1},
+    ellipse: {m: 4, n1: 2, n2: 2, n3: 2, a: 9, b: 6},
+    gear: {m: 19, n1: 100, n2: 50, n3: 50, a: 1, b: 1},
+    heart: {m: 1, n1: .8, n2: 1, n3: -8, a: 1, b: .18},
+    heptagon: {m: 7, n1: 1000, n2: 400, n3: 400, a: 1, b: 1},
+    hexagon: {m: 6, n1: 1000, n2: 400, n3: 400, a: 1, b: 1},
+    malteseCross: {m: 8, n1: .9, n2: .1, n3: 100, a: 1, b: 1},
+    pentagon: {m: 5, n1: 1000, n2: 600, n3: 600, a: 1, b: 1},
+    rectangle: {m: 4, n1: 100, n2: 100, n3: 100, a: 2, b: 1},
+    roundedStar: {m: 5, n1: 2, n2: 7, n3: 7, a: 1, b: 1},
+    square: {m: 4, n1: 100, n2: 100, n3: 100, a: 1, b: 1},
+    star: {m: 5, n1: 30, n2: 100, n3: 100, a: 1, b: 1},
+    triangle: {m: 3, n1: 100, n2: 200, n3: 200, a: 1, b: 1}
+  };
+
+  superformulaTypes = d3.keys(_superformulaTypes);
+})();
Index: /Dev/trunk/d3/examples/symbol-map/symbol-map.html
===================================================================
--- /Dev/trunk/d3/examples/symbol-map/symbol-map.html	(revision 76)
+++ /Dev/trunk/d3/examples/symbol-map/symbol-map.html	(revision 76)
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>U.S. States</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geo.js"></script>
+    <style type="text/css">
+
+svg {
+  width: 960px;
+  height: 500px;
+}
+
+#states path, #state-centroids circle {
+  fill: #ccc;
+  stroke: #fff;
+  stroke-width: 1.5px;
+}
+
+#state-centroids circle {
+  fill: steelblue;
+  fill-opacity: .8;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+// The radius scale for the centroids.
+var r = d3.scale.sqrt()
+    .domain([0, 1e6])
+    .range([0, 10]);
+
+// Our projection.
+var xy = d3.geo.albersUsa();
+
+var svg = d3.select("body").append("svg:svg");
+svg.append("svg:g").attr("id", "states");
+svg.append("svg:g").attr("id", "state-centroids");
+
+d3.json("../data/us-states.json", function(collection) {
+  svg.select("#states")
+    .selectAll("path")
+      .data(collection.features)
+    .enter().append("svg:path")
+      .attr("d", d3.geo.path().projection(xy));
+});
+
+d3.json("../data/us-state-centroids.json", function(collection) {
+  svg.select("#state-centroids")
+    .selectAll("circle")
+      .data(collection.features
+      .sort(function(a, b) { return b.properties.population - a.properties.population; }))
+    .enter().append("svg:circle")
+      .attr("transform", function(d) { return "translate(" + xy(d.geometry.coordinates) + ")"; })
+      .attr("r", 0)
+    .transition()
+      .duration(1000)
+      .delay(function(d, i) { return i * 50; })
+      .attr("r", function(d) { return r(d.properties.population); });
+});
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/touch/touch.html
===================================================================
--- /Dev/trunk/d3/examples/touch/touch.html	(revision 76)
+++ /Dev/trunk/d3/examples/touch/touch.html	(revision 76)
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta name="viewport" content="initial-scale=1,maximum-scale=1"/>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <style type="text/css">
+
+html, body {
+  height: 100%;
+}
+
+body {
+  margin: 0;
+}
+
+svg {
+  display: block;
+  overflow: hidden;
+  width: 100%;
+  height: 100%;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var color = d3.scale.category10();
+
+var svg = d3.select("body").append("svg:svg");
+
+d3.select("body")
+    .on("touchstart", touch)
+    .on("touchmove", touch)
+    .on("touchend", touch);
+
+function touch() {
+  d3.event.preventDefault();
+
+  var circle = svg.selectAll("circle.touch")
+      .data(d3.svg.touches(svg.node()), function(d) { return d.identifier; })
+      .attr("cx", function(d) { return d[0]; })
+      .attr("cy", function(d) { return d[1]; });
+
+  circle.enter().append("svg:circle")
+      .attr("class", "touch")
+      .attr("cx", function(d) { return d[0]; })
+      .attr("cy", function(d) { return d[1]; })
+      .style("fill", function(d) { return color(d.identifier); })
+      .attr("r", 1e-6)
+    .transition()
+      .duration(500)
+      .ease("elastic")
+      .attr("r", 48);
+
+  circle.exit()
+      .attr("class", null)
+    .transition()
+      .attr("r", 1e-6)
+      .remove();
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/tree/tree-dynamic.html
===================================================================
--- /Dev/trunk/d3/examples/tree/tree-dynamic.html	(revision 76)
+++ /Dev/trunk/d3/examples/tree/tree-dynamic.html	(revision 76)
@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Node-Link Tree</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+.node {
+  stroke: #fff;
+  stroke-width: 2px;
+}
+
+.link {
+  fill: none;
+  stroke: #000;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 500,
+    root = {},
+    data = [root],
+    tree = d3.layout.tree().size([w - 20, h - 20]),
+    diagonal = d3.svg.diagonal(),
+    duration = 750,
+    timer = setInterval(update, duration);
+
+var vis = d3.select("body").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(10, 10)");
+
+vis.selectAll("circle")
+    .data(tree(root))
+  .enter().append("svg:circle")
+    .attr("class", "node")
+    .attr("r", 3.5)
+    .attr("cx", x)
+    .attr("cy", y);
+
+function update() {
+  if (data.length >= 500) return clearInterval(timer);
+
+  // Add a new datum to a random parent.
+  var d = {id: data.length}, parent = data[~~(Math.random() * data.length)];
+  if (parent.children) parent.children.push(d); else parent.children = [d];
+  data.push(d);
+
+  // Compute the new tree layout. We'll stash the old layout in the data.
+  var nodes = tree.nodes(root);
+
+  // Update the nodesâŠ
+  var node = vis.selectAll("circle.node")
+      .data(nodes, function(d) { return d.id; });
+
+  // Enter any new nodes at the parent's previous position.
+  node.enter().append("svg:circle")
+      .attr("class", "node")
+      .attr("r", 3.5)
+      .attr("cx", function(d) { return d.parent.x0; })
+      .attr("cy", function(d) { return d.parent.y0; })
+    .transition()
+      .duration(duration)
+      .attr("cx", x)
+      .attr("cy", y);
+
+  // Transition nodes to their new position.
+  node.transition()
+      .duration(duration)
+      .attr("cx", x)
+      .attr("cy", y);
+
+  // Update the linksâŠ
+  var link = vis.selectAll("path.link")
+      .data(tree.links(nodes), function(d) { return d.target.id; });
+
+  // Enter any new links at the parent's previous position.
+  link.enter().insert("svg:path", "circle")
+      .attr("class", "link")
+      .attr("d", function(d) {
+        var o = {x: d.source.x0, y: d.source.y0};
+        return diagonal({source: o, target: o});
+      })
+    .transition()
+      .duration(duration)
+      .attr("d", diagonal);
+
+  // Transition links to their new position.
+  link.transition()
+      .duration(duration)
+      .attr("d", diagonal);
+}
+
+function x(d) {
+  return d.x0 = d.x;
+}
+
+function y(d) {
+  return d.y0 = d.y;
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/tree/tree-interactive.html
===================================================================
--- /Dev/trunk/d3/examples/tree/tree-interactive.html	(revision 76)
+++ /Dev/trunk/d3/examples/tree/tree-interactive.html	(revision 76)
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Node-Link Tree</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+circle.node {
+  cursor: pointer;
+  fill: #fff;
+  stroke: steelblue;
+  stroke-width: 1.5px;
+}
+
+path.link {
+  fill: none;
+  stroke: #ccc;
+  stroke-width: 1.5px;
+}
+
+    </style>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript">
+
+var w = 960,
+    h = 2000,
+    i = 0,
+    duration = 500,
+    root;
+
+var tree = d3.layout.tree()
+    .size([h, w - 160]);
+
+var diagonal = d3.svg.diagonal()
+    .projection(function(d) { return [d.y, d.x]; });
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(40,0)");
+
+d3.json("../data/flare.json", function(json) {
+  json.x0 = 800;
+  json.y0 = 0;
+  update(root = json);
+});
+
+function update(source) {
+
+  // Compute the new tree layout.
+  var nodes = tree.nodes(root).reverse();
+
+  // Update the nodesâŠ
+  var node = vis.selectAll("circle.node")
+      .data(nodes, function(d) { return d.id || (d.id = ++i); });
+
+  // Enter any new nodes at the parent's previous position.
+  node.enter().append("svg:circle")
+      .attr("class", "node")
+      .attr("cx", function(d) { return source.y0; })
+      .attr("cy", function(d) { return source.x0; })
+      .attr("r", 4.5)
+      .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; })
+      .on("click", click)
+    .transition()
+      .duration(duration)
+      .attr("cx", function(d) { return d.y; })
+      .attr("cy", function(d) { return d.x; });
+
+  // Transition nodes to their new position.
+  node.transition()
+      .duration(duration)
+      .attr("cx", function(d) { return d.y; })
+      .attr("cy", function(d) { return d.x; })
+      .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });
+
+  // Transition exiting nodes to the parent's new position.
+  node.exit().transition()
+      .duration(duration)
+      .attr("cx", function(d) { return source.y; })
+      .attr("cy", function(d) { return source.x; })
+      .remove();
+
+  // Update the linksâŠ
+  var link = vis.selectAll("path.link")
+      .data(tree.links(nodes), function(d) { return d.target.id; });
+
+  // Enter any new links at the parent's previous position.
+  link.enter().insert("svg:path", "circle")
+      .attr("class", "link")
+      .attr("d", function(d) {
+        var o = {x: source.x0, y: source.y0};
+        return diagonal({source: o, target: o});
+      })
+    .transition()
+      .duration(duration)
+      .attr("d", diagonal);
+
+  // Transition links to their new position.
+  link.transition()
+      .duration(duration)
+      .attr("d", diagonal);
+
+  // Transition exiting nodes to the parent's new position.
+  link.exit().transition()
+      .duration(duration)
+      .attr("d", function(d) {
+        var o = {x: source.x, y: source.y};
+        return diagonal({source: o, target: o});
+      })
+      .remove();
+
+  // Stash the old positions for transition.
+  nodes.forEach(function(d) {
+    d.x0 = d.x;
+    d.y0 = d.y;
+  });
+}
+
+// Toggle children on click.
+function click(d) {
+  if (d.children) {
+    d._children = d.children;
+    d.children = null;
+  } else {
+    d.children = d._children;
+    d._children = null;
+  }
+  update(d);
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/tree/tree-radial.html
===================================================================
--- /Dev/trunk/d3/examples/tree/tree-radial.html	(revision 76)
+++ /Dev/trunk/d3/examples/tree/tree-radial.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Node-Link Tree (Radial)</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="tree.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="tree-radial.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/tree/tree-radial.js
===================================================================
--- /Dev/trunk/d3/examples/tree/tree-radial.js	(revision 76)
+++ /Dev/trunk/d3/examples/tree/tree-radial.js	(revision 76)
@@ -0,0 +1,40 @@
+var r = 960 / 2;
+
+var tree = d3.layout.tree()
+    .size([360, r - 120])
+    .separation(function(a, b) { return (a.parent == b.parent ? 1 : 2) / a.depth; });
+
+var diagonal = d3.svg.diagonal.radial()
+    .projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", r * 2)
+    .attr("height", r * 2 - 150)
+  .append("svg:g")
+    .attr("transform", "translate(" + r + "," + r + ")");
+
+d3.json("../data/flare.json", function(json) {
+  var nodes = tree.nodes(json);
+
+  var link = vis.selectAll("path.link")
+      .data(tree.links(nodes))
+    .enter().append("svg:path")
+      .attr("class", "link")
+      .attr("d", diagonal);
+
+  var node = vis.selectAll("g.node")
+      .data(nodes)
+    .enter().append("svg:g")
+      .attr("class", "node")
+      .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; })
+
+  node.append("svg:circle")
+      .attr("r", 4.5);
+
+  node.append("svg:text")
+      .attr("dx", function(d) { return d.x < 180 ? 8 : -8; })
+      .attr("dy", ".31em")
+      .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
+      .attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; })
+      .text(function(d) { return d.name; });
+});
Index: /Dev/trunk/d3/examples/tree/tree.css
===================================================================
--- /Dev/trunk/d3/examples/tree/tree.css	(revision 76)
+++ /Dev/trunk/d3/examples/tree/tree.css	(revision 76)
@@ -0,0 +1,15 @@
+.node circle {
+  fill: #fff;
+  stroke: steelblue;
+  stroke-width: 1.5px;
+}
+
+.node {
+  font: 10px sans-serif;
+}
+
+.link {
+  fill: none;
+  stroke: #ccc;
+  stroke-width: 1.5px;
+}
Index: /Dev/trunk/d3/examples/tree/tree.html
===================================================================
--- /Dev/trunk/d3/examples/tree/tree.html	(revision 76)
+++ /Dev/trunk/d3/examples/tree/tree.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Node-Link Tree</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="tree.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="tree.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/tree/tree.js
===================================================================
--- /Dev/trunk/d3/examples/tree/tree.js	(revision 76)
+++ /Dev/trunk/d3/examples/tree/tree.js	(revision 76)
@@ -0,0 +1,39 @@
+var w = 960,
+    h = 2000;
+
+var tree = d3.layout.tree()
+    .size([h, w - 160]);
+
+var diagonal = d3.svg.diagonal()
+    .projection(function(d) { return [d.y, d.x]; });
+
+var vis = d3.select("#chart").append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(40, 0)");
+
+d3.json("../data/flare.json", function(json) {
+  var nodes = tree.nodes(json);
+
+  var link = vis.selectAll("path.link")
+      .data(tree.links(nodes))
+    .enter().append("svg:path")
+      .attr("class", "link")
+      .attr("d", diagonal);
+
+  var node = vis.selectAll("g.node")
+      .data(nodes)
+    .enter().append("svg:g")
+      .attr("class", "node")
+      .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; })
+
+  node.append("svg:circle")
+      .attr("r", 4.5);
+
+  node.append("svg:text")
+      .attr("dx", function(d) { return d.children ? -8 : 8; })
+      .attr("dy", 3)
+      .attr("text-anchor", function(d) { return d.children ? "end" : "start"; })
+      .text(function(d) { return d.name; });
+});
Index: /Dev/trunk/d3/examples/treemap/treemap-svg.html
===================================================================
--- /Dev/trunk/d3/examples/treemap/treemap-svg.html	(revision 76)
+++ /Dev/trunk/d3/examples/treemap/treemap-svg.html	(revision 76)
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <style type="text/css">
+
+rect {
+  fill: none;
+  stroke: #fff;
+}
+
+text {
+  font: 10px sans-serif;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript" src="treemap-svg.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/treemap/treemap-svg.js
===================================================================
--- /Dev/trunk/d3/examples/treemap/treemap-svg.js	(revision 76)
+++ /Dev/trunk/d3/examples/treemap/treemap-svg.js	(revision 76)
@@ -0,0 +1,34 @@
+var w = 960,
+    h = 500,
+    color = d3.scale.category20c();
+
+var treemap = d3.layout.treemap()
+    .padding(4)
+    .size([w, h])
+    .value(function(d) { return d.size; });
+
+var svg = d3.select("body").append("svg:svg")
+    .style("width", w)
+    .style("height", h)
+  .append("svg:g")
+    .attr("transform", "translate(-.5,-.5)");
+
+d3.json("../data/flare.json", function(json) {
+  var cell = svg.data([json]).selectAll("g")
+      .data(treemap)
+    .enter().append("svg:g")
+      .attr("class", "cell")
+      .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
+
+  cell.append("svg:rect")
+      .attr("width", function(d) { return d.dx; })
+      .attr("height", function(d) { return d.dy; })
+      .style("fill", function(d) { return d.children ? color(d.data.name) : null; });
+
+  cell.append("svg:text")
+      .attr("x", function(d) { return d.dx / 2; })
+      .attr("y", function(d) { return d.dy / 2; })
+      .attr("dy", ".35em")
+      .attr("text-anchor", "middle")
+      .text(function(d) { return d.children ? null : d.data.name; });
+});
Index: /Dev/trunk/d3/examples/treemap/treemap.css
===================================================================
--- /Dev/trunk/d3/examples/treemap/treemap.css	(revision 76)
+++ /Dev/trunk/d3/examples/treemap/treemap.css	(revision 76)
@@ -0,0 +1,8 @@
+.cell {
+  border: solid 1px white;
+  font: 10px sans-serif;
+  line-height: 12px;
+  overflow: hidden;
+  position: absolute;
+  text-indent: 2px;
+}
Index: /Dev/trunk/d3/examples/treemap/treemap.html
===================================================================
--- /Dev/trunk/d3/examples/treemap/treemap.html	(revision 76)
+++ /Dev/trunk/d3/examples/treemap/treemap.html	(revision 76)
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Treemap</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.layout.js"></script>
+    <link type="text/css" rel="stylesheet" href="treemap.css"/>
+    <link type="text/css" rel="stylesheet" href="../button.css"/>
+  </head>
+  <body>
+    <div id="chart">
+      <button id="size" class="first active">
+        Size
+      </button
+      ><button id="count" class="last">
+        Count
+      </button><p>
+    </div>
+    <script type="text/javascript" src="treemap.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/treemap/treemap.js
===================================================================
--- /Dev/trunk/d3/examples/treemap/treemap.js	(revision 76)
+++ /Dev/trunk/d3/examples/treemap/treemap.js	(revision 76)
@@ -0,0 +1,53 @@
+var w = 960,
+    h = 500,
+    color = d3.scale.category20c();
+
+var treemap = d3.layout.treemap()
+    .size([w, h])
+    .sticky(true)
+    .value(function(d) { return d.size; });
+
+var div = d3.select("#chart").append("div")
+    .style("position", "relative")
+    .style("width", w + "px")
+    .style("height", h + "px");
+
+d3.json("../data/flare.json", function(json) {
+  div.data([json]).selectAll("div")
+      .data(treemap.nodes)
+    .enter().append("div")
+      .attr("class", "cell")
+      .style("background", function(d) { return d.children ? color(d.name) : null; })
+      .call(cell)
+      .text(function(d) { return d.children ? null : d.name; });
+
+  d3.select("#size").on("click", function() {
+    div.selectAll("div")
+        .data(treemap.value(function(d) { return d.size; }))
+      .transition()
+        .duration(1500)
+        .call(cell);
+
+    d3.select("#size").classed("active", true);
+    d3.select("#count").classed("active", false);
+  });
+
+  d3.select("#count").on("click", function() {
+    div.selectAll("div")
+        .data(treemap.value(function(d) { return 1; }))
+      .transition()
+        .duration(1500)
+        .call(cell);
+
+    d3.select("#size").classed("active", false);
+    d3.select("#count").classed("active", true);
+  });
+});
+
+function cell() {
+  this
+      .style("left", function(d) { return d.x + "px"; })
+      .style("top", function(d) { return d.y + "px"; })
+      .style("width", function(d) { return d.dx - 1 + "px"; })
+      .style("height", function(d) { return d.dy - 1 + "px"; });
+}
Index: /Dev/trunk/d3/examples/voroboids/boid.js
===================================================================
--- /Dev/trunk/d3/examples/voroboids/boid.js	(revision 76)
+++ /Dev/trunk/d3/examples/voroboids/boid.js	(revision 76)
@@ -0,0 +1,235 @@
+// Boid flocking based on http://harry.me/2011/02/17/neat-algorithms---flocking
+var boid = (function() {
+  function boid() {
+    var position = [0, 0],
+        velocity = [0, 0],
+        gravityCenter = null,
+        neighborRadius = 50,
+        maxForce = .1,
+        maxSpeed = 1,
+        separationWeight = 2,
+        alignmentWeight = 1,
+        cohesionWeight = 1,
+        desiredSeparation = 10;
+
+    function boid(neighbors) {
+      var accel = flock(neighbors);
+      d3_ai_boidWrap(position);
+      velocity[0] += accel[0];
+      velocity[1] += accel[1];
+      if (gravityCenter) {
+        var g = d3_ai_boidGravity(gravityCenter, position, neighborRadius);
+        velocity[0] += g[0];
+        velocity[1] += g[1];
+      }
+      d3_ai_boidLimit(velocity, maxSpeed);
+      position[0] += velocity[0];
+      position[1] += velocity[1];
+      return position;
+    }
+
+    function flock(neighbors) {
+      var separation = [0, 0],
+          alignment = [0, 0],
+          cohesion = [0, 0],
+          separationCount = 0,
+          alignmentCount = 0,
+          cohesionCount = 0,
+          i = -1,
+          l = neighbors.length;
+      while (++i < l) {
+        var n = neighbors[i];
+        if (n === this) continue;
+        var npos = n.position(),
+            d = d3_ai_boidDistance(position, npos);
+        if (d > 0) {
+          if (d < desiredSeparation) {
+            var tmp = d3_ai_boidNormalize(d3_ai_boidSubtract(position.slice(), npos));
+            separation[0] += tmp[0] / d;
+            separation[1] += tmp[1] / d;
+            separationCount++;
+          }
+          if (d < neighborRadius) {
+            var nvel = n.velocity();
+            alignment[0] += nvel[0];
+            alignment[1] += nvel[1];
+            alignmentCount++;
+            cohesion[0] += npos[0];
+            cohesion[1] += npos[1];
+            cohesionCount++;
+          }
+        }
+      }
+
+      if (separationCount > 0) {
+        separation[0] /= separationCount;
+        separation[1] /= separationCount;
+      }
+
+      if (alignmentCount > 0) {
+        alignment[0] /= alignmentCount;
+        alignment[1] /= alignmentCount;
+      }
+      d3_ai_boidLimit(alignment, maxForce);
+
+      if (cohesionCount > 0) {
+        cohesion[0] /= cohesionCount;
+        cohesion[1] /= cohesionCount;
+      } else {
+        cohesion = position.slice();
+      }
+      cohesion = steerTo(cohesion);
+
+      return [
+        separation[0] * separationWeight +
+         alignment[0] * alignmentWeight +
+          cohesion[0] * cohesionWeight,
+        separation[1] * separationWeight +
+         alignment[1] * alignmentWeight +
+          cohesion[1] * cohesionWeight
+      ];
+    }
+
+    function steerTo(target) {
+      var desired = d3_ai_boidSubtract(target, position),
+          d = d3_ai_boidMagnitude(desired);
+
+      if (d > 0) {
+        d3_ai_boidNormalize(desired);
+
+        // Two options for desired vector magnitude (1 -- based on distance, 2 -- maxspeed)
+        var mul = maxSpeed * (d < 100 ? d / 100 : 1);
+        desired[0] *= mul;
+        desired[1] *= mul;
+
+        // Steering = Desired minus Velocity
+        var steer = d3_ai_boidSubtract(desired, velocity);
+        d3_ai_boidLimit(steer, maxForce)  // Limit to maximum steering force
+      } else {
+        steer = [0, 0];
+      }
+      return steer;
+    }
+
+    boid.position = function(x) {
+      if (!arguments.length) return position;
+      position = x;
+      return boid;
+    }
+
+    boid.velocity = function(x) {
+      if (!arguments.length) return velocity;
+      velocity = x;
+      return boid;
+    }
+
+    boid.gravityCenter = function(x) {
+      if (!arguments.length) return gravityCenter;
+      gravityCenter = x;
+      return boid;
+    }
+
+    boid.neighborRadius = function(x) {
+      if (!arguments.length) return neighborRadius;
+      neighborRadius = x;
+      return boid;
+    }
+
+    boid.maxForce = function(x) {
+      if (!arguments.length) return maxForce;
+      maxForce = x;
+      return boid;
+    }
+
+    boid.maxSpeed = function(x) {
+      if (!arguments.length) return maxSpeed;
+      maxSpeed = x;
+      return boid;
+    }
+
+    boid.separationWeight = function(x) {
+      if (!arguments.length) return separationWeight;
+      separationWeight = x;
+      return boid;
+    }
+
+    boid.alignmentWeight = function(x) {
+      if (!arguments.length) return alignmentWeight;
+      alignmentWeight = x;
+      return boid;
+    }
+
+    boid.cohesionWeight = function(x) {
+      if (!arguments.length) return cohesionWeight;
+      cohesionWeight = x;
+      return boid;
+    }
+
+    boid.desiredSeparation = function(x) {
+      if (!arguments.length) return desiredSeparation;
+      desiredSeparation = x;
+      return boid;
+    }
+
+    return boid;
+  }
+
+  function d3_ai_boidNormalize(a) {
+    var m = d3_ai_boidMagnitude(a);
+    if (m > 0) {
+      a[0] /= m;
+      a[1] /= m;
+    }
+    return a;
+  }
+
+  function d3_ai_boidWrap(position) {
+    if (position[0] > w) position[0] = 0;
+    else if (position[0] < 0) position[0] = w;
+    if (position[1] > h) position[1] = 0;
+    else if (position[1] < 0) position[1] = h;
+  }
+
+  function d3_ai_boidGravity(center, position, neighborRadius) {
+    if (center[0] != null) {
+      var m = d3_ai_boidSubtract(center.slice(), position),
+          d = d3_ai_boidMagnitude(m) - 10;
+      if (d > 0 && d < neighborRadius * 5) {
+        d3_ai_boidNormalize(m);
+        m[0] /= d;
+        m[1] /= d;
+        return m;
+      }
+    }
+    return [0, 0];
+  }
+
+  function d3_ai_boidDistance(a, b) {
+    var dx = a[0] - b[0],
+        dy = a[1] - b[1];
+    if (dx > w / 2) dx = w - dx;
+    if (dy > h / 2) dy = h - dy;
+    return Math.sqrt(dx * dx + dy * dy);
+  }
+
+  function d3_ai_boidSubtract(a, b) {
+    a[0] -= b[0];
+    a[1] -= b[1];
+    return a;
+  }
+
+  function d3_ai_boidMagnitude(v) {
+    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);
+  }
+
+  function d3_ai_boidLimit(a, max) {
+    if (d3_ai_boidMagnitude(a) > max) {
+      d3_ai_boidNormalize(a);
+      a[0] *= max;
+      a[1] *= max;
+    }
+    return a;
+  }
+
+  return boid;
+})();
Index: /Dev/trunk/d3/examples/voroboids/voroboids.css
===================================================================
--- /Dev/trunk/d3/examples/voroboids/voroboids.css	(revision 76)
+++ /Dev/trunk/d3/examples/voroboids/voroboids.css	(revision 76)
@@ -0,0 +1,15 @@
+svg {
+  display: block;
+  border: solid 1px #666;
+  overflow: hidden;
+}
+
+path {
+  stroke: #000;
+  stroke-width: .5px;
+}
+
+circle {
+  fill: none;
+  stroke: #fff;
+}
Index: /Dev/trunk/d3/examples/voroboids/voroboids.html
===================================================================
--- /Dev/trunk/d3/examples/voroboids/voroboids.html	(revision 76)
+++ /Dev/trunk/d3/examples/voroboids/voroboids.html	(revision 76)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Voroboids</title>
+    <link type="text/css" rel="stylesheet" href="voroboids.css"/>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+  </head>
+  <body>
+    <div id="vis"></div>
+    <script type="text/javascript" src="boid.js"></script>
+    <script type="text/javascript" src="voroboids.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/voroboids/voroboids.js
===================================================================
--- /Dev/trunk/d3/examples/voroboids/voroboids.js	(revision 76)
+++ /Dev/trunk/d3/examples/voroboids/voroboids.js	(revision 76)
@@ -0,0 +1,65 @@
+var w = 960,
+    h = 500,
+    mouse = [null, null],
+    fill = d3.scale.linear().domain([0, 1e4]).range(["brown", "steelblue"]);
+
+// Initialise boids.
+var boids = d3.range(100).map(function() {
+  return boid()
+      .position([Math.random() * w, Math.random() * h])
+      .velocity([Math.random() * 2 - 1, Math.random() * 2 - 1])
+      .gravityCenter(mouse);
+});
+
+// Compute initial positions.
+var vertices = boids.map(function(boid) {
+  return boid(boids);
+});
+
+d3.select(window).on("blur", nullGravity);
+
+var svg = d3.select("#vis")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+    .attr("class", "PiYG")
+    .on("mousemove", function() {
+      var m = d3.svg.mouse(this);
+      mouse[0] = m[0];
+      mouse[1] = m[1];
+    })
+    .on("mouseout", nullGravity);
+
+svg.selectAll("path")
+    .data(d3.geom.voronoi(vertices))
+  .enter().append("svg:path")
+    .attr("class", function(d, i) { return i ? "q" + (i % 9) + "-9" : null; })
+    .attr("d", function(d) { return "M" + d.join("L") + "Z"; });
+
+svg.selectAll("circle")
+    .data(vertices)
+  .enter().append("svg:circle")
+    .attr("transform", function(d) { return "translate(" + d + ")"; })
+    .attr("r", 2);
+
+d3.timer(function() {
+  // Update boid positions.
+  boids.forEach(function(boid, i) {
+    vertices[i] = boid(boids);
+  });
+
+  // Update circle positions.
+  svg.selectAll("circle")
+      .data(vertices)
+      .attr("transform", function(d) { return "translate(" + d + ")"; });
+
+  // Update voronoi diagram.
+  svg.selectAll("path")
+      .data(d3.geom.voronoi(vertices))
+      .attr("d", function(d) { return "M" + d.join("L") + "Z"; })
+      .style("fill", function(d) { return fill((d3.geom.polygon(d).area())); });
+});
+
+function nullGravity() {
+  mouse[0] = mouse[1] = null;
+}
Index: /Dev/trunk/d3/examples/voronoi/voronoi.css
===================================================================
--- /Dev/trunk/d3/examples/voronoi/voronoi.css	(revision 76)
+++ /Dev/trunk/d3/examples/voronoi/voronoi.css	(revision 76)
@@ -0,0 +1,16 @@
+svg {
+  border: solid 1px #666;
+  overflow: hidden;
+}
+
+path {
+  fill: yellow;
+  stroke: #000;
+  stroke-width: .5px;
+}
+
+circle {
+  fill: #ccc;
+  stroke: #000;
+  pointer-events: none;
+}
Index: /Dev/trunk/d3/examples/voronoi/voronoi.html
===================================================================
--- /Dev/trunk/d3/examples/voronoi/voronoi.html	(revision 76)
+++ /Dev/trunk/d3/examples/voronoi/voronoi.html	(revision 76)
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Voronoi Tesselation</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.geom.js"></script>
+    <link type="text/css" rel="stylesheet" href="../../lib/colorbrewer/colorbrewer.css"/>
+    <link type="text/css" rel="stylesheet" href="voronoi.css"/>
+  </head>
+  <body>
+    <div id="chart"></div>
+    <script type="text/javascript" src="voronoi.js"></script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/voronoi/voronoi.js
===================================================================
--- /Dev/trunk/d3/examples/voronoi/voronoi.js	(revision 76)
+++ /Dev/trunk/d3/examples/voronoi/voronoi.js	(revision 76)
@@ -0,0 +1,34 @@
+var w = 960,
+    h = 500;
+
+var vertices = d3.range(100).map(function(d) {
+  return [Math.random() * w, Math.random() * h];
+});
+
+var svg = d3.select("#chart")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h)
+    .attr("class", "PiYG")
+    .on("mousemove", update);
+
+svg.selectAll("path")
+    .data(d3.geom.voronoi(vertices))
+  .enter().append("svg:path")
+    .attr("class", function(d, i) { return i ? "q" + (i % 9) + "-9" : null; })
+    .attr("d", function(d) { return "M" + d.join("L") + "Z"; });
+
+svg.selectAll("circle")
+    .data(vertices.slice(1))
+  .enter().append("svg:circle")
+    .attr("transform", function(d) { return "translate(" + d + ")"; })
+    .attr("r", 2);
+
+function update() {
+  vertices[0] = d3.svg.mouse(this);
+  svg.selectAll("path")
+      .data(d3.geom.voronoi(vertices)
+      .map(function(d) { return "M" + d.join("L") + "Z"; }))
+      .filter(function(d) { return this.getAttribute("d") != d; })
+      .attr("d", function(d) { return d; });
+}
Index: /Dev/trunk/d3/examples/zoom-pan/zoom-pan-transform.html
===================================================================
--- /Dev/trunk/d3/examples/zoom-pan/zoom-pan-transform.html	(revision 76)
+++ /Dev/trunk/d3/examples/zoom-pan/zoom-pan-transform.html	(revision 76)
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Zoom + Pan</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.behavior.js"></script>
+    <style type="text/css">
+
+svg {
+  font: 10px sans-serif;
+  shape-rendering: crispEdges;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var size = [710, 500], // width height
+    padding = [4, 4, 20, 40], // top right bottom left
+    tx = function(d) { return "translate(" + x(d) + ",0)"; },
+    ty = function(d) { return "translate(0," + y(d) + ")"; },
+    stroke = function(d) { return d ? "#ccc" : "#666"; };
+
+// x-scale (1.42 = 710/500)
+var x = d3.scale.linear()
+    .domain([-1.42, +1.42])
+    .range([0, size[0]]);
+
+// y-scale (inverted domain)
+var y = d3.scale.linear()
+    .domain([+1.00, -1.00])
+    .range([0, size[1]]);
+
+var svg = d3.select("body").append("svg:svg")
+    .attr("width", size[0] + padding[3] + padding[1])
+    .attr("height", size[1] + padding[0] + padding[2])
+    .attr("pointer-events", "all")
+  .append("svg:g")
+    .attr("transform", "translate(" + padding[3] + "," + padding[0] + ")")
+    .call(d3.behavior.zoom().on("zoom", redraw))
+  .append("svg:g");
+
+// Generate x-ticksâŠ
+var gx = svg.selectAll("g.x")
+    .data(x.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "x")
+    .attr("transform", tx);
+
+gx.append("svg:line")
+    .attr("stroke", stroke)
+    .attr("y1", 0)
+    .attr("y2", size[1]);
+
+gx.append("svg:text")
+    .attr("y", size[1])
+    .attr("dy", "1em")
+    .attr("text-anchor", "middle")
+    .text(x.tickFormat(10));
+
+// Generate y-ticksâŠ
+var gy = svg.selectAll("g.y")
+    .data(y.ticks(10))
+  .enter().append("svg:g")
+    .attr("class", "y")
+    .attr("transform", ty);
+
+gy.append("svg:line")
+    .attr("stroke", stroke)
+    .attr("x1", 0)
+    .attr("x2", size[0]);
+
+gy.append("svg:text")
+    .attr("x", -3)
+    .attr("dy", ".35em")
+    .attr("text-anchor", "end")
+    .text(y.tickFormat(10));
+
+svg.append("svg:rect")
+    .attr("width", size[0])
+    .attr("height", size[1])
+    .attr("stroke", stroke)
+    .attr("fill", "none");
+
+function redraw() {
+  svg.attr("transform",
+      "translate(" + d3.event.translate + ")"
+      + "scale(" + d3.event.scale + ")");
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/zoom-pan/zoom-pan.html
===================================================================
--- /Dev/trunk/d3/examples/zoom-pan/zoom-pan.html	(revision 76)
+++ /Dev/trunk/d3/examples/zoom-pan/zoom-pan.html	(revision 76)
@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Zoom + Pan</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.behavior.js"></script>
+    <style type="text/css">
+
+svg {
+  font: 10px sans-serif;
+  shape-rendering: crispEdges;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var size = [710, 500], // width height
+    padding = [4, 4, 20, 40], // top right bottom left
+    tx = function(d) { return "translate(" + x(d) + ",0)"; },
+    ty = function(d) { return "translate(0," + y(d) + ")"; },
+    stroke = function(d) { return d ? "#ccc" : "#666"; };
+
+// x-scale (1.42 = 710/500)
+var x = d3.scale.linear()
+    .domain([-1.42, +1.42])
+    .range([0, size[0]]);
+
+// y-scale (inverted domain)
+var y = d3.scale.linear()
+    .domain([+1.00, -1.00])
+    .range([0, size[1]]);
+
+var svg = d3.select("body").append("svg:svg")
+    .attr("width", size[0] + padding[3] + padding[1])
+    .attr("height", size[1] + padding[0] + padding[2])
+    .attr("pointer-events", "all")
+  .append("svg:g")
+    .attr("transform", "translate(" + padding[3] + "," + padding[0] + ")")
+    .call(d3.behavior.zoom().on("zoom", redraw));
+
+svg.append("svg:rect")
+    .attr("width", size[0])
+    .attr("height", size[1])
+    .attr("stroke", stroke)
+    .attr("fill", "none");
+
+redraw();
+
+function redraw() {
+  if (d3.event) d3.event.transform(x, y);
+
+  var fx = x.tickFormat(10),
+      fy = y.tickFormat(10);
+
+  // Regenerate x-ticksâŠ
+  var gx = svg.selectAll("g.x")
+      .data(x.ticks(10), String)
+      .attr("transform", tx);
+
+  gx.select("text")
+      .text(fx);
+
+  var gxe = gx.enter().insert("svg:g", "rect")
+      .attr("class", "x")
+      .attr("transform", tx);
+
+  gxe.append("svg:line")
+      .attr("stroke", stroke)
+      .attr("y1", 0)
+      .attr("y2", size[1]);
+
+  gxe.append("svg:text")
+      .attr("y", size[1])
+      .attr("dy", "1em")
+      .attr("text-anchor", "middle")
+      .text(fx);
+
+  gx.exit().remove();
+
+  // Regenerate y-ticksâŠ
+  var gy = svg.selectAll("g.y")
+      .data(y.ticks(10), String)
+      .attr("transform", ty);
+
+  gy.select("text")
+      .text(fy);
+
+  var gye = gy.enter().insert("svg:g", "rect")
+      .attr("class", "y")
+      .attr("transform", ty);
+
+  gye.append("svg:line")
+      .attr("stroke", stroke)
+      .attr("x1", 0)
+      .attr("x2", size[0]);
+
+  gye.append("svg:text")
+      .attr("x", -3)
+      .attr("dy", ".35em")
+      .attr("text-anchor", "end")
+      .text(fy);
+
+  gy.exit().remove();
+
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/examples/zoom/dji.csv
===================================================================
--- /Dev/trunk/d3/examples/zoom/dji.csv	(revision 76)
+++ /Dev/trunk/d3/examples/zoom/dji.csv	(revision 76)
@@ -0,0 +1,5233 @@
+Date,Open,High,Low,Close,Volume,Adj Close
+2010-10-01,10789.72,10907.41,10759.14,10829.68,4298910000,10829.68
+2010-09-30,10835.96,10960.99,10732.27,10788.05,4284160000,10788.05
+2010-09-29,10857.98,10901.96,10759.75,10835.28,3990280000,10835.28
+2010-09-28,10809.85,10905.44,10714.03,10858.14,4025840000,10858.14
+2010-09-27,10860.03,10902.52,10776.44,10812.04,3587860000,10812.04
+2010-09-24,10664.39,10897.83,10664.39,10860.26,4123950000,10860.26
+2010-09-23,10738.48,10779.65,10610.12,10662.42,3847850000,10662.42
+2010-09-22,10761.11,10829.75,10682.40,10739.31,3911070000,10739.31
+2010-09-21,10753.39,10844.89,10674.83,10761.03,4175660000,10761.03
+2010-09-20,10608.08,10783.51,10594.38,10753.62,3364080000,10753.62
+2010-09-17,10595.44,10689.29,10529.67,10607.85,4086140000,10607.85
+2010-09-16,10571.75,10624.58,10499.43,10594.83,3364080000,10594.83
+2010-09-15,10526.42,10609.21,10453.15,10572.73,3369840000,10572.73
+2010-09-14,10544.81,10622.69,10460.34,10526.49,4521050000,10526.49
+2010-09-13,10458.60,10605.73,10458.45,10544.13,4521050000,10544.13
+2010-09-10,10415.01,10502.80,10376.34,10462.77,3061160000,10462.77
+2010-09-09,10388.22,10515.86,10359.23,10415.24,3387770000,10415.24
+2010-09-08,10338.57,10460.50,10318.93,10387.01,3224640000,10387.01
+2010-09-07,10446.80,10448.99,10304.44,10340.69,3107380000,10340.69
+2010-09-03,10321.92,10484.71,10321.92,10447.93,3534500000,10447.93
+2010-09-02,10270.08,10350.98,10211.80,10320.10,3704210000,10320.10
+2010-09-01,10016.01,10305.87,10016.01,10269.47,4396880000,10269.47
+2010-08-31,10006.42,10101.53,9915.73,10014.72,4038770000,10014.72
+2010-08-30,10145.58,10170.10,10005.56,10009.73,2917990000,10009.73
+2010-08-27,9982.40,10176.30,9925.11,10150.65,4102460000,10150.65
+2010-08-26,10059.83,10138.12,9959.17,9985.81,3646710000,9985.81
+2010-08-25,10040.15,10104.18,9925.34,10060.06,4360190000,10060.06
+2010-08-24,10170.86,10170.86,9975.86,10040.45,4436330000,10040.45
+2010-08-23,10215.51,10328.88,10146.18,10174.41,3210950000,10174.41
+2010-08-20,10270.98,10276.13,10131.88,10213.62,3761570000,10213.62
+2010-08-19,10411.15,10412.29,10202.34,10271.21,4290540000,10271.21
+2010-08-18,10398.59,10486.38,10308.83,10415.54,3724260000,10415.54
+2010-08-17,10297.55,10501.67,10297.55,10405.85,3968210000,10405.85
+2010-08-16,10303.07,10354.39,10193.26,10302.01,3142450000,10302.01
+2010-08-13,10320.33,10381.86,10254.18,10303.15,3328890000,10303.15
+2010-08-12,10361.58,10388.37,10222.85,10319.95,4521050000,10319.95
+2010-08-11,10631.82,10631.82,10339.63,10378.83,4511860000,10378.83
+2010-08-10,10696.63,10717.21,10522.63,10644.25,3979360000,10644.25
+2010-08-09,10654.62,10755.66,10618.26,10698.75,3191630000,10698.75
+2010-08-06,10668.55,10688.08,10491.37,10653.56,3857890000,10653.56
+2010-08-05,10679.67,10712.37,10571.60,10674.98,3685560000,10674.98
+2010-08-04,10630.20,10738.48,10583.10,10680.43,4057850000,10680.43
+2010-08-03,10673.92,10714.19,10564.18,10636.38,4071820000,10636.38
+2010-08-02,10468.82,10715.21,10468.82,10674.38,4144180000,10674.38
+2010-07-30,10465.19,10528.84,10327.37,10465.94,4006450000,10465.94
+2010-07-29,10498.94,10609.74,10383.45,10467.16,4612420000,10467.16
+2010-07-28,10537.01,10586.36,10445.17,10497.88,4002390000,10497.88
+2010-07-27,10525.28,10632.52,10460.65,10537.69,4725690000,10537.69
+2010-07-26,10424.17,10545.94,10391.02,10525.43,4009650000,10525.43
+2010-07-23,10321.16,10465.19,10237.84,10424.62,4524570000,10424.62
+2010-07-22,10121.81,10391.78,10121.81,10322.30,4826900000,10322.30
+2010-07-21,10226.02,10310.04,10053.85,10120.53,4747180000,10120.53
+2010-07-20,10151.48,10248.20,9973.17,10229.96,4713280000,10229.96
+2010-07-19,10098.12,10213.09,10051.28,10154.43,4089500000,10154.43
+2010-07-16,10356.20,10356.20,10071.63,10097.90,5297350000,10097.90
+2010-07-15,10367.10,10409.49,10216.04,10359.31,4552470000,10359.31
+2010-07-14,10370.96,10423.03,10265.16,10366.72,4521050000,10366.72
+2010-07-13,10217.55,10436.20,10217.55,10363.02,4640460000,10363.02
+2010-07-12,10199.24,10260.62,10121.13,10216.27,3426990000,10216.27
+2010-07-09,10137.93,10226.48,10079.05,10198.03,3506570000,10198.03
+2010-07-08,10019.26,10175.02,9987.02,10138.99,4548460000,10138.99
+2010-07-07,9736.85,10029.93,9716.38,10018.28,4931220000,10018.28
+2010-07-06,9689.21,9880.76,9648.26,9743.62,4691240000,9743.62
+2010-07-02,9732.23,9798.19,9603.80,9686.48,3968500000,9686.48
+2010-07-01,9773.27,9834.71,9596.04,9732.53,6435770000,9732.53
+2010-06-30,9868.34,9951.47,9741.07,9774.02,5067080000,9774.02
+2010-06-29,10135.72,10135.72,9786.45,9870.30,6136700000,9870.30
+2010-06-28,10143.05,10246.82,10070.12,10138.52,3896410000,10138.52
+2010-06-25,10153.48,10261.10,10039.97,10143.81,5128840000,10143.81
+2010-06-24,10297.08,10314.31,10112.60,10152.80,4814830000,10152.80
+2010-06-23,10293.30,10393.89,10195.81,10298.44,4526150000,10298.44
+2010-06-22,10441.95,10524.78,10276.14,10293.52,4514380000,10293.52
+2010-06-21,10452.46,10627.19,10387.54,10442.41,4514360000,10442.41
+2010-06-18,10435.00,10513.75,10379.60,10450.64,4555360000,10450.64
+2010-06-17,10409.98,10479.74,10293.49,10434.17,4557760000,10434.17
+2010-06-16,10404.24,10456.39,10289.37,10409.46,5002600000,10409.46
+2010-06-15,10192.40,10416.11,10192.40,10404.77,4644490000,10404.77
+2010-06-14,10211.83,10354.97,10175.02,10190.89,4425830000,10190.89
+2010-06-11,10166.78,10235.10,10038.31,10211.07,4059280000,10211.07
+2010-06-10,9901.67,10206.61,9901.67,10172.53,5144780000,10172.53
+2010-06-09,9941.57,10093.33,9859.04,9899.25,5983200000,9899.25
+2010-06-08,9812.94,9971.57,9726.33,9939.98,6192750000,9939.98
+2010-06-07,9931.75,10025.84,9798.73,9816.49,5467560000,9816.49
+2010-06-04,10249.61,10249.61,9881.11,9931.97,6180580000,9931.97
+2010-06-03,10250.67,10348.84,10158.92,10255.28,4995970000,10255.28
+2010-06-02,10025.61,10256.57,10007.09,10249.54,5026360000,10249.54
+2010-06-01,10133.94,10249.27,9976.56,10024.02,5271480000,10024.02
+2010-05-28,10258.00,10293.45,10078.66,10136.63,4871210000,10136.63
+2010-05-27,9971.73,10279.01,9971.73,10258.99,5698460000,10258.99
+2010-05-26,10045.11,10211.60,9937.79,9974.45,4521050000,9974.45
+2010-05-25,10061.43,10061.43,9756.11,10043.75,7329580000,10043.75
+2010-05-24,10193.46,10235.63,10028.78,10066.57,5224040000,10066.57
+2010-05-21,10063.93,10225.88,9860.93,10193.39,5452130000,10193.39
+2010-05-20,10440.21,10440.21,10042.46,10068.01,8328569600,10068.01
+2010-05-19,10505.70,10558.56,10306.22,10444.37,6765800000,10444.37
+2010-05-18,10625.45,10760.05,10463.15,10510.95,6170840000,10510.95
+2010-05-17,10616.98,10707.30,10424.72,10625.83,5922920000,10625.83
+2010-05-14,10780.68,10780.68,10509.89,10620.16,6126400000,10620.16
+2010-05-13,10896.61,10952.84,10752.72,10782.95,4870640000,10782.95
+2010-05-12,10742.15,10941.88,10725.81,10896.91,5225460000,10896.91
+2010-05-11,10780.00,10888.30,10653.71,10748.26,5842550000,10748.26
+2010-05-10,10386.18,10880.14,10386.18,10785.14,6893700000,10785.14
+2010-05-07,10519.42,10622.27,10221.50,10380.43,9472910400,10380.43
+2010-05-06,10862.22,10925.86,9787.17,10520.32,10617809600,10520.32
+2010-05-05,10918.40,10984.05,10754.30,10868.12,6795940000,10868.12
+2010-05-04,11149.48,11149.48,10843.71,10926.77,6594720000,10926.77
+2010-05-03,11009.60,11203.37,11004.15,11151.83,4938050000,11151.83
+2010-04-30,11168.23,11235.94,10984.35,11008.61,6048260000,11008.61
+2010-04-29,11045.64,11232.54,11045.64,11167.32,6059410000,11167.32
+2010-04-28,10988.87,11115.63,10938.48,11045.27,6342310000,11045.27
+2010-04-27,11203.67,11260.88,10962.81,10991.99,7454540000,10991.99
+2010-04-26,11205.11,11308.95,11150.01,11205.03,5647760000,11205.03
+2010-04-23,11132.18,11247.20,11058.87,11204.28,5326060000,11204.28
+2010-04-22,11119.78,11175.33,10975.66,11134.29,6035780000,11134.29
+2010-04-21,11116.91,11217.35,11018.59,11124.92,5724310000,11124.92
+2010-04-20,11093.11,11190.22,11045.80,11117.06,5316590000,11117.06
+2010-04-19,11018.36,11116.76,10940.60,11092.05,6597740000,11092.05
+2010-04-16,11143.66,11186.82,10947.55,11018.66,8108470400,11018.66
+2010-04-15,11122.96,11189.61,11051.31,11144.57,5995330000,11144.57
+2010-04-14,11020.70,11147.14,11004.61,11123.11,5760040000,11123.11
+2010-04-13,11006.72,11072.70,10925.86,11019.42,5403580000,11019.42
+2010-04-12,10996.75,11066.96,10957.22,11005.97,4607090000,11005.97
+2010-04-09,10926.92,11032.12,10894.19,10997.35,4511570000,10997.35
+2010-04-08,10896.99,10969.92,10810.15,10927.07,4726970000,10927.07
+2010-04-07,10961.95,11000.22,10835.77,10897.52,5101430000,10897.52
+2010-04-06,10972.49,11017.76,10893.89,10969.99,4086180000,10969.99
+2010-04-05,10927.45,11026.75,10880.36,10973.55,3881620000,10973.55
+2010-04-01,10857.31,10983.14,10851.57,10927.07,4006870000,10927.07
+2010-03-31,10907.34,10933.19,10802.22,10856.63,4484340000,10856.63
+2010-03-30,10895.02,10968.56,10837.21,10907.42,4085000000,10907.42
+2010-03-29,10849.23,10954.43,10827.91,10895.86,4375580000,10895.86
+2010-03-26,10841.29,10934.85,10801.84,10850.36,4708420000,10850.36
+2010-03-25,10837.51,10985.26,10818.77,10841.21,5668900000,10841.21
+2010-03-24,10887.62,10925.48,10788.77,10836.15,4705750000,10836.15
+2010-03-23,10787.18,10906.06,10752.41,10888.83,4411640000,10888.83
+2010-03-22,10741.00,10836.68,10672.23,10785.89,4261680000,10785.89
+2010-03-19,10780.00,10869.55,10665.35,10741.98,5212410000,10741.98
+2010-03-18,10733.44,10821.49,10686.89,10779.17,4234510000,10779.17
+2010-03-17,10686.36,10787.86,10658.10,10733.67,4963200000,10733.67
+2010-03-16,10642.53,10717.42,10594.16,10685.98,4369770000,10685.98
+2010-03-15,10623.41,10680.32,10540.65,10642.15,4164110000,10642.15
+2010-03-12,10611.77,10690.90,10561.66,10624.69,4928160000,10624.69
+2010-03-11,10560.98,10626.73,10489.87,10611.84,4669060000,10611.84
+2010-03-10,10560.13,10639.05,10502.64,10567.33,5469120000,10567.33
+2010-03-09,10552.24,10637.46,10493.49,10564.38,5185570000,10564.38
+2010-03-08,10563.78,10632.48,10500.90,10552.52,3774680000,10552.52
+2010-03-05,10445.13,10587.13,10445.13,10566.20,4133000000,10566.20
+2010-03-04,10396.53,10484.05,10363.88,10444.14,3945010000,10444.14
+2010-03-03,10406.28,10496.22,10359.58,10396.76,3951320000,10396.76
+2010-03-02,10404.16,10493.80,10359.80,10405.98,4134680000,10405.98
+2010-03-01,10326.10,10444.60,10320.05,10403.79,3847640000,10403.79
+2010-02-26,10321.41,10391.24,10250.45,10325.26,3945190000,10325.26
+2010-02-25,10366.60,10366.60,10155.75,10321.03,4521130000,10321.03
+2010-02-24,10284.00,10416.94,10271.61,10374.16,4168360000,10374.16
+2010-02-23,10383.16,10430.16,10239.34,10282.41,4521050000,10282.41
+2010-02-22,10402.43,10468.55,10333.05,10383.38,3814440000,10383.38
+2010-02-19,10387.77,10459.18,10316.50,10402.35,3944280000,10402.35
+2010-02-18,10309.39,10416.79,10255.58,10392.90,3878620000,10392.90
+2010-02-17,10261.48,10366.83,10223.16,10309.24,4259230000,10309.24
+2010-02-16,10100.81,10292.62,10100.81,10268.81,4080770000,10268.81
+2010-02-12,10137.23,10140.18,9962.13,10099.14,4160680000,10099.14
+2010-02-11,10037.85,10184.85,9963.19,10144.19,4400870000,10144.19
+2010-02-10,10055.46,10120.15,9946.26,10038.38,4251450000,10038.38
+2010-02-09,9910.28,10154.24,9910.28,10058.64,5114260000,10058.64
+2010-02-08,10005.43,10059.24,9882.85,9908.39,4089820000,9908.39
+2010-02-05,10003.69,10078.89,9822.84,10012.23,6438900000,10012.23
+2010-02-04,10273.12,10273.12,9984.35,10002.18,5859690000,10002.18
+2010-02-03,10291.73,10356.86,10192.03,10270.55,4285450000,10270.55
+2010-02-02,10186.13,10333.35,10138.75,10296.85,4749540000,10296.85
+2010-02-01,10068.99,10227.24,10068.99,10185.53,4077610000,10185.53
+2010-01-29,10122.04,10272.29,10014.35,10067.33,5412850000,10067.33
+2010-01-28,10236.92,10310.68,10023.80,10120.46,5452400000,10120.46
+2010-01-27,10194.29,10294.13,10060.98,10236.16,5319120000,10236.16
+2010-01-26,10195.35,10323.00,10102.17,10194.29,4731910000,10194.29
+2010-01-25,10175.10,10316.65,10135.95,10196.86,4481390000,10196.86
+2010-01-22,10389.58,10450.04,10133.15,10172.98,6208650000,10172.98
+2010-01-21,10603.91,10651.14,10334.18,10389.88,6874289600,10389.88
+2010-01-20,10719.69,10719.69,10492.36,10603.15,4810560000,10603.15
+2010-01-19,10608.37,10763.45,10555.47,10725.43,4724830000,10725.43
+2010-01-15,10706.99,10736.54,10529.09,10609.65,4758730000,10609.65
+2010-01-14,10680.16,10767.15,10619.02,10710.55,3915200000,10710.55
+2010-01-13,10628.09,10747.12,10569.07,10680.77,4170360000,10680.77
+2010-01-12,10662.86,10701.48,10523.35,10627.26,4716160000,10627.26
+2010-01-11,10620.31,10739.87,10538.91,10663.99,4255780000,10663.99
+2010-01-08,10606.40,10653.11,10509.74,10618.19,4389590000,10618.19
+2010-01-07,10571.11,10655.60,10471.73,10606.86,5270680000,10606.86
+2010-01-06,10564.72,10655.22,10488.28,10573.68,4972660000,10573.68
+2010-01-05,10584.56,10647.14,10468.86,10572.02,2491020000,10572.02
+2010-01-04,10430.69,10641.62,10430.69,10583.96,3991400000,10583.96
+2009-12-31,10548.51,10578.74,10420.56,10428.05,2076990000,10428.05
+2009-12-30,10544.36,10583.28,10470.75,10548.51,2277300000,10548.51
+2009-12-29,10547.83,10605.65,10518.59,10545.41,2491020000,10545.41
+2009-12-28,10517.91,10585.02,10477.25,10547.08,2716400000,10547.08
+2009-12-24,10467.12,10541.26,10450.95,10520.10,1267710000,10520.10
+2009-12-23,10464.32,10520.93,10409.00,10466.44,3166870000,10466.44
+2009-12-22,10414.67,10511.56,10399.33,10464.93,3641130000,10464.93
+2009-12-21,10330.10,10489.41,10330.10,10414.14,3977340000,10414.14
+2009-12-18,10309.39,10412.55,10237.75,10328.89,6325890000,10328.89
+2009-12-17,10439.99,10439.99,10279.39,10308.26,7615070400,10308.26
+2009-12-16,10449.81,10552.75,10401.90,10441.12,4829820000,10441.12
+2009-12-15,10499.31,10542.09,10380.96,10452.00,5045100000,10452.00
+2009-12-14,10471.28,10566.88,10431.60,10501.05,4548490000,10501.05
+2009-12-11,10403.41,10516.47,10385.42,10471.50,3791090000,10471.50
+2009-12-10,10336.00,10479.06,10332.14,10405.83,3996490000,10405.83
+2009-12-09,10282.85,10377.11,10207.29,10337.05,4115410000,10337.05
+2009-12-08,10385.42,10385.42,10216.44,10285.97,4748030000,10285.97
+2009-12-07,10386.86,10478.23,10321.11,10390.11,4103360000,10390.11
+2009-12-04,10368.57,10549.04,10285.44,10388.90,5781140000,10388.90
+2009-12-03,10455.63,10533.55,10338.49,10366.15,4810030000,10366.15
+2009-12-02,10470.44,10537.63,10386.03,10452.68,3941340000,10452.68
+2009-12-01,10343.82,10537.03,10343.82,10471.58,4249310000,10471.58
+2009-11-30,10309.77,10394.34,10238.05,10344.84,3895520000,10344.84
+2009-11-27,10452.23,10452.23,10179.33,10309.92,2362910000,10309.92
+2009-11-25,10432.96,10513.60,10385.65,10464.40,3036350000,10464.40
+2009-11-24,10451.25,10488.66,10335.62,10433.71,3700820000,10433.71
+2009-11-23,10320.13,10524.40,10320.13,10450.95,3827920000,10450.95
+2009-11-20,10327.91,10377.41,10237.60,10318.16,3751230000,10318.16
+2009-11-19,10425.33,10425.33,10226.41,10332.44,4178030000,10332.44
+2009-11-18,10426.27,10471.28,10330.33,10426.31,4293340000,10426.31
+2009-11-17,10404.77,10465.76,10318.69,10437.42,3824070000,10437.42
+2009-11-16,10267.53,10465.83,10267.53,10406.96,4565850000,10406.96
+2009-11-13,10197.85,10332.29,10162.93,10270.47,3792610000,10270.47
+2009-11-12,10289.82,10341.21,10157.64,10197.47,4160250000,10197.47
+2009-11-11,10247.42,10357.38,10217.19,10291.26,4286700000,10291.26
+2009-11-10,10223.01,10300.33,10148.12,10246.97,4394770000,10246.97
+2009-11-09,10020.62,10248.93,10020.62,10226.94,4460030000,10226.94
+2009-11-06,10001.35,10077.08,9898.49,10023.42,4277130000,10023.42
+2009-11-05,9807.80,10043.75,9807.80,10005.96,4848350000,10005.96
+2009-11-04,9767.30,9962.35,9745.76,9802.14,5635510000,9802.14
+2009-11-03,9787.47,9844.84,9649.78,9771.91,5487500000,9771.91
+2009-11-02,9712.13,9883.68,9647.06,9789.44,6202640000,9789.44
+2009-10-30,9961.52,9980.19,9664.89,9712.73,6512420000,9712.73
+2009-10-29,9762.91,9996.67,9762.91,9962.58,5595040000,9962.58
+2009-10-28,9881.11,9940.89,9723.31,9762.69,6600350000,9762.69
+2009-10-27,9868.34,9994.55,9802.36,9882.17,5337380000,9882.17
+2009-10-26,9972.33,10107.99,9817.55,9867.96,6363380000,9867.96
+2009-10-23,10099.90,10138.59,9908.70,9972.18,4767460000,9972.18
+2009-10-22,9946.18,10133.08,9879.07,10081.31,5192410000,10081.31
+2009-10-21,10038.84,10157.94,9909.83,9949.36,5616290000,9949.36
+2009-10-20,10092.42,10157.26,9952.98,10041.48,5396930000,10041.48
+2009-10-19,9996.67,10146.61,9967.49,10092.19,4619240000,10092.19
+2009-10-16,10061.36,10072.62,9884.51,9995.91,4894740000,9995.91
+2009-10-15,10014.88,10087.43,9916.93,10062.94,5369780000,10062.94
+2009-10-14,9873.55,10064.98,9873.55,10015.86,5406420000,10015.86
+2009-10-13,9883.98,9935.53,9780.90,9871.06,4320480000,9871.06
+2009-10-12,9865.24,9978.07,9814.45,9885.80,3710430000,9885.80
+2009-10-09,9786.04,9890.41,9731.32,9864.94,3763780000,9864.94
+2009-10-08,9728.22,9872.50,9709.78,9786.87,4988400000,9786.87
+2009-10-07,9725.69,9782.56,9634.96,9725.58,4238220000,9725.58
+2009-10-06,9601.26,9793.37,9601.26,9731.25,5029840000,9731.25
+2009-10-05,9488.73,9640.33,9449.81,9599.75,4313310000,9599.75
+2009-10-02,9507.62,9571.71,9378.77,9487.67,5583240000,9487.67
+2009-10-01,9711.60,9714.70,9482.98,9509.28,5791450000,9509.28
+2009-09-30,9741.83,9817.17,9583.04,9712.28,5998860000,9712.28
+2009-09-29,9789.74,9861.99,9705.10,9742.20,4949900000,9742.20
+2009-09-28,9663.23,9861.39,9658.09,9789.36,3726950000,9789.36
+2009-09-25,9706.68,9781.73,9605.19,9665.19,4507090000,9665.19
+2009-09-24,9749.99,9836.82,9637.53,9707.44,5505610000,9707.44
+2009-09-23,9830.63,9937.72,9724.90,9748.55,5531930000,9748.55
+2009-09-22,9779.61,9890.71,9742.96,9829.87,5246600000,9829.87
+2009-09-21,9818.61,9846.12,9688.40,9778.86,4615280000,9778.86
+2009-09-18,9784.75,9898.57,9751.27,9820.20,5607970000,9820.20
+2009-09-17,9789.82,9896.38,9706.23,9783.92,6668110000,9783.92
+2009-09-16,9683.71,9837.05,9648.95,9791.71,6793529600,9791.71
+2009-09-15,9626.42,9745.91,9553.80,9683.41,6185620000,9683.41
+2009-09-14,9598.08,9662.10,9492.96,9626.80,4979610000,9626.80
+2009-09-11,9625.44,9698.67,9532.11,9605.41,4922600000,9605.41
+2009-09-10,9546.54,9666.55,9479.20,9627.48,5191380000,9627.48
+2009-09-09,9496.59,9604.43,9435.45,9547.22,5202550000,9547.22
+2009-09-08,9440.13,9564.45,9402.80,9497.34,5235160000,9497.34
+2009-09-04,9345.36,9465.37,9302.28,9441.27,4097370000,9441.27
+2009-09-03,9282.03,9350.27,9252.93,9344.61,4624280000,9344.61
+2009-09-02,9306.21,9378.77,9223.08,9280.67,5842730000,9280.67
+2009-09-01,9492.32,9573.67,9275.15,9310.60,6862360000,9310.60
+2009-08-31,9542.91,9552.97,9389.27,9496.28,5004560000,9496.28
+2009-08-28,9582.74,9666.71,9476.63,9544.20,5785780000,9544.20
+2009-08-27,9541.63,9629.98,9440.43,9580.63,5785880000,9580.63
+2009-08-26,9538.61,9613.65,9446.71,9543.52,5080060000,9543.52
+2009-08-25,9509.21,9646.53,9485.70,9539.29,5768740000,9539.29
+2009-08-24,9506.18,9625.89,9442.17,9509.28,6302450000,9509.28
+2009-08-21,9347.86,9549.19,9347.86,9505.96,5885550000,9505.96
+2009-08-20,9278.55,9385.72,9237.52,9350.05,4893160000,9350.05
+2009-08-19,9208.68,9333.34,9099.14,9279.16,4257000000,9279.16
+2009-08-18,9134.36,9262.08,9124.08,9217.94,4198970000,9217.94
+2009-08-17,9313.85,9313.85,9078.28,9135.34,4854970000,9135.34
+2009-08-14,9398.04,9425.17,9214.47,9321.40,4940750000,9321.40
+2009-08-13,9362.29,9448.97,9269.26,9398.19,5250660000,9398.19
+2009-08-12,9236.06,9442.47,9199.80,9361.61,5498170000,9361.61
+2009-08-11,9334.33,9351.86,9180.23,9241.45,5773160000,9241.45
+2009-08-10,9368.41,9420.56,9249.99,9337.95,5406080000,9337.95
+2009-08-07,9258.45,9466.89,9258.45,9370.07,6827089600,9370.07
+2009-08-06,9277.19,9378.01,9168.44,9256.26,6753380000,9256.26
+2009-08-05,9315.36,9374.38,9173.20,9280.97,7242120000,9280.97
+2009-08-04,9285.05,9370.30,9207.21,9320.19,5713700000,9320.19
+2009-08-03,9173.65,9342.11,9162.09,9286.56,5603440000,9286.56
+2009-07-31,9154.61,9264.65,9081.30,9171.61,5139070000,9171.61
+2009-07-30,9072.84,9298.13,9072.84,9154.46,6035180000,9154.46
+2009-07-29,9092.34,9141.23,8967.26,9070.72,5178770000,9070.72
+2009-07-28,9106.92,9154.76,8980.03,9096.72,5490350000,9096.72
+2009-07-27,9093.09,9154.23,8996.58,9108.51,4631290000,9108.51
+2009-07-24,9066.11,9144.48,8955.77,9093.24,4458300000,9093.24
+2009-07-23,8882.31,9143.05,8837.95,9069.29,5761650000,9069.29
+2009-07-22,8912.39,8993.48,8802.13,8881.26,4634100000,8881.26
+2009-07-21,8848.15,8991.07,8780.82,8915.94,5309300000,8915.94
+2009-07-20,8746.05,8884.43,8717.26,8848.15,4853150000,8848.15
+2009-07-17,8711.89,8797.97,8638.81,8743.94,5141380000,8743.94
+2009-07-16,8612.66,8750.28,8543.97,8711.82,4898640000,8711.82
+2009-07-15,8363.95,8643.04,8363.95,8616.21,5238830000,8616.21
+2009-07-14,8331.37,8407.48,8255.27,8359.49,4149030000,8359.49
+2009-07-13,8146.82,8348.08,8106.16,8331.68,4499440000,8331.68
+2009-07-10,8182.49,8216.65,8057.57,8146.52,3912080000,8146.52
+2009-07-09,8179.01,8273.48,8117.27,8183.17,4347170000,8183.17
+2009-07-08,8157.02,8259.05,8057.94,8178.41,5721780000,8178.41
+2009-07-07,8324.95,8355.48,8138.51,8163.60,4673300000,8163.60
+2009-07-06,8279.30,8364.02,8156.49,8324.87,4712580000,8324.87
+2009-07-02,8503.00,8503.00,8260.41,8280.74,3931000000,8280.74
+2009-07-01,8447.53,8610.32,8447.00,8504.06,3919400000,8504.06
+2009-06-30,8528.93,8584.17,8369.99,8447.00,4627570000,8447.00
+2009-06-29,8440.13,8569.59,8406.57,8529.38,4211760000,8529.38
+2009-06-26,8468.54,8509.73,8364.17,8438.39,6076660000,8438.39
+2009-06-25,8299.25,8512.60,8236.07,8472.40,4911240000,8472.40
+2009-06-24,8323.51,8456.83,8246.20,8299.86,4636720000,8299.86
+2009-06-23,8340.44,8413.22,8239.17,8322.91,5071020000,8322.91
+2009-06-22,8538.52,8538.52,8306.66,8339.01,4903940000,8339.01
+2009-06-19,8556.96,8665.26,8476.02,8539.73,5713390000,8539.73
+2009-06-18,8496.73,8634.28,8438.61,8555.60,4684010000,8555.60
+2009-06-17,8504.36,8602.99,8421.46,8497.18,5523650000,8497.18
+2009-06-16,8612.44,8688.69,8483.58,8504.67,4951200000,8504.67
+2009-06-15,8798.50,8798.50,8540.87,8612.13,4697880000,8612.13
+2009-06-12,8770.01,8850.95,8671.61,8799.26,4528120000,8799.26
+2009-06-11,8736.23,8911.11,8697.99,8770.92,5500840000,8770.92
+2009-06-10,8763.66,8871.36,8625.21,8739.02,5379420000,8739.02
+2009-06-09,8764.83,8854.80,8688.99,8763.06,4439950000,8763.06
+2009-06-08,8759.35,8832.13,8593.84,8764.49,4483430000,8764.49
+2009-06-05,8751.75,8900.48,8673.41,8763.13,5277910000,8763.13
+2009-06-04,8665.72,8802.59,8609.17,8750.24,5352890000,8750.24
+2009-06-03,8740.07,8750.83,8556.90,8675.24,5323770000,8675.24
+2009-06-02,8721.60,8832.16,8635.25,8740.87,5987340000,8740.87
+2009-06-01,8501.53,8797.58,8501.53,8721.44,6370440000,8721.44
+2009-05-29,8404.04,8541.27,8323.91,8500.33,6050420000,8500.33
+2009-05-28,8300.50,8463.70,8221.65,8403.80,5738980000,8403.80
+2009-05-27,8473.65,8534.66,8280.82,8300.02,5698800000,8300.02
+2009-05-26,8275.33,8523.59,8194.33,8473.49,5667050000,8473.49
+2009-05-22,8292.21,8415.75,8218.86,8277.32,5155320000,8277.32
+2009-05-21,8416.07,8416.07,8185.25,8292.13,6019840000,8292.13
+2009-05-20,8471.82,8645.85,8376.40,8422.04,8205060000,8422.04
+2009-05-19,8502.48,8594.16,8402.61,8474.85,6616270000,8474.85
+2009-05-18,8270.15,8534.66,8270.15,8504.08,5702150000,8504.08
+2009-05-15,8326.22,8422.28,8206.67,8268.64,5439720000,8268.64
+2009-05-14,8285.92,8427.93,8218.94,8331.32,6134870000,8331.32
+2009-05-13,8461.80,8461.80,8208.74,8284.89,7091820000,8284.89
+2009-05-12,8419.17,8574.88,8306.47,8469.11,6871750400,8469.11
+2009-05-11,8569.23,8569.23,8347.41,8418.77,6150600000,8418.77
+2009-05-08,8410.73,8657.96,8388.11,8574.65,8163280000,8574.65
+2009-05-07,8513.56,8651.51,8296.04,8409.85,9120100000,8409.85
+2009-05-06,8403.48,8608.26,8350.12,8512.28,8555040000,8512.28
+2009-05-05,8425.55,8520.80,8321.37,8410.65,6882860000,8410.65
+2009-05-04,8213.60,8488.87,8213.60,8426.74,7038840000,8426.74
+2009-05-01,8167.41,8278.28,8047.54,8212.41,5312170000,8212.41
+2009-04-30,8188.51,8383.81,8083.62,8168.12,6862540000,8168.12
+2009-04-29,8018.31,8278.12,8018.31,8185.73,6101620000,8185.73
+2009-04-28,8023.56,8136.74,7898.75,8016.95,6328000000,8016.95
+2009-04-27,8073.82,8152.27,7920.42,8025.00,5613460000,8025.00
+2009-04-24,7957.45,8182.30,7905.60,8076.29,7114440000,8076.29
+2009-04-23,7886.81,8015.36,7762.80,7957.06,6563100000,7957.06
+2009-04-22,7964.78,8111.02,7802.46,7886.57,7327860000,7886.57
+2009-04-21,7841.73,8027.54,7699.79,7969.56,7436489600,7969.56
+2009-04-20,8128.94,8128.94,7801.58,7841.73,6973960000,7841.73
+2009-04-17,8125.43,8251.20,8024.92,8131.33,7352009600,8131.33
+2009-04-16,8029.14,8201.81,7933.08,8125.43,6598670000,8125.43
+2009-04-15,7914.92,8069.92,7808.19,8029.62,6241100000,8029.62
+2009-04-14,8057.41,8076.05,7840.53,7920.18,7569840000,7920.18
+2009-04-13,8082.02,8146.86,7888.96,8057.81,6434890000,8057.81
+2009-04-09,7839.89,8150.44,7839.89,8083.38,7600710400,8083.38
+2009-04-08,7788.68,7925.36,7715.09,7837.11,5938460000,7837.11
+2009-04-07,7968.92,7968.92,7733.56,7789.56,5155580000,7789.56
+2009-04-06,8016.16,8037.42,7830.66,7975.85,6210000000,7975.85
+2009-04-03,7980.63,8090.71,7850.33,8017.59,5855640000,8017.59
+2009-04-02,7763.99,8129.33,7763.99,7978.08,7542809600,7978.08
+2009-04-01,7606.13,7804.77,7450.74,7761.60,6034140000,7761.60
+2009-03-31,7523.77,7744.24,7502.98,7608.92,6089100000,7608.92
+2009-03-30,7773.31,7773.31,7406.85,7522.02,5912660000,7522.02
+2009-03-27,7922.57,7922.57,7695.97,7776.18,5600210000,7776.18
+2009-03-26,7752.36,7969.00,7709.19,7924.56,6992960000,7924.56
+2009-03-25,7659.81,7897.48,7539.54,7749.81,7687180000,7749.81
+2009-03-24,7773.47,7837.11,7585.98,7660.21,6767980000,7660.21
+2009-03-23,7279.25,7789.24,7279.25,7775.86,7715769600,7775.86
+2009-03-20,7402.31,7524.81,7215.77,7278.38,7643720000,7278.38
+2009-03-19,7489.68,7624.45,7325.13,7400.80,9033870400,7400.80
+2009-03-18,7395.70,7592.03,7218.24,7486.58,9098449600,7486.58
+2009-03-17,7218.00,7407.41,7129.60,7395.70,6156800000,7395.70
+2009-03-16,7225.33,7428.75,7171.41,7216.97,7883540000,7216.97
+2009-03-13,7219.20,7241.98,7106.34,7223.98,6787089600,7223.98
+2009-03-12,6932.39,7198.25,6840.79,7170.06,7326630400,7170.06
+2009-03-11,6923.13,7078.22,6804.55,6930.40,7287809600,6930.40
+2009-03-10,6547.01,6951.50,6547.01,6926.49,8618329600,6926.49
+2009-03-09,6625.74,6758.44,6440.08,6547.05,7277320000,6547.05
+2009-03-06,6595.16,6776.44,6443.27,6626.94,7331830400,6626.94
+2009-03-05,6874.01,6874.01,6531.28,6594.44,7507249600,6594.44
+2009-03-04,6726.50,7012.19,6715.11,6875.84,7673620000,6875.84
+2009-03-03,6764.81,6922.59,6661.74,6726.02,7583230400,6726.02
+2009-03-02,7056.48,7056.48,6736.69,6763.29,7868289600,6763.29
+2009-02-27,7180.97,7244.61,6952.06,7062.93,8926480000,7062.93
+2009-02-26,7269.06,7451.13,7135.25,7182.08,7599969600,7182.08
+2009-02-25,7349.58,7442.13,7123.94,7270.89,7483640000,7270.89
+2009-02-24,7115.34,7396.34,7077.35,7350.94,7234489600,7350.94
+2009-02-23,7365.99,7477.10,7092.64,7114.78,6509300000,7114.78
+2009-02-20,7461.49,7500.44,7226.29,7365.67,8210590400,7365.67
+2009-02-19,7555.23,7679.01,7420.63,7465.95,5746940000,7465.95
+2009-02-18,7546.35,7661.56,7451.37,7555.63,5740710000,7555.63
+2009-02-17,7845.63,7845.63,7502.59,7552.60,5907820000,7552.60
+2009-02-13,7933.00,8005.96,7811.38,7850.41,5296650000,7850.41
+2009-02-12,7931.97,7956.02,7662.04,7932.76,6476460000,7932.76
+2009-02-11,7887.05,8042.36,7820.14,7939.53,5926460000,7939.53
+2009-02-10,8269.36,8293.17,7835.83,7888.88,6770169600,7888.88
+2009-02-09,8281.38,8376.56,8137.70,8270.87,5574370000,8270.87
+2009-02-06,8056.38,8360.07,8044.03,8280.59,6484100000,8280.59
+2009-02-05,7954.83,8138.65,7811.70,8063.07,6624030000,8063.07
+2009-02-04,8070.32,8197.04,7899.79,7956.66,6420450000,7956.66
+2009-02-03,7936.99,8157.13,7855.19,8078.36,5886310000,8078.36
+2009-02-02,8000.62,8053.43,7796.17,7936.83,5673270000,7936.83
+2009-01-30,8149.01,8243.95,7924.88,8000.86,5350580000,8000.86
+2009-01-29,8373.06,8373.06,8092.14,8149.01,5067060000,8149.01
+2009-01-28,8175.93,8446.33,8175.93,8375.45,6199180000,8375.45
+2009-01-27,8117.39,8264.10,8042.60,8174.73,5353260000,8174.73
+2009-01-26,8078.04,8278.12,7971.15,8116.03,6039940000,8116.03
+2009-01-23,8108.79,8187.88,7856.86,8077.56,5832160000,8077.56
+2009-01-22,8224.43,8239.33,7925.75,8122.80,5843830000,8122.80
+2009-01-21,7949.17,8286.40,7890.63,8228.10,6467830000,8228.10
+2009-01-20,8279.63,8309.02,7920.66,7949.09,6375230000,7949.09
+2009-01-16,8215.67,8424.59,8086.01,8281.22,6786040000,8281.22
+2009-01-15,8196.24,8326.06,7949.65,8212.49,7807350400,8212.49
+2009-01-14,8446.01,8446.01,8097.95,8200.14,5407880000,8200.14
+2009-01-13,8474.61,8584.68,8325.59,8448.56,5567460000,8448.56
+2009-01-12,8599.26,8653.97,8391.85,8473.97,4725050000,8473.97
+2009-01-09,8738.80,8800.45,8541.75,8599.18,4716500000,8599.18
+2009-01-08,8769.94,8807.14,8593.52,8742.46,4991550000,8742.46
+2009-01-07,8996.94,8996.94,8690.45,8769.70,4704940000,8769.70
+2009-01-06,8954.57,9175.19,8868.07,9015.10,5392620000,9015.10
+2009-01-05,9027.13,9093.47,8841.70,8952.89,5413910000,8952.89
+2009-01-02,8772.25,9080.57,8725.10,9034.69,4048270000,9034.69
+2008-12-31,8666.48,8862.65,8634.06,8776.39,4172940000,8776.39
+2008-12-30,8487.51,8700.89,8463.70,8668.39,3627800000,8668.39
+2008-12-29,8515.87,8575.60,8349.24,8483.93,3323430000,8483.93
+2008-12-26,8468.71,8581.58,8434.94,8515.55,1880050000,8515.55
+2008-12-24,8428.17,8498.26,8417.02,8468.48,1546550000,8468.48
+2008-12-23,8518.65,8647.60,8376.80,8419.49,4051970000,8419.49
+2008-12-22,8573.37,8672.06,8351.79,8519.69,4869850000,8519.69
+2008-12-19,8606.50,8823.78,8499.06,8579.11,6705310000,8579.11
+2008-12-18,8823.94,8946.36,8516.02,8604.99,5675000000,8604.99
+2008-12-17,8921.91,9001.96,8701.13,8824.34,5907380000,8824.34
+2008-12-16,8565.65,8985.63,8534.03,8924.14,6009780000,8924.14
+2008-12-15,8628.81,8738.40,8431.04,8564.53,4982390000,8564.53
+2008-12-12,8563.10,8705.43,8272.22,8629.68,5959590000,8629.68
+2008-12-11,8750.13,8861.86,8480.18,8565.09,5513840000,8565.09
+2008-12-10,8693.00,8942.46,8589.86,8761.42,5942130000,8761.42
+2008-12-09,8934.10,8978.14,8591.69,8691.33,5693110000,8691.33
+2008-12-08,8637.65,9151.61,8637.65,8934.18,6553600000,8934.18
+2008-12-05,8376.08,8722.47,8084.25,8635.42,6165370000,8635.42
+2008-12-04,8587.07,8705.98,8222.84,8376.24,5860390000,8376.24
+2008-12-03,8409.14,8654.77,8170.19,8591.69,6221880000,8591.69
+2008-12-02,8153.75,8490.62,8072.47,8419.09,6170100000,8419.09
+2008-12-01,8826.89,8826.89,8123.04,8149.09,6052010000,8149.09
+2008-11-28,8690.24,8840.33,8687.05,8829.04,2740860000,8829.04
+2008-11-26,8464.49,8760.46,8250.80,8726.61,5793260000,8726.61
+2008-11-25,8445.14,8682.09,8244.43,8479.47,6952700000,8479.47
+2008-11-24,8048.09,8624.27,8023.32,8443.39,7879440000,8443.39
+2008-11-21,7552.37,8121.45,7392.27,8046.42,9495900000,8046.42
+2008-11-20,7995.53,8224.35,7464.51,7552.29,9093740000,7552.29
+2008-11-19,8420.69,8534.34,7967.33,7997.28,6548600000,7997.28
+2008-11-18,8273.34,8540.08,8075.81,8424.75,6679470000,8424.75
+2008-11-17,8494.84,8596.31,8197.12,8273.58,4927490000,8273.58
+2008-11-14,8822.19,8980.93,8421.08,8497.31,5881030000,8497.31
+2008-11-13,8281.14,8898.41,7947.74,8835.25,7849120000,8835.25
+2008-11-12,8684.52,8684.52,8235.66,8282.66,5764180000,8282.66
+2008-11-11,8864.32,8892.20,8499.62,8693.96,4998340000,8693.96
+2008-11-10,8946.60,9212.94,8735.61,8870.54,4572000000,8870.54
+2008-11-07,8696.03,9032.54,8661.22,8943.81,4931640000,8943.81
+2008-11-06,9134.01,9216.37,8607.14,8695.79,6102230000,8695.79
+2008-11-05,9616.60,9628.15,9086.06,9139.27,5426640000,9139.27
+2008-11-04,9323.89,9711.46,9323.89,9625.28,5531290000,9625.28
+2008-11-03,9326.04,9488.92,9175.03,9319.83,4492280000,9319.83
+2008-10-31,9179.09,9498.48,9014.78,9325.01,6394350000,9325.01
+2008-10-30,9004.66,9380.36,8916.81,9180.69,6175830000,9180.69
+2008-10-29,9062.33,9405.05,8800.61,8990.96,7077800000,8990.96
+2008-10-28,8178.72,9112.51,8153.79,9065.12,7096950400,9065.12
+2008-10-27,8375.92,8639.64,8085.37,8175.77,5558050000,8175.77
+2008-10-24,8683.21,8683.21,8088.63,8378.95,6550050000,8378.95
+2008-10-23,8519.77,8864.48,8200.06,8691.25,7189900000,8691.25
+2008-10-22,9027.84,9027.84,8324.07,8519.21,6147980000,8519.21
+2008-10-21,9179.11,9293.07,9017.30,9045.21,5121830000,9045.21
+2008-10-20,8852.30,9305.89,8799.49,9265.43,5175640000,9265.43
+2008-10-17,8975.35,9304.38,8640.83,8852.22,6581780000,8852.22
+2008-10-16,8577.04,9073.64,8176.17,8979.26,7984500000,8979.26
+2008-10-15,9301.91,9301.91,8516.50,8577.91,6542330000,8577.91
+2008-10-14,9388.97,9924.28,9050.06,9310.99,8161990400,9310.99
+2008-10-13,8462.42,9501.91,8462.42,9387.61,7263369600,9387.61
+2008-10-10,8568.67,8989.13,7773.71,8451.19,11456230400,8451.19
+2008-10-09,9261.69,9522.77,8523.27,8579.19,8285670400,8579.19
+2008-10-08,9437.23,9778.04,9042.97,9258.10,8716329600,9258.10
+2008-10-07,9955.42,10205.04,9391.67,9447.11,7069209600,9447.11
+2008-10-06,10322.52,10322.52,9503.10,9955.50,7956020000,9955.50
+2008-10-03,10483.96,10844.69,10261.75,10325.38,6716120000,10325.38
+2008-10-02,10825.54,10843.10,10368.08,10482.85,6285640000,10482.85
+2008-10-01,10847.40,11022.06,10495.99,10831.07,5782130000,10831.07
+2008-09-30,10371.58,10922.03,10371.58,10850.66,6065000000,10850.66
+2008-09-29,11139.62,11139.62,10266.76,10365.45,7305060000,10365.45
+2008-09-26,11019.04,11218.48,10781.37,11143.13,5383610000,11143.13
+2008-09-25,10827.17,11206.05,10799.77,11022.06,5877640000,11022.06
+2008-09-24,10850.02,11041.02,10696.38,10825.17,4820360000,10825.17
+2008-09-23,11015.69,11214.65,10763.77,10854.17,5185730000,10854.17
+2008-09-22,11394.42,11450.81,10956.43,11015.69,5368130000,11015.69
+2008-09-19,11027.51,11415.48,11027.51,11388.44,9387169600,11388.44
+2008-09-18,10609.01,11149.07,10403.75,11019.69,10082689600,11019.69
+2008-09-17,11056.58,11068.87,10521.81,10609.66,9431870400,10609.66
+2008-09-16,10905.62,11193.12,10604.70,11059.02,9459830400,11059.02
+2008-09-15,11416.37,11416.37,10849.85,10917.51,8279510400,10917.51
+2008-09-12,11429.32,11532.72,11191.08,11421.99,6273260000,11421.99
+2008-09-11,11264.44,11461.15,11018.72,11433.71,6869249600,11433.71
+2008-09-10,11233.91,11453.50,11135.64,11268.92,6543440000,11268.92
+2008-09-09,11514.73,11623.50,11209.81,11230.73,7380630400,11230.73
+2008-09-08,11224.87,11656.64,11224.87,11510.74,7351340000,11510.74
+2008-09-05,11185.63,11301.73,10998.77,11220.96,5017080000,11220.96
+2008-09-04,11532.48,11532.48,11130.26,11188.23,5212500000,11188.23
+2008-09-03,11506.01,11629.69,11328.84,11532.88,5056980000,11532.88
+2008-09-02,11545.63,11831.29,11444.79,11516.92,4783560000,11516.92
+2008-08-29,11713.23,11730.49,11508.78,11543.55,3288120000,11543.55
+2008-08-28,11499.87,11756.46,11493.72,11715.18,3854280000,11715.18
+2008-08-27,11412.46,11575.14,11349.69,11502.51,3499610000,11502.51
+2008-08-26,11383.56,11483.62,11284.47,11412.87,3587570000,11412.87
+2008-08-25,11626.19,11626.19,11336.82,11386.25,3420600000,11386.25
+2008-08-22,11426.79,11684.00,11426.79,11628.06,3741070000,11628.06
+2008-08-21,11415.23,11501.29,11263.63,11430.21,4032590000,11430.21
+2008-08-20,11345.94,11511.06,11240.18,11417.43,4555030000,11417.43
+2008-08-19,11478.09,11501.45,11260.53,11348.55,4159760000,11348.55
+2008-08-18,11659.65,11744.49,11410.18,11479.39,3829290000,11479.39
+2008-08-15,11611.21,11776.41,11540.05,11659.90,4041820000,11659.90
+2008-08-14,11532.07,11744.33,11399.84,11615.93,4064000000,11615.93
+2008-08-13,11632.81,11689.05,11377.37,11532.96,4787600000,11532.96
+2008-08-12,11781.70,11830.39,11541.43,11642.47,4711290000,11642.47
+2008-08-11,11729.67,11933.55,11580.19,11782.35,5067310000,11782.35
+2008-08-08,11432.09,11808.49,11344.23,11734.32,4966810000,11734.32
+2008-08-07,11655.42,11680.50,11355.63,11431.43,5319380000,11431.43
+2008-08-06,11603.64,11745.71,11454.64,11656.07,4873420000,11656.07
+2008-08-05,11286.02,11652.24,11286.02,11615.77,1219310000,11615.77
+2008-08-04,11326.32,11449.67,11144.59,11284.15,4562280000,11284.15
+2008-08-01,11379.89,11512.61,11205.41,11326.32,4684870000,11326.32
+2008-07-31,11577.99,11631.16,11317.69,11378.02,5346050000,11378.02
+2008-07-30,11397.56,11681.47,11328.68,11583.69,5631330000,11583.69
+2008-07-29,11133.44,11444.05,11086.13,11397.56,5414240000,11397.56
+2008-07-28,11369.47,11439.25,11094.76,11131.08,4282960000,11131.08
+2008-07-25,11341.14,11540.78,11252.47,11370.69,4672560000,11370.69
+2008-07-24,11630.34,11714.21,11288.79,11349.28,6127980000,11349.28
+2008-07-23,11603.39,11820.21,11410.02,11632.38,6705830000,11632.38
+2008-07-22,11457.90,11692.79,11273.32,11602.50,6180230000,11602.50
+2008-07-21,11495.02,11663.40,11339.02,11467.34,4630640000,11467.34
+2008-07-18,11436.56,11599.57,11290.50,11496.57,5653280000,11496.57
+2008-07-17,11238.39,11538.50,11118.46,11446.66,7365209600,11446.66
+2008-07-16,10961.89,11308.41,10831.61,11239.28,6738630400,11239.28
+2008-07-15,11050.80,11201.67,10731.96,10962.54,7363640000,10962.54
+2008-07-14,11103.64,11299.70,10972.63,11055.19,5434860000,11055.19
+2008-07-11,11226.17,11292.04,10908.64,11100.54,6742200000,11100.54
+2008-07-10,11148.01,11351.24,11006.01,11229.02,5840430000,11229.02
+2008-07-09,11381.93,11505.12,11115.61,11147.44,5181000000,11147.44
+2008-07-08,11225.03,11459.52,11101.19,11384.21,6034110000,11384.21
+2008-07-07,11289.19,11477.52,11094.44,11231.96,5265420000,11231.96
+2008-07-03,11297.33,11336.49,11158.02,11288.53,3247590000,11288.53
+2008-07-02,11382.34,11510.41,11180.58,11215.51,5276090000,11215.51
+2008-07-01,11344.64,11465.79,11106.65,11382.26,5846290000,11382.26
+2008-06-30,11345.70,11504.55,11226.34,11350.01,5032330000,11350.01
+2008-06-27,11452.85,11556.33,11248.48,11346.51,6208260000,11346.51
+2008-06-26,11808.57,11808.57,11431.92,11453.42,5231280000,11453.42
+2008-06-25,11805.31,12008.70,11683.75,11811.83,4825640000,11811.83
+2008-06-24,11842.36,11962.37,11668.53,11807.43,4705050000,11807.43
+2008-06-23,11843.83,11986.96,11731.06,11842.36,4186370000,11842.36
+2008-06-20,12062.19,12078.23,11785.04,11842.69,5324900000,11842.69
+2008-06-19,12022.54,12188.31,11881.03,12063.09,4811670000,12063.09
+2008-06-18,12158.68,12212.33,11947.07,12029.06,4573570000,12029.06
+2008-06-17,12269.65,12378.67,12114.14,12160.30,3801960000,12160.30
+2008-06-16,12306.86,12381.44,12139.79,12269.08,3706940000,12269.08
+2008-06-13,12144.59,12376.72,12096.23,12307.35,4080420000,12307.35
+2008-06-12,12089.63,12337.72,12041.43,12141.58,4734240000,12141.58
+2008-06-11,12286.34,12317.20,12029.46,12083.77,4779980000,12083.77
+2008-06-10,12277.71,12425.98,12116.58,12289.76,4635070000,12289.76
+2008-06-09,12210.13,12406.36,12102.50,12280.32,4404570000,12280.32
+2008-06-06,12602.74,12602.74,12180.50,12209.81,4771660000,12209.81
+2008-06-05,12388.81,12652.81,12358.07,12604.45,4350790000,12604.45
+2008-06-04,12391.86,12540.37,12283.74,12390.48,4338640000,12390.48
+2008-06-03,12503.20,12620.98,12317.61,12402.85,4396380000,12402.85
+2008-06-02,12637.67,12645.40,12385.76,12503.82,3714320000,12503.82
+2008-05-30,12647.36,12750.84,12555.60,12638.32,3845630000,12638.32
+2008-05-29,12593.87,12760.21,12493.47,12646.22,3894440000,12646.22
+2008-05-28,12542.90,12693.77,12437.38,12594.03,3927240000,12594.03
+2008-05-27,12479.63,12626.84,12397.56,12548.35,3588860000,12548.35
+2008-05-23,12620.90,12637.43,12420.20,12479.63,3516380000,12479.63
+2008-05-22,12597.69,12743.68,12515.78,12625.62,3955960000,12625.62
+2008-05-21,12824.94,12926.71,12550.39,12601.19,4517990000,12601.19
+2008-05-20,13026.04,13026.04,12742.29,12828.68,3854320000,12828.68
+2008-05-19,12985.41,13170.97,12899.19,13028.16,3683970000,13028.16
+2008-05-16,12992.74,13069.52,12860.60,12986.80,3842590000,12986.80
+2008-05-15,12891.29,13028.16,12798.39,12992.66,3836480000,12992.66
+2008-05-14,12825.12,13037.44,12806.21,12898.38,3979370000,12898.38
+2008-05-13,12872.08,12957.65,12716.16,12832.18,4018590000,12832.18
+2008-05-12,12768.38,12903.33,12746.36,12876.05,3370630000,12876.05
+2008-05-09,12860.68,12871.75,12648.09,12745.88,3518620000,12745.88
+2008-05-08,12814.84,12965.95,12727.56,12866.78,3827550000,12866.78
+2008-05-07,13010.82,13097.77,12756.14,12814.35,4075860000,12814.35
+2008-05-06,12968.89,13071.07,12817.53,13020.83,3924100000,13020.83
+2008-05-05,13056.57,13105.75,12896.50,12969.54,3410090000,12969.54
+2008-05-02,13012.53,13191.49,12931.35,13058.20,3953030000,13058.20
+2008-05-01,12818.34,13079.94,12721.94,13010.00,4448780000,13010.00
+2008-04-30,12831.45,13052.91,12746.45,12820.13,4508890000,12820.13
+2008-04-29,12870.37,12970.27,12737.82,12831.94,3815320000,12831.94
+2008-04-28,12890.76,13015.62,12791.55,12871.75,3607000000,12871.75
+2008-04-25,12848.38,12987.29,12703.70,12891.86,3891150000,12891.86
+2008-04-24,12764.68,12979.88,12651.51,12848.95,4461660000,12848.95
+2008-04-23,12721.45,12883.80,12627.00,12763.22,4103610000,12763.22
+2008-04-22,12825.02,12870.86,12604.53,12720.23,3821900000,12720.23
+2008-04-21,12850.91,12902.69,12666.08,12825.02,3420570000,12825.02
+2008-04-18,12626.76,12965.47,12626.76,12849.36,4222380000,12849.36
+2008-04-17,12617.40,12725.93,12472.71,12620.49,3713880000,12620.49
+2008-04-16,12371.51,12670.56,12371.51,12619.27,4260370000,12619.27
+2008-04-15,12303.60,12459.36,12223.97,12362.47,3581230000,12362.47
+2008-04-14,12324.77,12430.86,12208.42,12302.06,3565020000,12302.06
+2008-04-11,12579.78,12579.78,12280.89,12325.42,3723790000,12325.42
+2008-04-10,12526.78,12705.90,12447.96,12581.98,3686150000,12581.98
+2008-04-09,12574.65,12686.93,12416.53,12527.26,3556670000,12527.26
+2008-04-08,12602.66,12664.38,12440.55,12576.44,3602500000,12576.44
+2008-04-07,12612.59,12786.83,12550.22,12612.43,3747780000,12612.43
+2008-04-04,12626.35,12738.30,12489.40,12609.42,3703100000,12609.42
+2008-04-03,12604.69,12734.97,12455.04,12626.03,3920100000,12626.03
+2008-04-02,12651.67,12790.28,12488.22,12608.92,4320440000,12608.92
+2008-04-01,12266.64,12693.93,12266.64,12654.36,4745120000,12654.36
+2008-03-31,12215.92,12384.84,12095.18,12262.89,4188990000,12262.89
+2008-03-28,12303.92,12441.67,12164.22,12216.40,3686980000,12216.40
+2008-03-27,12421.88,12528.13,12264.76,12302.46,4037930000,12302.46
+2008-03-26,12531.79,12531.79,12309.62,12422.86,4055670000,12422.86
+2008-03-25,12547.34,12639.82,12397.62,12532.60,4145120000,12532.60
+2008-03-24,12361.97,12687.61,12346.17,12548.64,4499000000,12548.64
+2008-03-20,12102.43,12434.34,12024.68,12361.32,6145220000,12361.32
+2008-03-19,12391.52,12525.19,12077.27,12099.66,5358550000,12099.66
+2008-03-18,11975.92,12411.63,11975.92,12392.66,5335630000,12392.66
+2008-03-17,11946.45,12119.69,11650.44,11972.25,5683010000,11972.25
+2008-03-14,12146.39,12249.86,11781.43,11951.09,5153780000,11951.09
+2008-03-13,12096.49,12242.29,11832.88,12145.74,5073360000,12145.74
+2008-03-12,12148.61,12360.58,12037.79,12110.24,4414280000,12110.24
+2008-03-11,11741.33,12205.98,11741.33,12156.81,5109080000,12156.81
+2008-03-10,11893.04,11993.75,11691.47,11740.15,4261240000,11740.15
+2008-03-07,12039.09,12131.33,11778.66,11893.69,4565410000,11893.69
+2008-03-06,12254.59,12267.86,12010.03,12040.39,4323460000,12040.39
+2008-03-05,12204.93,12392.74,12105.36,12254.99,4277710000,12254.99
+2008-03-04,12259.14,12291.22,11991.06,12213.80,4757180000,12213.80
+2008-03-03,12264.36,12344.71,12101.29,12258.90,4117570000,12258.90
+2008-02-29,12579.58,12579.58,12210.30,12266.39,4426730000,12266.39
+2008-02-28,12689.28,12713.99,12463.32,12582.18,3938580000,12582.18
+2008-02-27,12683.54,12815.59,12527.64,12694.28,3904700000,12694.28
+2008-02-26,12569.48,12771.14,12449.08,12684.92,4096060000,12684.92
+2008-02-25,12380.77,12612.47,12292.03,12570.22,3866350000,12570.22
+2008-02-22,12281.09,12429.05,12116.92,12381.02,3572660000,12381.02
+2008-02-21,12426.85,12545.79,12225.36,12284.30,3696660000,12284.30
+2008-02-20,12333.31,12489.29,12159.42,12427.26,3870520000,12427.26
+2008-02-19,12349.59,12571.11,12276.81,12337.22,3613550000,12337.22
+2008-02-15,12376.66,12441.20,12216.68,12348.21,3583300000,12348.21
+2008-02-14,12551.51,12611.26,12332.03,12376.98,3644760000,12376.98
+2008-02-13,12368.12,12627.76,12354.22,12552.24,3856420000,12552.24
+2008-02-12,12241.56,12524.12,12207.90,12373.41,4044640000,12373.41
+2008-02-11,12181.89,12332.76,12006.79,12240.01,3593140000,12240.01
+2008-02-08,12248.47,12330.97,12058.01,12182.13,3768490000,12182.13
+2008-02-07,12196.20,12366.99,12045.00,12247.00,4589160000,12247.00
+2008-02-06,12257.25,12436.33,12142.14,12200.10,4008120000,12200.10
+2008-02-05,12631.85,12631.85,12234.97,12265.13,4315740000,12265.13
+2008-02-04,12743.11,12810.34,12557.61,12635.16,3495780000,12635.16
+2008-02-01,12638.17,12841.88,12510.05,12743.19,4650770000,12743.19
+2008-01-31,12438.28,12734.74,12197.09,12650.36,4970290000,12650.36
+2008-01-30,12480.14,12715.96,12311.55,12442.83,4742760000,12442.83
+2008-01-29,12385.19,12604.92,12262.29,12480.30,4232960000,12480.30
+2008-01-28,12205.71,12423.81,12061.42,12383.89,4100930000,12383.89
+2008-01-25,12391.70,12590.69,12103.61,12207.17,4882250000,12207.17
+2008-01-24,12272.69,12522.82,12114.83,12378.61,5735300000,12378.61
+2008-01-23,11969.08,12339.10,11530.12,12270.17,3241680000,12270.17
+2008-01-22,12092.72,12167.42,11508.74,11971.19,6544690000,11971.19
+2008-01-18,12159.94,12441.85,11953.71,12099.30,6004840000,12099.30
+2008-01-17,12467.05,12597.85,12089.38,12159.21,5303130000,12159.21
+2008-01-16,12476.81,12699.05,12294.48,12466.16,5440620000,12466.16
+2008-01-15,12777.50,12777.50,12425.92,12501.11,4601640000,12501.11
+2008-01-14,12613.78,12866.10,12596.95,12778.15,3682090000,12778.15
+2008-01-11,12850.74,12863.34,12495.91,12606.30,4495840000,12606.30
+2008-01-10,12733.11,12931.29,12632.15,12853.09,5170490000,12853.09
+2008-01-09,12590.21,12814.97,12431.53,12735.31,5351030000,12735.31
+2008-01-08,12820.90,12998.11,12511.03,12589.07,4705390000,12589.07
+2008-01-07,12801.15,12984.95,12640.44,12827.49,4221260000,12827.49
+2008-01-04,13046.56,13049.65,12740.51,12800.18,4166000000,12800.18
+2008-01-03,13044.12,13197.43,12968.44,13056.72,3429500000,13056.72
+2008-01-02,13261.82,13338.23,12969.42,13043.96,3452650000,13043.96
+2007-12-31,13364.16,13423.91,13197.35,13264.82,2440880000,13264.82
+2007-12-28,13361.23,13494.30,13272.14,13365.87,2420510000,13365.87
+2007-12-27,13549.17,13551.53,13325.71,13359.61,2365770000,13359.61
+2007-12-26,13547.95,13614.53,13440.16,13551.69,2010500000,13551.69
+2007-12-24,13487.12,13562.72,13451.35,13550.04,2200000,13550.04
+2007-12-21,13241.66,13518.20,13241.66,13450.65,4508590000,13450.65
+2007-12-20,13206.46,13354.00,13112.98,13245.64,3526890000,13245.64
+2007-12-19,13231.98,13368.79,13097.77,13207.27,3401300000,13207.27
+2007-12-18,13168.66,13346.84,13059.32,13232.47,3723690000,13232.47
+2007-12-17,13339.20,13378.38,13111.92,13167.20,3569030000,13167.20
+2007-12-14,13515.11,13557.54,13284.66,13339.85,3401050000,13339.85
+2007-12-13,13473.98,13586.73,13281.00,13517.96,3635170000,13517.96
+2007-12-12,13434.80,13778.98,13299.61,13473.90,4482120000,13473.90
+2007-12-11,13726.87,13850.92,13374.89,13432.77,4080180000,13432.77
+2007-12-10,13623.55,13807.02,13582.50,13727.03,2911760000,13727.03
+2007-12-07,13618.27,13744.02,13514.22,13625.58,3177710000,13625.58
+2007-12-06,13445.85,13652.49,13362.37,13619.89,3568570000,13619.89
+2007-12-05,13244.01,13513.00,13244.01,13444.96,3663660000,13444.96
+2007-12-04,13311.24,13395.21,13139.56,13248.73,3343620000,13248.73
+2007-12-03,13368.22,13490.24,13207.60,13314.57,3323250000,13314.57
+2007-11-30,13314.25,13570.31,13225.32,13371.72,4422200000,13371.72
+2007-11-29,13287.91,13399.03,13150.21,13311.73,3524730000,13311.73
+2007-11-28,12958.04,13353.51,12958.04,13289.45,4508020000,13289.45
+2007-11-27,12744.78,13040.38,12711.98,12958.44,4320720000,12958.44
+2007-11-26,12979.99,13104.44,12707.26,12743.44,3706470000,12743.44
+2007-11-23,12889.45,12981.56,12796.29,12980.88,1612720000,12980.88
+2007-11-21,13006.65,13055.59,12725.39,12799.04,4076230000,12799.04
+2007-11-20,12955.92,13179.23,12800.74,13010.14,4875150000,13010.14
+2007-11-19,13176.30,13195.48,12871.14,12958.44,4119650000,12958.44
+2007-11-16,13109.48,13293.44,12987.22,13176.79,4168870000,13176.79
+2007-11-15,13230.68,13333.59,13007.95,13110.05,3941010000,13110.05
+2007-11-14,13305.47,13465.20,13159.88,13231.01,4031470000,13231.01
+2007-11-13,12975.11,13357.57,12975.11,13307.09,4141310000,13307.09
+2007-11-12,13039.16,13238.73,12910.40,12987.55,4192520000,12987.55
+2007-11-09,13261.17,13321.81,12920.65,13042.74,4587050000,13042.74
+2007-11-08,13299.70,13463.66,13001.93,13266.29,5439720000,13266.29
+2007-11-07,13646.72,13646.72,13269.46,13300.02,4353160000,13300.02
+2007-11-06,13542.34,13716.55,13460.73,13660.94,3879160000,13660.94
+2007-11-05,13592.58,13666.15,13393.67,13543.40,3819330000,13543.40
+2007-11-02,13569.90,13708.58,13381.64,13595.10,4285990000,13595.10
+2007-11-01,13924.16,13924.16,13522.75,13567.87,4241470000,13567.87
+2007-10-31,13792.06,13990.65,13711.59,13930.01,3953070000,13930.01
+2007-10-30,13869.04,13930.91,13719.80,13792.47,3212520000,13792.47
+2007-10-29,13807.35,13966.18,13748.33,13870.26,3124480000,13870.26
+2007-10-26,13675.66,13885.95,13622.01,13806.70,3612120000,13806.70
+2007-10-25,13677.85,13819.78,13471.87,13671.92,4183960000,13671.92
+2007-10-24,13675.58,13751.50,13423.74,13675.25,4003300000,13675.25
+2007-10-23,13568.93,13754.91,13494.95,13676.23,3309120000,13676.23
+2007-10-22,13521.62,13636.80,13337.90,13566.97,3471830000,13566.97
+2007-10-19,13888.47,13888.47,13478.94,13522.02,4160970000,13522.02
+2007-10-18,13887.90,13984.39,13746.22,13888.96,3203210000,13888.96
+2007-10-17,13920.66,14075.84,13738.66,13892.54,3638070000,13892.54
+2007-10-16,13986.34,14061.37,13810.68,13912.94,3234560000,13912.94
+2007-10-15,14092.43,14157.38,13877.82,13984.80,3139290000,13984.80
+2007-10-12,14016.34,14168.51,13949.85,14093.08,2788690000,14093.08
+2007-10-11,14079.10,14279.96,13917.82,14015.12,3911260000,14015.12
+2007-10-10,14165.02,14225.66,13963.26,14078.69,3044760000,14078.69
+2007-10-09,14043.73,14198.83,13980.90,14164.53,2932040000,14164.53
+2007-10-08,14065.36,14134.05,13747.41,14043.73,2040650000,14043.73
+2007-10-05,13969.07,14169.49,13965.05,14066.01,2919030000,14066.01
+2007-10-04,13967.89,14074.54,13894.98,13974.31,2690430000,13974.31
+2007-10-03,14038.86,14090.48,13883.43,13968.05,3065320000,13968.05
+2007-10-02,14087.14,14166.16,13951.72,14047.31,3101910000,14047.31
+2007-10-01,13895.71,14147.30,13869.86,14087.55,3281990000,14087.55
+2007-09-28,13912.94,13994.64,13802.96,13895.63,2925350000,13895.63
+2007-09-27,13879.53,13991.63,13811.17,13912.94,2872180000,13912.94
+2007-09-26,13779.30,13962.61,13741.26,13878.15,3237390000,13878.15
+2007-09-25,13757.84,13847.10,13629.16,13778.65,3187770000,13778.65
+2007-09-24,13821.57,13930.74,13702.89,13759.06,3131310000,13759.06
+2007-09-21,13768.33,13948.95,13740.61,13820.19,3679460000,13820.19
+2007-09-20,13813.52,13893.02,13680.21,13766.70,2957700000,13766.70
+2007-09-19,13740.61,13936.68,13689.80,13815.56,3846750000,13815.56
+2007-09-18,13403.18,13772.15,13379.68,13739.39,3708940000,13739.39
+2007-09-17,13441.95,13514.71,13306.69,13403.42,2598390000,13403.42
+2007-09-14,13421.39,13507.55,13273.68,13442.52,2641740000,13442.52
+2007-09-13,13292.38,13519.91,13292.38,13424.88,2877080000,13424.88
+2007-09-12,13298.31,13408.62,13195.40,13291.65,2885720000,13291.65
+2007-09-11,13129.40,13369.77,13124.68,13308.39,3015330000,13308.39
+2007-09-10,13116.39,13280.67,12992.02,13127.85,2835720000,13127.85
+2007-09-07,13360.74,13360.74,13059.16,13113.38,3191080000,13113.38
+2007-09-06,13306.44,13464.79,13217.11,13363.35,2459590000,13363.35
+2007-09-05,13442.85,13442.85,13203.86,13305.47,2991600000,13305.47
+2007-09-04,13358.39,13521.86,13248.57,13448.86,2766600000,13448.86
+2007-08-31,13240.84,13472.35,13240.84,13357.74,2731610000,13357.74
+2007-08-30,13287.91,13355.46,13126.39,13238.73,2582960000,13238.73
+2007-08-29,13043.07,13336.93,13020.63,13289.29,2824070000,13289.29
+2007-08-28,13318.43,13319.61,13024.29,13041.85,3078090000,13041.85
+2007-08-27,13377.16,13438.46,13248.32,13322.13,2406180000,13322.13
+2007-08-24,13231.78,13402.20,13174.27,13378.87,2541400000,13378.87
+2007-08-23,13237.27,13358.22,13127.69,13235.88,3084390000,13235.88
+2007-08-22,13088.26,13304.33,13075.34,13236.13,3309120000,13236.13
+2007-08-21,13120.05,13228.57,12975.68,13090.86,3012150000,13090.86
+2007-08-20,13078.51,13245.80,12938.77,13121.35,3321340000,13121.35
+2007-08-17,12848.05,13289.70,12847.24,13079.08,3570040000,13079.08
+2007-08-16,12859.52,12996.73,12455.92,12845.78,6509300000,12845.78
+2007-08-15,13021.93,13184.51,12800.83,12861.47,4290930000,12861.47
+2007-08-14,13235.72,13309.04,12974.30,13028.92,3814630000,13028.92
+2007-08-13,13238.24,13440.08,13163.54,13236.53,3696280000,13236.53
+2007-08-10,13270.59,13386.43,12958.04,13239.54,5345780000,13239.54
+2007-08-09,13652.33,13675.66,13196.05,13270.68,5889600000,13270.68
+2007-08-08,13497.23,13769.63,13386.92,13657.86,5499560000,13657.86
+2007-08-07,13467.72,13635.09,13282.38,13504.30,4909390000,13504.30
+2007-08-06,13183.13,13501.86,13077.05,13468.78,5067200000,13468.78
+2007-08-03,13462.25,13539.50,13156.79,13181.91,4272110000,13181.91
+2007-08-02,13357.82,13547.47,13272.79,13463.33,4368850000,13463.33
+2007-08-01,13211.09,13431.06,13041.77,13362.37,5256780000,13362.37
+2007-07-31,13360.66,13579.41,13182.15,13211.99,4524520000,13211.99
+2007-07-30,13266.21,13445.12,13143.87,13358.31,4128780000,13358.31
+2007-07-27,13472.68,13589.17,13228.57,13265.47,4784650000,13265.47
+2007-07-26,13783.12,13793.61,13307.74,13473.57,4472550000,13473.57
+2007-07-25,13718.25,13919.77,13607.70,13785.07,4283200000,13785.07
+2007-07-24,13940.90,13967.65,13661.51,13716.95,4115830000,13716.95
+2007-07-23,13851.73,14039.59,13819.54,13943.42,3102700000,13943.42
+2007-07-20,14000.73,14039.67,13745.65,13851.08,3745780000,13851.08
+2007-07-19,13918.79,14121.04,13860.18,14000.41,3251450000,14000.41
+2007-07-18,13955.05,14020.89,13768.73,13918.22,3609220000,13918.22
+2007-07-17,13951.96,14095.60,13880.67,13971.55,3007140000,13971.55
+2007-07-16,13907.09,14053.57,13834.33,13950.98,2704110000,13950.98
+2007-07-13,13859.86,13982.93,13784.83,13907.25,2801120000,13907.25
+2007-07-12,13579.33,13889.45,13579.33,13861.73,3489600000,13861.73
+2007-07-11,13500.40,13638.75,13435.45,13577.87,3082920000,13577.87
+2007-07-10,13648.59,13685.90,13463.57,13501.70,3244280000,13501.70
+2007-07-09,13612.66,13739.06,13563.89,13649.97,2715330000,13649.97
+2007-07-06,13559.01,13670.46,13501.54,13611.68,2441520000,13611.68
+2007-07-05,13576.24,13637.78,13459.84,13565.84,2622950000,13565.84
+2007-07-03,13556.87,13592.07,13531.83,13577.30,1560790000,13577.30
+2007-07-02,13409.60,13586.97,13406.59,13535.43,2648990000,13535.43
+2007-06-29,13422.61,13556.16,13291.32,13408.62,3165410000,13408.62
+2007-06-28,13427.48,13537.47,13342.05,13422.28,3006710000,13422.28
+2007-06-27,13336.93,13455.36,13205.08,13427.73,3398150000,13427.73
+2007-06-26,13352.37,13491.70,13272.79,13337.66,3398530000,13337.66
+2007-06-25,13360.09,13519.34,13273.68,13352.05,3287250000,13352.05
+2007-06-22,13545.03,13564.13,13323.51,13360.26,4284320000,13360.26
+2007-06-21,13486.66,13596.56,13368.79,13545.84,3161110000,13545.84
+2007-06-20,13636.56,13735.08,13469.43,13489.42,3286900000,13489.42
+2007-06-19,13611.68,13705.41,13527.14,13635.42,2873590000,13635.42
+2007-06-18,13639.00,13720.29,13560.15,13612.98,2480240000,13612.98
+2007-06-15,13556.65,13741.18,13556.65,13639.48,3406030000,13639.48
+2007-06-14,13482.43,13622.66,13444.07,13553.73,2813630000,13553.73
+2007-06-13,13287.62,13502.76,13287.62,13482.35,3077930000,13482.35
+2007-06-12,13424.39,13474.12,13264.05,13295.01,3056200000,13295.01
+2007-06-11,13423.74,13519.88,13335.16,13424.96,2525280000,13424.96
+2007-06-08,13267.14,13445.19,13207.73,13424.39,2993460000,13424.39
+2007-06-07,13463.48,13517.85,13236.34,13266.73,3538470000,13266.73
+2007-06-06,13590.66,13606.75,13403.10,13465.67,2964190000,13465.67
+2007-06-05,13673.19,13689.40,13523.70,13595.46,2939450000,13595.46
+2007-06-04,13667.21,13723.37,13575.14,13676.32,2738930000,13676.32
+2007-06-01,13628.69,13756.69,13562.54,13668.11,2927020000,13668.11
+2007-05-31,13633.00,13718.82,13564.49,13627.64,3335530000,13627.64
+2007-05-30,13517.89,13650.64,13403.26,13633.08,2980210000,13633.08
+2007-05-29,13507.28,13603.26,13428.86,13521.34,2571790000,13521.34
+2007-05-25,13441.94,13571.48,13410.00,13507.28,2316250000,13507.28
+2007-05-24,13522.60,13645.52,13391.56,13441.13,3365530000,13441.13
+2007-05-23,13540.84,13648.69,13476.72,13525.65,3084260000,13525.65
+2007-05-22,13544.99,13632.03,13466.57,13539.95,2860500000,13539.95
+2007-05-21,13556.53,13636.98,13473.31,13542.88,3465360000,13542.88
+2007-05-18,13476.40,13611.95,13454.46,13556.53,2959050000,13556.53
+2007-05-17,13486.96,13558.24,13384.89,13476.72,2868640000,13476.72
+2007-05-16,13374.13,13526.54,13325.49,13487.53,2915350000,13487.53
+2007-05-15,13346.05,13518.33,13302.65,13383.84,3071020000,13383.84
+2007-05-14,13325.81,13432.84,13265.02,13346.78,2776130000,13346.78
+2007-05-11,13212.20,13373.35,13192.62,13326.22,2720780000,13326.22
+2007-05-10,13359.05,13376.20,13161.08,13215.13,3031240000,13215.13
+2007-05-09,13300.62,13410.17,13229.92,13362.87,2935550000,13362.87
+2007-05-08,13309.40,13359.05,13192.45,13309.07,2795720000,13309.07
+2007-05-07,13264.13,13385.06,13218.87,13312.97,2545090000,13312.97
+2007-05-04,13243.08,13340.60,13176.61,13264.62,2761930000,13264.62
+2007-05-03,13206.65,13306.55,13131.42,13241.38,3007970000,13241.38
+2007-05-02,13133.94,13291.60,13105.34,13211.88,3189800000,13211.88
+2007-05-01,13062.75,13188.96,12993.02,13136.14,3400350000,13136.14
+2007-04-30,13120.21,13226.99,13003.91,13062.91,3093420000,13062.91
+2007-04-27,13104.04,13195.05,13002.37,13120.94,2732810000,13120.94
+2007-04-26,13088.84,13197.49,13016.43,13105.50,3211800000,13105.50
+2007-04-25,12951.42,13142.31,12929.80,13089.89,3252590000,13089.89
+2007-04-24,12919.64,13033.66,12845.12,12953.94,3119750000,12953.94
+2007-04-23,12961.49,13029.59,12867.96,12919.40,2575020000,12919.40
+2007-04-20,12811.15,13035.77,12811.15,12961.98,3329940000,12961.98
+2007-04-19,12799.77,12889.17,12677.47,12808.63,2913610000,12808.63
+2007-04-18,12771.08,12871.21,12691.20,12803.84,2971330000,12803.84
+2007-04-17,12719.56,12837.40,12669.50,12773.04,2920570000,12773.04
+2007-04-16,12611.64,12770.60,12596.36,12720.46,2870140000,12720.46
+2007-04-13,12551.91,12654.47,12504.04,12612.13,2690020000,12612.13
+2007-04-12,12483.64,12580.92,12407.50,12552.96,2770570000,12552.96
+2007-04-11,12573.12,12618.63,12432.53,12484.62,2950190000,12484.62
+2007-04-10,12568.49,12641.87,12496.48,12573.85,2510110000,12573.85
+2007-04-09,12562.64,12641.22,12505.83,12569.14,2349410000,12569.14
+2007-04-05,12505.73,12573.02,12501.25,12560.83,2357230000,12560.83
+2007-04-04,12511.36,12591.81,12444.55,12530.05,2616320000,12530.05
+2007-04-03,12431.28,12534.49,12378.94,12510.93,2921760000,12510.93
+2007-04-02,12354.52,12450.81,12284.54,12382.30,2875880000,12382.30
+2007-03-30,12348.91,12442.40,12237.87,12354.35,2903960000,12354.35
+2007-03-29,12301.48,12424.77,12251.89,12348.75,2854710000,12348.75
+2007-03-28,12396.49,12415.56,12234.50,12300.36,3000440000,12300.36
+2007-03-27,12468.59,12484.54,12336.89,12397.29,2673040000,12397.29
+2007-03-26,12480.37,12526.27,12339.53,12469.07,2754660000,12469.07
+2007-03-23,12460.50,12550.07,12396.89,12481.01,2619020000,12481.01
+2007-03-22,12446.72,12524.03,12364.21,12461.14,3129970000,12461.14
+2007-03-21,12288.98,12489.02,12220.49,12447.52,3184770000,12447.52
+2007-03-20,12226.81,12324.31,12172.66,12288.10,2795940000,12288.10
+2007-03-19,12110.41,12273.52,12110.41,12226.17,2777180000,12226.17
+2007-03-16,12160.16,12226.01,12053.05,12110.41,3393640000,12110.41
+2007-03-15,12133.16,12228.42,12060.10,12159.68,2821900000,12159.68
+2007-03-14,12074.52,12187.88,11926.79,12133.40,3758350000,12133.40
+2007-03-13,12307.49,12319.66,12049.85,12075.96,3485570000,12075.96
+2007-03-12,12275.68,12385.44,12205.58,12318.62,2664000000,12318.62
+2007-03-09,12262.06,12379.51,12200.62,12276.32,2623050000,12276.32
+2007-03-08,12193.33,12355.47,12183.79,12260.70,3014850000,12260.70
+2007-03-07,12204.46,12315.18,12122.11,12192.45,3141350000,12192.45
+2007-03-06,12051.17,12252.61,12051.17,12207.59,3358160000,12207.59
+2007-03-05,12111.61,12220.16,11973.58,12050.41,3480520000,12050.41
+2007-03-02,12233.78,12293.15,12064.91,12114.10,3312260000,12114.10
+2007-03-01,12265.59,12338.89,11996.17,12234.34,3874910000,12234.34
+2007-02-28,12214.92,12396.81,12122.03,12268.63,3925250000,12268.63
+2007-02-27,12628.90,12628.90,12078.85,12216.24,4065230000,12216.24
+2007-02-26,12647.88,12746.34,12562.72,12632.26,2822170000,12632.26
+2007-02-23,12679.89,12726.79,12578.51,12647.48,2579950000,12647.48
+2007-02-22,12735.77,12792.97,12621.93,12686.02,1950770000,12686.02
+2007-02-21,12782.87,12813.88,12662.79,12738.41,2606980000,12738.41
+2007-02-20,12766.85,12845.76,12675.04,12786.64,2337860000,12786.64
+2007-02-16,12764.13,12829.42,12685.86,12767.57,2399450000,12767.57
+2007-02-15,12741.70,12828.38,12681.85,12765.01,2490920000,12765.01
+2007-02-14,12651.29,12793.29,12623.21,12741.86,2699290000,12741.86
+2007-02-13,12549.19,12702.36,12549.19,12654.85,2652150000,12654.85
+2007-02-12,12595.90,12605.11,12536.77,12552.55,2395680000,12552.55
+2007-02-09,12638.03,12725.59,12518.58,12580.83,2951810000,12580.83
+2007-02-08,12639.16,12666.88,12576.59,12637.63,2816180000,12637.63
+2007-02-07,12656.86,12748.99,12589.56,12666.87,2618820000,12666.87
+2007-02-06,12661.66,12738.41,12586.44,12666.31,2608710000,12666.31
+2007-02-05,12641.08,12681.06,12630.50,12661.74,2439430000,12661.74
+2007-02-02,12673.84,12740.65,12582.99,12653.49,2569450000,12653.49
+2007-02-01,12617.20,12741.30,12563.85,12673.68,2914890000,12673.68
+2007-01-31,12520.03,12685.54,12461.30,12621.69,2976690000,12621.69
+2007-01-30,12484.70,12538.06,12463.07,12523.31,2706250000,12523.31
+2007-01-29,12487.10,12599.74,12422.93,12490.78,2730480000,12490.78
+2007-01-26,12503.28,12582.67,12391.44,12487.02,2626620000,12487.02
+2007-01-25,12621.77,12670.48,12461.54,12502.56,2994330000,12502.56
+2007-01-24,12534.37,12659.42,12489.98,12621.77,2783180000,12621.77
+2007-01-23,12467.96,12553.44,12467.96,12533.80,2975070000,12533.80
+2007-01-22,12566.33,12619.04,12389.68,12477.16,2540120000,12477.16
+2007-01-19,12567.93,12649.89,12462.50,12565.53,2777480000,12565.53
+2007-01-18,12575.06,12674.16,12487.90,12567.93,2822430000,12567.93
+2007-01-17,12563.53,12613.28,12550.95,12577.15,2690270000,12577.15
+2007-01-16,12555.84,12638.27,12489.90,12582.59,2599530000,12582.59
+2007-01-12,12514.66,12616.08,12432.30,12556.08,2686480000,12556.08
+2007-01-11,12442.96,12586.12,12413.72,12514.98,2857870000,12514.98
+2007-01-10,12417.00,12487.18,12313.01,12442.16,2764660000,12442.16
+2007-01-09,12424.77,12516.66,12337.85,12416.60,3038380000,12416.60
+2007-01-08,12393.93,12445.37,12337.53,12423.49,2763340000,12423.49
+2007-01-05,12480.05,12504.40,12326.79,12398.01,2919400000,12398.01
+2007-01-04,12467.32,12510.26,12405.47,12480.69,3004460000,12480.69
+2007-01-03,12459.54,12630.34,12373.82,12474.52,3429160000,12474.52
+2006-12-29,12500.48,12560.16,12423.81,12463.15,1678200000,12463.15
+2006-12-28,12510.57,12566.17,12440.23,12501.52,1508570000,12501.52
+2006-12-27,12463.46,12518.34,12407.62,12510.57,1667370000,12510.57
+2006-12-26,12341.94,12439.19,12301.40,12407.63,1310310000,12407.63
+2006-12-22,12407.87,12417.96,12341.77,12343.21,1647590000,12343.21
+2006-12-21,12461.62,12526.59,12369.97,12421.25,2322410000,12421.25
+2006-12-20,12471.32,12549.35,12393.45,12463.87,2387630000,12463.87
+2006-12-19,12439.51,12517.78,12348.50,12471.32,2717060000,12471.32
+2006-12-18,12446.24,12545.74,12372.30,12441.27,2568140000,12441.27
+2006-12-15,12417.96,12536.37,12377.35,12445.52,3229580000,12445.52
+2006-12-14,12317.50,12472.76,12271.44,12416.76,2729700000,12416.76
+2006-12-13,12312.71,12411.55,12263.19,12317.50,2552260000,12317.50
+2006-12-12,12328.24,12396.01,12222.65,12315.58,2738170000,12315.58
+2006-12-11,12306.21,12399.54,12245.32,12328.48,2289900000,12328.48
+2006-12-08,12256.21,12332.16,12243.31,12307.48,2440460000,12307.48
+2006-12-07,12310.13,12396.33,12233.06,12278.41,2743150000,12278.41
+2006-12-06,12328.72,12390.88,12239.95,12309.25,2725280000,12309.25
+2006-12-05,12283.69,12398.57,12218.24,12331.60,2755700000,12331.60
+2006-12-04,12195.57,12349.87,12149.27,12283.85,2766320000,12283.85
+2006-12-01,12220.97,12289.30,12070.52,12194.13,2800980000,12194.13
+2006-11-30,12226.73,12317.10,12118.42,12221.93,4006230000,12221.93
+2006-11-29,12134.40,12283.05,12119.70,12226.73,2790970000,12226.73
+2006-11-28,12095.27,12148.78,12073.40,12136.44,2639750000,12136.44
+2006-11-27,12279.13,12303.32,12079.01,12121.71,2711210000,12121.71
+2006-11-24,12321.71,12340.89,12219.28,12280.17,832550000,12280.17
+2006-11-22,12321.91,12403.54,12238.43,12326.95,2237710000,12326.95
+2006-11-21,12312.13,12409.31,12233.94,12321.59,2597940000,12321.59
+2006-11-20,12340.71,12400.10,12257.34,12316.54,2546710000,12316.54
+2006-11-17,12293.49,12342.55,12278.20,12342.55,2726100000,12342.55
+2006-11-16,12250.05,12375.37,12204.00,12305.82,2835730000,12305.82
+2006-11-15,12214.37,12326.07,12156.37,12251.71,2831130000,12251.71
+2006-11-14,12132.44,12261.15,12051.68,12218.01,3027480000,12218.01
+2006-11-13,12084.89,12164.22,12084.89,12131.88,2386340000,12131.88
+2006-11-10,12102.74,12173.08,12074.01,12108.43,2290200000,12108.43
+2006-11-09,12174.70,12236.10,12039.59,12103.30,3012050000,12103.30
+2006-11-08,12147.38,12233.54,12051.60,12176.54,2814820000,12176.54
+2006-11-07,12104.75,12239.94,12065.20,12156.77,2636390000,12156.77
+2006-11-06,11985.16,12146.45,11973.23,12105.55,2533550000,12105.55
+2006-11-03,12018.30,12095.30,11928.97,11986.04,2419730000,11986.04
+2006-11-02,12023.98,12070.25,11938.89,12018.54,2646180000,12018.54
+2006-11-01,12080.25,12160.70,11972.99,12031.02,2821160000,12031.02
+2006-10-31,12086.18,12160.46,11986.84,12080.73,2803030000,12080.73
+2006-10-30,12074.01,12117.07,12050.23,12086.49,2770440000,12086.49
+2006-10-27,12164.78,12202.72,12024.78,12090.26,2458450000,12090.26
+2006-10-26,12134.84,12236.10,12037.99,12163.66,2793350000,12163.66
+2006-10-25,12127.24,12212.16,12017.66,12134.68,2953540000,12134.68
+2006-10-24,12116.51,12204.80,12028.14,12127.88,2876890000,12127.88
+2006-10-23,12001.33,12177.35,11940.41,12116.91,2480430000,12116.91
+2006-10-20,12013.01,12087.38,11881.34,12002.37,2526410000,12002.37
+2006-10-19,11988.92,12082.33,11911.44,12011.73,2619830000,12011.73
+2006-10-18,11947.62,12108.91,11900.79,11992.68,2658840000,11992.68
+2006-10-17,11977.40,12024.54,11849.16,11950.02,2519620000,11950.02
+2006-10-16,11957.70,11996.92,11945.70,11980.59,2305920000,11980.59
+2006-10-13,11947.22,12009.97,11862.29,11960.51,2482920000,11960.51
+2006-10-12,11896.63,11959.14,11852.12,11947.70,2514350000,11947.70
+2006-10-11,11865.49,11907.60,11762.72,11852.13,2521000000,11852.13
+2006-10-10,11857.73,11930.33,11778.09,11867.17,2376140000,11867.17
+2006-10-09,11849.56,11923.53,11759.36,11857.81,1935170000,11857.81
+2006-10-06,11865.49,11921.04,11743.35,11850.21,2523000000,11850.21
+2006-10-05,11832.51,11869.33,11821.55,11866.69,2817240000,11866.69
+2006-10-04,11722.94,11879.18,11654.02,11850.61,3019880000,11850.61
+2006-10-03,11670.11,11794.41,11608.23,11727.34,2682690000,11727.34
+2006-10-02,11678.99,11773.60,11608.79,11670.35,2154480000,11670.35
+2006-09-29,11718.05,11782.49,11642.17,11679.07,2273430000,11679.07
+2006-09-28,11689.40,11775.36,11625.92,11718.45,2397820000,11718.45
+2006-09-27,11670.19,11775.60,11595.75,11689.24,2749190000,11689.24
+2006-09-26,11575.73,11723.74,11517.54,11669.39,2673350000,11669.39
+2006-09-25,11536.67,11616.23,11486.00,11575.81,2710240000,11575.81
+2006-09-22,11532.91,11588.62,11423.57,11508.10,2162880000,11508.10
+2006-09-21,11611.67,11677.39,11471.76,11533.23,2627440000,11533.23
+2006-09-20,11542.28,11680.19,11514.50,11613.19,2543070000,11613.19
+2006-09-19,11554.60,11605.67,11450.30,11540.91,2390850000,11540.91
+2006-09-18,11538.35,11588.22,11528.43,11555.00,2325080000,11555.00
+2006-09-15,11528.75,11661.38,11504.57,11560.77,3198030000,11560.77
+2006-09-14,11508.82,11548.84,11495.77,11527.39,2351220000,11527.39
+2006-09-13,11487.69,11605.59,11423.73,11543.32,2597220000,11543.32
+2006-09-12,11412.52,11512.74,11396.83,11498.09,2791580000,11498.09
+2006-09-11,11389.87,11468.88,11295.90,11396.84,2506430000,11396.84
+2006-09-08,11332.24,11448.30,11295.18,11392.11,2132890000,11392.11
+2006-09-07,11405.16,11443.66,11273.89,11331.44,2325850000,11331.44
+2006-09-06,11421.33,11469.27,11395.15,11406.20,2329870000,11406.20
+2006-09-05,11461.83,11533.87,11385.95,11469.28,2114480000,11469.28
+2006-09-01,11427.41,11476.40,11381.14,11464.15,1800520000,11464.15
+2006-08-31,11383.47,11451.03,11326.80,11381.15,1974540000,11381.15
+2006-08-30,11365.98,11452.95,11309.99,11382.91,2060690000,11382.91
+2006-08-29,11352.65,11432.38,11255.88,11369.94,2093720000,11369.94
+2006-08-28,11285.33,11411.24,11240.91,11352.01,1834920000,11352.01
+2006-08-25,11301.22,11350.09,11218.66,11284.05,1667580000,11284.05
+2006-08-24,11297.82,11386.59,11232.83,11304.46,1930320000,11304.46
+2006-08-23,11337.12,11394.75,11238.67,11297.90,1893670000,11297.90
+2006-08-22,11344.41,11426.13,11279.25,11339.84,1908740000,11339.84
+2006-08-21,11353.29,11381.46,11322.31,11345.04,1759240000,11345.04
+2006-08-18,11333.76,11437.66,11273.49,11381.47,2033910000,11381.47
+2006-08-17,11321.19,11372.34,11298.54,11334.96,2458340000,11334.96
+2006-08-16,11224.91,11373.78,11207.85,11327.12,2554570000,11327.12
+2006-08-15,11098.03,11271.25,11098.03,11230.26,2334100000,11230.26
+2006-08-14,11089.07,11242.83,11049.68,11097.87,2118020000,11097.87
+2006-08-11,11103.55,11121.40,11042.88,11088.02,2004540000,11088.02
+2006-08-10,11073.14,11176.47,10998.06,11124.37,2402190000,11124.37
+2006-08-09,11168.47,11296.22,11044.64,11076.18,2555180000,11076.18
+2006-08-08,11218.18,11319.51,11117.80,11173.59,2457840000,11173.59
+2006-08-07,11239.47,11294.14,11143.02,11219.38,2045660000,11219.38
+2006-08-04,11244.59,11367.94,11165.11,11240.35,2530970000,11240.35
+2006-08-03,11195.28,11304.78,11101.55,11242.59,2728440000,11242.59
+2006-08-02,11167.91,11228.98,11124.52,11199.92,2610750000,11199.92
+2006-08-01,11184.80,11210.65,11035.92,11125.73,2527690000,11125.73
+2006-07-31,11218.90,11265.80,11115.24,11185.68,2461300000,11185.68
+2006-07-28,11102.11,11282.05,11102.11,11219.70,2480420000,11219.70
+2006-07-27,11104.19,11245.47,11040.80,11100.43,2776710000,11100.43
+2006-07-26,11102.91,11208.09,10987.41,11102.51,2667710000,11102.51
+2006-07-25,11037.59,11133.73,11000.05,11103.71,2563930000,11103.71
+2006-07-24,10868.70,11096.35,10868.70,11051.05,2312720000,11051.05
+2006-07-21,10937.94,10995.73,10778.58,10868.38,2704090000,10868.38
+2006-07-20,11007.26,11098.75,10884.47,10928.10,2345580000,10928.10
+2006-07-19,10854.22,11038.16,10796.74,11011.42,2701980000,11011.42
+2006-07-18,10745.84,10867.02,10658.35,10799.23,2481750000,10799.23
+2006-07-17,10739.35,10858.22,10668.35,10747.36,2146410000,10747.36
+2006-07-14,10846.53,10892.64,10664.43,10739.35,2467120000,10739.35
+2006-07-13,11012.62,11015.19,10790.82,10846.29,2545760000,10846.29
+2006-07-12,11133.97,11181.12,10973.37,11013.18,2250450000,11013.18
+2006-07-11,11102.59,11186.32,10987.33,11134.77,2310850000,11134.77
+2006-07-10,11130.53,11174.47,11090.10,11103.55,1854590000,11103.55
+2006-07-07,11224.18,11227.62,11040.32,11090.67,1988150000,11090.67
+2006-07-06,11147.12,11301.58,11117.16,11225.30,2009160000,11225.30
+2006-07-05,11225.06,11239.47,11083.94,11151.82,2165070000,11151.82
+2006-07-03,11149.34,11277.09,11146.06,11228.02,1114470000,11228.02
+2006-06-30,11190.80,11288.86,11100.11,11150.22,3049560000,11150.22
+2006-06-29,10974.36,11225.06,10974.36,11190.80,2621250000,11190.80
+2006-06-28,10925.30,11026.07,10869.02,10973.56,2085490000,10973.56
+2006-06-27,11048.24,11064.09,10920.73,10924.74,2203130000,10924.74
+2006-06-26,10990.29,11089.07,10937.06,11045.28,1878580000,11045.28
+2006-06-23,11019.19,11098.67,10932.82,10989.09,2017270000,10989.09
+2006-06-22,11077.78,11127.73,10954.83,11019.11,2148180000,11019.11
+2006-06-21,10975.24,11165.91,10952.43,11079.46,2361230000,11079.46
+2006-06-20,10942.03,11066.73,10895.28,10974.84,2232950000,10974.84
+2006-06-19,11014.87,11098.99,10886.63,10942.11,2517200000,10942.11
+2006-06-16,11009.10,11045.04,10984.29,11014.54,2783390000,11014.54
+2006-06-15,10817.48,11049.85,10788.34,11015.19,2775480000,11015.19
+2006-06-14,10713.10,10816.99,10699.25,10816.91,2667990000,10816.91
+2006-06-13,10783.14,10893.04,10653.23,10706.14,3215770000,10706.14
+2006-06-12,10892.00,10969.32,10767.61,10792.58,2247010000,10792.58
+2006-06-09,10939.14,11015.67,10842.89,10891.92,2214000000,10891.92
+2006-06-08,10929.70,11032.15,10726.15,10938.82,3543790000,10938.82
+2006-06-07,11002.06,11107.48,10897.76,10930.90,2644170000,10930.90
+2006-06-06,11048.24,11140.45,10890.24,11002.14,2697650000,11002.14
+2006-06-05,11247.55,11259.96,11025.75,11048.72,2313470000,11048.72
+2006-06-02,11260.52,11329.28,11158.06,11247.87,2295540000,11247.87
+2006-06-01,11169.03,11290.86,11115.40,11260.28,2360160000,11260.28
+2006-05-31,11091.15,11225.78,11050.40,11168.31,2692160000,11168.31
+2006-05-30,11277.25,11277.25,11071.70,11094.43,2176190000,11094.43
+2006-05-26,11211.69,11329.36,11177.43,11278.61,1814020000,11278.61
+2006-05-25,11114.96,11258.12,11089.55,11211.05,2372730000,11211.05
+2006-05-24,11100.11,11241.15,10980.29,11117.32,2999030000,11117.32
+2006-05-23,11126.29,11254.68,11068.49,11098.35,2605250000,11098.35
+2006-05-22,11092.90,11175.03,11040.16,11125.32,2773010000,11125.32
+2006-05-19,11124.37,11254.60,11009.98,11144.06,2982300000,11144.06
+2006-05-18,11206.17,11301.26,11096.35,11128.29,2537490000,11128.29
+2006-05-17,11410.13,11412.28,11139.17,11205.61,2830200000,11205.61
+2006-05-16,11428.21,11520.42,11334.64,11419.89,2386210000,11419.89
+2006-05-15,11380.43,11485.61,11273.65,11428.77,2505660000,11428.77
+2006-05-12,11500.01,11551.40,11336.96,11380.99,2567970000,11380.99
+2006-05-11,11639.29,11660.58,11449.74,11500.73,2531520000,11500.73
+2006-05-10,11630.48,11709.09,11545.64,11642.65,2268550000,11642.65
+2006-05-09,11584.62,11684.28,11535.71,11639.77,2157290000,11639.77
+2006-05-08,11576.37,11665.14,11504.09,11584.54,2151300000,11584.54
+2006-05-05,11440.62,11616.16,11440.62,11577.74,2294760000,11577.74
+2006-05-04,11401.80,11512.18,11366.82,11438.86,2431450000,11438.86
+2006-05-03,11414.69,11472.96,11308.55,11400.28,2395230000,11400.28
+2006-05-02,11372.74,11427.43,11343.28,11416.44,2403470000,11416.44
+2006-05-01,11367.78,11476.96,11304.30,11343.29,2437040000,11343.29
+2006-04-28,11358.33,11462.95,11278.13,11367.14,2419920000,11367.14
+2006-04-27,11349.53,11465.75,11220.74,11382.51,2772010000,11382.51
+2006-04-26,11283.25,11428.77,11256.12,11354.49,2502690000,11354.49
+2006-04-25,11336.56,11401.32,11213.05,11283.25,2366380000,11283.25
+2006-04-24,11346.81,11420.05,11246.35,11336.32,2117330000,11336.32
+2006-04-21,11343.45,11468.16,11272.61,11347.45,2392630000,11347.45
+2006-04-20,11278.53,11429.25,11221.30,11342.89,2512920000,11342.89
+2006-04-19,11265.40,11379.79,11181.84,11278.77,2447310000,11278.77
+2006-04-18,11074.58,11302.30,11064.01,11268.77,2595440000,11268.77
+2006-04-17,11137.33,11203.13,11017.43,11073.78,1794650000,11073.78
+2006-04-13,11130.13,11210.73,11053.29,11137.65,1891940000,11137.65
+2006-04-12,11089.47,11194.00,11052.17,11129.97,1938100000,11129.97
+2006-04-11,11141.33,11220.98,11017.99,11089.63,2232880000,11089.63
+2006-04-10,11119.88,11211.37,11083.06,11141.33,1898320000,11141.33
+2006-04-07,11228.10,11268.92,11108.75,11120.04,2082470000,11120.04
+2006-04-06,11233.01,11294.30,11137.57,11216.50,2281680000,11216.50
+2006-04-05,11203.21,11290.30,11141.82,11239.55,2420020000,11239.55
+2006-04-04,11142.54,11269.17,11094.03,11203.85,2147660000,11203.85
+2006-04-03,11113.00,11287.02,11101.07,11144.94,2494080000,11144.94
+2006-03-31,11151.34,11229.47,11069.78,11109.32,2236710000,11109.32
+2006-03-30,11195.36,11259.08,11118.12,11150.70,2294560000,11150.70
+2006-03-29,11154.94,11283.97,11117.48,11215.70,2143540000,11215.70
+2006-03-28,11250.11,11312.31,11132.05,11154.54,2148580000,11154.54
+2006-03-27,11280.13,11314.96,11194.07,11250.11,2029700000,11250.11
+2006-03-24,11270.61,11353.21,11197.21,11279.97,2326070000,11279.97
+2006-03-23,11317.35,11363.46,11207.85,11270.29,1980940000,11270.29
+2006-03-22,11234.51,11358.01,11200.22,11317.43,2039810000,11317.43
+2006-03-21,11275.89,11364.34,11188.56,11235.47,2147370000,11235.47
+2006-03-20,11278.93,11350.73,11208.33,11274.53,1976830000,11274.53
+2006-03-17,11294.94,11294.94,11253.23,11279.65,2549620000,11279.65
+2006-03-16,11210.97,11324.80,11176.07,11253.24,2292180000,11253.24
+2006-03-15,11149.76,11258.28,11097.23,11209.77,2293000000,11209.77
+2006-03-14,11076.02,11190.96,11030.23,11151.34,2165270000,11151.34
+2006-03-13,11067.61,11157.82,11019.75,11076.02,2070330000,11076.02
+2006-03-10,10972.92,11125.41,10948.43,11076.34,2123450000,11076.34
+2006-03-09,11005.66,11093.39,10923.86,10972.28,2140110000,10972.28
+2006-03-08,10977.08,11065.61,10885.99,11005.74,2442870000,11005.74
+2006-03-07,10957.31,11032.31,10885.35,10980.69,2268050000,10980.69
+2006-03-06,11022.47,11084.66,10899.76,10958.59,2280190000,10958.59
+2006-03-03,11024.23,11125.01,10942.99,11021.59,2152950000,11021.59
+2006-03-02,11052.57,11090.91,10951.71,11025.51,2494590000,11025.51
+2006-03-01,10993.25,11115.80,10960.60,11053.53,2308320000,11053.53
+2006-02-28,11096.75,11115.24,10947.07,10993.41,2370860000,10993.41
+2006-02-27,11062.81,11180.48,11038.72,11097.55,1975320000,11097.55
+2006-02-24,11068.33,11085.38,11010.46,11061.85,1933010000,11061.85
+2006-02-23,11133.52,11167.83,11017.27,11069.22,2144210000,11069.22
+2006-02-22,11086.98,11159.02,11064.25,11137.17,2222380000,11137.17
+2006-02-21,11115.48,11182.68,11011.18,11069.06,2104320000,11069.06
+2006-02-17,11119.56,11178.80,11035.44,11115.32,2128260000,11115.32
+2006-02-16,11059.05,11154.14,10997.66,11120.68,2251490000,11120.68
+2006-02-15,11025.67,11115.56,10940.18,11058.97,2317590000,11058.97
+2006-02-14,10890.72,11071.54,10873.62,11028.39,2437940000,11028.39
+2006-02-13,10915.21,10982.93,10824.60,10892.32,1850080000,10892.32
+2006-02-10,10883.51,10972.76,10787.62,10919.05,2290050000,10919.05
+2006-02-09,10859.42,11003.50,10800.91,10883.35,2441920000,10883.35
+2006-02-08,10742.16,10897.44,10712.30,10858.62,2456860000,10858.62
+2006-02-07,10796.42,10874.79,10691.97,10749.76,2366370000,10749.76
+2006-02-06,10793.30,10868.62,10725.91,10798.27,2132360000,10798.27
+2006-02-03,10849.57,10905.28,10725.35,10793.62,2282210000,10793.62
+2006-02-02,10950.11,10987.73,10800.35,10851.98,2565300000,10851.98
+2006-02-01,10862.14,11001.82,10815.39,10953.95,2589410000,10953.95
+2006-01-31,10900.40,10970.28,10807.55,10864.86,2708310000,10864.86
+2006-01-30,10913.13,10930.34,10887.67,10899.92,2282730000,10899.92
+2006-01-27,10815.32,10988.29,10766.01,10907.21,2623620000,10907.21
+2006-01-26,10768.17,10827.96,10709.73,10809.47,2856780000,10809.47
+2006-01-25,10713.26,10832.93,10615.20,10709.74,2617060000,10709.74
+2006-01-24,10690.21,10804.75,10624.49,10712.22,2608720000,10712.22
+2006-01-23,10668.75,10783.70,10607.36,10688.77,2256070000,10688.77
+2006-01-20,10880.71,10890.08,10637.21,10667.39,2845810000,10667.39
+2006-01-19,10855.18,10965.00,10796.66,10880.71,2444020000,10880.71
+2006-01-18,10890.08,10934.90,10778.33,10854.86,2233200000,10854.86
+2006-01-17,10957.55,10977.01,10841.17,10896.32,2179970000,10896.32
+2006-01-13,10961.48,11033.04,10888.88,10959.87,2206510000,10959.87
+2006-01-12,11043.12,11070.10,10918.09,10962.36,2318350000,10962.36
+2006-01-11,11011.66,11099.15,10939.86,11043.44,2406130000,11043.44
+2006-01-10,11010.46,11054.49,10902.96,11011.58,2373080000,11011.58
+2006-01-09,10959.47,11053.93,10906.33,11011.90,2301490000,11011.90
+2006-01-06,10875.45,11005.98,10846.21,10959.31,2446560000,10959.31
+2006-01-05,10880.39,10951.39,10797.55,10882.15,2433340000,10882.15
+2006-01-04,10843.97,10946.27,10772.89,10880.15,2515330000,10880.15
+2006-01-03,10718.30,10888.40,10650.18,10847.41,2554570000,10847.41
+2005-12-30,10783.86,10801.87,10675.64,10717.50,1443500000,10717.50
+2005-12-29,10795.70,10870.71,10747.76,10784.82,1382540000,10784.82
+2005-12-28,10778.25,10858.07,10750.40,10796.26,1422360000,10796.26
+2005-12-27,10883.75,10956.99,10754.16,10777.77,1540470000,10777.77
+2005-12-23,10901.68,10904.40,10869.98,10883.27,1285810000,10883.27
+2005-12-22,10831.56,10928.34,10785.93,10889.44,1888500000,10889.44
+2005-12-21,10805.63,10933.70,10776.01,10833.73,2065170000,10833.73
+2005-12-20,10836.93,10905.28,10754.56,10805.55,1996690000,10805.55
+2005-12-19,10875.51,10970.04,10781.70,10836.53,2208810000,10836.53
+2005-12-16,10881.67,10978.21,10830.84,10875.59,2584190000,10875.59
+2005-12-15,10883.43,10985.01,10803.55,10881.67,2180590000,10881.67
+2005-12-14,10821.32,10953.07,10786.34,10883.51,2145520000,10883.51
+2005-12-13,10765.69,10902.64,10694.29,10823.72,2390020000,10823.72
+2005-12-12,10778.66,10857.02,10707.18,10767.77,1876550000,10767.77
+2005-12-09,10751.76,10845.33,10694.05,10778.58,1896290000,10778.58
+2005-12-08,10808.43,10871.11,10705.17,10755.12,2178300000,10755.12
+2005-12-07,10856.86,10916.89,10737.27,10810.91,2093830000,10810.91
+2005-12-06,10835.41,10956.13,10809.15,10856.86,2110740000,10856.86
+2005-12-05,10876.95,10923.37,10766.57,10835.01,2325840000,10835.01
+2005-12-02,10912.01,10952.83,10818.36,10877.51,2125580000,10877.51
+2005-12-01,10806.03,10969.97,10806.03,10912.57,2614830000,10912.57
+2005-11-30,10883.91,10959.80,10789.38,10805.87,2374690000,10805.87
+2005-11-29,10888.48,10994.85,10850.29,10888.16,2268340000,10888.16
+2005-11-28,10932.74,10992.39,10839.37,10890.72,2016900000,10890.72
+2005-11-25,10915.13,10997.50,10883.55,10931.62,724940000,10931.62
+2005-11-23,10865.90,10950.59,10855.42,10916.09,1985400000,10916.09
+2005-11-22,10815.96,10907.77,10729.99,10871.43,2291420000,10871.43
+2005-11-21,10766.33,10871.11,10708.86,10820.28,2117350000,10820.28
+2005-11-18,10719.34,10865.58,10663.79,10766.33,2453290000,10766.33
+2005-11-17,10677.00,10778.50,10619.61,10720.22,2298040000,10720.22
+2005-11-16,10697.81,10710.78,10653.14,10674.76,2121580000,10674.76
+2005-11-15,10697.01,10783.62,10610.08,10686.44,2359370000,10686.44
+2005-11-14,10686.60,10756.88,10618.89,10697.17,1899780000,10697.17
+2005-11-11,10641.30,10725.99,10595.89,10686.04,1773140000,10686.04
+2005-11-10,10550.61,10655.22,10519.71,10640.10,2378460000,10640.10
+2005-11-09,10539.24,10637.78,10466.24,10546.21,2214460000,10546.21
+2005-11-08,10574.18,10606.80,10478.49,10539.72,1965050000,10539.72
+2005-11-07,10531.24,10632.34,10488.74,10586.23,1987580000,10586.23
+2005-11-04,10523.23,10593.51,10441.59,10530.76,2050510000,10530.76
+2005-11-03,10470.49,10613.84,10421.98,10522.59,2716630000,10522.59
+2005-11-02,10406.29,10527.32,10347.70,10472.73,2648090000,10472.73
+2005-11-01,10437.51,10510.03,10352.42,10406.77,2457850000,10406.77
+2005-10-31,10403.17,10539.16,10372.67,10440.07,2567470000,10440.07
+2005-10-28,10231.15,10433.51,10213.14,10402.77,2379400000,10402.77
+2005-10-27,10334.81,10348.66,10229.95,10229.95,2395370000,10229.95
+2005-10-26,10377.39,10474.18,10283.10,10344.98,2467750000,10344.98
+2005-10-25,10383.88,10457.52,10282.78,10377.87,2312470000,10377.87
+2005-10-24,10219.15,10411.57,10219.15,10385.00,2197790000,10385.00
+2005-10-21,10282.22,10354.02,10161.60,10215.22,2470920000,10215.22
+2005-10-20,10411.73,10483.21,10230.27,10281.10,2617250000,10281.10
+2005-10-19,10277.18,10444.15,10173.52,10414.13,2703590000,10414.13
+2005-10-18,10349.14,10412.85,10233.47,10285.26,2197010000,10285.26
+2005-10-17,10287.42,10419.58,10213.06,10348.10,2054570000,10348.10
+2005-10-14,10216.59,10327.21,10165.12,10287.34,2188940000,10287.34
+2005-10-13,10216.91,10309.20,10098.18,10216.59,2351150000,10216.59
+2005-10-12,10247.40,10308.23,10186.17,10216.90,2491280000,10216.90
+2005-10-11,10239.16,10361.15,10195.13,10253.17,2299040000,10253.17
+2005-10-10,10292.95,10378.19,10184.09,10238.76,2195990000,10238.76
+2005-10-07,10287.42,10387.48,10221.47,10292.31,2126080000,10292.31
+2005-10-06,10317.36,10425.98,10200.81,10287.10,2792030000,10287.10
+2005-10-05,10434.81,10477.21,10299.27,10317.36,2546780000,10317.36
+2005-10-04,10534.36,10618.41,10409.89,10441.11,2341420000,10441.11
+2005-10-03,10569.50,10637.00,10486.17,10535.48,2097490000,10535.48
+2005-09-30,10540.51,10569.81,10526.34,10568.70,2097520000,10568.70
+2005-09-29,10472.61,10583.43,10389.01,10552.78,2176120000,10552.78
+2005-09-28,10456.61,10560.02,10390.05,10473.08,2106980000,10473.08
+2005-09-27,10444.58,10534.31,10376.83,10456.21,1976270000,10456.21
+2005-09-26,10420.22,10544.98,10381.53,10443.63,2022220000,10443.63
+2005-09-23,10421.81,10494.42,10328.59,10419.59,1973020000,10419.59
+2005-09-22,10376.20,10489.64,10303.51,10422.05,2424720000,10422.05
+2005-09-21,10484.23,10512.02,10335.28,10378.03,2548150000,10378.03
+2005-09-20,10558.19,10642.26,10453.98,10481.52,2319250000,10481.52
+2005-09-19,10641.87,10656.75,10497.29,10557.63,2076540000,10557.63
+2005-09-16,10560.50,10696.24,10539.64,10641.94,3152470000,10641.94
+2005-09-15,10545.85,10627.85,10488.05,10558.75,2079340000,10558.75
+2005-09-14,10545.85,10627.85,10488.05,10558.75,1986750000,10558.75
+2005-09-13,10673.71,10701.57,10561.61,10597.44,2082360000,10597.44
+2005-09-12,10678.41,10743.77,10618.13,10682.94,1938050000,10682.94
+2005-09-09,10594.10,10727.53,10573.47,10678.56,1992560000,10678.56
+2005-09-08,10633.11,10670.60,10530.01,10595.93,1955380000,10595.93
+2005-09-07,10588.68,10667.10,10534.23,10633.50,2067700000,10633.50
+2005-09-06,10447.69,10621.96,10447.69,10589.24,1932090000,10589.24
+2005-09-02,10460.67,10536.14,10400.88,10447.37,1640160000,10447.37
+2005-09-01,10481.44,10557.47,10382.09,10459.63,2229860000,10459.63
+2005-08-31,10415.84,10484.55,10357.65,10481.60,2365510000,10481.60
+2005-08-30,10461.54,10476.83,10329.15,10412.82,1916470000,10412.82
+2005-08-29,10396.90,10508.35,10321.42,10463.05,1599450000,10463.05
+2005-08-26,10450.95,10480.01,10355.02,10397.29,1541090000,10397.29
+2005-08-25,10434.39,10506.60,10391.71,10450.63,1571110000,10450.63
+2005-08-24,10519.34,10584.30,10407.56,10434.87,1930800000,10434.87
+2005-08-23,10571.01,10604.29,10475.63,10519.58,1678620000,10519.58
+2005-08-22,10559.78,10669.81,10509.07,10569.89,1621330000,10569.89
+2005-08-19,10552.70,10656.59,10503.90,10559.23,1558790000,10559.23
+2005-08-18,10531.12,10592.34,10517.67,10554.92,1808170000,10554.92
+2005-08-17,10505.60,10625.86,10472.45,10550.71,1859150000,10550.71
+2005-08-16,10631.59,10650.14,10489.24,10513.45,1820410000,10513.45
+2005-08-15,10599.19,10687.72,10532.48,10634.38,1562880000,10634.38
+2005-08-12,10682.70,10688.68,10549.19,10600.30,1709300000,10600.30
+2005-08-11,10591.83,10721.56,10549.43,10685.89,1941560000,10685.89
+2005-08-10,10606.52,10746.87,10553.81,10594.41,2172320000,10594.41
+2005-08-09,10537.65,10662.80,10537.01,10615.67,1897520000,10615.67
+2005-08-08,10557.24,10635.65,10497.45,10536.93,1804140000,10536.93
+2005-08-05,10610.34,10643.46,10512.49,10558.03,1930280000,10558.03
+2005-08-04,10696.80,10709.77,10568.70,10610.10,1981220000,10610.10
+2005-08-03,10681.51,10735.17,10600.02,10697.59,1999980000,10697.59
+2005-08-02,10623.79,10729.60,10600.62,10683.74,2043120000,10683.74
+2005-08-01,10641.78,10713.51,10578.97,10623.15,1716870000,10623.15
+2005-07-29,10705.16,10754.60,10608.27,10640.91,1789600000,10640.91
+2005-07-28,10633.50,10745.68,10603.49,10705.55,2001680000,10705.55
+2005-07-27,10579.45,10689.31,10530.50,10637.09,1945800000,10637.09
+2005-07-26,10597.60,10667.90,10535.58,10579.77,1934180000,10579.77
+2005-07-25,10651.66,10709.69,10565.12,10596.48,1717580000,10596.48
+2005-07-22,10624.19,10702.21,10552.54,10651.18,1766990000,10651.18
+2005-07-21,10690.03,10735.33,10567.98,10627.77,2129840000,10627.77
+2005-07-20,10629.52,10726.81,10535.10,10689.15,2063340000,10689.15
+2005-07-19,10576.90,10718.69,10573.00,10646.56,2041280000,10646.56
+2005-07-18,10640.19,10681.99,10533.59,10574.99,1582100000,10574.99
+2005-07-15,10629.44,10698.07,10559.46,10640.83,1716400000,10640.83
+2005-07-14,10559.86,10696.96,10559.86,10628.88,2048710000,10628.88
+2005-07-13,10513.36,10596.98,10481.36,10557.39,1812500000,10557.39
+2005-07-12,10519.49,10583.02,10444.46,10513.89,1932010000,10513.89
+2005-07-11,10449.60,10570.67,10425.97,10519.72,1846300000,10519.72
+2005-07-08,10302.90,10486.50,10279.65,10449.14,1900810000,10449.14
+2005-07-07,10269.76,10337.84,10142.24,10302.29,1952440000,10302.29
+2005-07-06,10366.52,10413.23,10242.21,10270.68,1883470000,10270.68
+2005-07-05,10292.62,10388.91,10282.64,10371.80,1805820000,10371.80
+2005-07-01,10273.59,10380.78,10239.91,10303.44,1593820000,10303.44
+2005-06-30,10374.18,10458.19,10253.49,10274.97,2109490000,10274.97
+2005-06-29,10405.94,10472.46,10332.52,10374.48,1769280000,10374.48
+2005-06-28,10291.01,10434.18,10285.86,10405.63,1772410000,10405.63
+2005-06-27,10298.07,10377.55,10229.40,10290.78,1738620000,10290.78
+2005-06-24,10422.28,10452.82,10266.30,10297.83,2418800000,10297.83
+2005-06-23,10587.09,10617.39,10401.49,10421.44,2029920000,10421.44
+2005-06-22,10599.36,10676.24,10543.28,10587.93,1823250000,10587.93
+2005-06-21,10608.88,10670.56,10545.89,10599.67,1720700000,10599.67
+2005-06-20,10621.54,10656.66,10539.21,10609.10,1714530000,10609.10
+2005-06-17,10580.41,10710.38,10561.00,10623.07,2407370000,10623.07
+2005-06-16,10566.76,10632.20,10501.92,10578.65,1776040000,10578.65
+2005-06-15,10548.65,10628.67,10471.69,10566.37,1840440000,10566.37
+2005-06-14,10521.95,10617.01,10473.92,10547.57,1698150000,10547.57
+2005-06-13,10503.57,10611.10,10437.32,10522.56,1661350000,10522.56
+2005-06-10,10503.02,10581.13,10410.50,10512.63,1664180000,10512.63
+2005-06-09,10477.75,10556.90,10410.80,10503.02,1824120000,10503.02
+2005-06-08,10484.84,10575.81,10439.77,10476.86,1715490000,10476.86
+2005-06-07,10466.00,10603.15,10454.18,10483.07,1851370000,10483.07
+2005-06-06,10461.64,10519.79,10410.28,10467.03,1547120000,10467.03
+2005-06-03,10552.82,10572.18,10427.35,10460.97,1627520000,10460.97
+2005-06-02,10548.83,10590.07,10478.26,10553.49,1813790000,10553.49
+2005-06-01,10462.86,10616.15,10433.48,10549.87,1810100000,10549.87
+2005-05-31,10541.89,10574.92,10437.77,10467.48,1840680000,10467.48
+2005-05-27,10537.08,10579.94,10489.35,10542.55,1381430000,10542.55
+2005-05-26,10458.68,10581.87,10450.55,10537.60,1654110000,10537.60
+2005-05-25,10503.17,10516.17,10396.46,10457.80,1742180000,10457.80
+2005-05-24,10522.68,10550.24,10433.78,10503.68,1681000000,10503.68
+2005-05-23,10472.80,10589.92,10438.36,10523.56,1681170000,10523.56
+2005-05-20,10492.75,10535.24,10400.60,10471.91,1631750000,10471.91
+2005-05-19,10464.45,10538.71,10394.39,10493.19,1775860000,10493.19
+2005-05-18,10323.19,10518.17,10323.19,10464.45,2266320000,10464.45
+2005-05-17,10247.49,10357.30,10175.81,10331.88,1887260000,10331.88
+2005-05-16,10139.61,10274.39,10118.32,10252.29,1856860000,10252.29
+2005-05-13,10188.23,10268.85,10062.76,10140.12,2188590000,10140.12
+2005-05-12,10299.74,10357.37,10155.86,10189.48,1995290000,10189.48
+2005-05-11,10272.91,10355.31,10172.86,10300.25,1834970000,10300.25
+2005-05-10,10382.94,10389.96,10230.35,10281.11,1889660000,10281.11
+2005-05-09,10345.40,10416.56,10288.95,10384.34,1857020000,10384.34
+2005-05-06,10339.71,10454.40,10300.70,10345.40,1707200000,10345.40
+2005-05-05,10384.49,10447.08,10276.75,10340.38,1997100000,10340.38
+2005-05-04,10255.25,10412.20,10239.95,10384.64,2306480000,10384.64
+2005-05-03,10251.04,10327.37,10169.39,10256.95,2167020000,10256.95
+2005-05-02,10192.00,10309.86,10149.06,10251.70,1980040000,10251.70
+2005-04-29,10073.47,10231.31,10021.23,10192.51,2362360000,10192.51
+2005-04-28,10194.58,10229.09,10036.74,10070.37,2182270000,10070.37
+2005-04-27,10150.32,10250.23,10048.27,10198.80,2151520000,10198.80
+2005-04-26,10240.99,10298.85,10108.79,10151.13,1959740000,10151.13
+2005-04-25,10158.52,10305.87,10148.25,10242.47,1795030000,10242.47
+2005-04-22,10216.68,10266.48,10055.29,10157.71,2045880000,10157.71
+2005-04-21,10010.51,10250.30,10010.51,10218.60,2308560000,10218.60
+2005-04-20,10131.18,10232.34,9978.74,10012.36,2217050000,10012.36
+2005-04-19,10071.55,10220.21,10021.08,10127.41,2142700000,10127.41
+2005-04-18,10088.54,10183.50,9961.52,10071.25,2180670000,10071.25
+2005-04-15,10276.61,10311.26,10059.36,10087.51,2689960000,10087.51
+2005-04-14,10403.71,10457.06,10248.23,10278.75,2355040000,10278.75
+2005-04-13,10507.45,10567.38,10355.16,10403.93,2049740000,10403.93
+2005-04-12,10448.63,10552.60,10331.21,10507.97,1979830000,10507.97
+2005-04-11,10462.08,10530.58,10393.36,10448.56,1525310000,10448.56
+2005-04-08,10546.32,10584.60,10445.31,10461.34,1661330000,10461.34
+2005-04-07,10485.88,10589.99,10434.30,10546.32,1900620000,10546.32
+2005-04-06,10453.45,10557.18,10434.22,10486.02,1797400000,10486.02
+2005-04-05,10421.14,10530.14,10372.59,10458.46,1870800000,10458.46
+2005-04-04,10401.71,10496.44,10307.64,10421.14,2079770000,10421.14
+2005-04-01,10504.57,10600.56,10349.02,10404.30,2168690000,10404.30
+2005-03-31,10541.59,10586.15,10448.19,10503.76,2214230000,10503.76
+2005-03-30,10405.77,10564.80,10395.21,10540.93,2097110000,10540.93
+2005-03-29,10486.10,10565.46,10351.76,10405.70,2223250000,10405.70
+2005-03-28,10444.13,10568.05,10412.79,10485.65,1746220000,10485.65
+2005-03-24,10457.06,10554.60,10415.16,10442.87,1721720000,10442.87
+2005-03-23,10470.58,10558.51,10384.34,10456.02,2246870000,10456.02
+2005-03-22,10565.39,10651.41,10446.78,10470.51,2114470000,10470.51
+2005-03-21,10629.90,10662.93,10503.46,10565.39,1819440000,10565.39
+2005-03-18,10627.83,10709.85,10520.60,10629.67,2344370000,10629.67
+2005-03-17,10633.30,10707.86,10561.10,10626.35,1581930000,10626.35
+2005-03-16,10741.63,10764.16,10569.30,10633.07,1653190000,10633.07
+2005-03-15,10804.29,10884.76,10716.87,10745.10,1513530000,10745.10
+2005-03-14,10773.92,10859.12,10709.26,10804.51,1437430000,10804.51
+2005-03-11,10845.30,10897.68,10728.62,10774.36,1449820000,10774.36
+2005-03-10,10806.28,10907.45,10757.36,10851.51,1604020000,10851.51
+2005-03-09,10912.32,10949.20,10768.66,10805.62,1704970000,10805.62
+2005-03-08,10935.60,10996.56,10863.40,10912.62,1523090000,10912.62
+2005-03-07,10940.55,11027.15,10886.09,10936.86,1488830000,10936.86
+2005-03-04,10834.51,10996.93,10834.51,10940.55,1636820000,10940.55
+2005-03-03,10812.27,10904.34,10744.14,10833.03,1616240000,10833.03
+2005-03-02,10825.68,10896.66,10736.16,10811.97,1568540000,10811.97
+2005-03-01,10794.98,10849.14,10769.04,10830.00,1708060000,10830.00
+2005-02-28,10842.05,10877.07,10709.41,10766.23,1795480000,10766.23
+2005-02-25,10748.42,10871.53,10698.32,10841.60,1523680000,10841.60
+2005-02-24,10672.24,10779.39,10612.24,10748.79,1518750000,10748.79
+2005-02-23,10609.28,10735.42,10583.64,10673.79,1501090000,10673.79
+2005-02-22,10783.38,10806.36,10596.79,10611.20,1744940000,10611.20
+2005-02-18,10755.15,10854.98,10682.29,10785.22,1551200000,10785.22
+2005-02-17,10835.03,10873.60,10729.95,10754.26,1580120000,10754.26
+2005-02-16,10832.03,10889.78,10746.21,10834.88,1490100000,10834.88
+2005-02-15,10791.06,10886.31,10745.10,10837.32,1527080000,10837.32
+2005-02-14,10795.72,10853.80,10722.63,10791.13,1290180000,10791.13
+2005-02-11,10742.92,10865.69,10680.15,10796.01,1562300000,10796.01
+2005-02-10,10665.00,10803.92,10633.67,10749.61,1491670000,10749.61
+2005-02-09,10717.76,10781.38,10621.84,10664.11,1511040000,10664.11
+2005-02-08,10712.51,10783.97,10647.85,10724.63,1416170000,10724.63
+2005-02-07,10715.76,10774.80,10650.59,10715.76,1347270000,10715.76
+2005-02-04,10593.17,10750.94,10553.93,10716.13,1648160000,10716.13
+2005-02-03,10592.21,10640.69,10511.96,10593.10,1554460000,10593.10
+2005-02-02,10551.05,10638.25,10501.02,10596.79,1561740000,10596.79
+2005-02-01,10489.72,10609.73,10464.38,10551.94,1681980000,10551.94
+2005-01-31,10428.76,10559.77,10414.49,10489.94,1679800000,10489.94
+2005-01-28,10470.58,10520.61,10331.58,10427.20,1641800000,10427.20
+2005-01-27,10498.14,10535.16,10379.47,10467.40,1600600000,10467.40
+2005-01-26,10463.19,10571.66,10433.56,10498.59,1635900000,10498.59
+2005-01-25,10369.42,10534.72,10369.42,10461.56,1610400000,10461.56
+2005-01-24,10393.58,10491.71,10317.10,10368.61,1494600000,10368.61
+2005-01-21,10471.98,10541.30,10370.97,10392.99,1643500000,10392.99
+2005-01-20,10538.90,10582.09,10414.72,10471.47,1692000000,10471.47
+2005-01-19,10626.05,10668.40,10519.20,10539.97,1498700000,10539.97
+2005-01-18,10554.23,10665.44,10456.61,10628.79,1596800000,10628.79
+2005-01-14,10506.71,10606.47,10475.01,10558.00,1335400000,10558.00
+2005-01-13,10617.41,10650.96,10463.26,10505.83,1510300000,10505.83
+2005-01-12,10561.32,10648.52,10481.37,10617.78,1562100000,10617.78
+2005-01-11,10619.77,10632.63,10504.72,10556.22,1488800000,10556.22
+2005-01-10,10603.44,10696.85,10544.99,10621.03,1490400000,10621.03
+2005-01-07,10624.80,10697.81,10545.80,10603.96,1477900000,10603.96
+2005-01-06,10593.19,10708.37,10555.48,10622.88,1569100000,10622.88
+2005-01-05,10629.53,10736.16,10561.03,10597.83,1738900000,10597.83
+2005-01-04,10727.81,10803.62,10587.48,10630.78,1720200000,10630.78
+2005-01-03,10783.75,10892.67,10694.18,10729.43,1505900000,10729.43
+2004-12-31,10800.30,10849.81,10759.94,10783.01,786900000,10783.01
+2004-12-30,10829.12,10880.03,10781.67,10800.30,829800000,10800.30
+2004-12-29,10853.72,10872.71,10771.26,10829.19,924900000,10829.19
+2004-12-28,10776.06,10890.82,10774.51,10854.54,984200000,10854.54
+2004-12-27,10828.01,10892.52,10755.67,10776.13,922000000,10776.13
+2004-12-23,10815.00,10895.10,10780.12,10827.12,956100000,10827.12
+2004-12-22,10752.34,10861.33,10709.78,10815.89,1390800000,10815.89
+2004-12-21,10661.89,10789.66,10646.60,10759.43,1483700000,10759.43
+2004-12-20,10652.14,10769.13,10622.20,10661.60,1422800000,10661.60
+2004-12-17,10704.83,10766.01,10562.76,10649.92,2335000000,10649.92
+2004-12-16,10691.71,10776.43,10612.31,10705.64,1793900000,10705.64
+2004-12-15,10675.71,10749.53,10601.74,10691.45,1695800000,10691.45
+2004-12-14,10640.53,10715.76,10571.67,10676.45,1544400000,10676.45
+2004-12-13,10543.44,10678.52,10520.61,10638.32,1436100000,10638.32
+2004-12-10,10552.16,10616.23,10469.62,10543.22,1443700000,10543.22
+2004-12-09,10492.45,10579.94,10389.81,10552.82,1624700000,10552.82
+2004-12-08,10438.77,10550.16,10395.05,10494.23,1525200000,10494.23
+2004-12-07,10546.80,10612.90,10423.21,10440.58,1533900000,10440.58
+2004-12-06,10591.32,10614.82,10490.31,10547.06,1354400000,10547.06
+2004-12-03,10597.90,10670.47,10515.73,10592.21,1566700000,10592.21
+2004-12-02,10590.44,10670.02,10485.21,10585.12,1774900000,10585.12
+2004-12-01,10425.80,10618.59,10421.66,10590.22,1772800000,10590.22
+2004-11-30,10475.27,10530.80,10380.58,10428.02,1553500000,10428.02
+2004-11-29,10520.64,10590.73,10390.92,10475.90,1378500000,10475.90
+2004-11-26,10518.69,10574.70,10479.52,10522.23,504580000,10522.23
+2004-11-24,10493.86,10565.76,10451.66,10520.31,1149600000,10520.31
+2004-11-23,10486.69,10547.28,10407.18,10492.60,1428300000,10492.60
+2004-11-22,10455.73,10535.46,10380.95,10489.42,1392700000,10489.42
+2004-11-19,10571.63,10588.29,10419.89,10456.91,1526600000,10456.91
+2004-11-18,10549.20,10639.43,10499.62,10572.55,1456700000,10572.55
+2004-11-17,10481.83,10655.09,10470.21,10549.57,1684200000,10549.57
+2004-11-16,10549.79,10570.56,10445.31,10487.65,1364400000,10487.65
+2004-11-15,10541.89,10612.31,10463.34,10550.24,1453300000,10550.24
+2004-11-12,10469.21,10565.48,10419.77,10539.01,1531600000,10539.01
+2004-11-11,10386.95,10513.42,10364.10,10469.84,1393000000,10469.84
+2004-11-10,10378.59,10470.21,10330.54,10385.48,1504300000,10385.48
+2004-11-09,10387.62,10466.81,10327.00,10386.37,1450800000,10386.37
+2004-11-08,10385.15,10452.58,10313.51,10391.31,1358700000,10391.31
+2004-11-05,10317.05,10458.10,10279.96,10387.54,1724400000,10387.54
+2004-11-04,10132.48,10352.81,10076.36,10314.76,1782700000,10314.76
+2004-11-03,10137.05,10253.27,10062.80,10137.05,1767500000,10137.05
+2004-11-02,10053.87,10180.85,9976.29,10035.73,1659000000,10035.73
+2004-11-01,10028.73,10124.44,9953.29,10054.39,1395900000,10054.39
+2004-10-29,10004.69,10083.44,9936.77,10027.47,1500800000,10027.47
+2004-10-28,9998.94,10074.89,9900.42,10004.54,1628200000,10004.54
+2004-10-27,9888.25,10051.96,9807.80,10002.03,1741900000,10002.03
+2004-10-26,9750.59,9914.65,9718.94,9888.48,1685400000,9888.48
+2004-10-25,9757.22,9827.20,9660.18,9749.99,1380500000,9749.99
+2004-10-22,9863.85,9920.99,9732.81,9757.81,1469600000,9757.81
+2004-10-21,9884.65,9969.07,9769.16,9865.76,1673000000,9865.76
+2004-10-20,9895.19,9957.05,9766.95,9886.93,1685700000,9886.93
+2004-10-19,9958.38,10064.20,9854.19,9897.62,1737500000,9897.62
+2004-10-18,9932.98,10002.18,9816.73,9956.32,1373300000,9956.32
+2004-10-15,9895.63,10022.31,9845.56,9933.38,1645100000,9933.38
+2004-10-14,10002.54,10048.48,9837.22,9894.45,1489500000,9894.45
+2004-10-13,10085.21,10157.11,9935.08,10002.33,1546200000,10002.33
+2004-10-12,10080.42,10121.49,9985.44,10077.18,1320100000,10077.18
+2004-10-11,10056.09,10142.74,10017.67,10081.97,943800000,10081.97
+2004-10-08,10124.11,10177.53,10013.91,10055.20,1291600000,10055.20
+2004-10-07,10239.84,10267.57,10086.83,10125.40,1447500000,10125.40
+2004-10-06,10170.70,10267.14,10112.20,10239.92,1416700000,10239.92
+2004-10-05,10216.76,10253.93,10123.19,10177.68,1418400000,10177.68
+2004-10-04,10191.40,10313.81,10153.79,10216.54,1534000000,10216.54
+2004-10-01,10082.04,10237.05,10081.38,10192.65,1582200000,10192.65
+2004-09-30,10136.38,10155.49,9987.36,10080.27,1748000000,10080.27
+2004-09-29,10078.06,10160.50,10002.57,10136.24,1402900000,10136.24
+2004-09-28,9989.73,10132.04,9950.71,10077.40,1396600000,10077.40
+2004-09-27,10046.65,10077.32,9952.78,9988.54,1263500000,9988.54
+2004-09-24,10039.42,10111.39,9993.92,10047.24,1255400000,10047.24
+2004-09-23,10108.29,10134.84,9999.67,10038.90,1286300000,10038.90
+2004-09-22,10244.05,10244.05,10075.33,10109.18,1379900000,10109.18
+2004-09-21,10204.52,10291.39,10159.54,10244.93,1325000000,10244.93
+2004-09-20,10283.87,10293.23,10152.90,10204.89,1197600000,10204.89
+2004-09-17,10245.82,10352.37,10219.71,10284.46,1422600000,10284.46
+2004-09-16,10231.59,10315.72,10194.35,10244.49,1113900000,10244.49
+2004-09-15,10316.90,10324.87,10195.60,10231.36,1256000000,10231.36
+2004-09-14,10315.13,10374.79,10260.93,10318.16,1204500000,10318.16
+2004-09-13,10306.65,10380.47,10250.61,10314.76,1299800000,10314.76
+2004-09-10,10289.47,10348.68,10196.19,10313.07,1261200000,10313.07
+2004-09-09,10313.36,10337.33,10269.49,10289.10,1371300000,10289.10
+2004-09-08,10342.42,10390.64,10267.94,10313.36,1246300000,10313.36
+2004-09-07,10261.52,10388.95,10255.62,10341.16,1214400000,10341.16
+2004-09-03,10277.82,10346.99,10229.52,10260.20,924170000,10260.20
+2004-09-02,10168.39,10312.99,10129.01,10290.28,1118400000,10290.28
+2004-09-01,10170.12,10230.48,10092.37,10168.46,1142100000,10168.46
+2004-08-31,10121.97,10198.03,10056.09,10173.92,1138200000,10173.92
+2004-08-30,10193.83,10226.87,10110.43,10122.52,843100000,10122.52
+2004-08-27,10174.07,10235.49,10143.91,10195.01,845400000,10195.01
+2004-08-26,10181.07,10225.61,10124.88,10173.41,1023600000,10173.41
+2004-08-25,10098.49,10224.29,10041.93,10181.74,1192200000,10181.74
+2004-08-24,10074.89,10165.07,10044.66,10098.63,1092500000,10098.63
+2004-08-23,10111.10,10159.54,10046.72,10073.05,1021900000,10073.05
+2004-08-20,10040.81,10143.76,9989.65,10110.14,1199900000,10110.14
+2004-08-19,10082.78,10111.91,9972.39,10040.82,1249400000,10040.82
+2004-08-18,9964.22,10097.01,9910.82,10083.15,1282500000,10083.15
+2004-08-17,9955.50,10053.21,9916.05,9972.83,1267800000,9972.83
+2004-08-16,9825.35,9987.58,9807.44,9954.55,1206200000,9954.55
+2004-08-13,9814.11,9897.34,9746.60,9825.35,1175100000,9825.35
+2004-08-12,9936.48,9940.02,9780.52,9814.59,1405100000,9814.59
+2004-08-11,9931.24,9981.61,9804.63,9938.32,1410400000,9938.32
+2004-08-10,9815.55,9961.70,9798.44,9944.67,1245600000,9944.67
+2004-08-09,9816.14,9902.49,9773.74,9814.66,1086000000,9814.66
+2004-08-06,9960.67,9963.47,9767.54,9815.33,1521000000,9815.33
+2004-08-05,10127.10,10158.44,9945.84,9963.03,1397400000,9963.03
+2004-08-04,10117.96,10186.16,10029.02,10126.51,1369200000,10126.51
+2004-08-03,10178.27,10228.49,10064.57,10120.24,1338300000,10120.24
+2004-08-02,10138.45,10224.29,10063.75,10179.16,1276000000,10179.16
+2004-07-30,10129.12,10194.13,10045.76,10139.71,1298200000,10139.71
+2004-07-29,10115.52,10213.08,10049.74,10129.24,1530100000,10129.24
+2004-07-28,10084.03,10170.31,9966.34,10117.07,1554300000,10117.07
+2004-07-27,9963.54,10133.95,9942.75,10085.14,1610800000,10085.14
+2004-07-26,9964.71,10054.32,9874.38,9961.92,1413400000,9961.92
+2004-07-23,10045.46,10069.51,9893.93,9962.22,1337500000,9962.22
+2004-07-22,10047.60,10114.41,9906.62,10050.33,1680800000,10050.33
+2004-07-21,10156.30,10279.96,10027.92,10046.13,1679500000,10046.13
+2004-07-20,10094.43,10186.90,10031.24,10149.07,1445800000,10149.07
+2004-07-19,10140.95,10211.60,10027.33,10094.06,1319900000,10094.06
+2004-07-16,10162.34,10289.40,10095.32,10139.78,1450300000,10139.78
+2004-07-15,10208.20,10275.27,10115.81,10163.16,1408700000,10163.16
+2004-07-14,10232.84,10313.95,10129.31,10208.80,1462000000,10208.80
+2004-07-13,10238.37,10297.58,10188.45,10247.59,1199700000,10247.59
+2004-07-12,10211.75,10284.39,10130.42,10238.22,1114600000,10238.22
+2004-07-09,10173.12,10277.16,10150.32,10213.22,1186300000,10213.22
+2004-07-08,10238.52,10297.73,10134.99,10171.56,1401100000,10171.56
+2004-07-07,10211.92,10300.53,10156.45,10240.29,1328600000,10240.29
+2004-07-06,10280.26,10308.43,10163.60,10219.34,1283300000,10219.34
+2004-07-02,10334.00,10371.40,10228.71,10282.83,1085000000,10282.83
+2004-07-01,10434.00,10473.23,10255.55,10334.16,1495700000,10334.16
+2004-06-30,10413.43,10489.16,10348.98,10435.48,1473800000,10435.48
+2004-06-29,10356.35,10460.25,10315.65,10413.43,1375000000,10413.43
+2004-06-28,10377.52,10505.16,10317.64,10357.09,1354600000,10357.09
+2004-06-25,10444.24,10514.67,10329.88,10371.84,1812900000,10371.84
+2004-06-24,10477.43,10530.01,10398.16,10443.81,1394900000,10443.81
+2004-06-23,10395.14,10498.67,10323.32,10479.57,1444200000,10479.57
+2004-06-22,10370.21,10431.05,10284.24,10395.07,1382300000,10395.07
+2004-06-21,10417.82,10471.76,10336.44,10371.47,1123900000,10371.47
+2004-06-18,10375.82,10471.84,10328.20,10416.41,1500600000,10416.41
+2004-06-17,10378.59,10417.69,10308.25,10377.52,1296700000,10377.52
+2004-06-16,10380.23,10433.52,10320.60,10379.58,1168400000,10379.58
+2004-06-15,10336.51,10464.04,10319.89,10380.43,1345900000,10380.43
+2004-06-14,10401.23,10403.50,10283.48,10334.73,1179400000,10334.73
+2004-06-10,10367.80,10448.00,10333.94,10410.10,1160600000,10410.10
+2004-06-09,10431.10,10466.59,10325.07,10368.44,1276800000,10368.44
+2004-06-08,10389.41,10462.97,10323.94,10432.52,1190300000,10432.52
+2004-06-07,10243.31,10410.81,10243.31,10391.08,1211800000,10391.08
+2004-06-04,10196.83,10327.84,10196.83,10242.82,1115300000,10242.82
+2004-06-03,10261.85,10309.46,10163.40,10195.91,1232400000,10195.91
+2004-06-02,10199.78,10310.10,10170.57,10262.97,1251700000,10262.97
+2004-06-01,10187.18,10254.17,10104.07,10202.65,1238000000,10202.65
+2004-05-28,10205.83,10250.27,10137.14,10188.45,1172600000,10188.45
+2004-05-27,10109.89,10267.66,10106.13,10205.20,1447500000,10205.20
+2004-05-26,10116.84,10175.75,10034.16,10109.89,1369400000,10109.89
+2004-05-25,9958.08,10139.27,9895.41,10117.62,1545700000,10117.62
+2004-05-24,9968.02,10084.91,9891.22,9958.43,1227500000,9958.43
+2004-05-21,9939.34,10058.50,9910.81,9966.74,1258600000,9966.74
+2004-05-20,9939.12,10014.50,9867.73,9937.64,1211000000,9937.64
+2004-05-19,9962.55,10124.79,9919.90,9937.71,1548600000,9937.71
+2004-05-18,9906.71,10028.27,9895.77,9968.51,1353000000,9968.51
+2004-05-17,10009.92,10009.92,9827.21,9906.91,1430100000,9906.91
+2004-05-14,10008.43,10096.69,9912.45,10012.87,1335900000,10012.87
+2004-05-13,10044.31,10100.24,9924.94,10010.74,1411100000,10010.74
+2004-05-12,10011.52,10089.87,9822.10,10045.16,1697600000,10045.16
+2004-05-11,9989.24,10092.78,9928.91,10019.47,1533800000,10019.47
+2004-05-10,10116.28,10116.28,9881.86,9990.02,1918400000,9990.02
+2004-05-07,10240.62,10302.93,10086.94,10117.34,1653600000,10117.34
+2004-05-06,10308.20,10332.10,10147.21,10241.26,1509300000,10241.26
+2004-05-05,10316.98,10382.98,10249.63,10310.95,1469000000,10310.95
+2004-05-04,10314.32,10403.14,10232.31,10317.20,1662100000,10317.20
+2004-05-03,10227.27,10365.74,10199.67,10314.00,1571600000,10314.00
+2004-04-30,10273.06,10374.61,10198.39,10225.57,1634700000,10225.57
+2004-04-29,10339.41,10443.81,10199.31,10272.27,1859000000,10272.27
+2004-04-28,10476.67,10479.58,10301.65,10342.60,1855600000,10342.60
+2004-04-27,10445.38,10570.92,10410.52,10478.16,1518000000,10478.16
+2004-04-26,10472.91,10540.26,10396.75,10444.73,1290600000,10444.73
+2004-04-23,10463.11,10543.95,10362.97,10472.84,1396100000,10472.84
+2004-04-22,10314.99,10529.12,10255.88,10461.20,1826700000,10461.20
+2004-04-21,10311.87,10398.53,10200.38,10317.27,1738100000,10317.27
+2004-04-20,10437.85,10530.61,10297.39,10314.50,1508500000,10314.50
+2004-04-19,10451.62,10501.79,10351.97,10437.85,1194900000,10437.85
+2004-04-16,10398.32,10500.57,10343.74,10451.97,1487800000,10451.97
+2004-04-15,10377.95,10481.21,10279.37,10397.46,1568700000,10397.46
+2004-04-14,10378.10,10453.39,10259.35,10377.95,1547700000,10377.95
+2004-04-13,10516.05,10572.13,10343.17,10381.28,1423200000,10381.28
+2004-04-12,10444.38,10559.28,10439.27,10515.56,1102400000,10515.56
+2004-04-08,10482.77,10590.15,10383.84,10442.03,1199800000,10442.03
+2004-04-07,10569.26,10580.51,10422.74,10480.15,1458800000,10480.15
+2004-04-06,10553.76,10596.37,10467.26,10570.81,1397700000,10570.81
+2004-04-05,10470.59,10582.22,10423.33,10558.37,1413700000,10558.37
+2004-04-02,10375.33,10548.74,10375.33,10470.59,1629200000,10470.59
+2004-04-01,10357.52,10449.33,10299.48,10373.33,1560700000,10373.33
+2004-03-31,10380.89,10428.59,10287.11,10357.70,1560700000,10357.70
+2004-03-30,10327.63,10411.41,10264.15,10381.70,1332400000,10381.70
+2004-03-29,10212.91,10389.93,10212.91,10329.63,1405500000,10329.63
+2004-03-26,10218.37,10306.22,10145.63,10212.97,1319100000,10212.97
+2004-03-25,10049.56,10246.15,10049.56,10218.82,1471700000,10218.82
+2004-03-24,10065.41,10140.23,9975.86,10048.23,1527800000,10048.23
+2004-03-23,10066.67,10177.04,10020.75,10063.64,1458200000,10063.64
+2004-03-22,10185.93,10185.93,9985.19,10064.75,1452300000,10064.75
+2004-03-19,10295.85,10355.41,10163.71,10186.60,1457400000,10186.60
+2004-03-18,10298.96,10355.04,10187.78,10295.78,1369200000,10295.78
+2004-03-17,10184.30,10356.59,10184.30,10300.30,1490100000,10300.30
+2004-03-16,10103.41,10253.26,10085.34,10184.67,1500700000,10184.67
+2004-03-15,10238.45,10252.68,10066.08,10102.89,1600600000,10102.89
+2004-03-12,10130.67,10281.63,10097.04,10240.08,1388500000,10240.08
+2004-03-11,10288.85,10356.22,10102.75,10128.38,1889900000,10128.38
+2004-03-10,10457.59,10523.11,10259.34,10296.89,1648400000,10296.89
+2004-03-09,10529.52,10567.03,10391.48,10456.96,1499400000,10456.96
+2004-03-08,10595.37,10677.85,10505.85,10529.48,1254400000,10529.48
+2004-03-05,10582.59,10681.40,10497.11,10595.55,1398200000,10595.55
+2004-03-04,10593.48,10645.33,10522.59,10588.00,1265800000,10588.00
+2004-03-03,10588.59,10651.03,10506.66,10593.11,1334500000,10593.11
+2004-03-02,10678.36,10713.92,10539.40,10591.48,1476000000,10591.48
+2004-03-01,10582.25,10720.14,10568.74,10678.14,1497100000,10678.14
+2004-02-27,10581.55,10689.55,10519.03,10583.92,1540400000,10583.92
+2004-02-26,10598.14,10652.96,10493.70,10580.14,1383900000,10580.14
+2004-02-25,10566.59,10660.73,10509.40,10601.62,1360700000,10601.62
+2004-02-24,10609.55,10681.40,10479.33,10566.37,1543600000,10566.37
+2004-02-23,10619.55,10711.84,10508.89,10609.62,1380400000,10609.62
+2004-02-20,10666.29,10722.77,10559.11,10619.03,1479600000,10619.03
+2004-02-19,10674.59,10794.95,10626.44,10664.73,1562800000,10664.73
+2004-02-18,10706.68,10764.36,10623.62,10671.99,1382400000,10671.99
+2004-02-17,10628.88,10762.07,10628.88,10714.88,1396500000,10714.88
+2004-02-13,10696.22,10755.47,10578.66,10627.85,1329200000,10627.85
+2004-02-12,10735.18,10775.03,10636.44,10694.07,1464300000,10694.07
+2004-02-11,10605.48,10779.40,10561.55,10737.70,1699300000,10737.70
+2004-02-10,10578.74,10667.03,10511.18,10613.85,1403900000,10613.85
+2004-02-09,10592.00,10634.81,10433.70,10579.03,1303500000,10579.03
+2004-02-06,10494.89,10634.81,10433.70,10593.03,1477600000,10593.03
+2004-02-05,10469.33,10566.37,10399.92,10495.55,1566600000,10495.55
+2004-02-04,10503.11,10567.85,10394.81,10470.74,1634800000,10470.74
+2004-02-03,10499.48,10571.48,10414.15,10505.18,1476900000,10505.18
+2004-02-02,10487.78,10614.44,10395.55,10499.18,1599200000,10499.18
+2004-01-30,10510.22,10551.03,10385.56,10488.07,1635000000,10488.07
+2004-01-29,10467.41,10611.56,10369.92,10510.29,1921900000,10510.29
+2004-01-28,10610.07,10703.25,10412.44,10468.37,1842000000,10468.37
+2004-01-27,10701.10,10748.81,10579.33,10609.92,1673100000,10609.92
+2004-01-26,10568.00,10725.18,10510.44,10702.51,1480600000,10702.51
+2004-01-23,10625.25,10691.77,10490.14,10568.29,1561200000,10568.29
+2004-01-22,10624.22,10717.40,10545.03,10623.18,1693700000,10623.18
+2004-01-21,10522.77,10665.70,10453.11,10623.62,1757600000,10623.62
+2004-01-20,10601.40,10676.96,10447.92,10528.66,1698200000,10528.66
+2004-01-16,10556.37,10666.88,10503.70,10600.51,1721100000,10600.51
+2004-01-15,10534.52,10639.03,10454.52,10553.85,1695000000,10553.85
+2004-01-14,10428.67,10573.85,10426.89,10538.37,1514600000,10538.37
+2004-01-13,10485.18,10539.25,10341.19,10427.18,1595900000,10427.18
+2004-01-12,10461.55,10543.03,10389.85,10485.18,1510200000,10485.18
+2004-01-09,10589.25,10603.48,10420.52,10458.89,1720700000,10458.89
+2004-01-08,10530.07,10651.99,10480.59,10592.44,1868400000,10592.44
+2004-01-07,10535.46,10587.55,10432.00,10529.03,1704900000,10529.03
+2004-01-06,10543.85,10584.07,10454.37,10538.66,1494500000,10538.66
+2004-01-05,10411.85,10575.92,10411.85,10544.07,1578200000,10544.07
+2004-01-02,10452.74,10554.96,10367.41,10409.85,1153200000,10409.85
+2003-12-31,10426.30,10494.44,10382.89,10453.92,1027500000,10453.92
+2003-12-30,10449.70,10493.11,10374.52,10425.04,1012600000,10425.04
+2003-12-29,10321.35,10457.78,10319.70,10450.00,1058800000,10450.00
+2003-12-26,10305.85,10368.89,10282.22,10324.67,356070000,10324.67
+2003-12-24,10341.41,10365.63,10263.04,10305.19,518060000,10305.19
+2003-12-23,10337.56,10421.48,10265.71,10341.26,1145300000,10341.26
+2003-12-22,10276.48,10371.11,10216.08,10338.00,1251700000,10338.00
+2003-12-19,10249.48,10345.44,10189.63,10278.22,1657300000,10278.22
+2003-12-18,10141.41,10278.82,10117.78,10248.08,1579900000,10248.08
+2003-12-17,10128.75,10186.67,10040.08,10145.26,1441700000,10145.26
+2003-12-16,10023.34,10173.19,9986.23,10129.56,1547900000,10129.56
+2003-12-15,10046.53,10180.97,9994.38,10022.82,1520800000,10022.82
+2003-12-12,10008.75,10091.71,9946.60,10042.16,1223100000,10042.16
+2003-12-11,9922.45,10056.97,9896.16,10008.16,1441100000,10008.16
+2003-12-10,9922.38,10000.53,9848.97,9921.86,1444000000,9921.86
+2003-12-09,9966.45,10048.75,9887.57,9923.42,1465500000,9923.42
+2003-12-08,9862.01,9997.34,9824.83,9965.27,1218900000,9965.27
+2003-12-05,9923.27,9954.16,9819.05,9862.68,1265900000,9862.68
+2003-12-04,9874.83,9978.08,9814.97,9930.82,1463100000,9930.82
+2003-12-03,9851.94,9974.45,9824.31,9873.42,1441700000,9873.42
+2003-12-02,9899.64,9936.97,9798.83,9853.64,1383200000,9853.64
+2003-12-01,9785.35,9943.34,9777.64,9899.05,1375000000,9899.05
+2003-11-28,9779.72,9832.16,9733.20,9782.46,487220000,9782.46
+2003-11-26,9763.49,9838.01,9689.05,9779.57,1097700000,9779.57
+2003-11-25,9748.68,9821.94,9679.13,9763.94,1333700000,9763.94
+2003-11-24,9629.87,9788.60,9629.87,9747.79,1302800000,9747.79
+2003-11-21,9622.02,9692.53,9556.68,9628.53,1273800000,9628.53
+2003-11-20,9688.46,9756.09,9576.91,9619.42,1326700000,9619.42
+2003-11-19,9620.68,9731.94,9584.31,9690.46,1326200000,9690.46
+2003-11-18,9711.44,9792.16,9601.35,9624.16,1354300000,9624.16
+2003-11-17,9765.64,9775.35,9603.57,9710.83,1374300000,9710.83
+2003-11-14,9836.46,9919.19,9709.13,9768.68,1356100000,9768.68
+2003-11-13,9846.97,9895.71,9740.53,9837.94,1383000000,9837.94
+2003-11-12,9729.50,9882.60,9700.02,9848.83,1349300000,9848.83
+2003-11-11,9756.53,9801.21,9673.64,9737.79,1162500000,9737.79
+2003-11-10,9807.49,9861.05,9702.46,9756.53,1243600000,9756.53
+2003-11-07,9857.12,9945.71,9770.31,9809.79,1440500000,9809.79
+2003-11-06,9820.68,9888.90,9738.53,9856.97,1453900000,9856.97
+2003-11-05,9837.64,9883.86,9746.98,9820.83,1401800000,9820.83
+2003-11-04,9857.49,9905.94,9770.46,9838.83,1417600000,9838.83
+2003-11-03,9802.46,9936.31,9792.60,9858.46,1378200000,9858.46
+2003-10-31,9786.75,9880.08,9745.94,9801.12,1498900000,9801.12
+2003-10-30,9772.01,9882.97,9719.20,9786.61,1629700000,9786.61
+2003-10-29,9747.05,9830.23,9663.27,9774.53,1562600000,9774.53
+2003-10-28,9609.72,9769.57,9592.54,9748.31,1629200000,9748.31
+2003-10-27,9584.54,9696.98,9553.80,9608.16,1371800000,9608.16
+2003-10-24,9600.98,9631.50,9463.28,9582.46,1420300000,9582.46
+2003-10-23,9597.20,9661.05,9517.50,9613.13,1604300000,9613.13
+2003-10-22,9741.98,9741.98,9551.65,9598.24,1647200000,9598.24
+2003-10-21,9778.31,9824.90,9697.94,9747.64,1498000000,9747.64
+2003-10-20,9721.50,9816.97,9665.35,9777.94,1172600000,9777.94
+2003-10-17,9791.86,9833.12,9679.72,9721.79,1352000000,9721.79
+2003-10-16,9798.68,9838.53,9679.13,9791.72,1417700000,9791.72
+2003-10-15,9824.09,9901.64,9731.57,9803.05,1521100000,9803.05
+2003-10-14,9763.27,9833.42,9696.90,9812.98,1271900000,9812.98
+2003-10-13,9675.72,9814.97,9675.72,9764.38,1040500000,9764.38
+2003-10-10,9682.90,9743.12,9622.31,9674.68,1108100000,9674.68
+2003-10-09,9633.35,9798.08,9617.35,9680.01,1578700000,9680.01
+2003-10-08,9653.33,9699.35,9571.35,9630.90,1262500000,9630.90
+2003-10-07,9593.28,9672.68,9512.76,9654.61,1279500000,9654.61
+2003-10-06,9572.39,9656.09,9524.39,9594.98,1025800000,9594.98
+2003-10-03,9492.54,9701.87,9492.54,9572.31,1570500000,9572.31
+2003-10-02,9464.76,9539.20,9397.87,9487.80,1269300000,9487.80
+2003-10-01,9275.06,9472.69,9275.06,9469.20,1566300000,9469.20
+2003-09-30,9378.10,9393.35,9199.43,9275.06,1590500000,9275.06
+2003-09-29,9314.42,9431.54,9259.68,9380.24,1366500000,9380.24
+2003-09-26,9342.43,9407.89,9257.99,9313.08,1472500000,9313.08
+2003-09-25,9425.58,9493.44,9311.47,9343.96,1530000000,9343.96
+2003-09-24,9575.97,9612.53,9400.67,9425.51,1556000000,9425.51
+2003-09-23,9535.76,9623.34,9479.41,9576.04,1301700000,9576.04
+2003-09-22,9641.80,9641.87,9467.83,9535.41,1278800000,9535.41
+2003-09-19,9661.80,9719.49,9582.64,9644.82,1518600000,9644.82
+2003-09-18,9544.04,9691.55,9513.37,9659.13,1498800000,9659.13
+2003-09-17,9566.08,9641.45,9510.28,9545.65,1338210000,9545.65
+2003-09-16,9449.16,9587.90,9426.84,9567.34,1403200000,9567.34
+2003-09-15,9471.19,9541.02,9396.03,9448.81,1151300000,9448.81
+2003-09-12,9456.88,9517.37,9348.59,9471.55,1236700000,9471.55
+2003-09-11,9415.05,9540.60,9374.49,9459.76,1335900000,9459.76
+2003-09-10,9504.88,9545.51,9373.08,9420.46,1582100000,9420.46
+2003-09-09,9584.92,9617.02,9459.85,9507.20,1414800000,9507.20
+2003-09-08,9503.41,9638.57,9492.25,9586.29,1299300000,9586.29
+2003-09-05,9589.52,9602.22,9441.93,9503.34,1465200000,9503.34
+2003-09-04,9569.09,9661.80,9492.74,9587.90,1453900000,9587.90
+2003-09-03,9521.86,9632.75,9465.72,9568.46,1675600000,9568.46
+2003-09-02,9416.67,9563.83,9357.44,9523.27,1470500000,9523.27
+2003-08-29,9373.33,9444.25,9320.52,9415.82,945100000,9415.82
+2003-08-28,9334.35,9415.68,9246.48,9374.21,1165200000,9374.21
+2003-08-27,9339.82,9387.82,9280.03,9333.79,1051400000,9333.79
+2003-08-26,9316.03,9372.45,9203.54,9340.45,1178700000,9340.45
+2003-08-25,9349.44,9381.51,9242.56,9317.64,971700000,9317.64
+2003-08-22,9436.04,9535.97,9323.26,9348.87,1308900000,9348.87
+2003-08-21,9399.96,9517.37,9345.71,9423.68,1407100000,9423.68
+2003-08-20,9420.13,9454.49,9324.03,9397.51,1210800000,9397.51
+2003-08-19,9412.17,9490.60,9315.25,9428.90,1300600000,9428.90
+2003-08-18,9320.66,9466.79,9309.16,9412.45,1127600000,9412.45
+2003-08-15,9308.52,9360.27,9253.20,9321.69,636370000,9321.69
+2003-08-14,9272.25,9356.63,9193.33,9310.56,1186800000,9310.56
+2003-08-13,9303.69,9350.19,9213.43,9271.76,1208800000,9271.76
+2003-08-12,9218.12,9329.04,9163.29,9310.06,1132300000,9310.06
+2003-08-11,9189.62,9275.61,9124.00,9217.35,1022200000,9217.35
+2003-08-08,9127.36,9230.37,9097.74,9191.09,1086600000,9191.09
+2003-08-07,9060.48,9171.13,9003.63,9126.45,1389300000,9126.45
+2003-08-06,9032.96,9151.38,8964.13,9061.74,1491000000,9061.74
+2003-08-05,9185.27,9210.21,9024.77,9036.32,1351700000,9036.32
+2003-08-04,9154.18,9231.84,9033.66,9186.04,1318700000,9186.04
+2003-08-01,9232.68,9266.37,9100.12,9153.97,1390600000,9153.97
+2003-07-31,9199.35,9398.02,9183.80,9233.80,1608000000,9233.80
+2003-07-30,9204.39,9272.88,9131.70,9200.05,1391900000,9200.05
+2003-07-29,9268.19,9327.36,9135.62,9204.46,1508900000,9204.46
+2003-07-28,9284.92,9356.77,9182.96,9266.51,1328600000,9266.51
+2003-07-25,9113.85,9296.62,9062.38,9284.57,1397500000,9284.57
+2003-07-24,9196.56,9313.99,9092.98,9112.51,1559000000,9112.51
+2003-07-23,9159.08,9249.91,9064.69,9194.24,1362700000,9194.24
+2003-07-22,9098.65,9221.83,9008.60,9158.45,1439700000,9158.45
+2003-07-21,9187.80,9219.87,9025.12,9096.69,1254200000,9096.69
+2003-07-18,9052.29,9212.31,9034.36,9188.15,1365200000,9188.15
+2003-07-17,9089.34,9160.27,8968.82,9050.82,1661400000,9050.82
+2003-07-16,9133.70,9185.63,9005.23,9094.59,1662000000,9094.59
+2003-07-15,9179.18,9260.42,9054.60,9128.97,1518600000,9128.97
+2003-07-14,9126.45,9316.44,9126.45,9177.15,1448900000,9177.15
+2003-07-11,9036.39,9176.59,9009.01,9119.59,1212700000,9119.59
+2003-07-10,9154.53,9154.53,8978.13,9036.04,1465700000,9036.04
+2003-07-09,9221.90,9270.22,9077.91,9156.21,1618000000,9156.21
+2003-07-08,9213.48,9281.77,9122.24,9223.09,1565700000,9223.09
+2003-07-07,9073.92,9289.90,9073.92,9216.79,1429100000,9216.79
+2003-07-03,9141.16,9164.48,9014.06,9070.21,775900000,9070.21
+2003-07-02,9043.54,9168.82,9025.12,9142.84,1519300000,9142.84
+2003-07-01,8983.66,9068.05,8843.61,9040.95,1460200000,9040.95
+2003-06-30,8990.74,9100.12,8934.71,8985.44,1587200000,8985.44
+2003-06-27,9079.74,9135.91,8938.26,8989.05,1267800000,8989.05
+2003-06-26,9011.06,9118.82,8953.83,9079.04,1387400000,9079.04
+2003-06-25,9109.57,9195.20,8984.29,9011.53,1459200000,9011.53
+2003-06-24,9071.48,9179.25,9020.08,9109.85,1388300000,9109.85
+2003-06-23,9199.49,9215.32,9003.83,9072.95,1398100000,9072.95
+2003-06-20,9180.93,9306.36,9149.21,9200.75,1698000000,9200.75
+2003-06-19,9293.80,9346.34,9134.50,9179.53,1530100000,9179.53
+2003-06-18,9322.67,9363.15,9185.17,9293.80,1488900000,9293.80
+2003-06-17,9319.66,9406.50,9234.78,9323.02,1479700000,9323.02
+2003-06-16,9117.56,9335.49,9117.56,9318.96,1345900000,9318.96
+2003-06-13,9197.88,9234.23,9042.63,9117.12,1271600000,9117.12
+2003-06-12,9184.29,9270.64,9089.38,9196.55,1553100000,9196.55
+2003-06-11,9048.85,9202.08,9010.13,9183.22,1520000000,9183.22
+2003-06-10,8980.79,9111.11,8946.06,9054.89,1275400000,9054.89
+2003-06-09,9061.18,9109.43,8909.78,8980.00,1307000000,8980.00
+2003-06-06,9045.57,9248.71,9008.87,9062.79,1837200000,9062.79
+2003-06-05,9036.67,9106.70,8905.37,9041.30,1693100000,9041.30
+2003-06-04,8919.94,9076.94,8882.75,9038.98,1618700000,9038.98
+2003-06-03,8898.23,8973.02,8823.51,8922.95,1450200000,8922.95
+2003-06-02,8851.45,9040.46,8833.66,8897.81,1662500000,8897.81
+2003-05-30,8711.46,8897.04,8711.46,8850.26,1688800000,8850.26
+2003-05-29,8787.23,8895.99,8657.96,8711.18,1685800000,8711.18
+2003-05-28,8781.84,8885.34,8721.90,8793.12,1559000000,8793.12
+2003-05-27,8600.54,8812.30,8523.64,8781.35,1532000000,8781.35
+2003-05-23,8594.02,8668.47,8513.98,8601.38,1201000000,8601.38
+2003-05-22,8516.99,8650.33,8495.35,8594.02,1448500000,8594.02
+2003-05-21,8485.62,8577.64,8389.68,8516.43,1457800000,8516.43
+2003-05-20,8494.09,8593.61,8394.51,8491.36,1505300000,8491.36
+2003-05-19,8676.52,8676.52,8455.72,8493.39,1375700000,8493.39
+2003-05-16,8710.36,8766.36,8614.33,8678.97,1505500000,8678.97
+2003-05-15,8649.22,8766.58,8613.84,8713.14,1508700000,8713.14
+2003-05-14,8673.29,8744.94,8575.96,8647.82,1401800000,8647.82
+2003-05-13,8722.88,8757.40,8611.18,8679.25,1418100000,8679.25
+2003-05-12,8603.90,8764.12,8544.24,8726.73,1378800000,8726.73
+2003-05-09,8492.69,8637.58,8482.89,8604.60,1326100000,8604.60
+2003-05-08,8558.67,8591.01,8435.61,8491.22,1379600000,8491.22
+2003-05-07,8585.42,8650.82,8494.87,8560.63,1531900000,8560.63
+2003-05-06,8531.28,8658.18,8486.88,8588.36,1649600000,8588.36
+2003-05-05,8583.17,8643.11,8472.67,8531.57,1446300000,8531.57
+2003-05-02,8453.48,8612.86,8389.40,8582.68,1554300000,8582.68
+2003-05-01,8478.48,8519.09,8328.55,8454.25,1397500000,8454.25
+2003-04-30,8501.38,8557.62,8402.36,8480.09,1788510000,8480.09
+2003-04-29,8472.88,8578.55,8414.61,8502.99,1525600000,8502.99
+2003-04-28,8306.84,8515.80,8290.46,8471.61,1273000000,8471.61
+2003-04-25,8438.98,8453.06,8258.80,8306.35,1335800000,8306.35
+2003-04-24,8512.44,8527.99,8363.28,8440.04,1648100000,8440.04
+2003-04-23,8484.92,8587.72,8398.65,8515.66,1667200000,8515.66
+2003-04-22,8326.38,8509.43,8238.14,8484.99,1631200000,8484.99
+2003-04-21,8336.67,8423.09,8270.56,8328.90,1118700000,8328.90
+2003-04-17,8255.79,8388.28,8172.52,8337.65,1430600000,8337.65
+2003-04-16,8405.72,8459.15,8217.27,8257.61,1587600000,8257.61
+2003-04-15,8347.66,8443.11,8251.38,8402.36,1460200000,8402.36
+2003-04-14,8203.97,8375.19,8175.60,8351.10,1131000000,8351.10
+2003-04-11,8223.22,8360.76,8156.77,8203.41,1141600000,8203.41
+2003-04-10,8198.99,8274.56,8109.85,8221.33,1275300000,8221.33
+2003-04-09,8299.28,8404.25,8174.90,8197.94,1293700000,8197.94
+2003-04-08,8299.12,8382.43,8222.24,8298.92,1235400000,8298.92
+2003-04-07,8284.15,8550.40,8272.24,8300.41,1494000000,8300.41
+2003-04-04,8240.59,8348.29,8176.66,8277.15,1241200000,8277.15
+2003-04-03,8285.76,8378.76,8199.49,8240.38,1351500000,8240.38
+2003-04-02,8070.98,8342.27,8070.98,8285.06,1589800000,8285.06
+2003-04-01,7992.83,8133.03,7947.38,8069.86,1461600000,8069.86
+2003-03-31,8142.83,8142.83,7903.97,7992.13,1495500000,7992.13
+2003-03-28,8198.85,8224.83,8070.77,8145.77,1227000000,8145.77
+2003-03-27,8226.39,8272.03,8085.40,8201.45,1232900000,8201.45
+2003-03-26,8279.88,8323.01,8165.52,8229.88,1319700000,8229.88
+2003-03-25,8216.85,8355.93,8155.65,8280.23,1333400000,8280.23
+2003-03-24,8514.82,8514.82,8166.78,8214.68,1293000000,8214.68
+2003-03-21,8290.38,8552.08,8290.38,8521.97,1883710000,8521.97
+2003-03-20,8264.68,8335.20,8122.59,8286.60,1439100000,8286.60
+2003-03-19,8193.04,8304.04,8116.01,8265.45,1473400000,8265.45
+2003-03-18,8142.69,8253.48,8057.54,8194.23,1555100000,8194.23
+2003-03-17,7857.96,8163.56,7763.56,8141.92,1700420000,8141.92
+2003-03-14,7822.17,7961.60,7761.25,7859.71,1541900000,7859.71
+2003-03-13,7555.29,7847.03,7555.29,7821.75,1816300000,7821.75
+2003-03-12,7517.76,7582.96,7397.31,7552.07,1620000000,7552.07
+2003-03-11,7568.53,7673.98,7488.00,7524.06,1427700000,7524.06
+2003-03-10,7739.40,7739.40,7545.77,7568.18,1255000000,7568.18
+2003-03-07,7671.75,7780.57,7536.18,7740.03,1368500000,7740.03
+2003-03-06,7774.76,7795.07,7624.97,7673.99,1299200000,7673.99
+2003-03-05,7702.35,7801.79,7639.82,7775.60,1332700000,7775.60
+2003-03-04,7838.14,7859.08,7688.98,7704.87,1256600000,7704.87
+2003-03-03,7890.24,7997.66,7809.05,7837.86,1208900000,7837.86
+2003-02-28,7886.11,7987.80,7826.72,7891.08,1373300000,7891.08
+2003-02-27,7807.96,7950.46,7774.34,7884.99,1287800000,7884.99
+2003-02-26,7907.39,7944.93,7767.62,7806.98,1374400000,7806.98
+2003-02-25,7856.42,7931.14,7700.53,7909.50,1483700000,7909.50
+2003-02-24,8017.34,8017.34,7828.06,7858.24,1229200000,7858.24
+2003-02-21,7915.52,8055.79,7843.81,8018.11,1398200000,8018.11
+2003-02-20,8002.70,8051.37,7858.24,7914.96,1194100000,7914.96
+2003-02-19,8033.80,8079.11,7913.70,8000.60,1075600000,8000.60
+2003-02-18,7909.30,8114.82,7909.30,8041.15,1250800000,8041.15
+2003-02-14,7750.90,7936.56,7704.96,7908.80,1404600000,7908.80
+2003-02-13,7756.55,7817.88,7602.81,7749.87,1489300000,7749.87
+2003-02-12,7836.36,7892.96,7720.39,7758.17,1260500000,7758.17
+2003-02-11,7920.93,8010.89,7798.69,7843.11,1307000000,7843.11
+2003-02-10,7865.74,7963.03,7777.98,7920.11,1238200000,7920.11
+2003-02-07,7932.45,8019.46,7811.10,7864.23,1276800000,7864.23
+2003-02-06,7981.95,8031.66,7855.87,7929.30,1430900000,7929.30
+2003-02-05,8014.45,8162.96,7950.42,7985.18,1450800000,7985.18
+2003-02-04,8104.61,8104.61,7915.93,8013.29,1451600000,8013.29
+2003-02-03,8053.74,8189.35,8032.90,8109.82,1258500000,8109.82
+2003-01-31,7939.72,8121.37,7884.66,8053.81,1578530000,8053.81
+2003-01-30,8109.14,8169.81,7918.19,7945.13,1510300000,7945.13
+2003-01-29,8087.95,8173.31,7916.89,8110.71,1595400000,8110.71
+2003-01-28,7991.07,8153.36,7954.95,8088.84,1459100000,8088.84
+2003-01-27,8128.54,8167.41,7929.16,7989.56,1435900000,7989.56
+2003-01-24,8367.89,8367.89,8092.00,8131.01,1574800000,8131.01
+2003-01-23,8320.72,8437.69,8215.61,8369.47,1744550000,8369.47
+2003-01-22,8439.54,8493.50,8270.94,8318.73,1560800000,8318.73
+2003-01-21,8586.26,8650.43,8421.03,8442.90,1335200000,8442.90
+2003-01-17,8695.82,8695.82,8523.60,8586.74,1358200000,8586.74
+2003-01-16,8721.12,8837.47,8634.46,8697.87,1534600000,8697.87
+2003-01-15,8843.64,8865.65,8674.43,8723.18,1432100000,8723.18
+2003-01-14,8787.22,8865.41,8717.56,8842.62,1379400000,8842.62
+2003-01-13,8787.83,8896.09,8721.12,8785.98,1396300000,8785.98
+2003-01-10,8776.04,8846.25,8654.21,8784.89,1485400000,8784.89
+2003-01-09,8596.68,8814.09,8596.68,8776.18,1560300000,8776.18
+2003-01-08,8735.93,8749.44,8549.72,8595.31,1467600000,8595.31
+2003-01-07,8775.84,8843.37,8661.20,8740.59,1545200000,8740.59
+2003-01-06,8602.78,8826.71,8578.86,8773.57,1435900000,8773.57
+2003-01-03,8607.38,8669.91,8503.71,8601.69,1130800000,8601.69
+2003-01-02,8342.38,8633.02,8342.38,8607.52,1229200000,8607.52
+2002-12-31,8332.24,8400.46,8216.44,8341.63,1088500000,8341.63
+2002-12-30,8304.06,8405.67,8214.93,8332.85,1057800000,8332.85
+2002-12-27,8429.28,8470.05,8272.31,8303.78,758400000,8303.78
+2002-12-26,8448.86,8587.98,8392.23,8432.61,721100000,8432.61
+2002-12-24,8491.99,8522.98,8407.45,8448.11,458310000,8448.11
+2002-12-23,8511.39,8573.92,8418.90,8493.29,1112100000,8493.29
+2002-12-20,8367.41,8557.47,8367.41,8511.32,1782730000,8511.32
+2002-12-19,8441.94,8530.25,8302.41,8364.80,1385900000,8364.80
+2002-12-18,8531.31,8553.76,8367.89,8447.35,1446200000,8447.35
+2002-12-17,8626.99,8672.38,8495.21,8535.39,1251800000,8535.39
+2002-12-16,8436.59,8649.06,8421.58,8627.40,1271600000,8627.40
+2002-12-13,8536.07,8563.16,8374.68,8433.71,1330800000,8433.71
+2002-12-12,8590.99,8662.71,8466.21,8538.40,1255300000,8538.40
+2002-12-11,8571.52,8669.91,8452.84,8589.14,1285100000,8589.14
+2002-12-10,8473.61,8624.93,8419.86,8574.26,1286600000,8574.26
+2002-12-09,8643.99,8643.99,8438.24,8473.41,1320800000,8473.41
+2002-12-06,8620.88,8707.21,8469.16,8645.77,1241100000,8645.77
+2002-12-05,8740.66,8796.68,8572.00,8623.28,1250200000,8623.28
+2002-12-04,8734.22,8834.04,8600.93,8737.85,1588900000,8737.85
+2002-12-03,8861.13,8882.04,8649.89,8742.93,1488400000,8742.93
+2002-12-02,8902.95,9076.35,8757.60,8862.57,1612000000,8862.57
+2002-11-29,8933.67,8995.78,8847.42,8896.09,643460000,8896.09
+2002-11-27,8678.96,8975.08,8678.96,8931.68,1350300000,8931.68
+2002-11-26,8844.12,8845.01,8634.53,8676.42,1543600000,8676.42
+2002-11-25,8804.97,8918.03,8717.63,8849.40,1574000000,8849.40
+2002-11-22,8842.41,8944.16,8732.23,8804.84,1626800000,8804.84
+2002-11-21,8625.48,8910.83,8619.58,8845.15,2415100000,8845.15
+2002-11-20,8469.57,8675.12,8402.72,8623.01,1517300000,8623.01
+2002-11-19,8484.93,8566.45,8355.62,8474.78,1337400000,8474.78
+2002-11-18,8579.74,8671.41,8444.26,8486.57,1282600000,8486.57
+2002-11-15,8535.64,8622.30,8421.10,8579.09,1400100000,8579.09
+2002-11-14,8403.69,8596.50,8396.27,8542.13,1488100000,8542.13
+2002-11-13,8380.32,8523.47,8237.65,8398.49,1463400000,8398.49
+2002-11-12,8356.73,8557.25,8286.13,8386.00,1377100000,8386.00
+2002-11-11,8535.81,8541.09,8315.40,8358.95,1113000000,8358.95
+2002-11-08,8585.75,8688.96,8455.01,8537.13,1446500000,8537.13
+2002-11-07,8766.08,8766.08,8517.78,8586.24,1466900000,8586.24
+2002-11-06,8677.17,8841.61,8561.48,8771.01,1623700000,8771.01
+2002-11-05,8568.76,8730.92,8497.60,8678.27,1354100000,8678.27
+2002-11-04,8521.60,8787.30,8510.08,8571.60,1645900000,8571.60
+2002-11-01,8395.64,8569.24,8271.77,8517.64,1450400000,8517.64
+2002-10-31,8427.34,8538.17,8293.17,8397.03,1641300000,8397.03
+2002-10-30,8363.95,8502.32,8273.99,8427.41,1422300000,8427.41
+2002-10-29,8367.28,8456.19,8161.01,8368.94,1529700000,8368.94
+2002-10-28,8448.98,8601.01,8281.34,8368.04,1382600000,8368.04
+2002-10-25,8317.48,8474.92,8210.74,8443.99,1340400000,8443.99
+2002-10-24,8495.38,8607.04,8253.60,8317.34,1700570000,8317.34
+2002-10-23,8448.56,8546.57,8256.79,8494.27,1593900000,8494.27
+2002-10-22,8534.08,8543.65,8303.33,8450.16,1549200000,8450.16
+2002-10-21,8320.74,8580.13,8191.87,8538.24,1447000000,8538.24
+2002-10-18,8287.72,8383.16,8115.72,8322.40,1423100000,8322.40
+2002-10-17,8038.31,8395.99,8038.31,8275.04,1780390000,8275.04
+2002-10-16,8232.10,8232.10,7958.34,8036.03,1585000000,8036.03
+2002-10-15,7883.23,8304.58,7883.23,8255.68,1956000000,8255.68
+2002-10-14,7848.21,7948.91,7725.23,7877.40,1200300000,7877.40
+2002-10-11,7540.74,7919.57,7540.74,7850.29,1854130000,7850.29
+2002-10-10,7286.34,7588.25,7181.47,7533.95,2090230000,7533.95
+2002-10-09,7499.96,7500.03,7215.39,7286.27,1885030000,7286.27
+2002-10-08,7425.82,7680.57,7294.53,7501.49,1938430000,7501.49
+2002-10-07,7528.68,7685.42,7368.46,7422.84,1576500000,7422.84
+2002-10-04,7719.34,7817.06,7428.32,7528.40,1835930000,7528.40
+2002-10-03,7753.46,7943.64,7638.47,7717.19,1674500000,7717.19
+2002-10-02,7936.57,7996.77,7696.66,7755.61,1668900000,7755.61
+2002-10-01,7593.04,7964.24,7558.36,7938.79,1780900000,7938.79
+2002-09-30,7698.81,7729.53,7422.28,7591.93,1721870000,7591.93
+2002-09-27,7996.01,7997.12,7664.89,7701.45,1507300000,7701.45
+2002-09-26,7844.62,8086.86,7800.97,7997.12,1650000000,7997.12
+2002-09-25,7687.16,7939.90,7641.87,7841.82,1651500000,7841.82
+2002-09-24,7871.23,7893.36,7606.77,7683.13,1670240000,7683.13
+2002-09-23,7984.77,7984.77,7738.06,7872.15,1381100000,7872.15
+2002-09-20,7945.93,8081.04,7868.60,7986.02,1792800000,7986.02
+2002-09-19,8170.65,8170.65,7904.87,7942.39,1524000000,7942.39
+2002-09-18,8203.07,8283.49,8013.42,8172.45,1501000000,8172.45
+2002-09-17,8386.35,8508.61,8169.88,8207.55,1448600000,8207.55
+2002-09-16,8311.79,8435.04,8214.27,8380.18,1001400000,8380.18
+2002-09-13,8377.68,8414.79,8175.85,8312.69,1271000000,8312.69
+2002-09-12,8574.94,8574.94,8334.82,8379.41,1191600000,8379.41
+2002-09-11,8604.27,8767.82,8545.11,8581.17,846600000,8581.17
+2002-09-10,8520.14,8660.94,8447.73,8602.61,1186400000,8602.61
+2002-09-09,8425.88,8584.30,8288.28,8519.38,1130600000,8519.38
+2002-09-06,8296.46,8526.80,8296.46,8427.20,1184500000,8427.20
+2002-09-05,8420.20,8420.20,8173.56,8283.70,1401300000,8283.70
+2002-09-04,8308.53,8495.03,8216.98,8425.12,1372100000,8425.12
+2002-09-03,8659.27,8659.27,8282.87,8308.05,1323400000,8308.05
+2002-08-30,8669.26,8811.72,8572.85,8663.50,929900000,8663.50
+2002-08-29,8690.69,8769.34,8514.10,8670.99,1271100000,8670.99
+2002-08-28,8823.93,8832.18,8610.79,8694.09,1146600000,8694.09
+2002-08-27,8917.49,9040.04,8747.77,8824.41,1307700000,8824.41
+2002-08-26,8873.93,8981.23,8723.43,8919.01,1016900000,8919.01
+2002-08-23,9051.49,9051.49,8806.38,8872.96,1071500000,8872.96
+2002-08-22,8961.18,9129.10,8860.34,9053.64,1373000000,9053.64
+2002-08-21,8866.14,9033.52,8768.51,8957.23,1353100000,8957.23
+2002-08-20,8986.50,8989.69,8789.13,8872.07,1308500000,8872.07
+2002-08-19,8777.09,9037.38,8720.81,8990.79,1299800000,8990.79
+2002-08-16,8813.07,8899.42,8644.59,8778.06,1265300000,8778.06
+2002-08-15,8745.04,8914.37,8620.98,8818.14,1505100000,8818.14
+2002-08-14,8479.14,8778.89,8295.34,8743.31,1533800000,8743.31
+2002-08-13,8683.15,8801.87,8445.91,8482.39,1297700000,8482.39
+2002-08-12,8741.92,8753.14,8528.15,8688.89,1036500000,8688.89
+2002-08-09,8707.24,8824.92,8538.46,8745.45,1294900000,8745.45
+2002-08-08,8456.29,8755.70,8364.29,8712.02,1646700000,8712.02
+2002-08-07,8282.25,8520.95,8171.70,8456.15,1490400000,8456.15
+2002-08-06,8049.93,8472.28,8049.93,8274.09,1514100000,8274.09
+2002-08-05,8312.92,8371.00,7991.43,8043.63,1425500000,8043.63
+2002-08-02,8504.96,8566.36,8179.80,8313.13,1538100000,8313.13
+2002-08-01,8732.58,8758.40,8430.68,8506.62,1672200000,8506.62
+2002-07-31,8678.65,8793.36,8463.21,8736.59,2049360000,8736.59
+2002-07-30,8707.03,8806.86,8484.05,8680.03,1826090000,8680.03
+2002-07-29,8267.99,8749.12,8267.99,8711.88,1778650000,8711.88
+2002-07-26,8192.61,8350.10,8039.89,8264.39,1796100000,8264.39
+2002-07-25,8185.89,8390.39,7893.34,8186.31,2424700000,8186.31
+2002-07-24,7698.46,8243.07,7489.53,8191.29,2775560000,8191.29
+2002-07-23,7785.55,8007.91,7590.75,7702.34,2441020000,7702.34
+2002-07-22,8015.04,8173.08,7668.35,7784.58,2248060000,7784.58
+2002-07-19,8356.74,8356.74,7940.83,8019.26,2654100000,8019.26
+2002-07-18,8540.47,8683.84,8350.72,8409.49,1736300000,8409.49
+2002-07-17,8476.21,8765.39,8401.12,8542.48,2566500000,8542.48
+2002-07-16,8635.31,8697.69,8346.29,8473.11,1843700000,8473.11
+2002-07-15,8681.28,8720.18,8220.78,8639.19,2574800000,8639.19
+2002-07-12,8805.33,8903.00,8555.15,8684.53,1607400000,8684.53
+2002-07-11,8812.12,8937.87,8557.84,8801.53,2080480000,8801.53
+2002-07-10,9098.16,9188.71,8772.94,8813.50,1816900000,8813.50
+2002-07-09,9273.38,9357.35,9065.88,9096.09,1348900000,9096.09
+2002-07-08,9375.70,9433.08,9184.90,9274.90,1184400000,9274.90
+2002-07-05,9061.54,9399.65,9054.97,9379.50,699400000,9379.50
+2002-07-03,9006.37,9140.32,8832.89,9054.97,1527800000,9054.97
+2002-07-02,9104.95,9185.88,8918.11,9007.75,1823000000,9007.75
+2002-07-01,9239.25,9381.37,9059.88,9109.79,1425500000,9109.79
+2002-06-28,9270.33,9435.44,9131.49,9243.26,2117000000,9243.26
+2002-06-27,9122.12,9342.33,8992.32,9269.92,1908600000,9269.92
+2002-06-26,9108.22,9207.07,8831.92,9120.11,336570000,9120.11
+2002-06-25,9285.56,9457.38,9089.17,9126.82,1513700000,9126.82
+2002-06-24,9252.47,9417.23,9046.04,9281.82,1552600000,9281.82
+2002-06-21,9430.66,9456.76,9186.71,9253.79,1497200000,9253.79
+2002-06-20,9561.64,9628.11,9390.10,9431.77,1389700000,9431.77
+2002-06-19,9702.00,9760.20,9514.29,9561.57,1336100000,9561.57
+2002-06-18,9684.52,9775.83,9588.29,9706.12,1193100000,9706.12
+2002-06-17,9476.50,9736.58,9462.30,9687.42,1236600000,9687.42
+2002-06-14,9498.92,9538.93,9229.63,9474.21,1549000000,9474.21
+2002-06-13,9612.87,9671.64,9454.41,9502.80,1405500000,9502.80
+2002-06-12,9515.12,9682.37,9380.82,9617.71,1795720000,9617.71
+2002-06-11,9647.62,9794.17,9487.91,9517.26,1212400000,9517.26
+2002-06-10,9587.38,9744.33,9509.91,9645.40,1226200000,9645.40
+2002-06-07,9592.38,9668.18,9416.33,9589.67,1341300000,9589.67
+2002-06-06,9795.70,9820.41,9552.85,9624.64,1601500000,9624.64
+2002-06-05,9688.53,9860.91,9636.82,9796.80,1300100000,9796.80
+2002-06-04,9710.34,9798.74,9541.36,9687.84,1466600000,9687.84
+2002-06-03,9923.94,10016.04,9685.49,9709.79,1324300000,9709.79
+2002-05-31,9915.15,10074.16,9865.89,9925.25,1277300000,9925.25
+2002-05-30,9915.01,9995.76,9769.64,9911.69,1286600000,9911.69
+2002-05-29,9976.94,10056.31,9860.42,9923.04,1081800000,9923.04
+2002-05-28,10106.54,10144.53,9917.64,9981.58,996500000,9981.58
+2002-05-24,10211.92,10255.93,10054.58,10104.26,885400000,10104.26
+2002-05-23,10158.30,10268.87,10044.20,10216.08,1192900000,10216.08
+2002-05-22,10098.58,10200.78,10004.41,10157.88,1136300000,10157.88
+2002-05-21,10229.08,10322.15,10060.46,10105.71,1169200000,10105.71
+2002-05-20,10348.93,10357.44,10164.39,10229.50,989800000,10229.50
+2002-05-17,10291.05,10400.62,10209.49,10353.08,1274400000,10353.08
+2002-05-16,10242.11,10374.05,10168.64,10289.21,1256600000,10289.21
+2002-05-15,10288.56,10382.97,10152.97,10243.68,1420200000,10243.68
+2002-05-14,10119.34,10346.59,10119.34,10298.14,1414500000,10298.14
+2002-05-13,9938.82,10148.71,9892.73,10109.66,1088600000,10109.66
+2002-05-10,10040.25,10115.23,9891.04,9939.92,1171900000,9939.92
+2002-05-09,10137.96,10185.08,9966.63,10037.42,1153000000,10037.42
+2002-05-08,9847.96,10203.76,9847.96,10141.83,1502000000,10141.83
+2002-05-07,9810.53,9985.32,9749.73,9836.55,1354700000,9836.55
+2002-05-06,10005.80,10081.98,9780.29,9808.04,1122600000,9808.04
+2002-05-03,10091.73,10130.97,9891.49,10006.63,1284500000,10006.63
+2002-05-02,10057.62,10182.94,9970.92,10091.87,1364000000,10091.87
+2002-05-01,9944.90,10121.21,9778.42,10059.63,1451400000,10059.63
+2002-04-30,9818.90,10063.64,9775.10,9946.22,1628600000,9946.22
+2002-04-29,9910.52,10012.16,9767.15,9819.87,1314700000,9819.87
+2002-04-26,10037.42,10127.85,9875.44,9910.72,1374200000,9910.72
+2002-04-25,10028.70,10103.64,9864.08,10035.06,1517400000,10035.06
+2002-04-24,10090.07,10209.64,9984.00,10030.43,1373200000,10030.43
+2002-04-23,10137.20,10243.06,10003.84,10089.24,1388500000,10089.24
+2002-04-22,10256.00,10299.39,10056.45,10136.43,1181800000,10136.43
+2002-04-19,10212.69,10338.83,10151.52,10257.11,1185000000,10257.11
+2002-04-18,10219.47,10334.67,10010.22,10205.28,1359300000,10205.28
+2002-04-17,10299.66,10379.51,10137.47,10220.78,1376900000,10220.78
+2002-04-16,10100.38,10365.12,10100.38,10301.32,1341300000,10301.32
+2002-04-15,10189.57,10261.05,10037.90,10093.67,1120400000,10093.67
+2002-04-12,10178.57,10312.26,10083.92,10190.82,1282100000,10190.82
+2002-04-11,10378.89,10425.87,10116.37,10176.08,1505600000,10176.08
+2002-04-10,10210.40,10437.43,10175.18,10381.73,1447900000,10381.73
+2002-04-09,10249.84,10362.98,10156.57,10208.67,1235400000,10208.67
+2002-04-08,10258.91,10300.78,10049.94,10249.08,1095300000,10249.08
+2002-04-05,10235.80,10403.66,10169.79,10271.64,1110200000,10271.64
+2002-04-04,10199.54,10301.53,10118.10,10235.17,1283800000,10235.17
+2002-04-03,10311.81,10377.09,10116.02,10198.29,1219700000,10198.29
+2002-04-02,10352.46,10394.94,10204.66,10313.71,1176700000,10313.71
+2002-04-01,10402.07,10434.52,10226.59,10362.70,1050900000,10362.70
+2002-03-28,10429.68,10537.48,10341.59,10403.94,1147600000,10403.94
+2002-03-27,10351.28,10490.15,10300.29,10426.91,1180100000,10426.91
+2002-03-26,10280.51,10475.00,10233.65,10353.36,1223600000,10353.36
+2002-03-25,10428.43,10497.76,10255.59,10281.67,1057900000,10281.67
+2002-03-22,10477.70,10537.62,10324.23,10427.67,1243300000,10427.67
+2002-03-21,10501.99,10577.82,10326.99,10479.84,1339200000,10479.84
+2002-03-20,10626.85,10634.84,10455.56,10501.57,1304900000,10501.57
+2002-03-19,10578.38,10722.78,10530.63,10635.25,1255000000,10635.25
+2002-03-18,10608.54,10707.01,10488.84,10577.75,1169500000,10577.75
+2002-03-15,10516.45,10663.69,10452.10,10607.23,1493900000,10607.23
+2002-03-14,10501.29,10615.74,10421.17,10517.14,1208800000,10517.14
+2002-03-13,10620.17,10648.68,10427.67,10501.85,1354000000,10501.85
+2002-03-12,10604.32,10682.72,10462.34,10632.35,1304400000,10632.35
+2002-03-11,10570.07,10679.68,10470.85,10611.24,1210200000,10611.24
+2002-03-08,10531.67,10728.87,10480.33,10572.49,1412000000,10572.49
+2002-03-07,10578.10,10663.82,10405.95,10525.37,1517400000,10525.37
+2002-03-06,10431.96,10637.19,10393.84,10574.29,1541300000,10574.29
+2002-03-05,10591.38,10639.96,10349.90,10433.41,1549300000,10433.41
+2002-03-04,10368.10,10656.50,10313.01,10586.82,1594300000,10586.82
+2002-03-01,10111.04,10397.09,10086.51,10368.86,1456500000,10368.86
+2002-02-28,10130.28,10283.89,10055.34,10106.13,1392200000,10106.13
+2002-02-27,10117.65,10315.72,10025.86,10127.58,1393800000,10127.58
+2002-02-26,10145.86,10241.89,9986.84,10115.26,1309200000,10115.26
+2002-02-25,9969.75,10204.04,9934.94,10145.71,1367400000,10145.71
+2002-02-22,9834.89,10032.45,9726.67,9968.15,1411000000,9968.15
+2002-02-21,9933.56,10072.98,9788.11,9834.68,1381600000,9834.68
+2002-02-20,9742.37,9990.78,9674.91,9941.17,1438900000,9941.17
+2002-02-19,9899.24,9923.39,9704.03,9745.14,1189900000,9745.14
+2002-02-15,10000.83,10065.37,9843.54,9903.04,1359200000,9903.04
+2002-02-14,9989.67,10092.29,9905.95,10001.99,1272500000,10001.99
+2002-02-13,9856.99,10056.24,9839.18,9989.67,1215900000,9989.67
+2002-02-12,9880.35,9943.24,9766.18,9863.74,1094200000,9863.74
+2002-02-11,9739.81,9933.07,9668.34,9884.78,1159400000,9884.78
+2002-02-08,9627.65,9795.38,9503.52,9744.24,1371900000,9744.24
+2002-02-07,9650.97,9799.67,9562.12,9625.44,1441600000,9625.44
+2002-02-06,9682.04,9801.33,9558.18,9653.39,1665800000,9653.39
+2002-02-05,9684.74,9842.77,9553.96,9685.43,1778300000,9685.43
+2002-02-04,9905.46,9940.96,9648.55,9687.09,1437600000,9687.09
+2002-02-01,9923.04,10022.82,9795.45,9907.26,1367200000,9907.26
+2002-01-31,9763.20,9963.79,9701.76,9920.00,1557000000,9920.00
+2002-01-30,9619.14,9821.81,9443.32,9762.86,2019600000,9762.86
+2002-01-29,9865.54,9952.59,9576.65,9618.24,1812000000,9618.24
+2002-01-28,9843.05,9959.44,9746.66,9865.75,1186800000,9865.75
+2002-01-25,9793.23,9949.54,9697.47,9840.08,1345100000,9840.08
+2002-01-24,9734.21,9926.71,9670.99,9796.07,1552800000,9796.07
+2002-01-23,9710.96,9853.64,9588.49,9730.96,1479200000,9730.96
+2002-01-22,9772.34,9905.26,9652.01,9713.80,1311600000,9713.80
+2002-01-18,9830.94,9873.98,9673.11,9771.85,1333300000,9771.85
+2002-01-17,9712.21,9910.11,9684.39,9850.04,1380100000,9850.04
+2002-01-16,9916.54,9923.32,9661.00,9712.27,1482500000,9712.27
+2002-01-15,9892.73,10038.94,9805.33,9924.15,1386900000,9924.15
+2002-01-14,9985.38,10038.87,9831.98,9891.42,1286400000,9891.42
+2002-01-11,10069.52,10163.77,9938.12,9987.53,1211900000,9987.53
+2002-01-10,10092.50,10174.91,9956.67,10067.86,1299000000,10067.86
+2002-01-09,10153.18,10311.98,10049.25,10094.09,1452000000,10094.09
+2002-01-08,10195.76,10270.53,10063.43,10150.55,1258800000,10150.55
+2002-01-07,10261.33,10345.40,10137.61,10197.05,1308300000,10197.05
+2002-01-04,10176.84,10341.87,10132.14,10259.74,1513000000,10259.74
+2002-01-03,10073.88,10227.36,10002.54,10172.14,1398900000,10172.14
+2002-01-02,10021.71,10125.85,9889.69,10073.40,1171000000,10073.40
+2001-12-31,10136.36,10178.71,10002.96,10021.57,943600000,10021.57
+2001-12-28,10133.94,10220.78,10067.17,10136.99,917400000,10136.99
+2001-12-27,10088.71,10187.71,10036.10,10131.31,876300000,10131.31
+2001-12-26,10035.55,10203.28,10014.10,10088.14,791100000,10088.14
+2001-12-24,10036.59,10114.91,9987.39,10035.34,439670000,10035.34
+2001-12-21,9986.84,10148.13,9935.70,10035.34,1694000000,10035.34
+2001-12-20,10064.13,10141.21,9912.76,9985.18,1490500000,9985.18
+2001-12-19,9994.59,10142.95,9876.96,10070.49,1484900000,10070.49
+2001-12-18,9893.22,10066.27,9876.19,9998.39,1354000000,9998.39
+2001-12-17,9809.42,9996.25,9747.77,9891.97,1260400000,9891.97
+2001-12-14,9764.72,9888.44,9661.14,9811.15,1306800000,9811.15
+2001-12-13,9889.13,9927.95,9691.30,9766.45,1511500000,9766.45
+2001-12-12,9887.27,9985.59,9745.42,9894.81,1449700000,9894.81
+2001-12-11,9925.60,10063.98,9794.48,9888.37,1367200000,9888.37
+2001-12-10,10047.04,10123.78,9868.03,9921.45,1218700000,9921.45
+2001-12-07,10099.14,10160.24,9938.54,10049.46,1248200000,10049.46
+2001-12-06,10113.53,10220.23,9997.98,10099.14,1487900000,10099.14
+2001-12-05,9891.35,10195.04,9875.92,10114.29,1765300000,10114.29
+2001-12-04,9765.55,9937.29,9700.24,9893.84,1318500000,9893.84
+2001-12-03,9848.93,9861.94,9651.87,9763.96,1202900000,9763.96
+2001-11-30,9828.80,9945.80,9752.26,9851.56,1343600000,9851.56
+2001-11-29,9710.34,9873.29,9629.72,9829.42,1375700000,9829.42
+2001-11-28,9867.06,9889.13,9662.80,9711.86,1423700000,9711.86
+2001-11-27,9980.33,10021.48,9776.07,9872.60,1288000000,9872.60
+2001-11-26,9961.58,10054.58,9862.22,9982.75,1129800000,9982.75
+2001-11-23,9833.09,9983.24,9804.37,9959.71,410300000,9959.71
+2001-11-21,9894.19,9932.31,9746.45,9834.68,1029300000,9834.68
+2001-11-20,9968.64,10023.37,9825.06,9901.38,1330200000,9901.38
+2001-11-19,9870.45,10040.46,9826.96,9976.46,1316800000,9976.46
+2001-11-16,9871.51,9967.94,9754.07,9866.99,1337400000,9866.99
+2001-11-15,9824.65,9967.46,9745.43,9872.39,1454500000,9872.39
+2001-11-14,9751.13,9943.18,9683.97,9823.61,1443400000,9823.61
+2001-11-13,9551.43,9811.29,9551.43,9750.95,1370100000,9750.95
+2001-11-12,9606.13,9642.25,9347.76,9554.37,991600000,9554.37
+2001-11-09,9586.96,9692.35,9478.75,9608.00,1093800000,9608.00
+2001-11-08,9558.39,9765.00,9506.91,9587.52,1517500000,9587.52
+2001-11-07,9584.68,9695.67,9457.99,9554.37,1411300000,9554.37
+2001-11-06,9437.09,9627.44,9315.79,9591.12,1356000000,9591.12
+2001-11-05,9326.59,9534.58,9326.59,9441.03,1267700000,9441.03
+2001-11-02,9264.52,9406.93,9152.91,9323.54,1121900000,9323.54
+2001-11-01,9087.45,9320.77,8987.61,9263.90,1317400000,9263.90
+2001-10-31,9123.64,9281.68,9018.26,9075.14,1352500000,9075.14
+2001-10-30,9264.52,9265.34,9011.96,9121.98,1297400000,9121.98
+2001-10-29,9543.37,9543.37,9232.83,9269.50,1106100000,9269.50
+2001-10-26,9462.28,9626.54,9369.35,9545.17,1244500000,9545.17
+2001-10-25,9342.29,9491.48,9143.09,9462.90,1364400000,9462.90
+2001-10-24,9341.40,9456.40,9218.29,9345.62,1336200000,9345.62
+2001-10-23,9379.17,9499.78,9249.02,9340.08,1317300000,9340.08
+2001-10-22,9203.91,9438.75,9101.08,9377.03,1105700000,9377.03
+2001-10-19,9162.81,9278.36,9027.74,9204.11,1294900000,9204.11
+2001-10-18,9230.75,9310.33,9061.02,9163.22,1262900000,9163.22
+2001-10-17,9389.76,9539.22,9199.89,9232.97,1452200000,9232.97
+2001-10-16,9346.31,9479.37,9239.68,9384.23,1210500000,9384.23
+2001-10-15,9340.84,9417.51,9181.07,9347.62,1024700000,9347.62
+2001-10-12,9409.07,9426.30,9146.34,9344.16,1331400000,9344.16
+2001-10-11,9242.63,9522.61,9204.04,9410.45,1704580000,9410.45
+2001-10-10,9052.30,9305.97,8975.15,9240.86,1312400000,9240.86
+2001-10-09,9066.56,9168.42,8927.34,9052.44,1227800000,9052.44
+2001-10-08,9115.75,9187.85,8937.86,9067.94,979000000,9067.94
+2001-10-05,9058.83,9208.41,8894.47,9119.77,1301700000,9119.77
+2001-10-04,9127.24,9259.61,8982.28,9060.88,1609100000,9060.88
+2001-10-03,8946.02,9193.32,8800.99,9123.78,1650600000,9123.78
+2001-10-02,8836.69,9001.03,8737.61,8950.59,1289800000,8950.59
+2001-10-01,8845.97,8931.70,8659.90,8836.83,1175600000,8836.83
+2001-09-28,8679.07,8945.68,8633.75,8847.56,1727400000,8847.56
+2001-09-27,8567.46,8757.47,8398.14,8681.42,1467000000,8681.42
+2001-09-26,8660.06,8766.81,8457.37,8567.39,1519100000,8567.39
+2001-09-25,8605.59,8778.23,8435.56,8659.97,1613800000,8659.97
+2001-09-24,8242.32,8733.39,8242.32,8603.86,1746600000,8603.86
+2001-09-21,8356.56,8484.22,7926.93,8235.81,2317300000,8235.81
+2001-09-20,8375.72,8711.38,8304.45,8376.21,2004800000,8376.21
+2001-09-19,8903.54,8990.37,8453.01,8759.13,2120550000,8759.13
+2001-09-18,8922.70,9126.89,8743.91,8903.40,1650410000,8903.40
+2001-09-17,9294.55,9294.55,8755.46,8920.70,2330830000,8920.70
+2001-09-10,9603.36,9740.44,9431.07,9605.51,1276600000,9605.51
+2001-09-07,9841.25,9842.08,9507.04,9605.85,1424300000,9605.85
+2001-09-06,10028.35,10053.73,9762.03,9840.84,1359700000,9840.84
+2001-09-05,9998.12,10140.79,9820.98,10033.27,1384500000,10033.27
+2001-09-04,9946.98,10238.50,9858.34,9997.49,1178300000,9997.49
+2001-08-31,9918.96,10072.22,9846.72,9949.75,920100000,9949.75
+2001-08-30,10077.07,10149.10,9829.35,9919.58,1157000000,9919.58
+2001-08-29,10224.45,10292.60,10030.43,10090.90,963700000,10090.90
+2001-08-28,10382.56,10405.88,10175.60,10222.03,987100000,10222.03
+2001-08-27,10422.76,10498.03,10334.88,10382.35,842600000,10382.35
+2001-08-24,10232.48,10487.52,10190.34,10423.17,1043600000,10423.17
+2001-08-23,10276.41,10357.09,10142.66,10229.15,986200000,10229.15
+2001-08-22,10170.30,10340.76,10099.07,10276.90,1110800000,10276.90
+2001-08-21,10320.07,10436.39,10132.92,10174.14,1041600000,10174.14
+2001-08-20,10239.33,10388.23,10146.05,10320.07,897100000,10320.07
+2001-08-17,10385.46,10418.68,10143.49,10240.78,974300000,10240.78
+2001-08-16,10342.10,10460.82,10198.15,10392.52,1055400000,10392.52
+2001-08-15,10407.05,10530.36,10289.01,10345.95,1065600000,10345.95
+2001-08-14,10416.95,10513.68,10333.29,10412.17,964600000,10412.17
+2001-08-13,10411.90,10504.82,10314.95,10415.91,837600000,10415.91
+2001-08-10,10296.89,10473.34,10164.67,10416.25,960900000,10416.25
+2001-08-09,10291.15,10361.52,10160.51,10298.56,1104200000,10298.56
+2001-08-08,10456.18,10509.80,10245.68,10293.50,1124600000,10293.50
+2001-08-07,10399.03,10520.11,10324.50,10458.74,1012000000,10458.74
+2001-08-06,10504.13,10549.59,10337.23,10401.31,811700000,10401.31
+2001-08-03,10550.01,10592.98,10381.10,10512.78,939900000,10512.78
+2001-08-02,10513.47,10663.07,10454.53,10551.18,1218300000,10551.18
+2001-08-01,10527.38,10659.33,10423.31,10510.01,1340300000,10510.01
+2001-07-31,10403.18,10639.40,10364.84,10522.81,1129200000,10522.81
+2001-07-30,10418.68,10513.26,10301.05,10401.72,909100000,10401.72
+2001-07-27,10451.89,10516.38,10316.27,10416.67,1015300000,10416.67
+2001-07-26,10403.46,10498.73,10237.46,10455.63,1213900000,10455.63
+2001-07-25,10241.75,10466.28,10159.34,10405.67,1280700000,10405.67
+2001-07-24,10423.80,10469.40,10170.82,10241.12,1198700000,10241.12
+2001-07-23,10576.92,10644.73,10374.81,10424.42,986900000,10424.42
+2001-07-20,10606.19,10668.33,10456.25,10576.65,1170900000,10576.65
+2001-07-19,10574.33,10758.14,10480.54,10610.00,1343500000,10610.00
+2001-07-18,10594.54,10676.83,10374.55,10569.83,1316300000,10569.83
+2001-07-17,10468.62,10683.76,10363.51,10606.39,1238100000,10606.39
+2001-07-16,10537.98,10649.02,10374.55,10472.12,1039800000,10472.12
+2001-07-13,10478.39,10615.42,10374.01,10539.06,1121700000,10539.06
+2001-07-12,10269.31,10542.02,10249.58,10478.99,1394000000,10478.99
+2001-07-11,10174.70,10355.83,10049.38,10241.02,1384100000,10241.02
+2001-07-10,10300.82,10406.87,10104.06,10175.64,1263800000,10175.64
+2001-07-09,10253.62,10389.91,10166.55,10299.40,1045700000,10299.40
+2001-07-06,10476.73,10483.82,10176.26,10252.68,1056700000,10252.68
+2001-07-05,10566.23,10617.47,10403.57,10479.86,934900000,10479.86
+2001-07-03,10588.89,10648.00,10479.99,10571.11,622110000,10571.11
+2001-07-02,10504.95,10707.24,10397.20,10593.72,1128300000,10593.72
+2001-06-29,10565.27,10729.18,10374.32,10502.40,1832360000,10502.40
+2001-06-28,10438.73,10736.43,10429.74,10566.21,1327300000,10566.21
+2001-06-27,10470.35,10608.48,10351.10,10434.84,1162100000,10434.84
+2001-06-26,10497.30,10600.90,10313.40,10472.48,1198900000,10472.48
+2001-06-25,10607.88,10711.19,10417.93,10504.22,1050100000,10504.22
+2001-06-22,10716.50,10753.27,10513.61,10604.59,1189200000,10604.59
+2001-06-21,10646.39,10848.47,10512.67,10715.43,1546820000,10715.43
+2001-06-20,10593.79,10770.88,10480.20,10647.33,1350100000,10647.33
+2001-06-19,10654.30,10793.46,10514.74,10596.67,1184900000,10596.67
+2001-06-18,10622.50,10781.45,10531.78,10645.38,1111600000,10645.38
+2001-06-15,10690.13,10792.25,10495.69,10623.64,1635550000,10623.64
+2001-06-14,10868.27,10874.91,10604.45,10690.13,1242900000,10690.13
+2001-06-13,10942.00,11065.92,10817.21,10871.62,1063600000,10871.62
+2001-06-12,10914.67,11009.93,10744.99,10948.38,1136500000,10948.38
+2001-06-11,10974.79,11038.56,10819.29,10922.09,870100000,10922.09
+2001-06-08,11095.62,11096.46,10882.92,10977.00,726200000,10977.00
+2001-06-07,11069.58,11169.34,10940.11,11090.74,1089600000,11090.74
+2001-06-06,11177.73,11236.68,10998.48,11070.24,1061900000,11070.24
+2001-06-05,11061.39,11234.98,10973.10,11175.84,1116800000,11175.84
+2001-06-04,10991.77,11125.99,10898.80,11061.52,836500000,11061.52
+2001-06-01,10913.57,11063.61,10793.46,10990.41,1015000000,10990.41
+2001-05-31,10873.23,11023.25,10798.53,10911.94,1226600000,10911.94
+2001-05-30,11032.96,11089.89,10819.74,10872.64,1158600000,10872.64
+2001-05-29,11004.66,11162.96,10913.44,11039.14,1026000000,11039.14
+2001-05-25,11122.03,11166.92,10949.01,11005.37,828100000,11005.37
+2001-05-24,11107.07,11248.19,10977.20,11122.42,1100700000,11122.42
+2001-05-23,11257.76,11308.44,11033.16,11105.51,1134800000,11105.51
+2001-05-22,11339.80,11411.63,11162.83,11257.24,1260400000,11257.24
+2001-05-21,11299.14,11436.42,11149.82,11337.92,1174900000,11337.92
+2001-05-18,11245.78,11374.87,11123.01,11301.74,1130800000,11301.74
+2001-05-17,11218.65,11413.46,11104.34,11248.58,1355600000,11248.58
+2001-05-16,10864.74,11258.21,10779.66,11215.92,1405300000,11215.92
+2001-05-15,10877.46,10979.35,10752.73,10872.97,1071800000,10872.97
+2001-05-14,10819.55,10930.09,10730.74,10877.33,858200000,10877.33
+2001-05-11,10908.30,10969.39,10716.16,10821.31,906200000,10821.31
+2001-05-10,10868.87,11049.39,10826.90,10910.44,1056700000,10910.44
+2001-05-09,10875.96,10964.84,10739.78,10866.98,1132400000,10866.98
+2001-05-08,10936.66,11001.66,10755.07,10883.51,1006300000,10883.51
+2001-05-07,10952.35,11059.51,10822.74,10935.17,949000000,10935.17
+2001-05-04,10793.20,10989.95,10638.48,10951.24,1082100000,10951.24
+2001-05-03,10872.32,10911.06,10657.99,10796.65,1137900000,10796.65
+2001-05-02,10902.77,11024.31,10726.77,10876.68,1342200000,10876.68
+2001-05-01,10734.05,10966.07,10669.32,10898.34,1181300000,10898.34
+2001-04-30,10814.41,10973.15,10666.13,10734.97,1226000000,10734.97
+2001-04-27,10694.95,10894.60,10632.36,10810.05,1091300000,10810.05
+2001-04-26,10633.01,10820.72,10533.98,10692.35,1345200000,10692.35
+2001-04-25,10453.43,10675.95,10373.14,10625.20,1203600000,10625.20
+2001-04-24,10529.75,10694.61,10401.45,10454.34,1216500000,10454.34
+2001-04-23,10571.00,10669.71,10393.05,10532.23,1012600000,10532.23
+2001-04-20,10690.33,10755.46,10445.43,10579.85,1338700000,10579.85
+2001-04-19,10616.09,10768.28,10468.79,10693.71,1486800000,10693.71
+2001-04-18,10226.88,10806.41,10215.69,10615.83,1918900000,10615.83
+2001-04-17,10151.73,10286.61,9980.22,10216.73,1109600000,10216.73
+2001-04-16,10118.16,10282.38,9991.14,10158.56,913900000,10158.56
+2001-04-12,10013.08,10178.22,9862.71,10126.94,1102000000,10126.94
+2001-04-11,10109.05,10246.59,9898.77,10013.47,1290300000,10013.47
+2001-04-10,9850.35,10226.85,9850.35,10102.74,1349600000,10102.74
+2001-04-09,9793.58,9999.35,9699.92,9845.15,1062800000,9845.15
+2001-04-06,9913.94,9951.73,9600.91,9791.09,1266800000,9791.09
+2001-04-05,9527.21,9969.92,9527.21,9918.05,1368000000,9918.05
+2001-04-04,9480.95,9693.05,9303.48,9515.42,1425590000,9515.42
+2001-04-03,9774.78,9779.74,9385.43,9485.71,1386100000,9485.71
+2001-04-02,9877.16,10043.02,9638.35,9777.93,1204200000,9777.93
+2001-03-30,9799.47,9998.49,9685.07,9878.78,1280800000,9878.78
+2001-03-29,9784.94,9950.22,9583.67,9799.06,1234500000,9799.06
+2001-03-28,9939.68,9939.68,9607.06,9785.35,1333400000,9785.35
+2001-03-27,9687.93,10012.98,9584.29,9947.54,1314200000,9947.54
+2001-03-26,9509.25,9820.50,9489.75,9687.53,1114000000,9687.53
+2001-03-23,9395.58,9631.80,9249.63,9504.78,1364900000,9504.78
+2001-03-22,9490.66,9565.40,9047.56,9389.48,1723950000,9389.48
+2001-03-21,9717.46,9807.08,9391.42,9487.00,1346300000,9487.00
+2001-03-20,9961.14,10130.45,9675.51,9720.76,1235900000,9720.76
+2001-03-19,9820.05,10059.08,9720.94,9959.11,1126200000,9959.11
+2001-03-16,10023.55,10119.44,9720.17,9823.41,1543560000,9823.41
+2001-03-15,9982.92,10190.80,9887.68,10031.28,1259500000,10031.28
+2001-03-14,10279.42,10279.42,9817.74,9973.46,1397400000,9973.46
+2001-03-13,10206.89,10397.83,10021.60,10290.80,1360900000,10290.80
+2001-03-12,10638.52,10638.63,10138.90,10208.25,1229000000,10208.25
+2001-03-09,10850.11,10874.15,10520.42,10644.62,1085900000,10644.62
+2001-03-08,10727.16,10940.45,10625.95,10858.25,1114100000,10858.25
+2001-03-07,10591.86,10822.23,10524.76,10729.60,1132200000,10729.60
+2001-03-06,10570.17,10759.40,10508.43,10591.22,1091800000,10591.22
+2001-03-05,10468.93,10659.52,10393.59,10562.30,929200000,10562.30
+2001-03-02,10438.04,10645.57,10239.81,10466.31,1294000000,10466.31
+2001-03-01,10493.25,10605.23,10236.92,10450.14,1294900000,10450.14
+2001-02-28,10639.32,10750.23,10374.62,10495.28,1225300000,10495.28
+2001-02-27,10638.44,10787.29,10463.92,10636.88,1114100000,10636.88
+2001-02-26,10447.59,10701.92,10347.59,10642.53,1130800000,10642.53
+2001-02-23,10529.25,10595.01,10225.14,10441.90,1231300000,10441.90
+2001-02-22,10527.80,10694.50,10278.93,10526.81,1365900000,10526.81
+2001-02-21,10721.29,10828.48,10468.32,10526.58,1208500000,10526.58
+2001-02-20,10800.23,10988.29,10612.25,10730.88,1112200000,10730.88
+2001-02-16,10884.11,10946.11,10652.33,10799.82,1257200000,10799.82
+2001-02-15,10800.65,11023.44,10694.43,10891.02,1153700000,10891.02
+2001-02-14,10899.42,10989.61,10683.39,10795.41,1150300000,10795.41
+2001-02-13,10950.18,11114.44,10774.98,10903.32,1075200000,10903.32
+2001-02-12,10779.42,11024.92,10727.02,10946.77,1039100000,10946.77
+2001-02-09,10878.51,10979.12,10682.77,10781.45,1075500000,10781.45
+2001-02-08,10940.62,11080.42,10776.04,10880.55,1107200000,10880.55
+2001-02-07,10948.95,11140.09,10794.29,10946.72,1158300000,10946.72
+2001-02-06,10965.03,11117.80,10820.28,10957.42,1059600000,10957.42
+2001-02-05,10860.44,11061.42,10759.98,10965.85,1013000000,10965.85
+2001-02-02,10982.71,11093.01,10786.69,10864.10,1048400000,10864.10
+2001-02-01,10884.82,11063.95,10759.85,10983.63,1118800000,10983.63
+2001-01-31,10882.25,11072.28,10705.23,10887.36,1295300000,10887.36
+2001-01-30,10702.19,10950.38,10609.77,10881.20,1149800000,10881.20
+2001-01-29,10657.13,10832.56,10515.99,10702.19,1053100000,10702.19
+2001-01-26,10727.08,10874.28,10506.26,10659.98,1098000000,10659.98
+2001-01-25,10644.53,10882.42,10520.90,10729.52,1258000000,10729.52
+2001-01-24,10651.85,10795.80,10483.49,10646.97,1309000000,10646.97
+2001-01-23,10575.80,10773.94,10459.91,10649.81,1232600000,10649.81
+2001-01-22,10581.90,10749.44,10371.66,10578.24,1164000000,10578.24
+2001-01-19,10686.00,10792.14,10448.93,10587.59,1407800000,10587.59
+2001-01-18,10584.57,10834.43,10466.01,10678.28,1445000000,10678.28
+2001-01-17,10660.95,10817.35,10442.83,10584.34,1349100000,10584.34
+2001-01-16,10525.78,10751.48,10362.72,10652.66,1205700000,10652.66
+2001-01-12,10608.74,10743.75,10339.94,10525.38,1276000000,10525.38
+2001-01-11,10600.20,10808.00,10400.94,10609.55,1411200000,10609.55
+2001-01-10,10568.48,10728.30,10325.71,10604.27,1296500000,10604.27
+2001-01-09,10625.21,10801.09,10387.12,10572.55,1191300000,10572.55
+2001-01-08,10658.73,10818.98,10407.85,10621.35,1115500000,10621.35
+2001-01-05,10912.81,10990.59,10492.84,10662.01,1430800000,10662.01
+2001-01-04,10944.94,11224.41,10672.58,10912.41,216940000,10912.41
+2001-01-03,10637.42,11212.62,10367.19,10945.75,188070000,10945.75
+2001-01-02,10790.92,10916.98,10450.55,10646.15,1129400000,10646.15
+2000-12-29,10868.76,11031.05,10675.75,10787.99,1035500000,10787.99
+2000-12-28,10795.20,11009.44,10645.42,10868.76,1015300000,10868.76
+2000-12-27,10690.10,10944.60,10551.00,10803.16,1092700000,10803.16
+2000-12-26,10638.21,10813.78,10479.71,10692.44,806500000,10692.44
+2000-12-22,10495.26,10772.07,10364.06,10635.56,1087100000,10635.56
+2000-12-21,10314.38,10651.96,10158.16,10487.29,1449900000,10487.29
+2000-12-20,10580.97,10604.08,10197.59,10318.93,1421600000,10318.93
+2000-12-19,10643.14,10865.35,10441.41,10584.37,1324900000,10584.37
+2000-12-18,10433.34,10783.82,10417.43,10645.42,1189900000,10645.42
+2000-12-15,10647.98,10706.84,10324.24,10434.96,156110000,10434.96
+2000-12-14,10794.82,10864.49,10508.53,10674.99,1061300000,10674.99
+2000-12-13,10777.95,11002.23,10653.76,10794.44,1195100000,10794.44
+2000-12-12,10722.77,10968.77,10582.09,10768.27,1083400000,10768.27
+2000-12-11,10719.36,10931.33,10521.04,10725.80,1202400000,10725.80
+2000-12-08,10632.14,10896.82,10534.69,10712.91,1358300000,10712.91
+2000-12-07,10644.66,10791.40,10448.99,10617.36,1128000000,10617.36
+2000-12-06,10896.14,10995.41,10513.84,10664.38,1399300000,10664.38
+2000-12-05,10576.78,11044.70,10504.36,10898.72,900300000,10898.72
+2000-12-04,10377.33,10701.35,10227.17,10560.95,1103000000,10560.95
+2000-12-01,10416.76,10645.42,10238.54,10373.54,1195200000,10373.54
+2000-11-30,10610.53,10690.16,10204.80,10414.49,1186530000,10414.49
+2000-11-29,10502.74,10746.66,10383.02,10629.11,402100000,10629.11
+2000-11-28,10537.86,10730.35,10356.47,10507.58,1028200000,10507.58
+2000-11-27,10479.33,10758.04,10411.08,10546.07,946100000,10546.07
+2000-11-24,10403.87,10596.50,10354.20,10470.23,404870000,10470.23
+2000-11-22,10484.26,10589.67,10251.06,10399.32,963200000,10399.32
+2000-11-21,10465.57,10676.13,10303.39,10494.50,1137100000,10494.50
+2000-11-20,10624.18,10707.22,10331.45,10462.65,955800000,10462.65
+2000-11-17,10657.13,10824.77,10462.55,10629.87,1070400000,10629.87
+2000-11-16,10705.33,10857.38,10536.30,10656.03,956300000,10656.03
+2000-11-15,10681.21,10863.83,10544.17,10707.60,1066800000,10707.60
+2000-11-14,10528.25,10809.61,10484.64,10681.06,1118800000,10681.06
+2000-11-13,10595.35,10701.54,10273.24,10517.25,1129300000,10517.25
+2000-11-10,10813.78,10886.20,10497.53,10602.95,962500000,10602.95
+2000-11-09,10902.11,10989.34,10576.40,10834.25,1111000000,10834.25
+2000-11-08,10954.34,11152.02,10779.27,10907.06,909300000,10907.06
+2000-11-07,10978.72,11105.75,10825.15,10952.18,880900000,10952.18
+2000-11-06,10820.60,11092.10,10741.73,10977.21,930900000,10977.21
+2000-11-03,10883.17,10996.17,10650.72,10817.95,997700000,10817.95
+2000-11-02,10903.17,11071.06,10731.49,10880.51,1167700000,10880.51
+2000-11-01,10966.21,11103.10,10736.42,10899.47,1206800000,10899.47
+2000-10-31,10835.39,11108.79,10681.06,10971.14,1366400000,10971.14
+2000-10-30,10588.06,10944.98,10506.25,10835.77,1186500000,10835.77
+2000-10-27,10381.60,10696.43,10296.70,10590.62,1086300000,10590.62
+2000-10-26,10330.18,10563.25,10128.18,10380.12,1303800000,10380.12
+2000-10-25,10395.66,10563.99,10170.08,10326.48,1315600000,10326.48
+2000-10-24,10273.57,10583.96,10136.69,10393.07,1158600000,10393.07
+2000-10-23,10230.29,10496.28,10078.24,10271.72,1046800000,10271.72
+2000-10-20,10141.13,10406.76,9925.82,10226.59,1177400000,10226.59
+2000-10-19,10014.61,10317.23,9901.77,10142.98,1297900000,10142.98
+2000-10-18,10085.99,10171.47,9571.40,9975.02,1441700000,9975.02
+2000-10-17,10242.87,10402.32,9924.34,10089.71,1161500000,10089.71
+2000-10-16,10184.78,10428.95,10033.84,10238.80,1005400000,10238.80
+2000-10-13,10031.62,10325.37,9883.27,10192.18,1223900000,10192.18
+2000-10-12,10424.14,10462.25,9873.66,10034.58,1388600000,10034.58
+2000-10-11,10521.07,10647.23,10228.44,10413.79,1387500000,10413.79
+2000-10-10,10569.17,10744.52,10377.16,10524.40,1044000000,10524.40
+2000-10-09,10596.91,10762.10,10438.94,10568.43,716600000,10568.43
+2000-10-06,10726.76,10871.42,10440.05,10596.54,1150100000,10596.54
+2000-10-05,10783.72,10940.23,10570.28,10724.92,1176100000,10724.92
+2000-10-04,10723.33,10972.41,10596.54,10784.48,1167400000,10784.48
+2000-10-03,10709.84,10976.11,10561.03,10719.74,1098100000,10719.74
+2000-10-02,10659.06,10876.23,10479.27,10700.13,1051200000,10700.13
+2000-09-29,10821.40,10923.21,10552.15,10650.92,1197100000,10650.92
+2000-09-28,10629.84,10948.00,10539.48,10824.06,1206200000,10824.06
+2000-09-27,10634.45,10821.10,10439.31,10628.36,1174700000,10628.36
+2000-09-26,10806.30,10915.44,10499.61,10631.32,1106600000,10631.32
+2000-09-25,10847.37,11039.47,10664.24,10808.15,982400000,10808.15
+2000-09-22,10678.30,10936.53,10505.16,10847.37,1185500000,10847.37
+2000-09-21,10680.52,10902.12,10548.08,10765.52,1105400000,10765.52
+2000-09-20,10794.47,10906.93,10500.35,10687.92,1104000000,10687.92
+2000-09-19,10812.22,10960.95,10645.38,10789.29,1024900000,10789.29
+2000-09-18,10926.42,11053.80,10693.84,10808.52,962500000,10808.52
+2000-09-15,11087.84,11203.26,10857.73,10927.00,1268400000,10927.00
+2000-09-14,11189.58,11285.39,10986.47,11087.47,1014000000,11087.47
+2000-09-13,11225.03,11350.87,11020.14,11182.18,1068300000,11182.18
+2000-09-12,11197.71,11351.98,11015.70,11233.23,991200000,11233.23
+2000-09-11,11219.54,11367.15,11043.07,11195.49,899300000,11195.49
+2000-09-08,11261.72,11381.95,11059.72,11220.65,961000000,11220.65
+2000-09-07,11316.01,11444.84,11124.83,11259.87,985500000,11259.87
+2000-09-06,11253.58,11518.83,11186.25,11310.64,995100000,11310.64
+2000-09-05,11221.76,11382.69,11094.50,11260.61,838500000,11260.61
+2000-09-01,11219.54,11406.74,11130.01,11238.78,767700000,11238.78
+2000-08-31,11105.23,11415.99,11040.85,11215.10,1056600000,11215.10
+2000-08-30,11209.01,11282.06,11034.57,11103.01,818400000,11103.01
+2000-08-29,11249.27,11356.42,11100.79,11215.10,795600000,11215.10
+2000-08-28,11194.48,11410.44,11123.35,11252.84,733600000,11252.84
+2000-08-25,11180.54,11301.41,11073.59,11192.63,685600000,11192.63
+2000-08-24,11143.91,11302.51,11009.12,11182.74,837100000,11182.74
+2000-08-23,11130.55,11253.06,10990.44,11144.65,871000000,11144.65
+2000-08-22,11082.20,11274.67,11000.33,11139.15,818800000,11139.15
+2000-08-21,11058.85,11193.73,10945.39,11079.81,731600000,11079.81
+2000-08-18,11051.20,11180.54,10933.30,11046.48,821400000,11046.48
+2000-08-17,11010.95,11180.91,10899.24,11055.64,922400000,11055.64
+2000-08-16,11068.83,11171.02,10888.62,11008.39,929800000,11008.39
+2000-08-15,11175.05,11227.06,10965.54,11067.00,895900000,11067.00
+2000-08-14,11027.07,11232.92,10928.91,11176.14,783800000,11176.14
+2000-08-11,10905.98,11131.83,10841.37,11027.80,835500000,11027.80
+2000-08-10,10901.06,11069.93,10779.47,10908.76,940800000,10908.76
+2000-08-09,10970.94,11097.03,10780.02,10905.83,1054000000,10905.83
+2000-08-08,10865.15,11083.11,10741.38,10976.89,992200000,10976.89
+2000-08-07,10773.98,10973.23,10657.50,10867.01,854800000,10867.01
+2000-08-04,10713.36,10873.97,10555.68,10767.75,956000000,10767.75
+2000-08-03,10679.37,10844.30,10518.68,10706.58,1095600000,10706.58
+2000-08-02,10609.15,10818.66,10514.29,10687.53,986300000,10687.53
+2000-08-01,10523.81,10728.92,10428.58,10606.95,938700000,10606.95
+2000-07-31,10514.29,10727.09,10374.00,10521.98,952600000,10521.98
+2000-07-28,10594.97,10732.14,10367.28,10511.17,980000000,10511.17
+2000-07-27,10516.83,10745.93,10450.01,10586.13,1156400000,10586.13
+2000-07-26,10689.36,10790.13,10447.18,10516.48,1235800000,10516.48
+2000-07-25,10689.28,10867.20,10557.49,10699.97,969400000,10699.97
+2000-07-24,10731.44,10895.84,10545.47,10685.12,880300000,10685.12
+2000-07-21,10843.51,10949.58,10614.06,10733.56,968300000,10733.56
+2000-07-20,10700.68,10980.34,10671.33,10843.87,1064600000,10843.87
+2000-07-19,10724.15,10907.15,10587.89,10696.08,909400000,10696.08
+2000-07-18,10799.16,10895.57,10613.00,10739.92,908300000,10739.92
+2000-07-17,10812.40,10969.38,10653.30,10804.27,906000000,10804.27
+2000-07-14,10793.31,10935.44,10661.43,10812.75,960600000,10812.75
+2000-07-13,10774.92,10963.02,10643.40,10788.71,1026800000,10788.71
+2000-07-12,10722.24,10930.84,10639.51,10783.76,1001200000,10783.76
+2000-07-11,10649.06,10877.46,10544.76,10727.19,980500000,10727.19
+2000-07-10,10627.14,10792.25,10520.01,10646.58,838700000,10646.58
+2000-07-07,10483.33,10742.04,10419.25,10635.98,931700000,10635.98
+2000-07-06,10481.45,10644.11,10303.28,10481.47,947300000,10481.47
+2000-07-05,10538.23,10674.16,10362.33,10483.60,1019300000,10483.60
+2000-07-03,10450.36,10610.17,10353.66,10560.67,451900000,10560.67
+2000-06-30,10393.09,10626.79,10161.51,10447.89,1459700000,10447.89
+2000-06-29,10523.90,10582.94,10279.24,10398.04,1110900000,10398.04
+2000-06-28,10506.39,10712.70,10399.10,10527.79,1095100000,10527.79
+2000-06-27,10541.58,10741.69,10384.60,10504.46,1042500000,10504.46
+2000-06-26,10403.69,10680.26,10365.15,10542.99,889000000,10542.99
+2000-06-23,10376.47,10555.37,10283.13,10404.75,847600000,10404.75
+2000-06-22,10495.97,10596.73,10256.97,10376.12,1022700000,10376.12
+2000-06-21,10446.83,10607.69,10312.48,10497.74,1009600000,10497.74
+2000-06-20,10558.90,10632.09,10318.84,10435.16,1031500000,10435.16
+2000-06-19,10448.40,10733.56,10322.02,10557.84,921700000,10557.84
+2000-06-16,10717.76,10784.47,10393.44,10449.30,1250800000,10449.30
+2000-06-15,10689.63,10889.48,10552.89,10714.82,1011400000,10714.82
+2000-06-14,10632.46,10860.84,10542.99,10687.95,929700000,10687.95
+2000-06-13,10562.31,10751.86,10395.56,10621.84,935900000,10621.84
+2000-06-12,10615.12,10757.60,10476.88,10564.21,774100000,10564.21
+2000-06-09,10678.47,10848.38,10515.52,10614.06,786000000,10614.06
+2000-06-08,10818.78,10887.72,10524.92,10668.72,854300000,10668.72
+2000-06-07,10733.48,10974.07,10588.64,10812.86,854600000,10812.86
+2000-06-06,10822.61,10916.97,10592.82,10735.57,950100000,10735.57
+2000-06-05,10793.11,10951.79,10629.03,10815.30,838600000,10815.30
+2000-06-02,10660.09,11013.05,10600.46,10794.76,1162400000,10794.76
+2000-06-01,10532.27,10780.37,10422.95,10652.20,960100000,10652.20
+2000-05-31,10528.28,10692.73,10377.37,10522.33,960500000,10522.33
+2000-05-30,10302.31,10596.00,10287.94,10527.13,844200000,10527.13
+2000-05-26,10322.89,10487.72,10163.20,10299.24,722600000,10299.24
+2000-05-25,10529.87,10644.32,10207.75,10323.92,984500000,10323.92
+2000-05-24,10420.90,10679.53,10240.99,10535.35,1152300000,10535.35
+2000-05-23,10539.12,10671.74,10325.63,10422.27,869900000,10422.27
+2000-05-22,10624.79,10718.00,10308.15,10542.55,869000000,10542.55
+2000-05-19,10764.22,10821.83,10468.18,10626.85,853700000,10626.85
+2000-05-18,10771.80,10938.34,10669.00,10777.28,807900000,10777.28
+2000-05-17,10930.64,10947.25,10648.78,10769.74,820500000,10769.74
+2000-05-16,10816.01,11086.72,10723.48,10934.57,955500000,10934.57
+2000-05-15,10606.97,10902.36,10509.31,10807.78,854600000,10807.78
+2000-05-12,10549.06,10780.37,10444.54,10609.37,858200000,10609.37
+2000-05-11,10369.27,10676.88,10315.69,10545.97,953600000,10545.97
+2000-05-10,10533.09,10649.95,10169.77,10367.78,1006400000,10367.78
+2000-05-09,10607.54,10765.75,10435.96,10536.75,896600000,10536.75
+2000-05-08,10571.31,10744.22,10400.40,10603.63,787600000,10603.63
+2000-05-05,10409.70,10688.61,10312.91,10577.86,805500000,10577.86
+2000-05-04,10478.89,10631.53,10293.05,10412.49,925800000,10412.49
+2000-05-03,10732.21,10754.39,10345.17,10480.13,991600000,10480.13
+2000-05-02,10805.58,10932.47,10580.65,10731.12,1011500000,10731.12
+2000-05-01,10749.42,11001.34,10622.22,10811.78,966300000,10811.78
+2000-04-28,10892.76,11005.07,10632.46,10733.91,984600000,10733.91
+2000-04-27,10941.91,11024.61,10650.14,10888.10,1111000000,10888.10
+2000-04-26,11127.92,11246.75,10816.44,10945.50,999600000,10945.50
+2000-04-25,10916.65,11265.67,10764.62,11124.82,1071100000,11124.82
+2000-04-24,10822.33,11060.29,10579.10,10906.10,868700000,10906.10
+2000-04-20,10668.19,10941.47,10582.51,10844.05,896200000,10844.05
+2000-04-19,10748.97,10909.20,10503.40,10674.96,1001400000,10674.96
+2000-04-18,10584.02,10941.78,10424.90,10767.42,1109400000,10767.42
+2000-04-17,10303.29,10721.50,10128.62,10582.51,1204700000,10582.51
+2000-04-14,10922.85,10922.85,10173.92,10305.77,1279700000,10305.77
+2000-04-13,11132.58,11290.80,10806.51,10923.55,1032000000,10923.55
+2000-04-12,11283.05,11600.43,11026.47,11125.13,1175900000,11125.13
+2000-04-11,11180.98,11459.58,11024.22,11287.08,971400000,11287.08
+2000-04-10,11114.89,11404.35,10955.43,11186.56,853700000,11186.56
+2000-04-07,11122.03,11317.79,10932.78,11111.48,891600000,11111.48
+2000-04-06,11029.56,11303.83,10921.07,11114.27,1008000000,11114.27
+2000-04-05,11163.29,11326.79,10894.00,11033.92,1110300000,11033.92
+2000-04-04,11225.34,11531.24,10682.72,11164.84,1515460000,11164.84
+2000-04-03,10863.28,11344.17,10821.71,11221.93,1021700000,11221.93
+2000-03-31,10993.28,11244.58,10801.23,10921.92,1227400000,10921.92
+2000-03-30,11008.17,11258.23,10796.58,10980.25,1193400000,10980.25
+2000-03-29,10939.05,11214.48,10792.24,11018.72,1061900000,11018.72
+2000-03-28,11023.68,11192.76,10804.65,10936.11,959100000,10936.11
+2000-03-27,11093.25,11274.98,10881.90,11025.85,901000000,11025.85
+2000-03-24,11107.45,11311.28,10901.44,11112.72,1052200000,11112.72
+2000-03-23,10884.38,11224.72,10737.63,11119.86,1078300000,11119.86
+2000-03-22,10916.96,11054.71,10671.86,10866.70,1075000000,10866.70
+2000-03-21,10680.24,11012.20,10515.50,10907.34,1065900000,10907.34
+2000-03-20,10594.75,10866.08,10456.86,10680.24,920800000,10680.24
+2000-03-17,10629.98,10849.32,10399.15,10595.23,1295100000,10595.23
+2000-03-16,10139.58,10716.23,10139.58,10630.60,1482300000,10630.60
+2000-03-15,9808.15,10294.60,9676.90,10131.41,1302800000,10131.41
+2000-03-14,9957.67,10149.41,9747.33,9811.24,1094000000,9811.24
+2000-03-13,9911.22,10111.25,9670.07,9947.13,1016100000,9947.13
+2000-03-10,10008.55,10211.77,9792.93,9928.82,1138800000,9928.82
+2000-03-09,9855.29,10097.28,9667.28,10010.73,1123000000,10010.73
+2000-03-08,9800.69,10037.41,9611.75,9856.53,1203000000,9856.53
+2000-03-07,10197.61,10208.66,9651.77,9796.03,1314100000,9796.03
+2000-03-06,10358.96,10518.91,10038.65,10170.50,1029000000,10170.50
+2000-03-03,10171.12,10581.89,10148.16,10367.20,1150300000,10367.20
+2000-03-02,10135.44,10361.61,9986.53,10164.92,1198600000,10164.92
+2000-03-01,10128.11,10355.72,9935.96,10137.93,1274100000,10137.93
+2000-02-29,10039.58,10332.14,9926.65,10128.31,1204300000,10128.31
+2000-02-28,9854.66,10228.52,9760.36,10038.65,1026500000,10038.65
+2000-02-25,10090.77,10196.02,9767.80,9862.12,1065200000,9862.12
+2000-02-24,10242.48,10321.90,9877.94,10092.63,1215000000,10092.63
+2000-02-23,10294.82,10443.21,10077.74,10225.73,993700000,10225.73
+2000-02-22,10219.83,10446.62,10011.66,10304.84,980000000,10304.84
+2000-02-18,10514.57,10562.34,10129.24,10219.52,1042300000,10219.52
+2000-02-17,10565.76,10768.66,10348.66,10514.57,1034800000,10514.57
+2000-02-16,10711.82,10831.64,10468.65,10561.41,1018800000,10561.41
+2000-02-15,10520.15,10821.09,10377.44,10718.09,1092100000,10718.09
+2000-02-14,10431.65,10674.96,10327.56,10519.84,927300000,10519.84
+2000-02-11,10638.64,10763.38,10301.12,10425.21,1025700000,10425.21
+2000-02-10,10697.92,10853.67,10491.30,10643.63,1058800000,10643.63
+2000-02-09,10948.82,11016.54,10647.97,10699.16,1050500000,10699.16
+2000-02-08,10904.26,11139.40,10826.67,10957.60,1047700000,10957.60
+2000-02-07,10965.97,11097.52,10732.67,10905.79,918100000,10905.79
+2000-02-04,11014.37,11200.83,10847.54,10963.80,1045100000,10963.80
+2000-02-03,11010.48,11207.97,10799.68,11013.44,1146500000,11013.44
+2000-02-02,11037.64,11228.44,10876.00,11003.20,1038600000,11003.20
+2000-02-01,10937.74,11187.18,10798.44,11041.05,981000000,11041.05
+2000-01-31,10735.77,11059.67,10610.43,10940.53,993800000,10940.53
+2000-01-28,11024.92,11115.20,10649.21,10738.87,1095800000,10738.87
+2000-01-27,11035.55,11274.36,10818.30,11028.02,1129500000,11028.02
+2000-01-26,11025.85,11280.87,10870.73,11032.99,1117300000,11032.99
+2000-01-25,11010.96,11228.75,10779.83,11029.89,1073700000,11029.89
+2000-01-24,11251.94,11501.15,10849.01,11008.17,1115800000,11008.17
+2000-01-21,11356.26,11513.87,11113.65,11251.71,1209800000,11251.71
+2000-01-20,11490.29,11654.72,11194.32,11351.30,1100700000,11351.30
+2000-01-19,11535.24,11710.57,11320.28,11489.36,1087800000,11489.36
+2000-01-18,11719.19,11834.67,11397.22,11560.72,1056700000,11560.72
+2000-01-14,11619.35,11908.50,11506.42,11722.98,1085900000,11722.98
+2000-01-13,11558.24,11761.14,11421.42,11582.43,1030400000,11582.43
+2000-01-12,11506.73,11751.83,11385.74,11551.10,974600000,11551.10
+2000-01-11,11568.47,11748.11,11398.30,11511.08,1014000000,11511.08
+2000-01-10,11532.48,11765.17,11427.00,11572.20,1064800000,11572.20
+2000-01-07,11247.06,11655.65,11168.26,11522.56,1225200000,11522.56
+2000-01-06,11113.37,11447.79,10963.18,11253.26,1092300000,11253.26
+2000-01-05,10989.37,11337.65,10862.66,11122.65,1085500000,11122.65
+2000-01-04,11349.75,11358.44,10907.03,10997.93,1009000000,10997.93
+2000-01-03,11501.85,11641.07,11180.98,11357.51,931800000,11357.51
+1999-12-31,11453.48,11598.26,11368.05,11497.12,374050000,11497.12
+1999-12-30,11484.36,11640.33,11388.94,11452.86,554680000,11452.86
+1999-12-29,11472.88,11658.68,11367.53,11484.66,567860000,11484.66
+1999-12-28,11389.24,11613.72,11302.08,11476.71,655400000,11476.71
+1999-12-27,11410.65,11603.02,11253.15,11391.08,722600000,11391.08
+1999-12-23,11202.07,11506.38,11202.07,11405.76,728600000,11405.76
+1999-12-22,11199.45,11375.17,11075.76,11203.60,850000000,11203.60
+1999-12-21,11142.43,11336.03,10973.61,11200.54,963500000,11200.54
+1999-12-20,11254.50,11417.38,11026.22,11144.27,904600000,11144.27
+1999-12-17,11259.26,11497.20,11103.59,11257.43,1349800000,11257.43
+1999-12-16,11224.40,11396.89,11016.13,11244.89,1070300000,11244.89
+1999-12-15,11158.78,11400.48,11014.60,11225.32,1033900000,11225.32
+1999-12-14,11195.34,11336.33,11027.13,11160.17,1027800000,11160.17
+1999-12-13,11217.46,11379.46,11024.38,11192.59,977600000,11192.59
+1999-12-10,11137.85,11358.66,11042.12,11224.70,987200000,11224.70
+1999-12-09,11073.62,11327.46,10962.60,11134.79,1122100000,11134.79
+1999-12-08,11107.26,11273.33,10957.41,11068.12,957000000,11068.12
+1999-12-07,11221.65,11351.32,10993.49,11106.65,1085800000,11106.65
+1999-12-06,11286.79,11412.79,11100.53,11225.01,916800000,11225.01
+1999-12-03,11046.10,11423.50,11046.10,11286.18,1006400000,11286.18
+1999-12-02,10995.02,11183.72,10896.24,11039.06,900700000,11039.06
+1999-12-01,10876.47,11111.24,10798.07,10998.39,884000000,10998.39
+1999-11-30,10945.49,11142.13,10785.22,10877.81,951500000,10877.81
+1999-11-29,10985.73,11059.25,10813.97,10947.92,866100000,10947.92
+1999-11-26,11007.26,11115.83,10938.44,10988.91,312120000,10988.91
+1999-11-24,11000.22,11131.12,10859.23,11008.17,734800000,11008.17
+1999-11-23,11090.29,11178.83,10899.60,10995.63,926100000,10995.63
+1999-11-22,11008.78,11195.34,10887.67,11089.52,873500000,11089.52
+1999-11-19,11033.25,11146.41,10871.77,11003.89,893800000,11003.89
+1999-11-18,10887.67,11147.02,10859.92,11035.70,1022800000,11035.70
+1999-11-17,10929.00,11040.90,10774.21,10883.09,960000000,10883.09
+1999-11-16,10762.89,10992.88,10691.94,10932.33,942200000,10932.33
+1999-11-15,10764.73,10899.22,10626.80,10760.75,795700000,10760.75
+1999-11-12,10593.51,10845.16,10513.03,10769.32,900200000,10769.32
+1999-11-11,10603.25,10716.71,10485.20,10595.30,891300000,10595.30
+1999-11-10,10611.94,10713.04,10449.42,10597.74,984700000,10597.74
+1999-11-09,10715.10,10806.02,10506.61,10617.32,854300000,10617.32
+1999-11-08,10668.42,10838.74,10548.20,10718.85,806800000,10718.85
+1999-11-05,10639.95,10885.53,10636.59,10704.48,1007300000,10704.48
+1999-11-04,10612.42,10817.95,10523.43,10639.64,981700000,10639.64
+1999-11-03,10582.54,10759.22,10485.50,10609.06,914400000,10609.06
+1999-11-02,10653.71,10816.11,10508.14,10581.84,904500000,10581.84
+1999-11-01,10730.78,10828.96,10568.08,10648.51,861000000,10648.51
+1999-10-29,10629.18,10883.10,10580.11,10729.86,1120500000,10729.86
+1999-10-28,10397.67,10726.70,10397.67,10622.53,1135100000,10622.53
+1999-10-27,10302.76,10515.21,10172.32,10394.89,950100000,10394.89
+1999-10-26,10350.88,10486.39,10208.73,10302.13,878300000,10302.13
+1999-10-25,10468.98,10518.37,10225.82,10349.93,777000000,10349.93
+1999-10-22,10581.69,10581.69,10301.18,10470.25,959200000,10470.25
+1999-10-21,10390.71,10414.52,10047.57,10297.69,1012500000,10297.69
+1999-10-20,10203.31,10485.13,10144.46,10392.36,928800000,10392.36
+1999-10-19,10117.54,10418.01,10093.80,10204.93,905700000,10204.93
+1999-10-18,10018.45,10221.08,9884.20,10116.28,818700000,10116.28
+1999-10-15,10286.61,10286.61,9911.43,10019.71,912600000,10019.71
+1999-10-14,10230.89,10416.74,10071.64,10286.61,892300000,10286.61
+1999-10-13,10412.31,10495.89,10173.58,10232.16,821500000,10232.16
+1999-10-12,10648.81,10659.58,10366.08,10417.06,778300000,10417.06
+1999-10-11,10649.76,10781.16,10545.60,10648.18,655900000,10648.18
+1999-10-08,10534.52,10743.48,10423.71,10649.76,897300000,10649.76
+1999-10-07,10588.34,10687.12,10430.99,10537.05,827800000,10537.05
+1999-10-06,10399.77,10655.46,10340.75,10588.34,895200000,10588.34
+1999-10-05,10401.23,10578.21,10250.20,10400.59,965700000,10400.59
+1999-10-04,10274.58,10538.32,10220.44,10401.23,803300000,10401.23
+1999-10-01,10335.69,10425.92,10108.05,10273.00,896200000,10273.00
+1999-09-30,10214.11,10456.32,10156.85,10336.95,1017600000,10336.95
+1999-09-29,10274.27,10408.51,10119.76,10213.48,856000000,10213.48
+1999-09-28,10300.51,10386.03,10055.17,10275.53,885400000,10275.53
+1999-09-27,10279.33,10498.74,10201.76,10303.39,780600000,10303.39
+1999-09-24,10311.94,10428.14,10128.63,10279.33,872800000,10279.33
+1999-09-23,10524.07,10643.75,10260.33,10318.59,890800000,10318.59
+1999-09-22,10599.42,10688.39,10407.56,10524.07,822200000,10524.07
+1999-09-21,10822.95,10822.95,10517.10,10598.47,817300000,10598.47
+1999-09-20,10801.87,10918.88,10715.93,10823.90,568000000,10823.90
+1999-09-17,10745.38,10946.74,10690.61,10803.63,861900000,10803.63
+1999-09-16,10795.77,10876.46,10592.46,10737.46,739000000,10737.46
+1999-09-15,10910.40,11049.96,10757.41,10801.42,787300000,10801.42
+1999-09-14,11028.74,11061.04,10815.67,10910.33,734500000,10910.33
+1999-09-13,11027.40,11146.52,10886.90,11030.33,657900000,11030.33
+1999-09-10,11087.00,11218.39,10965.74,11028.43,808500000,11028.43
+1999-09-09,11031.28,11172.17,10900.83,11079.40,773900000,11079.40
+1999-09-08,11034.13,11164.89,10898.62,11036.34,791200000,11036.34
+1999-09-07,11079.08,11191.80,10910.65,11034.13,715300000,11034.13
+1999-09-03,10922.36,11155.70,10922.36,11078.45,663200000,11078.45
+1999-09-02,10923.95,10923.95,10669.71,10843.21,687100000,10843.21
+1999-09-01,10828.44,11013.55,10784.32,10937.88,708200000,10937.88
+1999-08-31,10909.70,11079.08,10725.43,10829.28,861700000,10829.28
+1999-08-30,11087.69,11176.60,10869.81,10914.13,597900000,10914.13
+1999-08-27,11198.45,11295.33,11021.14,11090.17,570050000,11090.17
+1999-08-26,11326.04,11393.48,11133.86,11198.45,719000000,11198.45
+1999-08-25,11282.38,11428.94,11106.31,11326.04,864600000,11326.04
+1999-08-24,11297.54,11404.87,11135.76,11283.30,732700000,11283.30
+1999-08-23,11099.66,11344.09,11087.95,11299.76,682600000,11299.76
+1999-08-20,10963.84,11155.07,10916.35,11100.61,661200000,11100.61
+1999-08-19,10988.85,11037.29,10809.65,10963.84,684200000,10963.84
+1999-08-18,11109.66,11153.49,10913.50,10991.38,682800000,10991.38
+1999-08-17,11049.64,11180.08,10963.52,11117.08,691500000,11117.08
+1999-08-16,10980.11,11105.05,10853.98,11046.79,583550000,11046.79
+1999-08-13,10822.00,11049.64,10822.00,10973.65,691700000,10973.65
+1999-08-12,10785.65,10967.64,10688.07,10789.39,745600000,10789.39
+1999-08-11,10650.59,10878.99,10596.26,10787.80,792300000,10787.80
+1999-08-10,10704.22,10812.82,10487.34,10655.15,836200000,10655.15
+1999-08-09,10714.03,10854.61,10571.56,10707.70,684300000,10707.70
+1999-08-06,10792.58,10896.08,10584.54,10714.03,698900000,10714.03
+1999-08-05,10675.41,10876.77,10509.19,10793.82,859300000,10793.82
+1999-08-04,10675.66,10901.78,10585.17,10674.77,789300000,10674.77
+1999-08-03,10645.96,10812.82,10538.00,10677.31,739600000,10677.31
+1999-08-02,10654.83,10849.23,10551.30,10645.96,649550000,10645.96
+1999-07-30,10791.29,10897.98,10594.99,10655.15,736800000,10655.15
+1999-07-29,10920.15,10920.15,10672.24,10791.29,770100000,10791.29
+1999-07-28,10979.04,11090.48,10851.13,10972.07,690900000,10972.07
+1999-07-27,10863.16,11079.40,10834.35,10979.04,723800000,10979.04
+1999-07-26,10910.96,11014.50,10748.86,10863.16,613450000,10863.16
+1999-07-23,10979.67,11069.59,10813.77,10910.96,630580000,10910.96
+1999-07-22,11002.78,11140.51,10796.67,10969.22,771700000,10969.22
+1999-07-21,10998.94,11142.72,10865.69,11002.78,785500000,11002.78
+1999-07-20,11130.06,11245.62,10914.13,10996.13,754800000,10996.13
+1999-07-19,11209.84,11321.61,11069.90,11187.68,642330000,11187.68
+1999-07-16,11188.63,11300.08,11069.27,11209.84,714100000,11209.84
+1999-07-15,11200.03,11313.37,11072.75,11186.41,818800000,11186.41
+1999-07-14,11202.24,11289.95,11051.86,11148.10,756100000,11148.10
+1999-07-13,11106.31,11277.60,11013.55,11175.02,736000000,11175.02
+1999-07-12,11234.22,11314.64,11087.95,11200.98,685300000,11200.98
+1999-07-09,11142.72,11284.25,11050.59,11193.70,701000000,11193.70
+1999-07-08,11118.66,11290.58,10985.68,11126.89,830600000,11126.89
+1999-07-07,11129.74,11268.42,11008.16,11187.36,791200000,11187.36
+1999-07-06,11119.93,11291.21,11021.78,11135.12,722900000,11135.12
+1999-07-02,11089.53,11205.41,10995.50,11139.24,613570000,11139.24
+1999-07-01,10972.39,11156.65,10841.63,11066.42,843400000,11066.42
+1999-06-30,10805.22,11120.24,10657.36,10970.80,1117000000,10970.80
+1999-06-29,10673.83,10855.56,10589.61,10815.35,820100000,10815.35
+1999-06-28,10633.93,10792.24,10535.15,10655.15,652910000,10655.15
+1999-06-25,10586.44,10719.42,10477.21,10552.56,623460000,10552.56
+1999-06-24,10620.32,10736.83,10404.07,10534.83,690400000,10534.83
+1999-06-23,10702.32,10791.29,10542.75,10666.86,731800000,10666.86
+1999-06-22,10768.49,10879.94,10639.63,10721.63,716500000,10721.63
+1999-06-21,10865.06,10960.36,10684.91,10815.98,686600000,10815.98
+1999-06-18,10885.00,10978.09,10751.39,10855.56,914500000,10855.56
+1999-06-17,10732.71,10936.61,10642.80,10841.63,700300000,10841.63
+1999-06-16,10709.92,10883.74,10608.92,10784.95,806800000,10784.95
+1999-06-15,10612.09,10740.00,10500.01,10594.99,696600000,10594.99
+1999-06-14,10490.83,10691.24,10414.52,10563.33,669400000,10563.33
+1999-06-11,10619.69,10744.11,10386.98,10490.51,698200000,10490.51
+1999-06-10,10621.58,10736.20,10452.52,10621.27,716500000,10621.27
+1999-06-09,10780.84,10871.39,10602.59,10690.29,662000000,10690.29
+1999-06-08,10878.35,10954.66,10671.93,10765.64,685900000,10765.64
+1999-06-07,10805.20,11016.40,10718.47,10909.38,664300000,10909.38
+1999-06-04,10702.64,10892.60,10558.26,10799.84,694500000,10799.84
+1999-06-03,10629.18,10767.86,10515.52,10663.69,719600000,10663.69
+1999-06-02,10591.82,10694.09,10388.24,10577.89,728000000,10577.89
+1999-06-01,10549.08,10717.20,10334.42,10596.26,683800000,10596.26
+1999-05-28,10489.56,10690.07,10389.94,10559.74,649960000,10559.74
+1999-05-27,10643.04,10734.21,10372.96,10466.93,811400000,10466.93
+1999-05-26,10580.94,10818.08,10416.06,10702.16,870800000,10702.16
+1999-05-25,10651.73,10818.96,10494.52,10531.09,826700000,10531.09
+1999-05-24,10829.87,10924.26,10568.85,10654.67,754700000,10654.67
+1999-05-21,10879.13,10974.69,10728.12,10829.28,686600000,10829.28
+1999-05-20,10892.40,11020.70,10773.83,10866.74,752200000,10866.74
+1999-05-19,10836.67,10988.85,10722.81,10887.39,801100000,10887.39
+1999-05-18,10895.94,11017.75,10678.86,10836.95,753400000,10836.95
+1999-05-17,10864.35,10976.32,10677.64,10853.47,665500000,10853.47
+1999-05-14,10950.26,11076.55,10787.03,10913.32,727800000,10913.32
+1999-05-13,11087.71,11244.36,10931.36,11107.19,796900000,11107.19
+1999-05-12,11002.38,11146.71,10759.54,11000.37,825500000,11000.37
+1999-05-11,11059.65,11185.08,10882.11,11026.15,836100000,11026.15
+1999-05-10,11029.25,11173.05,10876.38,11007.25,773300000,11007.25
+1999-05-07,10967.16,11135.54,10838.29,11031.59,814900000,11031.59
+1999-05-06,10909.02,11093.44,10730.33,10946.82,875400000,10946.82
+1999-05-05,10902.72,11055.36,10711.15,10955.41,913500000,10955.41
+1999-05-04,11012.11,11140.12,10787.32,10886.11,933100000,10886.11
+1999-05-03,10788.75,11083.13,10701.12,11014.69,811400000,11014.69
+1999-04-30,10933.94,11072.25,10603.76,10789.04,936500000,10789.04
+1999-04-29,10864.64,11052.49,10710.00,10878.38,1003600000,10878.38
+1999-04-28,10806.22,11050.77,10665.90,10845.45,951700000,10845.45
+1999-04-27,10781.88,10977.46,10647.29,10831.71,891700000,10831.71
+1999-04-26,10721.17,10854.33,10540.47,10718.59,712000000,10718.59
+1999-04-23,10646.71,10858.34,10530.45,10689.67,744900000,10689.67
+1999-04-22,10735.77,10896.42,10517.85,10727.18,927900000,10727.18
+1999-04-21,10462.58,10702.56,10309.09,10581.42,920000000,10581.42
+1999-04-20,10440.53,10610.06,10212.87,10448.55,985400000,10448.55
+1999-04-19,10566.07,10879.76,10284.39,10440.53,1214400000,10440.53
+1999-04-16,10497.26,10632.90,10299.55,10493.89,1002300000,10493.89
+1999-04-15,10411.66,10673.90,10201.31,10462.72,1089800000,10462.72
+1999-04-14,10436.91,10692.49,10196.87,10411.66,952000000,10411.66
+1999-04-13,10340.62,10512.11,10239.33,10395.01,810900000,10395.01
+1999-04-12,10094.19,10384.46,10042.02,10339.51,810800000,10339.51
+1999-04-09,10166.62,10298.71,10035.09,10173.84,716100000,10173.84
+1999-04-08,10083.93,10282.62,9980.69,10197.70,850500000,10197.70
+1999-04-07,10023.43,10166.62,9859.98,10085.31,816400000,10085.31
+1999-04-06,9985.69,10097.25,9862.48,9963.49,787500000,9963.49
+1999-04-05,9893.84,10080.87,9826.40,10007.33,695800000,10007.33
+1999-04-01,9825.29,9927.69,9707.91,9832.51,703000000,9832.51
+1999-03-31,9968.21,10025.10,9744.82,9786.16,924300000,9786.16
+1999-03-30,10003.84,10035.36,9812.53,9913.26,729000000,9913.26
+1999-03-29,9879.41,10089.48,9837.78,10006.78,747900000,10006.78
+1999-03-26,9795.88,9923.53,9700.69,9822.24,707200000,9822.24
+1999-03-25,9735.66,9916.59,9666.28,9836.39,784200000,9836.39
+1999-03-24,9702.08,9803.09,9547.23,9666.84,761900000,9666.84
+1999-03-23,9846.66,9897.72,9593.85,9671.83,811300000,9671.83
+1999-03-22,9901.88,10005.95,9796.99,9890.51,658200000,9890.51
+1999-03-19,10107.79,10158.57,9856.37,9903.55,914700000,9903.55
+1999-03-18,9958.59,10060.62,9776.17,9997.62,831000000,9997.62
+1999-03-17,9939.90,10024.54,9792.55,9879.41,752300000,9879.41
+1999-03-16,9969.32,10062.84,9857.48,9930.47,751900000,9930.47
+1999-03-15,9880.24,10027.59,9807.53,9958.77,727200000,9958.77
+1999-03-12,9927.14,10042.58,9779.78,9876.35,825800000,9876.35
+1999-03-11,9815.86,9992.35,9742.32,9897.44,904800000,9897.44
+1999-03-10,9735.10,9849.71,9624.94,9772.84,841900000,9772.84
+1999-03-09,9703.47,9856.65,9586.08,9693.76,803700000,9693.76
+1999-03-08,9728.72,9825.02,9616.33,9727.61,714600000,9727.61
+1999-03-05,9636.65,9799.92,9558.41,9736.08,834900000,9736.08
+1999-03-04,9339.18,9549.99,9272.08,9467.40,770900000,9467.40
+1999-03-03,9311.74,9397.86,9163.41,9275.88,751700000,9275.88
+1999-03-02,9382.10,9494.57,9216.66,9297.61,753600000,9297.61
+1999-03-01,9315.27,9419.32,9167.76,9324.78,699500000,9324.78
+1999-02-26,9382.64,9459.52,9177.54,9306.58,784600000,9306.58
+1999-02-25,9395.66,9446.32,9200.27,9366.34,740500000,9366.34
+1999-02-24,9547.88,9662.77,9357.81,9399.67,782000000,9399.67
+1999-02-23,9549.21,9659.58,9425.26,9544.42,781100000,9544.42
+1999-02-22,9346.62,9596.13,9289.04,9552.68,718500000,9552.68
+1999-02-19,9284.51,9430.59,9218.13,9339.95,700000000,9339.95
+1999-02-18,9239.72,9368.48,9145.09,9298.63,742400000,9298.63
+1999-02-17,9240.79,9409.53,9124.03,9195.47,735100000,9195.47
+1999-02-16,9333.34,9458.46,9187.10,9297.03,653760000,9297.03
+1999-02-12,9346.47,9437.35,9161.35,9274.89,691500000,9274.89
+1999-02-11,9176.28,9423.19,9088.49,9363.46,815800000,9363.46
+1999-02-10,9135.86,9267.68,9025.41,9177.31,721400000,9177.31
+1999-02-09,9268.46,9361.92,9076.13,9133.03,736000000,9133.03
+1999-02-08,9318.66,9427.83,9148.99,9291.11,705400000,9291.11
+1999-02-05,9317.12,9457.43,9141.27,9304.24,872000000,9304.24
+1999-02-04,9389.72,9511.50,9178.60,9304.50,854400000,9304.50
+1999-02-03,9275.41,9454.09,9176.80,9366.81,876500000,9366.81
+1999-02-02,9318.40,9394.10,9146.16,9274.12,845500000,9274.12
+1999-02-01,9405.43,9513.05,9266.91,9345.70,799400000,9345.70
+1999-01-29,9317.37,9457.18,9172.16,9358.83,917000000,9358.83
+1999-01-28,9220.57,9384.83,9134.57,9281.33,848800000,9281.33
+1999-01-27,9378.65,9461.04,9135.86,9200.23,893800000,9200.23
+1999-01-26,9210.78,9408.77,9118.35,9324.58,896400000,9324.58
+1999-01-25,9117.58,9273.09,8994.26,9203.32,723900000,9203.32
+1999-01-22,9149.51,9289.31,8998.89,9120.67,785900000,9120.67
+1999-01-21,9371.96,9479.83,9150.28,9264.08,871800000,9264.08
+1999-01-20,9395.64,9555.01,9230.35,9335.91,905700000,9335.91
+1999-01-19,9408.52,9499.14,9165.73,9355.22,785500000,9355.22
+1999-01-15,9200.74,9381.74,9124.02,9340.55,798100000,9340.55
+1999-01-14,9315.06,9380.20,9052.44,9120.93,797200000,9120.93
+1999-01-13,9213.62,9485.24,9134.06,9349.56,931500000,9349.56
+1999-01-12,9599.55,9680.40,9394.87,9474.68,800200000,9474.68
+1999-01-11,9613.97,9751.46,9446.36,9619.89,818000000,9619.89
+1999-01-08,9612.17,9759.44,9447.91,9643.32,937800000,9643.32
+1999-01-07,9445.33,9616.29,9369.12,9537.76,863000000,9537.76
+1999-01-06,9399.25,9608.05,9331.02,9544.97,986900000,9544.97
+1999-01-05,9201.00,9389.46,9137.66,9311.19,775000000,9311.19
+1999-01-04,9212.84,9393.84,9089.00,9184.27,877000000,9184.27
+1998-12-31,9271.55,9343.64,9106.77,9181.43,719200000,9181.43
+1998-12-30,9310.17,9390.75,9211.30,9274.64,594220000,9274.64
+1998-12-29,9222.63,9375.30,9152.34,9320.98,586490000,9320.98
+1998-12-28,9251.21,9330.50,9133.54,9226.75,531560000,9226.75
+1998-12-24,9202.29,9289.57,9146.42,9217.99,246980000,9217.99
+1998-12-23,9085.91,9255.84,9022.58,9202.03,697500000,9202.03
+1998-12-22,9000.95,9122.99,8909.29,9044.46,680500000,9044.46
+1998-12-21,8903.89,9150.54,8874.28,8988.85,744800000,8988.85
+1998-12-18,8902.86,9012.28,8789.31,8903.63,839600000,8903.63
+1998-12-17,8787.55,8959.76,8725.21,8875.82,739400000,8875.82
+1998-12-16,8843.38,8922.94,8675.52,8790.60,725500000,8790.60
+1998-12-15,8725.72,8878.40,8614.75,8823.30,777900000,8823.30
+1998-12-14,8767.95,8868.10,8610.63,8695.60,741800000,8695.60
+1998-12-11,8814.29,8916.24,8680.41,8821.76,688900000,8821.76
+1998-12-10,9008.42,9034.42,8795.24,8841.58,748600000,8841.58
+1998-12-09,9025.41,9138.18,8881.23,9009.19,694200000,9009.19
+1998-12-08,9038.03,9153.63,8903.37,9027.98,727700000,9027.98
+1998-12-07,9031.59,9146.93,8946.11,9070.47,671200000,9070.47
+1998-12-04,8964.91,9078.70,8873.76,9016.14,709700000,9016.14
+1998-12-03,9031.33,9112.69,8839.78,8879.68,799100000,8879.68
+1998-12-02,9039.57,9154.40,8922.94,9064.54,727400000,9064.54
+1998-12-01,9039.57,9214.65,8934.52,9133.54,789200000,9133.54
+1998-11-30,9292.40,9348.53,9074.07,9116.55,687900000,9116.55
+1998-11-27,9333.85,9403.62,9263.82,9333.08,256950000,9333.08
+1998-11-25,9292.91,9387.66,9199.20,9314.28,583580000,9314.28
+1998-11-24,9327.93,9457.95,9219.28,9301.15,766200000,9301.15
+1998-11-23,9225.72,9425.77,9137.92,9374.27,774100000,9374.27
+1998-11-20,9129.94,9215.93,9048.32,9159.55,721200000,9159.55
+1998-11-19,9081.02,9147.96,8967.22,9056.05,671000000,9056.05
+1998-11-18,8988.85,9095.70,8897.96,9041.11,652510000,9041.11
+1998-11-17,8991.17,9158.26,8870.42,8986.28,705200000,8986.28
+1998-11-16,8921.14,9093.12,8885.09,9011.25,615580000,9011.25
+1998-11-13,8863.21,8982.16,8782.62,8919.59,602270000,8919.59
+1998-11-12,8823.04,8951.26,8733.70,8829.74,662300000,8829.74
+1998-11-11,8922.42,8980.35,8759.19,8823.82,715700000,8823.82
+1998-11-10,8895.17,9020.00,8760.99,8863.98,671300000,8863.98
+1998-11-09,8980.87,9024.89,8813.00,8897.96,592990000,8897.96
+1998-11-06,8902.86,9042.40,8831.02,8975.46,683100000,8975.46
+1998-11-05,8782.11,8943.79,8676.55,8915.47,770200000,8915.47
+1998-11-04,8801.93,8933.49,8660.33,8783.14,861100000,8783.14
+1998-11-03,8708.99,8819.18,8601.88,8706.15,704300000,8706.15
+1998-11-02,8645.65,8804.51,8573.56,8706.15,753800000,8706.15
+1998-10-30,8591.58,8718.25,8481.39,8592.10,785000000,8592.10
+1998-10-29,8371.22,8539.83,8305.54,8495.03,699400000,8495.03
+1998-10-28,8372.74,8504.04,8271.55,8371.97,677500000,8371.97
+1998-10-27,8503.79,8586.69,8309.92,8366.04,764500000,8366.04
+1998-10-26,8483.96,8564.03,8349.57,8432.21,609910000,8432.21
+1998-10-23,8531.34,8589.01,8366.04,8452.29,637640000,8452.29
+1998-10-22,8519.03,8629.17,8334.12,8533.14,754900000,8533.14
+1998-10-21,8504.67,8641.02,8380.72,8519.23,745100000,8519.23
+1998-10-20,8540.09,8713.62,8419.08,8505.85,958200000,8505.85
+1998-10-19,8415.48,8591.07,8321.50,8466.45,738600000,8466.45
+1998-10-16,8384.84,8521.29,8244.26,8416.76,1042200000,8416.76
+1998-10-15,7953.07,8375.57,7885.62,8299.36,937600000,8299.36
+1998-10-14,7925.01,8107.29,7812.75,7968.78,791200000,7968.78
+1998-10-13,7982.68,8093.90,7805.29,7938.14,733300000,7938.14
+1998-10-12,8038.03,8162.65,7931.19,8001.47,691100000,8001.47
+1998-10-09,7806.57,7976.76,7628.15,7899.52,878100000,7899.52
+1998-10-08,7734.48,7822.02,7399.78,7731.91,1114600000,7731.91
+1998-10-07,7754.82,7913.94,7558.89,7741.69,977000000,7741.69
+1998-10-06,7733.97,7951.53,7646.43,7742.98,845700000,7742.98
+1998-10-05,7760.75,7866.82,7507.14,7726.24,817500000,7726.24
+1998-10-02,7631.50,7866.31,7496.84,7784.69,902900000,7784.69
+1998-10-01,7749.42,7856.26,7540.87,7632.53,899700000,7632.53
+1998-09-30,8025.42,8097.51,7775.42,7842.62,800100000,7842.62
+1998-09-29,8141.28,8253.79,7946.63,8080.52,760100000,8080.52
+1998-09-28,8114.76,8239.37,7986.80,8108.84,690500000,8108.84
+1998-09-25,7911.10,8127.89,7849.06,8028.77,736800000,8028.77
+1998-09-24,8117.33,8227.53,7906.73,8001.99,805900000,8001.99
+1998-09-23,7988.60,8198.43,7891.79,8154.41,899700000,8154.41
+1998-09-22,7987.83,8038.29,7816.87,7897.20,694900000,7897.20
+1998-09-21,7739.12,8008.43,7653.64,7933.25,609880000,7933.25
+1998-09-18,7942.77,8012.03,7759.97,7895.66,794700000,7895.66
+1998-09-17,7905.96,8001.99,7795.50,7873.77,694500000,7873.77
+1998-09-16,8061.46,8159.30,7923.46,8089.78,797500000,8089.78
+1998-09-15,7918.83,8087.21,7840.30,8024.39,724600000,8024.39
+1998-09-14,7936.08,8081.29,7848.03,7945.35,714400000,7945.35
+1998-09-11,7583.61,7866.31,7497.10,7795.50,819100000,7795.50
+1998-09-10,7680.42,7761.00,7469.04,7615.54,880300000,7615.54
+1998-09-09,7995.04,8094.16,7796.79,7865.02,704300000,7865.02
+1998-09-08,7964.91,8103.69,7779.03,8020.78,814800000,8020.78
+1998-09-04,7737.32,7831.29,7450.24,7640.25,780300000,7640.25
+1998-09-03,7679.13,7841.59,7499.68,7682.22,880500000,7682.22
+1998-09-02,7901.06,8036.23,7710.54,7782.37,894600000,7782.37
+1998-09-01,7583.09,7937.37,7379.70,7827.43,1216600000,7827.43
+1998-08-31,8078.97,8149.00,7517.70,7539.07,917500000,7539.07
+1998-08-28,8193.54,8301.68,7951.27,8051.68,840300000,8051.68
+1998-08-27,8377.89,8448.69,8062.24,8165.99,938600000,8165.99
+1998-08-26,8492.97,8639.47,8396.68,8523.35,674100000,8523.35
+1998-08-25,8632.00,8740.91,8510.22,8602.65,664900000,8602.65
+1998-08-24,8584.63,8680.66,8452.29,8566.61,558100000,8566.61
+1998-08-21,8600.34,8600.34,8307.60,8533.65,725700000,8533.65
+1998-08-20,8639.47,8726.75,8538.29,8611.41,621630000,8611.41
+1998-08-19,8745.80,8797.81,8635.61,8693.28,633630000,8693.28
+1998-08-18,8593.90,8767.69,8551.93,8714.65,690600000,8714.65
+1998-08-17,8404.66,8613.98,8350.34,8574.85,584380000,8574.85
+1998-08-14,8531.85,8635.87,8342.10,8425.00,644030000,8425.00
+1998-08-13,8535.46,8656.46,8399.51,8459.50,660700000,8459.50
+1998-08-12,8528.76,8621.71,8437.10,8552.96,711700000,8552.96
+1998-08-11,8431.44,8538.29,8263.32,8462.85,774400000,8462.85
+1998-08-10,8585.40,8689.16,8491.17,8574.85,579180000,8574.85
+1998-08-07,8610.63,8745.03,8490.40,8598.02,759100000,8598.02
+1998-08-06,8513.83,8671.14,8415.22,8577.68,768400000,8577.68
+1998-08-05,8493.75,8641.79,8316.10,8546.78,851600000,8546.78
+1998-08-04,8859.86,8896.68,8463.37,8487.31,852600000,8487.31
+1998-08-03,8868.10,8948.17,8729.58,8786.74,620400000,8786.74
+1998-07-31,9024.64,9109.34,8810.94,8883.29,645910000,8883.29
+1998-07-30,8962.85,9113.20,8884.83,9026.95,687400000,9026.95
+1998-07-29,8976.49,9039.57,8831.28,8914.96,644350000,8914.96
+1998-07-28,8982.16,9065.57,8786.48,8934.78,703600000,8934.78
+1998-07-27,8905.17,9084.63,8806.05,9028.24,619990000,9028.24
+1998-07-24,9002.24,9077.67,8814.29,8937.36,698600000,8937.36
+1998-07-23,9130.46,9196.11,8892.56,8932.98,741600000,8932.98
+1998-07-22,9185.71,9264.85,8996.83,9128.91,739800000,9128.91
+1998-07-21,9296.26,9369.12,9145.65,9190.19,659700000,9190.19
+1998-07-20,9340.55,9408.26,9206.15,9295.75,560580000,9295.75
+1998-07-17,9328.19,9412.64,9259.96,9337.97,618030000,9337.97
+1998-07-16,9233.23,9368.35,9173.19,9328.19,677800000,9328.19
+1998-07-15,9246.57,9388.69,9165.99,9234.47,723900000,9234.47
+1998-07-14,9100.07,9314.54,9087.20,9245.54,700300000,9245.54
+1998-07-13,9107.03,9186.58,9020.52,9096.21,574880000,9096.21
+1998-07-10,9098.53,9194.82,8976.23,9105.74,576080000,9105.74
+1998-07-09,9135.36,9217.07,9014.30,9089.78,663600000,9089.78
+1998-07-08,9107.96,9231.27,9041.70,9174.97,607230000,9174.97
+1998-07-07,9094.76,9209.85,9001.84,9085.04,624890000,9085.04
+1998-07-06,9017.53,9137.11,8965.97,9091.77,514750000,9091.77
+1998-07-02,9037.71,9094.01,8956.25,9025.26,510210000,9025.26
+1998-07-01,9011.56,9103.23,8918.64,9048.67,701600000,9048.67
+1998-06-30,9010.81,9085.79,8868.57,8952.02,757200000,8952.02
+1998-06-29,9002.34,9099.24,8930.84,8997.36,564350000,8997.36
+1998-06-26,8948.28,9047.93,8879.78,8944.54,520050000,8944.54
+1998-06-25,8950.52,9079.56,8863.58,8935.58,669900000,8935.58
+1998-06-24,8828.46,8970.20,8740.52,8923.87,714900000,8923.87
+1998-06-23,8789.35,8877.78,8724.83,8828.46,657100000,8828.46
+1998-06-22,8705.65,8805.04,8639.38,8711.13,531550000,8711.13
+1998-06-19,8844.90,8885.01,8664.79,8712.87,715500000,8712.87
+1998-06-18,8825.72,8900.20,8740.77,8813.01,590440000,8813.01
+1998-06-17,8745.51,8932.34,8695.43,8829.46,744400000,8829.46
+1998-06-16,8666.04,8751.24,8524.55,8665.29,664600000,8665.29
+1998-06-15,8723.34,8818.99,8588.32,8627.93,595820000,8627.93
+1998-06-12,8812.77,8891.24,8660.56,8834.94,633300000,8834.94
+1998-06-11,8975.43,9015.54,8774.40,8811.77,627470000,8811.77
+1998-06-10,9031.98,9145.08,8891.98,8971.70,609410000,8971.70
+1998-06-09,9074.58,9130.13,8966.72,9049.92,563610000,9049.92
+1998-06-08,9052.66,9155.04,8994.12,9069.60,543390000,9069.60
+1998-06-05,8920.88,9057.39,8866.57,9037.71,558440000,9037.71
+1998-06-04,8798.07,8916.64,8719.85,8870.56,577470000,8870.56
+1998-06-03,8909.42,8970.20,8769.67,8803.80,584480000,8803.80
+1998-06-02,8961.48,9014.05,8838.92,8891.24,590930000,8891.24
+1998-06-01,8907.93,9023.01,8805.04,8922.37,537660000,8922.37
+1998-05-29,9004.83,9060.13,8859.60,8899.95,556780000,8899.95
+1998-05-28,8947.53,9040.70,8861.59,8970.20,588900000,8970.20
+1998-05-27,8902.45,9015.04,8760.95,8936.57,682040000,8936.57
+1998-05-26,9167.00,9201.63,8949.78,8963.73,541410000,8963.73
+1998-05-22,9153.05,9209.35,9040.70,9114.44,444070000,9114.44
+1998-05-21,9173.48,9248.96,9058.64,9132.37,551970000,9132.37
+1998-05-20,9101.98,9219.06,9010.56,9171.48,587240000,9171.48
+1998-05-19,9097.00,9164.51,8997.36,9054.65,566020000,9054.65
+1998-05-18,9088.53,9171.23,8972.20,9050.91,519100000,9050.91
+1998-05-15,9161.52,9240.74,9051.91,9096.00,621990000,9096.00
+1998-05-14,9136.86,9266.89,9077.07,9172.23,578380000,9172.23
+1998-05-13,9178.06,9283.09,9119.67,9211.84,600010000,9211.84
+1998-05-12,9098.00,9214.08,9023.51,9161.77,604420000,9161.77
+1998-05-11,9125.65,9231.52,9045.43,9091.52,560840000,9091.52
+1998-05-08,8981.91,9143.09,8951.27,9055.15,567890000,9055.15
+1998-05-07,9044.44,9102.98,8914.90,8976.68,582240000,8976.68
+1998-05-06,9174.72,9223.80,9017.28,9054.65,606540000,9054.65
+1998-05-05,9189.92,9251.95,9062.37,9147.57,583630000,9147.57
+1998-05-04,9201.38,9311.98,9134.86,9192.66,551700000,9192.66
+1998-05-01,9106.47,9211.84,9015.54,9147.07,581970000,9147.07
+1998-04-30,9018.28,9169.99,8970.95,9063.37,695600000,9063.37
+1998-04-29,8899.21,9036.47,8857.85,8951.52,638790000,8951.52
+1998-04-28,8920.88,9051.16,8828.71,8898.96,678600000,8898.96
+1998-04-27,8937.07,9026.25,8796.08,8917.64,685960000,8917.64
+1998-04-24,9143.83,9206.36,8983.65,9064.62,633890000,9064.62
+1998-04-23,9176.96,9269.88,9061.88,9143.33,653190000,9143.33
+1998-04-22,9184.93,9287.32,9083.80,9176.72,696740000,9176.72
+1998-04-21,9137.85,9250.20,9051.41,9184.94,675640000,9184.94
+1998-04-20,9166.75,9245.22,9027.25,9141.84,595190000,9141.84
+1998-04-17,9077.57,9213.58,9010.06,9167.50,672290000,9167.50
+1998-04-16,9162.27,9204.12,8978.92,9076.57,699570000,9076.57
+1998-04-15,9110.45,9249.95,9017.53,9162.27,685020000,9162.27
+1998-04-14,9014.30,9177.96,8971.45,9110.20,613730000,9110.20
+1998-04-13,8997.11,9107.21,8870.31,9012.30,564480000,9012.30
+1998-04-09,8891.48,9062.12,8891.48,8994.86,548940000,8994.86
+1998-04-08,8951.52,9023.51,8821.73,8891.48,616330000,8891.48
+1998-04-07,8995.36,9072.34,8862.34,8956.50,670760000,8956.50
+1998-04-06,9051.16,9170.74,8958.49,9033.23,625810000,9033.23
+1998-04-03,8986.64,9085.79,8896.22,8983.41,653880000,8983.41
+1998-04-02,8900.20,9025.26,8829.21,8986.64,674340000,8986.64
+1998-04-01,8818.50,8935.33,8715.61,8868.32,677310000,8868.32
+1998-03-31,8852.12,8937.57,8726.32,8799.81,674930000,8799.81
+1998-03-30,8802.30,8877.04,8701.66,8782.12,497400000,8782.12
+1998-03-27,8835.68,8941.31,8741.77,8796.08,582190000,8796.08
+1998-03-26,8847.89,8931.09,8769.92,8846.89,606770000,8846.89
+1998-03-25,8943.05,8997.11,8780.88,8872.80,676550000,8872.80
+1998-03-24,8887.00,8962.48,8815.01,8904.44,605720000,8904.44
+1998-03-23,8839.42,8939.31,8758.71,8816.25,631350000,8816.25
+1998-03-20,8814.01,8957.25,8766.43,8906.43,717310000,8906.43
+1998-03-19,8776.89,8855.11,8708.64,8803.05,598240000,8803.05
+1998-03-18,8749.24,8825.72,8655.83,8775.40,632690000,8775.40
+1998-03-17,8706.64,8812.52,8633.41,8749.99,680960000,8749.99
+1998-03-16,8647.36,8760.45,8573.37,8718.85,548980000,8718.85
+1998-03-13,8669.28,8733.30,8563.90,8602.52,597800000,8602.52
+1998-03-12,8622.20,8725.58,8576.86,8659.56,594940000,8659.56
+1998-03-11,8682.73,8740.52,8599.28,8675.75,655260000,8675.75
+1998-03-10,8623.19,8688.71,8550.45,8643.12,631920000,8643.12
+1998-03-09,8601.02,8661.56,8482.45,8567.14,624700000,8567.14
+1998-03-06,8505.86,8610.49,8432.62,8569.39,665500000,8569.39
+1998-03-05,8480.20,8536.80,8377.32,8444.33,648270000,8444.33
+1998-03-04,8524.55,8609.99,8454.79,8539.24,644280000,8539.24
+1998-03-03,8532.77,8632.16,8464.26,8584.83,612360000,8584.83
+1998-03-02,8528.78,8649.35,8427.89,8550.45,591470000,8550.45
+1998-02-27,8532.77,8616.72,8426.15,8545.72,574480000,8545.72
+1998-02-26,8471.48,8541.98,8377.82,8490.67,646280000,8490.67
+1998-02-25,8455.29,8510.60,8362.37,8457.78,611350000,8457.78
+1998-02-24,8370.10,8457.78,8303.83,8370.10,589880000,8370.10
+1998-02-23,8381.31,8490.92,8331.98,8410.20,550730000,8410.20
+1998-02-20,8350.67,8449.06,8291.88,8413.94,594300000,8413.94
+1998-02-19,8379.56,8463.26,8327.25,8375.58,581820000,8375.58
+1998-02-18,8419.17,8503.12,8326.75,8451.06,606000000,8451.06
+1998-02-17,8439.35,8483.94,8335.97,8398.50,605890000,8398.50
+1998-02-13,8346.68,8416.43,8269.21,8370.10,531940000,8370.10
+1998-02-12,8260.49,8412.20,8206.93,8369.60,611480000,8369.60
+1998-02-11,8298.60,8367.61,8223.87,8314.55,599300000,8314.55
+1998-02-10,8241.81,8368.10,8149.88,8295.61,642800000,8295.61
+1998-02-09,8185.26,8256.75,8104.55,8180.52,524810000,8180.52
+1998-02-06,8178.28,8255.26,8102.30,8189.49,569650000,8189.49
+1998-02-05,8129.71,8215.65,8037.54,8117.25,703980000,8117.25
+1998-02-04,8160.35,8188.00,8050.99,8129.71,695420000,8129.71
+1998-02-03,8107.78,8193.23,8010.63,8160.35,692120000,8160.35
+1998-02-02,7987.46,8157.86,7987.46,8107.78,724320000,8107.78
+1998-01-30,7973.02,8023.83,7850.95,7906.50,613380000,7906.50
+1998-01-29,7915.47,8015.12,7883.09,7973.02,750760000,7973.02
+1998-01-28,7815.08,7985.97,7761.52,7915.47,708470000,7915.47
+1998-01-27,7712.94,7890.56,7677.07,7815.08,679140000,7815.08
+1998-01-26,7700.74,7813.59,7629.99,7712.94,555080000,7712.94
+1998-01-23,7730.88,7814.08,7609.31,7700.74,635770000,7700.74
+1998-01-22,7794.40,7833.26,7637.71,7730.88,646570000,7730.88
+1998-01-21,7873.12,7874.87,7707.96,7794.40,626160000,7794.40
+1998-01-20,7753.55,7908.00,7696.01,7873.12,644790000,7873.12
+1998-01-16,7691.77,7846.47,7687.04,7753.55,670080000,7753.55
+1998-01-15,7784.69,7803.87,7651.66,7691.77,569050000,7691.77
+1998-01-14,7732.13,7836.25,7669.10,7784.69,603280000,7784.69
+1998-01-13,7647.18,7791.17,7610.31,7732.13,646740000,7732.13
+1998-01-12,7580.42,7706.22,7391.59,7647.18,705450000,7647.18
+1998-01-09,7802.62,7815.08,7513.41,7580.42,746420000,7580.42
+1998-01-08,7902.27,7935.40,7733.12,7802.62,652140000,7802.62
+1998-01-07,7906.25,7943.87,7751.56,7902.27,667390000,7902.27
+1998-01-06,7978.99,7999.17,7832.52,7906.25,618360000,7906.25
+1998-01-05,7965.04,8072.91,7865.40,7978.99,628070000,7978.99
+1998-01-02,7908.25,8001.41,7845.47,7965.04,366730000,7965.04
+1997-12-31,7915.97,7995.93,7833.76,7908.25,467280000,7908.25
+1997-12-30,7792.41,7958.32,7787.68,7915.97,499500000,7915.97
+1997-12-29,7712.94,7835.01,7712.94,7792.41,443160000,7792.41
+1997-12-26,7660.13,7743.34,7634.72,7679.31,154900000,7679.31
+1997-12-24,7691.77,7767.75,7624.26,7660.13,265980000,7660.13
+1997-12-23,7819.31,7874.12,7667.11,7691.77,515070000,7691.77
+1997-12-22,7756.29,7892.05,7710.45,7819.31,530670000,7819.31
+1997-12-19,7846.50,7878.60,7563.23,7756.29,793200000,7756.29
+1997-12-18,7957.41,7991.48,7781.35,7846.50,618870000,7846.50
+1997-12-17,7976.31,8068.81,7879.08,7957.41,618900000,7957.41
+1997-12-16,7922.59,8069.06,7889.52,7976.31,623320000,7976.31
+1997-12-15,7838.30,7992.72,7807.96,7922.59,597150000,7922.59
+1997-12-12,7848.99,7947.21,7756.73,7838.30,579280000,7838.30
+1997-12-11,7961.64,7961.64,7778.37,7848.99,631770000,7848.99
+1997-12-10,8049.66,8077.27,7881.07,7978.79,602290000,7978.79
+1997-12-09,8110.84,8142.67,7990.98,8049.66,539130000,8049.66
+1997-12-08,8149.13,8195.88,8057.37,8110.84,490320000,8110.84
+1997-12-05,8050.16,8209.56,7980.04,8149.13,563590000,8149.13
+1997-12-04,8032.01,8159.58,7978.30,8050.16,633470000,8050.16
+1997-12-03,8018.83,8118.30,7915.63,8032.01,624610000,8032.01
+1997-12-02,8013.11,8096.66,7935.03,8018.83,576120000,8018.83
+1997-12-01,7823.62,8048.92,7823.62,8013.11,590300000,8013.11
+1997-11-28,7794.78,7872.86,7786.08,7823.13,189070000,7823.13
+1997-11-26,7808.95,7893.50,7749.77,7794.78,487750000,7794.78
+1997-11-25,7767.92,7880.32,7706.00,7808.95,587890000,7808.95
+1997-11-24,7881.07,7887.28,7723.41,7767.92,514920000,7767.92
+1997-11-21,7826.61,7934.53,7758.47,7881.07,611000000,7881.07
+1997-11-20,7724.74,7889.77,7718.19,7826.61,602610000,7826.61
+1997-11-19,7650.82,7779.75,7599.50,7724.74,542720000,7724.74
+1997-11-18,7698.22,7772.62,7607.11,7650.82,521380000,7650.82
+1997-11-17,7613.49,7781.71,7613.49,7698.22,576540000,7698.22
+1997-11-14,7487.76,7634.61,7431.03,7572.48,635760000,7572.48
+1997-11-13,7401.32,7546.45,7334.77,7487.76,653960000,7487.76
+1997-11-12,7558.73,7573.22,7359.32,7401.32,585340000,7401.32
+1997-11-11,7552.59,7599.74,7518.21,7558.73,435660000,7558.73
+1997-11-10,7581.32,7687.90,7511.83,7552.59,464140000,7552.59
+1997-11-07,7646.89,7646.89,7460.99,7581.32,569980000,7581.32
+1997-11-06,7692.57,7758.63,7597.78,7683.24,522890000,7683.24
+1997-11-05,7689.13,7791.78,7628.96,7692.57,565680000,7692.57
+1997-11-04,7674.39,7757.15,7583.29,7689.13,541590000,7689.13
+1997-11-03,7443.07,7674.39,7443.07,7674.39,564740000,7674.39
+1997-10-31,7381.67,7544.24,7329.61,7442.08,638070000,7442.08
+1997-10-30,7506.67,7569.78,7340.42,7381.67,712230000,7381.67
+1997-10-29,7498.32,7664.08,7409.67,7506.67,777660000,7506.67
+1997-10-28,7161.15,7553.57,6936.45,7498.32,1202550000,7498.32
+1997-10-27,7715.41,7717.37,7150.10,7161.15,693730000,7161.15
+1997-10-24,7847.77,7975.47,7645.91,7715.41,677630000,7715.41
+1997-10-23,7957.05,7957.05,7767.22,7847.77,673270000,7847.77
+1997-10-22,8060.44,8124.78,7941.33,8034.65,613490000,8034.65
+1997-10-21,7921.44,8090.40,7909.41,8060.44,582310000,8060.44
+1997-10-20,7847.03,7966.63,7774.83,7921.44,483880000,7921.44
+1997-10-17,7938.88,7953.61,7731.12,7847.03,624980000,7847.03
+1997-10-16,8057.98,8146.14,7880.18,7938.88,597010000,7938.88
+1997-10-15,8096.29,8127.48,7997.57,8057.98,505310000,8057.98
+1997-10-14,8072.22,8168.24,7990.20,8096.29,510330000,8096.29
+1997-10-13,8045.21,8150.31,8026.30,8072.22,354800000,8072.22
+1997-10-10,8061.42,8091.38,7961.96,8045.21,500680000,8045.21
+1997-10-09,8095.06,8127.72,7980.87,8061.42,551840000,8061.42
+1997-10-08,8178.31,8208.52,8019.92,8095.06,573110000,8095.06
+1997-10-07,8100.22,8218.34,8058.96,8178.31,551970000,8178.31
+1997-10-06,8038.58,8160.63,8017.71,8100.22,495620000,8100.22
+1997-10-03,8027.53,8183.22,7937.89,8038.58,623370000,8038.58
+1997-10-02,8015.50,8087.45,7943.79,8027.53,474760000,8027.53
+1997-10-01,7945.26,8081.06,7909.41,8015.50,598660000,8015.50
+1997-09-30,7991.43,8045.70,7900.08,7945.26,587500000,7945.26
+1997-09-29,7922.18,8030.48,7862.99,7991.43,477100000,7991.43
+1997-09-26,7853.66,7970.80,7853.66,7922.18,505340000,7922.18
+1997-09-25,7906.71,7962.45,7802.34,7848.01,524880000,7848.01
+1997-09-24,7970.06,8065.84,7866.43,7906.71,639460000,7906.71
+1997-09-23,7996.83,8048.16,7885.34,7970.06,522930000,7970.06
+1997-09-22,7917.27,8078.36,7889.27,7996.83,490900000,7996.83
+1997-09-19,7922.72,7972.29,7821.69,7917.27,631040000,7917.27
+1997-09-18,7886.44,8049.36,7858.93,7922.72,566830000,7922.72
+1997-09-17,7895.92,7981.54,7816.47,7886.44,590550000,7886.44
+1997-09-16,7721.14,7951.18,7709.75,7895.92,636380000,7895.92
+1997-09-15,7742.97,7832.86,7680.95,7721.14,468030000,7721.14
+1997-09-12,7660.98,7779.67,7584.56,7742.97,544150000,7742.97
+1997-09-11,7719.28,7745.29,7556.23,7660.98,575020000,7660.98
+1997-09-10,7851.91,7868.16,7686.30,7719.28,517620000,7719.28
+1997-09-09,7835.18,7922.05,7768.52,7851.91,502200000,7851.91
+1997-09-08,7822.41,7921.35,7795.00,7835.18,466430000,7835.18
+1997-09-05,7867.24,7952.01,7765.27,7822.41,536400000,7822.41
+1997-09-04,7894.64,7936.45,7788.50,7867.24,559310000,7867.24
+1997-09-03,7879.78,7972.22,7828.45,7894.64,549060000,7894.64
+1997-09-02,7650.99,7903.47,7650.99,7879.78,491870000,7879.78
+1997-08-29,7694.43,7729.73,7580.85,7622.42,413910000,7622.42
+1997-08-28,7787.33,7831.70,7634.50,7694.43,486300000,7694.43
+1997-08-27,7782.22,7850.51,7666.55,7787.33,492150000,7787.33
+1997-08-26,7859.57,7891.62,7734.61,7782.22,449110000,7782.22
+1997-08-25,7887.91,7974.08,7791.75,7859.57,388990000,7859.57
+1997-08-22,7893.95,7904.86,7695.36,7887.91,460160000,7887.91
+1997-08-21,8021.23,8043.06,7834.02,7893.95,499000000,7893.95
+1997-08-20,7918.10,8037.95,7870.95,8021.23,521270000,8021.23
+1997-08-19,7803.36,7947.37,7776.65,7918.10,545630000,7918.10
+1997-08-18,7694.66,7847.49,7588.28,7803.36,514330000,7803.36
+1997-08-15,7919.26,7919.26,7685.14,7694.66,537820000,7694.66
+1997-08-14,7928.32,8027.73,7843.54,7942.03,530460000,7942.03
+1997-08-13,7960.84,8075.58,7848.19,7928.32,587210000,7928.32
+1997-08-12,8062.11,8132.49,7926.46,7960.84,499310000,7960.84
+1997-08-11,8031.22,8122.27,7922.52,8062.11,480340000,8062.11
+1997-08-08,8170.58,8170.58,7961.07,8031.22,563420000,8031.22
+1997-08-07,8259.31,8340.14,8158.73,8188.00,576030000,8188.00
+1997-08-06,8187.54,8302.05,8130.63,8259.31,565200000,8259.31
+1997-08-05,8198.45,8251.88,8129.93,8187.54,525710000,8187.54
+1997-08-04,8194.04,8261.40,8097.65,8198.45,456000000,8198.45
+1997-08-01,8222.61,8287.65,8062.11,8194.04,513750000,8194.04
+1997-07-31,8254.89,8328.99,8160.36,8222.61,547830000,8222.61
+1997-07-30,8174.53,8313.19,8156.88,8254.89,568470000,8254.89
+1997-07-29,8121.11,8232.36,8049.34,8174.53,544540000,8174.53
+1997-07-28,8113.44,8221.68,8051.89,8121.11,466920000,8121.11
+1997-07-25,8116.93,8200.31,8037.95,8113.44,521510000,8113.44
+1997-07-24,8088.36,8174.53,7968.51,8116.93,571020000,8116.93
+1997-07-23,8061.65,8199.15,8024.95,8088.36,616930000,8088.36
+1997-07-22,7906.72,8093.93,7870.72,8061.65,579590000,8061.65
+1997-07-21,7890.46,7981.51,7783.85,7906.72,459500000,7906.72
+1997-07-18,8020.77,8057.23,7829.61,7890.46,589710000,7890.46
+1997-07-17,8038.88,8136.67,7910.67,8020.77,629250000,8020.77
+1997-07-16,7975.71,8108.10,7919.73,8038.88,647390000,8038.88
+1997-07-15,7922.98,8037.03,7843.78,7975.71,598370000,7975.71
+1997-07-14,7921.82,8001.26,7831.00,7922.98,485960000,7922.98
+1997-07-11,7886.76,7984.02,7837.68,7921.82,500050000,7921.82
+1997-07-10,7842.43,7953.94,7777.06,7886.76,551340000,7886.76
+1997-07-09,7962.31,8027.68,7775.48,7842.43,589110000,7842.43
+1997-07-08,7858.49,8000.08,7824.33,7962.31,526010000,7962.31
+1997-07-07,7895.81,7983.79,7805.34,7858.49,518780000,7858.49
+1997-07-03,7805.79,7952.35,7805.79,7895.81,374680000,7895.81
+1997-07-02,7722.33,7814.38,7648.14,7795.38,526970000,7795.38
+1997-07-01,7672.79,7801.04,7613.53,7722.33,544190000,7722.33
+1997-06-30,7687.72,7768.01,7571.46,7672.79,561540000,7672.79
+1997-06-27,7654.25,7793.12,7627.33,7687.72,472540000,7687.72
+1997-06-26,7689.98,7754.22,7581.64,7654.25,499780000,7654.25
+1997-06-25,7758.06,7832.48,7615.57,7689.98,603040000,7689.98
+1997-06-24,7787.01,7787.01,7602.90,7758.06,542650000,7758.06
+1997-06-23,7796.51,7816.87,7592.04,7604.26,492940000,7604.26
+1997-06-20,7777.06,7868.44,7733.64,7796.51,653110000,7796.51
+1997-06-19,7718.71,7834.51,7697.45,7777.06,536940000,7777.06
+1997-06-18,7760.78,7789.28,7651.30,7718.71,491740000,7718.71
+1997-06-17,7772.09,7834.97,7680.71,7760.78,543010000,7760.78
+1997-06-16,7782.04,7829.99,7712.37,7772.09,414280000,7772.09
+1997-06-13,7711.47,7829.08,7683.42,7782.04,575810000,7782.04
+1997-06-12,7575.83,7741.42,7569.66,7711.47,592730000,7711.47
+1997-06-11,7539.27,7633.96,7476.29,7575.83,513740000,7575.83
+1997-06-10,7478.50,7599.61,7459.12,7539.27,526980000,7539.27
+1997-06-09,7435.78,7548.52,7412.44,7478.50,465810000,7478.50
+1997-06-06,7305.29,7473.98,7290.26,7435.78,488940000,7435.78
+1997-06-05,7269.66,7376.97,7241.33,7305.29,452610000,7305.29
+1997-06-04,7312.15,7350.36,7214.29,7269.66,466690000,7269.66
+1997-06-03,7289.40,7379.98,7225.02,7312.15,527120000,7312.15
+1997-06-02,7331.04,7383.84,7244.76,7289.40,435950000,7289.40
+1997-05-30,7330.18,7385.99,7203.99,7331.04,537200000,7331.04
+1997-05-29,7357.23,7404.44,7272.24,7330.18,462600000,7330.18
+1997-05-28,7383.41,7430.20,7287.26,7357.23,487340000,7357.23
+1997-05-27,7345.91,7421.32,7276.68,7383.41,436150000,7383.41
+1997-05-23,7260.61,7382.58,7260.61,7345.91,417030000,7345.91
+1997-05-22,7290.69,7348.79,7210.33,7258.13,426940000,7258.13
+1997-05-21,7303.46,7385.47,7218.99,7290.69,540730000,7290.69
+1997-05-20,7228.88,7336.02,7123.38,7303.46,450850000,7303.46
+1997-05-19,7194.67,7274.21,7140.69,7228.88,345140000,7228.88
+1997-05-16,7332.31,7332.31,7192.61,7194.67,486780000,7194.67
+1997-05-15,7286.16,7363.63,7225.99,7333.55,458180000,7333.55
+1997-05-14,7274.21,7381.76,7238.35,7286.16,504960000,7286.16
+1997-05-13,7292.75,7350.85,7211.16,7274.21,489760000,7274.21
+1997-05-12,7169.53,7317.47,7156.35,7292.75,459370000,7292.75
+1997-05-09,7136.62,7235.76,7079.63,7169.53,455690000,7169.53
+1997-05-08,7085.65,7236.96,7040.30,7136.62,534120000,7136.62
+1997-05-07,7225.32,7246.60,7064.78,7085.65,500580000,7085.65
+1997-05-06,7213.68,7299.98,7139.43,7225.32,603680000,7225.32
+1997-05-05,7071.20,7220.91,7029.46,7213.68,549410000,7213.68
+1997-05-02,6976.48,7104.51,6935.54,7071.20,499770000,7071.20
+1997-05-01,7008.99,7041.90,6891.39,6976.48,460380000,6976.48
+1997-04-30,6962.03,7081.23,6912.26,7008.99,562830000,7008.99
+1997-04-29,6820.75,6998.15,6820.75,6962.03,547690000,6962.03
+1997-04-28,6738.87,6826.37,6691.51,6783.02,404470000,6783.02
+1997-04-25,6792.25,6826.77,6681.08,6738.87,414350000,6738.87
+1997-04-24,6812.72,6923.90,6742.89,6792.25,493640000,6792.25
+1997-04-23,6833.59,6902.23,6746.50,6812.72,489350000,6812.72
+1997-04-22,6660.21,6858.08,6628.50,6833.59,507500000,6833.59
+1997-04-21,6703.55,6768.17,6594.38,6660.21,397300000,6660.21
+1997-04-18,6658.60,6749.71,6616.46,6703.55,468940000,6703.55
+1997-04-17,6679.87,6750.91,6600.80,6658.60,503760000,6658.60
+1997-04-16,6587.16,6708.77,6506.08,6679.87,498820000,6679.87
+1997-04-15,6457.92,6626.09,6457.92,6587.16,507370000,6587.16
+1997-04-14,6391.69,6487.22,6315.84,6451.90,406800000,6451.90
+1997-04-11,6529.48,6529.48,6358.42,6391.69,444380000,6391.69
+1997-04-10,6563.84,6626.91,6495.48,6540.05,421790000,6540.05
+1997-04-09,6609.16,6662.41,6521.16,6563.84,451500000,6563.84
+1997-04-08,6555.91,6638.62,6491.71,6609.16,450790000,6609.16
+1997-04-07,6526.07,6639.00,6508.70,6555.91,453790000,6555.91
+1997-04-04,6477.35,6561.57,6376.90,6526.07,544580000,6526.07
+1997-04-03,6517.01,6540.43,6379.16,6477.35,498010000,6477.35
+1997-04-02,6611.05,6636.73,6476.60,6517.01,478210000,6517.01
+1997-04-01,6583.48,6667.70,6482.64,6611.05,515770000,6611.05
+1997-03-31,6740.59,6743.23,6532.49,6583.48,555880000,6583.48
+1997-03-27,6880.70,6918.47,6654.86,6740.59,476790000,6740.59
+1997-03-26,6876.17,6954.72,6811.21,6880.70,506670000,6880.70
+1997-03-25,6905.25,6984.94,6832.74,6876.17,487520000,6876.17
+1997-03-24,6804.79,6933.58,6746.63,6905.25,451970000,6905.25
+1997-03-21,6820.28,6890.52,6742.85,6804.79,544830000,6804.79
+1997-03-20,6877.68,6901.47,6765.14,6820.28,497480000,6820.28
+1997-03-19,6896.56,6944.15,6794.22,6877.68,539200000,6877.68
+1997-03-18,6955.48,6997.40,6841.05,6896.56,467490000,6896.56
+1997-03-17,6935.46,7004.20,6820.28,6955.48,495260000,6955.48
+1997-03-14,6878.89,6996.27,6851.19,6935.46,491540000,6935.46
+1997-03-13,7023.59,7023.59,6852.72,6878.89,507560000,6878.89
+1997-03-12,7085.16,7111.72,6988.96,7039.37,490200000,7039.37
+1997-03-11,7079.39,7158.28,7026.28,7085.16,493250000,7085.16
+1997-03-10,7000.89,7103.25,6970.10,7079.39,468780000,7079.39
+1997-03-07,6944.70,7047.07,6927.00,7000.89,508270000,7000.89
+1997-03-06,6945.85,7017.05,6896.60,6944.70,540310000,6944.70
+1997-03-05,6852.72,6966.64,6836.95,6945.85,532500000,6945.85
+1997-03-04,6918.92,6983.95,6814.63,6852.72,537890000,6852.72
+1997-03-03,6877.74,6957.01,6798.46,6918.92,437220000,6918.92
+1997-02-28,6925.07,6978.18,6820.78,6877.74,508280000,6877.74
+1997-02-27,6983.18,7028.59,6885.44,6925.07,467190000,6925.07
+1997-02-26,7037.83,7076.31,6878.12,6983.18,573920000,6983.18
+1997-02-25,7008.20,7099.79,6935.08,7037.83,527450000,7037.83
+1997-02-24,6931.62,7049.76,6868.50,7008.20,462450000,7008.20
+1997-02-21,6927.38,6984.72,6869.27,6931.62,478450000,6931.62
+1997-02-20,7020.13,7035.91,6890.82,6927.38,492220000,6927.38
+1997-02-19,7067.46,7112.87,6980.87,7020.13,519350000,7020.13
+1997-02-18,6988.96,7084.39,6946.62,7067.46,474110000,7067.46
+1997-02-14,7022.44,7074.77,6935.85,6988.96,491540000,6988.96
+1997-02-13,6961.63,7074.39,6924.30,7022.44,593710000,7022.44
+1997-02-12,6858.11,6976.64,6844.26,6961.63,563890000,6961.63
+1997-02-11,6806.54,6887.36,6756.90,6858.11,483090000,6858.11
+1997-02-10,6855.80,6908.14,6771.14,6806.54,471590000,6806.54
+1997-02-07,6773.06,6906.22,6747.28,6855.80,540910000,6855.80
+1997-02-06,6746.90,6821.17,6683.40,6773.06,519660000,6773.06
+1997-02-05,6833.48,6913.14,6704.56,6746.90,580520000,6746.90
+1997-02-04,6806.16,6859.65,6738.43,6833.48,506530000,6833.48
+1997-02-03,6813.09,6858.11,6733.04,6806.16,463600000,6806.16
+1997-01-31,6823.86,6912.37,6769.99,6813.09,578550000,6813.09
+1997-01-30,6740.74,6845.03,6719.96,6823.86,524160000,6823.86
+1997-01-29,6656.08,6766.91,6627.98,6740.74,498390000,6740.74
+1997-01-28,6660.69,6823.48,6612.20,6656.08,541580000,6656.08
+1997-01-27,6696.48,6748.82,6598.73,6660.69,445760000,6660.69
+1997-01-24,6755.75,6798.08,6629.91,6696.48,542920000,6696.48
+1997-01-23,6850.03,6953.55,6724.19,6755.75,685070000,6755.75
+1997-01-22,6883.90,6913.14,6801.16,6850.03,587300000,6850.03
+1997-01-21,6843.87,6934.69,6771.14,6883.90,571280000,6883.90
+1997-01-20,6833.10,6893.13,6777.30,6843.87,440470000,6843.87
+1997-01-17,6765.37,6863.88,6732.66,6833.10,534640000,6833.10
+1997-01-16,6726.88,6818.47,6688.40,6765.37,537290000,6765.37
+1997-01-15,6762.29,6800.77,6669.93,6726.88,524990000,6726.88
+1997-01-14,6709.18,6816.17,6689.94,6762.29,531600000,6762.29
+1997-01-13,6703.79,6773.45,6647.99,6709.18,445400000,6709.18
+1997-01-10,6625.67,6725.35,6530.62,6703.79,545860000,6703.79
+1997-01-09,6549.48,6677.24,6520.23,6625.67,555370000,6625.67
+1997-01-08,6600.66,6650.30,6509.84,6549.48,557510000,6549.48
+1997-01-07,6567.18,6621.82,6481.75,6600.66,538220000,6600.66
+1997-01-06,6544.09,6647.22,6508.30,6567.18,531350000,6567.18
+1997-01-03,6442.49,6586.42,6437.10,6544.09,452970000,6544.09
+1997-01-02,6448.27,6511.38,6318.96,6442.49,463230000,6442.49
+1996-12-31,6549.37,6580.90,6421.74,6448.27,399760000,6448.27
+1996-12-30,6560.91,6623.96,6518.23,6549.37,339060000,6549.37
+1996-12-27,6546.68,6607.81,6510.93,6560.91,253810000,6560.91
+1996-12-26,6522.85,6594.74,6495.94,6546.68,254630000,6546.68
+1996-12-24,6489.02,6546.68,6467.10,6522.85,165140000,6522.85
+1996-12-23,6484.40,6539.76,6428.27,6489.02,343280000,6489.02
+1996-12-20,6473.64,6597.43,6445.19,6484.40,654340000,6484.40
+1996-12-19,6352.15,6499.40,6352.15,6473.64,526410000,6473.64
+1996-12-18,6308.33,6399.06,6272.96,6346.77,500490000,6346.77
+1996-12-17,6268.35,6354.46,6206.83,6308.33,519840000,6308.33
+1996-12-16,6304.87,6388.68,6227.98,6268.35,447560000,6268.35
+1996-12-13,6303.71,6377.14,6227.59,6304.87,458540000,6304.87
+1996-12-12,6402.52,6465.57,6283.72,6303.71,492920000,6303.71
+1996-12-11,6457.88,6457.88,6317.94,6402.52,494210000,6402.52
+1996-12-10,6463.94,6545.56,6427.04,6473.25,446120000,6473.25
+1996-12-09,6381.94,6496.73,6375.98,6463.94,381570000,6463.94
+1996-12-06,6437.10,6441.20,6274.24,6381.94,500860000,6381.94
+1996-12-05,6422.94,6491.14,6363.31,6437.10,483710000,6437.10
+1996-12-04,6442.69,6482.20,6339.46,6422.94,498240000,6422.94
+1996-12-03,6521.70,6577.23,6422.94,6442.69,516160000,6442.69
+1996-12-02,6521.70,6553.01,6439.34,6521.70,412520000,6521.70
+1996-11-29,6499.34,6551.15,6490.40,6521.70,151550000,6521.70
+1996-11-27,6528.41,6566.43,6457.97,6499.34,377780000,6499.34
+1996-11-26,6547.79,6606.30,6475.49,6528.41,527380000,6528.41
+1996-11-25,6471.76,6565.68,6443.44,6547.79,475260000,6547.79
+1996-11-22,6418.47,6498.22,6402.44,6471.76,525210000,6471.76
+1996-11-21,6430.02,6463.56,6370.02,6418.47,464430000,6418.47
+1996-11-20,6397.60,6482.20,6370.02,6430.02,497900000,6430.02
+1996-11-19,6346.91,6428.16,6323.06,6397.60,461980000,6397.60
+1996-11-18,6348.03,6407.66,6297.34,6346.91,388520000,6346.91
+1996-11-15,6313.00,6414.37,6277.22,6348.03,529100000,6348.03
+1996-11-14,6274.24,6350.64,6232.50,6313.00,480350000,6313.00
+1996-11-13,6266.04,6317.10,6206.78,6274.24,429840000,6274.24
+1996-11-12,6255.60,6314.49,6199.70,6266.04,472940000,6266.04
+1996-11-11,6219.82,6292.87,6198.58,6255.60,353960000,6255.60
+1996-11-08,6206.04,6247.40,6151.62,6219.82,402320000,6219.82
+1996-11-07,6177.71,6238.83,6130.38,6206.04,502530000,6206.04
+1996-11-06,6081.18,6200.44,6060.69,6177.71,509600000,6177.71
+1996-11-05,6041.68,6125.53,6029.01,6081.18,492860000,6081.18
+1996-11-04,6021.93,6083.05,5981.30,6041.68,398790000,6041.68
+1996-11-01,6029.38,6082.67,5975.34,6021.93,465510000,6021.93
+1996-10-31,5993.23,6063.67,5955.59,6029.38,488500000,6029.38
+1996-10-30,6007.02,6055.84,5956.71,5993.23,437770000,5993.23
+1996-10-29,5972.73,6054.72,5938.82,6007.02,443890000,6007.02
+1996-10-28,6007.02,6063.67,5952.61,5972.73,383630000,5972.73
+1996-10-25,5992.48,6047.64,5954.47,6007.02,367640000,6007.02
+1996-10-24,6036.46,6080.07,5953.72,5992.48,418970000,5992.48
+1996-10-23,6061.80,6081.93,5965.65,6036.46,442170000,6036.46
+1996-10-22,6090.87,6114.73,6015.59,6061.80,410790000,6061.80
+1996-10-21,6094.23,6162.80,6027.89,6090.87,414630000,6090.87
+1996-10-18,6059.20,6119.57,6011.49,6094.23,473020000,6094.23
+1996-10-17,6020.81,6101.31,5994.72,6059.20,478550000,6059.20
+1996-10-16,6004.78,6056.21,5943.66,6020.81,441410000,6020.81
+1996-10-15,6010.00,6077.83,5951.12,6004.78,458980000,6004.78
+1996-10-14,5969.38,6043.91,5952.61,6010.00,322000000,6010.00
+1996-10-11,5921.67,5999.56,5912.36,5969.38,396050000,5969.38
+1996-10-10,5930.62,5956.71,5876.58,5921.67,394950000,5921.67
+1996-10-09,5966.77,5985.03,5892.23,5930.62,408450000,5930.62
+1996-10-08,5979.81,6032.36,5930.24,5966.77,435070000,5966.77
+1996-10-07,5992.86,6025.28,5945.15,5979.81,380750000,5979.81
+1996-10-04,5932.85,6023.79,5917.20,5992.86,463940000,5992.86
+1996-10-03,5933.97,5972.36,5887.76,5932.85,386500000,5932.85
+1996-10-02,5904.90,5966.02,5888.88,5933.97,440130000,5933.97
+1996-10-01,5882.17,5942.17,5833.72,5904.90,421550000,5904.90
+1996-09-30,5845.18,5934.32,5845.18,5882.17,394260000,5882.17
+1996-09-27,5868.85,5903.99,5819.65,5872.92,414760000,5872.92
+1996-09-26,5877.36,5928.04,5828.90,5868.85,500870000,5868.85
+1996-09-25,5874.03,5928.77,5827.42,5877.36,451710000,5877.36
+1996-09-24,5894.74,5952.08,5831.86,5874.03,460150000,5874.03
+1996-09-23,5888.46,5913.24,5820.39,5894.74,297760000,5894.74
+1996-09-20,5867.74,5925.82,5840.74,5888.46,519420000,5888.46
+1996-09-19,5877.36,5908.80,5818.17,5867.74,398580000,5867.74
+1996-09-18,5888.83,5919.90,5838.15,5877.36,396600000,5877.36
+1996-09-17,5889.20,5929.51,5830.38,5888.83,449850000,5888.83
+1996-09-16,5838.52,5920.64,5823.72,5889.20,430080000,5889.20
+1996-09-13,5786.73,5871.44,5786.73,5838.52,488360000,5838.52
+1996-09-12,5754.92,5815.59,5739.76,5771.94,398820000,5771.94
+1996-09-11,5727.18,5777.49,5696.85,5754.92,376880000,5754.92
+1996-09-10,5733.84,5767.87,5681.68,5727.18,372960000,5727.18
+1996-09-09,5662.08,5756.40,5662.08,5733.84,311530000,5733.84
+1996-09-06,5606.96,5696.48,5585.51,5659.86,348710000,5659.86
+1996-09-05,5656.90,5669.47,5592.53,5606.96,361430000,5606.96
+1996-09-04,5648.39,5682.05,5608.81,5656.90,351290000,5656.90
+1996-09-03,5616.21,5667.99,5550.37,5648.39,345740000,5648.39
+1996-08-30,5647.65,5659.86,5571.45,5616.21,258380000,5616.21
+1996-08-29,5712.38,5716.82,5615.47,5647.65,321120000,5647.65
+1996-08-28,5711.27,5747.89,5678.72,5712.38,296440000,5712.38
+1996-08-27,5693.89,5735.32,5670.58,5711.27,310520000,5711.27
+1996-08-26,5722.74,5742.71,5665.41,5693.89,281430000,5693.89
+1996-08-23,5733.47,5761.58,5679.09,5722.74,308010000,5722.74
+1996-08-22,5689.82,5761.95,5662.45,5733.47,354950000,5733.47
+1996-08-21,5721.26,5734.95,5648.76,5689.82,348820000,5689.82
+1996-08-20,5699.44,5747.52,5670.21,5721.26,334960000,5721.26
+1996-08-19,5689.45,5728.66,5664.30,5699.44,294080000,5699.44
+1996-08-16,5665.78,5722.74,5646.54,5689.45,337650000,5689.45
+1996-08-15,5666.88,5701.66,5633.22,5665.78,323950000,5665.78
+1996-08-14,5647.28,5695.00,5614.36,5666.88,343470000,5666.88
+1996-08-13,5618.06,5713.86,5618.06,5647.28,362470000,5647.28
+1996-08-12,5681.31,5746.04,5625.83,5704.98,312170000,5704.98
+1996-08-09,5713.49,5747.15,5654.31,5681.31,327280000,5681.31
+1996-08-08,5718.67,5746.41,5661.34,5713.49,334570000,5713.49
+1996-08-07,5696.11,5754.55,5659.12,5718.67,394340000,5718.67
+1996-08-06,5674.28,5716.45,5630.26,5696.11,347290000,5696.11
+1996-08-05,5679.83,5719.04,5639.14,5674.28,307240000,5674.28
+1996-08-02,5601.41,5703.51,5601.41,5679.83,442080000,5679.83
+1996-08-01,5528.91,5628.79,5507.83,5594.75,439110000,5594.75
+1996-07-31,5481.93,5558.13,5460.48,5528.91,403560000,5528.91
+1996-07-30,5434.59,5503.73,5403.52,5481.93,341090000,5481.93
+1996-07-29,5473.06,5497.47,5414.61,5434.59,281560000,5434.59
+1996-07-26,5422.01,5503.02,5397.97,5473.06,349900000,5473.06
+1996-07-25,5355.80,5469.36,5355.80,5422.01,405390000,5422.01
+1996-07-24,5346.55,5402.04,5244.83,5354.69,463030000,5354.69
+1996-07-23,5390.94,5447.90,5313.63,5346.55,421900000,5346.55
+1996-07-22,5426.82,5446.05,5346.92,5390.94,327300000,5390.94
+1996-07-19,5464.18,5490.44,5393.53,5426.82,408070000,5426.82
+1996-07-18,5376.88,5500.43,5352.10,5464.18,474460000,5464.18
+1996-07-17,5358.76,5465.29,5325.10,5376.88,513830000,5376.88
+1996-07-16,5349.51,5438.66,5170.11,5358.76,68290000,5358.76
+1996-07-15,5510.56,5527.93,5326.98,5349.51,419020000,5349.51
+1996-07-12,5520.54,5562.65,5455.16,5510.56,397790000,5510.56
+1996-07-11,5600.33,5600.33,5447.77,5520.54,520470000,5520.54
+1996-07-10,5581.86,5628.03,5515.00,5603.65,421350000,5603.65
+1996-07-09,5550.83,5622.49,5540.12,5581.86,379200000,5581.86
+1996-07-08,5588.14,5622.12,5519.80,5550.83,367560000,5550.83
+1996-07-05,5657.58,5657.58,5570.77,5588.14,181470000,5588.14
+1996-07-03,5720.38,5749.93,5656.47,5703.02,336260000,5703.02
+1996-07-02,5729.98,5769.88,5668.29,5720.38,388000000,5720.38
+1996-07-01,5654.63,5749.19,5637.26,5729.98,345750000,5729.98
+1996-06-28,5677.53,5724.44,5625.81,5654.63,470460000,5654.63
+1996-06-27,5682.70,5715.21,5616.21,5677.53,405580000,5677.53
+1996-06-26,5719.27,5739.22,5652.04,5682.70,386520000,5682.70
+1996-06-25,5717.79,5760.27,5668.66,5719.27,391900000,5719.27
+1996-06-24,5705.23,5770.61,5688.61,5717.79,333840000,5717.79
+1996-06-21,5659.43,5722.22,5639.11,5705.23,520340000,5705.23
+1996-06-20,5648.35,5709.30,5606.97,5659.43,441060000,5659.43
+1996-06-19,5628.03,5693.78,5600.70,5648.35,383610000,5648.35
+1996-06-18,5652.78,5683.44,5607.71,5628.03,373290000,5628.03
+1996-06-17,5649.45,5689.72,5614.36,5652.78,298410000,5652.78
+1996-06-14,5657.95,5687.13,5609.93,5649.45,390630000,5649.45
+1996-06-13,5668.29,5714.84,5622.86,5657.95,397620000,5657.95
+1996-06-12,5668.66,5725.55,5637.63,5668.29,397190000,5668.29
+1996-06-11,5687.87,5747.71,5637.63,5668.66,405390000,5668.66
+1996-06-10,5697.11,5727.03,5643.54,5687.87,337480000,5687.87
+1996-06-07,5667.19,5708.93,5559.69,5697.11,445710000,5697.11
+1996-06-06,5697.48,5750.67,5639.48,5667.19,464800000,5667.19
+1996-06-05,5665.71,5718.53,5631.35,5697.48,380360000,5697.48
+1996-06-04,5624.71,5697.84,5616.58,5665.71,386040000,5665.71
+1996-06-03,5643.18,5662.75,5587.40,5624.71,318470000,5624.71
+1996-05-31,5693.41,5712.62,5614.36,5643.18,351750000,5643.18
+1996-05-30,5673.83,5734.41,5625.07,5693.41,381960000,5693.41
+1996-05-29,5709.67,5743.65,5632.46,5673.83,346730000,5673.83
+1996-05-28,5762.86,5798.69,5680.48,5709.67,341480000,5709.67
+1996-05-24,5762.12,5815.68,5722.59,5762.86,329150000,5762.86
+1996-05-23,5778.00,5833.04,5704.12,5762.12,431850000,5762.12
+1996-05-22,5736.26,5803.49,5687.87,5778.00,423670000,5778.00
+1996-05-21,5748.82,5794.63,5698.21,5736.26,409610000,5736.26
+1996-05-20,5687.50,5778.74,5657.58,5748.82,385000000,5748.82
+1996-05-17,5635.05,5729.61,5631.35,5687.50,429140000,5687.50
+1996-05-16,5625.44,5677.53,5577.42,5635.05,392070000,5635.05
+1996-05-15,5624.71,5691.57,5590.72,5625.44,447790000,5625.44
+1996-05-14,5582.60,5663.12,5566.71,5624.71,460440000,5624.71
+1996-05-13,5518.14,5601.80,5495.42,5582.60,394180000,5582.60
+1996-05-10,5478.03,5559.68,5478.03,5518.14,428370000,5518.14
+1996-05-09,5474.06,5534.76,5419.87,5475.14,404310000,5475.14
+1996-05-08,5420.95,5486.34,5327.74,5474.06,495460000,5474.06
+1996-05-07,5464.31,5486.34,5392.05,5420.95,410770000,5420.95
+1996-05-06,5478.03,5528.97,5397.83,5464.31,375820000,5464.31
+1996-05-03,5498.27,5555.71,5439.74,5478.03,434010000,5478.03
+1996-05-02,5575.22,5578.11,5455.27,5498.27,442960000,5498.27
+1996-05-01,5569.08,5619.29,5523.56,5575.22,404620000,5575.22
+1996-04-30,5573.41,5606.29,5522.83,5569.08,393390000,5569.08
+1996-04-29,5567.99,5611.71,5515.25,5573.41,344030000,5573.41
+1996-04-26,5566.91,5618.57,5517.78,5567.99,402530000,5567.99
+1996-04-25,5553.90,5601.23,5490.68,5566.91,461120000,5566.91
+1996-04-24,5588.59,5619.29,5512.36,5553.90,494220000,5553.90
+1996-04-23,5564.74,5621.82,5534.76,5588.59,452690000,5588.59
+1996-04-22,5535.48,5610.62,5516.33,5564.74,397460000,5564.74
+1996-04-19,5551.74,5593.64,5504.41,5535.48,435690000,5535.48
+1996-04-18,5549.93,5600.51,5493.93,5551.74,415150000,5551.74
+1996-04-17,5620.02,5653.25,5500.07,5549.93,465200000,5549.93
+1996-04-16,5592.92,5656.14,5554.99,5620.02,453310000,5620.02
+1996-04-15,5532.59,5614.60,5517.41,5592.92,346370000,5592.92
+1996-04-12,5487.07,5577.39,5445.16,5532.59,413270000,5532.59
+1996-04-11,5485.98,5540.17,5382.66,5487.07,519710000,5487.07
+1996-04-10,5560.41,5601.23,5452.02,5485.98,475150000,5485.98
+1996-04-09,5594.37,5644.58,5530.06,5560.41,426790000,5560.41
+1996-04-08,5624.71,5624.71,5518.14,5594.37,411810000,5594.37
+1996-04-04,5689.74,5737.07,5633.02,5682.88,383400000,5682.88
+1996-04-03,5671.68,5712.50,5619.29,5689.74,386620000,5689.74
+1996-04-02,5637.72,5706.72,5597.26,5671.68,406640000,5671.68
+1996-04-01,5587.14,5670.23,5562.57,5637.72,392120000,5637.72
+1996-03-29,5630.85,5682.88,5550.29,5587.14,413510000,5587.14
+1996-03-28,5626.88,5664.45,5564.74,5630.85,370750000,5630.85
+1996-03-27,5670.60,5703.47,5596.53,5626.88,406280000,5626.88
+1996-03-26,5643.86,5701.30,5595.81,5670.60,400090000,5670.60
+1996-03-25,5636.64,5712.14,5592.92,5643.86,336700000,5643.86
+1996-03-22,5626.88,5681.07,5589.67,5636.64,329390000,5636.64
+1996-03-21,5655.42,5696.25,5590.03,5626.88,367180000,5626.88
+1996-03-20,5669.51,5724.06,5590.39,5655.42,409780000,5655.42
+1996-03-19,5683.60,5755.86,5619.66,5669.51,438300000,5669.51
+1996-03-18,5584.97,5706.00,5573.41,5683.60,437100000,5683.60
+1996-03-15,5586.06,5628.69,5523.56,5584.97,529970000,5584.97
+1996-03-14,5568.72,5662.29,5536.56,5586.06,492630000,5586.06
+1996-03-13,5583.89,5626.52,5513.80,5568.72,413030000,5568.72
+1996-03-12,5581.00,5622.55,5464.67,5583.89,454980000,5583.89
+1996-03-11,5470.45,5605.20,5425.29,5581.00,449500000,5581.00
+1996-03-08,5612.79,5612.79,5395.30,5470.45,546550000,5470.45
+1996-03-07,5629.77,5667.34,5572.33,5641.69,425790000,5641.69
+1996-03-06,5642.42,5700.22,5585.70,5629.77,428220000,5629.77
+1996-03-05,5600.15,5655.78,5558.24,5642.42,445700000,5642.42
+1996-03-04,5536.56,5646.39,5511.99,5600.15,417270000,5600.15
+1996-03-01,5485.62,5573.41,5424.20,5536.56,471480000,5536.56
+1996-02-29,5506.21,5562.21,5440.46,5485.62,453170000,5485.62
+1996-02-28,5549.21,5625.07,5487.07,5506.21,447790000,5506.21
+1996-02-27,5565.10,5597.26,5478.76,5549.21,431340000,5549.21
+1996-02-26,5630.49,5647.83,5530.42,5565.10,399330000,5565.10
+1996-02-23,5608.46,5693.36,5546.32,5630.49,443130000,5630.49
+1996-02-22,5515.97,5638.44,5511.63,5608.46,494750000,5608.46
+1996-02-21,5458.53,5548.12,5440.82,5515.97,431220000,5515.97
+1996-02-20,5503.32,5515.97,5393.50,5458.53,395910000,5458.53
+1996-02-16,5551.37,5563.30,5470.45,5503.32,445570000,5503.32
+1996-02-15,5579.55,5623.27,5514.88,5551.37,415320000,5551.37
+1996-02-14,5601.23,5633.02,5534.39,5579.55,421790000,5579.55
+1996-02-13,5600.15,5644.94,5530.06,5601.23,441540000,5601.23
+1996-02-12,5541.62,5643.50,5531.14,5600.15,401490000,5600.15
+1996-02-09,5539.45,5603.76,5474.06,5541.62,477640000,5541.62
+1996-02-08,5492.12,5559.68,5441.55,5539.45,474970000,5539.45
+1996-02-07,5459.61,5520.30,5423.84,5492.12,462730000,5492.12
+1996-02-06,5407.59,5483.82,5371.82,5459.61,465940000,5459.61
+1996-02-05,5373.99,5433.96,5319.43,5407.59,377760000,5407.59
+1996-02-02,5405.06,5442.99,5338.94,5373.99,420020000,5373.99
+1996-02-01,5395.30,5438.29,5335.69,5405.06,461610000,5405.06
+1996-01-31,5381.21,5433.24,5314.38,5395.30,472210000,5395.30
+1996-01-30,5304.98,5409.75,5288.73,5381.21,464350000,5381.21
+1996-01-29,5271.75,5338.22,5246.82,5304.98,363330000,5304.98
+1996-01-26,5216.83,5293.78,5187.21,5271.75,385700000,5271.75
+1996-01-25,5242.84,5289.45,5173.84,5216.83,453270000,5216.83
+1996-01-24,5192.27,5297.04,5176.73,5242.84,476380000,5242.84
+1996-01-23,5219.36,5241.76,5141.33,5192.27,416910000,5192.27
+1996-01-22,5184.68,5254.77,5133.02,5219.36,398040000,5219.36
+1996-01-19,5124.35,5214.66,5087.49,5184.68,497720000,5184.68
+1996-01-18,5066.90,5166.98,5032.58,5124.35,450410000,5124.35
+1996-01-17,5088.22,5133.38,5028.61,5066.90,458720000,5066.90
+1996-01-16,5043.78,5116.04,5000.79,5088.22,425220000,5088.22
+1996-01-15,5061.12,5099.42,5012.71,5043.78,306180000,5043.78
+1996-01-12,5065.10,5114.23,5000.07,5061.12,383400000,5061.12
+1996-01-11,5032.94,5099.78,5002.96,5065.10,408800000,5065.10
+1996-01-10,5130.13,5151.69,5000.07,5032.94,496830000,5032.94
+1996-01-09,5197.70,5239.23,5100.86,5130.13,417400000,5130.13
+1996-01-08,5181.43,5207.08,5179.98,5197.70,130360000,5197.70
+1996-01-05,5173.84,5217.55,5107.00,5181.43,437110000,5181.43
+1996-01-04,5194.07,5259.46,5114.23,5173.84,512580000,5173.84
+1996-01-03,5177.45,5252.60,5143.13,5194.07,468950000,5194.07
+1996-01-02,5117.12,5208.16,5087.13,5177.45,364180000,5177.45
+1995-12-29,5095.80,5144.58,5063.65,5117.12,319680000,5117.12
+1995-12-28,5105.92,5132.65,5062.21,5095.80,288470000,5095.80
+1995-12-27,5110.26,5146.74,5077.74,5105.92,252270000,5105.92
+1995-12-26,5097.97,5149.27,5072.32,5110.26,217030000,5110.26
+1995-12-22,5096.53,5146.74,5064.01,5097.97,289600000,5097.97
+1995-12-21,5059.32,5135.91,5031.50,5096.53,415780000,5096.53
+1995-12-20,5109.89,5173.48,5047.39,5059.32,437650000,5059.32
+1995-12-19,5075.21,5146.02,5016.68,5109.89,18440000,5109.89
+1995-12-18,5159.39,5159.39,5042.70,5075.21,426230000,5075.21
+1995-12-15,5182.15,5217.55,5135.54,5176.73,636780000,5176.73
+1995-12-14,5216.47,5266.69,5148.55,5182.15,461960000,5182.15
+1995-12-13,5174.92,5246.10,5144.22,5216.47,414680000,5216.47
+1995-12-12,5184.32,5226.23,5132.29,5174.92,349410000,5174.92
+1995-12-11,5156.86,5225.50,5122.18,5184.32,342050000,5184.32
+1995-12-08,5159.39,5200.21,5115.31,5156.86,327500000,5156.86
+1995-12-07,5199.13,5211.05,5124.35,5159.39,379260000,5159.39
+1995-12-06,5177.45,5234.53,5147.47,5199.13,417750000,5199.13
+1995-12-05,5139.52,5216.83,5108.45,5177.45,434000000,5177.45
+1995-12-04,5087.13,5157.58,5057.87,5139.52,405080000,5139.52
+1995-12-01,5074.49,5133.02,5038.36,5087.13,392650000,5087.13
+1995-11-30,5105.56,5143.13,5033.17,5074.49,439470000,5074.49
+1995-11-29,5078.10,5126.51,5047.03,5105.56,398230000,5105.56
+1995-11-28,5070.88,5105.56,5006.21,5078.10,408860000,5078.10
+1995-11-27,5048.84,5114.23,5034.03,5070.88,356180000,5070.88
+1995-11-24,5041.61,5072.68,5028.61,5048.84,125870000,5048.84
+1995-11-22,5023.55,5096.17,4982.72,5041.61,404900000,5041.61
+1995-11-21,4983.09,5050.28,4948.04,5023.55,405860000,5023.55
+1995-11-20,4989.95,5030.77,4946.60,4983.09,333110000,4983.09
+1995-11-17,4969.36,5022.10,4934.31,4989.95,429990000,4989.95
+1995-11-16,4922.75,5003.68,4902.16,4969.36,418430000,4969.36
+1995-11-15,4871.81,4939.73,4835.69,4922.75,373090000,4922.75
+1995-11-14,4872.90,4923.11,4826.29,4871.81,353650000,4871.81
+1995-11-13,4870.37,4909.75,4821.23,4872.90,292390000,4872.90
+1995-11-10,4864.23,4896.02,4820.51,4870.37,297950000,4870.37
+1995-11-09,4852.67,4902.52,4811.84,4864.23,379500000,4864.23
+1995-11-08,4797.03,4877.59,4775.71,4852.67,359770000,4852.67
+1995-11-07,4814.01,4839.30,4770.66,4797.03,365720000,4797.03
+1995-11-06,4825.57,4862.78,4779.33,4814.01,309090000,4814.01
+1995-11-03,4808.59,4858.81,4774.63,4825.57,344360000,4825.57
+1995-11-02,4766.68,4833.16,4745.00,4808.59,396150000,4808.59
+1995-11-01,4755.48,4801.73,4719.72,4766.68,377930000,4766.68
+1995-10-31,4756.57,4821.96,4735.97,4755.48,377350000,4755.48
+1995-10-30,4741.75,4798.84,4716.46,4756.57,318840000,4756.57
+1995-10-27,4703.82,4766.68,4653.24,4741.75,378820000,4741.75
+1995-10-26,4753.68,4777.88,4655.05,4703.82,464190000,4703.82
+1995-10-25,4783.66,4824.49,4708.88,4753.68,433570000,4753.68
+1995-10-24,4755.48,4819.07,4730.92,4783.66,415400000,4783.66
+1995-10-23,4794.86,4805.70,4724.41,4755.48,329720000,4755.48
+1995-10-20,4802.45,4836.41,4758.37,4794.86,388140000,4794.86
+1995-10-19,4777.52,4830.27,4744.28,4802.45,406620000,4802.45
+1995-10-18,4795.95,4837.49,4747.53,4777.52,411270000,4777.52
+1995-10-17,4784.38,4831.35,4747.90,4795.95,352940000,4795.95
+1995-10-16,4793.78,4823.04,4751.51,4784.38,299520000,4784.38
+1995-10-13,4764.88,4845.08,4749.70,4793.78,373970000,4793.78
+1995-10-12,4735.25,4790.16,4709.24,4764.88,343930000,4764.88
+1995-10-11,4720.80,4773.91,4686.43,4735.25,343060000,4735.25
+1995-10-10,4726.22,4745.73,4638.43,4720.80,412670000,4720.80
+1995-10-09,4769.21,4781.13,4691.54,4726.22,275280000,4726.22
+1995-10-06,4762.71,4805.70,4731.64,4769.21,314170000,4769.21
+1995-10-05,4740.67,4794.86,4705.63,4762.71,367410000,4762.71
+1995-10-04,4749.70,4787.27,4689.01,4740.67,339350000,4740.67
+1995-10-03,4761.26,4791.61,4702.74,4749.70,385890000,4749.70
+1995-10-02,4789.08,4817.98,4732.72,4761.26,304990000,4761.26
+1995-09-29,4787.64,4834.96,4757.65,4789.08,337670000,4789.08
+1995-09-28,4762.35,4810.03,4731.64,4787.64,367610000,4787.64
+1995-09-27,4765.60,4790.16,4692.98,4762.35,410970000,4762.35
+1995-09-26,4769.93,4816.54,4738.86,4765.60,362550000,4765.60
+1995-09-25,4764.15,4804.62,4728.02,4769.93,273110000,4769.93
+1995-09-22,4767.40,4789.44,4706.35,4764.15,370750000,4764.15
+1995-09-21,4792.69,4820.15,4728.75,4767.40,367060000,4767.40
+1995-09-20,4767.04,4828.46,4746.45,4792.69,402530000,4792.69
+1995-09-19,4780.41,4798.11,4734.53,4767.04,371080000,4767.04
+1995-09-18,4797.57,4814.01,4729.47,4780.41,328630000,4780.41
+1995-09-15,4801.80,4839.48,4762.35,4797.57,459370000,4797.57
+1995-09-14,4765.52,4830.32,4731.36,4801.80,382860000,4801.80
+1995-09-13,4747.21,4801.09,4697.55,4765.52,381450000,4765.52
+1995-09-12,4704.94,4762.35,4689.45,4747.21,342580000,4747.21
+1995-09-11,4700.72,4744.04,4672.54,4704.94,296820000,4704.94
+1995-09-08,4669.72,4722.91,4648.59,4700.72,317260000,4700.72
+1995-09-07,4683.81,4710.58,4640.14,4669.72,321710000,4669.72
+1995-09-06,4670.08,4716.21,4648.95,4683.81,369510000,4683.81
+1995-09-05,4647.54,4697.90,4625.70,4670.08,332660000,4670.08
+1995-09-01,4610.56,4672.19,4594.71,4647.54,255710000,4647.54
+1995-08-31,4604.57,4634.51,4582.38,4610.56,300890000,4610.56
+1995-08-30,4608.44,4639.79,4582.38,4604.57,329780000,4604.57
+1995-08-29,4594.00,4625.35,4554.21,4608.44,311290000,4608.44
+1995-08-28,4601.40,4632.39,4566.53,4594.00,267860000,4594.00
+1995-08-25,4580.62,4629.93,4569.70,4601.40,255990000,4601.40
+1995-08-24,4584.85,4618.30,4552.80,4580.62,299200000,4580.62
+1995-08-23,4620.42,4636.27,4571.81,4584.85,291380000,4584.85
+1995-08-22,4614.78,4646.13,4580.62,4620.42,290350000,4620.42
+1995-08-21,4617.60,4676.42,4593.65,4614.78,303200000,4614.78
+1995-08-18,4630.63,4665.15,4597.88,4617.60,312030000,4617.60
+1995-08-17,4639.08,4659.16,4587.66,4630.63,354460000,4630.63
+1995-08-16,4640.84,4673.60,4593.30,4639.08,390070000,4639.08
+1995-08-15,4659.86,4672.89,4602.10,4640.84,330040000,4640.84
+1995-08-14,4618.30,4677.12,4601.75,4659.86,263750000,4659.86
+1995-08-11,4643.66,4659.51,4584.85,4618.30,267850000,4618.30
+1995-08-10,4671.49,4698.96,4621.47,4643.66,306660000,4643.66
+1995-08-09,4693.32,4712.34,4649.30,4671.49,303390000,4671.49
+1995-08-08,4693.32,4722.55,4654.23,4693.32,305150000,4693.32
+1995-08-07,4683.46,4727.84,4667.26,4693.32,276040000,4693.32
+1995-08-04,4701.42,4728.54,4660.57,4683.46,314730000,4683.46
+1995-08-03,4690.15,4720.44,4632.04,4701.42,353110000,4701.42
+1995-08-02,4700.37,4772.56,4667.96,4690.15,374310000,4690.15
+1995-08-01,4708.47,4742.98,4648.59,4700.37,334770000,4700.37
+1995-07-31,4715.51,4753.55,4671.13,4708.47,291950000,4708.47
+1995-07-28,4732.77,4762.70,4686.28,4715.51,311580000,4715.51
+1995-07-27,4707.06,4767.99,4691.56,4732.77,356570000,4732.77
+1995-07-26,4714.45,4750.73,4665.15,4707.06,393460000,4707.06
+1995-07-25,4668.67,4743.69,4651.76,4714.45,373210000,4714.45
+1995-07-24,4641.55,4701.42,4620.42,4668.67,315170000,4668.67
+1995-07-21,4641.55,4676.06,4596.82,4641.55,427770000,4641.55
+1995-07-20,4628.87,4684.52,4578.51,4641.55,383380000,4641.55
+1995-07-19,4686.28,4698.60,4530.26,4628.87,489850000,4628.87
+1995-07-18,4734.53,4734.53,4648.24,4686.28,372230000,4686.28
+1995-07-17,4708.82,4767.63,4681.35,4736.29,322540000,4736.29
+1995-07-14,4727.48,4736.99,4664.79,4708.82,312930000,4708.82
+1995-07-13,4727.29,4766.58,4676.06,4727.48,387470000,4727.48
+1995-07-12,4680.60,4747.00,4654.66,4727.29,416000000,4727.29
+1995-07-11,4702.39,4724.52,4647.74,4680.60,376770000,4680.60
+1995-07-10,4702.73,4747.69,4670.91,4702.39,409700000,4702.39
+1995-07-07,4664.00,4740.77,4628.38,4702.73,466540000,4702.73
+1995-07-06,4615.23,4681.98,4587.91,4664.00,420470000,4664.00
+1995-07-05,4585.15,4652.24,4561.63,4615.23,357810000,4615.23
+1995-07-03,4556.10,4594.83,4536.04,4585.15,117870000,4585.15
+1995-06-30,4550.56,4606.24,4513.90,4556.10,311320000,4556.10
+1995-06-29,4556.79,4592.76,4510.45,4550.56,313060000,4550.56
+1995-06-28,4542.61,4587.22,4512.87,4556.79,368060000,4556.79
+1995-06-27,4551.25,4592.41,4511.48,4542.61,346950000,4542.61
+1995-06-26,4585.84,4600.02,4536.38,4551.25,296720000,4551.25
+1995-06-23,4589.64,4609.70,4549.18,4585.84,321530000,4585.84
+1995-06-22,4547.10,4614.20,4535.35,4589.64,420950000,4589.64
+1995-06-21,4550.56,4583.07,4517.02,4547.10,398210000,4547.10
+1995-06-20,4553.68,4587.22,4497.99,4550.56,382290000,4550.56
+1995-06-19,4510.79,4577.19,4498.69,4553.68,322620000,4553.68
+1995-06-16,4496.27,4533.96,4482.43,4510.79,442740000,4510.79
+1995-06-15,4491.08,4527.74,4466.87,4496.27,334640000,4496.27
+1995-06-14,4484.51,4510.79,4449.23,4491.08,330750000,4491.08
+1995-06-13,4446.46,4504.91,4440.24,4484.51,339620000,4484.51
+1995-06-12,4423.99,4482.09,4415.69,4446.46,287830000,4446.46
+1995-06-09,4458.57,4466.87,4394.59,4423.99,328960000,4423.99
+1995-06-08,4462.03,4492.12,4431.59,4458.57,289880000,4458.57
+1995-06-07,4485.20,4497.65,4432.29,4462.03,327790000,4462.03
+1995-06-06,4476.55,4520.47,4446.46,4485.20,340470000,4485.20
+1995-06-05,4444.39,4510.45,4417.76,4476.55,337520000,4476.55
+1995-06-02,4472.75,4496.27,4406.35,4444.39,366000000,4444.39
+1995-06-01,4465.14,4499.72,4421.56,4472.75,345890000,4472.75
+1995-05-31,4378.68,4467.91,4360.70,4465.14,358160000,4465.14
+1995-05-30,4369.00,4412.92,4334.41,4378.68,283020000,4378.68
+1995-05-26,4412.23,4423.64,4338.91,4369.00,290730000,4369.00
+1995-05-25,4427.44,4451.31,4375.91,4412.23,341820000,4412.23
+1995-05-24,4436.44,4480.70,4390.78,4438.16,391750000,4438.16
+1995-05-23,4395.63,4451.65,4372.46,4436.44,362690000,4436.44
+1995-05-22,4341.33,4416.03,4337.87,4395.63,285600000,4395.63
+1995-05-19,4340.64,4368.65,4287.38,4341.33,354010000,4341.33
+1995-05-18,4422.60,4426.41,4330.95,4340.64,351850000,4340.64
+1995-05-17,4435.05,4452.69,4386.63,4422.60,347930000,4422.60
+1995-05-16,4437.47,4464.10,4408.08,4435.05,366180000,4435.05
+1995-05-15,4430.56,4468.94,4398.74,4437.47,316240000,4437.47
+1995-05-12,4411.19,4463.07,4371.07,4430.56,361000000,4430.56
+1995-05-11,4404.62,4446.12,4365.19,4411.19,339900000,4411.19
+1995-05-10,4390.78,4440.24,4347.55,4404.62,381990000,4404.62
+1995-05-09,4383.87,4421.22,4360.00,4390.78,361430000,4390.78
+1995-05-08,4343.40,4407.04,4316.43,4383.87,291810000,4383.87
+1995-05-05,4359.66,4389.75,4310.55,4343.40,342380000,4343.40
+1995-05-04,4373.15,4426.41,4329.92,4359.66,434920000,4359.66
+1995-05-03,4328.88,4392.51,4312.28,4373.15,392290000,4373.15
+1995-05-02,4316.08,4348.25,4288.42,4328.88,300660000,4328.88
+1995-05-01,4321.27,4352.74,4278.73,4316.08,296830000,4316.08
+1995-04-28,4314.70,4348.94,4270.78,4321.27,320270000,4321.27
+1995-04-27,4299.83,4335.10,4269.05,4314.70,350850000,4314.70
+1995-04-26,4300.17,4324.73,4267.32,4299.83,350790000,4299.83
+1995-04-25,4303.98,4337.18,4267.32,4300.17,351790000,4300.17
+1995-04-24,4270.09,4328.88,4239.65,4303.98,325760000,4303.98
+1995-04-21,4230.66,4296.37,4214.41,4270.09,403210000,4270.09
+1995-04-20,4207.49,4263.86,4186.39,4230.66,368440000,4230.66
+1995-04-19,4179.13,4232.39,4143.51,4207.49,377520000,4207.49
+1995-04-18,4195.38,4221.67,4152.15,4179.13,344680000,4179.13
+1995-04-17,4208.18,4260.06,4174.63,4195.38,333930000,4195.38
+1995-04-13,4197.81,4243.46,4173.94,4208.18,301510000,4208.18
+1995-04-12,4187.08,4221.67,4163.57,4197.81,327880000,4197.81
+1995-04-11,4198.15,4229.97,4168.06,4187.08,309710000,4187.08
+1995-04-10,4192.62,4219.94,4163.91,4198.15,260980000,4198.15
+1995-04-07,4205.41,4226.86,4154.23,4192.62,314750000,4192.62
+1995-04-06,4200.57,4239.31,4179.13,4205.41,320460000,4205.41
+1995-04-05,4201.61,4229.62,4166.33,4200.57,315170000,4200.57
+1995-04-04,4168.41,4220.98,4154.23,4201.61,330550000,4201.61
+1995-04-03,4157.69,4202.30,4129.68,4168.41,287380000,4168.41
+1995-03-31,4172.56,4194.00,4100.28,4157.69,352940000,4157.69
+1995-03-30,4160.80,4213.37,4128.29,4172.56,362020000,4172.56
+1995-03-29,4151.81,4213.71,4121.72,4160.80,385910000,4160.80
+1995-03-28,4157.34,4176.02,4120.68,4151.81,320360000,4151.81
+1995-03-27,4138.67,4177.40,4113.08,4157.34,296160000,4157.34
+1995-03-24,4087.83,4155.27,4087.14,4138.67,358370000,4138.67
+1995-03-23,4082.99,4107.89,4046.33,4087.83,318490000,4087.83
+1995-03-22,4072.61,4107.54,4039.07,4082.99,313120000,4082.99
+1995-03-21,4083.68,4122.41,4046.67,4072.61,367110000,4072.61
+1995-03-20,4073.65,4115.15,4051.17,4083.68,301720000,4083.68
+1995-03-17,4069.15,4101.66,4044.94,4073.65,415810000,4073.65
+1995-03-16,4038.37,4095.78,4021.77,4069.15,336330000,4069.15
+1995-03-15,4048.75,4070.19,4008.63,4038.37,309540000,4038.37
+1995-03-14,4025.23,4087.14,4014.86,4048.75,346140000,4048.75
+1995-03-13,4035.61,4060.85,3999.29,4025.23,275280000,4025.23
+1995-03-10,3983.39,4054.97,3978.20,4035.61,383000000,4035.61
+1995-03-09,3979.23,4011.40,3953.99,3983.39,319100000,3983.39
+1995-03-08,3962.63,4002.41,3944.65,3979.23,349700000,3979.23
+1995-03-07,3997.56,4009.67,3935.31,3962.63,355550000,3962.63
+1995-03-06,3989.61,4015.89,3944.31,3997.56,298850000,3997.56
+1995-03-03,3979.93,4004.83,3946.03,3989.61,330840000,3989.61
+1995-03-02,3994.80,4009.67,3947.07,3979.93,329430000,3979.93
+1995-03-01,4011.05,4033.19,3960.56,3994.80,362590000,3994.80
+1995-02-28,3988.57,4021.43,3967.48,4011.05,317120000,4011.05
+1995-02-27,4011.74,4033.19,3966.78,3988.57,285790000,3988.57
+1995-02-24,4003.33,4033.61,3974.06,4011.74,302850000,4011.74
+1995-02-23,3979.45,4034.62,3979.45,4003.33,394100000,4003.33
+1995-02-22,3963.97,4002.32,3944.46,3973.05,339140000,3973.05
+1995-02-21,3953.54,3989.88,3930.66,3963.97,308060000,3963.97
+1995-02-17,3987.52,4001.99,3937.05,3953.54,350560000,3953.54
+1995-02-16,3986.17,4011.07,3948.16,3987.52,360990000,3987.52
+1995-02-15,3958.25,4019.15,3937.73,3986.17,377940000,3986.17
+1995-02-14,3954.21,3984.83,3930.66,3958.25,300720000,3958.25
+1995-02-13,3939.07,3974.74,3920.57,3954.21,256210000,3954.21
+1995-02-10,3932.68,3962.96,3908.46,3939.07,295550000,3939.07
+1995-02-09,3935.37,3967.33,3904.76,3932.68,325570000,3932.68
+1995-02-08,3937.39,3967.67,3909.13,3935.37,317910000,3935.37
+1995-02-07,3937.73,3960.27,3907.45,3937.39,317110000,3937.39
+1995-02-06,3928.64,3964.31,3900.04,3937.73,325660000,3937.73
+1995-02-03,3876.16,3959.60,3876.16,3928.64,440950000,3928.64
+1995-02-02,3847.56,3884.23,3828.38,3870.77,322030000,3870.77
+1995-02-01,3843.86,3886.25,3809.21,3847.56,395300000,3847.56
+1995-01-31,3832.08,3872.12,3809.54,3843.86,411570000,3843.86
+1995-01-30,3857.99,3881.20,3794.40,3832.08,318530000,3832.08
+1995-01-27,3870.44,3914.18,3827.37,3857.99,339490000,3857.99
+1995-01-26,3871.45,3903.41,3839.15,3870.44,304650000,3870.44
+1995-01-25,3862.70,3908.79,3832.08,3871.45,342240000,3871.45
+1995-01-24,3867.41,3898.36,3840.16,3862.70,315410000,3862.70
+1995-01-23,3869.43,3885.58,3815.26,3867.41,325810000,3867.41
+1995-01-20,3882.21,3898.70,3826.70,3869.43,376870000,3869.43
+1995-01-19,3928.98,3929.99,3866.74,3882.21,297220000,3882.21
+1995-01-18,3930.66,3950.85,3889.95,3928.98,343100000,3928.98
+1995-01-17,3932.34,3953.88,3895.33,3930.66,330890000,3930.66
+1995-01-16,3908.46,3955.56,3889.95,3932.34,315800000,3932.34
+1995-01-13,3859.00,3924.27,3852.61,3908.46,336740000,3908.46
+1995-01-12,3862.03,3886.59,3831.41,3859.00,313040000,3859.00
+1995-01-11,3866.74,3899.71,3824.68,3862.03,346310000,3862.03
+1995-01-10,3861.35,3912.49,3844.87,3866.74,352440000,3866.74
+1995-01-09,3867.41,3889.28,3834.44,3861.35,278710000,3861.35
+1995-01-06,3850.92,3902.40,3823.67,3867.41,308070000,3867.41
+1995-01-05,3857.65,3876.83,3825.35,3850.92,309140000,3850.92
+1995-01-04,3838.48,3876.83,3815.26,3857.65,319510000,3857.65
+1995-01-03,3834.44,3864.72,3805.50,3838.48,262450000,3838.48
+1994-12-30,3833.43,3874.48,3812.91,3834.44,256260000,3834.44
+1994-12-29,3839.49,3867.41,3812.91,3833.43,250650000,3833.43
+1994-12-28,3861.69,3871.45,3816.94,3839.49,246260000,3839.49
+1994-12-27,3833.43,3882.21,3832.08,3861.69,211180000,3861.69
+1994-12-23,3814.92,3860.01,3808.53,3833.43,196540000,3833.43
+1994-12-22,3801.80,3850.59,3780.61,3814.92,339670000,3814.92
+1994-12-21,3767.15,3836.46,3761.77,3801.80,378790000,3801.80
+1994-12-20,3790.70,3807.19,3752.35,3767.15,325510000,3767.15
+1994-12-19,3807.19,3815.26,3764.46,3790.70,271850000,3790.70
+1994-12-16,3765.47,3817.95,3758.07,3807.19,481860000,3807.19
+1994-12-15,3746.29,3794.07,3729.13,3765.47,332790000,3765.47
+1994-12-14,3715.34,3772.20,3700.53,3746.29,355000000,3746.29
+1994-12-13,3718.37,3749.32,3690.78,3715.34,307110000,3715.34
+1994-12-12,3691.11,3734.52,3667.90,3718.37,285730000,3718.37
+1994-12-09,3685.73,3713.32,3638.97,3691.11,336440000,3691.11
+1994-12-08,3735.52,3757.39,3670.25,3685.73,362280000,3685.73
+1994-12-07,3745.95,3758.07,3700.87,3735.52,283490000,3735.52
+1994-12-06,3741.92,3762.10,3703.56,3745.95,298890000,3745.95
+1994-12-05,3745.62,3779.93,3715.67,3741.92,258480000,3741.92
+1994-12-02,3700.87,3755.04,3680.68,3745.62,284740000,3745.62
+1994-12-01,3739.23,3755.37,3680.68,3700.87,285920000,3700.87
+1994-11-30,3738.55,3783.30,3718.37,3739.23,300800000,3739.23
+1994-11-29,3739.56,3755.04,3703.90,3738.55,286580000,3738.55
+1994-11-28,3708.27,3759.41,3693.13,3739.56,265020000,3739.56
+1994-11-25,3675.97,3722.40,3675.97,3708.27,118290000,3708.27
+1994-11-23,3677.99,3704.91,3612.05,3674.63,430730000,3674.63
+1994-11-22,3769.51,3787.34,3669.58,3677.99,387270000,3677.99
+1994-11-21,3815.26,3845.20,3758.74,3769.51,293030000,3769.51
+1994-11-18,3828.05,3844.87,3773.21,3815.26,356730000,3815.26
+1994-11-17,3845.20,3868.08,3797.77,3828.05,323190000,3828.05
+1994-11-16,3826.36,3864.38,3803.82,3845.20,296980000,3845.20
+1994-11-15,3829.73,3871.45,3794.40,3826.36,336330000,3826.36
+1994-11-14,3801.47,3849.91,3795.07,3829.73,260380000,3829.73
+1994-11-11,3821.99,3830.06,3779.93,3801.47,220800000,3801.47
+1994-11-10,3831.75,3873.47,3821.99,3821.99,280910000,3821.99
+1994-11-09,3830.74,3882.89,3798.44,3831.75,341500000,3831.75
+1994-11-08,3808.87,3857.65,3798.75,3830.74,290860000,3830.74
+1994-11-07,3807.52,3830.40,3781.62,3808.87,255030000,3808.87
+1994-11-04,3845.88,3879.52,3802.81,3807.52,280560000,3807.52
+1994-11-03,3837.13,3872.46,3814.25,3845.88,284480000,3845.88
+1994-11-02,3863.37,3888.94,3820.31,3837.13,331360000,3837.13
+1994-11-01,3908.12,3919.90,3836.79,3863.37,314940000,3863.37
+1994-10-31,3930.66,3956.90,3889.28,3908.12,302810000,3908.12
+1994-10-28,3875.15,3953.54,3863.37,3930.66,381450000,3930.66
+1994-10-27,3848.23,3893.99,3834.44,3875.15,327790000,3875.15
+1994-10-26,3850.59,3891.97,3816.61,3848.23,322560000,3848.23
+1994-10-25,3855.30,3883.56,3803.49,3850.59,326100000,3850.59
+1994-10-24,3891.30,3925.61,3840.16,3855.30,282800000,3855.30
+1994-10-21,3911.15,3921.58,3861.35,3891.30,309410000,3891.30
+1994-10-20,3936.04,3954.89,3873.13,3911.15,326100000,3911.15
+1994-10-19,3917.54,3958.25,3887.93,3936.04,317030000,3936.04
+1994-10-18,3923.93,3945.46,3892.64,3917.54,259730000,3917.54
+1994-10-17,3910.47,3949.84,3883.22,3923.93,238490000,3923.93
+1994-10-14,3889.95,3927.97,3862.03,3910.47,251770000,3910.47
+1994-10-13,3878.18,3944.12,3878.18,3889.95,337900000,3889.95
+1994-10-12,3876.83,3903.07,3844.87,3875.15,269550000,3875.15
+1994-10-11,3828.96,3898.36,3828.96,3876.83,355540000,3876.83
+1994-10-10,3797.43,3843.19,3789.36,3821.32,213110000,3821.32
+1994-10-07,3775.56,3826.03,3754.37,3797.43,284230000,3797.43
+1994-10-06,3787.34,3810.89,3752.01,3775.56,272620000,3775.56
+1994-10-05,3801.13,3811.56,3736.20,3787.34,359670000,3787.34
+1994-10-04,3846.89,3873.47,3788.35,3801.13,325620000,3801.13
+1994-10-03,3843.19,3872.79,3809.21,3846.89,269130000,3846.89
+1994-09-30,3854.63,3891.30,3825.69,3843.19,292060000,3843.19
+1994-09-29,3878.18,3892.64,3834.78,3854.63,302280000,3854.63
+1994-09-28,3863.04,3904.76,3854.29,3878.18,330020000,3878.18
+1994-09-27,3849.24,3891.63,3828.72,3863.04,290330000,3863.04
+1994-09-26,3831.75,3869.43,3804.50,3849.24,272530000,3849.24
+1994-09-23,3837.13,3872.46,3806.51,3831.75,300060000,3831.75
+1994-09-22,3851.60,3882.55,3818.29,3837.13,305210000,3837.13
+1994-09-21,3869.09,3886.92,3806.85,3851.60,355330000,3851.60
+1994-09-20,3932.01,3932.01,3859.67,3869.09,326050000,3869.09
+1994-09-19,3933.35,3972.72,3909.80,3936.72,272920000,3936.72
+1994-09-16,3953.88,3955.22,3894.66,3933.35,410750000,3933.35
+1994-09-15,3895.33,3959.93,3883.90,3953.88,281890000,3953.88
+1994-09-14,3879.86,3918.55,3856.64,3895.33,297480000,3895.33
+1994-09-13,3860.34,3905.76,3854.29,3879.86,293370000,3879.86
+1994-09-12,3874.81,3897.02,3843.86,3860.34,244680000,3860.34
+1994-09-09,3902.06,3902.06,3844.20,3874.81,293330000,3874.81
+1994-09-08,3886.25,3926.96,3872.46,3908.46,295010000,3908.46
+1994-09-07,3898.70,3920.90,3860.68,3886.25,292110000,3886.25
+1994-09-06,3885.58,3918.55,3860.01,3898.70,199670000,3898.70
+1994-09-02,3901.44,3928.64,3871.98,3885.58,216150000,3885.58
+1994-09-01,3913.42,3927.99,3871.66,3901.44,285670000,3901.44
+1994-08-31,3917.30,3954.54,3878.78,3913.42,354650000,3913.42
+1994-08-30,3898.85,3934.14,3875.87,3917.30,294520000,3917.30
+1994-08-29,3881.05,3927.34,3869.39,3898.85,266080000,3898.85
+1994-08-26,3836.69,3903.38,3836.69,3881.05,305120000,3881.05
+1994-08-25,3846.73,3872.63,3810.47,3829.89,284200000,3829.89
+1994-08-24,3775.83,3852.56,3767.41,3846.73,309780000,3846.73
+1994-08-23,3751.22,3804.64,3745.07,3775.83,307240000,3775.83
+1994-08-22,3755.11,3771.94,3722.41,3751.22,235870000,3751.22
+1994-08-19,3755.43,3785.22,3727.59,3755.11,276630000,3755.11
+1994-08-18,3776.48,3793.63,3736.98,3755.43,287330000,3755.43
+1994-08-17,3784.57,3812.09,3754.46,3776.48,309250000,3776.48
+1994-08-16,3760.29,3804.64,3732.45,3784.57,306640000,3784.57
+1994-08-15,3768.71,3798.17,3742.16,3760.29,223210000,3760.29
+1994-08-12,3750.90,3792.66,3738.27,3768.71,249270000,3768.71
+1994-08-11,3766.76,3785.86,3728.56,3750.90,275690000,3750.90
+1994-08-10,3755.76,3793.97,3738.27,3766.76,279470000,3766.76
+1994-08-09,3753.81,3773.89,3728.56,3755.76,259130000,3755.76
+1994-08-08,3747.02,3780.68,3732.77,3753.81,217670000,3753.81
+1994-08-05,3765.79,3769.68,3725.00,3747.02,230270000,3747.02
+1994-08-04,3792.66,3807.23,3752.52,3765.79,289150000,3765.79
+1994-08-03,3796.22,3815.00,3762.88,3792.66,283840000,3792.66
+1994-08-02,3798.17,3829.25,3776.48,3796.22,294740000,3796.22
+1994-08-01,3764.50,3809.50,3749.28,3798.17,258180000,3798.17
+1994-07-29,3730.83,3782.63,3726.30,3764.50,269560000,3764.50
+1994-07-28,3720.47,3757.05,3701.69,3730.83,247560000,3730.83
+1994-07-27,3735.68,3753.17,3693.27,3720.47,251680000,3720.47
+1994-07-26,3741.84,3764.50,3706.22,3735.68,232670000,3735.68
+1994-07-25,3735.04,3762.56,3713.67,3741.84,213470000,3741.84
+1994-07-22,3732.45,3765.15,3707.19,3735.04,261090000,3735.04
+1994-07-21,3727.27,3763.20,3684.86,3732.45,292080000,3732.45
+1994-07-20,3748.31,3763.85,3706.22,3727.27,267740000,3727.27
+1994-07-19,3755.43,3777.45,3726.30,3748.31,251530000,3748.31
+1994-07-18,3753.81,3779.39,3725.00,3755.43,227480000,3755.43
+1994-07-15,3739.25,3769.35,3712.37,3753.81,275860000,3753.81
+1994-07-14,3704.28,3763.53,3697.48,3739.25,319950000,3739.25
+1994-07-13,3702.66,3738.27,3683.89,3704.28,265840000,3704.28
+1994-07-12,3702.99,3725.32,3660.90,3702.66,252250000,3702.66
+1994-07-11,3709.14,3735.36,3671.26,3702.99,222580000,3702.99
+1994-07-08,3688.42,3728.56,3660.90,3709.14,236520000,3709.14
+1994-07-07,3674.50,3714.32,3656.04,3688.42,258500000,3688.42
+1994-07-06,3652.48,3698.13,3631.11,3674.50,233640000,3674.50
+1994-07-05,3646.65,3680.65,3621.73,3652.48,193030000,3652.48
+1994-07-01,3624.96,3675.79,3611.04,3646.65,199030000,3646.65
+1994-06-30,3667.05,3683.56,3610.72,3624.96,294110000,3624.96
+1994-06-29,3669.64,3711.73,3645.68,3667.05,263890000,3667.05
+1994-06-28,3685.50,3705.58,3630.47,3669.64,265880000,3669.64
+1994-06-27,3636.94,3694.89,3603.92,3685.50,250110000,3685.50
+1994-06-24,3699.09,3704.80,3616.65,3636.94,261260000,3636.94
+1994-06-23,3724.77,3752.04,3685.14,3699.09,256480000,3699.09
+1994-06-22,3707.97,3748.87,3694.65,3724.77,251110000,3724.77
+1994-06-21,3741.90,3756.80,3674.68,3707.97,298730000,3707.97
+1994-06-20,3771.07,3771.07,3716.21,3741.90,229520000,3741.90
+1994-06-17,3811.34,3821.48,3764.09,3776.78,373400000,3776.78
+1994-06-16,3790.41,3830.68,3771.39,3811.34,254880000,3811.34
+1994-06-15,3814.83,3838.29,3772.02,3790.41,269740000,3790.41
+1994-06-14,3783.12,3839.88,3769.17,3814.83,288550000,3814.83
+1994-06-13,3773.45,3808.17,3741.26,3783.12,242810000,3783.12
+1994-06-10,3753.14,3798.68,3739.60,3773.45,222480000,3773.45
+1994-06-09,3749.45,3776.83,3721.45,3753.14,252870000,3753.14
+1994-06-08,3755.91,3780.83,3721.45,3749.45,256000000,3749.45
+1994-06-07,3768.52,3788.52,3733.14,3755.91,234680000,3755.91
+1994-06-06,3772.22,3812.83,3749.75,3768.52,259080000,3768.52
+1994-06-03,3758.99,3792.22,3732.52,3772.22,271490000,3772.22
+1994-06-02,3760.83,3791.60,3732.83,3758.99,271150000,3758.99
+1994-06-01,3758.37,3785.14,3717.76,3760.83,279910000,3760.83
+1994-05-31,3757.14,3783.29,3725.45,3758.37,216700000,3758.37
+1994-05-27,3753.46,3772.18,3723.68,3757.14,186430000,3757.14
+1994-05-26,3755.30,3785.07,3722.76,3753.46,255740000,3753.46
+1994-05-25,3745.17,3768.19,3710.79,3755.30,254410000,3755.30
+1994-05-24,3742.41,3786.30,3707.11,3745.17,280040000,3745.17
+1994-05-23,3766.35,3770.65,3711.40,3742.41,249390000,3742.41
+1994-05-20,3758.98,3788.76,3721.84,3766.35,295180000,3766.35
+1994-05-19,3732.89,3782.92,3707.72,3758.98,303680000,3758.98
+1994-05-18,3720.61,3761.74,3683.16,3732.89,339280000,3732.89
+1994-05-17,3671.50,3735.04,3653.70,3720.61,311280000,3720.61
+1994-05-16,3659.68,3694.21,3628.52,3671.50,234680000,3671.50
+1994-05-13,3652.84,3690.32,3626.37,3659.68,252070000,3659.68
+1994-05-12,3629.04,3682.58,3624.58,3652.84,272770000,3652.84
+1994-05-11,3656.41,3678.42,3609.71,3629.04,277400000,3629.04
+1994-05-10,3629.04,3684.67,3627.56,3656.41,297660000,3656.41
+1994-05-09,3669.50,3676.93,3612.39,3629.04,250870000,3629.04
+1994-05-06,3695.97,3702.51,3625.77,3669.50,291910000,3669.50
+1994-05-05,3697.75,3731.07,3675.45,3695.97,255690000,3695.97
+1994-05-04,3714.41,3730.17,3670.09,3697.75,267940000,3697.75
+1994-05-03,3701.02,3736.12,3669.79,3714.41,288270000,3714.41
+1994-05-02,3681.69,3734.04,3648.97,3701.02,296130000,3701.02
+1994-04-29,3668.31,3707.87,3642.13,3681.69,293970000,3681.69
+1994-04-28,3699.54,3723.93,3640.35,3668.31,325200000,3668.31
+1994-04-26,3705.78,3733.15,3669.79,3699.54,288110000,3699.54
+1994-04-25,3648.68,3721.25,3635.29,3705.78,262220000,3705.78
+1994-04-22,3652.54,3690.32,3621.01,3648.68,295710000,3648.68
+1994-04-21,3598.71,3673.96,3582.94,3652.54,378760000,3652.54
+1994-04-20,3619.82,3662.66,3546.65,3598.71,366540000,3598.71
+1994-04-19,3620.42,3670.39,3567.18,3619.82,323280000,3619.82
+1994-04-18,3661.47,3679.61,3593.35,3620.42,271450000,3620.42
+1994-04-15,3663.25,3699.24,3631.13,3661.47,309550000,3661.47
+1994-04-14,3661.47,3693.59,3625.77,3663.25,275130000,3663.25
+1994-04-13,3681.69,3704.30,3616.85,3661.47,278030000,3661.47
+1994-04-12,3688.83,3722.14,3661.17,3681.69,256250000,3681.69
+1994-04-11,3674.26,3720.66,3651.35,3688.83,243180000,3688.83
+1994-04-08,3693.26,3717.15,3644.03,3674.26,264090000,3674.26
+1994-04-07,3679.73,3712.83,3642.59,3693.26,289280000,3693.26
+1994-04-06,3675.41,3722.34,3643.16,3679.73,302000000,3679.73
+1994-04-05,3625.02,3698.15,3625.02,3675.41,366890000,3675.41
+1994-04-04,3633.08,3633.08,3520.80,3593.35,344390000,3593.35
+1994-03-31,3626.75,3673.10,3544.12,3635.96,403580000,3635.96
+1994-03-30,3699.02,3718.88,3612.36,3626.75,390520000,3626.75
+1994-03-29,3762.35,3771.86,3689.23,3699.02,301630000,3699.02
+1994-03-28,3774.73,3793.45,3719.74,3762.35,287360000,3762.35
+1994-03-25,3821.09,3845.85,3764.66,3774.73,249670000,3774.73
+1994-03-24,3865.42,3865.42,3792.58,3821.09,303800000,3821.09
+1994-03-23,3862.55,3901.41,3839.80,3869.46,284600000,3869.46
+1994-03-22,3864.85,3896.23,3840.66,3862.55,283090000,3862.55
+1994-03-21,3895.65,3898.25,3838.65,3864.85,247390000,3864.85
+1994-03-18,3865.14,3911.78,3838.65,3895.65,462240000,3895.65
+1994-03-17,3848.15,3891.34,3821.66,3865.14,303950000,3865.14
+1994-03-16,3849.59,3879.53,3819.94,3848.15,306820000,3848.15
+1994-03-15,3862.98,3888.46,3826.85,3849.59,329260000,3849.59
+1994-03-14,3862.70,3894.21,3835.96,3862.98,260160000,3862.98
+1994-03-11,3830.62,3872.83,3806.69,3862.70,303250000,3862.70
+1994-03-10,3853.41,3865.51,3801.63,3830.62,369370000,3830.62
+1994-03-09,3851.72,3874.52,3817.95,3853.41,309810000,3853.41
+1994-03-08,3856.22,3881.55,3822.45,3851.72,298110000,3851.72
+1994-03-07,3832.30,3882.40,3824.71,3856.22,285580000,3856.22
+1994-03-04,3824.42,3868.04,3800.50,3832.30,311850000,3832.30
+1994-03-03,3831.74,3862.13,3784.74,3824.42,291960000,3824.42
+1994-03-02,3809.23,3845.25,3741.69,3831.74,361130000,3831.74
+1994-03-01,3832.02,3848.34,3772.93,3809.23,304450000,3809.23
+1994-02-28,3838.78,3874.52,3817.95,3832.02,267610000,3832.02
+1994-02-25,3839.90,3868.89,3811.76,3838.78,273680000,3838.78
+1994-02-24,3891.68,3895.62,3823.86,3839.90,342940000,3839.90
+1994-02-23,3911.66,3931.36,3872.83,3891.68,309910000,3891.68
+1994-02-22,3887.46,3928.83,3873.39,3911.66,270900000,3911.66
+1994-02-18,3922.64,3931.92,3869.73,3887.46,293210000,3887.46
+1994-02-17,3937.27,3975.82,3894.21,3922.64,340030000,3922.64
+1994-02-16,3928.27,3964.85,3906.32,3937.27,295450000,3937.27
+1994-02-15,3904.06,3950.50,3891.40,3928.27,306790000,3928.27
+1994-02-14,3894.78,3935.86,3873.67,3904.06,263190000,3904.06
+1994-02-11,3895.34,3920.95,3855.94,3894.78,213740000,3894.78
+1994-02-10,3931.92,3953.59,3882.96,3895.34,327250000,3895.34
+1994-02-09,3906.03,3956.97,3887.74,3931.92,332670000,3931.92
+1994-02-08,3906.32,3951.34,3873.67,3906.03,318180000,3906.03
+1994-02-07,3871.42,3923.48,3840.75,3906.32,348270000,3906.32
+1994-02-04,3967.66,3979.76,3857.63,3871.42,378380000,3871.42
+1994-02-03,3975.54,3995.52,3932.77,3967.66,318350000,3967.66
+1994-02-02,3964.01,3997.78,3937.27,3975.54,328960000,3975.54
+1994-02-01,3978.36,3998.06,3938.12,3964.01,322510000,3964.01
+1994-01-31,3945.43,4002.84,3937.27,3978.36,322870000,3978.36
+1994-01-28,3926.30,3971.89,3919.54,3945.43,313140000,3945.43
+1994-01-27,3908.00,3951.34,3876.77,3926.30,346500000,3926.30
+1994-01-26,3895.34,3934.74,3863.82,3908.00,304660000,3908.00
+1994-01-25,3912.79,3937.55,3863.82,3895.34,326120000,3895.34
+1994-01-24,3914.48,3947.68,3882.11,3912.79,296900000,3912.79
+1994-01-21,3891.96,3933.33,3875.36,3914.48,346220000,3914.48
+1994-01-20,3884.37,3915.60,3857.91,3891.96,310450000,3891.96
+1994-01-19,3870.29,3909.97,3839.34,3884.37,311370000,3884.37
+1994-01-18,3870.29,3905.19,3840.75,3870.29,309730000,3870.29
+1994-01-17,3867.20,3896.75,3833.71,3870.29,233980000,3870.29
+1994-01-14,3842.43,3891.96,3830.62,3867.20,304910000,3867.20
+1994-01-13,3848.63,3864.67,3808.38,3842.43,277970000,3842.43
+1994-01-12,3850.31,3876.49,3809.79,3848.63,310690000,3848.63
+1994-01-11,3865.51,3885.21,3823.02,3850.31,305490000,3850.31
+1994-01-10,3820.77,3874.52,3804.72,3865.51,319490000,3865.51
+1994-01-07,3803.88,3842.15,3778.83,3820.77,324920000,3820.77
+1994-01-06,3798.82,3843.84,3771.52,3803.88,367880000,3803.88
+1994-01-05,3783.90,3821.33,3750.41,3798.82,400030000,3798.82
+1994-01-04,3756.60,3798.25,3718.89,3783.90,326600000,3783.90
+1994-01-03,3754.09,3790.70,3715.24,3756.60,270140000,3756.60
+1993-12-31,3775.88,3804.11,3745.15,3754.09,168590000,3754.09
+1993-12-30,3794.33,3806.34,3759.96,3775.88,195860000,3775.88
+1993-12-29,3793.77,3818.92,3764.43,3794.33,269570000,3794.33
+1993-12-28,3792.93,3813.33,3766.10,3793.77,200960000,3793.77
+1993-12-27,3757.72,3804.95,3750.46,3792.93,171200000,3792.93
+1993-12-23,3762.19,3791.81,3739.56,3757.72,227240000,3757.72
+1993-12-22,3745.15,3780.64,3725.86,3762.19,272440000,3762.19
+1993-12-21,3755.21,3774.77,3719.72,3745.15,273370000,3745.15
+1993-12-20,3751.57,3777.84,3728.66,3755.21,255900000,3755.21
+1993-12-17,3726.14,3768.90,3706.30,3751.57,363750000,3751.57
+1993-12-16,3716.92,3756.60,3694.29,3726.14,284620000,3726.14
+1993-12-15,3742.63,3776.44,3689.82,3716.92,331770000,3716.92
+1993-12-14,3764.43,3785.94,3726.70,3742.63,275050000,3742.63
+1993-12-13,3740.67,3780.64,3711.33,3764.43,256580000,3764.43
+1993-12-10,3729.78,3758.84,3704.91,3740.67,245620000,3740.67
+1993-12-09,3734.53,3764.43,3709.94,3729.78,287570000,3729.78
+1993-12-08,3718.88,3756.60,3693.73,3734.53,314460000,3734.53
+1993-12-07,3710.21,3746.82,3689.26,3718.88,285690000,3718.88
+1993-12-06,3704.07,3738.44,3687.30,3710.21,292370000,3710.21
+1993-12-03,3702.11,3726.98,3677.80,3704.07,268780000,3704.07
+1993-12-02,3697.08,3725.30,3674.17,3702.11,256370000,3702.11
+1993-12-01,3683.95,3731.73,3673.33,3697.08,293870000,3697.08
+1993-11-30,3677.80,3713.57,3654.88,3683.95,290250000,3683.95
+1993-11-29,3683.95,3721.67,3654.33,3677.80,272710000,3677.80
+1993-11-26,3687.58,3703.23,3660.75,3683.95,90220000,3683.95
+1993-11-24,3674.17,3709.94,3654.33,3687.58,230630000,3687.58
+1993-11-23,3670.25,3702.67,3649.57,3674.17,261590000,3674.17
+1993-11-22,3694.01,3697.92,3627.78,3670.25,280130000,3670.25
+1993-11-19,3685.34,3711.05,3640.07,3694.01,302970000,3694.01
+1993-11-18,3704.35,3721.95,3649.57,3685.34,313480000,3685.34
+1993-11-17,3710.77,3749.90,3660.19,3704.35,319560000,3704.35
+1993-11-16,3677.52,3723.91,3653.77,3710.77,303980000,3710.77
+1993-11-15,3684.51,3705.74,3653.49,3677.52,251030000,3677.52
+1993-11-12,3662.43,3707.42,3648.74,3684.51,326240000,3684.51
+1993-11-11,3663.55,3700.43,3638.40,3662.43,287110000,3662.43
+1993-11-10,3640.07,3683.39,3616.60,3663.55,283450000,3663.55
+1993-11-09,3647.90,3689.82,3623.03,3640.07,278290000,3640.07
+1993-11-08,3643.43,3674.17,3621.91,3647.90,232340000,3647.90
+1993-11-05,3624.98,3663.83,3585.86,3643.43,336900000,3643.43
+1993-11-04,3661.87,3681.99,3609.61,3624.98,323430000,3624.98
+1993-11-03,3697.64,3714.69,3638.40,3661.87,342110000,3661.87
+1993-11-02,3692.61,3724.75,3656.00,3697.64,304780000,3697.64
+1993-11-01,3680.59,3708.26,3656.84,3692.61,256030000,3692.61
+1993-10-29,3687.86,3712.45,3656.84,3680.59,270570000,3680.59
+1993-10-28,3664.66,3713.57,3657.96,3687.86,301220000,3687.86
+1993-10-27,3672.49,3692.33,3634.76,3664.66,279830000,3664.66
+1993-10-26,3673.61,3701.55,3636.16,3672.49,284530000,3672.49
+1993-10-25,3649.30,3694.01,3618.28,3673.61,260310000,3673.61
+1993-10-22,3636.16,3697.92,3612.13,3649.30,301440000,3649.30
+1993-10-21,3645.10,3678.36,3610.45,3636.16,288820000,3636.16
+1993-10-20,3635.32,3667.74,3611.85,3645.10,305670000,3645.10
+1993-10-19,3642.31,3669.97,3601.79,3635.32,304400000,3635.32
+1993-10-18,3629.73,3675.84,3595.92,3642.31,329570000,3642.31
+1993-10-15,3621.63,3664.66,3596.20,3629.73,366110000,3629.73
+1993-10-14,3603.19,3652.09,3574.40,3621.63,353820000,3621.63
+1993-10-13,3593.13,3628.34,3574.12,3603.19,290930000,3603.19
+1993-10-12,3593.41,3619.39,3575.24,3593.13,263970000,3593.13
+1993-10-11,3584.74,3611.01,3565.46,3593.41,183190000,3593.41
+1993-10-08,3583.63,3610.45,3550.37,3584.74,243590000,3584.74
+1993-10-07,3598.99,3616.32,3564.90,3583.63,255210000,3583.63
+1993-10-06,3587.26,3620.79,3570.21,3598.99,277070000,3598.99
+1993-10-05,3577.76,3616.88,3553.72,3587.26,294570000,3587.26
+1993-10-04,3581.11,3603.19,3550.65,3577.76,229380000,3577.76
+1993-10-01,3555.12,3605.14,3541.71,3581.11,256870000,3581.11
+1993-09-30,3566.30,3583.63,3528.57,3555.12,282740000,3555.12
+1993-09-29,3566.02,3596.48,3538.91,3566.30,277690000,3566.30
+1993-09-28,3567.70,3589.49,3542.27,3566.02,243320000,3566.02
+1993-09-27,3543.11,3589.49,3539.47,3567.70,244920000,3567.70
+1993-09-24,3539.75,3568.54,3507.90,3543.11,248270000,3543.11
+1993-09-23,3547.02,3567.70,3513.48,3539.75,276660000,3539.75
+1993-09-22,3537.24,3577.20,3516.56,3547.02,288960000,3547.02
+1993-09-21,3575.80,3592.57,3501.47,3537.24,301740000,3537.24
+1993-09-20,3613.25,3632.81,3567.98,3575.80,228040000,3575.80
+1993-09-17,3630.85,3637.28,3580.83,3613.25,369600000,3613.25
+1993-09-16,3633.65,3651.25,3601.79,3630.85,229700000,3630.85
+1993-09-15,3615.76,3644.82,3573.84,3633.65,294410000,3633.65
+1993-09-14,3634.21,3639.51,3590.61,3615.76,258620000,3615.76
+1993-09-13,3621.63,3655.16,3607.66,3634.21,244970000,3634.21
+1993-09-10,3589.49,3636.16,3576.64,3621.63,269950000,3621.63
+1993-09-09,3588.93,3616.04,3556.52,3589.49,258070000,3589.49
+1993-09-08,3607.10,3623.31,3561.27,3588.93,283100000,3588.93
+1993-09-07,3633.93,3649.02,3592.57,3607.10,229500000,3607.10
+1993-09-03,3626.10,3651.53,3603.75,3633.93,197160000,3633.93
+1993-09-02,3645.10,3660.19,3610.17,3626.10,259870000,3626.10
+1993-09-01,3651.25,3665.50,3619.67,3645.10,245040000,3645.10
+1993-08-31,3643.99,3662.99,3619.67,3651.25,252830000,3651.25
+1993-08-30,3640.63,3667.46,3621.63,3643.99,194180000,3643.99
+1993-08-27,3648.18,3656.28,3606.54,3640.63,196140000,3640.63
+1993-08-26,3652.09,3681.71,3620.23,3648.18,247800000,3648.18
+1993-08-25,3638.96,3674.17,3620.51,3652.09,301640000,3652.09
+1993-08-24,3605.98,3648.18,3590.89,3638.96,270700000,3638.96
+1993-08-23,3615.48,3630.57,3578.87,3605.98,212500000,3605.98
+1993-08-20,3612.13,3633.37,3580.55,3615.48,276800000,3615.48
+1993-08-19,3604.86,3632.25,3581.11,3612.13,293330000,3612.13
+1993-08-18,3586.98,3638.96,3577.48,3604.86,312940000,3604.86
+1993-08-17,3579.15,3611.29,3554.00,3586.98,261320000,3586.98
+1993-08-16,3569.65,3606.54,3547.86,3579.15,229190000,3579.15
+1993-08-13,3569.09,3594.52,3547.58,3569.65,214370000,3569.65
+1993-08-12,3583.35,3607.66,3537.24,3569.09,278530000,3569.09
+1993-08-11,3572.73,3607.94,3550.93,3583.35,268330000,3583.35
+1993-08-10,3576.08,3599.83,3547.02,3572.73,255520000,3572.73
+1993-08-09,3560.43,3599.83,3541.15,3576.08,232750000,3576.08
+1993-08-06,3548.97,3583.35,3536.12,3560.43,221150000,3560.43
+1993-08-05,3552.05,3574.12,3523.54,3548.97,249650000,3548.97
+1993-08-04,3561.27,3579.99,3530.25,3552.05,230040000,3552.05
+1993-08-03,3560.99,3588.10,3530.81,3561.27,254540000,3561.27
+1993-08-02,3539.47,3578.32,3524.94,3560.99,230380000,3560.99
+1993-07-30,3567.42,3581.11,3515.72,3539.47,254420000,3539.47
+1993-07-29,3553.45,3593.41,3531.37,3567.42,261240000,3567.42
+1993-07-28,3565.46,3588.38,3524.38,3553.45,270530000,3553.45
+1993-07-27,3567.70,3604.86,3533.60,3565.46,256750000,3565.46
+1993-07-26,3546.74,3584.74,3541.43,3567.70,223280000,3567.70
+1993-07-23,3525.22,3569.37,3508.17,3546.74,222170000,3546.74
+1993-07-22,3555.40,3566.86,3514.32,3525.22,249630000,3525.22
+1993-07-21,3544.78,3573.84,3516.84,3555.40,278590000,3555.40
+1993-07-20,3535.28,3567.98,3500.63,3544.78,275130000,3544.78
+1993-07-19,3528.29,3563.23,3502.87,3535.28,216370000,3535.28
+1993-07-16,3550.93,3571.61,3505.94,3528.29,263100000,3528.29
+1993-07-15,3542.55,3573.01,3509.85,3550.93,277810000,3550.93
+1993-07-14,3515.44,3562.39,3507.34,3542.55,285890000,3542.55
+1993-07-13,3524.38,3544.22,3491.13,3515.44,236720000,3515.44
+1993-07-12,3521.06,3545.97,3495.04,3524.38,202310000,3524.38
+1993-07-09,3514.42,3544.03,3490.89,3521.06,235210000,3521.06
+1993-07-08,3475.67,3532.41,3462.38,3514.42,282910000,3514.42
+1993-07-07,3449.93,3495.32,3443.28,3475.67,253170000,3475.67
+1993-07-06,3483.97,3502.52,3443.28,3449.93,233420000,3449.93
+1993-07-02,3510.54,3511.65,3468.47,3483.97,220750000,3483.97
+1993-07-01,3516.08,3542.10,3487.29,3510.54,292040000,3510.54
+1993-06-30,3518.85,3543.48,3493.11,3516.08,281120000,3516.08
+1993-06-29,3530.20,3544.87,3491.44,3518.85,276310000,3518.85
+1993-06-28,3490.89,3542.10,3486.74,3530.20,242090000,3530.20
+1993-06-25,3490.61,3512.76,3473.18,3490.89,210430000,3490.89
+1993-06-24,3466.81,3504.73,3449.10,3490.61,267450000,3490.61
+1993-06-23,3497.53,3514.14,3445.77,3466.81,278260000,3466.81
+1993-06-22,3510.82,3530.47,3474.28,3497.53,259530000,3497.53
+1993-06-21,3494.77,3531.86,3477.05,3510.82,223650000,3510.82
+1993-06-18,3521.89,3539.88,3478.44,3494.77,300500000,3494.77
+1993-06-17,3511.65,3539.61,3488.68,3521.89,239810000,3521.89
+1993-06-16,3492.00,3527.43,3460.17,3511.65,264500000,3511.65
+1993-06-15,3514.69,3531.86,3471.24,3492.00,234110000,3492.00
+1993-06-14,3505.01,3538.22,3486.74,3514.69,210440000,3514.69
+1993-06-11,3491.72,3536.01,3479.27,3505.01,255200000,3505.01
+1993-06-10,3511.93,3538.22,3461.83,3491.72,231760000,3491.72
+1993-06-09,3510.54,3541.54,3490.89,3511.93,249030000,3511.93
+1993-06-08,3532.13,3543.48,3494.21,3510.54,238170000,3510.54
+1993-06-07,3545.14,3570.33,3510.82,3532.13,236930000,3532.13
+1993-06-04,3544.87,3563.13,3516.63,3545.14,226440000,3545.14
+1993-06-03,3553.45,3569.50,3516.08,3544.87,285770000,3544.87
+1993-06-02,3552.34,3576.14,3530.47,3553.45,287120000,3553.45
+1993-06-01,3527.43,3577.25,3518.02,3552.34,229690000,3552.34
+1993-05-28,3554.83,3563.41,3503.62,3527.43,207820000,3527.43
+1993-05-27,3540.16,3582.23,3523.28,3554.83,300810000,3554.83
+1993-05-26,3516.63,3558.98,3498.64,3540.16,274230000,3540.16
+1993-05-25,3507.78,3534.35,3486.46,3516.63,222090000,3516.63
+1993-05-24,3492.83,3526.60,3472.35,3507.78,197990000,3507.78
+1993-05-21,3523.28,3532.96,3468.47,3492.83,279120000,3492.83
+1993-05-20,3500.03,3539.88,3475.39,3523.28,289160000,3523.28
+1993-05-19,3444.39,3511.10,3405.09,3500.03,342420000,3500.03
+1993-05-18,3449.93,3468.47,3409.79,3444.39,264300000,3444.39
+1993-05-17,3443.01,3465.98,3421.42,3449.93,227580000,3449.93
+1993-05-14,3447.99,3472.62,3421.14,3443.01,252910000,3443.01
+1993-05-13,3482.31,3486.74,3428.89,3447.99,289860000,3447.99
+1993-05-12,3468.75,3501.69,3441.07,3482.31,255680000,3482.31
+1993-05-11,3443.28,3481.76,3421.42,3468.75,218480000,3468.75
+1993-05-10,3437.19,3485.36,3420.31,3443.28,235580000,3443.28
+1993-05-07,3441.90,3468.47,3413.67,3437.19,223570000,3437.19
+1993-05-06,3449.10,3475.67,3418.93,3441.90,255460000,3441.90
+1993-05-05,3446.19,3478.44,3420.86,3449.10,270960000,3449.10
+1993-05-04,3446.46,3477.26,3424.04,3446.19,268310000,3446.19
+1993-05-03,3427.55,3462.94,3402.42,3446.46,220860000,3446.46
+1993-04-30,3425.12,3466.18,3405.39,3427.55,247460000,3427.55
+1993-04-29,3413.50,3444.57,3377.57,3425.12,249760000,3425.12
+1993-04-28,3415.93,3445.65,3372.16,3413.50,267980000,3413.50
+1993-04-27,3398.37,3433.76,3364.06,3415.93,284140000,3415.93
+1993-04-26,3413.77,3442.14,3369.46,3398.37,281180000,3398.37
+1993-04-23,3429.17,3448.08,3385.67,3413.77,259810000,3413.77
+1993-04-22,3439.44,3488.33,3399.99,3429.17,310390000,3429.17
+1993-04-21,3443.49,3480.77,3401.34,3439.44,287300000,3439.44
+1993-04-20,3466.99,3486.71,3400.26,3443.49,317990000,3443.49
+1993-04-19,3478.61,3499.41,3436.73,3466.99,244710000,3466.99
+1993-04-16,3455.92,3498.60,3437.54,3478.61,305160000,3478.61
+1993-04-15,3455.64,3484.28,3419.17,3455.92,259500000,3455.92
+1993-04-14,3444.03,3482.93,3424.85,3455.64,257340000,3455.64
+1993-04-13,3428.09,3469.42,3408.37,3444.03,286690000,3444.03
+1993-04-12,3396.48,3452.67,3391.08,3428.09,259610000,3428.09
+1993-04-08,3397.02,3429.44,3357.58,3396.48,282470000,3396.48
+1993-04-07,3377.57,3417.55,3355.41,3397.02,296290000,3397.02
+1993-04-06,3379.19,3417.55,3339.75,3377.57,289640000,3377.57
+1993-04-05,3370.81,3411.61,3338.39,3379.19,238630000,3379.19
+1993-04-02,3439.44,3439.44,3344.88,3370.81,323330000,3370.81
+1993-04-01,3435.11,3466.45,3419.98,3439.44,231950000,3439.44
+1993-03-31,3457.27,3484.82,3424.85,3435.11,275710000,3435.11
+1993-03-30,3455.10,3481.58,3422.14,3457.27,233330000,3457.27
+1993-03-29,3439.98,3487.52,3431.87,3455.10,199890000,3455.10
+1993-03-26,3461.32,3484.28,3428.63,3439.98,219130000,3439.98
+1993-03-25,3445.38,3485.36,3429.44,3461.32,250040000,3461.32
+1993-03-24,3461.86,3489.14,3417.55,3445.38,271980000,3445.38
+1993-03-23,3463.48,3488.60,3438.08,3461.86,231900000,3461.86
+1993-03-22,3471.58,3483.20,3429.71,3463.48,231900000,3463.48
+1993-03-19,3465.64,3493.20,3446.46,3471.58,295510000,3471.58
+1993-03-18,3427.01,3486.17,3427.01,3465.64,240490000,3465.64
+1993-03-17,3442.95,3458.35,3408.91,3426.74,237850000,3426.74
+1993-03-16,3442.41,3466.72,3423.77,3442.95,217730000,3442.95
+1993-03-15,3427.82,3460.51,3412.96,3442.41,192690000,3442.41
+1993-03-12,3447.81,3447.81,3385.40,3427.82,244740000,3427.82
+1993-03-11,3478.34,3493.74,3437.27,3457.00,250720000,3457.00
+1993-03-10,3472.12,3497.25,3432.68,3478.34,255190000,3478.34
+1993-03-09,3469.42,3495.63,3443.76,3472.12,290120000,3472.12
+1993-03-08,3404.58,3476.99,3401.34,3469.42,274560000,3469.42
+1993-03-05,3398.91,3447.81,3373.25,3404.58,247130000,3404.58
+1993-03-04,3404.04,3423.77,3372.43,3398.91,230780000,3398.91
+1993-03-03,3400.53,3437.00,3368.92,3404.04,272290000,3404.04
+1993-03-02,3355.41,3406.21,3334.07,3400.53,269640000,3400.53
+1993-03-01,3370.81,3404.58,3336.23,3355.41,232090000,3355.41
+1993-02-26,3365.14,3396.21,3336.23,3370.81,234160000,3370.81
+1993-02-25,3356.50,3387.02,3326.78,3365.14,252790000,3365.14
+1993-02-24,3323.27,3371.89,3311.92,3356.50,298940000,3356.50
+1993-02-23,3342.99,3373.52,3296.79,3323.27,321050000,3323.27
+1993-02-22,3322.18,3367.30,3297.06,3342.99,311510000,3342.99
+1993-02-19,3302.19,3347.04,3270.04,3322.18,307960000,3322.18
+1993-02-18,3312.19,3362.98,3262.48,3302.19,309570000,3302.19
+1993-02-17,3309.49,3338.12,3273.56,3312.19,287240000,3312.19
+1993-02-16,3391.62,3391.62,3285.98,3309.49,325350000,3309.49
+1993-02-12,3422.69,3436.19,3378.11,3392.43,215750000,3392.43
+1993-02-11,3412.42,3455.64,3395.94,3422.69,252780000,3422.69
+1993-02-10,3414.58,3438.08,3379.19,3412.42,248480000,3412.42
+1993-02-09,3437.54,3449.16,3394.86,3414.58,233670000,3414.58
+1993-02-08,3442.14,3472.94,3408.91,3437.54,240350000,3437.54
+1993-02-05,3416.74,3463.21,3391.62,3442.14,320960000,3442.14
+1993-02-04,3373.79,3441.33,3367.03,3416.74,346480000,3416.74
+1993-02-03,3328.67,3397.83,3322.73,3373.79,342530000,3373.79
+1993-02-02,3332.18,3355.68,3300.30,3328.67,269250000,3328.67
+1993-02-01,3310.03,3343.80,3300.30,3332.18,238260000,3332.18
+1993-01-29,3306.25,3331.10,3287.06,3310.03,247010000,3310.03
+1993-01-28,3291.39,3327.86,3270.58,3306.25,255550000,3306.25
+1993-01-27,3298.95,3318.67,3260.05,3291.39,276880000,3291.39
+1993-01-26,3292.20,3331.91,3272.47,3298.95,311450000,3298.95
+1993-01-25,3256.81,3324.89,3243.84,3292.20,288010000,3292.20
+1993-01-22,3253.02,3292.74,3225.74,3256.81,293250000,3256.81
+1993-01-21,3241.95,3269.77,3219.25,3253.02,257350000,3253.02
+1993-01-20,3255.99,3278.96,3231.41,3241.95,267740000,3241.95
+1993-01-19,3274.91,3299.49,3239.52,3255.99,283110000,3255.99
+1993-01-18,3271.12,3296.52,3244.65,3274.91,195980000,3274.91
+1993-01-15,3267.88,3300.03,3238.70,3271.12,306140000,3271.12
+1993-01-14,3263.56,3297.06,3230.87,3267.88,280020000,3267.88
+1993-01-13,3264.64,3283.01,3225.47,3263.56,245020000,3263.56
+1993-01-12,3262.75,3287.06,3229.79,3264.64,239250000,3264.64
+1993-01-11,3251.67,3284.09,3228.98,3262.75,217150000,3262.75
+1993-01-08,3268.96,3280.31,3221.68,3251.67,262620000,3251.67
+1993-01-07,3305.16,3333.51,3250.30,3268.96,303140000,3268.96
+1993-01-06,3307.87,3330.29,3276.53,3305.16,282850000,3305.16
+1993-01-05,3309.22,3338.12,3279.23,3307.87,240550000,3307.87
+1993-01-04,3301.11,3335.69,3282.74,3309.22,199680000,3309.22
+1992-12-31,3321.10,3340.29,3294.36,3301.11,165910000,3301.11
+1992-12-30,3310.84,3340.54,3298.93,3321.10,183870000,3321.10
+1992-12-29,3333.26,3364.87,3295.71,3310.84,213660000,3310.84
+1992-12-28,3326.24,3352.17,3297.33,3333.26,143800000,3333.26
+1992-12-24,3313.54,3339.48,3303.27,3326.24,95240000,3326.24
+1992-12-23,3321.10,3350.55,3293.01,3313.54,227980000,3313.54
+1992-12-22,3312.46,3347.04,3286.52,3321.10,249670000,3321.10
+1992-12-21,3313.27,3335.15,3280.85,3312.46,224680000,3312.46
+1992-12-18,3269.23,3325.97,3261.94,3313.27,371080000,3313.27
+1992-12-17,3255.18,3289.22,3229.79,3269.23,248590000,3269.23
+1992-12-16,3284.36,3303.00,3238.70,3255.18,241910000,3255.18
+1992-12-15,3292.20,3313.27,3260.32,3284.36,225880000,3284.36
+1992-12-14,3304.08,3324.89,3279.50,3292.20,183510000,3292.20
+1992-12-11,3312.19,3324.89,3280.85,3304.08,164450000,3304.08
+1992-12-10,3323.81,3335.69,3285.17,3312.19,240570000,3312.19
+1992-12-09,3322.18,3345.42,3295.98,3323.81,229980000,3323.81
+1992-12-08,3307.33,3331.64,3288.41,3322.18,234300000,3322.18
+1992-12-07,3288.68,3320.56,3274.37,3307.33,217700000,3307.33
+1992-12-04,3276.53,3312.46,3261.40,3288.68,227410000,3288.68
+1992-12-03,3286.25,3302.73,3252.48,3276.53,238200000,3276.53
+1992-12-02,3294.36,3310.84,3265.18,3286.25,241860000,3286.25
+1992-12-01,3305.16,3321.64,3268.15,3294.36,259020000,3294.36
+1992-11-30,3282.20,3326.51,3270.31,3305.16,230190000,3305.16
+1992-11-27,3266.26,3304.62,3259.24,3282.20,106010000,3282.20
+1992-11-25,3248.70,3285.71,3243.57,3266.26,206700000,3266.26
+1992-11-24,3223.04,3277.88,3209.26,3248.70,241520000,3248.70
+1992-11-23,3227.36,3251.13,3196.83,3223.04,190490000,3223.04
+1992-11-20,3209.53,3249.78,3197.64,3227.36,256340000,3227.36
+1992-11-19,3207.37,3231.14,3190.35,3209.53,218700000,3209.53
+1992-11-18,3193.32,3227.09,3176.84,3207.37,218660000,3207.37
+1992-11-17,3205.74,3223.31,3178.19,3193.32,185460000,3193.32
+1992-11-16,3233.03,3241.41,3191.16,3205.74,173500000,3205.74
+1992-11-13,3239.79,3252.48,3211.69,3233.03,192320000,3233.03
+1992-11-12,3240.33,3264.91,3214.39,3239.79,224580000,3239.79
+1992-11-11,3225.47,3258.70,3203.31,3240.33,240160000,3240.33
+1992-11-10,3240.87,3268.15,3212.50,3225.47,221990000,3225.47
+1992-11-09,3240.06,3268.69,3220.33,3240.87,197490000,3240.87
+1992-11-06,3243.84,3264.64,3216.82,3240.06,204870000,3240.06
+1992-11-05,3223.04,3259.78,3203.58,3243.84,219580000,3243.84
+1992-11-04,3252.48,3274.10,3211.15,3223.04,193980000,3223.04
+1992-11-03,3262.21,3285.44,3226.82,3252.48,209740000,3252.48
+1992-11-02,3226.28,3274.64,3211.42,3262.21,201620000,3262.21
+1992-10-30,3246.27,3260.59,3208.45,3226.28,196740000,3226.28
+1992-10-29,3251.40,3268.96,3224.39,3246.27,206300000,3246.27
+1992-10-28,3235.73,3262.48,3210.34,3251.40,203040000,3251.40
+1992-10-27,3244.11,3270.31,3210.88,3235.73,201650000,3235.73
+1992-10-26,3207.64,3256.00,3190.08,3244.11,187950000,3244.11
+1992-10-23,3200.88,3233.57,3175.76,3207.64,197400000,3207.64
+1992-10-22,3187.10,3221.14,3162.79,3200.88,216080000,3200.88
+1992-10-21,3186.02,3211.69,3163.33,3187.10,218990000,3187.10
+1992-10-20,3188.45,3223.31,3166.30,3186.02,258220000,3186.02
+1992-10-19,3174.41,3211.15,3154.14,3188.45,218670000,3188.45
+1992-10-16,3174.68,3203.85,3123.89,3174.41,234480000,3174.41
+1992-10-15,3195.48,3207.37,3147.66,3174.68,206990000,3174.68
+1992-10-14,3201.42,3225.74,3167.11,3195.48,175440000,3195.48
+1992-10-13,3174.41,3222.77,3159.28,3201.42,184120000,3201.42
+1992-10-12,3140.10,3186.29,3140.10,3174.41,126590000,3174.41
+1992-10-09,3176.03,3176.57,3120.37,3136.58,178910000,3136.58
+1992-10-08,3152.25,3195.48,3135.77,3176.03,203780000,3176.03
+1992-10-07,3178.19,3200.88,3136.85,3152.25,183100000,3152.25
+1992-10-06,3179.00,3205.20,3147.93,3178.19,196660000,3178.19
+1992-10-05,3197.10,3197.10,3087.41,3179.00,284380000,3179.00
+1992-10-02,3254.37,3259.51,3193.59,3200.61,187400000,3200.61
+1992-10-01,3271.66,3291.39,3237.35,3254.37,203670000,3254.37
+1992-09-30,3266.80,3291.66,3247.89,3271.66,184220000,3271.66
+1992-09-29,3276.26,3295.98,3247.08,3266.80,170350000,3266.80
+1992-09-28,3250.32,3283.01,3226.55,3276.26,157480000,3276.26
+1992-09-25,3287.87,3292.20,3226.82,3250.32,213650000,3250.32
+1992-09-24,3278.69,3310.84,3267.07,3287.87,187770000,3287.87
+1992-09-23,3280.85,3302.19,3252.48,3278.69,204350000,3278.69
+1992-09-22,3320.83,3327.05,3270.58,3280.85,186990000,3280.85
+1992-09-21,3327.05,3341.91,3295.71,3320.83,153900000,3320.83
+1992-09-18,3315.70,3340.56,3297.87,3327.05,236080000,3327.05
+1992-09-17,3319.21,3347.04,3292.20,3315.70,188270000,3315.70
+1992-09-16,3327.32,3353.52,3288.95,3319.21,229380000,3319.21
+1992-09-15,3372.98,3372.98,3317.86,3327.32,200220000,3327.32
+1992-09-14,3326.51,3391.35,3326.51,3376.22,250900000,3376.22
+1992-09-11,3305.16,3327.32,3285.44,3305.70,180640000,3305.70
+1992-09-10,3271.39,3318.94,3261.67,3305.16,221970000,3305.16
+1992-09-09,3260.59,3284.09,3244.92,3271.39,172890000,3271.39
+1992-09-08,3281.93,3292.20,3245.73,3260.59,160930000,3260.59
+1992-09-04,3292.20,3306.23,3265.16,3281.93,124340000,3281.93
+1992-09-03,3290.31,3325.95,3268.94,3292.20,212540000,3292.20
+1992-09-02,3266.26,3301.90,3249.76,3290.31,187010000,3290.31
+1992-09-01,3257.35,3279.21,3239.77,3266.26,172650000,3266.26
+1992-08-31,3267.61,3287.04,3244.90,3257.35,160230000,3257.35
+1992-08-28,3254.64,3280.56,3237.88,3267.61,152230000,3267.61
+1992-08-27,3246.81,3285.69,3237.06,3254.64,178490000,3254.64
+1992-08-26,3232.22,3261.38,3217.07,3246.81,171840000,3246.81
+1992-08-25,3228.17,3253.00,3200.86,3232.22,201630000,3232.22
+1992-08-24,3254.09,3258.41,3207.08,3228.17,165130000,3228.17
+1992-08-21,3304.89,3330.27,3243.55,3254.09,202640000,3254.09
+1992-08-20,3307.06,3326.22,3285.69,3304.89,183390000,3304.89
+1992-08-19,3329.48,3347.56,3302.44,3307.06,186710000,3307.06
+1992-08-18,3324.89,3343.80,3309.22,3329.48,169880000,3329.48
+1992-08-17,3328.94,3350.28,3310.03,3324.89,152750000,3324.89
+1992-08-14,3313.27,3342.16,3300.82,3328.94,166180000,3328.94
+1992-08-13,3320.83,3347.29,3294.07,3313.27,185700000,3313.27
+1992-08-12,3331.10,3349.72,3304.88,3320.83,176440000,3320.83
+1992-08-11,3337.58,3356.48,3304.34,3331.10,173810000,3331.10
+1992-08-10,3332.18,3350.26,3305.14,3337.58,142440000,3337.58
+1992-08-07,3340.56,3378.38,3318.40,3332.18,188340000,3332.18
+1992-08-06,3365.14,3374.33,3327.05,3340.56,181390000,3340.56
+1992-08-05,3384.32,3391.35,3347.58,3365.14,172410000,3365.14
+1992-08-04,3395.40,3405.12,3367.03,3384.32,166740000,3384.32
+1992-08-03,3393.78,3413.23,3365.14,3395.40,164360000,3395.40
+1992-07-31,3391.89,3414.85,3371.89,3393.78,172920000,3393.78
+1992-07-30,3379.19,3409.16,3351.07,3391.89,193280000,3391.89
+1992-07-29,3345.13,3399.70,3345.13,3379.19,275760000,3379.19
+1992-07-28,3282.20,3345.67,3277.59,3334.07,217950000,3334.07
+1992-07-27,3285.71,3311.38,3265.99,3282.20,164680000,3282.20
+1992-07-24,3290.04,3305.68,3261.94,3285.71,163870000,3285.71
+1992-07-23,3277.61,3308.39,3255.43,3290.04,175460000,3290.04
+1992-07-22,3308.41,3310.28,3262.19,3277.61,190130000,3277.61
+1992-07-21,3303.00,3335.94,3292.45,3308.41,173800000,3308.41
+1992-07-20,3318.38,3318.38,3271.11,3303.00,165730000,3303.00
+1992-07-17,3359.74,3359.74,3308.14,3331.64,187520000,3331.64
+1992-07-16,3345.42,3375.66,3318.65,3361.63,206040000,3361.63
+1992-07-15,3358.39,3381.87,3319.73,3345.42,206550000,3345.42
+1992-07-14,3337.31,3371.88,3315.95,3358.39,195310000,3358.39
+1992-07-13,3330.56,3357.55,3315.41,3337.31,148820000,3337.31
+1992-07-10,3324.08,3355.93,3304.88,3330.56,164750000,3330.56
+1992-07-09,3293.28,3345.40,3292.45,3324.08,207970000,3324.08
+1992-07-08,3295.17,3322.98,3258.70,3293.28,200020000,3293.28
+1992-07-07,3339.21,3360.80,3285.69,3295.17,218740000,3295.17
+1992-07-06,3330.29,3367.57,3295.96,3339.21,186410000,3339.21
+1992-07-02,3354.10,3385.43,3303.30,3330.29,220130000,3330.29
+1992-07-01,3318.52,3366.43,3305.45,3354.10,214240000,3354.10
+1992-06-30,3319.86,3347.71,3295.01,3318.52,195520000,3318.52
+1992-06-29,3282.41,3330.32,3278.16,3319.86,176710000,3319.86
+1992-06-26,3284.01,3303.04,3254.89,3282.41,154430000,3282.41
+1992-06-25,3290.70,3319.62,3261.31,3284.01,182310000,3284.01
+1992-06-24,3285.62,3317.75,3262.11,3290.70,193850000,3290.70
+1992-06-23,3280.80,3312.13,3263.45,3285.62,189170000,3285.62
+1992-06-22,3285.35,3298.22,3242.32,3280.80,169340000,3280.80
+1992-06-19,3274.12,3313.20,3264.79,3285.35,233440000,3285.35
+1992-06-18,3287.76,3313.74,3245.53,3274.12,215080000,3274.12
+1992-06-17,3329.49,3347.98,3271.21,3287.76,227650000,3287.76
+1992-06-16,3354.90,3379.01,3321.76,3329.49,178850000,3329.49
+1992-06-15,3354.36,3371.79,3327.11,3354.90,159100000,3354.90
+1992-06-12,3351.51,3397.68,3339.62,3354.36,181830000,3354.36
+1992-06-11,3343.22,3374.61,3301.51,3351.51,192940000,3351.51
+1992-06-10,3369.92,3385.76,3328.99,3343.22,206380000,3343.22
+1992-06-09,3404.14,3412.98,3350.25,3369.92,190780000,3369.92
+1992-06-08,3398.69,3422.83,3370.21,3404.14,161130000,3404.14
+1992-06-05,3399.73,3424.64,3356.98,3398.69,199050000,3398.69
+1992-06-04,3406.99,3428.02,3376.43,3399.73,204360000,3399.73
+1992-06-03,3396.10,3431.13,3378.76,3406.99,215730000,3406.99
+1992-06-02,3413.21,3435.27,3380.84,3396.10,200660000,3396.10
+1992-06-01,3396.88,3424.39,3365.02,3413.21,180780000,3413.21
+1992-05-29,3398.43,3433.98,3384.20,3396.88,202730000,3396.88
+1992-05-28,3370.44,3408.31,3354.91,3398.43,195230000,3398.43
+1992-05-27,3364.21,3396.65,3337.29,3370.44,179980000,3370.44
+1992-05-26,3386.77,3410.91,3338.84,3364.21,196950000,3364.21
+1992-05-22,3378.71,3408.49,3364.08,3386.77,146640000,3386.77
+1992-05-21,3393.84,3402.88,3354.80,3378.71,182190000,3378.71
+1992-05-20,3397.99,3421.42,3376.04,3393.84,198170000,3393.84
+1992-05-19,3376.03,3413.37,3350.41,3397.99,187030000,3397.99
+1992-05-18,3353.09,3398.24,3349.93,3376.03,149830000,3376.03
+1992-05-15,3368.88,3380.30,3330.43,3353.09,192040000,3353.09
+1992-05-14,3391.98,3397.46,3347.59,3368.88,187700000,3368.88
+1992-05-13,3385.12,3414.17,3362.93,3391.98,171610000,3391.98
+1992-05-12,3397.58,3414.81,3361.51,3385.12,192810000,3385.12
+1992-05-11,3369.41,3410.11,3363.82,3397.58,155730000,3397.58
+1992-05-08,3363.37,3388.41,3344.59,3369.41,168670000,3369.41
+1992-05-07,3369.41,3390.65,3343.25,3363.37,168910000,3363.37
+1992-05-06,3359.35,3398.70,3346.60,3369.41,199070000,3369.41
+1992-05-05,3378.13,3393.78,3346.15,3359.35,198860000,3359.35
+1992-05-04,3340.79,3394.68,3340.79,3378.13,174520000,3378.13
+1992-05-01,3359.12,3375.67,3316.64,3336.09,177360000,3336.09
+1992-04-30,3333.18,3377.01,3314.40,3359.12,223160000,3359.12
+1992-04-29,3307.92,3353.75,3295.39,3333.18,199740000,3333.18
+1992-04-28,3304.56,3329.83,3273.03,3307.92,186740000,3307.92
+1992-04-27,3324.46,3340.79,3284.66,3304.56,172820000,3304.56
+1992-04-24,3348.61,3381.48,3305.23,3324.46,198740000,3324.46
+1992-04-23,3338.77,3376.34,3298.52,3348.61,235740000,3348.61
+1992-04-22,3343.25,3366.72,3309.48,3338.77,218790000,3338.77
+1992-04-21,3336.31,3366.50,3305.68,3343.25,214400000,3343.25
+1992-04-20,3366.50,3375.67,3300.98,3336.31,191910000,3336.31
+1992-04-16,3353.76,3387.97,3321.33,3366.50,232480000,3366.50
+1992-04-15,3306.13,3370.08,3296.51,3353.76,228400000,3353.76
+1992-04-14,3269.90,3336.54,3259.39,3306.13,232040000,3306.13
+1992-04-13,3255.37,3293.60,3230.77,3269.90,143100000,3269.90
+1992-04-10,3227.64,3280.86,3227.64,3255.37,199450000,3255.37
+1992-04-09,3181.35,3245.08,3171.06,3224.96,231330000,3224.96
+1992-04-08,3213.55,3221.38,3141.77,3181.35,249210000,3181.35
+1992-04-07,3275.49,3291.81,3207.51,3213.55,205110000,3213.55
+1992-04-06,3249.11,3295.84,3238.37,3275.49,179330000,3275.49
+1992-04-03,3234.12,3271.91,3201.92,3249.11,188530000,3249.11
+1992-04-02,3249.33,3277.06,3209.08,3234.12,185110000,3234.12
+1992-04-01,3235.47,3262.52,3202.37,3249.33,186260000,3249.33
+1992-03-31,3235.24,3272.81,3216.46,3235.47,182200000,3235.47
+1992-03-30,3231.44,3260.06,3215.79,3235.24,133980000,3235.24
+1992-03-27,3267.67,3272.58,3218.92,3231.44,166140000,3231.44
+1992-03-26,3259.39,3288.91,3245.08,3267.67,176690000,3267.67
+1992-03-25,3260.96,3290.47,3238.15,3259.39,192080000,3259.39
+1992-03-24,3272.14,3296.96,3242.84,3260.96,191580000,3260.96
+1992-03-23,3276.39,3288.68,3249.33,3272.14,156620000,3272.14
+1992-03-20,3261.40,3292.48,3240.83,3276.39,246170000,3276.39
+1992-03-19,3254.25,3286.22,3240.38,3261.40,197240000,3261.40
+1992-03-18,3256.04,3281.98,3230.10,3254.25,190800000,3254.25
+1992-03-17,3236.36,3272.58,3222.27,3256.04,187240000,3256.04
+1992-03-16,3235.91,3249.11,3201.25,3236.36,151280000,3236.36
+1992-03-13,3208.63,3252.23,3203.71,3235.91,176000000,3235.91
+1992-03-12,3208.63,3232.33,3176.21,3208.63,180240000,3208.63
+1992-03-11,3230.99,3242.17,3189.85,3208.63,185320000,3208.63
+1992-03-10,3215.12,3259.17,3207.29,3230.99,194530000,3230.99
+1992-03-09,3221.60,3242.62,3188.95,3215.12,160620000,3215.12
+1992-03-06,3241.50,3262.97,3204.61,3221.60,185040000,3221.60
+1992-03-05,3268.56,3283.54,3226.74,3241.50,205730000,3241.50
+1992-03-04,3290.25,3318.42,3256.04,3268.56,206770000,3268.56
+1992-03-03,3275.27,3313.28,3258.50,3290.25,200860000,3290.25
+1992-03-02,3267.67,3298.97,3242.39,3275.27,180380000,3275.27
+1992-02-28,3269.45,3304.11,3247.09,3267.67,202130000,3267.67
+1992-02-27,3283.32,3300.54,3251.79,3269.45,215050000,3269.45
+1992-02-26,3257.83,3305.01,3246.20,3283.32,240690000,3283.32
+1992-02-25,3282.42,3293.60,3226.74,3257.83,208400000,3257.83
+1992-02-24,3280.19,3305.01,3253.58,3282.42,177470000,3282.42
+1992-02-21,3280.64,3307.47,3242.17,3280.19,258700000,3280.19
+1992-02-20,3230.32,3304.34,3224.28,3280.64,270550000,3280.64
+1992-02-19,3224.73,3259.17,3199.02,3230.32,232900000,3230.32
+1992-02-18,3245.97,3280.19,3195.66,3224.73,234270000,3224.73
+1992-02-14,3246.65,3271.91,3208.63,3245.97,214840000,3245.97
+1992-02-13,3276.83,3296.73,3226.07,3246.65,229360000,3246.65
+1992-02-12,3251.57,3291.37,3233.68,3276.83,230230000,3276.83
+1992-02-11,3245.08,3277.28,3222.49,3251.57,200110000,3251.57
+1992-02-10,3225.40,3269.00,3208.85,3245.08,184390000,3245.08
+1992-02-07,3255.59,3283.09,3199.91,3225.40,230950000,3225.40
+1992-02-06,3257.60,3285.55,3224.95,3255.59,238210000,3255.59
+1992-02-05,3272.81,3299.87,3233.68,3257.60,261960000,3257.60
+1992-02-04,3234.12,3283.09,3208.63,3272.81,231530000,3272.81
+1992-02-03,3223.39,3261.40,3193.42,3234.12,182150000,3234.12
+1992-01-31,3244.86,3274.37,3207.96,3223.39,197060000,3223.39
+1992-01-30,3224.96,3269.68,3200.58,3244.86,194670000,3244.86
+1992-01-29,3272.14,3313.51,3204.16,3224.96,248900000,3224.96
+1992-01-28,3240.61,3298.30,3230.99,3272.14,217070000,3272.14
+1992-01-27,3232.78,3267.44,3216.23,3240.61,190430000,3240.61
+1992-01-24,3226.74,3264.31,3203.71,3232.78,213600000,3232.78
+1992-01-23,3255.81,3279.52,3205.95,3226.74,229680000,3226.74
+1992-01-22,3223.39,3272.80,3190.96,3255.81,225030000,3255.81
+1992-01-21,3254.03,3275.49,3194.09,3223.39,218650000,3223.39
+1992-01-20,3264.98,3283.32,3230.99,3254.03,180870000,3254.03
+1992-01-17,3249.55,3297.63,3224.28,3264.98,284560000,3264.98
+1992-01-16,3258.50,3289.13,3200.80,3249.55,333750000,3249.55
+1992-01-15,3246.20,3299.19,3207.73,3258.50,312400000,3258.50
+1992-01-14,3185.60,3255.81,3167.93,3246.20,264540000,3246.20
+1992-01-13,3199.46,3215.56,3161.67,3185.60,200270000,3185.60
+1992-01-10,3209.53,3235.91,3165.92,3199.46,236060000,3199.46
+1992-01-09,3203.94,3246.64,3173.75,3209.53,291780000,3209.53
+1992-01-08,3204.83,3245.53,3164.58,3203.94,289690000,3203.94
+1992-01-07,3200.13,3224.73,3165.25,3204.83,251280000,3204.83
+1992-01-06,3201.48,3230.32,3166.37,3200.13,241980000,3200.13
+1992-01-03,3172.41,3221.38,3156.30,3201.48,219170000,3201.48
+1992-01-02,3168.83,3184.70,3119.86,3172.41,203610000,3172.41
+1991-12-31,3163.91,3204.61,3121.20,3168.83,247670000,3168.83
+1991-12-30,3101.52,3174.64,3090.79,3163.91,245450000,3163.91
+1991-12-27,3082.96,3121.65,3063.73,3101.52,157940000,3101.52
+1991-12-26,3050.98,3101.97,3036.23,3082.96,149200000,3082.96
+1991-12-24,3022.58,3087.88,3015.65,3050.98,162300000,3050.98
+1991-12-23,2934.48,3037.57,2919.05,3022.58,228730000,3022.58
+1991-12-20,2914.36,2965.79,2907.65,2934.48,313810000,2934.48
+1991-12-19,2908.09,2927.10,2881.48,2914.36,199830000,2914.36
+1991-12-18,2902.28,2921.29,2870.30,2908.09,192350000,2908.09
+1991-12-17,2919.05,2936.27,2886.40,2902.28,191280000,2902.28
+1991-12-16,2914.36,2946.33,2900.49,2919.05,173010000,2919.05
+1991-12-13,2895.13,2936.72,2893.34,2914.36,195790000,2914.36
+1991-12-12,2865.38,2911.67,2861.14,2895.13,192930000,2895.13
+1991-12-11,2863.82,2889.53,2832.29,2865.38,207410000,2865.38
+1991-12-10,2871.65,2891.10,2841.23,2863.82,191800000,2863.82
+1991-12-09,2886.40,2913.46,2856.22,2871.65,174700000,2871.65
+1991-12-06,2889.09,2924.87,2854.65,2886.40,198170000,2886.40
+1991-12-05,2911.67,2923.75,2874.77,2889.09,165660000,2889.09
+1991-12-04,2929.56,2945.66,2892.22,2911.67,186380000,2911.67
+1991-12-03,2935.38,2958.18,2904.74,2929.56,187160000,2929.56
+1991-12-02,2894.68,2941.64,2855.32,2935.38,188050000,2935.38
+1991-11-29,2900.04,2913.46,2877.46,2894.68,77420000,2894.68
+1991-11-27,2916.14,2929.11,2883.72,2900.04,159790000,2900.04
+1991-11-26,2902.06,2942.31,2861.14,2916.14,213650000,2916.14
+1991-11-25,2902.73,2921.96,2870.30,2902.06,173520000,2902.06
+1991-11-22,2932.69,2940.30,2880.81,2902.73,188110000,2902.73
+1991-11-21,2930.01,2953.94,2902.28,2932.69,195060000,2932.69
+1991-11-20,2931.57,2973.61,2912.12,2930.01,192670000,2930.01
+1991-11-19,2960.20,2960.20,2883.72,2931.57,243880000,2931.57
+1991-11-18,2943.20,2990.61,2923.30,2972.72,238170000,2972.72
+1991-11-15,3063.51,3069.54,2936.05,2943.20,236000000,2943.20
+1991-11-14,3065.30,3084.97,3037.34,3063.51,200030000,3063.51
+1991-11-13,3054.11,3075.58,3023.70,3065.30,184080000,3065.30
+1991-11-12,3042.26,3078.71,3028.62,3054.11,198600000,3054.11
+1991-11-11,3045.62,3057.69,3025.27,3042.26,128910000,3042.26
+1991-11-08,3054.11,3080.95,3034.66,3045.62,183260000,3045.62
+1991-11-07,3038.46,3066.19,3020.35,3054.11,205440000,3054.11
+1991-11-06,3031.31,3056.57,3010.51,3038.46,167370000,3038.46
+1991-11-05,3045.62,3062.84,3015.88,3031.31,171950000,3031.31
+1991-11-04,3056.35,3061.27,3019.01,3045.62,155530000,3045.62
+1991-11-01,3069.10,3091.91,3031.75,3056.35,205750000,3056.35
+1991-10-31,3071.78,3091.01,3045.62,3069.10,179490000,3069.10
+1991-10-30,3061.94,3090.12,3038.24,3071.78,195340000,3071.78
+1991-10-29,3045.62,3077.82,3020.13,3061.94,192700000,3061.94
+1991-10-28,3004.92,3055.23,3001.57,3045.62,160220000,3045.62
+1991-10-25,3016.32,3034.44,2983.01,3004.92,167260000,3004.92
+1991-10-24,3040.92,3047.63,2991.73,3016.32,178990000,3016.32
+1991-10-23,3039.80,3065.52,3015.21,3040.92,185340000,3040.92
+1991-10-22,3060.38,3084.53,3020.57,3039.80,194120000,3039.80
+1991-10-21,3077.15,3085.20,3042.49,3060.38,153770000,3060.38
+1991-10-18,3053.00,3089.45,3045.62,3077.15,204030000,3077.15
+1991-10-17,3061.72,3077.15,3027.06,3053.00,202780000,3053.00
+1991-10-16,3041.37,3082.29,3016.10,3061.72,225290000,3061.72
+1991-10-15,3019.45,3057.69,3000.22,3041.37,213440000,3041.37
+1991-10-14,2983.68,3026.39,2975.85,3019.45,130110000,3019.45
+1991-10-11,2976.52,3000.89,2957.51,2983.68,146560000,2983.68
+1991-10-10,2946.33,2985.47,2930.23,2976.52,164120000,2976.52
+1991-10-09,2963.77,2984.79,2925.54,2946.33,186590000,2946.33
+1991-10-08,2942.75,2983.68,2927.77,2963.77,170000000,2963.77
+1991-10-07,2961.76,2973.17,2926.21,2942.75,148430000,2942.75
+1991-10-04,2984.79,3007.16,2956.17,2961.76,163930000,2961.76
+1991-10-03,3012.52,3021.24,2972.50,2984.79,174230000,2984.79
+1991-10-02,3018.34,3040.25,2992.40,3012.52,166290000,3012.52
+1991-10-01,3016.77,3043.60,3002.46,3018.34,163520000,3018.34
+1991-09-30,3006.04,3032.87,2982.78,3016.77,146740000,3016.77
+1991-09-27,3017.22,3040.70,2989.49,3006.04,160430000,3006.04
+1991-09-26,3021.02,3040.70,2996.87,3017.22,160190000,3017.22
+1991-09-25,3029.07,3048.52,3004.92,3021.02,153800000,3021.02
+1991-09-24,3010.51,3043.38,2995.97,3029.07,170300000,3029.07
+1991-09-23,3019.23,3037.79,2997.76,3010.51,145530000,3010.51
+1991-09-20,3024.37,3045.39,3002.46,3019.23,241340000,3019.23
+1991-09-19,3017.89,3050.76,3002.91,3024.37,210770000,3024.37
+1991-09-18,3013.19,3025.49,2993.52,3017.89,141280000,3017.89
+1991-09-17,3015.21,3036.00,2992.62,3013.19,168310000,3013.19
+1991-09-16,2985.69,3023.03,2973.61,3015.21,171960000,3015.21
+1991-09-13,3007.83,3021.47,2963.10,2985.69,167800000,2985.69
+1991-09-12,2987.03,3023.26,2977.64,3007.83,160310000,3007.83
+1991-09-11,2982.56,3004.70,2964.67,2987.03,147910000,2987.03
+1991-09-10,3007.16,3012.97,2967.80,2982.56,146730000,2982.56
+1991-09-09,3011.63,3025.49,2987.70,3007.16,109250000,3007.16
+1991-09-06,3008.50,3033.32,2987.48,3011.63,166410000,3011.63
+1991-09-05,3008.50,3031.98,2989.71,3008.50,162250000,3008.50
+1991-09-04,3017.67,3034.66,2990.83,3008.50,156770000,3008.50
+1991-09-03,3043.60,3066.64,3013.64,3017.67,153550000,3017.67
+1991-08-30,3049.64,3059.26,3024.82,3043.60,125830000,3043.60
+1991-08-29,3055.23,3068.65,3030.86,3049.64,150180000,3049.64
+1991-08-28,3026.16,3064.85,3018.11,3055.23,169590000,3055.23
+1991-08-27,3039.36,3047.41,3007.83,3026.16,143920000,3026.16
+1991-08-26,3040.25,3057.02,3020.80,3039.36,128400000,3039.36
+1991-08-23,3007.38,3065.97,2999.11,3040.25,187010000,3040.25
+1991-08-22,3001.79,3029.96,2989.94,3007.38,172900000,3007.38
+1991-08-21,2941.64,3009.17,2941.64,3001.79,231720000,3001.79
+1991-08-20,2898.03,2937.39,2886.85,2913.69,184090000,2913.69
+1991-08-19,2924.42,2924.42,2836.31,2898.03,229590000,2898.03
+1991-08-16,2998.43,3013.64,2945.89,2968.02,188360000,2968.02
+1991-08-15,3005.37,3029.96,2985.24,2998.43,174310000,2998.43
+1991-08-14,3008.72,3036.67,2988.60,3005.37,195890000,3005.37
+1991-08-13,3001.34,3041.14,2989.27,3008.72,211890000,3008.72
+1991-08-12,2996.20,3013.42,2974.06,3001.34,145280000,3001.34
+1991-08-09,3013.86,3036.45,2986.81,2996.20,143610000,2996.20
+1991-08-08,3026.61,3045.17,2995.30,3013.86,163620000,3013.86
+1991-08-07,3027.28,3050.54,3008.50,3026.61,170820000,3026.61
+1991-08-06,2989.04,3034.88,2970.48,3027.28,174340000,3027.28
+1991-08-05,3006.26,3019.68,2978.76,2989.04,125790000,2989.04
+1991-08-02,3017.67,3042.26,2994.41,3006.26,162050000,3006.26
+1991-08-01,3024.82,3037.12,2997.76,3017.67,169920000,3017.67
+1991-07-31,3016.32,3039.58,2999.11,3024.82,166650000,3024.82
+1991-07-30,2985.24,3029.07,2983.68,3016.32,168950000,3016.32
+1991-07-29,2972.50,2996.20,2957.07,2985.24,135240000,2985.24
+1991-07-26,2980.10,2994.86,2953.26,2972.50,127690000,2972.50
+1991-07-25,2966.23,2999.11,2947.23,2980.10,145510000,2980.10
+1991-07-24,2983.23,3003.13,2950.80,2966.23,158530000,2966.23
+1991-07-23,3012.97,3038.24,2972.94,2983.23,160010000,2983.23
+1991-07-22,3016.32,3034.44,2990.83,3012.97,148880000,3012.97
+1991-07-19,3016.32,3036.23,2989.49,3016.32,187290000,3016.32
+1991-07-18,2978.76,3026.61,2970.93,3016.32,199470000,3016.32
+1991-07-17,2983.90,3011.18,2961.54,2978.76,194150000,2978.76
+1991-07-16,2990.61,3012.52,2962.88,2983.90,182740000,2983.90
+1991-07-15,2980.77,3007.38,2965.79,2990.61,159340000,2990.61
+1991-07-12,2959.75,3003.35,2942.98,2980.77,173060000,2980.77
+1991-07-11,2944.77,2975.63,2933.36,2959.75,157680000,2959.75
+1991-07-10,2947.23,2990.83,2927.77,2944.77,178170000,2944.77
+1991-07-09,2961.99,2980.10,2934.03,2947.23,151430000,2947.23
+1991-07-08,2932.47,2966.23,2897.36,2961.99,138210000,2961.99
+1991-07-05,2934.70,2953.26,2917.71,2932.47,69790000,2932.47
+1991-07-03,2957.07,2957.07,2915.03,2934.70,139290000,2934.70
+1991-07-02,2958.41,2987.03,2939.62,2972.72,157140000,2972.72
+1991-07-01,2911.67,2971.15,2911.67,2958.41,166880000,2958.41
+1991-06-28,2934.03,2934.03,2879.25,2906.75,162670000,2906.75
+1991-06-27,2913.01,2946.56,2909.21,2934.93,155820000,2934.93
+1991-06-26,2910.11,2934.03,2879.25,2913.01,186830000,2913.01
+1991-06-25,2913.01,2938.51,2887.97,2910.11,155450000,2910.11
+1991-06-24,2957.29,2957.29,2904.29,2913.01,137700000,2913.01
+1991-06-21,2953.94,2977.64,2937.84,2965.56,193110000,2965.56
+1991-06-20,2955.50,2969.81,2927.33,2953.94,163780000,2953.94
+1991-06-19,2978.31,2978.31,2933.59,2955.50,156070000,2955.50
+1991-06-18,2993.96,3022.14,2970.48,2986.81,154900000,2986.81
+1991-06-17,3000.45,3021.69,2977.86,2993.96,133910000,2993.96
+1991-06-14,2967.58,3014.98,2967.58,3000.45,167530000,3000.45
+1991-06-13,2961.99,2982.11,2942.53,2965.12,144870000,2965.12
+1991-06-12,2985.91,2987.25,2928.89,2961.99,165720000,2961.99
+1991-06-11,2975.40,3012.08,2963.10,2985.91,161240000,2985.91
+1991-06-10,2976.74,2992.84,2958.41,2975.40,127420000,2975.40
+1991-06-07,2994.86,3005.14,2954.61,2976.74,167830000,2976.74
+1991-06-06,3005.37,3027.06,2975.63,2994.86,168050000,2994.86
+1991-06-05,3027.95,3042.93,2989.49,3005.37,186300000,3005.37
+1991-06-04,3035.33,3042.04,2992.62,3027.95,180170000,3027.95
+1991-06-03,3027.50,3057.47,3000.67,3035.33,173710000,3035.33
+1991-05-31,3000.45,3044.50,2972.94,3027.50,231680000,3027.50
+1991-05-30,2969.59,3022.81,2950.58,3000.45,234090000,3000.45
+1991-05-29,2958.86,2987.92,2940.74,2969.59,188150000,2969.59
+1991-05-28,2913.91,2965.12,2903.85,2958.86,161950000,2958.86
+1991-05-24,2900.04,2931.13,2893.78,2913.91,124500000,2913.91
+1991-05-23,2910.33,2935.38,2881.04,2900.04,173080000,2900.04
+1991-05-22,2906.08,2930.01,2881.93,2910.33,159310000,2910.33
+1991-05-21,2892.22,2931.80,2875.00,2906.08,186860000,2906.08
+1991-05-20,2886.63,2910.78,2872.76,2892.22,109510000,2892.22
+1991-05-17,2894.01,2908.54,2860.02,2886.63,174210000,2886.63
+1991-05-16,2865.38,2905.64,2863.82,2894.01,154460000,2894.01
+1991-05-15,2886.85,2901.83,2834.53,2865.38,193110000,2865.38
+1991-05-14,2922.85,2922.85,2870.08,2886.85,207910000,2886.85
+1991-05-13,2920.17,2945.44,2896.24,2924.42,129620000,2924.42
+1991-05-10,2971.15,2986.14,2906.08,2920.17,172730000,2920.17
+1991-05-09,2930.90,2983.68,2926.88,2971.15,180210000,2971.15
+1991-05-08,2917.49,2945.21,2898.70,2930.90,157240000,2930.90
+1991-05-07,2941.64,2962.66,2906.53,2917.49,153290000,2917.49
+1991-05-06,2938.86,2956.84,2911.45,2941.64,128360000,2941.64
+1991-05-03,2938.61,2959.90,2906.93,2938.86,158160000,2938.86
+1991-05-02,2930.20,2966.34,2917.33,2938.61,187090000,2938.61
+1991-05-01,2887.87,2945.30,2882.43,2930.20,181900000,2930.20
+1991-04-30,2876.98,2929.21,2859.41,2887.87,204930000,2887.87
+1991-04-29,2912.38,2941.09,2869.55,2876.98,149860000,2876.98
+1991-04-26,2921.04,2934.90,2888.61,2912.38,154550000,2912.38
+1991-04-25,2949.51,2958.42,2905.20,2921.04,166940000,2921.04
+1991-04-24,2930.45,2965.10,2913.37,2949.51,166800000,2949.51
+1991-04-23,2927.72,2957.92,2905.94,2930.45,167840000,2930.45
+1991-04-22,2962.13,2962.13,2911.63,2927.72,164410000,2927.72
+1991-04-19,2999.26,3000.25,2943.56,2965.59,195510000,2965.59
+1991-04-18,3004.46,3027.72,2976.24,2999.26,217410000,2999.26
+1991-04-17,2986.88,3030.45,2963.12,3004.46,246930000,3004.46
+1991-04-16,2933.17,2995.79,2912.13,2986.88,214480000,2986.88
+1991-04-15,2920.79,2957.18,2896.29,2933.17,161800000,2933.17
+1991-04-12,2905.45,2946.53,2884.16,2920.79,198610000,2920.79
+1991-04-11,2877.72,2937.62,2877.72,2905.45,196570000,2905.45
+1991-04-10,2873.02,2902.48,2848.51,2874.50,167940000,2874.50
+1991-04-09,2918.56,2932.42,2863.36,2873.02,169940000,2873.02
+1991-04-08,2896.78,2929.21,2877.72,2918.56,138580000,2918.56
+1991-04-05,2924.50,2949.26,2876.98,2896.78,187410000,2896.78
+1991-04-04,2926.73,2959.41,2899.75,2924.50,198120000,2924.50
+1991-04-03,2945.05,2970.54,2915.84,2926.73,213720000,2926.73
+1991-04-02,2881.19,2951.98,2878.22,2945.05,189530000,2945.05
+1991-04-01,2913.86,2919.31,2868.32,2881.19,144010000,2881.19
+1991-03-28,2917.57,2942.08,2893.32,2913.86,150750000,2913.86
+1991-03-27,2914.85,2956.93,2886.14,2917.57,201830000,2917.57
+1991-03-26,2865.84,2924.01,2848.02,2914.85,198720000,2914.85
+1991-03-25,2858.91,2897.52,2837.87,2865.84,153920000,2865.84
+1991-03-22,2855.45,2879.95,2829.21,2858.91,160890000,2858.91
+1991-03-21,2872.03,2907.92,2841.58,2855.45,199830000,2855.45
+1991-03-20,2867.82,2897.03,2840.84,2872.03,196810000,2872.03
+1991-03-19,2908.17,2908.17,2840.84,2867.82,177070000,2867.82
+1991-03-18,2948.27,2960.64,2899.75,2929.95,163100000,2929.95
+1991-03-15,2952.23,2966.58,2918.81,2948.27,237660000,2948.27
+1991-03-14,2955.20,3000.00,2925.74,2952.23,231000000,2952.23
+1991-03-13,2922.52,2967.82,2910.89,2955.20,176000000,2955.20
+1991-03-12,2939.36,2962.13,2906.68,2922.52,176440000,2922.52
+1991-03-11,2955.20,2975.50,2923.27,2939.36,161600000,2939.36
+1991-03-08,2963.37,3003.47,2934.90,2955.20,206850000,2955.20
+1991-03-07,2973.27,2998.51,2948.51,2963.37,197060000,2963.37
+1991-03-06,2972.52,3017.82,2957.67,2973.27,262290000,2973.27
+1991-03-05,2914.11,2995.54,2913.86,2972.52,253700000,2972.52
+1991-03-04,2909.90,2950.74,2897.03,2914.11,199830000,2914.11
+1991-03-01,2882.18,2923.51,2846.78,2909.90,221510000,2909.90
+1991-02-28,2889.11,2923.51,2858.42,2882.18,223010000,2882.18
+1991-02-27,2864.60,2915.35,2839.85,2889.11,211410000,2889.11
+1991-02-26,2887.87,2895.30,2840.10,2864.60,164170000,2864.60
+1991-02-25,2889.36,2935.89,2865.35,2887.87,193820000,2887.87
+1991-02-22,2891.83,2945.79,2860.40,2889.36,218760000,2889.36
+1991-02-21,2899.01,2927.72,2871.29,2891.83,180770000,2891.83
+1991-02-20,2923.76,2923.76,2879.46,2899.01,185680000,2899.01
+1991-02-19,2934.65,2955.20,2895.30,2932.18,189900000,2932.18
+1991-02-15,2877.23,2947.28,2868.07,2934.65,222370000,2934.65
+1991-02-14,2909.16,2942.08,2852.48,2877.23,230750000,2877.23
+1991-02-13,2874.75,2918.32,2848.51,2909.16,209960000,2909.16
+1991-02-12,2902.23,2923.02,2848.27,2874.75,256160000,2874.75
+1991-02-11,2830.69,2910.64,2822.52,2902.23,265930000,2902.23
+1991-02-08,2810.64,2847.28,2787.13,2830.69,187830000,2830.69
+1991-02-07,2830.94,2875.50,2790.59,2810.64,292190000,2810.64
+1991-02-06,2788.37,2844.80,2760.15,2830.94,276940000,2830.94
+1991-02-05,2772.28,2805.20,2742.82,2788.37,290570000,2788.37
+1991-02-04,2730.69,2791.83,2714.85,2772.28,250750000,2772.28
+1991-02-01,2736.39,2764.60,2694.31,2730.69,246670000,2730.69
+1991-01-31,2713.12,2747.28,2691.58,2736.39,204240000,2736.39
+1991-01-30,2662.62,2725.99,2654.70,2713.12,226790000,2713.12
+1991-01-29,2654.46,2677.23,2627.23,2662.62,155740000,2662.62
+1991-01-28,2659.41,2688.61,2635.15,2654.46,141270000,2654.46
+1991-01-25,2643.07,2679.46,2623.27,2659.41,194350000,2659.41
+1991-01-24,2619.06,2667.33,2615.10,2643.07,223150000,2643.07
+1991-01-23,2603.22,2645.54,2584.65,2619.06,169440000,2619.06
+1991-01-22,2629.21,2645.05,2586.39,2603.22,175590000,2603.22
+1991-01-21,2646.29,2646.29,2602.97,2629.21,136290000,2629.21
+1991-01-18,2623.51,2663.37,2600.25,2646.78,226770000,2646.78
+1991-01-17,2571.78,2635.40,2571.78,2623.51,318890000,2623.51
+1991-01-16,2490.59,2525.25,2475.99,2508.91,134560000,2508.91
+1991-01-15,2483.91,2504.46,2470.05,2490.59,109980000,2490.59
+1991-01-14,2500.99,2500.99,2447.03,2483.91,120830000,2483.91
+1991-01-11,2498.76,2516.09,2472.77,2501.49,123050000,2501.49
+1991-01-10,2470.30,2512.13,2467.08,2498.76,124510000,2498.76
+1991-01-09,2509.41,2562.38,2456.19,2470.30,191100000,2470.30
+1991-01-08,2522.77,2544.06,2493.07,2509.41,143390000,2509.41
+1991-01-07,2563.37,2563.37,2514.11,2522.77,130610000,2522.77
+1991-01-04,2573.51,2601.98,2540.84,2566.09,140820000,2566.09
+1991-01-03,2610.64,2622.28,2567.57,2573.51,141450000,2573.51
+1991-01-02,2633.66,2651.73,2600.99,2610.64,126280000,2610.64
+1990-12-31,2629.21,2641.09,2611.14,2633.66,114130000,2633.66
+1990-12-28,2625.50,2639.11,2607.92,2629.21,111030000,2629.21
+1990-12-27,2637.13,2652.23,2616.58,2625.50,102900000,2625.50
+1990-12-26,2621.29,2653.96,2613.37,2637.13,78730000,2637.13
+1990-12-24,2633.66,2638.12,2609.65,2621.29,57200000,2621.29
+1990-12-21,2629.46,2662.62,2619.55,2633.66,233400000,2633.66
+1990-12-20,2626.73,2645.81,2591.58,2629.46,174700000,2629.46
+1990-12-19,2626.73,2648.51,2602.48,2626.73,180380000,2626.73
+1990-12-18,2593.32,2639.36,2583.17,2626.73,176460000,2626.73
+1990-12-17,2593.81,2600.74,2563.61,2593.32,118560000,2593.32
+1990-12-14,2614.36,2617.82,2572.03,2593.81,150880000,2593.81
+1990-12-13,2622.28,2640.59,2598.76,2614.36,162110000,2614.36
+1990-12-12,2586.14,2630.69,2578.22,2622.28,182270000,2622.28
+1990-12-11,2596.78,2606.93,2565.59,2586.14,145330000,2586.14
+1990-12-10,2590.10,2609.40,2566.58,2596.78,138650000,2596.78
+1990-12-07,2602.48,2618.07,2571.78,2590.10,164950000,2590.10
+1990-12-06,2610.40,2656.44,2589.36,2602.48,256380000,2602.48
+1990-12-05,2579.70,2615.84,2558.42,2610.40,205820000,2610.40
+1990-12-04,2565.59,2592.08,2534.65,2579.70,185820000,2579.70
+1990-12-03,2559.65,2589.60,2543.56,2565.59,177010000,2565.59
+1990-11-30,2518.81,2577.23,2498.51,2559.65,192350000,2559.65
+1990-11-29,2535.15,2544.31,2501.23,2518.81,140920000,2518.81
+1990-11-28,2543.81,2564.60,2521.04,2535.15,145490000,2535.15
+1990-11-27,2533.17,2562.62,2516.09,2543.81,147590000,2543.81
+1990-11-26,2527.23,2541.58,2489.85,2533.17,131540000,2533.17
+1990-11-23,2539.36,2557.92,2521.04,2527.23,63350000,2527.23
+1990-11-21,2530.20,2552.23,2502.72,2539.36,140660000,2539.36
+1990-11-20,2565.35,2574.50,2524.01,2530.20,161170000,2530.20
+1990-11-19,2550.25,2580.69,2543.07,2565.35,140950000,2565.35
+1990-11-16,2545.05,2570.79,2522.28,2550.25,165440000,2550.25
+1990-11-15,2559.65,2567.33,2528.71,2545.05,151370000,2545.05
+1990-11-14,2535.40,2581.19,2522.77,2559.65,179310000,2559.65
+1990-11-13,2540.35,2559.90,2512.38,2535.40,160240000,2535.40
+1990-11-12,2490.10,2550.99,2490.10,2540.35,161390000,2540.35
+1990-11-09,2443.81,2500.74,2438.61,2488.61,145160000,2488.61
+1990-11-08,2440.84,2468.81,2415.84,2443.81,155570000,2443.81
+1990-11-07,2485.15,2490.35,2430.94,2440.84,149130000,2440.84
+1990-11-06,2502.23,2516.83,2471.53,2485.15,141130000,2485.15
+1990-11-05,2490.84,2519.06,2472.77,2502.23,147510000,2502.23
+1990-11-02,2454.95,2501.73,2447.28,2490.84,168700000,2490.84
+1990-11-01,2442.33,2473.02,2415.59,2454.95,159270000,2454.95
+1990-10-31,2448.02,2475.99,2419.55,2442.33,156060000,2442.33
+1990-10-30,2430.20,2462.87,2400.50,2448.02,153450000,2448.02
+1990-10-29,2436.14,2470.30,2407.67,2430.20,133980000,2430.20
+1990-10-26,2482.18,2482.18,2429.21,2436.14,130190000,2436.14
+1990-10-25,2504.21,2525.99,2464.11,2484.41,141460000,2484.41
+1990-10-24,2494.06,2523.02,2470.54,2504.21,149290000,2504.21
+1990-10-23,2516.09,2527.97,2480.20,2494.06,146300000,2494.06
+1990-10-22,2520.79,2535.40,2476.73,2516.09,152650000,2516.09
+1990-10-19,2453.47,2536.88,2453.47,2520.79,221480000,2520.79
+1990-10-18,2391.83,2461.63,2391.83,2452.72,204110000,2452.72
+1990-10-17,2381.19,2418.56,2358.17,2387.87,161260000,2387.87
+1990-10-16,2416.34,2434.41,2366.83,2381.19,149570000,2381.19
+1990-10-15,2398.02,2451.24,2354.95,2416.34,164980000,2416.34
+1990-10-12,2365.10,2428.71,2349.75,2398.02,187940000,2398.02
+1990-10-11,2407.92,2427.23,2344.31,2365.10,180060000,2365.10
+1990-10-10,2445.54,2472.03,2388.36,2407.92,167890000,2407.92
+1990-10-09,2514.60,2514.60,2437.87,2445.54,145610000,2445.54
+1990-10-08,2510.64,2548.02,2507.18,2523.76,99470000,2523.76
+1990-10-05,2516.83,2544.55,2453.47,2510.64,153380000,2510.64
+1990-10-04,2489.36,2528.22,2464.85,2516.83,145410000,2516.83
+1990-10-03,2505.20,2534.65,2470.79,2489.36,135490000,2489.36
+1990-10-02,2515.84,2565.35,2487.62,2505.20,188360000,2505.20
+1990-10-01,2452.48,2534.65,2446.53,2515.84,202210000,2515.84
+1990-09-28,2427.48,2465.59,2367.82,2452.48,201010000,2452.48
+1990-09-27,2459.65,2492.33,2396.29,2427.48,182690000,2427.48
+1990-09-26,2485.64,2496.04,2435.40,2459.65,155570000,2459.65
+1990-09-25,2452.97,2501.24,2437.38,2485.64,155940000,2485.64
+1990-09-24,2498.02,2498.02,2438.12,2452.97,162210000,2452.97
+1990-09-21,2518.32,2538.37,2479.95,2512.38,201050000,2512.38
+1990-09-20,2549.01,2549.01,2495.54,2518.32,145100000,2518.32
+1990-09-19,2571.29,2594.55,2534.41,2557.43,147530000,2557.43
+1990-09-18,2567.33,2587.87,2524.26,2571.29,141130000,2571.29
+1990-09-17,2564.11,2585.89,2537.13,2567.33,110600000,2567.33
+1990-09-14,2582.67,2585.15,2545.54,2564.11,133390000,2564.11
+1990-09-13,2625.74,2629.21,2570.54,2582.67,123370000,2582.67
+1990-09-12,2612.62,2639.11,2592.33,2625.74,129890000,2625.74
+1990-09-11,2615.59,2635.64,2586.88,2612.62,113220000,2612.62
+1990-09-10,2619.55,2665.35,2600.99,2615.59,119730000,2615.59
+1990-09-07,2596.29,2635.89,2577.72,2619.55,123800000,2619.55
+1990-09-06,2628.22,2633.17,2575.99,2596.29,125620000,2596.29
+1990-09-05,2613.37,2643.07,2588.61,2628.22,120610000,2628.22
+1990-09-04,2614.36,2618.07,2573.02,2613.37,92940000,2613.37
+1990-08-31,2593.32,2624.50,2569.31,2614.36,96480000,2614.36
+1990-08-30,2632.43,2641.34,2578.47,2593.32,120890000,2593.32
+1990-08-29,2614.85,2651.24,2596.53,2632.43,134240000,2632.43
+1990-08-28,2611.63,2629.95,2582.92,2614.85,127660000,2614.85
+1990-08-27,2590.59,2645.05,2590.59,2611.63,160150000,2611.63
+1990-08-24,2483.42,2555.69,2480.45,2532.92,199040000,2532.92
+1990-08-23,2539.60,2539.60,2459.41,2483.42,250440000,2483.42
+1990-08-22,2603.96,2630.69,2553.22,2560.15,175550000,2560.15
+1990-08-21,2645.53,2645.53,2566.09,2603.96,194630000,2603.96
+1990-08-20,2644.80,2679.21,2632.43,2656.44,129630000,2656.44
+1990-08-17,2679.21,2679.21,2598.02,2644.80,212560000,2644.80
+1990-08-16,2746.53,2746.53,2676.24,2681.44,138850000,2681.44
+1990-08-15,2747.77,2778.71,2736.38,2748.27,135210000,2748.27
+1990-08-14,2746.78,2773.02,2720.54,2747.77,130320000,2747.77
+1990-08-13,2716.58,2752.23,2676.73,2746.78,122820000,2746.78
+1990-08-10,2758.91,2763.61,2692.82,2716.58,145340000,2716.58
+1990-08-09,2734.90,2774.26,2716.58,2758.91,155810000,2758.91
+1990-08-08,2710.64,2763.37,2691.34,2734.90,190400000,2734.90
+1990-08-07,2716.34,2763.86,2676.24,2710.64,231580000,2710.64
+1990-08-06,2758.42,2758.42,2683.17,2716.34,240400000,2716.34
+1990-08-03,2863.86,2863.86,2722.03,2809.65,292360000,2809.65
+1990-08-02,2899.26,2903.71,2833.17,2864.60,253090000,2864.60
+1990-08-01,2905.20,2931.19,2875.00,2899.26,176810000,2899.26
+1990-07-31,2917.33,2940.10,2878.47,2905.20,173810000,2905.20
+1990-07-30,2898.51,2922.52,2861.14,2917.33,146470000,2917.33
+1990-07-27,2920.79,2938.36,2877.72,2898.51,149070000,2898.51
+1990-07-26,2930.94,2945.79,2888.12,2920.79,155040000,2920.79
+1990-07-25,2922.52,2946.53,2896.78,2930.94,163530000,2930.94
+1990-07-24,2904.70,2939.60,2866.83,2922.52,181920000,2922.52
+1990-07-23,2961.14,2961.39,2833.17,2904.70,209030000,2904.70
+1990-07-20,2993.81,3019.31,2953.71,2961.14,177810000,2961.14
+1990-07-19,2981.68,3006.19,2948.27,2993.81,161990000,2993.81
+1990-07-18,2999.75,3009.65,2963.61,2981.68,168760000,2981.68
+1990-07-17,2999.75,3024.26,2970.05,2999.75,176790000,2999.75
+1990-07-16,2980.20,3017.08,2971.78,2999.75,149450000,2999.75
+1990-07-13,2969.80,3012.38,2956.68,2980.20,215600000,2980.20
+1990-07-12,2932.67,2980.69,2917.82,2969.80,211510000,2969.80
+1990-07-11,2890.84,2942.33,2890.10,2932.67,162220000,2932.67
+1990-07-10,2914.11,2928.22,2882.18,2890.84,147630000,2890.84
+1990-07-09,2904.95,2927.97,2890.84,2914.11,119390000,2914.11
+1990-07-06,2879.21,2919.80,2867.57,2904.95,111730000,2904.95
+1990-07-05,2906.44,2906.44,2863.61,2879.21,128320000,2879.21
+1990-07-03,2899.26,2925.74,2891.09,2911.63,130050000,2911.63
+1990-07-02,2880.69,2908.66,2869.80,2899.26,130200000,2899.26
+1990-06-29,2878.71,2901.98,2865.84,2880.69,145510000,2880.69
+1990-06-28,2862.13,2896.04,2850.50,2878.71,136120000,2878.71
+1990-06-27,2842.33,2878.96,2821.53,2862.13,146620000,2862.13
+1990-06-26,2845.05,2882.92,2832.67,2842.33,141420000,2842.33
+1990-06-25,2857.18,2882.18,2834.90,2845.05,133100000,2845.05
+1990-06-22,2901.73,2931.93,2848.02,2857.18,172570000,2857.18
+1990-06-21,2895.30,2916.58,2870.05,2901.73,138570000,2901.73
+1990-06-20,2893.56,2914.60,2868.81,2895.30,137420000,2895.30
+1990-06-19,2882.18,2907.92,2866.58,2893.56,134930000,2893.56
+1990-06-18,2930.45,2930.45,2877.48,2882.18,133470000,2882.18
+1990-06-15,2928.22,2947.77,2902.72,2935.89,205130000,2935.89
+1990-06-14,2929.95,2943.56,2902.97,2928.22,135770000,2928.22
+1990-06-13,2933.42,2956.93,2910.15,2929.95,158910000,2929.95
+1990-06-12,2892.57,2947.52,2877.97,2933.42,157100000,2933.42
+1990-06-11,2862.38,2901.98,2852.97,2892.57,119550000,2892.57
+1990-06-08,2897.33,2908.50,2850.73,2862.38,142600000,2862.38
+1990-06-07,2911.65,2930.58,2880.34,2897.33,160360000,2897.33
+1990-06-06,2925.00,2936.65,2891.99,2911.65,164030000,2911.65
+1990-06-05,2935.19,2956.55,2911.89,2925.00,199720000,2925.00
+1990-06-04,2900.97,2943.69,2883.98,2935.19,175520000,2935.19
+1990-06-01,2876.66,2919.90,2868.69,2900.97,187860000,2900.97
+1990-05-31,2878.56,2900.62,2854.64,2876.66,165690000,2876.66
+1990-05-30,2870.49,2908.21,2853.89,2878.56,199540000,2878.56
+1990-05-29,2820.92,2876.19,2812.62,2870.49,137410000,2870.49
+1990-05-25,2855.55,2856.50,2806.69,2820.92,120250000,2820.92
+1990-05-24,2856.26,2878.08,2828.04,2855.55,155140000,2855.55
+1990-05-23,2852.23,2869.07,2824.95,2856.26,172330000,2856.26
+1990-05-22,2844.68,2877.13,2828.51,2852.23,203350000,2852.23
+1990-05-21,2819.91,2859.72,2802.08,2844.68,166280000,2844.68
+1990-05-18,2831.71,2838.43,2804.63,2819.91,162520000,2819.91
+1990-05-17,2819.68,2856.25,2811.57,2831.71,164770000,2831.71
+1990-05-16,2822.45,2841.44,2800.23,2819.68,159810000,2819.68
+1990-05-15,2821.53,2840.74,2798.15,2822.45,165730000,2822.45
+1990-05-14,2801.58,2857.87,2793.75,2821.53,225410000,2821.53
+1990-05-11,2743.02,2810.36,2743.02,2801.58,234040000,2801.58
+1990-05-10,2732.88,2755.63,2716.44,2738.51,158460000,2738.51
+1990-05-09,2733.56,2745.50,2710.14,2732.88,152220000,2732.88
+1990-05-08,2721.62,2739.41,2710.36,2733.56,144230000,2733.56
+1990-05-07,2710.36,2739.19,2698.87,2721.62,132760000,2721.62
+1990-05-04,2696.17,2718.92,2682.43,2710.36,140550000,2710.36
+1990-05-03,2689.64,2716.22,2682.88,2696.17,145560000,2696.17
+1990-05-02,2668.92,2697.30,2659.01,2689.64,141610000,2689.64
+1990-05-01,2656.76,2687.39,2651.35,2668.92,149020000,2668.92
+1990-04-30,2645.05,2667.79,2627.70,2656.76,122750000,2656.76
+1990-04-27,2676.58,2687.39,2639.19,2645.05,130630000,2645.05
+1990-04-26,2666.44,2691.89,2650.22,2676.58,141330000,2676.58
+1990-04-25,2654.50,2685.36,2649.32,2666.44,133480000,2666.44
+1990-04-24,2666.67,2686.04,2643.69,2654.50,137360000,2654.50
+1990-04-23,2690.77,2690.77,2650.90,2666.67,136150000,2666.67
+1990-04-20,2711.94,2722.07,2668.47,2695.95,174260000,2695.95
+1990-04-19,2732.88,2742.12,2700.00,2711.94,152930000,2711.94
+1990-04-18,2765.77,2775.68,2722.75,2732.88,147130000,2732.88
+1990-04-17,2763.06,2774.77,2738.29,2765.77,127990000,2765.77
+1990-04-16,2751.80,2793.47,2748.87,2763.06,142810000,2763.06
+1990-04-12,2729.73,2763.96,2729.50,2751.80,142470000,2751.80
+1990-04-11,2731.08,2751.35,2713.29,2729.73,141080000,2729.73
+1990-04-10,2722.07,2741.67,2707.88,2731.08,136020000,2731.08
+1990-04-09,2717.12,2737.39,2701.35,2722.07,114970000,2722.07
+1990-04-06,2721.17,2732.43,2695.50,2717.12,137490000,2717.12
+1990-04-05,2719.37,2746.17,2709.01,2721.17,144170000,2721.17
+1990-04-04,2736.71,2755.86,2708.56,2719.37,159540000,2719.37
+1990-04-03,2700.45,2747.30,2699.55,2736.71,154310000,2736.71
+1990-04-02,2707.21,2708.78,2668.69,2700.45,124360000,2700.45
+1990-03-30,2727.70,2736.71,2692.34,2707.21,139340000,2707.21
+1990-03-29,2743.69,2753.38,2711.49,2727.70,132190000,2727.70
+1990-03-28,2736.94,2755.63,2716.21,2743.69,142300000,2743.69
+1990-03-27,2707.66,2738.96,2691.89,2736.94,131610000,2736.94
+1990-03-26,2704.28,2735.81,2697.97,2707.66,116110000,2707.66
+1990-03-23,2695.72,2722.75,2688.06,2704.28,132070000,2704.28
+1990-03-22,2727.93,2734.01,2674.32,2695.72,175930000,2695.72
+1990-03-21,2738.74,2759.68,2718.24,2727.93,130990000,2727.93
+1990-03-20,2755.63,2775.00,2724.10,2738.74,177320000,2738.74
+1990-03-19,2741.22,2761.71,2706.53,2755.63,142300000,2755.63
+1990-03-16,2699.32,2745.50,2699.32,2741.22,222520000,2741.22
+1990-03-15,2687.84,2714.86,2677.93,2695.72,144410000,2695.72
+1990-03-14,2674.55,2705.18,2662.39,2687.84,145060000,2687.84
+1990-03-13,2686.71,2699.55,2657.88,2674.55,145440000,2674.55
+1990-03-12,2683.33,2698.65,2661.94,2686.71,114790000,2686.71
+1990-03-09,2696.17,2705.63,2665.54,2683.33,150410000,2683.33
+1990-03-08,2669.59,2705.18,2661.26,2696.17,170900000,2696.17
+1990-03-07,2676.80,2696.85,2656.08,2669.59,163580000,2669.59
+1990-03-06,2649.55,2684.46,2638.06,2676.80,143640000,2676.80
+1990-03-05,2660.36,2675.22,2636.71,2649.55,140110000,2649.55
+1990-03-02,2635.59,2669.82,2630.18,2660.36,164330000,2660.36
+1990-03-01,2627.25,2655.63,2607.88,2635.59,157930000,2635.59
+1990-02-28,2617.12,2652.48,2603.60,2627.25,184410000,2627.25
+1990-02-27,2602.48,2637.84,2592.12,2617.12,152590000,2617.12
+1990-02-26,2564.19,2606.30,2560.13,2602.48,148910000,2602.48
+1990-02-23,2574.77,2591.44,2540.99,2564.19,148490000,2564.19
+1990-02-22,2583.56,2622.30,2568.02,2574.77,184320000,2574.77
+1990-02-21,2596.85,2602.48,2556.31,2583.56,159240000,2583.56
+1990-02-20,2619.14,2619.14,2579.05,2596.85,147300000,2596.85
+1990-02-16,2649.55,2669.37,2623.65,2635.59,166840000,2635.59
+1990-02-15,2624.32,2658.78,2614.86,2649.55,174630000,2649.55
+1990-02-14,2624.10,2643.69,2608.11,2624.32,138530000,2624.32
+1990-02-13,2619.14,2639.19,2592.57,2624.10,144490000,2624.10
+1990-02-12,2648.20,2652.48,2610.59,2619.14,118390000,2619.14
+1990-02-09,2644.37,2666.67,2628.15,2648.20,146910000,2648.20
+1990-02-08,2640.09,2674.32,2622.30,2644.37,176240000,2644.37
+1990-02-07,2606.31,2651.35,2579.28,2640.09,186710000,2640.09
+1990-02-06,2622.52,2629.50,2588.29,2606.31,134070000,2606.31
+1990-02-05,2602.70,2633.56,2592.12,2622.52,130950000,2622.52
+1990-02-02,2586.26,2623.65,2577.03,2602.70,164400000,2602.70
+1990-02-01,2590.54,2611.49,2571.85,2586.26,154580000,2586.26
+1990-01-31,2546.85,2600.90,2546.85,2590.54,189660000,2590.54
+1990-01-30,2553.38,2576.13,2513.06,2543.24,186030000,2543.24
+1990-01-29,2559.23,2583.56,2522.97,2553.38,150770000,2553.38
+1990-01-26,2561.04,2591.67,2516.89,2559.23,198190000,2559.23
+1990-01-25,2604.50,2628.83,2546.17,2561.04,172270000,2561.04
+1990-01-24,2615.32,2619.59,2534.23,2604.50,207830000,2604.50
+1990-01-23,2600.45,2639.64,2584.01,2615.32,179300000,2615.32
+1990-01-22,2677.90,2683.33,2595.27,2600.45,148380000,2600.45
+1990-01-19,2666.38,2696.89,2657.85,2677.90,185590000,2677.90
+1990-01-18,2659.13,2678.11,2625.85,2666.38,178590000,2666.38
+1990-01-17,2692.62,2711.39,2643.77,2659.13,170470000,2659.13
+1990-01-16,2669.37,2698.38,2634.17,2692.62,186070000,2692.62
+1990-01-15,2689.21,2698.11,2656.36,2669.37,140590000,2669.37
+1990-01-12,2735.92,2735.92,2675.98,2689.21,183880000,2689.21
+1990-01-11,2750.64,2783.27,2748.29,2760.67,154390000,2760.67
+1990-01-10,2766.00,2772.82,2725.47,2750.64,175990000,2750.64
+1990-01-09,2794.37,2810.79,2760.03,2766.00,155210000,2766.00
+1990-01-08,2773.25,2803.97,2753.41,2794.37,140110000,2794.37
+1990-01-05,2796.08,2810.15,2758.11,2773.25,158530000,2773.25
+1990-01-04,2809.73,2821.46,2766.42,2796.08,177000000,2796.08
+1990-01-03,2810.15,2834.04,2786.26,2809.73,192330000,2809.73
+1990-01-02,2753.20,2811.65,2732.51,2810.15,162070000,2810.15
Index: /Dev/trunk/d3/examples/zoom/zoom.html
===================================================================
--- /Dev/trunk/d3/examples/zoom/zoom.html	(revision 76)
+++ /Dev/trunk/d3/examples/zoom/zoom.html	(revision 76)
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <title>Zoom</title>
+    <script type="text/javascript" src="../../d3.js"></script>
+    <script type="text/javascript" src="../../d3.csv.js"></script>
+    <script type="text/javascript" src="../../d3.time.js"></script>
+    <style type="text/css">
+
+path {
+  fill: steelblue;
+}
+
+line {
+  stroke: #000;
+  shape-rendering: crispEdges;
+}
+
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+
+var w = 960,
+    h1 = 400,
+    h2 = 40,
+    p = 20,
+    x0, // start of focus region
+    x1, // end of focus region
+    xx, // drag state
+    time = d3.time.format("%Y-%m-%d"),
+    x = d3.scale.linear().range([0, w]),
+    y1 = d3.scale.linear().range([h1 - p, 0]),
+    y2 = d3.scale.linear().range([h2, 0]);
+
+var svg = d3.select("body")
+  .append("svg:svg")
+    .attr("width", w)
+    .attr("height", h1 + h2);
+
+// Focus view.
+var focus = svg.append("svg:g");
+
+// Context view.
+var context = svg.append("svg:g")
+    .attr("transform", "translate(0," + h1 + ")");
+
+d3.csv("dji.csv", function(csv) {
+  var minX,
+      maxX,
+      maxY = -Infinity;
+
+  // Compute x- and y-extent.
+  csv.reverse();
+  for (var i = 0, n = csv.length, o; i < n; i++) {
+    o = csv[i];
+    o = csv[i] = {x: +time.parse(o.Date), y: +o.Close};
+    if (o.y > maxY) maxY = o.y;
+  }
+  minX = csv[0].x;
+  maxX = csv[n - 1].x;
+
+  // Update x- and y-scales.
+  x.domain([minX, maxX]);
+  y1.domain([0, maxY]);
+  y2.domain([0, maxY]);
+
+  // Focus view.
+  focus.append("svg:path")
+      .data([csv])
+      .attr("d", d3.svg.area()
+      .x(function(d) { return x(d.x); })
+      .y0(y1(0))
+      .y1(function(d) { return y1(d.y); }));
+
+  focus.append("svg:line")
+      .attr("x1", 0)
+      .attr("x2", w)
+      .attr("y1", y1(0))
+      .attr("y2", y1(0));
+
+  // Context view.
+  context.append("svg:rect")
+      .attr("width", w)
+      .attr("height", h2)
+      .attr("fill", "none")
+      .attr("pointer-events", "all")
+      .attr("cursor", "crosshair")
+      .on("mousedown", mousedown);
+
+  context.append("svg:path")
+      .data([csv])
+      .attr("pointer-events", "none")
+      .attr("d", d3.svg.area()
+      .x(function(d) { return x(d.x); })
+      .y0(y2(0))
+      .y1(function(d) { return y2(d.y); }));
+
+  context.append("svg:line")
+      .attr("x1", 0)
+      .attr("x2", w)
+      .attr("y1", y2(0))
+      .attr("y2", y2(0));
+
+  // Active focus region.
+  active = context.append("svg:rect")
+      .attr("pointer-events", "none")
+      .attr("id", "active")
+      .attr("x", x(x0 = minX))
+      .attr("y", 0)
+      .attr("height", h2)
+      .attr("width", x(x1 = (minX + 1e11)) - x(x0))
+      .attr("fill", "lightcoral")
+      .attr("fill-opacity", .5);
+});
+
+d3.select(window)
+    .on("mousemove", mousemove)
+    .on("mouseup", mouseup);
+
+function mousedown() {
+  xx = x.invert(d3.svg.mouse(this)[0]);
+}
+
+function mousemove() {
+  if (xx != null) {
+
+    // Compute the new (clamped) focus region.
+    var xy = x.invert(d3.svg.mouse(active[0][0])[0]);
+    if (xx < xy) { x0 = xx; x1 = xy; }
+    else if (xx > xy) { x0 = xy; x1 = xx; }
+    else return;
+    x0 = Math.max(x.domain()[0], x0);
+    x1 = Math.min(x.domain()[1], x1);
+
+    // Update the x-scale. TODO Recycle this scale?
+    var tx = d3.scale.linear()
+        .domain([x0, x1])
+        .range([0, w]);
+
+    // Recompute the focus path.
+    focus.select("path")
+        .attr("d", d3.svg.area()
+        .x(function(d) { return tx(d.x); })
+        .y0(y1(0))
+        .y1(function(d) { return y1(d.y); }));
+
+    // Reposition the active region rect.
+    active
+        .attr("x", x(x0))
+        .attr("width", x(x1) - x(x0));
+  }
+}
+
+function mouseup() {
+  xx = null;
+}
+
+    </script>
+  </body>
+</html>
Index: /Dev/trunk/d3/lib/colorbrewer/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/colorbrewer/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/colorbrewer/LICENSE	(revision 76)
@@ -0,0 +1,38 @@
+Apache-Style Software License for ColorBrewer software and ColorBrewer Color
+Schemes
+
+Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State
+University.
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not
+use this file except in compliance with the License. You may obtain a copy of
+the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+License for the specific language governing permissions and limitations under
+the License.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions as source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. The end-user documentation included with the redistribution, if any, must
+include the following acknowledgment: "This product includes color
+specifications and designs developed by Cynthia Brewer
+(http://colorbrewer.org/)." Alternately, this acknowledgment may appear in the
+software itself, if and wherever such third-party acknowledgments normally
+appear.
+
+4. The name "ColorBrewer" must not be used to endorse or promote products
+derived from this software without prior written permission. For written
+permission, please contact Cynthia Brewer at cbrewer@psu.edu.
+
+5. Products derived from this software may not be called "ColorBrewer", nor
+may "ColorBrewer" appear in their name, without prior written permission of
+Cynthia Brewer.
Index: /Dev/trunk/d3/lib/colorbrewer/colorbrewer.css
===================================================================
--- /Dev/trunk/d3/lib/colorbrewer/colorbrewer.css	(revision 76)
+++ /Dev/trunk/d3/lib/colorbrewer/colorbrewer.css	(revision 76)
@@ -0,0 +1,1327 @@
+/*
+ * This product includes color specifications and designs developed by Cynthia
+ * Brewer (http://colorbrewer.org/).
+ */
+.YlGn .q0-3{fill:rgb(247,252,185)}
+.YlGn .q1-3{fill:rgb(173,221,142)}
+.YlGn .q2-3{fill:rgb(49,163,84)}
+.YlGn .q0-4{fill:rgb(255,255,204)}
+.YlGn .q1-4{fill:rgb(194,230,153)}
+.YlGn .q2-4{fill:rgb(120,198,121)}
+.YlGn .q3-4{fill:rgb(35,132,67)}
+.YlGn .q0-5{fill:rgb(255,255,204)}
+.YlGn .q1-5{fill:rgb(194,230,153)}
+.YlGn .q2-5{fill:rgb(120,198,121)}
+.YlGn .q3-5{fill:rgb(49,163,84)}
+.YlGn .q4-5{fill:rgb(0,104,55)}
+.YlGn .q0-6{fill:rgb(255,255,204)}
+.YlGn .q1-6{fill:rgb(217,240,163)}
+.YlGn .q2-6{fill:rgb(173,221,142)}
+.YlGn .q3-6{fill:rgb(120,198,121)}
+.YlGn .q4-6{fill:rgb(49,163,84)}
+.YlGn .q5-6{fill:rgb(0,104,55)}
+.YlGn .q0-7{fill:rgb(255,255,204)}
+.YlGn .q1-7{fill:rgb(217,240,163)}
+.YlGn .q2-7{fill:rgb(173,221,142)}
+.YlGn .q3-7{fill:rgb(120,198,121)}
+.YlGn .q4-7{fill:rgb(65,171,93)}
+.YlGn .q5-7{fill:rgb(35,132,67)}
+.YlGn .q6-7{fill:rgb(0,90,50)}
+.YlGn .q0-8{fill:rgb(255,255,229)}
+.YlGn .q1-8{fill:rgb(247,252,185)}
+.YlGn .q2-8{fill:rgb(217,240,163)}
+.YlGn .q3-8{fill:rgb(173,221,142)}
+.YlGn .q4-8{fill:rgb(120,198,121)}
+.YlGn .q5-8{fill:rgb(65,171,93)}
+.YlGn .q6-8{fill:rgb(35,132,67)}
+.YlGn .q7-8{fill:rgb(0,90,50)}
+.YlGn .q0-9{fill:rgb(255,255,229)}
+.YlGn .q1-9{fill:rgb(247,252,185)}
+.YlGn .q2-9{fill:rgb(217,240,163)}
+.YlGn .q3-9{fill:rgb(173,221,142)}
+.YlGn .q4-9{fill:rgb(120,198,121)}
+.YlGn .q5-9{fill:rgb(65,171,93)}
+.YlGn .q6-9{fill:rgb(35,132,67)}
+.YlGn .q7-9{fill:rgb(0,104,55)}
+.YlGn .q8-9{fill:rgb(0,69,41)}
+.YlGnBu .q0-3{fill:rgb(237,248,177)}
+.YlGnBu .q1-3{fill:rgb(127,205,187)}
+.YlGnBu .q2-3{fill:rgb(44,127,184)}
+.YlGnBu .q0-4{fill:rgb(255,255,204)}
+.YlGnBu .q1-4{fill:rgb(161,218,180)}
+.YlGnBu .q2-4{fill:rgb(65,182,196)}
+.YlGnBu .q3-4{fill:rgb(34,94,168)}
+.YlGnBu .q0-5{fill:rgb(255,255,204)}
+.YlGnBu .q1-5{fill:rgb(161,218,180)}
+.YlGnBu .q2-5{fill:rgb(65,182,196)}
+.YlGnBu .q3-5{fill:rgb(44,127,184)}
+.YlGnBu .q4-5{fill:rgb(37,52,148)}
+.YlGnBu .q0-6{fill:rgb(255,255,204)}
+.YlGnBu .q1-6{fill:rgb(199,233,180)}
+.YlGnBu .q2-6{fill:rgb(127,205,187)}
+.YlGnBu .q3-6{fill:rgb(65,182,196)}
+.YlGnBu .q4-6{fill:rgb(44,127,184)}
+.YlGnBu .q5-6{fill:rgb(37,52,148)}
+.YlGnBu .q0-7{fill:rgb(255,255,204)}
+.YlGnBu .q1-7{fill:rgb(199,233,180)}
+.YlGnBu .q2-7{fill:rgb(127,205,187)}
+.YlGnBu .q3-7{fill:rgb(65,182,196)}
+.YlGnBu .q4-7{fill:rgb(29,145,192)}
+.YlGnBu .q5-7{fill:rgb(34,94,168)}
+.YlGnBu .q6-7{fill:rgb(12,44,132)}
+.YlGnBu .q0-8{fill:rgb(255,255,217)}
+.YlGnBu .q1-8{fill:rgb(237,248,177)}
+.YlGnBu .q2-8{fill:rgb(199,233,180)}
+.YlGnBu .q3-8{fill:rgb(127,205,187)}
+.YlGnBu .q4-8{fill:rgb(65,182,196)}
+.YlGnBu .q5-8{fill:rgb(29,145,192)}
+.YlGnBu .q6-8{fill:rgb(34,94,168)}
+.YlGnBu .q7-8{fill:rgb(12,44,132)}
+.YlGnBu .q0-9{fill:rgb(255,255,217)}
+.YlGnBu .q1-9{fill:rgb(237,248,177)}
+.YlGnBu .q2-9{fill:rgb(199,233,180)}
+.YlGnBu .q3-9{fill:rgb(127,205,187)}
+.YlGnBu .q4-9{fill:rgb(65,182,196)}
+.YlGnBu .q5-9{fill:rgb(29,145,192)}
+.YlGnBu .q6-9{fill:rgb(34,94,168)}
+.YlGnBu .q7-9{fill:rgb(37,52,148)}
+.YlGnBu .q8-9{fill:rgb(8,29,88)}
+.GnBu .q0-3{fill:rgb(224,243,219)}
+.GnBu .q1-3{fill:rgb(168,221,181)}
+.GnBu .q2-3{fill:rgb(67,162,202)}
+.GnBu .q0-4{fill:rgb(240,249,232)}
+.GnBu .q1-4{fill:rgb(186,228,188)}
+.GnBu .q2-4{fill:rgb(123,204,196)}
+.GnBu .q3-4{fill:rgb(43,140,190)}
+.GnBu .q0-5{fill:rgb(240,249,232)}
+.GnBu .q1-5{fill:rgb(186,228,188)}
+.GnBu .q2-5{fill:rgb(123,204,196)}
+.GnBu .q3-5{fill:rgb(67,162,202)}
+.GnBu .q4-5{fill:rgb(8,104,172)}
+.GnBu .q0-6{fill:rgb(240,249,232)}
+.GnBu .q1-6{fill:rgb(204,235,197)}
+.GnBu .q2-6{fill:rgb(168,221,181)}
+.GnBu .q3-6{fill:rgb(123,204,196)}
+.GnBu .q4-6{fill:rgb(67,162,202)}
+.GnBu .q5-6{fill:rgb(8,104,172)}
+.GnBu .q0-7{fill:rgb(240,249,232)}
+.GnBu .q1-7{fill:rgb(204,235,197)}
+.GnBu .q2-7{fill:rgb(168,221,181)}
+.GnBu .q3-7{fill:rgb(123,204,196)}
+.GnBu .q4-7{fill:rgb(78,179,211)}
+.GnBu .q5-7{fill:rgb(43,140,190)}
+.GnBu .q6-7{fill:rgb(8,88,158)}
+.GnBu .q0-8{fill:rgb(247,252,240)}
+.GnBu .q1-8{fill:rgb(224,243,219)}
+.GnBu .q2-8{fill:rgb(204,235,197)}
+.GnBu .q3-8{fill:rgb(168,221,181)}
+.GnBu .q4-8{fill:rgb(123,204,196)}
+.GnBu .q5-8{fill:rgb(78,179,211)}
+.GnBu .q6-8{fill:rgb(43,140,190)}
+.GnBu .q7-8{fill:rgb(8,88,158)}
+.GnBu .q0-9{fill:rgb(247,252,240)}
+.GnBu .q1-9{fill:rgb(224,243,219)}
+.GnBu .q2-9{fill:rgb(204,235,197)}
+.GnBu .q3-9{fill:rgb(168,221,181)}
+.GnBu .q4-9{fill:rgb(123,204,196)}
+.GnBu .q5-9{fill:rgb(78,179,211)}
+.GnBu .q6-9{fill:rgb(43,140,190)}
+.GnBu .q7-9{fill:rgb(8,104,172)}
+.GnBu .q8-9{fill:rgb(8,64,129)}
+.BuGn .q0-3{fill:rgb(229,245,249)}
+.BuGn .q1-3{fill:rgb(153,216,201)}
+.BuGn .q2-3{fill:rgb(44,162,95)}
+.BuGn .q0-4{fill:rgb(237,248,251)}
+.BuGn .q1-4{fill:rgb(178,226,226)}
+.BuGn .q2-4{fill:rgb(102,194,164)}
+.BuGn .q3-4{fill:rgb(35,139,69)}
+.BuGn .q0-5{fill:rgb(237,248,251)}
+.BuGn .q1-5{fill:rgb(178,226,226)}
+.BuGn .q2-5{fill:rgb(102,194,164)}
+.BuGn .q3-5{fill:rgb(44,162,95)}
+.BuGn .q4-5{fill:rgb(0,109,44)}
+.BuGn .q0-6{fill:rgb(237,248,251)}
+.BuGn .q1-6{fill:rgb(204,236,230)}
+.BuGn .q2-6{fill:rgb(153,216,201)}
+.BuGn .q3-6{fill:rgb(102,194,164)}
+.BuGn .q4-6{fill:rgb(44,162,95)}
+.BuGn .q5-6{fill:rgb(0,109,44)}
+.BuGn .q0-7{fill:rgb(237,248,251)}
+.BuGn .q1-7{fill:rgb(204,236,230)}
+.BuGn .q2-7{fill:rgb(153,216,201)}
+.BuGn .q3-7{fill:rgb(102,194,164)}
+.BuGn .q4-7{fill:rgb(65,174,118)}
+.BuGn .q5-7{fill:rgb(35,139,69)}
+.BuGn .q6-7{fill:rgb(0,88,36)}
+.BuGn .q0-8{fill:rgb(247,252,253)}
+.BuGn .q1-8{fill:rgb(229,245,249)}
+.BuGn .q2-8{fill:rgb(204,236,230)}
+.BuGn .q3-8{fill:rgb(153,216,201)}
+.BuGn .q4-8{fill:rgb(102,194,164)}
+.BuGn .q5-8{fill:rgb(65,174,118)}
+.BuGn .q6-8{fill:rgb(35,139,69)}
+.BuGn .q7-8{fill:rgb(0,88,36)}
+.BuGn .q0-9{fill:rgb(247,252,253)}
+.BuGn .q1-9{fill:rgb(229,245,249)}
+.BuGn .q2-9{fill:rgb(204,236,230)}
+.BuGn .q3-9{fill:rgb(153,216,201)}
+.BuGn .q4-9{fill:rgb(102,194,164)}
+.BuGn .q5-9{fill:rgb(65,174,118)}
+.BuGn .q6-9{fill:rgb(35,139,69)}
+.BuGn .q7-9{fill:rgb(0,109,44)}
+.BuGn .q8-9{fill:rgb(0,68,27)}
+.PuBuGn .q0-3{fill:rgb(236,226,240)}
+.PuBuGn .q1-3{fill:rgb(166,189,219)}
+.PuBuGn .q2-3{fill:rgb(28,144,153)}
+.PuBuGn .q0-4{fill:rgb(246,239,247)}
+.PuBuGn .q1-4{fill:rgb(189,201,225)}
+.PuBuGn .q2-4{fill:rgb(103,169,207)}
+.PuBuGn .q3-4{fill:rgb(2,129,138)}
+.PuBuGn .q0-5{fill:rgb(246,239,247)}
+.PuBuGn .q1-5{fill:rgb(189,201,225)}
+.PuBuGn .q2-5{fill:rgb(103,169,207)}
+.PuBuGn .q3-5{fill:rgb(28,144,153)}
+.PuBuGn .q4-5{fill:rgb(1,108,89)}
+.PuBuGn .q0-6{fill:rgb(246,239,247)}
+.PuBuGn .q1-6{fill:rgb(208,209,230)}
+.PuBuGn .q2-6{fill:rgb(166,189,219)}
+.PuBuGn .q3-6{fill:rgb(103,169,207)}
+.PuBuGn .q4-6{fill:rgb(28,144,153)}
+.PuBuGn .q5-6{fill:rgb(1,108,89)}
+.PuBuGn .q0-7{fill:rgb(246,239,247)}
+.PuBuGn .q1-7{fill:rgb(208,209,230)}
+.PuBuGn .q2-7{fill:rgb(166,189,219)}
+.PuBuGn .q3-7{fill:rgb(103,169,207)}
+.PuBuGn .q4-7{fill:rgb(54,144,192)}
+.PuBuGn .q5-7{fill:rgb(2,129,138)}
+.PuBuGn .q6-7{fill:rgb(1,100,80)}
+.PuBuGn .q0-8{fill:rgb(255,247,251)}
+.PuBuGn .q1-8{fill:rgb(236,226,240)}
+.PuBuGn .q2-8{fill:rgb(208,209,230)}
+.PuBuGn .q3-8{fill:rgb(166,189,219)}
+.PuBuGn .q4-8{fill:rgb(103,169,207)}
+.PuBuGn .q5-8{fill:rgb(54,144,192)}
+.PuBuGn .q6-8{fill:rgb(2,129,138)}
+.PuBuGn .q7-8{fill:rgb(1,100,80)}
+.PuBuGn .q0-9{fill:rgb(255,247,251)}
+.PuBuGn .q1-9{fill:rgb(236,226,240)}
+.PuBuGn .q2-9{fill:rgb(208,209,230)}
+.PuBuGn .q3-9{fill:rgb(166,189,219)}
+.PuBuGn .q4-9{fill:rgb(103,169,207)}
+.PuBuGn .q5-9{fill:rgb(54,144,192)}
+.PuBuGn .q6-9{fill:rgb(2,129,138)}
+.PuBuGn .q7-9{fill:rgb(1,108,89)}
+.PuBuGn .q8-9{fill:rgb(1,70,54)}
+.PuBu .q0-3{fill:rgb(236,231,242)}
+.PuBu .q1-3{fill:rgb(166,189,219)}
+.PuBu .q2-3{fill:rgb(43,140,190)}
+.PuBu .q0-4{fill:rgb(241,238,246)}
+.PuBu .q1-4{fill:rgb(189,201,225)}
+.PuBu .q2-4{fill:rgb(116,169,207)}
+.PuBu .q3-4{fill:rgb(5,112,176)}
+.PuBu .q0-5{fill:rgb(241,238,246)}
+.PuBu .q1-5{fill:rgb(189,201,225)}
+.PuBu .q2-5{fill:rgb(116,169,207)}
+.PuBu .q3-5{fill:rgb(43,140,190)}
+.PuBu .q4-5{fill:rgb(4,90,141)}
+.PuBu .q0-6{fill:rgb(241,238,246)}
+.PuBu .q1-6{fill:rgb(208,209,230)}
+.PuBu .q2-6{fill:rgb(166,189,219)}
+.PuBu .q3-6{fill:rgb(116,169,207)}
+.PuBu .q4-6{fill:rgb(43,140,190)}
+.PuBu .q5-6{fill:rgb(4,90,141)}
+.PuBu .q0-7{fill:rgb(241,238,246)}
+.PuBu .q1-7{fill:rgb(208,209,230)}
+.PuBu .q2-7{fill:rgb(166,189,219)}
+.PuBu .q3-7{fill:rgb(116,169,207)}
+.PuBu .q4-7{fill:rgb(54,144,192)}
+.PuBu .q5-7{fill:rgb(5,112,176)}
+.PuBu .q6-7{fill:rgb(3,78,123)}
+.PuBu .q0-8{fill:rgb(255,247,251)}
+.PuBu .q1-8{fill:rgb(236,231,242)}
+.PuBu .q2-8{fill:rgb(208,209,230)}
+.PuBu .q3-8{fill:rgb(166,189,219)}
+.PuBu .q4-8{fill:rgb(116,169,207)}
+.PuBu .q5-8{fill:rgb(54,144,192)}
+.PuBu .q6-8{fill:rgb(5,112,176)}
+.PuBu .q7-8{fill:rgb(3,78,123)}
+.PuBu .q0-9{fill:rgb(255,247,251)}
+.PuBu .q1-9{fill:rgb(236,231,242)}
+.PuBu .q2-9{fill:rgb(208,209,230)}
+.PuBu .q3-9{fill:rgb(166,189,219)}
+.PuBu .q4-9{fill:rgb(116,169,207)}
+.PuBu .q5-9{fill:rgb(54,144,192)}
+.PuBu .q6-9{fill:rgb(5,112,176)}
+.PuBu .q7-9{fill:rgb(4,90,141)}
+.PuBu .q8-9{fill:rgb(2,56,88)}
+.BuPu .q0-3{fill:rgb(224,236,244)}
+.BuPu .q1-3{fill:rgb(158,188,218)}
+.BuPu .q2-3{fill:rgb(136,86,167)}
+.BuPu .q0-4{fill:rgb(237,248,251)}
+.BuPu .q1-4{fill:rgb(179,205,227)}
+.BuPu .q2-4{fill:rgb(140,150,198)}
+.BuPu .q3-4{fill:rgb(136,65,157)}
+.BuPu .q0-5{fill:rgb(237,248,251)}
+.BuPu .q1-5{fill:rgb(179,205,227)}
+.BuPu .q2-5{fill:rgb(140,150,198)}
+.BuPu .q3-5{fill:rgb(136,86,167)}
+.BuPu .q4-5{fill:rgb(129,15,124)}
+.BuPu .q0-6{fill:rgb(237,248,251)}
+.BuPu .q1-6{fill:rgb(191,211,230)}
+.BuPu .q2-6{fill:rgb(158,188,218)}
+.BuPu .q3-6{fill:rgb(140,150,198)}
+.BuPu .q4-6{fill:rgb(136,86,167)}
+.BuPu .q5-6{fill:rgb(129,15,124)}
+.BuPu .q0-7{fill:rgb(237,248,251)}
+.BuPu .q1-7{fill:rgb(191,211,230)}
+.BuPu .q2-7{fill:rgb(158,188,218)}
+.BuPu .q3-7{fill:rgb(140,150,198)}
+.BuPu .q4-7{fill:rgb(140,107,177)}
+.BuPu .q5-7{fill:rgb(136,65,157)}
+.BuPu .q6-7{fill:rgb(110,1,107)}
+.BuPu .q0-8{fill:rgb(247,252,253)}
+.BuPu .q1-8{fill:rgb(224,236,244)}
+.BuPu .q2-8{fill:rgb(191,211,230)}
+.BuPu .q3-8{fill:rgb(158,188,218)}
+.BuPu .q4-8{fill:rgb(140,150,198)}
+.BuPu .q5-8{fill:rgb(140,107,177)}
+.BuPu .q6-8{fill:rgb(136,65,157)}
+.BuPu .q7-8{fill:rgb(110,1,107)}
+.BuPu .q0-9{fill:rgb(247,252,253)}
+.BuPu .q1-9{fill:rgb(224,236,244)}
+.BuPu .q2-9{fill:rgb(191,211,230)}
+.BuPu .q3-9{fill:rgb(158,188,218)}
+.BuPu .q4-9{fill:rgb(140,150,198)}
+.BuPu .q5-9{fill:rgb(140,107,177)}
+.BuPu .q6-9{fill:rgb(136,65,157)}
+.BuPu .q7-9{fill:rgb(129,15,124)}
+.BuPu .q8-9{fill:rgb(77,0,75)}
+.RdPu .q0-3{fill:rgb(253,224,221)}
+.RdPu .q1-3{fill:rgb(250,159,181)}
+.RdPu .q2-3{fill:rgb(197,27,138)}
+.RdPu .q0-4{fill:rgb(254,235,226)}
+.RdPu .q1-4{fill:rgb(251,180,185)}
+.RdPu .q2-4{fill:rgb(247,104,161)}
+.RdPu .q3-4{fill:rgb(174,1,126)}
+.RdPu .q0-5{fill:rgb(254,235,226)}
+.RdPu .q1-5{fill:rgb(251,180,185)}
+.RdPu .q2-5{fill:rgb(247,104,161)}
+.RdPu .q3-5{fill:rgb(197,27,138)}
+.RdPu .q4-5{fill:rgb(122,1,119)}
+.RdPu .q0-6{fill:rgb(254,235,226)}
+.RdPu .q1-6{fill:rgb(252,197,192)}
+.RdPu .q2-6{fill:rgb(250,159,181)}
+.RdPu .q3-6{fill:rgb(247,104,161)}
+.RdPu .q4-6{fill:rgb(197,27,138)}
+.RdPu .q5-6{fill:rgb(122,1,119)}
+.RdPu .q0-7{fill:rgb(254,235,226)}
+.RdPu .q1-7{fill:rgb(252,197,192)}
+.RdPu .q2-7{fill:rgb(250,159,181)}
+.RdPu .q3-7{fill:rgb(247,104,161)}
+.RdPu .q4-7{fill:rgb(221,52,151)}
+.RdPu .q5-7{fill:rgb(174,1,126)}
+.RdPu .q6-7{fill:rgb(122,1,119)}
+.RdPu .q0-8{fill:rgb(255,247,243)}
+.RdPu .q1-8{fill:rgb(253,224,221)}
+.RdPu .q2-8{fill:rgb(252,197,192)}
+.RdPu .q3-8{fill:rgb(250,159,181)}
+.RdPu .q4-8{fill:rgb(247,104,161)}
+.RdPu .q5-8{fill:rgb(221,52,151)}
+.RdPu .q6-8{fill:rgb(174,1,126)}
+.RdPu .q7-8{fill:rgb(122,1,119)}
+.RdPu .q0-9{fill:rgb(255,247,243)}
+.RdPu .q1-9{fill:rgb(253,224,221)}
+.RdPu .q2-9{fill:rgb(252,197,192)}
+.RdPu .q3-9{fill:rgb(250,159,181)}
+.RdPu .q4-9{fill:rgb(247,104,161)}
+.RdPu .q5-9{fill:rgb(221,52,151)}
+.RdPu .q6-9{fill:rgb(174,1,126)}
+.RdPu .q7-9{fill:rgb(122,1,119)}
+.RdPu .q8-9{fill:rgb(73,0,106)}
+.PuRd .q0-3{fill:rgb(231,225,239)}
+.PuRd .q1-3{fill:rgb(201,148,199)}
+.PuRd .q2-3{fill:rgb(221,28,119)}
+.PuRd .q0-4{fill:rgb(241,238,246)}
+.PuRd .q1-4{fill:rgb(215,181,216)}
+.PuRd .q2-4{fill:rgb(223,101,176)}
+.PuRd .q3-4{fill:rgb(206,18,86)}
+.PuRd .q0-5{fill:rgb(241,238,246)}
+.PuRd .q1-5{fill:rgb(215,181,216)}
+.PuRd .q2-5{fill:rgb(223,101,176)}
+.PuRd .q3-5{fill:rgb(221,28,119)}
+.PuRd .q4-5{fill:rgb(152,0,67)}
+.PuRd .q0-6{fill:rgb(241,238,246)}
+.PuRd .q1-6{fill:rgb(212,185,218)}
+.PuRd .q2-6{fill:rgb(201,148,199)}
+.PuRd .q3-6{fill:rgb(223,101,176)}
+.PuRd .q4-6{fill:rgb(221,28,119)}
+.PuRd .q5-6{fill:rgb(152,0,67)}
+.PuRd .q0-7{fill:rgb(241,238,246)}
+.PuRd .q1-7{fill:rgb(212,185,218)}
+.PuRd .q2-7{fill:rgb(201,148,199)}
+.PuRd .q3-7{fill:rgb(223,101,176)}
+.PuRd .q4-7{fill:rgb(231,41,138)}
+.PuRd .q5-7{fill:rgb(206,18,86)}
+.PuRd .q6-7{fill:rgb(145,0,63)}
+.PuRd .q0-8{fill:rgb(247,244,249)}
+.PuRd .q1-8{fill:rgb(231,225,239)}
+.PuRd .q2-8{fill:rgb(212,185,218)}
+.PuRd .q3-8{fill:rgb(201,148,199)}
+.PuRd .q4-8{fill:rgb(223,101,176)}
+.PuRd .q5-8{fill:rgb(231,41,138)}
+.PuRd .q6-8{fill:rgb(206,18,86)}
+.PuRd .q7-8{fill:rgb(145,0,63)}
+.PuRd .q0-9{fill:rgb(247,244,249)}
+.PuRd .q1-9{fill:rgb(231,225,239)}
+.PuRd .q2-9{fill:rgb(212,185,218)}
+.PuRd .q3-9{fill:rgb(201,148,199)}
+.PuRd .q4-9{fill:rgb(223,101,176)}
+.PuRd .q5-9{fill:rgb(231,41,138)}
+.PuRd .q6-9{fill:rgb(206,18,86)}
+.PuRd .q7-9{fill:rgb(152,0,67)}
+.PuRd .q8-9{fill:rgb(103,0,31)}
+.OrRd .q0-3{fill:rgb(254,232,200)}
+.OrRd .q1-3{fill:rgb(253,187,132)}
+.OrRd .q2-3{fill:rgb(227,74,51)}
+.OrRd .q0-4{fill:rgb(254,240,217)}
+.OrRd .q1-4{fill:rgb(253,204,138)}
+.OrRd .q2-4{fill:rgb(252,141,89)}
+.OrRd .q3-4{fill:rgb(215,48,31)}
+.OrRd .q0-5{fill:rgb(254,240,217)}
+.OrRd .q1-5{fill:rgb(253,204,138)}
+.OrRd .q2-5{fill:rgb(252,141,89)}
+.OrRd .q3-5{fill:rgb(227,74,51)}
+.OrRd .q4-5{fill:rgb(179,0,0)}
+.OrRd .q0-6{fill:rgb(254,240,217)}
+.OrRd .q1-6{fill:rgb(253,212,158)}
+.OrRd .q2-6{fill:rgb(253,187,132)}
+.OrRd .q3-6{fill:rgb(252,141,89)}
+.OrRd .q4-6{fill:rgb(227,74,51)}
+.OrRd .q5-6{fill:rgb(179,0,0)}
+.OrRd .q0-7{fill:rgb(254,240,217)}
+.OrRd .q1-7{fill:rgb(253,212,158)}
+.OrRd .q2-7{fill:rgb(253,187,132)}
+.OrRd .q3-7{fill:rgb(252,141,89)}
+.OrRd .q4-7{fill:rgb(239,101,72)}
+.OrRd .q5-7{fill:rgb(215,48,31)}
+.OrRd .q6-7{fill:rgb(153,0,0)}
+.OrRd .q0-8{fill:rgb(255,247,236)}
+.OrRd .q1-8{fill:rgb(254,232,200)}
+.OrRd .q2-8{fill:rgb(253,212,158)}
+.OrRd .q3-8{fill:rgb(253,187,132)}
+.OrRd .q4-8{fill:rgb(252,141,89)}
+.OrRd .q5-8{fill:rgb(239,101,72)}
+.OrRd .q6-8{fill:rgb(215,48,31)}
+.OrRd .q7-8{fill:rgb(153,0,0)}
+.OrRd .q0-9{fill:rgb(255,247,236)}
+.OrRd .q1-9{fill:rgb(254,232,200)}
+.OrRd .q2-9{fill:rgb(253,212,158)}
+.OrRd .q3-9{fill:rgb(253,187,132)}
+.OrRd .q4-9{fill:rgb(252,141,89)}
+.OrRd .q5-9{fill:rgb(239,101,72)}
+.OrRd .q6-9{fill:rgb(215,48,31)}
+.OrRd .q7-9{fill:rgb(179,0,0)}
+.OrRd .q8-9{fill:rgb(127,0,0)}
+.YlOrRd .q0-3{fill:rgb(255,237,160)}
+.YlOrRd .q1-3{fill:rgb(254,178,76)}
+.YlOrRd .q2-3{fill:rgb(240,59,32)}
+.YlOrRd .q0-4{fill:rgb(255,255,178)}
+.YlOrRd .q1-4{fill:rgb(254,204,92)}
+.YlOrRd .q2-4{fill:rgb(253,141,60)}
+.YlOrRd .q3-4{fill:rgb(227,26,28)}
+.YlOrRd .q0-5{fill:rgb(255,255,178)}
+.YlOrRd .q1-5{fill:rgb(254,204,92)}
+.YlOrRd .q2-5{fill:rgb(253,141,60)}
+.YlOrRd .q3-5{fill:rgb(240,59,32)}
+.YlOrRd .q4-5{fill:rgb(189,0,38)}
+.YlOrRd .q0-6{fill:rgb(255,255,178)}
+.YlOrRd .q1-6{fill:rgb(254,217,118)}
+.YlOrRd .q2-6{fill:rgb(254,178,76)}
+.YlOrRd .q3-6{fill:rgb(253,141,60)}
+.YlOrRd .q4-6{fill:rgb(240,59,32)}
+.YlOrRd .q5-6{fill:rgb(189,0,38)}
+.YlOrRd .q0-7{fill:rgb(255,255,178)}
+.YlOrRd .q1-7{fill:rgb(254,217,118)}
+.YlOrRd .q2-7{fill:rgb(254,178,76)}
+.YlOrRd .q3-7{fill:rgb(253,141,60)}
+.YlOrRd .q4-7{fill:rgb(252,78,42)}
+.YlOrRd .q5-7{fill:rgb(227,26,28)}
+.YlOrRd .q6-7{fill:rgb(177,0,38)}
+.YlOrRd .q0-8{fill:rgb(255,255,204)}
+.YlOrRd .q1-8{fill:rgb(255,237,160)}
+.YlOrRd .q2-8{fill:rgb(254,217,118)}
+.YlOrRd .q3-8{fill:rgb(254,178,76)}
+.YlOrRd .q4-8{fill:rgb(253,141,60)}
+.YlOrRd .q5-8{fill:rgb(252,78,42)}
+.YlOrRd .q6-8{fill:rgb(227,26,28)}
+.YlOrRd .q7-8{fill:rgb(177,0,38)}
+.YlOrRd .q0-9{fill:rgb(255,255,204)}
+.YlOrRd .q1-9{fill:rgb(255,237,160)}
+.YlOrRd .q2-9{fill:rgb(254,217,118)}
+.YlOrRd .q3-9{fill:rgb(254,178,76)}
+.YlOrRd .q4-9{fill:rgb(253,141,60)}
+.YlOrRd .q5-9{fill:rgb(252,78,42)}
+.YlOrRd .q6-9{fill:rgb(227,26,28)}
+.YlOrRd .q7-9{fill:rgb(189,0,38)}
+.YlOrRd .q8-9{fill:rgb(128,0,38)}
+.YlOrBr .q0-3{fill:rgb(255,247,188)}
+.YlOrBr .q1-3{fill:rgb(254,196,79)}
+.YlOrBr .q2-3{fill:rgb(217,95,14)}
+.YlOrBr .q0-4{fill:rgb(255,255,212)}
+.YlOrBr .q1-4{fill:rgb(254,217,142)}
+.YlOrBr .q2-4{fill:rgb(254,153,41)}
+.YlOrBr .q3-4{fill:rgb(204,76,2)}
+.YlOrBr .q0-5{fill:rgb(255,255,212)}
+.YlOrBr .q1-5{fill:rgb(254,217,142)}
+.YlOrBr .q2-5{fill:rgb(254,153,41)}
+.YlOrBr .q3-5{fill:rgb(217,95,14)}
+.YlOrBr .q4-5{fill:rgb(153,52,4)}
+.YlOrBr .q0-6{fill:rgb(255,255,212)}
+.YlOrBr .q1-6{fill:rgb(254,227,145)}
+.YlOrBr .q2-6{fill:rgb(254,196,79)}
+.YlOrBr .q3-6{fill:rgb(254,153,41)}
+.YlOrBr .q4-6{fill:rgb(217,95,14)}
+.YlOrBr .q5-6{fill:rgb(153,52,4)}
+.YlOrBr .q0-7{fill:rgb(255,255,212)}
+.YlOrBr .q1-7{fill:rgb(254,227,145)}
+.YlOrBr .q2-7{fill:rgb(254,196,79)}
+.YlOrBr .q3-7{fill:rgb(254,153,41)}
+.YlOrBr .q4-7{fill:rgb(236,112,20)}
+.YlOrBr .q5-7{fill:rgb(204,76,2)}
+.YlOrBr .q6-7{fill:rgb(140,45,4)}
+.YlOrBr .q0-8{fill:rgb(255,255,229)}
+.YlOrBr .q1-8{fill:rgb(255,247,188)}
+.YlOrBr .q2-8{fill:rgb(254,227,145)}
+.YlOrBr .q3-8{fill:rgb(254,196,79)}
+.YlOrBr .q4-8{fill:rgb(254,153,41)}
+.YlOrBr .q5-8{fill:rgb(236,112,20)}
+.YlOrBr .q6-8{fill:rgb(204,76,2)}
+.YlOrBr .q7-8{fill:rgb(140,45,4)}
+.YlOrBr .q0-9{fill:rgb(255,255,229)}
+.YlOrBr .q1-9{fill:rgb(255,247,188)}
+.YlOrBr .q2-9{fill:rgb(254,227,145)}
+.YlOrBr .q3-9{fill:rgb(254,196,79)}
+.YlOrBr .q4-9{fill:rgb(254,153,41)}
+.YlOrBr .q5-9{fill:rgb(236,112,20)}
+.YlOrBr .q6-9{fill:rgb(204,76,2)}
+.YlOrBr .q7-9{fill:rgb(153,52,4)}
+.YlOrBr .q8-9{fill:rgb(102,37,6)}
+.Purples .q0-3{fill:rgb(239,237,245)}
+.Purples .q1-3{fill:rgb(188,189,220)}
+.Purples .q2-3{fill:rgb(117,107,177)}
+.Purples .q0-4{fill:rgb(242,240,247)}
+.Purples .q1-4{fill:rgb(203,201,226)}
+.Purples .q2-4{fill:rgb(158,154,200)}
+.Purples .q3-4{fill:rgb(106,81,163)}
+.Purples .q0-5{fill:rgb(242,240,247)}
+.Purples .q1-5{fill:rgb(203,201,226)}
+.Purples .q2-5{fill:rgb(158,154,200)}
+.Purples .q3-5{fill:rgb(117,107,177)}
+.Purples .q4-5{fill:rgb(84,39,143)}
+.Purples .q0-6{fill:rgb(242,240,247)}
+.Purples .q1-6{fill:rgb(218,218,235)}
+.Purples .q2-6{fill:rgb(188,189,220)}
+.Purples .q3-6{fill:rgb(158,154,200)}
+.Purples .q4-6{fill:rgb(117,107,177)}
+.Purples .q5-6{fill:rgb(84,39,143)}
+.Purples .q0-7{fill:rgb(242,240,247)}
+.Purples .q1-7{fill:rgb(218,218,235)}
+.Purples .q2-7{fill:rgb(188,189,220)}
+.Purples .q3-7{fill:rgb(158,154,200)}
+.Purples .q4-7{fill:rgb(128,125,186)}
+.Purples .q5-7{fill:rgb(106,81,163)}
+.Purples .q6-7{fill:rgb(74,20,134)}
+.Purples .q0-8{fill:rgb(252,251,253)}
+.Purples .q1-8{fill:rgb(239,237,245)}
+.Purples .q2-8{fill:rgb(218,218,235)}
+.Purples .q3-8{fill:rgb(188,189,220)}
+.Purples .q4-8{fill:rgb(158,154,200)}
+.Purples .q5-8{fill:rgb(128,125,186)}
+.Purples .q6-8{fill:rgb(106,81,163)}
+.Purples .q7-8{fill:rgb(74,20,134)}
+.Purples .q0-9{fill:rgb(252,251,253)}
+.Purples .q1-9{fill:rgb(239,237,245)}
+.Purples .q2-9{fill:rgb(218,218,235)}
+.Purples .q3-9{fill:rgb(188,189,220)}
+.Purples .q4-9{fill:rgb(158,154,200)}
+.Purples .q5-9{fill:rgb(128,125,186)}
+.Purples .q6-9{fill:rgb(106,81,163)}
+.Purples .q7-9{fill:rgb(84,39,143)}
+.Purples .q8-9{fill:rgb(63,0,125)}
+.Blues .q0-3{fill:rgb(222,235,247)}
+.Blues .q1-3{fill:rgb(158,202,225)}
+.Blues .q2-3{fill:rgb(49,130,189)}
+.Blues .q0-4{fill:rgb(239,243,255)}
+.Blues .q1-4{fill:rgb(189,215,231)}
+.Blues .q2-4{fill:rgb(107,174,214)}
+.Blues .q3-4{fill:rgb(33,113,181)}
+.Blues .q0-5{fill:rgb(239,243,255)}
+.Blues .q1-5{fill:rgb(189,215,231)}
+.Blues .q2-5{fill:rgb(107,174,214)}
+.Blues .q3-5{fill:rgb(49,130,189)}
+.Blues .q4-5{fill:rgb(8,81,156)}
+.Blues .q0-6{fill:rgb(239,243,255)}
+.Blues .q1-6{fill:rgb(198,219,239)}
+.Blues .q2-6{fill:rgb(158,202,225)}
+.Blues .q3-6{fill:rgb(107,174,214)}
+.Blues .q4-6{fill:rgb(49,130,189)}
+.Blues .q5-6{fill:rgb(8,81,156)}
+.Blues .q0-7{fill:rgb(239,243,255)}
+.Blues .q1-7{fill:rgb(198,219,239)}
+.Blues .q2-7{fill:rgb(158,202,225)}
+.Blues .q3-7{fill:rgb(107,174,214)}
+.Blues .q4-7{fill:rgb(66,146,198)}
+.Blues .q5-7{fill:rgb(33,113,181)}
+.Blues .q6-7{fill:rgb(8,69,148)}
+.Blues .q0-8{fill:rgb(247,251,255)}
+.Blues .q1-8{fill:rgb(222,235,247)}
+.Blues .q2-8{fill:rgb(198,219,239)}
+.Blues .q3-8{fill:rgb(158,202,225)}
+.Blues .q4-8{fill:rgb(107,174,214)}
+.Blues .q5-8{fill:rgb(66,146,198)}
+.Blues .q6-8{fill:rgb(33,113,181)}
+.Blues .q7-8{fill:rgb(8,69,148)}
+.Blues .q0-9{fill:rgb(247,251,255)}
+.Blues .q1-9{fill:rgb(222,235,247)}
+.Blues .q2-9{fill:rgb(198,219,239)}
+.Blues .q3-9{fill:rgb(158,202,225)}
+.Blues .q4-9{fill:rgb(107,174,214)}
+.Blues .q5-9{fill:rgb(66,146,198)}
+.Blues .q6-9{fill:rgb(33,113,181)}
+.Blues .q7-9{fill:rgb(8,81,156)}
+.Blues .q8-9{fill:rgb(8,48,107)}
+.Greens .q0-3{fill:rgb(229,245,224)}
+.Greens .q1-3{fill:rgb(161,217,155)}
+.Greens .q2-3{fill:rgb(49,163,84)}
+.Greens .q0-4{fill:rgb(237,248,233)}
+.Greens .q1-4{fill:rgb(186,228,179)}
+.Greens .q2-4{fill:rgb(116,196,118)}
+.Greens .q3-4{fill:rgb(35,139,69)}
+.Greens .q0-5{fill:rgb(237,248,233)}
+.Greens .q1-5{fill:rgb(186,228,179)}
+.Greens .q2-5{fill:rgb(116,196,118)}
+.Greens .q3-5{fill:rgb(49,163,84)}
+.Greens .q4-5{fill:rgb(0,109,44)}
+.Greens .q0-6{fill:rgb(237,248,233)}
+.Greens .q1-6{fill:rgb(199,233,192)}
+.Greens .q2-6{fill:rgb(161,217,155)}
+.Greens .q3-6{fill:rgb(116,196,118)}
+.Greens .q4-6{fill:rgb(49,163,84)}
+.Greens .q5-6{fill:rgb(0,109,44)}
+.Greens .q0-7{fill:rgb(237,248,233)}
+.Greens .q1-7{fill:rgb(199,233,192)}
+.Greens .q2-7{fill:rgb(161,217,155)}
+.Greens .q3-7{fill:rgb(116,196,118)}
+.Greens .q4-7{fill:rgb(65,171,93)}
+.Greens .q5-7{fill:rgb(35,139,69)}
+.Greens .q6-7{fill:rgb(0,90,50)}
+.Greens .q0-8{fill:rgb(247,252,245)}
+.Greens .q1-8{fill:rgb(229,245,224)}
+.Greens .q2-8{fill:rgb(199,233,192)}
+.Greens .q3-8{fill:rgb(161,217,155)}
+.Greens .q4-8{fill:rgb(116,196,118)}
+.Greens .q5-8{fill:rgb(65,171,93)}
+.Greens .q6-8{fill:rgb(35,139,69)}
+.Greens .q7-8{fill:rgb(0,90,50)}
+.Greens .q0-9{fill:rgb(247,252,245)}
+.Greens .q1-9{fill:rgb(229,245,224)}
+.Greens .q2-9{fill:rgb(199,233,192)}
+.Greens .q3-9{fill:rgb(161,217,155)}
+.Greens .q4-9{fill:rgb(116,196,118)}
+.Greens .q5-9{fill:rgb(65,171,93)}
+.Greens .q6-9{fill:rgb(35,139,69)}
+.Greens .q7-9{fill:rgb(0,109,44)}
+.Greens .q8-9{fill:rgb(0,68,27)}
+.Oranges .q0-3{fill:rgb(254,230,206)}
+.Oranges .q1-3{fill:rgb(253,174,107)}
+.Oranges .q2-3{fill:rgb(230,85,13)}
+.Oranges .q0-4{fill:rgb(254,237,222)}
+.Oranges .q1-4{fill:rgb(253,190,133)}
+.Oranges .q2-4{fill:rgb(253,141,60)}
+.Oranges .q3-4{fill:rgb(217,71,1)}
+.Oranges .q0-5{fill:rgb(254,237,222)}
+.Oranges .q1-5{fill:rgb(253,190,133)}
+.Oranges .q2-5{fill:rgb(253,141,60)}
+.Oranges .q3-5{fill:rgb(230,85,13)}
+.Oranges .q4-5{fill:rgb(166,54,3)}
+.Oranges .q0-6{fill:rgb(254,237,222)}
+.Oranges .q1-6{fill:rgb(253,208,162)}
+.Oranges .q2-6{fill:rgb(253,174,107)}
+.Oranges .q3-6{fill:rgb(253,141,60)}
+.Oranges .q4-6{fill:rgb(230,85,13)}
+.Oranges .q5-6{fill:rgb(166,54,3)}
+.Oranges .q0-7{fill:rgb(254,237,222)}
+.Oranges .q1-7{fill:rgb(253,208,162)}
+.Oranges .q2-7{fill:rgb(253,174,107)}
+.Oranges .q3-7{fill:rgb(253,141,60)}
+.Oranges .q4-7{fill:rgb(241,105,19)}
+.Oranges .q5-7{fill:rgb(217,72,1)}
+.Oranges .q6-7{fill:rgb(140,45,4)}
+.Oranges .q0-8{fill:rgb(255,245,235)}
+.Oranges .q1-8{fill:rgb(254,230,206)}
+.Oranges .q2-8{fill:rgb(253,208,162)}
+.Oranges .q3-8{fill:rgb(253,174,107)}
+.Oranges .q4-8{fill:rgb(253,141,60)}
+.Oranges .q5-8{fill:rgb(241,105,19)}
+.Oranges .q6-8{fill:rgb(217,72,1)}
+.Oranges .q7-8{fill:rgb(140,45,4)}
+.Oranges .q0-9{fill:rgb(255,245,235)}
+.Oranges .q1-9{fill:rgb(254,230,206)}
+.Oranges .q2-9{fill:rgb(253,208,162)}
+.Oranges .q3-9{fill:rgb(253,174,107)}
+.Oranges .q4-9{fill:rgb(253,141,60)}
+.Oranges .q5-9{fill:rgb(241,105,19)}
+.Oranges .q6-9{fill:rgb(217,72,1)}
+.Oranges .q7-9{fill:rgb(166,54,3)}
+.Oranges .q8-9{fill:rgb(127,39,4)}
+.Reds .q0-3{fill:rgb(254,224,210)}
+.Reds .q1-3{fill:rgb(252,146,114)}
+.Reds .q2-3{fill:rgb(222,45,38)}
+.Reds .q0-4{fill:rgb(254,229,217)}
+.Reds .q1-4{fill:rgb(252,174,145)}
+.Reds .q2-4{fill:rgb(251,106,74)}
+.Reds .q3-4{fill:rgb(203,24,29)}
+.Reds .q0-5{fill:rgb(254,229,217)}
+.Reds .q1-5{fill:rgb(252,174,145)}
+.Reds .q2-5{fill:rgb(251,106,74)}
+.Reds .q3-5{fill:rgb(222,45,38)}
+.Reds .q4-5{fill:rgb(165,15,21)}
+.Reds .q0-6{fill:rgb(254,229,217)}
+.Reds .q1-6{fill:rgb(252,187,161)}
+.Reds .q2-6{fill:rgb(252,146,114)}
+.Reds .q3-6{fill:rgb(251,106,74)}
+.Reds .q4-6{fill:rgb(222,45,38)}
+.Reds .q5-6{fill:rgb(165,15,21)}
+.Reds .q0-7{fill:rgb(254,229,217)}
+.Reds .q1-7{fill:rgb(252,187,161)}
+.Reds .q2-7{fill:rgb(252,146,114)}
+.Reds .q3-7{fill:rgb(251,106,74)}
+.Reds .q4-7{fill:rgb(239,59,44)}
+.Reds .q5-7{fill:rgb(203,24,29)}
+.Reds .q6-7{fill:rgb(153,0,13)}
+.Reds .q0-8{fill:rgb(255,245,240)}
+.Reds .q1-8{fill:rgb(254,224,210)}
+.Reds .q2-8{fill:rgb(252,187,161)}
+.Reds .q3-8{fill:rgb(252,146,114)}
+.Reds .q4-8{fill:rgb(251,106,74)}
+.Reds .q5-8{fill:rgb(239,59,44)}
+.Reds .q6-8{fill:rgb(203,24,29)}
+.Reds .q7-8{fill:rgb(153,0,13)}
+.Reds .q0-9{fill:rgb(255,245,240)}
+.Reds .q1-9{fill:rgb(254,224,210)}
+.Reds .q2-9{fill:rgb(252,187,161)}
+.Reds .q3-9{fill:rgb(252,146,114)}
+.Reds .q4-9{fill:rgb(251,106,74)}
+.Reds .q5-9{fill:rgb(239,59,44)}
+.Reds .q6-9{fill:rgb(203,24,29)}
+.Reds .q7-9{fill:rgb(165,15,21)}
+.Reds .q8-9{fill:rgb(103,0,13)}
+.Greys .q0-3{fill:rgb(240,240,240)}
+.Greys .q1-3{fill:rgb(189,189,189)}
+.Greys .q2-3{fill:rgb(99,99,99)}
+.Greys .q0-4{fill:rgb(247,247,247)}
+.Greys .q1-4{fill:rgb(204,204,204)}
+.Greys .q2-4{fill:rgb(150,150,150)}
+.Greys .q3-4{fill:rgb(82,82,82)}
+.Greys .q0-5{fill:rgb(247,247,247)}
+.Greys .q1-5{fill:rgb(204,204,204)}
+.Greys .q2-5{fill:rgb(150,150,150)}
+.Greys .q3-5{fill:rgb(99,99,99)}
+.Greys .q4-5{fill:rgb(37,37,37)}
+.Greys .q0-6{fill:rgb(247,247,247)}
+.Greys .q1-6{fill:rgb(217,217,217)}
+.Greys .q2-6{fill:rgb(189,189,189)}
+.Greys .q3-6{fill:rgb(150,150,150)}
+.Greys .q4-6{fill:rgb(99,99,99)}
+.Greys .q5-6{fill:rgb(37,37,37)}
+.Greys .q0-7{fill:rgb(247,247,247)}
+.Greys .q1-7{fill:rgb(217,217,217)}
+.Greys .q2-7{fill:rgb(189,189,189)}
+.Greys .q3-7{fill:rgb(150,150,150)}
+.Greys .q4-7{fill:rgb(115,115,115)}
+.Greys .q5-7{fill:rgb(82,82,82)}
+.Greys .q6-7{fill:rgb(37,37,37)}
+.Greys .q0-8{fill:rgb(255,255,255)}
+.Greys .q1-8{fill:rgb(240,240,240)}
+.Greys .q2-8{fill:rgb(217,217,217)}
+.Greys .q3-8{fill:rgb(189,189,189)}
+.Greys .q4-8{fill:rgb(150,150,150)}
+.Greys .q5-8{fill:rgb(115,115,115)}
+.Greys .q6-8{fill:rgb(82,82,82)}
+.Greys .q7-8{fill:rgb(37,37,37)}
+.Greys .q0-9{fill:rgb(255,255,255)}
+.Greys .q1-9{fill:rgb(240,240,240)}
+.Greys .q2-9{fill:rgb(217,217,217)}
+.Greys .q3-9{fill:rgb(189,189,189)}
+.Greys .q4-9{fill:rgb(150,150,150)}
+.Greys .q5-9{fill:rgb(115,115,115)}
+.Greys .q6-9{fill:rgb(82,82,82)}
+.Greys .q7-9{fill:rgb(37,37,37)}
+.Greys .q8-9{fill:rgb(0,0,0)}
+.PuOr .q0-3{fill:rgb(241,163,64)}
+.PuOr .q1-3{fill:rgb(247,247,247)}
+.PuOr .q2-3{fill:rgb(153,142,195)}
+.PuOr .q0-4{fill:rgb(230,97,1)}
+.PuOr .q1-4{fill:rgb(253,184,99)}
+.PuOr .q2-4{fill:rgb(178,171,210)}
+.PuOr .q3-4{fill:rgb(94,60,153)}
+.PuOr .q0-5{fill:rgb(230,97,1)}
+.PuOr .q1-5{fill:rgb(253,184,99)}
+.PuOr .q2-5{fill:rgb(247,247,247)}
+.PuOr .q3-5{fill:rgb(178,171,210)}
+.PuOr .q4-5{fill:rgb(94,60,153)}
+.PuOr .q0-6{fill:rgb(179,88,6)}
+.PuOr .q1-6{fill:rgb(241,163,64)}
+.PuOr .q2-6{fill:rgb(254,224,182)}
+.PuOr .q3-6{fill:rgb(216,218,235)}
+.PuOr .q4-6{fill:rgb(153,142,195)}
+.PuOr .q5-6{fill:rgb(84,39,136)}
+.PuOr .q0-7{fill:rgb(179,88,6)}
+.PuOr .q1-7{fill:rgb(241,163,64)}
+.PuOr .q2-7{fill:rgb(254,224,182)}
+.PuOr .q3-7{fill:rgb(247,247,247)}
+.PuOr .q4-7{fill:rgb(216,218,235)}
+.PuOr .q5-7{fill:rgb(153,142,195)}
+.PuOr .q6-7{fill:rgb(84,39,136)}
+.PuOr .q0-8{fill:rgb(179,88,6)}
+.PuOr .q1-8{fill:rgb(224,130,20)}
+.PuOr .q2-8{fill:rgb(253,184,99)}
+.PuOr .q3-8{fill:rgb(254,224,182)}
+.PuOr .q4-8{fill:rgb(216,218,235)}
+.PuOr .q5-8{fill:rgb(178,171,210)}
+.PuOr .q6-8{fill:rgb(128,115,172)}
+.PuOr .q7-8{fill:rgb(84,39,136)}
+.PuOr .q0-9{fill:rgb(179,88,6)}
+.PuOr .q1-9{fill:rgb(224,130,20)}
+.PuOr .q2-9{fill:rgb(253,184,99)}
+.PuOr .q3-9{fill:rgb(254,224,182)}
+.PuOr .q4-9{fill:rgb(247,247,247)}
+.PuOr .q5-9{fill:rgb(216,218,235)}
+.PuOr .q6-9{fill:rgb(178,171,210)}
+.PuOr .q7-9{fill:rgb(128,115,172)}
+.PuOr .q8-9{fill:rgb(84,39,136)}
+.PuOr .q0-10{fill:rgb(127,59,8)}
+.PuOr .q1-10{fill:rgb(179,88,6)}
+.PuOr .q2-10{fill:rgb(224,130,20)}
+.PuOr .q3-10{fill:rgb(253,184,99)}
+.PuOr .q4-10{fill:rgb(254,224,182)}
+.PuOr .q5-10{fill:rgb(216,218,235)}
+.PuOr .q6-10{fill:rgb(178,171,210)}
+.PuOr .q7-10{fill:rgb(128,115,172)}
+.PuOr .q8-10{fill:rgb(84,39,136)}
+.PuOr .q9-10{fill:rgb(45,0,75)}
+.PuOr .q0-11{fill:rgb(127,59,8)}
+.PuOr .q1-11{fill:rgb(179,88,6)}
+.PuOr .q2-11{fill:rgb(224,130,20)}
+.PuOr .q3-11{fill:rgb(253,184,99)}
+.PuOr .q4-11{fill:rgb(254,224,182)}
+.PuOr .q5-11{fill:rgb(247,247,247)}
+.PuOr .q6-11{fill:rgb(216,218,235)}
+.PuOr .q7-11{fill:rgb(178,171,210)}
+.PuOr .q8-11{fill:rgb(128,115,172)}
+.PuOr .q9-11{fill:rgb(84,39,136)}
+.PuOr .q10-11{fill:rgb(45,0,75)}
+.BrBG .q0-3{fill:rgb(216,179,101)}
+.BrBG .q1-3{fill:rgb(245,245,245)}
+.BrBG .q2-3{fill:rgb(90,180,172)}
+.BrBG .q0-4{fill:rgb(166,97,26)}
+.BrBG .q1-4{fill:rgb(223,194,125)}
+.BrBG .q2-4{fill:rgb(128,205,193)}
+.BrBG .q3-4{fill:rgb(1,133,113)}
+.BrBG .q0-5{fill:rgb(166,97,26)}
+.BrBG .q1-5{fill:rgb(223,194,125)}
+.BrBG .q2-5{fill:rgb(245,245,245)}
+.BrBG .q3-5{fill:rgb(128,205,193)}
+.BrBG .q4-5{fill:rgb(1,133,113)}
+.BrBG .q0-6{fill:rgb(140,81,10)}
+.BrBG .q1-6{fill:rgb(216,179,101)}
+.BrBG .q2-6{fill:rgb(246,232,195)}
+.BrBG .q3-6{fill:rgb(199,234,229)}
+.BrBG .q4-6{fill:rgb(90,180,172)}
+.BrBG .q5-6{fill:rgb(1,102,94)}
+.BrBG .q0-7{fill:rgb(140,81,10)}
+.BrBG .q1-7{fill:rgb(216,179,101)}
+.BrBG .q2-7{fill:rgb(246,232,195)}
+.BrBG .q3-7{fill:rgb(245,245,245)}
+.BrBG .q4-7{fill:rgb(199,234,229)}
+.BrBG .q5-7{fill:rgb(90,180,172)}
+.BrBG .q6-7{fill:rgb(1,102,94)}
+.BrBG .q0-8{fill:rgb(140,81,10)}
+.BrBG .q1-8{fill:rgb(191,129,45)}
+.BrBG .q2-8{fill:rgb(223,194,125)}
+.BrBG .q3-8{fill:rgb(246,232,195)}
+.BrBG .q4-8{fill:rgb(199,234,229)}
+.BrBG .q5-8{fill:rgb(128,205,193)}
+.BrBG .q6-8{fill:rgb(53,151,143)}
+.BrBG .q7-8{fill:rgb(1,102,94)}
+.BrBG .q0-9{fill:rgb(140,81,10)}
+.BrBG .q1-9{fill:rgb(191,129,45)}
+.BrBG .q2-9{fill:rgb(223,194,125)}
+.BrBG .q3-9{fill:rgb(246,232,195)}
+.BrBG .q4-9{fill:rgb(245,245,245)}
+.BrBG .q5-9{fill:rgb(199,234,229)}
+.BrBG .q6-9{fill:rgb(128,205,193)}
+.BrBG .q7-9{fill:rgb(53,151,143)}
+.BrBG .q8-9{fill:rgb(1,102,94)}
+.BrBG .q0-10{fill:rgb(84,48,5)}
+.BrBG .q1-10{fill:rgb(140,81,10)}
+.BrBG .q2-10{fill:rgb(191,129,45)}
+.BrBG .q3-10{fill:rgb(223,194,125)}
+.BrBG .q4-10{fill:rgb(246,232,195)}
+.BrBG .q5-10{fill:rgb(199,234,229)}
+.BrBG .q6-10{fill:rgb(128,205,193)}
+.BrBG .q7-10{fill:rgb(53,151,143)}
+.BrBG .q8-10{fill:rgb(1,102,94)}
+.BrBG .q9-10{fill:rgb(0,60,48)}
+.BrBG .q0-11{fill:rgb(84,48,5)}
+.BrBG .q1-11{fill:rgb(140,81,10)}
+.BrBG .q2-11{fill:rgb(191,129,45)}
+.BrBG .q3-11{fill:rgb(223,194,125)}
+.BrBG .q4-11{fill:rgb(246,232,195)}
+.BrBG .q5-11{fill:rgb(245,245,245)}
+.BrBG .q6-11{fill:rgb(199,234,229)}
+.BrBG .q7-11{fill:rgb(128,205,193)}
+.BrBG .q8-11{fill:rgb(53,151,143)}
+.BrBG .q9-11{fill:rgb(1,102,94)}
+.BrBG .q10-11{fill:rgb(0,60,48)}
+.PRGn .q0-3{fill:rgb(175,141,195)}
+.PRGn .q1-3{fill:rgb(247,247,247)}
+.PRGn .q2-3{fill:rgb(127,191,123)}
+.PRGn .q0-4{fill:rgb(123,50,148)}
+.PRGn .q1-4{fill:rgb(194,165,207)}
+.PRGn .q2-4{fill:rgb(166,219,160)}
+.PRGn .q3-4{fill:rgb(0,136,55)}
+.PRGn .q0-5{fill:rgb(123,50,148)}
+.PRGn .q1-5{fill:rgb(194,165,207)}
+.PRGn .q2-5{fill:rgb(247,247,247)}
+.PRGn .q3-5{fill:rgb(166,219,160)}
+.PRGn .q4-5{fill:rgb(0,136,55)}
+.PRGn .q0-6{fill:rgb(118,42,131)}
+.PRGn .q1-6{fill:rgb(175,141,195)}
+.PRGn .q2-6{fill:rgb(231,212,232)}
+.PRGn .q3-6{fill:rgb(217,240,211)}
+.PRGn .q4-6{fill:rgb(127,191,123)}
+.PRGn .q5-6{fill:rgb(27,120,55)}
+.PRGn .q0-7{fill:rgb(118,42,131)}
+.PRGn .q1-7{fill:rgb(175,141,195)}
+.PRGn .q2-7{fill:rgb(231,212,232)}
+.PRGn .q3-7{fill:rgb(247,247,247)}
+.PRGn .q4-7{fill:rgb(217,240,211)}
+.PRGn .q5-7{fill:rgb(127,191,123)}
+.PRGn .q6-7{fill:rgb(27,120,55)}
+.PRGn .q0-8{fill:rgb(118,42,131)}
+.PRGn .q1-8{fill:rgb(153,112,171)}
+.PRGn .q2-8{fill:rgb(194,165,207)}
+.PRGn .q3-8{fill:rgb(231,212,232)}
+.PRGn .q4-8{fill:rgb(217,240,211)}
+.PRGn .q5-8{fill:rgb(166,219,160)}
+.PRGn .q6-8{fill:rgb(90,174,97)}
+.PRGn .q7-8{fill:rgb(27,120,55)}
+.PRGn .q0-9{fill:rgb(118,42,131)}
+.PRGn .q1-9{fill:rgb(153,112,171)}
+.PRGn .q2-9{fill:rgb(194,165,207)}
+.PRGn .q3-9{fill:rgb(231,212,232)}
+.PRGn .q4-9{fill:rgb(247,247,247)}
+.PRGn .q5-9{fill:rgb(217,240,211)}
+.PRGn .q6-9{fill:rgb(166,219,160)}
+.PRGn .q7-9{fill:rgb(90,174,97)}
+.PRGn .q8-9{fill:rgb(27,120,55)}
+.PRGn .q0-10{fill:rgb(64,0,75)}
+.PRGn .q1-10{fill:rgb(118,42,131)}
+.PRGn .q2-10{fill:rgb(153,112,171)}
+.PRGn .q3-10{fill:rgb(194,165,207)}
+.PRGn .q4-10{fill:rgb(231,212,232)}
+.PRGn .q5-10{fill:rgb(217,240,211)}
+.PRGn .q6-10{fill:rgb(166,219,160)}
+.PRGn .q7-10{fill:rgb(90,174,97)}
+.PRGn .q8-10{fill:rgb(27,120,55)}
+.PRGn .q9-10{fill:rgb(0,68,27)}
+.PRGn .q0-11{fill:rgb(64,0,75)}
+.PRGn .q1-11{fill:rgb(118,42,131)}
+.PRGn .q2-11{fill:rgb(153,112,171)}
+.PRGn .q3-11{fill:rgb(194,165,207)}
+.PRGn .q4-11{fill:rgb(231,212,232)}
+.PRGn .q5-11{fill:rgb(247,247,247)}
+.PRGn .q6-11{fill:rgb(217,240,211)}
+.PRGn .q7-11{fill:rgb(166,219,160)}
+.PRGn .q8-11{fill:rgb(90,174,97)}
+.PRGn .q9-11{fill:rgb(27,120,55)}
+.PRGn .q10-11{fill:rgb(0,68,27)}
+.PiYG .q0-3{fill:rgb(233,163,201)}
+.PiYG .q1-3{fill:rgb(247,247,247)}
+.PiYG .q2-3{fill:rgb(161,215,106)}
+.PiYG .q0-4{fill:rgb(208,28,139)}
+.PiYG .q1-4{fill:rgb(241,182,218)}
+.PiYG .q2-4{fill:rgb(184,225,134)}
+.PiYG .q3-4{fill:rgb(77,172,38)}
+.PiYG .q0-5{fill:rgb(208,28,139)}
+.PiYG .q1-5{fill:rgb(241,182,218)}
+.PiYG .q2-5{fill:rgb(247,247,247)}
+.PiYG .q3-5{fill:rgb(184,225,134)}
+.PiYG .q4-5{fill:rgb(77,172,38)}
+.PiYG .q0-6{fill:rgb(197,27,125)}
+.PiYG .q1-6{fill:rgb(233,163,201)}
+.PiYG .q2-6{fill:rgb(253,224,239)}
+.PiYG .q3-6{fill:rgb(230,245,208)}
+.PiYG .q4-6{fill:rgb(161,215,106)}
+.PiYG .q5-6{fill:rgb(77,146,33)}
+.PiYG .q0-7{fill:rgb(197,27,125)}
+.PiYG .q1-7{fill:rgb(233,163,201)}
+.PiYG .q2-7{fill:rgb(253,224,239)}
+.PiYG .q3-7{fill:rgb(247,247,247)}
+.PiYG .q4-7{fill:rgb(230,245,208)}
+.PiYG .q5-7{fill:rgb(161,215,106)}
+.PiYG .q6-7{fill:rgb(77,146,33)}
+.PiYG .q0-8{fill:rgb(197,27,125)}
+.PiYG .q1-8{fill:rgb(222,119,174)}
+.PiYG .q2-8{fill:rgb(241,182,218)}
+.PiYG .q3-8{fill:rgb(253,224,239)}
+.PiYG .q4-8{fill:rgb(230,245,208)}
+.PiYG .q5-8{fill:rgb(184,225,134)}
+.PiYG .q6-8{fill:rgb(127,188,65)}
+.PiYG .q7-8{fill:rgb(77,146,33)}
+.PiYG .q0-9{fill:rgb(197,27,125)}
+.PiYG .q1-9{fill:rgb(222,119,174)}
+.PiYG .q2-9{fill:rgb(241,182,218)}
+.PiYG .q3-9{fill:rgb(253,224,239)}
+.PiYG .q4-9{fill:rgb(247,247,247)}
+.PiYG .q5-9{fill:rgb(230,245,208)}
+.PiYG .q6-9{fill:rgb(184,225,134)}
+.PiYG .q7-9{fill:rgb(127,188,65)}
+.PiYG .q8-9{fill:rgb(77,146,33)}
+.PiYG .q0-10{fill:rgb(142,1,82)}
+.PiYG .q1-10{fill:rgb(197,27,125)}
+.PiYG .q2-10{fill:rgb(222,119,174)}
+.PiYG .q3-10{fill:rgb(241,182,218)}
+.PiYG .q4-10{fill:rgb(253,224,239)}
+.PiYG .q5-10{fill:rgb(230,245,208)}
+.PiYG .q6-10{fill:rgb(184,225,134)}
+.PiYG .q7-10{fill:rgb(127,188,65)}
+.PiYG .q8-10{fill:rgb(77,146,33)}
+.PiYG .q9-10{fill:rgb(39,100,25)}
+.PiYG .q0-11{fill:rgb(142,1,82)}
+.PiYG .q1-11{fill:rgb(197,27,125)}
+.PiYG .q2-11{fill:rgb(222,119,174)}
+.PiYG .q3-11{fill:rgb(241,182,218)}
+.PiYG .q4-11{fill:rgb(253,224,239)}
+.PiYG .q5-11{fill:rgb(247,247,247)}
+.PiYG .q6-11{fill:rgb(230,245,208)}
+.PiYG .q7-11{fill:rgb(184,225,134)}
+.PiYG .q8-11{fill:rgb(127,188,65)}
+.PiYG .q9-11{fill:rgb(77,146,33)}
+.PiYG .q10-11{fill:rgb(39,100,25)}
+.RdBu .q0-3{fill:rgb(239,138,98)}
+.RdBu .q1-3{fill:rgb(247,247,247)}
+.RdBu .q2-3{fill:rgb(103,169,207)}
+.RdBu .q0-4{fill:rgb(202,0,32)}
+.RdBu .q1-4{fill:rgb(244,165,130)}
+.RdBu .q2-4{fill:rgb(146,197,222)}
+.RdBu .q3-4{fill:rgb(5,113,176)}
+.RdBu .q0-5{fill:rgb(202,0,32)}
+.RdBu .q1-5{fill:rgb(244,165,130)}
+.RdBu .q2-5{fill:rgb(247,247,247)}
+.RdBu .q3-5{fill:rgb(146,197,222)}
+.RdBu .q4-5{fill:rgb(5,113,176)}
+.RdBu .q0-6{fill:rgb(178,24,43)}
+.RdBu .q1-6{fill:rgb(239,138,98)}
+.RdBu .q2-6{fill:rgb(253,219,199)}
+.RdBu .q3-6{fill:rgb(209,229,240)}
+.RdBu .q4-6{fill:rgb(103,169,207)}
+.RdBu .q5-6{fill:rgb(33,102,172)}
+.RdBu .q0-7{fill:rgb(178,24,43)}
+.RdBu .q1-7{fill:rgb(239,138,98)}
+.RdBu .q2-7{fill:rgb(253,219,199)}
+.RdBu .q3-7{fill:rgb(247,247,247)}
+.RdBu .q4-7{fill:rgb(209,229,240)}
+.RdBu .q5-7{fill:rgb(103,169,207)}
+.RdBu .q6-7{fill:rgb(33,102,172)}
+.RdBu .q0-8{fill:rgb(178,24,43)}
+.RdBu .q1-8{fill:rgb(214,96,77)}
+.RdBu .q2-8{fill:rgb(244,165,130)}
+.RdBu .q3-8{fill:rgb(253,219,199)}
+.RdBu .q4-8{fill:rgb(209,229,240)}
+.RdBu .q5-8{fill:rgb(146,197,222)}
+.RdBu .q6-8{fill:rgb(67,147,195)}
+.RdBu .q7-8{fill:rgb(33,102,172)}
+.RdBu .q0-9{fill:rgb(178,24,43)}
+.RdBu .q1-9{fill:rgb(214,96,77)}
+.RdBu .q2-9{fill:rgb(244,165,130)}
+.RdBu .q3-9{fill:rgb(253,219,199)}
+.RdBu .q4-9{fill:rgb(247,247,247)}
+.RdBu .q5-9{fill:rgb(209,229,240)}
+.RdBu .q6-9{fill:rgb(146,197,222)}
+.RdBu .q7-9{fill:rgb(67,147,195)}
+.RdBu .q8-9{fill:rgb(33,102,172)}
+.RdBu .q0-10{fill:rgb(103,0,31)}
+.RdBu .q1-10{fill:rgb(178,24,43)}
+.RdBu .q2-10{fill:rgb(214,96,77)}
+.RdBu .q3-10{fill:rgb(244,165,130)}
+.RdBu .q4-10{fill:rgb(253,219,199)}
+.RdBu .q5-10{fill:rgb(209,229,240)}
+.RdBu .q6-10{fill:rgb(146,197,222)}
+.RdBu .q7-10{fill:rgb(67,147,195)}
+.RdBu .q8-10{fill:rgb(33,102,172)}
+.RdBu .q9-10{fill:rgb(5,48,97)}
+.RdBu .q0-11{fill:rgb(103,0,31)}
+.RdBu .q1-11{fill:rgb(178,24,43)}
+.RdBu .q2-11{fill:rgb(214,96,77)}
+.RdBu .q3-11{fill:rgb(244,165,130)}
+.RdBu .q4-11{fill:rgb(253,219,199)}
+.RdBu .q5-11{fill:rgb(247,247,247)}
+.RdBu .q6-11{fill:rgb(209,229,240)}
+.RdBu .q7-11{fill:rgb(146,197,222)}
+.RdBu .q8-11{fill:rgb(67,147,195)}
+.RdBu .q9-11{fill:rgb(33,102,172)}
+.RdBu .q10-11{fill:rgb(5,48,97)}
+.RdGy .q0-3{fill:rgb(239,138,98)}
+.RdGy .q1-3{fill:rgb(255,255,255)}
+.RdGy .q2-3{fill:rgb(153,153,153)}
+.RdGy .q0-4{fill:rgb(202,0,32)}
+.RdGy .q1-4{fill:rgb(244,165,130)}
+.RdGy .q2-4{fill:rgb(186,186,186)}
+.RdGy .q3-4{fill:rgb(64,64,64)}
+.RdGy .q0-5{fill:rgb(202,0,32)}
+.RdGy .q1-5{fill:rgb(244,165,130)}
+.RdGy .q2-5{fill:rgb(255,255,255)}
+.RdGy .q3-5{fill:rgb(186,186,186)}
+.RdGy .q4-5{fill:rgb(64,64,64)}
+.RdGy .q0-6{fill:rgb(178,24,43)}
+.RdGy .q1-6{fill:rgb(239,138,98)}
+.RdGy .q2-6{fill:rgb(253,219,199)}
+.RdGy .q3-6{fill:rgb(224,224,224)}
+.RdGy .q4-6{fill:rgb(153,153,153)}
+.RdGy .q5-6{fill:rgb(77,77,77)}
+.RdGy .q0-7{fill:rgb(178,24,43)}
+.RdGy .q1-7{fill:rgb(239,138,98)}
+.RdGy .q2-7{fill:rgb(253,219,199)}
+.RdGy .q3-7{fill:rgb(255,255,255)}
+.RdGy .q4-7{fill:rgb(224,224,224)}
+.RdGy .q5-7{fill:rgb(153,153,153)}
+.RdGy .q6-7{fill:rgb(77,77,77)}
+.RdGy .q0-8{fill:rgb(178,24,43)}
+.RdGy .q1-8{fill:rgb(214,96,77)}
+.RdGy .q2-8{fill:rgb(244,165,130)}
+.RdGy .q3-8{fill:rgb(253,219,199)}
+.RdGy .q4-8{fill:rgb(224,224,224)}
+.RdGy .q5-8{fill:rgb(186,186,186)}
+.RdGy .q6-8{fill:rgb(135,135,135)}
+.RdGy .q7-8{fill:rgb(77,77,77)}
+.RdGy .q0-9{fill:rgb(178,24,43)}
+.RdGy .q1-9{fill:rgb(214,96,77)}
+.RdGy .q2-9{fill:rgb(244,165,130)}
+.RdGy .q3-9{fill:rgb(253,219,199)}
+.RdGy .q4-9{fill:rgb(255,255,255)}
+.RdGy .q5-9{fill:rgb(224,224,224)}
+.RdGy .q6-9{fill:rgb(186,186,186)}
+.RdGy .q7-9{fill:rgb(135,135,135)}
+.RdGy .q8-9{fill:rgb(77,77,77)}
+.RdGy .q0-10{fill:rgb(103,0,31)}
+.RdGy .q1-10{fill:rgb(178,24,43)}
+.RdGy .q2-10{fill:rgb(214,96,77)}
+.RdGy .q3-10{fill:rgb(244,165,130)}
+.RdGy .q4-10{fill:rgb(253,219,199)}
+.RdGy .q5-10{fill:rgb(224,224,224)}
+.RdGy .q6-10{fill:rgb(186,186,186)}
+.RdGy .q7-10{fill:rgb(135,135,135)}
+.RdGy .q8-10{fill:rgb(77,77,77)}
+.RdGy .q9-10{fill:rgb(26,26,26)}
+.RdGy .q0-11{fill:rgb(103,0,31)}
+.RdGy .q1-11{fill:rgb(178,24,43)}
+.RdGy .q2-11{fill:rgb(214,96,77)}
+.RdGy .q3-11{fill:rgb(244,165,130)}
+.RdGy .q4-11{fill:rgb(253,219,199)}
+.RdGy .q5-11{fill:rgb(255,255,255)}
+.RdGy .q6-11{fill:rgb(224,224,224)}
+.RdGy .q7-11{fill:rgb(186,186,186)}
+.RdGy .q8-11{fill:rgb(135,135,135)}
+.RdGy .q9-11{fill:rgb(77,77,77)}
+.RdGy .q10-11{fill:rgb(26,26,26)}
+.RdYlBu .q0-3{fill:rgb(252,141,89)}
+.RdYlBu .q1-3{fill:rgb(255,255,191)}
+.RdYlBu .q2-3{fill:rgb(145,191,219)}
+.RdYlBu .q0-4{fill:rgb(215,25,28)}
+.RdYlBu .q1-4{fill:rgb(253,174,97)}
+.RdYlBu .q2-4{fill:rgb(171,217,233)}
+.RdYlBu .q3-4{fill:rgb(44,123,182)}
+.RdYlBu .q0-5{fill:rgb(215,25,28)}
+.RdYlBu .q1-5{fill:rgb(253,174,97)}
+.RdYlBu .q2-5{fill:rgb(255,255,191)}
+.RdYlBu .q3-5{fill:rgb(171,217,233)}
+.RdYlBu .q4-5{fill:rgb(44,123,182)}
+.RdYlBu .q0-6{fill:rgb(215,48,39)}
+.RdYlBu .q1-6{fill:rgb(252,141,89)}
+.RdYlBu .q2-6{fill:rgb(254,224,144)}
+.RdYlBu .q3-6{fill:rgb(224,243,248)}
+.RdYlBu .q4-6{fill:rgb(145,191,219)}
+.RdYlBu .q5-6{fill:rgb(69,117,180)}
+.RdYlBu .q0-7{fill:rgb(215,48,39)}
+.RdYlBu .q1-7{fill:rgb(252,141,89)}
+.RdYlBu .q2-7{fill:rgb(254,224,144)}
+.RdYlBu .q3-7{fill:rgb(255,255,191)}
+.RdYlBu .q4-7{fill:rgb(224,243,248)}
+.RdYlBu .q5-7{fill:rgb(145,191,219)}
+.RdYlBu .q6-7{fill:rgb(69,117,180)}
+.RdYlBu .q0-8{fill:rgb(215,48,39)}
+.RdYlBu .q1-8{fill:rgb(244,109,67)}
+.RdYlBu .q2-8{fill:rgb(253,174,97)}
+.RdYlBu .q3-8{fill:rgb(254,224,144)}
+.RdYlBu .q4-8{fill:rgb(224,243,248)}
+.RdYlBu .q5-8{fill:rgb(171,217,233)}
+.RdYlBu .q6-8{fill:rgb(116,173,209)}
+.RdYlBu .q7-8{fill:rgb(69,117,180)}
+.RdYlBu .q0-9{fill:rgb(215,48,39)}
+.RdYlBu .q1-9{fill:rgb(244,109,67)}
+.RdYlBu .q2-9{fill:rgb(253,174,97)}
+.RdYlBu .q3-9{fill:rgb(254,224,144)}
+.RdYlBu .q4-9{fill:rgb(255,255,191)}
+.RdYlBu .q5-9{fill:rgb(224,243,248)}
+.RdYlBu .q6-9{fill:rgb(171,217,233)}
+.RdYlBu .q7-9{fill:rgb(116,173,209)}
+.RdYlBu .q8-9{fill:rgb(69,117,180)}
+.RdYlBu .q0-10{fill:rgb(165,0,38)}
+.RdYlBu .q1-10{fill:rgb(215,48,39)}
+.RdYlBu .q2-10{fill:rgb(244,109,67)}
+.RdYlBu .q3-10{fill:rgb(253,174,97)}
+.RdYlBu .q4-10{fill:rgb(254,224,144)}
+.RdYlBu .q5-10{fill:rgb(224,243,248)}
+.RdYlBu .q6-10{fill:rgb(171,217,233)}
+.RdYlBu .q7-10{fill:rgb(116,173,209)}
+.RdYlBu .q8-10{fill:rgb(69,117,180)}
+.RdYlBu .q9-10{fill:rgb(49,54,149)}
+.RdYlBu .q0-11{fill:rgb(165,0,38)}
+.RdYlBu .q1-11{fill:rgb(215,48,39)}
+.RdYlBu .q2-11{fill:rgb(244,109,67)}
+.RdYlBu .q3-11{fill:rgb(253,174,97)}
+.RdYlBu .q4-11{fill:rgb(254,224,144)}
+.RdYlBu .q5-11{fill:rgb(255,255,191)}
+.RdYlBu .q6-11{fill:rgb(224,243,248)}
+.RdYlBu .q7-11{fill:rgb(171,217,233)}
+.RdYlBu .q8-11{fill:rgb(116,173,209)}
+.RdYlBu .q9-11{fill:rgb(69,117,180)}
+.RdYlBu .q10-11{fill:rgb(49,54,149)}
+.Spectral .q0-3{fill:rgb(252,141,89)}
+.Spectral .q1-3{fill:rgb(255,255,191)}
+.Spectral .q2-3{fill:rgb(153,213,148)}
+.Spectral .q0-4{fill:rgb(215,25,28)}
+.Spectral .q1-4{fill:rgb(253,174,97)}
+.Spectral .q2-4{fill:rgb(171,221,164)}
+.Spectral .q3-4{fill:rgb(43,131,186)}
+.Spectral .q0-5{fill:rgb(215,25,28)}
+.Spectral .q1-5{fill:rgb(253,174,97)}
+.Spectral .q2-5{fill:rgb(255,255,191)}
+.Spectral .q3-5{fill:rgb(171,221,164)}
+.Spectral .q4-5{fill:rgb(43,131,186)}
+.Spectral .q0-6{fill:rgb(213,62,79)}
+.Spectral .q1-6{fill:rgb(252,141,89)}
+.Spectral .q2-6{fill:rgb(254,224,139)}
+.Spectral .q3-6{fill:rgb(230,245,152)}
+.Spectral .q4-6{fill:rgb(153,213,148)}
+.Spectral .q5-6{fill:rgb(50,136,189)}
+.Spectral .q0-7{fill:rgb(213,62,79)}
+.Spectral .q1-7{fill:rgb(252,141,89)}
+.Spectral .q2-7{fill:rgb(254,224,139)}
+.Spectral .q3-7{fill:rgb(255,255,191)}
+.Spectral .q4-7{fill:rgb(230,245,152)}
+.Spectral .q5-7{fill:rgb(153,213,148)}
+.Spectral .q6-7{fill:rgb(50,136,189)}
+.Spectral .q0-8{fill:rgb(213,62,79)}
+.Spectral .q1-8{fill:rgb(244,109,67)}
+.Spectral .q2-8{fill:rgb(253,174,97)}
+.Spectral .q3-8{fill:rgb(254,224,139)}
+.Spectral .q4-8{fill:rgb(230,245,152)}
+.Spectral .q5-8{fill:rgb(171,221,164)}
+.Spectral .q6-8{fill:rgb(102,194,165)}
+.Spectral .q7-8{fill:rgb(50,136,189)}
+.Spectral .q0-9{fill:rgb(213,62,79)}
+.Spectral .q1-9{fill:rgb(244,109,67)}
+.Spectral .q2-9{fill:rgb(253,174,97)}
+.Spectral .q3-9{fill:rgb(254,224,139)}
+.Spectral .q4-9{fill:rgb(255,255,191)}
+.Spectral .q5-9{fill:rgb(230,245,152)}
+.Spectral .q6-9{fill:rgb(171,221,164)}
+.Spectral .q7-9{fill:rgb(102,194,165)}
+.Spectral .q8-9{fill:rgb(50,136,189)}
+.Spectral .q0-10{fill:rgb(158,1,66)}
+.Spectral .q1-10{fill:rgb(213,62,79)}
+.Spectral .q2-10{fill:rgb(244,109,67)}
+.Spectral .q3-10{fill:rgb(253,174,97)}
+.Spectral .q4-10{fill:rgb(254,224,139)}
+.Spectral .q5-10{fill:rgb(230,245,152)}
+.Spectral .q6-10{fill:rgb(171,221,164)}
+.Spectral .q7-10{fill:rgb(102,194,165)}
+.Spectral .q8-10{fill:rgb(50,136,189)}
+.Spectral .q9-10{fill:rgb(94,79,162)}
+.Spectral .q0-11{fill:rgb(158,1,66)}
+.Spectral .q1-11{fill:rgb(213,62,79)}
+.Spectral .q2-11{fill:rgb(244,109,67)}
+.Spectral .q3-11{fill:rgb(253,174,97)}
+.Spectral .q4-11{fill:rgb(254,224,139)}
+.Spectral .q5-11{fill:rgb(255,255,191)}
+.Spectral .q6-11{fill:rgb(230,245,152)}
+.Spectral .q7-11{fill:rgb(171,221,164)}
+.Spectral .q8-11{fill:rgb(102,194,165)}
+.Spectral .q9-11{fill:rgb(50,136,189)}
+.Spectral .q10-11{fill:rgb(94,79,162)}
+.RdYlGn .q0-3{fill:rgb(252,141,89)}
+.RdYlGn .q1-3{fill:rgb(255,255,191)}
+.RdYlGn .q2-3{fill:rgb(145,207,96)}
+.RdYlGn .q0-4{fill:rgb(215,25,28)}
+.RdYlGn .q1-4{fill:rgb(253,174,97)}
+.RdYlGn .q2-4{fill:rgb(166,217,106)}
+.RdYlGn .q3-4{fill:rgb(26,150,65)}
+.RdYlGn .q0-5{fill:rgb(215,25,28)}
+.RdYlGn .q1-5{fill:rgb(253,174,97)}
+.RdYlGn .q2-5{fill:rgb(255,255,191)}
+.RdYlGn .q3-5{fill:rgb(166,217,106)}
+.RdYlGn .q4-5{fill:rgb(26,150,65)}
+.RdYlGn .q0-6{fill:rgb(215,48,39)}
+.RdYlGn .q1-6{fill:rgb(252,141,89)}
+.RdYlGn .q2-6{fill:rgb(254,224,139)}
+.RdYlGn .q3-6{fill:rgb(217,239,139)}
+.RdYlGn .q4-6{fill:rgb(145,207,96)}
+.RdYlGn .q5-6{fill:rgb(26,152,80)}
+.RdYlGn .q0-7{fill:rgb(215,48,39)}
+.RdYlGn .q1-7{fill:rgb(252,141,89)}
+.RdYlGn .q2-7{fill:rgb(254,224,139)}
+.RdYlGn .q3-7{fill:rgb(255,255,191)}
+.RdYlGn .q4-7{fill:rgb(217,239,139)}
+.RdYlGn .q5-7{fill:rgb(145,207,96)}
+.RdYlGn .q6-7{fill:rgb(26,152,80)}
+.RdYlGn .q0-8{fill:rgb(215,48,39)}
+.RdYlGn .q1-8{fill:rgb(244,109,67)}
+.RdYlGn .q2-8{fill:rgb(253,174,97)}
+.RdYlGn .q3-8{fill:rgb(254,224,139)}
+.RdYlGn .q4-8{fill:rgb(217,239,139)}
+.RdYlGn .q5-8{fill:rgb(166,217,106)}
+.RdYlGn .q6-8{fill:rgb(102,189,99)}
+.RdYlGn .q7-8{fill:rgb(26,152,80)}
+.RdYlGn .q0-9{fill:rgb(215,48,39)}
+.RdYlGn .q1-9{fill:rgb(244,109,67)}
+.RdYlGn .q2-9{fill:rgb(253,174,97)}
+.RdYlGn .q3-9{fill:rgb(254,224,139)}
+.RdYlGn .q4-9{fill:rgb(255,255,191)}
+.RdYlGn .q5-9{fill:rgb(217,239,139)}
+.RdYlGn .q6-9{fill:rgb(166,217,106)}
+.RdYlGn .q7-9{fill:rgb(102,189,99)}
+.RdYlGn .q8-9{fill:rgb(26,152,80)}
+.RdYlGn .q0-10{fill:rgb(165,0,38)}
+.RdYlGn .q1-10{fill:rgb(215,48,39)}
+.RdYlGn .q2-10{fill:rgb(244,109,67)}
+.RdYlGn .q3-10{fill:rgb(253,174,97)}
+.RdYlGn .q4-10{fill:rgb(254,224,139)}
+.RdYlGn .q5-10{fill:rgb(217,239,139)}
+.RdYlGn .q6-10{fill:rgb(166,217,106)}
+.RdYlGn .q7-10{fill:rgb(102,189,99)}
+.RdYlGn .q8-10{fill:rgb(26,152,80)}
+.RdYlGn .q9-10{fill:rgb(0,104,55)}
+.RdYlGn .q0-11{fill:rgb(165,0,38)}
+.RdYlGn .q1-11{fill:rgb(215,48,39)}
+.RdYlGn .q2-11{fill:rgb(244,109,67)}
+.RdYlGn .q3-11{fill:rgb(253,174,97)}
+.RdYlGn .q4-11{fill:rgb(254,224,139)}
+.RdYlGn .q5-11{fill:rgb(255,255,191)}
+.RdYlGn .q6-11{fill:rgb(217,239,139)}
+.RdYlGn .q7-11{fill:rgb(166,217,106)}
+.RdYlGn .q8-11{fill:rgb(102,189,99)}
+.RdYlGn .q9-11{fill:rgb(26,152,80)}
+.RdYlGn .q10-11{fill:rgb(0,104,55)}
Index: /Dev/trunk/d3/lib/colorbrewer/colorbrewer.js
===================================================================
--- /Dev/trunk/d3/lib/colorbrewer/colorbrewer.js	(revision 76)
+++ /Dev/trunk/d3/lib/colorbrewer/colorbrewer.js	(revision 76)
@@ -0,0 +1,32 @@
+/*
+ * This product includes color specifications and designs developed by Cynthia
+ * Brewer (http://colorbrewer.org/).
+ */
+var colorbrewer = {
+YlGn:{3:["rgb(247,252,185)","rgb(173,221,142)","rgb(49,163,84)"],4:["rgb(255,255,204)","rgb(194,230,153)","rgb(120,198,121)","rgb(35,132,67)"],5:["rgb(255,255,204)","rgb(194,230,153)","rgb(120,198,121)","rgb(49,163,84)","rgb(0,104,55)"],6:["rgb(255,255,204)","rgb(217,240,163)","rgb(173,221,142)","rgb(120,198,121)","rgb(49,163,84)","rgb(0,104,55)"],7:["rgb(255,255,204)","rgb(217,240,163)","rgb(173,221,142)","rgb(120,198,121)","rgb(65,171,93)","rgb(35,132,67)","rgb(0,90,50)"],8:["rgb(255,255,229)","rgb(247,252,185)","rgb(217,240,163)","rgb(173,221,142)","rgb(120,198,121)","rgb(65,171,93)","rgb(35,132,67)","rgb(0,90,50)"],9:["rgb(255,255,229)","rgb(247,252,185)","rgb(217,240,163)","rgb(173,221,142)","rgb(120,198,121)","rgb(65,171,93)","rgb(35,132,67)","rgb(0,104,55)","rgb(0,69,41)"]},
+YlGnBu:{3:["rgb(237,248,177)","rgb(127,205,187)","rgb(44,127,184)"],4:["rgb(255,255,204)","rgb(161,218,180)","rgb(65,182,196)","rgb(34,94,168)"],5:["rgb(255,255,204)","rgb(161,218,180)","rgb(65,182,196)","rgb(44,127,184)","rgb(37,52,148)"],6:["rgb(255,255,204)","rgb(199,233,180)","rgb(127,205,187)","rgb(65,182,196)","rgb(44,127,184)","rgb(37,52,148)"],7:["rgb(255,255,204)","rgb(199,233,180)","rgb(127,205,187)","rgb(65,182,196)","rgb(29,145,192)","rgb(34,94,168)","rgb(12,44,132)"],8:["rgb(255,255,217)","rgb(237,248,177)","rgb(199,233,180)","rgb(127,205,187)","rgb(65,182,196)","rgb(29,145,192)","rgb(34,94,168)","rgb(12,44,132)"],9:["rgb(255,255,217)","rgb(237,248,177)","rgb(199,233,180)","rgb(127,205,187)","rgb(65,182,196)","rgb(29,145,192)","rgb(34,94,168)","rgb(37,52,148)","rgb(8,29,88)"]},
+GnBu:{3:["rgb(224,243,219)","rgb(168,221,181)","rgb(67,162,202)"],4:["rgb(240,249,232)","rgb(186,228,188)","rgb(123,204,196)","rgb(43,140,190)"],5:["rgb(240,249,232)","rgb(186,228,188)","rgb(123,204,196)","rgb(67,162,202)","rgb(8,104,172)"],6:["rgb(240,249,232)","rgb(204,235,197)","rgb(168,221,181)","rgb(123,204,196)","rgb(67,162,202)","rgb(8,104,172)"],7:["rgb(240,249,232)","rgb(204,235,197)","rgb(168,221,181)","rgb(123,204,196)","rgb(78,179,211)","rgb(43,140,190)","rgb(8,88,158)"],8:["rgb(247,252,240)","rgb(224,243,219)","rgb(204,235,197)","rgb(168,221,181)","rgb(123,204,196)","rgb(78,179,211)","rgb(43,140,190)","rgb(8,88,158)"],9:["rgb(247,252,240)","rgb(224,243,219)","rgb(204,235,197)","rgb(168,221,181)","rgb(123,204,196)","rgb(78,179,211)","rgb(43,140,190)","rgb(8,104,172)","rgb(8,64,129)"]},
+BuGn:{3:["rgb(229,245,249)","rgb(153,216,201)","rgb(44,162,95)"],4:["rgb(237,248,251)","rgb(178,226,226)","rgb(102,194,164)","rgb(35,139,69)"],5:["rgb(237,248,251)","rgb(178,226,226)","rgb(102,194,164)","rgb(44,162,95)","rgb(0,109,44)"],6:["rgb(237,248,251)","rgb(204,236,230)","rgb(153,216,201)","rgb(102,194,164)","rgb(44,162,95)","rgb(0,109,44)"],7:["rgb(237,248,251)","rgb(204,236,230)","rgb(153,216,201)","rgb(102,194,164)","rgb(65,174,118)","rgb(35,139,69)","rgb(0,88,36)"],8:["rgb(247,252,253)","rgb(229,245,249)","rgb(204,236,230)","rgb(153,216,201)","rgb(102,194,164)","rgb(65,174,118)","rgb(35,139,69)","rgb(0,88,36)"],9:["rgb(247,252,253)","rgb(229,245,249)","rgb(204,236,230)","rgb(153,216,201)","rgb(102,194,164)","rgb(65,174,118)","rgb(35,139,69)","rgb(0,109,44)","rgb(0,68,27)"]},
+PuBuGn:{3:["rgb(236,226,240)","rgb(166,189,219)","rgb(28,144,153)"],4:["rgb(246,239,247)","rgb(189,201,225)","rgb(103,169,207)","rgb(2,129,138)"],5:["rgb(246,239,247)","rgb(189,201,225)","rgb(103,169,207)","rgb(28,144,153)","rgb(1,108,89)"],6:["rgb(246,239,247)","rgb(208,209,230)","rgb(166,189,219)","rgb(103,169,207)","rgb(28,144,153)","rgb(1,108,89)"],7:["rgb(246,239,247)","rgb(208,209,230)","rgb(166,189,219)","rgb(103,169,207)","rgb(54,144,192)","rgb(2,129,138)","rgb(1,100,80)"],8:["rgb(255,247,251)","rgb(236,226,240)","rgb(208,209,230)","rgb(166,189,219)","rgb(103,169,207)","rgb(54,144,192)","rgb(2,129,138)","rgb(1,100,80)"],9:["rgb(255,247,251)","rgb(236,226,240)","rgb(208,209,230)","rgb(166,189,219)","rgb(103,169,207)","rgb(54,144,192)","rgb(2,129,138)","rgb(1,108,89)","rgb(1,70,54)"]},
+PuBu:{3:["rgb(236,231,242)","rgb(166,189,219)","rgb(43,140,190)"],4:["rgb(241,238,246)","rgb(189,201,225)","rgb(116,169,207)","rgb(5,112,176)"],5:["rgb(241,238,246)","rgb(189,201,225)","rgb(116,169,207)","rgb(43,140,190)","rgb(4,90,141)"],6:["rgb(241,238,246)","rgb(208,209,230)","rgb(166,189,219)","rgb(116,169,207)","rgb(43,140,190)","rgb(4,90,141)"],7:["rgb(241,238,246)","rgb(208,209,230)","rgb(166,189,219)","rgb(116,169,207)","rgb(54,144,192)","rgb(5,112,176)","rgb(3,78,123)"],8:["rgb(255,247,251)","rgb(236,231,242)","rgb(208,209,230)","rgb(166,189,219)","rgb(116,169,207)","rgb(54,144,192)","rgb(5,112,176)","rgb(3,78,123)"],9:["rgb(255,247,251)","rgb(236,231,242)","rgb(208,209,230)","rgb(166,189,219)","rgb(116,169,207)","rgb(54,144,192)","rgb(5,112,176)","rgb(4,90,141)","rgb(2,56,88)"]},
+BuPu:{3:["rgb(224,236,244)","rgb(158,188,218)","rgb(136,86,167)"],4:["rgb(237,248,251)","rgb(179,205,227)","rgb(140,150,198)","rgb(136,65,157)"],5:["rgb(237,248,251)","rgb(179,205,227)","rgb(140,150,198)","rgb(136,86,167)","rgb(129,15,124)"],6:["rgb(237,248,251)","rgb(191,211,230)","rgb(158,188,218)","rgb(140,150,198)","rgb(136,86,167)","rgb(129,15,124)"],7:["rgb(237,248,251)","rgb(191,211,230)","rgb(158,188,218)","rgb(140,150,198)","rgb(140,107,177)","rgb(136,65,157)","rgb(110,1,107)"],8:["rgb(247,252,253)","rgb(224,236,244)","rgb(191,211,230)","rgb(158,188,218)","rgb(140,150,198)","rgb(140,107,177)","rgb(136,65,157)","rgb(110,1,107)"],9:["rgb(247,252,253)","rgb(224,236,244)","rgb(191,211,230)","rgb(158,188,218)","rgb(140,150,198)","rgb(140,107,177)","rgb(136,65,157)","rgb(129,15,124)","rgb(77,0,75)"]},
+RdPu:{3:["rgb(253,224,221)","rgb(250,159,181)","rgb(197,27,138)"],4:["rgb(254,235,226)","rgb(251,180,185)","rgb(247,104,161)","rgb(174,1,126)"],5:["rgb(254,235,226)","rgb(251,180,185)","rgb(247,104,161)","rgb(197,27,138)","rgb(122,1,119)"],6:["rgb(254,235,226)","rgb(252,197,192)","rgb(250,159,181)","rgb(247,104,161)","rgb(197,27,138)","rgb(122,1,119)"],7:["rgb(254,235,226)","rgb(252,197,192)","rgb(250,159,181)","rgb(247,104,161)","rgb(221,52,151)","rgb(174,1,126)","rgb(122,1,119)"],8:["rgb(255,247,243)","rgb(253,224,221)","rgb(252,197,192)","rgb(250,159,181)","rgb(247,104,161)","rgb(221,52,151)","rgb(174,1,126)","rgb(122,1,119)"],9:["rgb(255,247,243)","rgb(253,224,221)","rgb(252,197,192)","rgb(250,159,181)","rgb(247,104,161)","rgb(221,52,151)","rgb(174,1,126)","rgb(122,1,119)","rgb(73,0,106)"]},
+PuRd:{3:["rgb(231,225,239)","rgb(201,148,199)","rgb(221,28,119)"],4:["rgb(241,238,246)","rgb(215,181,216)","rgb(223,101,176)","rgb(206,18,86)"],5:["rgb(241,238,246)","rgb(215,181,216)","rgb(223,101,176)","rgb(221,28,119)","rgb(152,0,67)"],6:["rgb(241,238,246)","rgb(212,185,218)","rgb(201,148,199)","rgb(223,101,176)","rgb(221,28,119)","rgb(152,0,67)"],7:["rgb(241,238,246)","rgb(212,185,218)","rgb(201,148,199)","rgb(223,101,176)","rgb(231,41,138)","rgb(206,18,86)","rgb(145,0,63)"],8:["rgb(247,244,249)","rgb(231,225,239)","rgb(212,185,218)","rgb(201,148,199)","rgb(223,101,176)","rgb(231,41,138)","rgb(206,18,86)","rgb(145,0,63)"],9:["rgb(247,244,249)","rgb(231,225,239)","rgb(212,185,218)","rgb(201,148,199)","rgb(223,101,176)","rgb(231,41,138)","rgb(206,18,86)","rgb(152,0,67)","rgb(103,0,31)"]},
+OrRd:{3:["rgb(254,232,200)","rgb(253,187,132)","rgb(227,74,51)"],4:["rgb(254,240,217)","rgb(253,204,138)","rgb(252,141,89)","rgb(215,48,31)"],5:["rgb(254,240,217)","rgb(253,204,138)","rgb(252,141,89)","rgb(227,74,51)","rgb(179,0,0)"],6:["rgb(254,240,217)","rgb(253,212,158)","rgb(253,187,132)","rgb(252,141,89)","rgb(227,74,51)","rgb(179,0,0)"],7:["rgb(254,240,217)","rgb(253,212,158)","rgb(253,187,132)","rgb(252,141,89)","rgb(239,101,72)","rgb(215,48,31)","rgb(153,0,0)"],8:["rgb(255,247,236)","rgb(254,232,200)","rgb(253,212,158)","rgb(253,187,132)","rgb(252,141,89)","rgb(239,101,72)","rgb(215,48,31)","rgb(153,0,0)"],9:["rgb(255,247,236)","rgb(254,232,200)","rgb(253,212,158)","rgb(253,187,132)","rgb(252,141,89)","rgb(239,101,72)","rgb(215,48,31)","rgb(179,0,0)","rgb(127,0,0)"]},
+YlOrRd:{3:["rgb(255,237,160)","rgb(254,178,76)","rgb(240,59,32)"],4:["rgb(255,255,178)","rgb(254,204,92)","rgb(253,141,60)","rgb(227,26,28)"],5:["rgb(255,255,178)","rgb(254,204,92)","rgb(253,141,60)","rgb(240,59,32)","rgb(189,0,38)"],6:["rgb(255,255,178)","rgb(254,217,118)","rgb(254,178,76)","rgb(253,141,60)","rgb(240,59,32)","rgb(189,0,38)"],7:["rgb(255,255,178)","rgb(254,217,118)","rgb(254,178,76)","rgb(253,141,60)","rgb(252,78,42)","rgb(227,26,28)","rgb(177,0,38)"],8:["rgb(255,255,204)","rgb(255,237,160)","rgb(254,217,118)","rgb(254,178,76)","rgb(253,141,60)","rgb(252,78,42)","rgb(227,26,28)","rgb(177,0,38)"],9:["rgb(255,255,204)","rgb(255,237,160)","rgb(254,217,118)","rgb(254,178,76)","rgb(253,141,60)","rgb(252,78,42)","rgb(227,26,28)","rgb(189,0,38)","rgb(128,0,38)"]},
+YlOrBr:{3:["rgb(255,247,188)","rgb(254,196,79)","rgb(217,95,14)"],4:["rgb(255,255,212)","rgb(254,217,142)","rgb(254,153,41)","rgb(204,76,2)"],5:["rgb(255,255,212)","rgb(254,217,142)","rgb(254,153,41)","rgb(217,95,14)","rgb(153,52,4)"],6:["rgb(255,255,212)","rgb(254,227,145)","rgb(254,196,79)","rgb(254,153,41)","rgb(217,95,14)","rgb(153,52,4)"],7:["rgb(255,255,212)","rgb(254,227,145)","rgb(254,196,79)","rgb(254,153,41)","rgb(236,112,20)","rgb(204,76,2)","rgb(140,45,4)"],8:["rgb(255,255,229)","rgb(255,247,188)","rgb(254,227,145)","rgb(254,196,79)","rgb(254,153,41)","rgb(236,112,20)","rgb(204,76,2)","rgb(140,45,4)"],9:["rgb(255,255,229)","rgb(255,247,188)","rgb(254,227,145)","rgb(254,196,79)","rgb(254,153,41)","rgb(236,112,20)","rgb(204,76,2)","rgb(153,52,4)","rgb(102,37,6)"]},
+Purples:{3:["rgb(239,237,245)","rgb(188,189,220)","rgb(117,107,177)"],4:["rgb(242,240,247)","rgb(203,201,226)","rgb(158,154,200)","rgb(106,81,163)"],5:["rgb(242,240,247)","rgb(203,201,226)","rgb(158,154,200)","rgb(117,107,177)","rgb(84,39,143)"],6:["rgb(242,240,247)","rgb(218,218,235)","rgb(188,189,220)","rgb(158,154,200)","rgb(117,107,177)","rgb(84,39,143)"],7:["rgb(242,240,247)","rgb(218,218,235)","rgb(188,189,220)","rgb(158,154,200)","rgb(128,125,186)","rgb(106,81,163)","rgb(74,20,134)"],8:["rgb(252,251,253)","rgb(239,237,245)","rgb(218,218,235)","rgb(188,189,220)","rgb(158,154,200)","rgb(128,125,186)","rgb(106,81,163)","rgb(74,20,134)"],9:["rgb(252,251,253)","rgb(239,237,245)","rgb(218,218,235)","rgb(188,189,220)","rgb(158,154,200)","rgb(128,125,186)","rgb(106,81,163)","rgb(84,39,143)","rgb(63,0,125)"]},
+Blues:{3:["rgb(222,235,247)","rgb(158,202,225)","rgb(49,130,189)"],4:["rgb(239,243,255)","rgb(189,215,231)","rgb(107,174,214)","rgb(33,113,181)"],5:["rgb(239,243,255)","rgb(189,215,231)","rgb(107,174,214)","rgb(49,130,189)","rgb(8,81,156)"],6:["rgb(239,243,255)","rgb(198,219,239)","rgb(158,202,225)","rgb(107,174,214)","rgb(49,130,189)","rgb(8,81,156)"],7:["rgb(239,243,255)","rgb(198,219,239)","rgb(158,202,225)","rgb(107,174,214)","rgb(66,146,198)","rgb(33,113,181)","rgb(8,69,148)"],8:["rgb(247,251,255)","rgb(222,235,247)","rgb(198,219,239)","rgb(158,202,225)","rgb(107,174,214)","rgb(66,146,198)","rgb(33,113,181)","rgb(8,69,148)"],9:["rgb(247,251,255)","rgb(222,235,247)","rgb(198,219,239)","rgb(158,202,225)","rgb(107,174,214)","rgb(66,146,198)","rgb(33,113,181)","rgb(8,81,156)","rgb(8,48,107)"]},
+Greens:{3:["rgb(229,245,224)","rgb(161,217,155)","rgb(49,163,84)"],4:["rgb(237,248,233)","rgb(186,228,179)","rgb(116,196,118)","rgb(35,139,69)"],5:["rgb(237,248,233)","rgb(186,228,179)","rgb(116,196,118)","rgb(49,163,84)","rgb(0,109,44)"],6:["rgb(237,248,233)","rgb(199,233,192)","rgb(161,217,155)","rgb(116,196,118)","rgb(49,163,84)","rgb(0,109,44)"],7:["rgb(237,248,233)","rgb(199,233,192)","rgb(161,217,155)","rgb(116,196,118)","rgb(65,171,93)","rgb(35,139,69)","rgb(0,90,50)"],8:["rgb(247,252,245)","rgb(229,245,224)","rgb(199,233,192)","rgb(161,217,155)","rgb(116,196,118)","rgb(65,171,93)","rgb(35,139,69)","rgb(0,90,50)"],9:["rgb(247,252,245)","rgb(229,245,224)","rgb(199,233,192)","rgb(161,217,155)","rgb(116,196,118)","rgb(65,171,93)","rgb(35,139,69)","rgb(0,109,44)","rgb(0,68,27)"]},
+Oranges:{3:["rgb(254,230,206)","rgb(253,174,107)","rgb(230,85,13)"],4:["rgb(254,237,222)","rgb(253,190,133)","rgb(253,141,60)","rgb(217,71,1)"],5:["rgb(254,237,222)","rgb(253,190,133)","rgb(253,141,60)","rgb(230,85,13)","rgb(166,54,3)"],6:["rgb(254,237,222)","rgb(253,208,162)","rgb(253,174,107)","rgb(253,141,60)","rgb(230,85,13)","rgb(166,54,3)"],7:["rgb(254,237,222)","rgb(253,208,162)","rgb(253,174,107)","rgb(253,141,60)","rgb(241,105,19)","rgb(217,72,1)","rgb(140,45,4)"],8:["rgb(255,245,235)","rgb(254,230,206)","rgb(253,208,162)","rgb(253,174,107)","rgb(253,141,60)","rgb(241,105,19)","rgb(217,72,1)","rgb(140,45,4)"],9:["rgb(255,245,235)","rgb(254,230,206)","rgb(253,208,162)","rgb(253,174,107)","rgb(253,141,60)","rgb(241,105,19)","rgb(217,72,1)","rgb(166,54,3)","rgb(127,39,4)"]},
+Reds:{3:["rgb(254,224,210)","rgb(252,146,114)","rgb(222,45,38)"],4:["rgb(254,229,217)","rgb(252,174,145)","rgb(251,106,74)","rgb(203,24,29)"],5:["rgb(254,229,217)","rgb(252,174,145)","rgb(251,106,74)","rgb(222,45,38)","rgb(165,15,21)"],6:["rgb(254,229,217)","rgb(252,187,161)","rgb(252,146,114)","rgb(251,106,74)","rgb(222,45,38)","rgb(165,15,21)"],7:["rgb(254,229,217)","rgb(252,187,161)","rgb(252,146,114)","rgb(251,106,74)","rgb(239,59,44)","rgb(203,24,29)","rgb(153,0,13)"],8:["rgb(255,245,240)","rgb(254,224,210)","rgb(252,187,161)","rgb(252,146,114)","rgb(251,106,74)","rgb(239,59,44)","rgb(203,24,29)","rgb(153,0,13)"],9:["rgb(255,245,240)","rgb(254,224,210)","rgb(252,187,161)","rgb(252,146,114)","rgb(251,106,74)","rgb(239,59,44)","rgb(203,24,29)","rgb(165,15,21)","rgb(103,0,13)"]},
+Greys:{3:["rgb(240,240,240)","rgb(189,189,189)","rgb(99,99,99)"],4:["rgb(247,247,247)","rgb(204,204,204)","rgb(150,150,150)","rgb(82,82,82)"],5:["rgb(247,247,247)","rgb(204,204,204)","rgb(150,150,150)","rgb(99,99,99)","rgb(37,37,37)"],6:["rgb(247,247,247)","rgb(217,217,217)","rgb(189,189,189)","rgb(150,150,150)","rgb(99,99,99)","rgb(37,37,37)"],7:["rgb(247,247,247)","rgb(217,217,217)","rgb(189,189,189)","rgb(150,150,150)","rgb(115,115,115)","rgb(82,82,82)","rgb(37,37,37)"],8:["rgb(255,255,255)","rgb(240,240,240)","rgb(217,217,217)","rgb(189,189,189)","rgb(150,150,150)","rgb(115,115,115)","rgb(82,82,82)","rgb(37,37,37)"],9:["rgb(255,255,255)","rgb(240,240,240)","rgb(217,217,217)","rgb(189,189,189)","rgb(150,150,150)","rgb(115,115,115)","rgb(82,82,82)","rgb(37,37,37)","rgb(0,0,0)"]},
+PuOr:{3:["rgb(241,163,64)","rgb(247,247,247)","rgb(153,142,195)"],4:["rgb(230,97,1)","rgb(253,184,99)","rgb(178,171,210)","rgb(94,60,153)"],5:["rgb(230,97,1)","rgb(253,184,99)","rgb(247,247,247)","rgb(178,171,210)","rgb(94,60,153)"],6:["rgb(179,88,6)","rgb(241,163,64)","rgb(254,224,182)","rgb(216,218,235)","rgb(153,142,195)","rgb(84,39,136)"],7:["rgb(179,88,6)","rgb(241,163,64)","rgb(254,224,182)","rgb(247,247,247)","rgb(216,218,235)","rgb(153,142,195)","rgb(84,39,136)"],8:["rgb(179,88,6)","rgb(224,130,20)","rgb(253,184,99)","rgb(254,224,182)","rgb(216,218,235)","rgb(178,171,210)","rgb(128,115,172)","rgb(84,39,136)"],9:["rgb(179,88,6)","rgb(224,130,20)","rgb(253,184,99)","rgb(254,224,182)","rgb(247,247,247)","rgb(216,218,235)","rgb(178,171,210)","rgb(128,115,172)","rgb(84,39,136)"],10:["rgb(127,59,8)","rgb(179,88,6)","rgb(224,130,20)","rgb(253,184,99)","rgb(254,224,182)","rgb(216,218,235)","rgb(178,171,210)","rgb(128,115,172)","rgb(84,39,136)","rgb(45,0,75)"],11:["rgb(127,59,8)","rgb(179,88,6)","rgb(224,130,20)","rgb(253,184,99)","rgb(254,224,182)","rgb(247,247,247)","rgb(216,218,235)","rgb(178,171,210)","rgb(128,115,172)","rgb(84,39,136)","rgb(45,0,75)"]},
+BrBG:{3:["rgb(216,179,101)","rgb(245,245,245)","rgb(90,180,172)"],4:["rgb(166,97,26)","rgb(223,194,125)","rgb(128,205,193)","rgb(1,133,113)"],5:["rgb(166,97,26)","rgb(223,194,125)","rgb(245,245,245)","rgb(128,205,193)","rgb(1,133,113)"],6:["rgb(140,81,10)","rgb(216,179,101)","rgb(246,232,195)","rgb(199,234,229)","rgb(90,180,172)","rgb(1,102,94)"],7:["rgb(140,81,10)","rgb(216,179,101)","rgb(246,232,195)","rgb(245,245,245)","rgb(199,234,229)","rgb(90,180,172)","rgb(1,102,94)"],8:["rgb(140,81,10)","rgb(191,129,45)","rgb(223,194,125)","rgb(246,232,195)","rgb(199,234,229)","rgb(128,205,193)","rgb(53,151,143)","rgb(1,102,94)"],9:["rgb(140,81,10)","rgb(191,129,45)","rgb(223,194,125)","rgb(246,232,195)","rgb(245,245,245)","rgb(199,234,229)","rgb(128,205,193)","rgb(53,151,143)","rgb(1,102,94)"],10:["rgb(84,48,5)","rgb(140,81,10)","rgb(191,129,45)","rgb(223,194,125)","rgb(246,232,195)","rgb(199,234,229)","rgb(128,205,193)","rgb(53,151,143)","rgb(1,102,94)","rgb(0,60,48)"],11:["rgb(84,48,5)","rgb(140,81,10)","rgb(191,129,45)","rgb(223,194,125)","rgb(246,232,195)","rgb(245,245,245)","rgb(199,234,229)","rgb(128,205,193)","rgb(53,151,143)","rgb(1,102,94)","rgb(0,60,48)"]},
+PRGn:{3:["rgb(175,141,195)","rgb(247,247,247)","rgb(127,191,123)"],4:["rgb(123,50,148)","rgb(194,165,207)","rgb(166,219,160)","rgb(0,136,55)"],5:["rgb(123,50,148)","rgb(194,165,207)","rgb(247,247,247)","rgb(166,219,160)","rgb(0,136,55)"],6:["rgb(118,42,131)","rgb(175,141,195)","rgb(231,212,232)","rgb(217,240,211)","rgb(127,191,123)","rgb(27,120,55)"],7:["rgb(118,42,131)","rgb(175,141,195)","rgb(231,212,232)","rgb(247,247,247)","rgb(217,240,211)","rgb(127,191,123)","rgb(27,120,55)"],8:["rgb(118,42,131)","rgb(153,112,171)","rgb(194,165,207)","rgb(231,212,232)","rgb(217,240,211)","rgb(166,219,160)","rgb(90,174,97)","rgb(27,120,55)"],9:["rgb(118,42,131)","rgb(153,112,171)","rgb(194,165,207)","rgb(231,212,232)","rgb(247,247,247)","rgb(217,240,211)","rgb(166,219,160)","rgb(90,174,97)","rgb(27,120,55)"],10:["rgb(64,0,75)","rgb(118,42,131)","rgb(153,112,171)","rgb(194,165,207)","rgb(231,212,232)","rgb(217,240,211)","rgb(166,219,160)","rgb(90,174,97)","rgb(27,120,55)","rgb(0,68,27)"],11:["rgb(64,0,75)","rgb(118,42,131)","rgb(153,112,171)","rgb(194,165,207)","rgb(231,212,232)","rgb(247,247,247)","rgb(217,240,211)","rgb(166,219,160)","rgb(90,174,97)","rgb(27,120,55)","rgb(0,68,27)"]},
+PiYG:{3:["rgb(233,163,201)","rgb(247,247,247)","rgb(161,215,106)"],4:["rgb(208,28,139)","rgb(241,182,218)","rgb(184,225,134)","rgb(77,172,38)"],5:["rgb(208,28,139)","rgb(241,182,218)","rgb(247,247,247)","rgb(184,225,134)","rgb(77,172,38)"],6:["rgb(197,27,125)","rgb(233,163,201)","rgb(253,224,239)","rgb(230,245,208)","rgb(161,215,106)","rgb(77,146,33)"],7:["rgb(197,27,125)","rgb(233,163,201)","rgb(253,224,239)","rgb(247,247,247)","rgb(230,245,208)","rgb(161,215,106)","rgb(77,146,33)"],8:["rgb(197,27,125)","rgb(222,119,174)","rgb(241,182,218)","rgb(253,224,239)","rgb(230,245,208)","rgb(184,225,134)","rgb(127,188,65)","rgb(77,146,33)"],9:["rgb(197,27,125)","rgb(222,119,174)","rgb(241,182,218)","rgb(253,224,239)","rgb(247,247,247)","rgb(230,245,208)","rgb(184,225,134)","rgb(127,188,65)","rgb(77,146,33)"],10:["rgb(142,1,82)","rgb(197,27,125)","rgb(222,119,174)","rgb(241,182,218)","rgb(253,224,239)","rgb(230,245,208)","rgb(184,225,134)","rgb(127,188,65)","rgb(77,146,33)","rgb(39,100,25)"],11:["rgb(142,1,82)","rgb(197,27,125)","rgb(222,119,174)","rgb(241,182,218)","rgb(253,224,239)","rgb(247,247,247)","rgb(230,245,208)","rgb(184,225,134)","rgb(127,188,65)","rgb(77,146,33)","rgb(39,100,25)"]},
+RdBu:{3:["rgb(239,138,98)","rgb(247,247,247)","rgb(103,169,207)"],4:["rgb(202,0,32)","rgb(244,165,130)","rgb(146,197,222)","rgb(5,113,176)"],5:["rgb(202,0,32)","rgb(244,165,130)","rgb(247,247,247)","rgb(146,197,222)","rgb(5,113,176)"],6:["rgb(178,24,43)","rgb(239,138,98)","rgb(253,219,199)","rgb(209,229,240)","rgb(103,169,207)","rgb(33,102,172)"],7:["rgb(178,24,43)","rgb(239,138,98)","rgb(253,219,199)","rgb(247,247,247)","rgb(209,229,240)","rgb(103,169,207)","rgb(33,102,172)"],8:["rgb(178,24,43)","rgb(214,96,77)","rgb(244,165,130)","rgb(253,219,199)","rgb(209,229,240)","rgb(146,197,222)","rgb(67,147,195)","rgb(33,102,172)"],9:["rgb(178,24,43)","rgb(214,96,77)","rgb(244,165,130)","rgb(253,219,199)","rgb(247,247,247)","rgb(209,229,240)","rgb(146,197,222)","rgb(67,147,195)","rgb(33,102,172)"],10:["rgb(103,0,31)","rgb(178,24,43)","rgb(214,96,77)","rgb(244,165,130)","rgb(253,219,199)","rgb(209,229,240)","rgb(146,197,222)","rgb(67,147,195)","rgb(33,102,172)","rgb(5,48,97)"],11:["rgb(103,0,31)","rgb(178,24,43)","rgb(214,96,77)","rgb(244,165,130)","rgb(253,219,199)","rgb(247,247,247)","rgb(209,229,240)","rgb(146,197,222)","rgb(67,147,195)","rgb(33,102,172)","rgb(5,48,97)"]},
+RdGy:{3:["rgb(239,138,98)","rgb(255,255,255)","rgb(153,153,153)"],4:["rgb(202,0,32)","rgb(244,165,130)","rgb(186,186,186)","rgb(64,64,64)"],5:["rgb(202,0,32)","rgb(244,165,130)","rgb(255,255,255)","rgb(186,186,186)","rgb(64,64,64)"],6:["rgb(178,24,43)","rgb(239,138,98)","rgb(253,219,199)","rgb(224,224,224)","rgb(153,153,153)","rgb(77,77,77)"],7:["rgb(178,24,43)","rgb(239,138,98)","rgb(253,219,199)","rgb(255,255,255)","rgb(224,224,224)","rgb(153,153,153)","rgb(77,77,77)"],8:["rgb(178,24,43)","rgb(214,96,77)","rgb(244,165,130)","rgb(253,219,199)","rgb(224,224,224)","rgb(186,186,186)","rgb(135,135,135)","rgb(77,77,77)"],9:["rgb(178,24,43)","rgb(214,96,77)","rgb(244,165,130)","rgb(253,219,199)","rgb(255,255,255)","rgb(224,224,224)","rgb(186,186,186)","rgb(135,135,135)","rgb(77,77,77)"],10:["rgb(103,0,31)","rgb(178,24,43)","rgb(214,96,77)","rgb(244,165,130)","rgb(253,219,199)","rgb(224,224,224)","rgb(186,186,186)","rgb(135,135,135)","rgb(77,77,77)","rgb(26,26,26)"],11:["rgb(103,0,31)","rgb(178,24,43)","rgb(214,96,77)","rgb(244,165,130)","rgb(253,219,199)","rgb(255,255,255)","rgb(224,224,224)","rgb(186,186,186)","rgb(135,135,135)","rgb(77,77,77)","rgb(26,26,26)"]},
+RdYlBu:{3:["rgb(252,141,89)","rgb(255,255,191)","rgb(145,191,219)"],4:["rgb(215,25,28)","rgb(253,174,97)","rgb(171,217,233)","rgb(44,123,182)"],5:["rgb(215,25,28)","rgb(253,174,97)","rgb(255,255,191)","rgb(171,217,233)","rgb(44,123,182)"],6:["rgb(215,48,39)","rgb(252,141,89)","rgb(254,224,144)","rgb(224,243,248)","rgb(145,191,219)","rgb(69,117,180)"],7:["rgb(215,48,39)","rgb(252,141,89)","rgb(254,224,144)","rgb(255,255,191)","rgb(224,243,248)","rgb(145,191,219)","rgb(69,117,180)"],8:["rgb(215,48,39)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,144)","rgb(224,243,248)","rgb(171,217,233)","rgb(116,173,209)","rgb(69,117,180)"],9:["rgb(215,48,39)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,144)","rgb(255,255,191)","rgb(224,243,248)","rgb(171,217,233)","rgb(116,173,209)","rgb(69,117,180)"],10:["rgb(165,0,38)","rgb(215,48,39)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,144)","rgb(224,243,248)","rgb(171,217,233)","rgb(116,173,209)","rgb(69,117,180)","rgb(49,54,149)"],11:["rgb(165,0,38)","rgb(215,48,39)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,144)","rgb(255,255,191)","rgb(224,243,248)","rgb(171,217,233)","rgb(116,173,209)","rgb(69,117,180)","rgb(49,54,149)"]},
+Spectral:{3:["rgb(252,141,89)","rgb(255,255,191)","rgb(153,213,148)"],4:["rgb(215,25,28)","rgb(253,174,97)","rgb(171,221,164)","rgb(43,131,186)"],5:["rgb(215,25,28)","rgb(253,174,97)","rgb(255,255,191)","rgb(171,221,164)","rgb(43,131,186)"],6:["rgb(213,62,79)","rgb(252,141,89)","rgb(254,224,139)","rgb(230,245,152)","rgb(153,213,148)","rgb(50,136,189)"],7:["rgb(213,62,79)","rgb(252,141,89)","rgb(254,224,139)","rgb(255,255,191)","rgb(230,245,152)","rgb(153,213,148)","rgb(50,136,189)"],8:["rgb(213,62,79)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,139)","rgb(230,245,152)","rgb(171,221,164)","rgb(102,194,165)","rgb(50,136,189)"],9:["rgb(213,62,79)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,139)","rgb(255,255,191)","rgb(230,245,152)","rgb(171,221,164)","rgb(102,194,165)","rgb(50,136,189)"],10:["rgb(158,1,66)","rgb(213,62,79)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,139)","rgb(230,245,152)","rgb(171,221,164)","rgb(102,194,165)","rgb(50,136,189)","rgb(94,79,162)"],11:["rgb(158,1,66)","rgb(213,62,79)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,139)","rgb(255,255,191)","rgb(230,245,152)","rgb(171,221,164)","rgb(102,194,165)","rgb(50,136,189)","rgb(94,79,162)"]},
+RdYlGn:{3:["rgb(252,141,89)","rgb(255,255,191)","rgb(145,207,96)"],4:["rgb(215,25,28)","rgb(253,174,97)","rgb(166,217,106)","rgb(26,150,65)"],5:["rgb(215,25,28)","rgb(253,174,97)","rgb(255,255,191)","rgb(166,217,106)","rgb(26,150,65)"],6:["rgb(215,48,39)","rgb(252,141,89)","rgb(254,224,139)","rgb(217,239,139)","rgb(145,207,96)","rgb(26,152,80)"],7:["rgb(215,48,39)","rgb(252,141,89)","rgb(254,224,139)","rgb(255,255,191)","rgb(217,239,139)","rgb(145,207,96)","rgb(26,152,80)"],8:["rgb(215,48,39)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,139)","rgb(217,239,139)","rgb(166,217,106)","rgb(102,189,99)","rgb(26,152,80)"],9:["rgb(215,48,39)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,139)","rgb(255,255,191)","rgb(217,239,139)","rgb(166,217,106)","rgb(102,189,99)","rgb(26,152,80)"],10:["rgb(165,0,38)","rgb(215,48,39)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,139)","rgb(217,239,139)","rgb(166,217,106)","rgb(102,189,99)","rgb(26,152,80)","rgb(0,104,55)"],11:["rgb(165,0,38)","rgb(215,48,39)","rgb(244,109,67)","rgb(253,174,97)","rgb(254,224,139)","rgb(255,255,191)","rgb(217,239,139)","rgb(166,217,106)","rgb(102,189,99)","rgb(26,152,80)","rgb(0,104,55)"]}};
Index: /Dev/trunk/d3/lib/env-js/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/env-js/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/LICENSE	(revision 76)
@@ -0,0 +1,20 @@
+Copyright (c) 2009 John Resig, http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: /Dev/trunk/d3/lib/env-js/bin/envjs
===================================================================
--- /Dev/trunk/d3/lib/env-js/bin/envjs	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/bin/envjs	(revision 76)
@@ -0,0 +1,39 @@
+#!/bin/sh
+# 	Usage: envjs <platorm> file.js [file2.js ...]
+###########################################################################
+ENVJS_PLATFORM='node'
+
+# 	first arguments ($1) 
+#		may be a platform or is a file and the default platorm is used
+if [ -n "$1" ]; then 
+    if [ -n "$1" ]; then ENVJS_PLATFORM="$1"; shift; fi
+fi
+
+#   Run envjs with the given platform
+###########################################################################
+case "$ENVJS_PLATFORM" in
+
+    "node")
+        node envjs/node.js $@
+        ;;
+    "rhino")
+        java -Xmx512M -jar rhino/js.jar -opt -1 envjs/rhino.js $@
+        ;;
+    "rhino-debug")
+        java -cp rhino/js.jar org.mozilla.javascript.tools.debugger.Main envjs/rhino.js $@
+        ;;
+    "spyd")
+        python envjs/spydermonkey.py envjs/spydermonkey.js $@
+        ;;
+    "rubyracer")
+        ruby -rrubygems envjs/rubyracer.rb envjs/rubyracer.js $@
+        ;;
+    "johnson")
+        ruby -rrubygems envjs/johnson.rb envjs/johnson.js $@
+        ;;
+	*)
+		#	platform default means $1 was actually a file
+        node envjs/node.js $ENVJS_PLATFORM $@
+        ;;
+esac
+
Index: /Dev/trunk/d3/lib/env-js/envjs/console.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/console.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/console.js	(revision 76)
@@ -0,0 +1,278 @@
+
+/**
+ * @author envjs team
+ * @Console
+ */
+
+var Envjs = Envjs || require('./platform/core').Envjs;
+
+/*
+ * Envjs console.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+/**
+ * @author envjs team
+ * borrowed 99%-ish with love from firebug-lite
+ */
+
+//leaked globally on purpose;
+try{
+    console.log();
+}catch(e){
+
+
+function escapeHTML(value)
+{
+    return value;
+}
+
+function objectToString(object)
+{
+    try
+    {
+        return object+"";
+    }
+    catch (exc)
+    {
+        return null;
+    }
+}
+
+// ********************************************************************************************
+
+function appendText(object, html)
+{
+    html.push(escapeHTML(objectToString(object)));
+}
+
+function appendNull(object, html)
+{
+    html.push(escapeHTML(objectToString(object)));
+}
+
+function appendString(object, html)
+{
+    html.push(escapeHTML(objectToString(object)));
+}
+
+function appendInteger(object, html)
+{
+    html.push(escapeHTML(objectToString(object)));
+}
+
+function appendFloat(object, html)
+{
+    html.push(escapeHTML(objectToString(object)));
+}
+
+function appendFunction(object, html)
+{
+    var reName = /function ?(.*?)\(/;
+    var m = reName.exec(objectToString(object));
+    var name = m ? m[1] : "function";
+    html.push(escapeHTML(name));
+}
+
+function appendObjectFormatted(object, html)
+{
+    var text = objectToString(object);
+    var reObject = /\[object (.*?)\]/;
+
+    var m = reObject.exec(text);
+    html.push( m ? m[1] : text);
+}
+
+function appendSelector(object, html)
+{
+
+    html.push(escapeHTML(object.nodeName.toLowerCase()));
+    if (object.id) {
+        html.push(escapeHTML(object.id));
+    }
+    if (object.className) {
+        html.push(escapeHTML(object.className));
+    }
+}
+
+function appendNode(node, html)
+{
+    if (node.nodeType == 1)
+    {
+        html.push( node.nodeName.toLowerCase());
+
+        for (var i = 0; i < node.attributes.length; ++i)
+        {
+            var attr = node.attributes[i];
+            if (!attr.specified) {
+                continue;
+        }
+
+            html.push( attr.nodeName.toLowerCase(),escapeHTML(attr.nodeValue));
+        }
+
+        if (node.firstChild)
+        {
+            for (var child = node.firstChild; child; child = child.nextSibling) {
+                appendNode(child, html);
+        }
+
+            html.push( node.nodeName.toLowerCase());
+        }
+    }
+    else if (node.nodeType === 3)
+    {
+        html.push(escapeHTML(node.nodeValue));
+    }
+}
+
+function appendObject(object, html)
+{
+    try
+    {
+        if (object === undefined) {
+            appendNull("undefined", html);
+        } else if (object === null) {
+            appendNull("null", html);
+        } else if (typeof object == "string") {
+            appendString(object, html);
+    } else if (typeof object == "number") {
+            appendInteger(object, html);
+    } else if (typeof object == "function") {
+            appendFunction(object, html);
+        } else if (object.nodeType == 1) {
+            appendSelector(object, html);
+        } else if (typeof object == "object") {
+            appendObjectFormatted(object, html);
+        } else {
+            appendText(object, html);
+    }
+    }
+    catch (exc)
+    {
+    }
+}
+
+
+function parseFormat(format)
+{
+    var parts = [];
+
+    var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/;
+    var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat};
+
+    for (var m = reg.exec(format); m; m = reg.exec(format))
+    {
+        var type = m[8] ? m[8] : m[5];
+        var appender = type in appenderMap ? appenderMap[type] : appendObject;
+        var precision = m[3] ? parseInt(m[3], 10) : (m[4] == "." ? -1 : 0);
+
+        parts.push(format.substr(0, m[0][0] == "%" ? m.index : m.index+1));
+        parts.push({appender: appender, precision: precision});
+
+        format = format.substr(m.index+m[0].length);
+    }
+
+    parts.push(format);
+
+    return parts;
+}
+
+
+
+function logFormatted(objects, className)
+{
+    var html = [],
+        i= 0,
+        object;
+
+    var format = objects[0];
+    var objIndex = 0;
+
+    if (typeof(format) != "string")
+    {
+        format = "";
+        objIndex = -1;
+    }
+
+    var parts = parseFormat(format);
+    for (i = 0; i < parts.length; ++i)
+    {
+        var part = parts[i];
+        if (part && typeof(part) == "object")
+        {
+            object = objects[++objIndex];
+            part.appender(object, html);
+        }
+        else {
+            appendText(part, html);
+        }
+    }
+
+    for (i = objIndex+1; i < objects.length; ++i)
+    {
+        appendText(" ", html);
+
+        object = objects[i];
+        if (typeof(object) == "string") {
+            appendText(object, html);
+        } else {
+            appendObject(object, html);
+        }
+    }
+
+    Envjs.log(html.join(' '));
+}
+
+
+Console = function(module){
+    var $level,
+        $logger,
+        $null = function(){};
+    $logger = {
+        log: function(level){
+            logFormatted(arguments, "");
+        },
+        debug: function(level){
+            logFormatted(arguments, "DEBUG");
+        },
+        info:  function(level){
+            logFormatted(arguments, "INFO");
+        },
+        warn:  function(level){
+            logFormatted(arguments, "WARN");
+        },
+        error:  function(level){
+            logFormatted(arguments, "ERROR");
+        },
+        trace: function(){
+            Envjs.trace();
+        }
+    };
+
+    return $logger;
+};
+
+console = new Console();
+exports.console = console;
+
+}
+
+
+
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/css.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/css.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/css.js	(revision 76)
@@ -0,0 +1,695 @@
+
+/**
+ * DOM Style Level 2
+ 
+Leaked globally 
+
+var CSS2Properties,
+    CSSRule,
+    CSSStyleRule,
+    CSSImportRule,
+    CSSMediaRule,
+    CSSFontFaceRule,
+    CSSPageRule,
+    CSSRuleList,
+    CSSStyleSheet,
+    StyleSheet,
+    StyleSheetList;
+
+*/
+	
+var Envjs = Envjs || require('./platform/core').Envjs,
+	Document = require('./dom').Document,
+	HTMLElement = require('./html').HTMLElement;
+/*
+ * Envjs css.1.3.pre03 
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    } 
+    return a;
+}
+
+/**
+ * @author john resig
+ */
+//from jQuery
+function __setArray__( target, array ) {
+    // Resetting the length to 0, then using the native Array push
+    // is a super-fast way to populate an object with array-like properties
+    target.length = 0;
+    Array.prototype.push.apply( target, array );
+}
+
+/**
+ * @author ariel flesler
+ *    http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html
+ * @param {Object} str
+ */
+function __trim__( str ){
+    return (str || "").replace( /^\s+|\s+$/g, "" );
+}
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Document').debug('available'); 
+});
+
+/**
+ * Interface DocumentStyle (introduced in DOM Level 2)
+ * http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle
+ *
+ * interface DocumentStyle {
+ *   readonly attribute StyleSheetList   styleSheets;
+ * };
+ *
+ */
+
+__extend__(Document.prototype, {
+    get styleSheets() {
+        if (! this._styleSheets) {
+            this._styleSheets = new StyleSheetList();
+        }
+        return this._styleSheets;
+    }
+});
+
+}(/*Envjs.DOM.Document*/));
+/*
+ * CSS2Properties - DOM Level 2 CSS
+ * Renamed to CSSStyleDeclaration??
+ */
+
+var __toCamelCase__ = function(name) {
+    if (name) {
+        return name.replace(/\-(\w)/g, function(all, letter) {
+            return letter.toUpperCase();
+        });
+    }
+    return name;
+};
+
+var __toDashed__ = function(camelCaseName) {
+    if (camelCaseName) {
+        return camelCaseName.replace(/[A-Z]/g, function(all) {
+            return '-' + all.toLowerCase();
+        });
+    }
+    return camelCaseName;
+};
+
+var __cssTextToStyles__,
+    __supportedStyles__;
+    
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.CSS.CSS2Properties').debug('available'); 
+});
+
+exports.CSS2Properties = CSS2Properties = function(element){
+    //console.log('css2properties %s', __cssproperties__++);
+    this.styleIndex = __supportedStyles__;//non-standard
+    this.type = element.tagName;//non-standard
+    __setArray__(this, []);
+    __cssTextToStyles__(this, element.cssText || '');
+};
+__extend__(CSS2Properties.prototype, {
+    get cssText() {
+        var i, css = [];
+        for (i = 0; i < this.length; ++i) {
+            css.push(this[i] + ': ' + this.getPropertyValue(this[i]) + ';');
+        }
+        return css.join(' ');
+    },
+    set cssText(cssText) {
+        __cssTextToStyles__(this, cssText);
+    },
+    getPropertyCSSValue: function(name) {
+        //?
+    },
+    getPropertyPriority: function() {
+
+    },
+    getPropertyValue: function(name) {
+        var index, cname = __toCamelCase__(name);
+        if (cname in this.styleIndex) {
+            return this[cname];
+        } else {
+            index = Array.prototype.indexOf.apply(this, [name]);
+            if (index > -1) {
+                return this[index];
+            }
+        }
+        return null;
+    },
+    item: function(index) {
+        return this[index];
+    },
+    removeProperty: function(name) {
+        this.styleIndex[name] = null;
+        name = __toDashed__(name);
+        var index = Array.prototype.indexOf.apply(this, [name]);
+        if (index > -1) {
+            Array.prototype.splice.apply(this, [1,index]);
+        }
+    },
+    setProperty: function(name, value, priority) {
+        var nval;
+        name = __toCamelCase__(name);
+        if (value !== undefined && name in this.styleIndex) {
+            // NOTE:  parseFloat('300px') ==> 300  no
+            // NOTE:  Number('300px') ==> Nan      yes
+            nval = Number(value);
+            this.styleIndex[name] = isNaN(nval) ? value : nval;
+            name = __toDashed__(name);
+            if (Array.prototype.indexOf.apply(this, [name]) === -1 ){
+                Array.prototype.push.apply(this,[name]);
+            }
+        }
+    },
+    toString: function() {
+        return '[object CSS2Properties]';
+    }
+});
+
+
+
+__cssTextToStyles__ = function(css2props, cssText) {
+    //console.log('__cssTextToStyles__ %s %s', css2props, cssText);
+    var i, style, styles = cssText.split(';');
+    for (i = 0; i < styles.length; ++i) {
+        style = styles[i].split(':');
+        if (style.length === 2) {
+            css2props.setProperty(
+                style[0].replace(' ', '', 'g'),
+                style[1].replace(' ', '', 'g')
+            );
+        }
+    }
+};
+
+//Obviously these arent all supported but by commenting out various
+//sections this provides a single location to configure what is
+//exposed as supported.
+__supportedStyles__ = {
+    azimuth:                null,
+    background:             null,
+    backgroundAttachment:   null,
+    backgroundColor:        'rgb(0,0,0)',
+    backgroundImage:        null,
+    backgroundPosition:     null,
+    backgroundRepeat:       null,
+    border:                 null,
+    borderBottom:           null,
+    borderBottomColor:      null,
+    borderBottomStyle:      null,
+    borderBottomWidth:      null,
+    borderCollapse:         null,
+    borderColor:            null,
+    borderLeft:             null,
+    borderLeftColor:        null,
+    borderLeftStyle:        null,
+    borderLeftWidth:        null,
+    borderRight:            null,
+    borderRightColor:       null,
+    borderRightStyle:       null,
+    borderRightWidth:       null,
+    borderSpacing:          null,
+    borderStyle:            null,
+    borderTop:              null,
+    borderTopColor:         null,
+    borderTopStyle:         null,
+    borderTopWidth:         null,
+    borderWidth:            null,
+    bottom:                 null,
+    captionSide:            null,
+    clear:                  null,
+    clip:                   null,
+    color:                  null,
+    content:                null,
+    counterIncrement:       null,
+    counterReset:           null,
+    cssFloat:               null,
+    cue:                    null,
+    cueAfter:               null,
+    cueBefore:              null,
+    cursor:                 null,
+    direction:              'ltr',
+    display:                null,
+    elevation:              null,
+    emptyCells:             null,
+    font:                   null,
+    fontFamily:             null,
+    fontSize:               '1em',
+    fontSizeAdjust:         null,
+    fontStretch:            null,
+    fontStyle:              null,
+    fontVariant:            null,
+    fontWeight:             null,
+    height:                 '',
+    left:                   null,
+    letterSpacing:          null,
+    lineHeight:             null,
+    listStyle:              null,
+    listStyleImage:         null,
+    listStylePosition:      null,
+    listStyleType:          null,
+    margin:                 null,
+    marginBottom:           '0px',
+    marginLeft:             '0px',
+    marginRight:            '0px',
+    marginTop:              '0px',
+    markerOffset:           null,
+    marks:                  null,
+    maxHeight:              null,
+    maxWidth:               null,
+    minHeight:              null,
+    minWidth:               null,
+    opacity:                1,
+    orphans:                null,
+    outline:                null,
+    outlineColor:           null,
+    outlineOffset:          null,
+    outlineStyle:           null,
+    outlineWidth:           null,
+    overflow:               null,
+    overflowX:              null,
+    overflowY:              null,
+    padding:                null,
+    paddingBottom:          '0px',
+    paddingLeft:            '0px',
+    paddingRight:           '0px',
+    paddingTop:             '0px',
+    page:                   null,
+    pageBreakAfter:         null,
+    pageBreakBefore:        null,
+    pageBreakInside:        null,
+    pause:                  null,
+    pauseAfter:             null,
+    pauseBefore:            null,
+    pitch:                  null,
+    pitchRange:             null,
+    position:               null,
+    quotes:                 null,
+    richness:               null,
+    right:                  null,
+    size:                   null,
+    speak:                  null,
+    speakHeader:            null,
+    speakNumeral:           null,
+    speakPunctuation:       null,
+    speechRate:             null,
+    stress:                 null,
+    tableLayout:            null,
+    textAlign:              null,
+    textDecoration:         null,
+    textIndent:             null,
+    textShadow:             null,
+    textTransform:          null,
+    top:                    null,
+    unicodeBidi:            null,
+    verticalAlign:          null,
+    visibility:             '',
+    voiceFamily:            null,
+    volume:                 null,
+    whiteSpace:             null,
+    widows:                 null,
+    width:                  '1px',
+    wordSpacing:            null,
+    zIndex:                 1
+};
+
+var __displayMap__ = {
+    DIV      : 'block',
+    P        : 'block',
+    A        : 'inline',
+    CODE     : 'inline',
+    PRE      : 'block',
+    SPAN     : 'inline',
+    TABLE    : 'table',
+    THEAD    : 'table-header-group',
+    TBODY    : 'table-row-group',
+    TR       : 'table-row',
+    TH       : 'table-cell',
+    TD       : 'table-cell',
+    UL       : 'block',
+    LI       : 'list-item'
+};
+
+var __addStyleAccessor__ = function(name){
+    if (name === 'width' || name === 'height') {
+        CSS2Properties.prototype.__defineGetter__(name, function() {
+            if (this.display === 'none'){
+                return '0px';
+            }
+            return this.styleIndex[name];
+        });
+    } else if (name === 'display') {
+        //display will be set to a tagName specific value if ''
+        CSS2Properties.prototype.__defineGetter__(name, function() {
+            var val = this.styleIndex[name];
+            val = val ? val :__displayMap__[this.type];
+            return val;
+        });
+    } else {
+        CSS2Properties.prototype.__defineGetter__(name, function() {
+            return this.styleIndex[name];
+        });
+    }
+    CSS2Properties.prototype.__defineSetter__(name, function(value) {
+        this.setProperty(name, value);
+    });
+};
+
+for (var style in __supportedStyles__) {
+    if (__supportedStyles__.hasOwnProperty(style)) {
+        __addStyleAccessor__(style);
+    }
+}
+
+}(/*Envjs.CSS.CSS2Properties*/));
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.CSS.CSSRule').debug('available'); 
+});
+
+/*
+ * CSSRule - DOM Level 2
+ */
+exports.CSSRule = CSSRule = function(options) {
+
+    var $style,
+        $selectorText = options.selectorText ? options.selectorText : '';
+        $style = new CSS2Properties({
+            cssText: options.cssText ? options.cssText : null
+        });
+
+    return __extend__(this, {
+        get style(){
+            return $style;
+        },
+        get selectorText(){
+            return $selectorText;
+        },
+        set selectorText(selectorText){
+            $selectorText = selectorText;
+        },
+        toString : function(){
+            return "[object CSSRule]";
+        }
+    });
+};
+
+CSSRule.STYLE_RULE     =  1;
+CSSRule.IMPORT_RULE    =  3;
+CSSRule.MEDIA_RULE     =  4;
+CSSRule.FONT_FACE_RULE =  5;
+CSSRule.PAGE_RULE      =  6;
+//CSSRule.NAMESPACE_RULE = 10;
+
+
+CSSStyleRule = function() {
+
+};
+
+CSSImportRule = function() {
+
+};
+
+CSSMediaRule = function() {
+
+};
+
+CSSFontFaceRule = function() {
+
+};
+
+CSSPageRule = function() {
+
+};
+
+
+CSSRuleList = function(data) {
+    this.length = 0;
+    __setArray__(this, data);
+};
+
+__extend__(CSSRuleList.prototype, {
+    item : function(index) {
+        if ((index >= 0) && (index < this.length)) {
+            // bounds check
+            return this[index];
+        }
+        return null;
+    },
+    toString: function() {
+        return '[object CSSRuleList]';
+    }
+});
+
+}(/*Envjs.CSS.CSSRuleList*/));
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.CSS.CSSStyleSheet').debug('available'); 
+});
+
+/**
+ * StyleSheet
+ * http://dev.w3.org/csswg/cssom/#stylesheet
+ *
+ * interface StyleSheet {
+ *   readonly attribute DOMString type;
+ *   readonly attribute DOMString href;
+ *   readonly attribute Node ownerNode;
+ *   readonly attribute StyleSheet parentStyleSheet;
+ *   readonly attribute DOMString title;
+ *   [PutForwards=mediaText] readonly attribute MediaList media;
+ *          attribute boolean disabled;
+ * };
+ */
+StyleSheet = function() {};
+
+/*
+ * CSSStyleSheet
+ * http://dev.w3.org/csswg/cssom/#cssstylesheet
+ *
+ * interface CSSStyleSheet : StyleSheet {
+ *   readonly attribute CSSRule ownerRule;
+ *   readonly attribute CSSRuleList cssRules;
+ *   unsigned long insertRule(DOMString rule, unsigned long index);
+ *   void deleteRule(unsigned long index);
+ * };
+ */
+exports.CSSStyleSheets = CSSStyleSheet = function(options){
+    var $cssRules,
+        $disabled = options.disabled ? options.disabled : false,
+        $href = options.href ? options.href : null,
+        $parentStyleSheet = options.parentStyleSheet ? options.parentStyleSheet : null,
+        $title = options.title ? options.title : "",
+        $type = "text/css";
+
+    function parseStyleSheet(text){
+        //$debug("parsing css");
+        //this is pretty ugly, but text is the entire text of a stylesheet
+        var cssRules = [];
+        if (!text) {
+            text = '';
+        }
+        text = __trim__(text.replace(/\/\*(\r|\n|.)*\*\//g,""));
+        // TODO: @import
+        var blocks = text.split("}");
+        blocks.pop();
+        var i, j, len = blocks.length;
+        var definition_block, properties, selectors;
+        for (i=0; i<len; i++) {
+            definition_block = blocks[i].split("{");
+            if (definition_block.length === 2) {
+                selectors = definition_block[0].split(",");
+                for (j=0; j<selectors.length; j++) {
+                    cssRules.push(new CSSRule({
+                        selectorText : __trim__(selectors[j]),
+                        cssText      : definition_block[1]
+                    }));
+                }
+            }
+        }
+        return cssRules;
+    }
+
+    $cssRules = new CSSRuleList(parseStyleSheet(options.textContent));
+
+    return __extend__(this, {
+        get cssRules(){
+            return $cssRules;
+        },
+        get rule(){
+            return $cssRules;
+        },//IE - may be deprecated
+        get href(){
+            return $href;
+        },
+        get parentStyleSheet(){
+            return $parentStyleSheet;
+        },
+        get title(){
+            return $title;
+        },
+        get type(){
+            return $type;
+        },
+        addRule: function(selector, style, index){/*TODO*/},
+        deleteRule: function(index){/*TODO*/},
+        insertRule: function(rule, index){/*TODO*/},
+        //IE - may be deprecated
+        removeRule: function(index){
+            this.deleteRule(index);
+        }
+    });
+};
+
+exports.StyleSheetList = StyleSheetList = function() {};
+
+StyleSheetList.prototype = [];
+
+__extend__(StyleSheetList.prototype, {
+    item : function(index) {
+        if ((index >= 0) && (index < this.length)) {
+            // bounds check
+            return this[index];
+        }
+        return null;
+    },
+    toString: function() {
+        return '[object StyleSheetList]';
+    }
+});
+
+}(/*Envjs.CSS.CSSStyleSheet*/));
+/**
+ * This extends HTMLElement to handle CSS-specific interfaces.
+ *
+ * More work / research would be needed to extend just (DOM) Element
+ * for xml use and additional changes for just HTMLElement.
+ */
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.HTML.HTMLElement').debug('available'); 
+});
+
+
+/**
+ * Replace or add  the getter for 'style'
+ *
+ * This could be wrapped in a closure
+ */
+var $css2properties = [{}];
+
+__extend__(HTMLElement.prototype, {
+    get style(){
+        if ( !this.css2uuid ) {
+            this.css2uuid = $css2properties.length;
+            $css2properties[this.css2uuid] = new CSS2Properties(this);
+        }
+        return $css2properties[this.css2uuid];
+    }
+});
+
+/**
+ * Change for how 'setAttribute("style", ...)' works
+ *
+ * We are truly adding functionality to HtmlElement.setAttribute, not
+ * replacing it.  So we need to save the old one first, call it, then
+ * do our stuff.  If we need to do more hacks like this, HTMLElement
+ * (or regular Element) needs to have a hooks array or dispatch table
+ * for global changes.
+ *
+ * This could be wrapped in a closure if desired.
+ */
+var updateCss2Props = function(elem, values) {
+    //console.log('__updateCss2Props__ %s %s', elem, values);
+    if ( !elem.css2uuid ) {
+        elem.css2uuid = $css2properties.length;
+        $css2properties[elem.css2uuid] = new CSS2Properties(elem);
+    }
+    __cssTextToStyles__($css2properties[elem.css2uuid], values);
+};
+
+var origSetAttribute =  HTMLElement.prototype.setAttribute;
+
+HTMLElement.prototype.setAttribute = function(name, value) {
+    //console.log("CSS set attribute: " + name + ", " + value);
+    origSetAttribute.apply(this, arguments);
+    if (name === "style") {
+        updateCss2Props(this, value);
+    }
+};
+
+var origGetAttribute =  HTMLElement.prototype.getAttribute;
+
+HTMLElement.prototype.getAttribute = function(name) {
+    //console.log("CSS set attribute: " + name + ", " + value);
+	var style;
+    if (name === "style") {
+        style = this.style.cssText;
+		return style===""?null:style;
+    }else{
+	    return origGetAttribute.apply(this, arguments);
+	}
+};
+
+}(/*Envjs.HTML.HTMLElement*/));
+
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/dom.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/dom.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/dom.js	(revision 76)
@@ -0,0 +1,8972 @@
+/*
+ * Envjs dom.1.3.pre03 
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ * 
+ * Parts of the implementation were originally written by:\
+ * and Jon van Noort   (jon@webarcana.com.au) \
+ * and David Joham     (djoham@yahoo.com)",\ 
+ * and Scott Severtson
+ * 
+ * This file simply provides the global definitions we need to \
+ * be able to correctly implement to core browser DOM interfaces."
+
+The following are leaked globally intentionally
+
+var Attr,
+    CDATASection,
+    CharacterData,
+    Comment,
+    Document,
+    DocumentFragment,
+    DocumentType,
+    DOMException,
+    DOMImplementation,
+    Element,
+    Entity,
+    EntityReference,
+    NamedNodeMap,
+    Namespace,
+    Node,
+    NodeList,
+    Notation,
+    ProcessingInstruction,
+    Text,
+    Range,
+    XMLSerializer,
+    DOMParser,
+	XPathResult,
+	XPathExpression;
+
+*/
+
+var Envjs = Envjs || require('./platform/core').Envjs,
+	After = After || require('./platform/core').After;
+
+/*
+ * Envjs dom.1.3.pre03 
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    } 
+    return a;
+}
+
+/**
+ * @author john resig
+ */
+//from jQuery
+function __setArray__( target, array ) {
+    // Resetting the length to 0, then using the native Array push
+    // is a super-fast way to populate an object with array-like properties
+    target.length = 0;
+    Array.prototype.push.apply( target, array );
+}
+var __findItemIndex__,
+	__insertBefore__,
+	__replaceChild__,
+	__removeChild__,
+	__appendChild__,
+	__addToIndexes__,
+	__removeFromIndexes__,
+	__cloneNodes__;
+	
+//see namednodemap for these implementations
+var __addToNamedIndexes__, 
+	__removeFromNamedIndexes__;
+	
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.NodeList').debug('available'); 
+});
+/**
+ * @class  NodeList -
+ *      provides the abstraction of an ordered collection of nodes
+ *
+ * @param  ownerDocument : Document - the ownerDocument
+ * @param  parentNode    : Node - the node that the NodeList is attached to (or null)
+ */
+exports.NodeList = NodeList = function(ownerDocument, parentNode) {
+    this.parentNode = parentNode;
+    this.ownerDocument = ownerDocument;
+    this._readonly = false;
+};
+NodeList.prototype = [];
+__extend__(NodeList.prototype, {
+    item : function(index) {
+        var ret = null;
+        if ((index >= 0) && (index < this.length)) {
+            // bounds check
+            ret = this[index];
+        }
+        // if the index is out of bounds, default value null is returned
+        return ret;
+    },
+    get xml() {
+        var ret = "",
+            j;
+
+        // create string containing the concatenation of the string values of each child
+        for (j=0; j < this.length; j++) {
+            if(this[j] !== null){
+                if(this[j].nodeType == Node.TEXT_NODE && j>0 &&
+                   this[j-1].nodeType == Node.TEXT_NODE){
+                    //add a single space between adjacent text nodes
+                    ret += " "+this[j].xml;
+                }else{
+                    ret += this[j].xml;
+                }
+            }
+        }
+        return ret;
+    },
+    toArray: function () {
+		return this;
+    },
+    toString: function(){
+        return "[object NodeList]";
+    }
+});
+
+
+/**
+ * @method __findItemIndex__
+ *      find the item index of the node
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  node : Node
+ * @return : int
+ */
+__findItemIndex__ = function (nodelist, node) {
+    // if node is not found, default value -1 is returned
+    // return ret;
+	return nodelist.indexOf(node);
+};
+
+/**
+ * @method __insertBefore__
+ *      insert the specified Node into the NodeList before the specified index
+ *      Used by Node.insertBefore(). Note: Node.insertBefore() is responsible
+ *      for Node Pointer surgery __insertBefore__ simply modifies the internal
+ *      data structure (Array).
+ * @param  newChild      : Node - the Node to be inserted
+ * @param  refChildIndex : int     - the array index to insert the Node before
+ */
+__insertBefore__ = function(nodelist, newChild, refChildIndex) {
+    if ((refChildIndex >= 0) && (refChildIndex <= nodelist.length)) {
+        // bounds check
+        if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
+            // node is a DocumentFragment
+            // append the children of DocumentFragment
+            Array.prototype.splice.apply(nodelist,
+                [refChildIndex, 0].concat(newChild.childNodes.toArray()));
+        }
+        else {
+            // append the newChild
+            Array.prototype.splice.apply(nodelist,[refChildIndex, 0, newChild]);
+			__addToIndexes__(newChild, nodelist.parentNode);
+        }
+    }
+};
+
+/**
+ * @method __replaceChild__
+ *      replace the specified Node in the NodeList at the specified index
+ *      Used by Node.replaceChild(). Note: Node.replaceChild() is responsible
+ *      for Node Pointer surgery __replaceChild__ simply modifies the internal
+ *      data structure (Array).
+ *
+ * @param  newChild      : Node - the Node to be inserted
+ * @param  refChildIndex : int     - the array index to hold the Node
+ */
+__replaceChild__ = function(nodelist, newChild, refChildIndex) {
+    var ret = null;
+
+    // bounds check
+    if ((refChildIndex >= 0) && (refChildIndex < nodelist.length)) {
+        // preserve old child for return
+        ret = nodelist[refChildIndex];
+
+        if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
+            // node is a DocumentFragment
+            // get array containing children prior to refChild
+            Array.prototype.splice.apply(nodelist,
+                [refChildIndex, 1].concat(newChild.childNodes.toArray()));
+        }
+        else {
+            // simply replace node in array (links between Nodes are
+            // made at higher level)
+            nodelist[refChildIndex] = newChild;
+        }
+    }
+    // return replaced node
+    return ret;
+};
+
+/**
+ * @method __removeChild__
+ *      remove the specified Node in the NodeList at the specified index
+ *      Used by Node.removeChild(). Note: Node.removeChild() is responsible
+ *      for Node Pointer surgery __removeChild__ simply modifies the internal
+ *      data structure (Array).
+ * @param  refChildIndex : int - the array index holding the Node to be removed
+ */
+__removeChild__ = function(nodelist, refChildIndex) {
+    var ret = null;
+
+    if (refChildIndex > -1) {
+        // found it!
+        // return removed node
+        ret = nodelist[refChildIndex];
+        // rebuild array without removed child
+        Array.prototype.splice.apply(nodelist,[refChildIndex, 1]);
+		__removeFromIndexes__(ret, nodelist.parentNode);
+    }
+    // return removed node
+    return ret;
+};
+
+/**
+ * @method __appendChild__
+ *      append the specified Node to the NodeList. Used by Node.appendChild().
+ *      Note: Node.appendChild() is responsible for Node Pointer surgery
+ *      __appendChild__ simply modifies the internal data structure (Array).
+ * @param  newChild      : Node - the Node to be inserted
+ */
+__appendChild__ = function(nodelist, newChild) {
+	log.debug('Appending child %s to nodelist %s', newChild.nodeName, nodelist.length);
+	var i;
+    if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
+        // newChild is a DocumentFragment
+        // append the children of DocumentFragment
+        Array.prototype.push.apply(nodelist, newChild.childNodes.toArray() );
+		for(i=0;i< newChild.childNodes.length;i++){
+			__addToIndexes__(newChild.childNodes[i], nodelist.parentNode);
+		}
+    } else {
+        // simply add node to array (links between Nodes are made at higher level)
+        Array.prototype.push.apply(nodelist, [newChild]);
+		__addToIndexes__(newChild, nodelist.parentNode);
+    }
+
+};
+
+__addToIndexes__ = function(node, ancestor){
+	var indexes, index, normalizedName, i, j, descendingIndex, offset, sibling, children, id, name;
+	if(node.nodeType == Node.ELEMENT_NODE){
+		log.debug('updating node indexes for node %s ancestor %s', node.tagName, ancestor.nodeName);
+		//now we need to walk up all ancestors updating nodelist indexes
+		normalizedName = (node.tagName+'').toLowerCase();
+		
+		//if the node doesnt have a parentNode yet then it has been imported
+		//into the document, but it is just now being appended.  This means we
+		//need to merge the nodes indexes into the ancestors (which will become
+		//the parentNode just after this operation completes)
+		if(!node.parentNode){
+			indexes = node._indexes_;
+			for(name in indexes){
+				//this is the index of all descendants of the ancestor with the given tagname
+				if(!ancestor._indexes_.hasOwnProperty(name) && name != normalizedName ){
+					
+					ancestor._indexes_[name] = [];
+					for(j=0;j<indexes[name].length;j++){
+						ancestor._indexes_[name].push(indexes[name][j]);
+					}
+					
+				}else if(name != '*' && name != normalizedName){
+					
+					offset = 0;
+					//this is the index of all descendants with the given tagname
+					index = ancestor._indexes_[name];
+					children = ancestor.childNodes;
+					for(i=0;i<children.length;i++){
+						sibling = children[i];
+						if(sibling !== node && sibling.nodeType === Node.ELEMENT_NODE && sibling.tagName === node.tagName){
+							//find the first child, if any, that exist in this index so we can determine
+							//the document offset at which to update this index
+							offset += (sibling._indexes_[name]?sibling._indexes_[name].length:0)+1;
+						}else if(sibling === node){
+							break;
+						}
+					}
+					//the descending index is additively a part of the new index
+					descendingIndex = node._indexes_[name]?node._indexes_[name]:[];
+					Array.prototype.splice.apply(	
+						index, 
+						Array.prototype.concat.apply(
+							[offset, 0],
+							descendingIndex.slice(0,descendingIndex.length)
+						)
+					);
+					log.debug('added %s to index %s -> %s', node.tagName, ancestor.tagName||'document', offset);
+					
+				}
+			}
+		}
+		//now we basically need to crawl up the ancestor chain, merging indexes
+		//using some smarts
+		while(ancestor){
+			//these are all the indexes already built on the ancestor
+			indexes = ancestor._indexes_;
+			if(!(normalizedName in indexes)){
+				//make sure we have an index for this particular tagname
+				indexes[normalizedName] = 
+					new NodeList(node.ownerDocument, ancestor);
+			}
+			
+			offset = 1;
+			//this is the index of all descendants with the given tagname
+			index = indexes[normalizedName];
+			children = ancestor.childNodes;
+			for(i=0;i<children.length;i++){
+				sibling = children[i];
+				if(sibling !== node && sibling.nodeType === Node.ELEMENT_NODE && sibling.tagName === node.tagName){
+					//find the first child, if any, that exist in this index so we can determine
+					//the document offset at which to update this index
+					offset += (sibling._indexes_[normalizedName]?sibling._indexes_[normalizedName].length:0)+1;
+				}else if(sibling === node){
+					break;
+				}
+			}
+			//the descending index is additively a part of the new index
+			descendingIndex = node._indexes_[normalizedName]?node._indexes_[normalizedName]:[];
+			Array.prototype.splice.apply(	
+				index, 
+				[offset, 0, node].concat(
+					descendingIndex.slice(0,descendingIndex.length)
+				)
+			);
+			log.debug('added %s to index %s -> %s', node.tagName, ancestor.tagName||'document', offset);
+			
+			
+			offset = 0;
+			//this is the index of all descendants with the given tagname, so simply follow
+			//the same procedure as above but use the '*' index
+			index = indexes['*'];
+			children = ancestor.childNodes;
+			for(i=0;i<children.length;i++){
+				sibling = children[i];
+				if(sibling !== node && sibling.nodeType === Node.ELEMENT_NODE ){
+					offset += (sibling._indexes_['*']?sibling._indexes_['*'].length:0)+1;
+				}else if(sibling === node){
+					break;
+				}
+			}
+			descendingIndex = node._indexes_['*']?node._indexes_['*']:[];
+			Array.prototype.splice.apply(
+				index, 
+				[offset, 0, node].concat(
+					descendingIndex.slice(0,descendingIndex.length)
+				)
+			);
+			//console.log('added %s to index * -> %s', node.tagName,  offset);
+			
+			//handle input type elements and their ancestor form elements
+			//So far we dont bother with maintaining document order for this index
+			if('FORM' == ancestor.nodeName){
+				switch (node.nodeName) {
+	            case 'BUTTON':
+	            case 'FIELDSET':
+	            case 'INPUT':
+	            case 'KEYGEN':
+	            case 'OBJECT':
+	            case 'OUTPUT':
+	            case 'SELECT':
+	            case 'TEXTAREA':
+					if(!indexes.hasOwnProperty('$elements')){
+						//make sure we have an index for the form.elements
+						indexes.$elements = 
+							new NodeList(node.ownerDocument, ancestor);
+					}
+					Array.prototype.push.apply(indexes.$elements, [node]);
+					name = node.getAttribute('name');
+					if( name && !ancestor[name] ){
+						//<form name='foo'><input name='bar' is available via document.foo.bar
+						ancestor[name] = node;
+					}
+	            }
+			}
+			//walk straight up the dom updating other indexes
+			log.debug('walking up node chain, node %s has parentNode %s', ancestor.nodeName, ancestor.parentNode);
+			ancestor = ancestor.parentNode;
+			
+		}
+	}
+};
+
+__removeFromIndexes__ = function(node, ancestor){
+	var indexes, index, normalizedName, i, length, offset, id, name, doc;
+	
+	if(node.nodeType == Node.ELEMENT_NODE){
+		normalizedName = (node.tagName+'').toLowerCase();
+		//console.log('removing node from live indexes for node %s', node.tagName);
+		id = node.getAttribute('id');
+		if(id){
+			node.ownerDocument._indexes_["#"+id] = null;
+		}	
+		name = node.getAttribute('name');
+		if(name){
+			__removeFromNamedIndexes__('name', name, node);
+		}
+		while(ancestor){
+			indexes = ancestor._indexes_;
+			if(!(normalizedName in indexes)){
+				indexes[normalizedName] = 
+					new NodeList(node.ownerDocument, ancestor);
+				//the index did not exist on the ancestor until now so
+				//dont bother cleaning it, just move up the ancestor chain
+				ancestor = ancestor.parentNode;
+				continue;
+			}
+			index = indexes[normalizedName];
+			i = Array.prototype.indexOf.apply(index, [node]);
+			if(i>-1){
+				offset = node._indexes_[normalizedName];
+				offset = offset?offset.length:0;
+				length = 1+offset;
+				//console.log('removing %s[%s] from index %s -> %s', node.tagName, i, ancestor.tagName, index.toArray());
+				Array.prototype.splice.apply(index, [i,length]); 
+			}
+			
+			index = indexes['*'];
+			i = Array.prototype.indexOf.apply(index, [node]);
+			if(i>-1){
+				offset = node._indexes_['*'];
+				offset = offset?offset.length:0;
+				length = 1+offset;
+				//console.log('removing %s from index * -> %s', node.tagName,  index.toArray());
+				Array.prototype.splice.apply(index, [i,length]); 
+			}
+			
+			//handle input type elements and their ancestor form elements
+			//So far we dont bother with maintaining document order for this index
+			if('FORM' == ancestor.nodeName){
+				switch (node.nodeName) {
+	            case 'BUTTON':
+	            case 'FIELDSET':
+	            case 'INPUT':
+	            case 'KEYGEN':
+	            case 'OBJECT':
+	            case 'OUTPUT':
+	            case 'SELECT':
+	            case 'TEXTAREA':
+	                doc = node.ownerDocument;
+					if(!indexes.hasOwnProperty('$elements')){
+						//make sure we have an index for the form.elements
+						indexes.$elements = 
+							new NodeList(node.ownerDocument, ancestor);
+					}
+					offset = Array.prototype.indexOf.apply(doc._indexes_.$elements, [node]);
+					if(index > -1){
+						Array.prototype.splice.apply(doc._indexes_.$elements,[offset,1]);
+					}
+					name = node.getAttribute('name');
+					if( name && ancestor[name] == node ){
+						//<form name='foo'><input name='bar' is no longer available via document.foo.bar
+						delete ancestor[name];
+					}
+	            }
+			}
+			ancestor = ancestor.parentNode;
+		}
+	}
+};
+
+/**
+ * @method __cloneNodes__ -
+ *      Returns a NodeList containing clones of the Nodes in this NodeList
+ * @param  deep : boolean -
+ *      If true, recursively clone the subtree under each of the nodes;
+ *      if false, clone only the nodes themselves (and their attributes,
+ *      if it is an Element).
+ * @param  parentNode : Node - the new parent of the cloned NodeList
+ * @return : NodeList - NodeList containing clones of the Nodes in this NodeList
+ */
+__cloneNodes__ = function(nodelist, deep, parentNode) {
+    var cloneNodeList = new NodeList(nodelist.ownerDocument, parentNode);
+
+    // create list containing clones of each child
+    for (var i=0; i < nodelist.length; i++) {
+        __appendChild__(cloneNodeList, nodelist[i].cloneNode(deep));
+    }
+
+    return cloneNodeList;
+};
+
+}(/*Envjs.DOM.Nodelist*/));
+
+
+
+
+
+var __ownerDocument__ = function(node){
+        return (node.nodeType == Node.DOCUMENT_NODE)?node:node.ownerDocument;
+    },
+    __recursivelyGatherText__,
+    __isAncestor__,
+    __escapeXML__,
+    __unescapeXML__,
+    __getElementsByTagNameRecursive__,
+    __getElementsByTagNameNSRecursive__;
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Node').debug('available'); 
+});
+/**
+ * @class  Node -
+ *      The Node interface is the primary datatype for the entire
+ *      Document Object Model. It represents a single node in the
+ *      document tree.
+ * @param  ownerDocument : Document - The Document object associated with this node.
+ */
+
+exports.Node = Node = function(ownerDocument) {
+    this.baseURI = 'about:blank';
+    this.namespaceURI = null;
+    this.nodeName = "";
+    this.nodeValue = null;
+
+    // A NodeList that contains all children of this node. If there are no
+    // children, this is a NodeList containing no nodes.  The content of the
+    // returned NodeList is "live" in the sense that, for instance, changes to
+    // the children of the node object that it was created from are immediately
+    // reflected in the nodes returned by the NodeList accessors; it is not a
+    // static snapshot of the content of the node. This is true for every
+    // NodeList, including the ones returned by the getElementsByTagName method.
+    this.childNodes      = new NodeList(ownerDocument, this);
+
+    // The first child of this node. If there is no such node, this is null
+    this.firstChild      = null;
+    // The last child of this node. If there is no such node, this is null.
+    this.lastChild       = null;
+    // The node immediately preceding this node. If there is no such node,
+    // this is null.
+    this.previousSibling = null;
+    // The node immediately following this node. If there is no such node,
+    // this is null.
+    this.nextSibling     = null;
+
+    this.attributes = null;
+    // The namespaces in scope for this node
+    this._namespaces = new NamespaceNodeMap(ownerDocument, this);
+    this._readonly = false;
+
+
+    //IMPORTANT: These must come last so rhino will not iterate parent
+    //           properties before child properties.  (qunit.equiv issue)
+
+    // The parent of this node. All nodes, except Document, DocumentFragment,
+    // and Attr may have a parent.  However, if a node has just been created
+    // and not yet added to the tree, or if it has been removed from the tree,
+    // this is null
+    this.parentNode      = null;
+    // The Document object associated with this node
+    this.ownerDocument = ownerDocument;
+	this._indexes_ = {
+		'ancestors'	: new NodeList(ownerDocument, this),
+		'*': new NodeList(ownerDocument, this)
+	};
+
+};
+
+// nodeType constants
+Node.ELEMENT_NODE                = 1;
+Node.ATTRIBUTE_NODE              = 2;
+Node.TEXT_NODE                   = 3;
+Node.CDATA_SECTION_NODE          = 4;
+Node.ENTITY_REFERENCE_NODE       = 5;
+Node.ENTITY_NODE                 = 6;
+Node.PROCESSING_INSTRUCTION_NODE = 7;
+Node.COMMENT_NODE                = 8;
+Node.DOCUMENT_NODE               = 9;
+Node.DOCUMENT_TYPE_NODE          = 10;
+Node.DOCUMENT_FRAGMENT_NODE      = 11;
+Node.NOTATION_NODE               = 12;
+Node.NAMESPACE_NODE              = 13;
+
+Node.DOCUMENT_POSITION_EQUAL        = 0x00;
+Node.DOCUMENT_POSITION_DISCONNECTED = 0x01;
+Node.DOCUMENT_POSITION_PRECEDING    = 0x02;
+Node.DOCUMENT_POSITION_FOLLOWING    = 0x04;
+Node.DOCUMENT_POSITION_CONTAINS     = 0x08;
+Node.DOCUMENT_POSITION_CONTAINED_BY = 0x10;
+Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC      = 0x20;
+
+
+__extend__(Node.prototype, {
+    get localName(){
+        return this.prefix?
+            this.nodeName.substring(this.prefix.length+1, this.nodeName.length):
+            this.nodeName;
+    },
+    get prefix(){
+        return this.nodeName.split(':').length>1?
+            this.nodeName.split(':')[0]:
+            null;
+    },
+    set prefix(value){
+        if(value === null){
+            this.nodeName = this.localName;
+        }else{
+            this.nodeName = value+':'+this.localName;
+        }
+    },
+    hasAttributes : function() {
+        return this.attributes.length ?
+            true :
+            false ;
+    },
+    get textContent(){
+        return __recursivelyGatherText__(this);
+    },
+    set textContent(newText){
+		log.debug('setText %s', newText);
+        while(this.firstChild){
+            this.removeChild( this.firstChild );
+        }
+        var text = this.ownerDocument.createTextNode(newText);
+        this.appendChild(text);
+    },
+    insertBefore : function(newChild, refChild) {
+		log.debug('insert %s Before %s', newChild.nodeName, refChild.nodeName);
+        var prevNode;
+
+        if(!newChild){
+            return newChild;
+        }
+        if(!refChild){
+            this.appendChild(newChild);
+            return this.newChild;
+        }
+
+        // test for exceptions
+        if (__ownerDocument__(this).implementation.errorChecking) {
+            // throw Exception if Node is readonly
+            if (this._readonly) {
+                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            }
+
+            // throw Exception if newChild was not created by this Document
+            if (__ownerDocument__(this) != __ownerDocument__(newChild)) {
+                throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
+            }
+
+            // throw Exception if the node is an ancestor
+            if (__isAncestor__(this, newChild)) {
+                throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
+            }
+        }
+
+        // if refChild is specified, insert before it
+        if (refChild) {
+            // find index of refChild
+            var itemIndex = __findItemIndex__(this.childNodes, refChild);
+            // throw Exception if there is no child node with this id
+            if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
+                throw(new DOMException(DOMException.NOT_FOUND_ERR));
+            }
+
+            // if the newChild is already in the tree,
+            var newChildParent = newChild.parentNode;
+            if (newChildParent) {
+                // remove it
+                newChildParent.removeChild(newChild);
+            }
+
+            // insert newChild into childNodes
+            __insertBefore__(this.childNodes, newChild, itemIndex);
+
+            // do node pointer surgery
+            prevNode = refChild.previousSibling;
+
+            // handle DocumentFragment
+            if (newChild.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+                if (newChild.childNodes.length > 0) {
+                    // set the parentNode of DocumentFragment's children
+                    for (var ind = 0; ind < newChild.childNodes.length; ind++) {
+                        newChild.childNodes[ind].parentNode = this;
+                    }
+
+                    // link refChild to last child of DocumentFragment
+                    refChild.previousSibling = newChild.childNodes[newChild.childNodes.length-1];
+                }
+            }else {
+                // set the parentNode of the newChild
+                newChild.parentNode = this;
+                // link refChild to newChild
+                refChild.previousSibling = newChild;
+            }
+
+        }else {
+            // otherwise, append to end
+            prevNode = this.lastChild;
+            this.appendChild(newChild);
+        }
+
+        if (newChild.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+            // do node pointer surgery for DocumentFragment
+            if (newChild.childNodes.length > 0) {
+                if (prevNode) {
+                    prevNode.nextSibling = newChild.childNodes[0];
+                }else {
+                    // this is the first child in the list
+                    this.firstChild = newChild.childNodes[0];
+                }
+                newChild.childNodes[0].previousSibling = prevNode;
+                newChild.childNodes[newChild.childNodes.length-1].nextSibling = refChild;
+            }
+        }else {
+            // do node pointer surgery for newChild
+            if (prevNode) {
+                prevNode.nextSibling = newChild;
+            }else {
+                // this is the first child in the list
+                this.firstChild = newChild;
+            }
+            newChild.previousSibling = prevNode;
+            newChild.nextSibling     = refChild;
+        }
+
+        return newChild;
+    },
+    replaceChild : function(newChild, oldChild) {
+	
+		log.debug('replaceChild  %s with %s', oldChild.nodeName, newChild.nodeName);
+        var ret = null;
+
+        if(!newChild  || !oldChild ){
+            return oldChild;
+        }
+
+        // test for exceptions
+        if (__ownerDocument__(this).implementation.errorChecking) {
+            // throw Exception if Node is readonly
+            if (this._readonly) {
+                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            }
+
+            // throw Exception if newChild was not created by this Document
+            if (__ownerDocument__(this) != __ownerDocument__(newChild)) {
+                throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
+            }
+
+            // throw Exception if the node is an ancestor
+            if (__isAncestor__(this, newChild)) {
+                throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
+            }
+        }
+
+        // get index of oldChild
+        var index = __findItemIndex__(this.childNodes, oldChild);
+
+        // throw Exception if there is no child node with this id
+        if (__ownerDocument__(this).implementation.errorChecking && (index < 0)) {
+            throw(new DOMException(DOMException.NOT_FOUND_ERR));
+        }
+
+        // if the newChild is already in the tree,
+        var newChildParent = newChild.parentNode;
+        if (newChildParent) {
+            // remove it
+            newChildParent.removeChild(newChild);
+        }
+
+        // add newChild to childNodes
+        ret = __replaceChild__(this.childNodes,newChild, index);
+
+
+        if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
+            // do node pointer surgery for Document Fragment
+            if (newChild.childNodes.length > 0) {
+                for (var ind = 0; ind < newChild.childNodes.length; ind++) {
+                    newChild.childNodes[ind].parentNode = this;
+                }
+
+                if (oldChild.previousSibling) {
+                    oldChild.previousSibling.nextSibling = newChild.childNodes[0];
+                } else {
+                    this.firstChild = newChild.childNodes[0];
+                }
+
+                if (oldChild.nextSibling) {
+                    oldChild.nextSibling.previousSibling = newChild;
+                } else {
+                    this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
+                }
+
+                newChild.childNodes[0].previousSibling = oldChild.previousSibling;
+                newChild.childNodes[newChild.childNodes.length-1].nextSibling = oldChild.nextSibling;
+            }
+        } else {
+            // do node pointer surgery for newChild
+            newChild.parentNode = this;
+
+            if (oldChild.previousSibling) {
+                oldChild.previousSibling.nextSibling = newChild;
+            }else{
+                this.firstChild = newChild;
+            }
+            if (oldChild.nextSibling) {
+                oldChild.nextSibling.previousSibling = newChild;
+            }else{
+                this.lastChild = newChild;
+            }
+            newChild.previousSibling = oldChild.previousSibling;
+            newChild.nextSibling = oldChild.nextSibling;
+        }
+
+        return ret;
+    },
+    removeChild : function(oldChild) {
+		log.debug('removeChild  %s from %s', oldChild.nodeName, this.nodeName);
+        if(!oldChild){
+            return null;
+        }
+        // throw Exception if NamedNodeMap is readonly
+        if (__ownerDocument__(this).implementation.errorChecking &&
+            (this._readonly || oldChild._readonly)) {
+            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+
+        // get index of oldChild
+        var itemIndex = __findItemIndex__(this.childNodes, oldChild);
+
+        // throw Exception if there is no child node with this id
+        if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
+            throw(new DOMException(DOMException.NOT_FOUND_ERR));
+        }
+
+        // remove oldChild from childNodes
+        __removeChild__(this.childNodes, itemIndex);
+
+        // do node pointer surgery
+        oldChild.parentNode = null;
+
+        if (oldChild.previousSibling) {
+            oldChild.previousSibling.nextSibling = oldChild.nextSibling;
+        }else {
+            this.firstChild = oldChild.nextSibling;
+        }
+        if (oldChild.nextSibling) {
+            oldChild.nextSibling.previousSibling = oldChild.previousSibling;
+        }else {
+            this.lastChild = oldChild.previousSibling;
+        }
+
+        oldChild.previousSibling = null;
+        oldChild.nextSibling = null;
+
+        return oldChild;
+    },
+    appendChild : function(newChild) {
+		log.debug('appendChild  %s to %s', newChild.nodeName, this.nodeName);
+        if(!newChild){
+            return null;
+        }
+        // test for exceptions
+        if (__ownerDocument__(this).implementation.errorChecking) {
+            // throw Exception if Node is readonly
+            if (this._readonly) {
+                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            }
+
+            // throw Exception if arg was not created by this Document
+            if (__ownerDocument__(this) != __ownerDocument__(this)) {
+                throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
+            }
+
+            // throw Exception if the node is an ancestor
+            if (__isAncestor__(this, newChild)) {
+              throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
+            }
+        }
+
+        // if the newChild is already in the tree,
+        var newChildParent = newChild.parentNode;
+        if (newChildParent) {
+            // remove it
+           //console.debug('removing node %s', newChild);
+            newChildParent.removeChild(newChild);
+        }
+
+        // add newChild to childNodes
+        __appendChild__(this.childNodes, newChild);
+
+        if (newChild.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+            // do node pointer surgery for DocumentFragment
+            if (newChild.childNodes.length > 0) {
+                for (var ind = 0; ind < newChild.childNodes.length; ind++) {
+                    newChild.childNodes[ind].parentNode = this;
+                }
+
+                if (this.lastChild) {
+                    this.lastChild.nextSibling = newChild.childNodes[0];
+                    newChild.childNodes[0].previousSibling = this.lastChild;
+                    this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
+                } else {
+                    this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
+                    this.firstChild = newChild.childNodes[0];
+                }
+            }
+        } else {
+            // do node pointer surgery for newChild
+            if (this.lastChild) {
+                this.lastChild.nextSibling = newChild;
+                newChild.previousSibling = this.lastChild;
+                this.lastChild = newChild;
+            } else {
+                this.lastChild = newChild;
+                this.firstChild = newChild;
+            }
+       }
+       newChild.parentNode = this;
+       return newChild;
+    },
+    hasChildNodes : function() {
+        return (this.childNodes.length > 0);
+    },
+    cloneNode: function(deep) {
+		log.debug('cloneNode  %s', deep);
+        // use importNode to clone this Node
+        //do not throw any exceptions
+        try {
+            return __ownerDocument__(this).importNode(this, deep);
+        } catch (e) {
+            //there shouldn't be any exceptions, but if there are, return null
+            // may want to warn: $debug("could not clone node: "+e.code);
+            return null;
+        }
+    },
+    normalize : function() {
+		log.debug('normalize');
+        var i;
+        var inode;
+        var nodesToRemove = new NodeList();
+
+        if (this.nodeType == Node.ELEMENT_NODE || this.nodeType == Node.DOCUMENT_NODE) {
+            var adjacentTextNode = null;
+
+            // loop through all childNodes
+            for(i = 0; i < this.childNodes.length; i++) {
+                inode = this.childNodes.item(i);
+
+                if (inode.nodeType == Node.TEXT_NODE) {
+                    // this node is a text node
+                    if (inode.length < 1) {
+                        // this text node is empty
+                        // add this node to the list of nodes to be remove
+                        __appendChild__(nodesToRemove, inode);
+                    }else {
+                        if (adjacentTextNode) {
+                            // previous node was also text
+                            adjacentTextNode.appendData(inode.data);
+                            // merge the data in adjacent text nodes
+                            // add this node to the list of nodes to be removed
+                            __appendChild__(nodesToRemove, inode);
+                        } else {
+                            // remember this node for next cycle
+                            adjacentTextNode = inode;
+                        }
+                    }
+                } else {
+                    // (soon to be) previous node is not a text node
+                    adjacentTextNode = null;
+                    // normalize non Text childNodes
+                    inode.normalize();
+                }
+            }
+
+            // remove redundant Text Nodes
+            for(i = 0; i < nodesToRemove.length; i++) {
+                inode = nodesToRemove.item(i);
+                inode.parentNode.removeChild(inode);
+            }
+        }
+    },
+    isSupported : function(feature, version) {
+        // use Implementation.hasFeature to determine if this feature is supported
+        return __ownerDocument__(this).implementation.hasFeature(feature, version);
+    },
+    getElementsByTagName : function(tagname) {
+        // delegate to _getElementsByTagNameRecursive
+        // recurse childNodes
+		log.debug('getElementsByTagName %s',tagname);
+		var normalizedName = (tagname+'').toLowerCase();
+		if(!this._indexes_[normalizedName]){
+			this._indexes_[normalizedName] = new NodeList(__ownerDocument__(this));
+		}
+        return this._indexes_[normalizedName];
+    },
+    getElementsByTagNameNS : function(namespaceURI, localName) {
+        // delegate to _getElementsByTagNameNSRecursive
+		log.debug('getElementsByTagNameNS %s %s',namespaceURI, localName);
+        var nodelist = new NodeList(__ownerDocument__(this));
+        for (var i = 0; i < this.childNodes.length; i++) {
+            __getElementsByTagNameNSRecursive__(
+				this.childNodes.item(i),
+				namespaceURI, 
+				localName,
+                nodelist
+			);
+        }
+        return nodelist;
+    },
+    importNode : function(importedNode, deep) {
+		log.debug('importNode %s %s', importedNode.nodeName, deep);
+        var i,
+			importNode;
+
+        //there is no need to perform namespace checks since everything has already gone through them
+        //in order to have gotten into the DOM in the first place. The following line
+        //turns namespace checking off in ._isValidNamespace
+        __ownerDocument__(this).importing = true;
+
+        if (importedNode.nodeType == Node.ELEMENT_NODE) {
+            if (!__ownerDocument__(this).implementation.namespaceAware) {
+                // create a local Element (with the name of the importedNode)
+                importNode = __ownerDocument__(this).createElement(importedNode.tagName);
+
+                // create attributes matching those of the importedNode
+                for(i = 0; i < importedNode.attributes.length; i++) {
+                    importNode.setAttribute(importedNode.attributes.item(i).name, importedNode.attributes.item(i).value);
+                }
+            } else {
+                // create a local Element (with the name & namespaceURI of the importedNode)
+                importNode = __ownerDocument__(this).createElementNS(importedNode.namespaceURI, importedNode.nodeName);
+
+                // create attributes matching those of the importedNode
+                for(i = 0; i < importedNode.attributes.length; i++) {
+                    importNode.setAttributeNS(importedNode.attributes.item(i).namespaceURI,
+                        importedNode.attributes.item(i).name, importedNode.attributes.item(i).value);
+                }
+
+                // create namespace definitions matching those of the importedNode
+                for(i = 0; i < importedNode._namespaces.length; i++) {
+                    importNode._namespaces[i] = __ownerDocument__(this).createNamespace(importedNode._namespaces.item(i).localName);
+                    importNode._namespaces[i].value = importedNode._namespaces.item(i).value;
+                }
+            }
+        } else if (importedNode.nodeType == Node.ATTRIBUTE_NODE) {
+            if (!__ownerDocument__(this).implementation.namespaceAware) {
+                // create a local Attribute (with the name of the importedAttribute)
+                importNode = __ownerDocument__(this).createAttribute(importedNode.name);
+            } else {
+                // create a local Attribute (with the name & namespaceURI of the importedAttribute)
+                importNode = __ownerDocument__(this).createAttributeNS(importedNode.namespaceURI, importedNode.nodeName);
+
+                // create namespace definitions matching those of the importedAttribute
+                for(i = 0; i < importedNode._namespaces.length; i++) {
+                    importNode._namespaces[i] = __ownerDocument__(this).createNamespace(importedNode._namespaces.item(i).localName);
+                    importNode._namespaces[i].value = importedNode._namespaces.item(i).value;
+                }
+            }
+
+            // set the value of the local Attribute to match that of the importedAttribute
+            importNode.value = importedNode.value;
+
+        } else if (importedNode.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
+            // create a local DocumentFragment
+            importNode = __ownerDocument__(this).createDocumentFragment();
+        } else if (importedNode.nodeType == Node.NAMESPACE_NODE) {
+            // create a local NamespaceNode (with the same name & value as the importedNode)
+            importNode = __ownerDocument__(this).createNamespace(importedNode.nodeName);
+            importNode.value = importedNode.value;
+        } else if (importedNode.nodeType == Node.TEXT_NODE) {
+            // create a local TextNode (with the same data as the importedNode)
+            importNode = __ownerDocument__(this).createTextNode(importedNode.data);
+        } else if (importedNode.nodeType == Node.CDATA_SECTION_NODE) {
+            // create a local CDATANode (with the same data as the importedNode)
+            importNode = __ownerDocument__(this).createCDATASection(importedNode.data);
+        } else if (importedNode.nodeType == Node.PROCESSING_INSTRUCTION_NODE) {
+            // create a local ProcessingInstruction (with the same target & data as the importedNode)
+            importNode = __ownerDocument__(this).createProcessingInstruction(importedNode.target, importedNode.data);
+        } else if (importedNode.nodeType == Node.COMMENT_NODE) {
+            // create a local Comment (with the same data as the importedNode)
+            importNode = __ownerDocument__(this).createComment(importedNode.data);
+        } else {  // throw Exception if nodeType is not supported
+            throw(new DOMException(DOMException.NOT_SUPPORTED_ERR));
+        }
+
+        if (deep) {
+            // recurse childNodes
+            for(i = 0; i < importedNode.childNodes.length; i++) {
+                importNode.appendChild(__ownerDocument__(this).importNode(importedNode.childNodes.item(i), true));
+            }
+        }
+
+        //reset importing
+        __ownerDocument__(this).importing = false;
+        return importNode;
+
+    },
+    contains : function(node){
+        log.debug("this %s contains %s ?", this.nodeName, node.nodeName);
+        while(node && node != this ){
+            node = node.parentNode;
+        }
+        return !!node;
+    },
+    compareDocumentPosition : function(b){
+        log.debug("compareDocumentPosition of this %s to %s", this.nodeName, b.nodeName);
+        var i,
+            length,
+            a = this,
+            parent,
+            aparents,
+            bparents;
+        //handle a couple simpler case first
+        if(a === b) {
+            return Node.DOCUMENT_POSITION_EQUAL;
+        }
+        if(a.ownerDocument !== b.ownerDocument) {
+            return Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC|
+               Node.DOCUMENT_POSITION_FOLLOWING|
+               Node.DOCUMENT_POSITION_DISCONNECTED;
+        }
+        if(a.parentNode === b.parentNode){
+            length = a.parentNode.childNodes.length;
+            for(i=0;i<length;i++){
+                if(a.parentNode.childNodes[i] === a){
+                    return Node.DOCUMENT_POSITION_FOLLOWING;
+                }else if(a.parentNode.childNodes[i] === b){
+                    return Node.DOCUMENT_POSITION_PRECEDING;
+                }
+            }
+        }
+
+        if(a.contains(b)) {
+            return Node.DOCUMENT_POSITION_CONTAINED_BY|
+                   Node.DOCUMENT_POSITION_FOLLOWING;
+        }
+        if(b.contains(a)) {
+            return Node.DOCUMENT_POSITION_CONTAINS|
+                   Node.DOCUMENT_POSITION_PRECEDING;
+        }
+        aparents = [];
+        parent = a.parentNode;
+        while(parent){
+            aparents[aparents.length] = parent;
+            parent = parent.parentNode;
+        }
+
+        bparents = [];
+        parent = b.parentNode;
+        while(parent){
+            i = aparents.indexOf(parent);
+            if(i < 0){
+                bparents[bparents.length] = parent;
+                parent = parent.parentNode;
+            }else{
+                //i cant be 0 since we already checked for equal parentNode
+                if(bparents.length > aparents.length){
+                    return Node.DOCUMENT_POSITION_FOLLOWING;
+                }else if(bparents.length < aparents.length){
+                    return Node.DOCUMENT_POSITION_PRECEDING;
+                }else{
+                    //common ancestor diverge point
+                    if (i === 0) {
+                        return Node.DOCUMENT_POSITION_FOLLOWING;
+                    } else {
+                        parent = aparents[i-1];
+                    }
+                    return parent.compareDocumentPosition(bparents.pop());
+                }
+            }
+        }
+
+        return Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC|
+               Node.DOCUMENT_POSITION_DISCONNECTED;
+
+    },
+    toString : function() {
+        return '[object Node]';
+    }
+
+});
+
+
+}(/*Envjs.DOM.Node*/));
+
+
+/**
+ * @method __getElementsByTagNameRecursive__ - implements getElementsByTagName()
+ * @param  elem     : Element  - The element which are checking and then recursing into
+ * @param  tagname  : string      - The name of the tag to match on. The special value "*" matches all tags
+ * @param  nodeList : NodeList - The accumulating list of matching nodes
+ *
+ * @return : NodeList
+ */
+__getElementsByTagNameRecursive__ = function (elem, tagname, nodeList) {
+
+    if (elem.nodeType == Node.ELEMENT_NODE || elem.nodeType == Node.DOCUMENT_NODE) {
+
+        if(elem.nodeType !== Node.DOCUMENT_NODE &&
+            ((elem.nodeName.toUpperCase() == tagname.toUpperCase()) ||
+                (tagname == "*")) ){
+            // add matching node to nodeList
+            __appendChild__(nodeList, elem);
+        }
+
+        // recurse childNodes
+        for(var i = 0; i < elem.childNodes.length; i++) {
+            nodeList = __getElementsByTagNameRecursive__(elem.childNodes.item(i), tagname, nodeList);
+        }
+    }
+
+    return nodeList;
+};
+
+/**
+ * @method __getElementsByTagNameNSRecursive__
+ *      implements getElementsByTagName()
+ *
+ * @param  elem     : Element  - The element which are checking and then recursing into
+ * @param  namespaceURI : string - the namespace URI of the required node
+ * @param  localName    : string - the local name of the required node
+ * @param  nodeList     : NodeList - The accumulating list of matching nodes
+ *
+ * @return : NodeList
+ */
+__getElementsByTagNameNSRecursive__ = function(elem, namespaceURI, localName, nodeList) {
+    if (elem.nodeType == Node.ELEMENT_NODE || elem.nodeType == Node.DOCUMENT_NODE) {
+
+        if (((elem.namespaceURI == namespaceURI) || (namespaceURI == "*")) &&
+            ((elem.localName == localName) || (localName == "*"))) {
+            // add matching node to nodeList
+            __appendChild__(nodeList, elem);
+        }
+
+        // recurse childNodes
+        for(var i = 0; i < elem.childNodes.length; i++) {
+            nodeList = __getElementsByTagNameNSRecursive__(
+                elem.childNodes.item(i), namespaceURI, localName, nodeList);
+        }
+    }
+
+    return nodeList;
+};
+
+/**
+ * @method __isAncestor__ - returns true if node is ancestor of target
+ * @param  target         : Node - The node we are using as context
+ * @param  node         : Node - The candidate ancestor node
+ * @return : boolean
+ */
+__isAncestor__ = function(target, node) {
+    // if this node matches, return true,
+    // otherwise recurse up (if there is a parentNode)
+    return ((target == node) || ((target.parentNode) && (__isAncestor__(target.parentNode, node))));
+};
+
+
+
+__recursivelyGatherText__ = function(aNode) {
+    var accumulateText = "",
+        idx,
+        node;
+    for (idx=0;idx < aNode.childNodes.length;idx++){
+        node = aNode.childNodes.item(idx);
+        if(node.nodeType == Node.TEXT_NODE){
+            accumulateText += node.data;
+        }else{
+            accumulateText += __recursivelyGatherText__(node);
+        }
+    }
+    return accumulateText;
+};
+
+/**
+ * function __escapeXML__
+ * @param  str : string - The string to be escaped
+ * @return : string - The escaped string
+ */
+var escAmpRegEx = /&(?!(amp;|lt;|gt;|quot|apos;))/g;
+var escLtRegEx = /</g;
+var escGtRegEx = />/g;
+var quotRegEx = /"/g;
+var aposRegEx = /'/g;
+__escapeXML__ = function(str) {
+    str = str.replace(escAmpRegEx, "&amp;").
+            replace(escLtRegEx, "&lt;").
+            replace(escGtRegEx, "&gt;").
+            replace(quotRegEx, "&quot;").
+            replace(aposRegEx, "&apos;");
+
+    return str;
+};
+
+/**
+ * function __unescapeXML__
+ * @param  str : string - The string to be unescaped
+ * @return : string - The unescaped string
+ */
+var unescAmpRegEx = /&amp;/g;
+var unescLtRegEx = /&lt;/g;
+var unescGtRegEx = /&gt;/g;
+var unquotRegEx = /&quot;/g;
+var unaposRegEx = /&apos;/g;
+__unescapeXML__ = function(str) {
+    str = str.replace(unescAmpRegEx, "&").
+            replace(unescLtRegEx, "<").
+            replace(unescGtRegEx, ">").
+            replace(unquotRegEx, "\"").
+            replace(unaposRegEx, "'");
+
+    return str;
+};
+
+var __findNamedItemIndex__,
+    __findNamedItemNSIndex__,
+    __hasAttribute__,
+    __hasAttributeNS__,
+    __cloneNamedNodes__;
+//see nodelist for these declarations
+/*var __addToNamedIndexes__, 
+    __removeFromNamedIndexes__;*/
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.NamedNodeMap').debug('available'); 
+});
+/**
+ * @class  NamedNodeMap -
+ *      used to represent collections of nodes that can be accessed by name
+ *      typically a set of Element attributes
+ *
+ * @extends NodeList -
+ *      note W3C spec says that this is not the case, but we need an item()
+ *      method identical to NodeList's, so why not?
+ * @param  ownerDocument : Document - the ownerDocument
+ * @param  parentNode    : Node - the node that the NamedNodeMap is attached to (or null)
+ */
+exports.NamedNodeMap = NamedNodeMap = function(ownerDocument, parentNode) {
+    NodeList.apply(this, arguments);
+};
+NamedNodeMap.prototype = new NodeList();
+__extend__(NamedNodeMap.prototype, {
+    add: function(name) {
+        this[this.length] = name;
+    },
+    getNamedItem: function(name) {
+        var ret = null;
+        log.debug('getNamedItem %s', name);
+        // test that Named Node exists
+        var itemIndex = __findNamedItemIndex__(this, name);
+
+        if (itemIndex > -1) {
+            //console.log('found it!');
+            ret = this[itemIndex];
+        }
+        // if node is not found, default value null is returned
+        return ret;
+    },
+    setNamedItem: function(arg) {
+        var doc = __ownerDocument__(this);
+        log.debug('setNamedItem %s', arg.name);
+        // test for exceptions
+        if (doc.implementation.errorChecking) {
+            // throw Exception if arg was not created by this Document
+            if (this.ownerDocument != arg.ownerDocument) {
+                throw (new DOMException(DOMException.WRONG_DOCUMENT_ERR));
+            }
+
+            // throw Exception if DOMNamedNodeMap is readonly
+            if (this._readonly || (this.parentNode && this.parentNode._readonly)) {
+                throw (new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            }
+
+            // throw Exception if arg is already an attribute of another Element object
+            if (arg.ownerElement && (arg.ownerElement != this.parentNode)) {
+                throw (new DOMException(DOMException.INUSE_ATTRIBUTE_ERR));
+            }
+        }
+
+        // console.log('setNamedItem __findNamedItemIndex__ ');
+        // get item index
+        var itemIndex = __findNamedItemIndex__(this, arg.name);
+        var ret = null;
+
+        //console.log('setNamedItem __findNamedItemIndex__ %s', itemIndex);
+        if (itemIndex > -1) {
+            // found it!
+            ret = this[itemIndex];
+            // use existing Attribute
+            // throw Exception if DOMAttr is readonly
+            if (doc.implementation.errorChecking && ret._readonly) {
+                throw (new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            } else {
+                this[itemIndex] = arg;
+                // over-write existing NamedNode
+                this[arg.name.toLowerCase()] = arg;
+            }
+        } else {
+            // add new NamedNode
+            //console.log('setNamedItem add new named node map (by index)');
+            Array.prototype.push.apply(this, [arg]);
+            this[arg.name] = arg;
+
+        }
+
+        arg.ownerElement = this.parentNode;
+        // update ownerElement
+        // return old node or new node
+        
+        //add to named node indexes on the document
+        __addToNamedIndexes__(arg.name, arg.value, arg.ownerElement);
+        
+        return ret;
+    },
+    removeNamedItem: function(name) {
+        var ret = null, doc = __ownerDocument__(this);
+        // test for exceptions
+        // throw Exception if NamedNodeMap is readonly
+        if (doc.implementation.errorChecking &&
+            (this._readonly || (this.parentNode && this.parentNode._readonly))) {
+            throw (new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+
+        // get item index
+        var itemIndex = __findNamedItemIndex__(this, name);
+
+        // throw Exception if there is no node named name in this map
+        if (doc.implementation.errorChecking && (itemIndex < 0)) {
+            throw (new DOMException(DOMException.NOT_FOUND_ERR));
+        }
+
+        // get Node
+        var oldNode = this[itemIndex];
+        //this[oldNode.name] = undefined;
+        // throw Exception if Node is readonly
+        if (doc.implementation.errorChecking && oldNode._readonly) {
+            throw (new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+        
+        //remove from named node indexes on the document
+        __removeFromNamedIndexes__(name, oldNode.value, oldNode.ownerElement);
+        
+        // return removed node
+        return __removeChild__(this, itemIndex);
+    },
+    getNamedItemNS: function(namespaceURI, localName) {
+        var ret = null;
+
+        // test that Named Node exists
+        var itemIndex = __findNamedItemNSIndex__(this, namespaceURI, localName);
+
+        if (itemIndex > -1) {
+            // found it! return NamedNode
+            ret = this[itemIndex];
+        }
+        // if node is not found, default value null is returned
+        return ret;
+    },
+    setNamedItemNS: function(arg) {
+        log.debug('setNamedItemNS %s %s', arg.namespaceURI, arg.localName);
+        // test for exceptions
+        if (__ownerDocument__(this).implementation.errorChecking) {
+            // throw Exception if NamedNodeMap is readonly
+            if (this._readonly || (this.parentNode && this.parentNode._readonly)) {
+                throw (new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            }
+
+            // throw Exception if arg was not created by this Document
+            if (__ownerDocument__(this) != __ownerDocument__(arg)) {
+                throw (new DOMException(DOMException.WRONG_DOCUMENT_ERR));
+            }
+
+            // throw Exception if arg is already an attribute of another Element object
+            if (arg.ownerElement && (arg.ownerElement != this.parentNode)) {
+                throw (new DOMException(DOMException.INUSE_ATTRIBUTE_ERR));
+            }
+        }
+
+        // get item index
+        var itemIndex = __findNamedItemNSIndex__(this, arg.namespaceURI, arg.localName);
+        var ret = null;
+
+        if (itemIndex > -1) {
+            // found it!
+            // use existing Attribute
+            ret = this[itemIndex];
+            // throw Exception if Attr is readonly
+            if (__ownerDocument__(this).implementation.errorChecking && ret._readonly) {
+                throw (new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            } else {
+                // over-write existing NamedNode
+                this[itemIndex] = arg;
+            }
+        } else {
+            // add new NamedNode
+            Array.prototype.push.apply(this, [arg]);
+        }
+        arg.ownerElement = this.parentNode;
+        
+        //add to named node indexes on the document
+        __addToNamedIndexes__(
+            arg.namespaceURI?arg.namespaceURI+':'+arg.localName:arg.localName, 
+            arg.value, 
+            arg.ownerElement
+        );
+        
+        // return old node or null
+        return ret;
+    },
+    removeNamedItemNS: function(namespaceURI, localName) {
+        var ret = null;
+
+        // test for exceptions
+        // throw Exception if NamedNodeMap is readonly
+        if (__ownerDocument__(this).implementation.errorChecking && (this._readonly || (this.parentNode && this.parentNode._readonly))) {
+            throw (new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+
+        // get item index
+        var itemIndex = __findNamedItemNSIndex__(this, namespaceURI, localName);
+
+        // throw Exception if there is no matching node in this map
+        if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
+            throw (new DOMException(DOMException.NOT_FOUND_ERR));
+        }
+
+        // get Node
+        var oldNode = this[itemIndex];
+
+        //remove from named node indexes on the document
+        __removeFromNamedIndexes__(
+            namespaceURI?namespaceURI+'::'+localName:localName, 
+            oldNode.value, 
+            oldNode.ownerElement
+        );
+        
+        // return removed node
+        return __removeChild__(this, itemIndex);
+    },
+    get xml() {
+        var ret = "";
+
+        // create string containing concatenation of all (but last) 
+        // Attribute string values (separated by spaces)
+        for (var i = 0; i < this.length - 1; i++) {
+            ret += this[i].xml + " ";
+        }
+
+        // add last Attribute to string (without trailing space)
+        if (this.length > 0) {
+            ret += this[this.length - 1].xml;
+        }
+
+        return ret;
+    },
+    toString: function() {
+        return "[object NamedNodeMap]";
+    }
+
+});
+
+__addToNamedIndexes__ = function(name, value, element){
+    log.debug('addToNamedIndexes %s %s', name, value);
+    var doc = __ownerDocument__(element);
+    switch(name.toLowerCase()){
+        case "id": 
+            log.debug('addToNamedIndexes #id %s', value);
+            doc._indexes_["#"+value] = element; break;
+        case "name":
+            log.debug('addToNamedIndexes @name %s', value);
+            if(!(doc._indexes_['@'+value])){
+                doc._indexes_["@"+value] = new NodeList(doc, null);
+            }
+            if(element.tagName.toLowerCase() === 'form'){
+                if( !doc[value] ){
+                    //<form name='foo' is available via document.foo
+                    doc[value] = element;
+                }
+            }
+            //also add to general name index for getElementsByName
+            Array.prototype.push.apply(doc._indexes_["@"+value],[element]);
+            break;
+    }
+};
+
+__removeFromNamedIndexes__ = function(name, value, element){
+    var index, doc = __ownerDocument__(element);
+    //console.log('checking named index for removing %s=%s', name, value);
+    switch(name.toLowerCase()){
+        case "id": 
+            //console.log('(%s) replacing id index value #%s = %s', doc, value, element?element.tagName:'no parent');
+            doc._indexes_["#"+value] = null; break;
+        case "name":
+            if(!(doc._indexes_['@'+value])){
+                doc._indexes_["@"+value] = new NodeList(doc, null);
+            }
+            if(element.tagName.toLowerCase() === 'form'){
+                if(doc[value]){
+                    //<form name='foo' is no longer available via document.foo
+                    delete doc[value];
+                }
+            }
+            //also remove from general name index for getElementsByName
+            index = Array.prototype.indexOf.apply(doc._indexes_["@"+value], [element]);
+            if(index > -1){
+                Array.prototype.splice.apply(doc._indexes_["@"+value],[index,1]);
+            }
+            break;
+    }
+};
+
+}(/*Envjs.DOM.NamedNodeMap*/));
+
+
+
+/**
+ * @method __findNamedItemIndex__
+ *      find the item index of the node with the specified name
+ *
+ * @param  name : string - the name of the required node
+ * @param  isnsmap : if its a NamespaceNodeMap
+ * @return : int
+ */
+__findNamedItemIndex__ = function(namednodemap, name, isnsmap) {
+    var ret = -1;
+    // loop through all nodes
+    for (var i = 0; i < namednodemap.length; i++) {
+        //console.log("namednodemap (local %s, name %s), name %s, isnsmap %s",
+        //      namednodemap.localName, namednodemap.name, name, isnsmap)
+        // compare name to each node's nodeName
+        if (namednodemap[i].localName && name && isnsmap) {
+            if (namednodemap[i].localName.toLowerCase() == name.toLowerCase()) {
+                // found it!
+                ret = i;
+                break;
+            }
+        } else {
+            if (namednodemap[i].name && name) {
+                if (namednodemap[i].name.toLowerCase() == name.toLowerCase()) {
+                    // found it!
+                    ret = i;
+                    break;
+                }
+            }
+        }
+    }
+    // if node is not found, default value -1 is returned
+    return ret;
+};
+
+
+/**
+ * @method __findNamedItemNSIndex__
+ *      find the item index of the node with the specified
+ *      namespaceURI and localName
+ *
+ * @param  namespaceURI : string - the namespace URI of the required node
+ * @param  localName    : string - the local name of the required node
+ * @return : int
+ */
+__findNamedItemNSIndex__ = function(namednodemap, namespaceURI, localName) {
+    var ret = -1;
+    // test that localName is not null
+    if (localName) {
+        // loop through all nodes
+        for (var i = 0; i < namednodemap.length; i++) {
+            if (namednodemap[i].namespaceURI && namednodemap[i].localName) {
+                // compare name to each node's namespaceURI and localName
+                if ((namednodemap[i].namespaceURI.toLowerCase() == namespaceURI.toLowerCase()) &&
+                (namednodemap[i].localName.toLowerCase() == localName.toLowerCase())) {
+                    // found it!
+                    ret = i;
+                    break;
+                }
+            }
+        }
+    }
+    // if node is not found, default value -1 is returned
+    return ret;
+};
+
+
+/**
+ * @method __hasAttribute__
+ *      Returns true if specified node exists
+ *
+ * @param  name : string - the name of the required node
+ * @return : boolean
+ */
+__hasAttribute__ = function(namednodemap, name) {
+    var ret = false;
+    // test that Named Node exists
+    var itemIndex = __findNamedItemIndex__(namednodemap, name);
+    if (itemIndex > -1) {
+        // found it!
+        ret = true;
+    }
+    // if node is not found, default value false is returned
+    return ret;
+};
+
+/**
+ * @method __hasAttributeNS__
+ *      Returns true if specified node exists
+ *
+ * @param  namespaceURI : string - the namespace URI of the required node
+ * @param  localName    : string - the local name of the required node
+ * @return : boolean
+ */
+__hasAttributeNS__ = function(namednodemap, namespaceURI, localName) {
+    var ret = false,
+        // test that Named Node exists
+        itemIndex = __findNamedItemNSIndex__(namednodemap, namespaceURI, localName);
+    if (itemIndex > -1) {
+        // found it!
+        ret = true;
+    }
+    // if node is not found, default value false is returned
+    return ret;
+};
+
+/**
+ * @method __cloneNamedNodes__
+ *      Returns a NamedNodeMap containing clones of the Nodes in this NamedNodeMap
+ *
+ * @param  parentNode : Node - the new parent of the cloned NodeList
+ * @param  isnsmap : bool - is this a NamespaceNodeMap
+ * @return NamedNodeMap containing clones of the Nodes in this NamedNodeMap
+ */
+__cloneNamedNodes__ = function(namednodemap, parentNode, isnsmap) {
+    var cloneNamedNodeMap = isnsmap ?
+    new NamespaceNodeMap(namednodemap.ownerDocument, parentNode) :
+    new NamedNodeMap(namednodemap.ownerDocument, parentNode);
+
+    // create list containing clones of all children
+    for (var i = 0; i < namednodemap.length; i++) {
+        __appendChild__(cloneNamedNodeMap, namednodemap[i].cloneNode(false));
+    }
+
+    return cloneNamedNodeMap;
+};
+
+
+/**
+ * @class  NamespaceNodeMap -
+ *      used to represent collections of namespace nodes that can be
+ *      accessed by name typically a set of Element attributes
+ *
+ * @extends NamedNodeMap
+ *
+ * @param  ownerDocument : Document - the ownerDocument
+ * @param  parentNode    : Node - the node that the NamespaceNodeMap is attached to (or null)
+ */
+NamespaceNodeMap = function(ownerDocument, parentNode) {
+    NamedNodeMap.apply(this, arguments);
+};
+NamespaceNodeMap.prototype = new NamedNodeMap();
+__extend__(NamespaceNodeMap.prototype, {
+    get xml() {
+        var ret = "",
+            ns,
+            ind,
+            namespaces,
+            i;
+        // identify namespaces declared local to this Element (ie, not inherited)
+        for (ind = 0; ind < this.length; ind++) {
+            // if namespace declaration does not exist in the containing node's, parentNode's namespaces
+            ns = this[ind];
+            namespaces = this.parentNode.parentNode._namespaces;
+            for(i=0;i<namespaces.length;i++){
+                if(namespaces[i].nodeName === this[ind].nodeName &&
+                    namespaces[i].nodeValue === this[ind].nodeValue){
+                    ns = null;
+                    break;
+                }
+            }
+            if(ns){
+                // display the namespace declaration
+                ret += " "+this[ind].xml;
+            }
+        }
+        return ret;
+    },
+    toString: function() {
+        return "[object NamespacedNodeMap]";
+    }
+});
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Namespace').debug('available'); 
+});
+
+/**
+ * @class  Namespace -
+ *      The Namespace interface represents an namespace in an Element object
+ *
+ * @param  ownerDocument : The Document object associated with this node.
+ */
+exports.Namespace = Namespace = function(ownerDocument) {
+    Node.apply(this, arguments);
+    // the name of this attribute
+    this.name      = "";
+
+    // If this attribute was explicitly given a value in the original document,
+    // this is true; otherwise, it is false.
+    // Note that the implementation is in charge of this attribute, not the user.
+    // If the user changes the value of the attribute (even if it ends up having
+    // the same value as the default value) then the specified flag is
+    // automatically flipped to true
+    this.specified = false;
+};
+Namespace.prototype = new Node();
+__extend__(Namespace.prototype, {
+    get value(){
+        // the value of the attribute is returned as a string
+        return this.nodeValue;
+    },
+    set value(value){
+        this.nodeValue = value+'';
+    },
+    get nodeType(){
+        return Node.NAMESPACE_NODE;
+    },
+    get xml(){
+        var ret = "";
+
+          // serialize Namespace Declaration
+          if (this.nodeName != "") {
+            ret += "xmlns:"+this.nodeName +"=\""+ __escapeXML__(this.nodeValue) +"\"";
+          }
+          else {  
+            // handle default namespace
+            ret += "xmlns=\""+ __escapeXML__(this.nodeValue) +"\"";
+          }
+
+          return ret;
+    },
+    toString: function(){
+        return '[object Namespace]';
+    }
+});
+
+}(/*Envjs.DOM.Namespace*/));
+
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.CharacterData').debug('available'); 
+});
+/**
+ * @class  CharacterData - parent abstract class for Text and Comment
+ * @extends Node
+ * @param  ownerDocument : The Document object associated with this node.
+ */
+exports.CharacterData = CharacterData = function(ownerDocument) {
+    Node.apply(this, arguments);
+};
+CharacterData.prototype = new Node();
+__extend__(CharacterData.prototype,{
+    get data(){
+        return this.nodeValue;
+    },
+    set data(data){
+        this.nodeValue = data;
+    },
+    get textContent(){
+        return this.nodeValue;
+    },
+    set textContent(newText){
+        this.nodeValue = newText;
+    },
+    get length(){return this.nodeValue.length;},
+    appendData: function(arg){
+        // throw Exception if CharacterData is readonly
+        if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
+            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+        // append data
+        this.data = "" + this.data + arg;
+    },
+    deleteData: function(offset, count){
+        // throw Exception if CharacterData is readonly
+        if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
+            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+        if (this.data) {
+            // throw Exception if offset is negative or greater than the data length,
+            if (__ownerDocument__(this).implementation.errorChecking &&
+                ((offset < 0) || (offset >  this.data.length) || (count < 0))) {
+                throw(new DOMException(DOMException.INDEX_SIZE_ERR));
+            }
+
+            // delete data
+            if(!count || (offset + count) > this.data.length) {
+              this.data = this.data.substring(0, offset);
+            }else {
+              this.data = this.data.substring(0, offset).
+                concat(this.data.substring(offset + count));
+            }
+        }
+    },
+    insertData: function(offset, arg){
+        // throw Exception if CharacterData is readonly
+        if(__ownerDocument__(this).implementation.errorChecking && this._readonly){
+            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+
+        if(this.data){
+            // throw Exception if offset is negative or greater than the data length,
+            if (__ownerDocument__(this).implementation.errorChecking &&
+                ((offset < 0) || (offset >  this.data.length))) {
+                throw(new DOMException(DOMException.INDEX_SIZE_ERR));
+            }
+
+            // insert data
+            this.data =  this.data.substring(0, offset).concat(arg, this.data.substring(offset));
+        }else {
+            // throw Exception if offset is negative or greater than the data length,
+            if (__ownerDocument__(this).implementation.errorChecking && (offset !== 0)) {
+               throw(new DOMException(DOMException.INDEX_SIZE_ERR));
+            }
+
+            // set data
+            this.data = arg;
+        }
+    },
+    replaceData: function(offset, count, arg){
+        // throw Exception if CharacterData is readonly
+        if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
+            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+
+        if (this.data) {
+            // throw Exception if offset is negative or greater than the data length,
+            if (__ownerDocument__(this).implementation.errorChecking &&
+                ((offset < 0) || (offset >  this.data.length) || (count < 0))) {
+                throw(new DOMException(DOMException.INDEX_SIZE_ERR));
+            }
+
+            // replace data
+            this.data = this.data.substring(0, offset).
+                concat(arg, this.data.substring(offset + count));
+        }else {
+            // set data
+            this.data = arg;
+        }
+    },
+    substringData: function(offset, count){
+        var ret = null;
+        if (this.data) {
+            // throw Exception if offset is negative or greater than the data length,
+            // or the count is negative
+            if (__ownerDocument__(this).implementation.errorChecking &&
+                ((offset < 0) || (offset > this.data.length) || (count < 0))) {
+                throw(new DOMException(DOMException.INDEX_SIZE_ERR));
+            }
+            // if count is not specified
+            if (!count) {
+                ret = this.data.substring(offset); // default to 'end of string'
+            }else{
+                ret = this.data.substring(offset, offset + count);
+            }
+        }
+        return ret;
+    },
+    toString : function(){
+        return "[object CharacterData]";
+    }
+});
+
+}(/*Envjs.DOM.CharacterData*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Text').debug('available'); 
+});
+/**
+ * @class  Text
+ *      The Text interface represents the textual content (termed
+ *      character data in XML) of an Element or Attr.
+ *      If there is no markup inside an element's content, the text is
+ *      contained in a single object implementing the Text interface that
+ *      is the only child of the element. If there is markup, it is
+ *      parsed into a list of elements and Text nodes that form the
+ *      list of children of the element.
+ * @extends CharacterData
+ * @param  ownerDocument The Document object associated with this node.
+ */
+exports.Text = Text = function(ownerDocument) {
+    CharacterData.apply(this, arguments);
+    this.nodeName  = "#text";
+};
+Text.prototype = new CharacterData();
+__extend__(Text.prototype,{
+    get localName(){
+        return null;
+    },
+    // Breaks this Text node into two Text nodes at the specified offset,
+    // keeping both in the tree as siblings. This node then only contains
+    // all the content up to the offset point.  And a new Text node, which
+    // is inserted as the next sibling of this node, contains all the
+    // content at and after the offset point.
+    splitText : function(offset) {
+        var data,
+            inode;
+        // test for exceptions
+        if (__ownerDocument__(this).implementation.errorChecking) {
+            // throw Exception if Node is readonly
+            if (this._readonly) {
+              throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            }
+            // throw Exception if offset is negative or greater than the data length,
+            if ((offset < 0) || (offset > this.data.length)) {
+              throw(new DOMException(DOMException.INDEX_SIZE_ERR));
+            }
+        }
+        if (this.parentNode) {
+            // get remaining string (after offset)
+            data  = this.substringData(offset);
+            // create new TextNode with remaining string
+            inode = __ownerDocument__(this).createTextNode(data);
+            // attach new TextNode
+            if (this.nextSibling) {
+              this.parentNode.insertBefore(inode, this.nextSibling);
+            } else {
+              this.parentNode.appendChild(inode);
+            }
+            // remove remaining string from original TextNode
+            this.deleteData(offset);
+        }
+        return inode;
+    },
+    get nodeType(){
+        return Node.TEXT_NODE;
+    },
+    get xml(){
+        return __escapeXML__(""+ this.nodeValue);
+    },
+    toString: function(){
+        return "[object Text]";
+    }
+});
+
+}(/*Envjs.DOM.Text*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.CDATASection').debug('available'); 
+});
+/**
+ * @class CDATASection 
+ *      CDATA sections are used to escape blocks of text containing 
+ *      characters that would otherwise be regarded as markup.
+ *      The only delimiter that is recognized in a CDATA section is 
+ *      the "\]\]\>" string that ends the CDATA section
+ * @extends Text
+ * @param  ownerDocument : The Document object associated with this node.
+ */
+exports.CDATASection = CDATASection = function(ownerDocument) {
+    Text.apply(this, arguments);
+    this.nodeName = '#cdata-section';
+};
+CDATASection.prototype = new Text();
+__extend__(CDATASection.prototype,{
+    get nodeType(){
+        return Node.CDATA_SECTION_NODE;
+    },
+    get xml(){
+        return "<![CDATA[" + this.nodeValue + "]]>";
+    },
+    toString : function(){
+        return "[object CDATASection]";
+    }
+});
+
+}(/*Envjs.DOM.CDATASection*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Comment').debug('available'); 
+});
+/**
+ * @class  Comment
+ *      This represents the content of a comment, i.e., all the
+ *      characters between the starting '<!--' and ending '-->'
+ * @extends CharacterData
+ * @param  ownerDocument :  The Document object associated with this node.
+ */
+exports.Comment = Comment = function(ownerDocument) {
+    CharacterData.apply(this, arguments);
+    this.nodeName  = "#comment";
+};
+Comment.prototype = new CharacterData();
+__extend__(Comment.prototype, {
+    get localName(){
+        return null;
+    },
+    get nodeType(){
+        return Node.COMMENT_NODE;
+    },
+    get xml(){
+        return "<!--" + this.nodeValue + "-->";
+    },
+    toString : function(){
+        return "[object Comment]";
+    }
+});
+
+}(/*Envjs.DOM.Comment*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.DOMImplementation').debug('available'); 
+});
+/**
+ * @class  DOMImplementation -
+ *      provides a number of methods for performing operations
+ *      that are independent of any particular instance of the
+ *      document object model.
+ *
+ * @author Jon van Noort (jon@webarcana.com.au)
+ */
+exports.DOMImplementation = DOMImplementation = function() {
+    this.preserveWhiteSpace = true;  // by default, ignore whitespace
+    this.namespaceAware = true;       // by default, handle namespaces
+    this.errorChecking  = false;      // by default, test for exceptions
+};
+
+__extend__(DOMImplementation.prototype,{
+    // @param  feature : string - The package name of the feature to test.
+    //      the legal only values are "XML" and "HTML" (case-insensitive).
+    // @param  version : string - This is the version number of the package
+    //       name to test. In Level 1, this is the string "1.0".*
+    // @return : boolean
+    hasFeature : function(feature, version) {
+        var ret = false;
+        if (feature.toLowerCase() == "xml") {
+            ret = (!version || (version == "1.0") || (version == "2.0"));
+        }
+        else if (feature.toLowerCase() == "html") {
+            ret = (!version || (version == "1.0"));
+        }
+        else if (feature.toLowerCase() == "core") {
+            ret = (!version || (version == "2.0"));
+        }
+        else if (feature == "http://www.w3.org/TR/SVG11/feature#BasicStructure") {
+            ret = (version == "1.1");
+        }
+        return ret;
+    },
+    createDocumentType : function(qname, publicId, systemId){
+        var doctype = new DocumentType();
+        doctype.nodeName = qname?qname.toUpperCase():null;
+        doctype.publicId = publicId?publicId:null;
+        doctype.systemId = systemId?systemId:null;
+        return doctype;
+    },
+    createDocument : function(nsuri, qname, doctype){
+
+        var doc = null, documentElement;
+
+        doc = new Document(this, null);
+        if(doctype){
+            doc.doctype = doctype;
+        }
+
+        if(nsuri && qname){
+            documentElement = doc.createElementNS(nsuri, qname);
+        }else if(qname){
+            documentElement = doc.createElement(qname);
+        }
+        if(documentElement){
+            doc.appendChild(documentElement);
+        }
+        return doc;
+    },
+    createHTMLDocument : function(title){
+        var doc = new HTMLDocument(this, null, "");
+        var html = doc.createElement("html"); doc.appendChild(html);
+        var head = doc.createElement("head"); html.appendChild(head);
+        var body = doc.createElement("body"); html.appendChild(body);
+        var t = doc.createElement("title"); head.appendChild(t);
+        if( title) {
+            t.appendChild(doc.createTextNode(title));
+        }
+        return doc;
+    },
+    translateErrCode : function(code) {
+        //convert DOMException Code to human readable error message;
+      var msg = "";
+
+      switch (code) {
+        case DOMException.INDEX_SIZE_ERR :                // 1
+           msg = "INDEX_SIZE_ERR: Index out of bounds";
+           break;
+
+        case DOMException.DOMSTRING_SIZE_ERR :            // 2
+           msg = "DOMSTRING_SIZE_ERR: The resulting string is too long to fit in a DOMString";
+           break;
+
+        case DOMException.HIERARCHY_REQUEST_ERR :         // 3
+           msg = "HIERARCHY_REQUEST_ERR: The Node can not be inserted at this location";
+           break;
+
+        case DOMException.WRONG_DOCUMENT_ERR :            // 4
+           msg = "WRONG_DOCUMENT_ERR: The source and the destination Documents are not the same";
+           break;
+
+        case DOMException.INVALID_CHARACTER_ERR :         // 5
+           msg = "INVALID_CHARACTER_ERR: The string contains an invalid character";
+           break;
+
+        case DOMException.NO_DATA_ALLOWED_ERR :           // 6
+           msg = "NO_DATA_ALLOWED_ERR: This Node / NodeList does not support data";
+           break;
+
+        case DOMException.NO_MODIFICATION_ALLOWED_ERR :   // 7
+           msg = "NO_MODIFICATION_ALLOWED_ERR: This object cannot be modified";
+           break;
+
+        case DOMException.NOT_FOUND_ERR :                 // 8
+           msg = "NOT_FOUND_ERR: The item cannot be found";
+           break;
+
+        case DOMException.NOT_SUPPORTED_ERR :             // 9
+           msg = "NOT_SUPPORTED_ERR: This implementation does not support function";
+           break;
+
+        case DOMException.INUSE_ATTRIBUTE_ERR :           // 10
+           msg = "INUSE_ATTRIBUTE_ERR: The Attribute has already been assigned to another Element";
+           break;
+
+        // Introduced in DOM Level 2:
+        case DOMException.INVALID_STATE_ERR :             // 11
+           msg = "INVALID_STATE_ERR: The object is no longer usable";
+           break;
+
+        case DOMException.SYNTAX_ERR :                    // 12
+           msg = "SYNTAX_ERR: Syntax error";
+           break;
+
+        case DOMException.INVALID_MODIFICATION_ERR :      // 13
+           msg = "INVALID_MODIFICATION_ERR: Cannot change the type of the object";
+           break;
+
+        case DOMException.NAMESPACE_ERR :                 // 14
+           msg = "NAMESPACE_ERR: The namespace declaration is incorrect";
+           break;
+
+        case DOMException.INVALID_ACCESS_ERR :            // 15
+           msg = "INVALID_ACCESS_ERR: The object does not support this function";
+           break;
+
+        default :
+           msg = "UNKNOWN: Unknown Exception Code ("+ code +")";
+      }
+
+      return msg;
+    },
+    toString : function(){
+        return "[object DOMImplementation]";
+    }
+});
+
+}(/*Envjs.DOM.DOMImplementation*/));
+
+
+
+
+/**
+ * @method DOMImplementation._isNamespaceDeclaration - Return true, if attributeName is a namespace declaration
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  attributeName : string - the attribute name
+ * @return : boolean
+ */
+function __isNamespaceDeclaration__(attributeName) {
+  // test if attributeName is 'xmlns'
+  return (attributeName.indexOf('xmlns') > -1);
+}
+
+/**
+ * @method DOMImplementation._isIdDeclaration - Return true, if attributeName is an id declaration
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  attributeName : string - the attribute name
+ * @return : boolean
+ */
+function __isIdDeclaration__(attributeName) {
+  // test if attributeName is 'id' (case insensitive)
+  return attributeName?(attributeName.toLowerCase() == 'id'):false;
+}
+
+/**
+ * @method DOMImplementation._isValidName - Return true,
+ *   if name contains no invalid characters
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  name : string - the candidate name
+ * @return : boolean
+ */
+var re_validName = /^[a-zA-Z_:][a-zA-Z0-9\.\-_:]*$/;
+function __isValidName__(name) {
+  // test if name contains only valid characters
+  return name.match(re_validName);
+}
+
+/**
+ * @method DOMImplementation._isValidString - Return true, if string does not contain any illegal chars
+ *  All of the characters 0 through 31 and character 127 are nonprinting control characters.
+ *  With the exception of characters 09, 10, and 13, (Ox09, Ox0A, and Ox0D)
+ *  Note: different from _isValidName in that ValidStrings may contain spaces
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  name : string - the candidate string
+ * @return : boolean
+ */
+var re_invalidStringChars = /\x01|\x02|\x03|\x04|\x05|\x06|\x07|\x08|\x0B|\x0C|\x0E|\x0F|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1A|\x1B|\x1C|\x1D|\x1E|\x1F|\x7F/;
+function __isValidString__(name) {
+  // test that string does not contains invalid characters
+  return (name.search(re_invalidStringChars) < 0);
+}
+
+/**
+ * @method DOMImplementation._parseNSName - parse the namespace name.
+ *  if there is no colon, the
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  qualifiedName : string - The qualified name
+ * @return : NSName - [
+         .prefix        : string - The prefix part of the qname
+         .namespaceName : string - The namespaceURI part of the qname
+    ]
+ */
+function __parseNSName__(qualifiedName) {
+    var resultNSName = {};
+    // unless the qname has a namespaceName, the prefix is the entire String
+    resultNSName.prefix          = qualifiedName;
+    resultNSName.namespaceName   = "";
+    // split on ':'
+    var delimPos = qualifiedName.indexOf(':');
+    if (delimPos > -1) {
+        // get prefix
+        resultNSName.prefix        = qualifiedName.substring(0, delimPos);
+        // get namespaceName
+        resultNSName.namespaceName = qualifiedName.substring(delimPos +1, qualifiedName.length);
+    }
+    return resultNSName;
+}
+
+/**
+ * @method DOMImplementation._parseQName - parse the qualified name
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  qualifiedName : string - The qualified name
+ * @return : QName
+ */
+function __parseQName__(qualifiedName) {
+    var resultQName = {};
+    // unless the qname has a prefix, the local name is the entire String
+    resultQName.localName = qualifiedName;
+    resultQName.prefix    = "";
+    // split on ':'
+    var delimPos = qualifiedName.indexOf(':');
+    if (delimPos > -1) {
+        // get prefix
+        resultQName.prefix    = qualifiedName.substring(0, delimPos);
+        // get localName
+        resultQName.localName = qualifiedName.substring(delimPos +1, qualifiedName.length);
+    }
+    return resultQName;
+}
+var __isValidNamespace__;
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Document').debug('available'); 
+});
+
+/**
+ * @class  Document - The Document interface represents the entire HTML
+ *      or XML document. Conceptually, it is the root of the document tree,
+ *      and provides the primary access to the document's data.
+ *
+ * @extends Node
+ * @param  implementation : DOMImplementation - the creator Implementation
+ */
+exports.Document = Document = function(implementation, docParentWindow) {
+    Node.apply(this, [this]);
+
+    this.async = true;
+    // The Document Type Declaration (see DocumentType) associated with this document
+    this.doctype = null;
+    // The DOMImplementation object that handles this document.
+    this.implementation = implementation;
+
+    this.nodeName  = "#document";
+    // initially false, set to true by parser
+    this.parsing = false;
+    this.baseURI = 'about:blank';
+    
+    this.ownerDocument = null;
+
+    this.importing = false;
+};
+
+Document.prototype = new Node();
+__extend__(Document.prototype,{
+    get localName(){
+        return null;
+    },
+    get textContent(){
+        return null;
+    },
+    get all(){
+        log.debug('all');
+        return this.getElementsByTagName('*');
+    },
+    get documentElement(){
+        var i, length = this.childNodes?this.childNodes.length:0;
+        for(i=0;i<length;i++){
+            if(this.childNodes[i].nodeType === Node.ELEMENT_NODE){
+                return this.childNodes[i];
+            }
+        }
+        return null;
+    },
+    get documentURI(){
+        log.debug('documentURI %s',this.baseURI);
+        return this.baseURI;
+    },
+    createExpression: function(xpath, nsuriMap){
+        log.debug('createExpression %s %s',xpath, nsuriMap);
+        return new XPathExpression(xpath, nsuriMap);
+    },
+    createDocumentFragment: function() {
+        log.debug('createDocumentFragment');
+        var node = new DocumentFragment(this);
+        return node;
+    },
+    createTextNode: function(data) {
+        log.debug('createTextNode %s', data);
+        var node = new Text(this);
+        node.data = data;
+        return node;
+    },
+    createComment: function(data) {
+        log.debug('createComment %s', data);
+        var node = new Comment(this);
+        node.data = data;
+        return node;
+    },
+    createCDATASection : function(data) {
+        log.debug('createCDATASection %s', data);
+        var node = new CDATASection(this);
+        node.data = data;
+        return node;
+    },
+    createProcessingInstruction: function(target, data) {
+        log.debug('createProcessingInstruction %s %s', target, data);
+        // throw Exception if the target string contains an illegal character
+        if (__ownerDocument__(this).implementation.errorChecking &&
+            (!__isValidName__(target))) {
+            throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
+        }
+
+        var node = new ProcessingInstruction(this);
+        node.target = target;
+        node.data = data;
+        return node;
+    },
+    createElement: function(tagName) {
+        log.debug('createElement %s', tagName);
+        // throw Exception if the tagName string contains an illegal character
+        if (__ownerDocument__(this).implementation.errorChecking &&
+            (!__isValidName__(tagName))) {
+            throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
+        }
+        var node = new Element(this);
+        node.nodeName = tagName;
+        return node;
+    },
+    createElementNS : function(namespaceURI, qualifiedName) {
+        //we use this as a parser flag to ignore the xhtml
+        //namespace assumed by the parser
+        log.debug('createElementNS %s %s', namespaceURI, qualifiedName);
+        if (__ownerDocument__(this).implementation.errorChecking) {
+            // throw Exception if the Namespace is invalid
+            if (!__isValidNamespace__(this, namespaceURI, qualifiedName)) {
+                throw(new DOMException(DOMException.NAMESPACE_ERR));
+            }
+
+            // throw Exception if the qualifiedName string contains an illegal character
+            if (!__isValidName__(qualifiedName)) {
+                throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
+            }
+        }
+        var node  = new Element(this);
+        var qname = __parseQName__(qualifiedName);
+        node.namespaceURI = namespaceURI;
+        node.prefix       = qname.prefix;
+        node.nodeName     = qualifiedName;
+
+        return node;
+    },
+    createAttribute : function(name) {
+        log.debug('createAttribute %s ', name);
+        // throw Exception if the name string contains an illegal character
+        if (__ownerDocument__(this).implementation.errorChecking &&
+            (!__isValidName__(name))) {
+            throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
+        }
+        var node = new Attr(this);
+        node.nodeName = name;
+        return node;
+    },
+    createAttributeNS : function(namespaceURI, qualifiedName) {
+        //we use this as a parser flag to ignore the xhtml
+        //namespace assumed by the parser
+        log.debug('createAttributeNS %s %s', namespaceURI, qualifiedName);
+        // test for exceptions
+        if (this.implementation.errorChecking) {
+            // throw Exception if the Namespace is invalid
+            if (!__isValidNamespace__(this, namespaceURI, qualifiedName, true)) {
+                throw(new DOMException(DOMException.NAMESPACE_ERR));
+            }
+
+            // throw Exception if the qualifiedName string contains an illegal character
+            if (!__isValidName__(qualifiedName)) {
+                throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
+            }
+        }
+        var node  = new Attr(this);
+        var qname = __parseQName__(qualifiedName);
+        node.namespaceURI = namespaceURI === '' ? null : namespaceURI;
+        node.prefix       = qname.prefix;
+        node.nodeName     = qualifiedName;
+        node.nodeValue    = "";
+        return node;
+    },
+    createNamespace : function(qualifiedName) {
+        log.debug('createNamespace %s', qualifiedName);
+        // create Namespace specifying 'this' as ownerDocument
+        var node  = new Namespace(this);
+        var qname = __parseQName__(qualifiedName);
+
+        // assign values to properties (and aliases)
+        node.prefix       = qname.prefix;
+        node.nodeName    = qname.localName;
+        node.name         = qualifiedName;
+        node.nodeValue    = "";
+
+        return node;
+    },
+    createEntityReference: function(){
+        log.debug('createEntityReference');
+    },
+    createRange: function(){
+        log.debug('createRange');
+        return new Range();
+    },
+
+    evaluate: function(xpathText, contextNode, nsuriMapper, resultType, result){
+        //return new XPathExpression().evaluate();
+        throw 'Include src/dom/xpath.js for evaluate support.';
+    },
+
+    getElementById : function(elementId) {
+        log.debug('getElementById %s = %s', elementId, this._indexes_["#"+elementId]);
+        return this._indexes_["#"+elementId]||null;
+    },
+    normalizeDocument: function(){
+        log.debug('normalizeDocument');
+        this.normalize();
+    },
+    get nodeType(){
+        return Node.DOCUMENT_NODE;
+    },
+    get xml(){
+        return this.documentElement.xml;
+    },
+    toString: function(){
+        return "[object XMLDocument]";
+    },
+    get defaultView(){
+        log.debug('defaultView');
+        return { getComputedStyle: function(elem){
+            return window.getComputedStyle(elem);
+        }};
+    }
+});
+
+}(/*Envjs.DOM.Document*/));
+
+
+/*
+ * Helper function
+ *
+ */
+__isValidNamespace__ = function(doc, namespaceURI, qualifiedName, isAttribute) {
+
+    if (doc.importing === true) {
+        //we're doing an importNode operation (or a cloneNode) - in both cases, there
+        //is no need to perform any namespace checking since the nodes have to have been valid
+        //to have gotten into the DOM in the first place
+        return true;
+    }
+
+    var valid = true;
+    // parse QName
+    var qName = __parseQName__(qualifiedName);
+
+
+    //only check for namespaces if we're finished parsing
+    if (this.parsing === false) {
+
+        // if the qualifiedName is malformed
+        if (qName.localName.indexOf(":") > -1 ){
+            valid = false;
+        }
+
+        if ((valid) && (!isAttribute)) {
+            // if the namespaceURI is not null
+            if (!namespaceURI) {
+                valid = false;
+            }
+        }
+
+        // if the qualifiedName has a prefix
+        if ((valid) && (qName.prefix === "")) {
+            valid = false;
+        }
+    }
+
+    // if the qualifiedName has a prefix that is "xml" and the namespaceURI is
+    //  different from "http://www.w3.org/XML/1998/namespace" [Namespaces].
+    if ((valid) && (qName.prefix === "xml") && (namespaceURI !== "http://www.w3.org/XML/1998/namespace")) {
+        valid = false;
+    }
+
+    return valid;
+};
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.DocumentType').debug('available'); 
+});
+
+/**
+ * @author envjs team
+ * @param {Document} onwnerDocument
+ */
+exports.DocumentType = DocumentType = function(ownerDocument) {
+    Node.apply(this, arguments);
+    this.systemId = null;
+    this.publicId = null;
+};
+DocumentType.prototype = new Node();
+__extend__({
+    get name(){
+        return this.nodeName;
+    },
+    get entities(){
+        return null;
+    },
+    get internalSubsets(){
+        return null;
+    },
+    get notations(){
+        return null;
+    },
+    toString : function(){
+        return "[object DocumentType]";
+    }
+});
+
+}(/*Envjs.DOM.DocumentType*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.DocumentFragment').debug('available'); 
+});
+/**
+ * @class  DocumentFragment -
+ *      DocumentFragment is a "lightweight" or "minimal" Document object.
+ * @extends Node
+ * @param  ownerDocument :  The Document object associated with this node.
+ */
+exports.DocumentFragment = DocumentFragment =function(ownerDocument) {
+    Node.apply(this, arguments);
+    this.nodeName  = "#document-fragment";
+};
+DocumentFragment.prototype = new Node();
+__extend__(DocumentFragment.prototype,{
+    get nodeType(){
+        return Node.DOCUMENT_FRAGMENT_NODE;
+    },
+    get xml(){
+        var xml = "",
+        count = this.childNodes.length;
+
+        // create string concatenating the serialized ChildNodes
+        for (var i = 0; i < count; i++) {
+            xml += this.childNodes.item(i).xml;
+        }
+
+        return xml;
+    },
+    toString : function(){
+        return "[object DocumentFragment]";
+    },
+    get localName(){
+        return null;
+    }
+});
+
+}(/*Envjs.DOM.DocumentFragment*/));
+
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.DOMException').debug('available'); 
+});
+/**
+ * @class  DOMException - raised when an operation is impossible to perform
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  code : int - the exception code (one of the DOMException constants)
+ */
+exports.DOMException = DOMException = function(code) {
+    this.code = code;
+};
+
+// DOMException constants
+// Introduced in DOM Level 1:
+DOMException.INDEX_SIZE_ERR                 = 1;
+DOMException.DOMSTRING_SIZE_ERR             = 2;
+DOMException.HIERARCHY_REQUEST_ERR          = 3;
+DOMException.WRONG_DOCUMENT_ERR             = 4;
+DOMException.INVALID_CHARACTER_ERR          = 5;
+DOMException.NO_DATA_ALLOWED_ERR            = 6;
+DOMException.NO_MODIFICATION_ALLOWED_ERR    = 7;
+DOMException.NOT_FOUND_ERR                  = 8;
+DOMException.NOT_SUPPORTED_ERR              = 9;
+DOMException.INUSE_ATTRIBUTE_ERR            = 10;
+
+// Introduced in DOM Level 2:
+DOMException.INVALID_STATE_ERR              = 11;
+DOMException.SYNTAX_ERR                     = 12;
+DOMException.INVALID_MODIFICATION_ERR       = 13;
+DOMException.NAMESPACE_ERR                  = 14;
+DOMException.INVALID_ACCESS_ERR             = 15;
+
+//Introduced in DOM Level 3:
+DOMException.VALIDATION_ERR                 = 16;
+DOMException.TYPE_MISMATCH_ERR              = 17;
+
+}(/*Envjs.DOM.DOMException*/));
+var __E4XParser__,
+    __E4XtoDomNode__;
+    
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.DOMParser').debug('available'); 
+});
+
+/**
+ * @author ariel flesler
+ *    http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html
+ * @param {Object} str
+ */
+function trim( str ){
+    return (str || "").replace( /^\s+|\s+$/g, "" );
+}
+
+// =========================================================================
+//
+// xmlsax.js - an XML SAX parser in JavaScript.
+//
+// version 3.1
+//
+// =========================================================================
+//
+// Copyright (C) 2001 - 2002 David Joham (djoham@yahoo.com) and Scott Severtson
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//
+//
+// Visit the XML for <SCRIPT> home page at http://xmljs.sourceforge.net
+//
+
+// CONSTANTS
+var whitespace = "\n\r\t ";
+
+/**
+*   function:   SAXStrings
+*   Author:   Scott Severtson
+*   Description: a useful object containing string manipulation functions
+**/
+
+var SAXStrings = function() {};
+
+SAXStrings.WHITESPACE = " \t\n\r";
+SAXStrings.NONWHITESPACE = /\S/;
+SAXStrings.QUOTES = "\"'";
+
+SAXStrings.prototype.getColumnNumber = function(strD, iP) {
+    if((strD === null) || (strD.length === 0)) {
+        return -1;
+    }
+    iP = iP || strD.length;
+
+    var arrD = strD.substring(0, iP).split("\n");
+    var strLine = arrD[arrD.length - 1];
+    arrD.length--;
+    var iLinePos = arrD.join("\n").length;
+
+    return iP - iLinePos;
+};
+
+
+SAXStrings.prototype.getLineNumber = function(strD, iP) {
+    if((strD === null) || (strD.length === 0)) {
+        return -1;
+    }
+    iP = iP || strD.length;
+    return strD.substring(0, iP).split("\n").length;
+};
+
+
+SAXStrings.prototype.indexOfNonWhitespace = function(strD, iB, iE) {
+    if((strD === null) || (strD.length === 0)) {
+        return -1;
+    }
+    iB = iB || 0;
+    iE = iE || strD.length;
+
+    while( strD.charCodeAt(iB++) < 33 ){
+        continue;
+    }
+    return (iB > iE)?-1:iB-1;
+
+};
+
+
+SAXStrings.prototype.indexOfWhitespace = function(strD, iB, iE) {
+    if((strD === null) || (strD.length === 0)) {
+        return -1;
+    }
+    iB = iB || 0;
+    iE = iE || strD.length;
+
+    while( strD.charCodeAt(iB++) >= 33 ){
+        continue;
+    }
+    return (iB > iE)?-1:iB-1;
+};
+
+
+SAXStrings.prototype.isEmpty = function(strD) {
+    return (strD === null) || (strD.length === 0);
+};
+
+SAXStrings.prototype.lastIndexOfNonWhitespace = function(strD, iB, iE) {
+    if((strD === null) || (strD.length === 0)) {
+        return -1;
+    }
+    iB = iB || 0;
+    iE = iE || strD.length;
+
+    while( (iE >= iB) && strD.charCodeAt(--iE) < 33 ){
+        continue;
+    }
+    return (iE < iB)?-1:iE;
+};
+
+
+SAXStrings.prototype.replace = function(strD, iB, iE, strF, strR) {
+    if((strD === null) || (strD.length === 0)) {
+        return "";
+    }
+    iB = iB || 0;
+    iE = iE || strD.length;
+    return strD.substring(iB, iE).split(strF).join(strR);
+};
+
+var saxstrings = new SAXStrings();
+
+
+/***************************************************************************************************************
+Stack: A simple stack class, used for verifying document structure.
+
+    Author:   Scott Severtson
+*****************************************************************************************************************/
+
+var Stack = function() {
+    this.m_arr = [];
+};
+__extend__(Stack.prototype, {
+    clear : function() {
+        this.m_arr = [];
+    },
+    count : function() {
+        return this.m_arr.length;
+    },
+    destroy : function() {
+        this.m_arr = null;
+    },
+    peek : function() {
+        if(this.m_arr.length === 0) {
+            return null;
+        }
+        return this.m_arr[this.m_arr.length - 1];
+    },
+    pop : function() {
+        if(this.m_arr.length === 0) {
+            return null;
+        }
+        var o = this.m_arr[this.m_arr.length - 1];
+        this.m_arr.length--;
+        return o;
+    },
+    push : function(o) {
+        this.m_arr[this.m_arr.length] = o;
+    }
+});
+
+/**
+* function: isEmpty
+* Author: mike@idle.org
+* Description:  convenience function to identify an empty string
+**/
+function isEmpty(str) {
+    return (str===null) || (str.length===0);
+}
+
+/**
+ * function __escapeXML__
+ * author: David Joham djoham@yahoo.com
+ * @param  str : string - The string to be escaped
+ * @return : string - The escaped string
+ */
+var escAmpRegEx = /&/g;
+var escLtRegEx = /</g;
+var escGtRegEx = />/g;
+var quotRegEx = /"/g;
+var aposRegEx = /'/g;
+function __escapeXML__(str) {
+    str = str.replace(escAmpRegEx, "&amp;").
+            replace(escLtRegEx, "&lt;").
+            replace(escGtRegEx, "&gt;").
+            replace(quotRegEx, "&quot;").
+            replace(aposRegEx, "&apos;");
+
+    return str;
+}
+
+/**
+ * function __unescapeXML__
+ * author: David Joham djoham@yahoo.com
+ * @param  str : string - The string to be unescaped
+ * @return : string - The unescaped string
+ */
+var unescAmpRegEx = /&amp;/g;
+var unescLtRegEx = /&lt;/g;
+var unescGtRegEx = /&gt;/g;
+var unquotRegEx = /&quot;/g;
+var unaposRegEx = /&apos;/g;
+function __unescapeXML__(str) {
+    str = str.replace(unescAmpRegEx, "&").
+            replace(unescLtRegEx, "<").
+            replace(unescGtRegEx, ">").
+            replace(unquotRegEx, "\"").
+            replace(unaposRegEx, "'");
+
+    return str;
+}
+
+
+/**
+*   function:   this is the constructor to the XMLP Object
+*   Author:   Scott Severtson
+*   Description:XMLP is a pull-based parser. The calling application passes in a XML string
+*   to the constructor, then repeatedly calls .next() to parse the next segment.
+*   .next() returns a flag indicating what type of segment was found, and stores
+*   data temporarily in couple member variables (name, content, array of
+*   attributes), which can be accessed by several .get____() methods.
+*
+*   Basically, XMLP is the lowest common denominator parser - an very simple
+*   API which other wrappers can be built against.
+**/
+
+
+var XMLP = function(strXML) {
+    // Normalize line breaks
+    strXML = saxstrings.replace(strXML, null, null, "\r\n", "\n");
+    strXML = saxstrings.replace(strXML, null, null, "\r", "\n");
+
+    this.m_xml = strXML;
+    this.m_iP = 0;
+    this.m_iState = XMLP._STATE_PROLOG;
+    this.m_stack = new Stack();
+    this._clearAttributes();
+    this.replaceEntities = true;
+};
+
+
+// CONSTANTS    (these must be below the constructor)
+
+
+XMLP._NONE    = 0;
+XMLP._ELM_B   = 1;
+XMLP._ELM_E   = 2;
+XMLP._ELM_EMP = 3;
+XMLP._ATT     = 4;
+XMLP._TEXT    = 5;
+XMLP._ENTITY  = 6;
+XMLP._PI      = 7;
+XMLP._CDATA   = 8;
+XMLP._COMMENT = 9;
+XMLP._DTD     = 10;
+XMLP._ERROR   = 11;
+
+XMLP._CONT_XML = 0;
+XMLP._CONT_ALT = 1;
+
+XMLP._ATT_NAME = 0;
+XMLP._ATT_VAL  = 1;
+
+XMLP._STATE_PROLOG = 1;
+XMLP._STATE_DOCUMENT = 2;
+XMLP._STATE_MISC = 3;
+
+XMLP._errs = [];
+XMLP._errs[XMLP.ERR_CLOSE_PI       = 0 ] = "PI: missing closing sequence";
+XMLP._errs[XMLP.ERR_CLOSE_DTD      = 1 ] = "DTD: missing closing sequence";
+XMLP._errs[XMLP.ERR_CLOSE_COMMENT  = 2 ] = "Comment: missing closing sequence";
+XMLP._errs[XMLP.ERR_CLOSE_CDATA    = 3 ] = "CDATA: missing closing sequence";
+XMLP._errs[XMLP.ERR_CLOSE_ELM      = 4 ] = "Element: missing closing sequence";
+XMLP._errs[XMLP.ERR_CLOSE_ENTITY   = 5 ] = "Entity: missing closing sequence";
+XMLP._errs[XMLP.ERR_PI_TARGET      = 6 ] = "PI: target is required";
+XMLP._errs[XMLP.ERR_ELM_EMPTY      = 7 ] = "Element: cannot be both empty and closing";
+XMLP._errs[XMLP.ERR_ELM_NAME       = 8 ] = "Element: name must immediatly follow \"<\"";
+XMLP._errs[XMLP.ERR_ELM_LT_NAME    = 9 ] = "Element: \"<\" not allowed in element names";
+XMLP._errs[XMLP.ERR_ATT_VALUES     = 10] = "Attribute: values are required and must be in quotes";
+XMLP._errs[XMLP.ERR_ATT_LT_NAME    = 11] = "Element: \"<\" not allowed in attribute names";
+XMLP._errs[XMLP.ERR_ATT_LT_VALUE   = 12] = "Attribute: \"<\" not allowed in attribute values";
+XMLP._errs[XMLP.ERR_ATT_DUP        = 13] = "Attribute: duplicate attributes not allowed";
+XMLP._errs[XMLP.ERR_ENTITY_UNKNOWN = 14] = "Entity: unknown entity";
+XMLP._errs[XMLP.ERR_INFINITELOOP   = 15] = "Infininte loop";
+XMLP._errs[XMLP.ERR_DOC_STRUCTURE  = 16] = "Document: only comments, processing instructions, or whitespace allowed outside of document element";
+XMLP._errs[XMLP.ERR_ELM_NESTING    = 17] = "Element: must be nested correctly";
+
+
+
+XMLP.prototype._addAttribute = function(name, value) {
+    this.m_atts[this.m_atts.length] = [name, value];
+};
+
+
+XMLP.prototype._checkStructure = function(iEvent) {
+
+        if(XMLP._STATE_PROLOG == this.m_iState) {
+                if((XMLP._TEXT == iEvent) || (XMLP._ENTITY == iEvent)) {
+            if(saxstrings.indexOfNonWhitespace(this.getContent(), this.getContentBegin(), this.getContentEnd()) != -1) {
+                                return this._setErr(XMLP.ERR_DOC_STRUCTURE);
+            }
+        }
+
+        if((XMLP._ELM_B == iEvent) || (XMLP._ELM_EMP == iEvent)) {
+            this.m_iState = XMLP._STATE_DOCUMENT;
+            // Don't return - fall through to next state
+        }
+    }
+    if(XMLP._STATE_DOCUMENT == this.m_iState) {
+        if((XMLP._ELM_B == iEvent) || (XMLP._ELM_EMP == iEvent)) {
+            this.m_stack.push(this.getName());
+        }
+
+        if((XMLP._ELM_E == iEvent) || (XMLP._ELM_EMP == iEvent)) {
+            var strTop = this.m_stack.pop();
+            if((strTop === null) || (strTop != this.getName())) {
+                return this._setErr(XMLP.ERR_ELM_NESTING);
+            }
+        }
+
+        if(this.m_stack.count() === 0) {
+            this.m_iState = XMLP._STATE_MISC;
+            return iEvent;
+        }
+    }
+    if(XMLP._STATE_MISC == this.m_iState) {
+                if((XMLP._ELM_B == iEvent) || (XMLP._ELM_E == iEvent) || (XMLP._ELM_EMP == iEvent) || (XMLP.EVT_DTD == iEvent)) {
+                        return this._setErr(XMLP.ERR_DOC_STRUCTURE);
+        }
+
+        if((XMLP._TEXT == iEvent) || (XMLP._ENTITY == iEvent)) {
+                        if(saxstrings.indexOfNonWhitespace(this.getContent(), this.getContentBegin(), this.getContentEnd()) != -1) {
+                                return this._setErr(XMLP.ERR_DOC_STRUCTURE);
+            }
+        }
+    }
+
+    return iEvent;
+
+};
+
+
+XMLP.prototype._clearAttributes = function() {
+    this.m_atts = [];
+};
+
+
+XMLP.prototype._findAttributeIndex = function(name) {
+    for(var i = 0; i < this.m_atts.length; i++) {
+        if(this.m_atts[i][XMLP._ATT_NAME] == name) {
+            return i;
+        }
+    }
+    return -1;
+
+};
+
+XMLP.prototype.getAttributeCount = function() {
+    return this.m_atts ? this.m_atts.length : 0;
+};
+
+XMLP.prototype.getAttributeName = function(index) {
+    return ((index < 0) || (index >= this.m_atts.length)) ? null : this.m_atts[index][XMLP._ATT_NAME];
+};
+
+XMLP.prototype.getAttributeValue = function(index) {
+    return ((index < 0) || (index >= this.m_atts.length)) ? null : __unescapeXML__(this.m_atts[index][XMLP._ATT_VAL]);
+};
+
+XMLP.prototype.getAttributeValueByName = function(name) {
+    return this.getAttributeValue(this._findAttributeIndex(name));
+};
+
+
+XMLP.prototype.getColumnNumber = function() {
+    return saxstrings.getColumnNumber(this.m_xml, this.m_iP);
+};
+
+
+XMLP.prototype.getContent = function() {
+    return (this.m_cSrc == XMLP._CONT_XML) ? this.m_xml : this.m_cAlt;
+};
+
+
+XMLP.prototype.getContentBegin = function() {
+    return this.m_cB;
+};
+
+
+XMLP.prototype.getContentEnd = function() {
+    return this.m_cE;
+};
+
+
+XMLP.prototype.getLineNumber = function() {
+    return saxstrings.getLineNumber(this.m_xml, this.m_iP);
+};
+
+
+XMLP.prototype.getName = function() {
+    return this.m_name;
+};
+
+
+XMLP.prototype.next = function() {
+    return this._checkStructure(this._parse());
+};
+
+XMLP.prototype.appendFragment = function(xmlfragment) {
+    var start = this.m_xml.slice(0,this.m_iP);
+    var end = this.m_xml.slice(this.m_iP);
+    this.m_xml = start+xmlfragment+end;
+};
+
+
+XMLP.prototype._parse = function() {
+
+    if(this.m_iP == this.m_xml.length) {
+        return XMLP._NONE;
+    }
+
+    if(this.m_iP == this.m_xml.indexOf("<", this.m_iP)){
+        if(this.m_xml.charAt(this.m_iP+1) == "?") {
+            return this._parsePI(this.m_iP + 2);
+        }
+        else if(this.m_xml.charAt(this.m_iP+1) == "!") {
+            if(this.m_xml.charAt(this.m_iP+2) == "D") {
+                return this._parseDTD(this.m_iP + 9);
+            }
+            else if(this.m_xml.charAt(this.m_iP+2) == "-") {
+                return this._parseComment(this.m_iP + 4);
+            }
+            else if(this.m_xml.charAt(this.m_iP+2) == "[") {
+                return this._parseCDATA(this.m_iP + 9);
+            }
+        }
+        else{
+            return this._parseElement(this.m_iP + 1);
+        }
+    }
+    else if(this.m_iP == this.m_xml.indexOf("&", this.m_iP)) {
+        return this._parseEntity(this.m_iP + 1);
+    }
+    else{
+        return this._parseText(this.m_iP);
+    }
+
+
+};
+
+
+XMLP.prototype._parseAttribute = function(iB, iE) {
+    var iNB, iNE, iEq, iVB, iVE;
+    var cQuote, strN, strV, iRet;
+
+        this.m_cAlt = ""; //resets the value so we don't use an old one by accident (see testAttribute7 in the test suite)
+
+    iNB = saxstrings.indexOfNonWhitespace(this.m_xml, iB, iE);
+    if((iNB == -1) ||(iNB >= iE)) {
+        return iNB;
+    }
+
+    iEq = this.m_xml.indexOf("=", iNB);
+    if((iEq == -1) || (iEq > iE)) {
+        return this._setErr(XMLP.ERR_ATT_VALUES);
+    }
+
+    iNE = saxstrings.lastIndexOfNonWhitespace(this.m_xml, iNB, iEq);
+
+    iVB = saxstrings.indexOfNonWhitespace(this.m_xml, iEq + 1, iE);
+    if((iVB == -1) ||(iVB > iE)) {
+        return this._setErr(XMLP.ERR_ATT_VALUES);
+    }
+
+    cQuote = this.m_xml.charAt(iVB);
+    if(SAXStrings.QUOTES.indexOf(cQuote) == -1) {
+        return this._setErr(XMLP.ERR_ATT_VALUES);
+    }
+
+    iVE = this.m_xml.indexOf(cQuote, iVB + 1);
+    if((iVE == -1) ||(iVE > iE)) {
+        return this._setErr(XMLP.ERR_ATT_VALUES);
+    }
+
+    strN = this.m_xml.substring(iNB, iNE + 1);
+    strV = this.m_xml.substring(iVB + 1, iVE);
+
+    if(strN.indexOf("<") != -1) {
+        return this._setErr(XMLP.ERR_ATT_LT_NAME);
+    }
+
+    if(strV.indexOf("<") != -1) {
+        return this._setErr(XMLP.ERR_ATT_LT_VALUE);
+    }
+
+    strV = saxstrings.replace(strV, null, null, "\n", " ");
+    strV = saxstrings.replace(strV, null, null, "\t", " ");
+        iRet = this._replaceEntities(strV);
+    if(iRet == XMLP._ERROR) {
+        return iRet;
+    }
+
+    strV = this.m_cAlt;
+
+    if(this._findAttributeIndex(strN) == -1) {
+        this._addAttribute(strN, strV);
+    }else {
+        return this._setErr(XMLP.ERR_ATT_DUP);
+    }
+
+    this.m_iP = iVE + 2;
+
+    return XMLP._ATT;
+
+};
+
+
+XMLP.prototype._parseCDATA = function(iB) {
+    var iE = this.m_xml.indexOf("]]>", iB);
+    if (iE == -1) {
+        return this._setErr(XMLP.ERR_CLOSE_CDATA);
+    }
+
+    this._setContent(XMLP._CONT_XML, iB, iE);
+
+    this.m_iP = iE + 3;
+
+    return XMLP._CDATA;
+};
+
+
+XMLP.prototype._parseComment = function(iB) {
+    var iE = this.m_xml.indexOf("-" + "->", iB);
+    if (iE == -1) {
+        return this._setErr(XMLP.ERR_CLOSE_COMMENT);
+    }
+
+    this._setContent(XMLP._CONT_XML, iB, iE);
+
+    this.m_iP = iE + 3;
+
+    return XMLP._COMMENT;
+
+};
+
+
+XMLP.prototype._parseDTD = function(iB) {
+    // Eat DTD
+    var iE, strClose, iInt, iLast;
+
+    iE = this.m_xml.indexOf(">", iB);
+    if(iE == -1) {
+        return this._setErr(XMLP.ERR_CLOSE_DTD);
+    }
+
+    iInt = this.m_xml.indexOf("[", iB);
+    strClose = ((iInt != -1) && (iInt < iE)) ? "]>" : ">";
+
+    while(true) {
+
+        iE = this.m_xml.indexOf(strClose, iB);
+        if(iE == -1) {
+            return this._setErr(XMLP.ERR_CLOSE_DTD);
+        }
+
+        // Make sure it is not the end of a CDATA section
+        if (this.m_xml.substring(iE - 1, iE + 2) != "]]>") {
+            break;
+        }
+    }
+
+    this.m_iP = iE + strClose.length;
+
+    return XMLP._DTD;
+
+};
+
+
+XMLP.prototype._parseElement = function(iB) {
+    var iE, iDE, iNE, iRet;
+    var iType, strN, iLast;
+
+    iDE = iE = this.m_xml.indexOf(">", iB);
+    if(iE == -1) {
+        return this._setErr(XMLP.ERR_CLOSE_ELM);
+    }
+
+    if(this.m_xml.charAt(iB) == "/") {
+        iType = XMLP._ELM_E;
+        iB++;
+    } else {
+        iType = XMLP._ELM_B;
+    }
+
+    if(this.m_xml.charAt(iE - 1) == "/") {
+        if(iType == XMLP._ELM_E) {
+            return this._setErr(XMLP.ERR_ELM_EMPTY);
+        }
+        iType = XMLP._ELM_EMP;
+        iDE--;
+    }
+
+    iDE = saxstrings.lastIndexOfNonWhitespace(this.m_xml, iB, iDE);
+
+    this._clearAttributes();
+
+    iNE = saxstrings.indexOfWhitespace(this.m_xml, iB, iDE);
+    if(iNE == -1) {
+        iNE = iDE + 1;
+    } else {
+        this.m_iP = iNE;
+        while(this.m_iP < iDE) {
+            iRet = this._parseAttribute(this.m_iP, iDE);
+            if(iRet == XMLP._ERROR){ 
+                return iRet;
+            }
+        }
+    }
+
+    strN = this.m_xml.substring(iB, iNE);
+
+    this.m_name = strN;
+    this.m_iP = iE + 1;
+
+    return iType;
+
+};
+
+
+XMLP.prototype._parseEntity = function(iB) {
+    var iE = this.m_xml.indexOf(";", iB);
+    if(iE == -1) {
+        return this._setErr(XMLP.ERR_CLOSE_ENTITY);
+    }
+
+    this.m_iP = iE + 1;
+
+    return this._replaceEntity(this.m_xml, iB, iE);
+
+};
+
+
+XMLP.prototype._parsePI = function(iB) {
+
+    var iE, iTB, iTE, iCB, iCE;
+
+    iE = this.m_xml.indexOf("?>", iB);
+    if(iE   == -1) {
+        return this._setErr(XMLP.ERR_CLOSE_PI);
+    }
+
+    iTB = saxstrings.indexOfNonWhitespace(this.m_xml, iB, iE);
+    if(iTB == -1) {
+        return this._setErr(XMLP.ERR_PI_TARGET);
+    }
+
+    iTE = saxstrings.indexOfWhitespace(this.m_xml, iTB, iE);
+    if(iTE  == -1) {
+        iTE = iE;
+    }
+
+    iCB = saxstrings.indexOfNonWhitespace(this.m_xml, iTE, iE);
+    if(iCB == -1) {
+        iCB = iE;
+    }
+
+    iCE = saxstrings.lastIndexOfNonWhitespace(this.m_xml, iCB, iE);
+    if(iCE  == -1) {
+        iCE = iE - 1;
+    }
+
+    this.m_name = this.m_xml.substring(iTB, iTE);
+    this._setContent(XMLP._CONT_XML, iCB, iCE + 1);
+    this.m_iP = iE + 2;
+
+    return XMLP._PI;
+
+};
+
+
+XMLP.prototype._parseText = function(iB) {
+    var iE, iEE;
+
+    iE = this.m_xml.indexOf("<", iB);
+    if(iE == -1) {
+        iE = this.m_xml.length;
+    }
+
+    if(this.replaceEntities) {
+        iEE = this.m_xml.indexOf("&", iB);
+        if((iEE != -1) && (iEE <= iE)) {
+            iE = iEE;
+        }
+    }
+
+    this._setContent(XMLP._CONT_XML, iB, iE);
+
+    this.m_iP = iE;
+
+    return XMLP._TEXT;
+
+};
+
+
+XMLP.prototype._replaceEntities = function(strD, iB, iE) {
+    if(saxstrings.isEmpty(strD)){ 
+        return "";
+    }
+    iB = iB || 0;
+    iE = iE || strD.length;
+
+    var iEB, iEE, iRet, strRet = "";
+
+    iEB = strD.indexOf("&", iB);
+    iEE = iB;
+
+    while((iEB > 0) && (iEB < iE)) {
+        strRet += strD.substring(iEE, iEB);
+
+        iEE = strD.indexOf(";", iEB) + 1;
+
+        if((iEE === 0) || (iEE > iE)) {
+            return this._setErr(XMLP.ERR_CLOSE_ENTITY);
+        }
+
+        iRet = this._replaceEntity(strD, iEB + 1, iEE - 1);
+        if(iRet == XMLP._ERROR) {
+            return iRet;
+        }
+
+        strRet += this.m_cAlt;
+
+        iEB = strD.indexOf("&", iEE);
+    }
+
+    if(iEE != iE) {
+        strRet += strD.substring(iEE, iE);
+    }
+
+    this._setContent(XMLP._CONT_ALT, strRet);
+
+    return XMLP._ENTITY;
+
+};
+
+
+XMLP.prototype._replaceEntity = function(strD, iB, iE) {
+    var strEnt;
+    if(saxstrings.isEmpty(strD)){
+        return -1;
+    }
+    iB = iB || 0;
+    iE = iE || strD.length;
+
+    switch(strD.substring(iB, iE)) {
+        case "amp":  strEnt = "&";  break;
+        case "lt":   strEnt = "<";  break;
+        case "gt":   strEnt = ">";  break;
+        case "apos": strEnt = "'";  break;
+        case "quot": strEnt = "\""; break;
+        default:
+            if(strD.charAt(iB) == "#") {
+                strEnt = String.fromCharCode(parseInt(strD.substring(iB + 1, iE),10))+'';
+            } else {
+                return this._setErr(XMLP.ERR_ENTITY_UNKNOWN);
+            }
+        break;
+    }
+    this._setContent(XMLP._CONT_ALT, strEnt);
+
+    return XMLP._ENTITY;
+};
+
+
+XMLP.prototype._setContent = function(iSrc) {
+    var args = arguments;
+
+    if(XMLP._CONT_XML == iSrc) {
+        this.m_cAlt = null;
+        this.m_cB = args[1];
+        this.m_cE = args[2];
+    } else {
+        this.m_cAlt = args[1];
+        this.m_cB = 0;
+        this.m_cE = args[1].length;
+    }
+    this.m_cSrc = iSrc;
+
+};
+
+
+XMLP.prototype._setErr = function(iErr) {
+    var strErr = XMLP._errs[iErr];
+
+    this.m_cAlt = strErr;
+    this.m_cB = 0;
+    this.m_cE = strErr.length;
+    this.m_cSrc = XMLP._CONT_ALT;
+
+    return XMLP._ERROR;
+
+};
+
+
+
+
+/**
+* function:   SAXDriver
+* Author:   Scott Severtson
+* Description:
+*    SAXDriver is an object that basically wraps an XMLP instance, and provides an
+*   event-based interface for parsing. This is the object users interact with when coding
+*   with XML for <SCRIPT>
+**/
+
+var SAXDriver = function() {
+    this.m_hndDoc = null;
+    this.m_hndErr = null;
+    this.m_hndLex = null;
+};
+
+
+// CONSTANTS
+SAXDriver.DOC_B = 1;
+SAXDriver.DOC_E = 2;
+SAXDriver.ELM_B = 3;
+SAXDriver.ELM_E = 4;
+SAXDriver.CHARS = 5;
+SAXDriver.PI    = 6;
+SAXDriver.CD_B  = 7;
+SAXDriver.CD_E  = 8;
+SAXDriver.CMNT  = 9;
+SAXDriver.DTD_B = 10;
+SAXDriver.DTD_E = 11;
+
+
+
+SAXDriver.prototype.parse = function(strD) {
+    var parser = new XMLP(strD);
+
+    if(this.m_hndDoc && this.m_hndDoc.setDocumentLocator) {
+        this.m_hndDoc.setDocumentLocator(this);
+    }
+
+    this.m_parser = parser;
+    this.m_bErr = false;
+
+    if(!this.m_bErr) {
+        this._fireEvent(SAXDriver.DOC_B);
+    }
+    this._parseLoop();
+    if(!this.m_bErr) {
+        this._fireEvent(SAXDriver.DOC_E);
+    }
+
+    this.m_xml = null;
+    this.m_iP = 0;
+
+};
+
+
+SAXDriver.prototype.setDocumentHandler = function(hnd) {
+    this.m_hndDoc = hnd;
+};
+
+SAXDriver.prototype.setErrorHandler = function(hnd) {
+    this.m_hndErr = hnd;
+};
+
+SAXDriver.prototype.setLexicalHandler = function(hnd) {
+    this.m_hndLex = hnd;
+};
+
+/**
+ * LOCATOR/PARSE EXCEPTION INTERFACE
+ **/
+SAXDriver.prototype.getColumnNumber = function() {
+    return this.m_parser.getColumnNumber();
+};
+
+SAXDriver.prototype.getLineNumber = function() {
+    return this.m_parser.getLineNumber();
+};
+
+SAXDriver.prototype.getMessage = function() {
+    return this.m_strErrMsg;
+};
+
+
+SAXDriver.prototype.getPublicId = function() {
+    return null;
+};
+
+
+SAXDriver.prototype.getSystemId = function() {
+    return null;
+};
+
+/**
+ * Attribute List Interface
+ **/
+
+SAXDriver.prototype.getLength = function() {
+    return this.m_parser.getAttributeCount();
+};
+
+
+SAXDriver.prototype.getName = function(index) {
+    return this.m_parser.getAttributeName(index);
+};
+
+
+SAXDriver.prototype.getValue = function(index) {
+    return this.m_parser.getAttributeValue(index);
+};
+
+
+SAXDriver.prototype.getValueByName = function(name) {
+    return this.m_parser.getAttributeValueByName(name);
+};
+
+
+/**
+ *    Private functions
+ **/
+
+SAXDriver.prototype._fireError = function(strMsg) {
+    this.m_strErrMsg = strMsg;
+    this.m_bErr = true;
+
+    if(this.m_hndErr && this.m_hndErr.fatalError) {
+        this.m_hndErr.fatalError(this);
+    }
+};
+
+
+SAXDriver.prototype._fireEvent = function(iEvt) {
+    var hnd, func, args = arguments, iLen = args.length - 1;
+    
+    if(this.m_bErr){
+        return;
+    }
+
+    if(SAXDriver.DOC_B == iEvt) {
+        func = "startDocument";         
+        hnd = this.m_hndDoc;
+    }
+    else if (SAXDriver.DOC_E == iEvt) {
+        func = "endDocument";           
+        hnd = this.m_hndDoc;
+    }
+    else if (SAXDriver.ELM_B == iEvt) {
+        func = "startElement";          
+        hnd = this.m_hndDoc;
+    }
+    else if (SAXDriver.ELM_E == iEvt) {
+        func = "endElement";
+        hnd = this.m_hndDoc;
+    }
+    else if (SAXDriver.CHARS == iEvt) {
+        func = "characters";
+        hnd = this.m_hndDoc;
+    }
+    else if (SAXDriver.PI    == iEvt) {
+        func = "processingInstruction"; 
+        hnd = this.m_hndDoc;
+    }
+    else if (SAXDriver.CD_B  == iEvt) {
+        func = "startCDATA";            
+        hnd = this.m_hndLex;
+    }
+    else if (SAXDriver.CD_E  == iEvt) {
+        func = "endCDATA";              
+        hnd = this.m_hndLex;
+    }
+    else if (SAXDriver.CMNT  == iEvt) {
+        func = "comment";               
+        hnd = this.m_hndLex;
+    }
+
+    if(hnd && hnd[func]) {
+        if(0 === iLen) {
+            hnd[func]();
+        }
+        else if (1 == iLen) {
+            hnd[func](args[1]);
+        }
+        else if (2 == iLen) {
+            hnd[func](args[1], args[2]);
+        }
+        else if (3 == iLen) {
+            hnd[func](args[1], args[2], args[3]);
+        }
+    }
+};
+
+
+SAXDriver.prototype._parseLoop = function(parser) {
+    var iEvent;
+
+    parser = this.m_parser;
+    while(!this.m_bErr) {
+        iEvent = parser.next();
+
+        if(iEvent == XMLP._ELM_B) {
+            this._fireEvent(SAXDriver.ELM_B, parser.getName(), this);
+        }
+        else if(iEvent == XMLP._ELM_E) {
+            this._fireEvent(SAXDriver.ELM_E, parser.getName());
+        }
+        else if(iEvent == XMLP._ELM_EMP) {
+            this._fireEvent(SAXDriver.ELM_B, parser.getName(), this);
+            this._fireEvent(SAXDriver.ELM_E, parser.getName());
+        }
+        else if(iEvent == XMLP._TEXT) {
+            this._fireEvent(SAXDriver.CHARS, parser.getContent(), parser.getContentBegin(), parser.getContentEnd() - parser.getContentBegin());
+        }
+        else if(iEvent == XMLP._ENTITY) {
+            this._fireEvent(SAXDriver.CHARS, parser.getContent(), parser.getContentBegin(), parser.getContentEnd() - parser.getContentBegin());
+        }
+        else if(iEvent == XMLP._PI) {
+            this._fireEvent(SAXDriver.PI, parser.getName(), parser.getContent().substring(parser.getContentBegin(), parser.getContentEnd()));
+        }
+        else if(iEvent == XMLP._CDATA) {
+            this._fireEvent(SAXDriver.CD_B);
+            this._fireEvent(SAXDriver.CHARS, parser.getContent(), parser.getContentBegin(), parser.getContentEnd() - parser.getContentBegin());
+            this._fireEvent(SAXDriver.CD_E);
+        }
+        else if(iEvent == XMLP._COMMENT) {
+            this._fireEvent(SAXDriver.CMNT, parser.getContent(), parser.getContentBegin(), parser.getContentEnd() - parser.getContentBegin());
+        }
+        else if(iEvent == XMLP._DTD) {
+        }
+        else if(iEvent == XMLP._ERROR) {
+            this._fireError(parser.getContent());
+        }
+        else if(iEvent == XMLP._NONE) {
+            return;
+        }
+    }
+};
+
+/**
+* Defined 'globally' to this scope.  Remember everything is wrapped in a closure so this doesnt show up
+* in the outer most global scope.
+*/
+
+/**
+ *  process SAX events
+ *
+ * @author Jon van Noort (jon@webarcana.com.au), David Joham (djoham@yahoo.com) and Scott Severtson
+ *
+ * @param  impl : DOMImplementation
+ * @param  doc : DOMDocument - the Document to contain the parsed XML string
+ * @param  p   : XMLP        - the SAX Parser
+ *
+ * @return : DOMDocument
+ */
+function __parseLoop__(impl, doc, p) {
+    var iEvt, iNode, iAttr, iNS, strName;
+    var iNodeParent = doc;
+
+    var el_close_count = 0;
+
+    var entitiesList = [];
+    var textNodesList = [];
+    var i;
+    var pName;
+    var namespaceDec;
+    var pContent;
+    var textNode;
+
+    // if namespaceAware, add default namespace
+    if (impl.namespaceAware) {
+        // add the default-default namespace
+        iNS = doc.createNamespace(""); 
+        iNS.value = "http://www.w3.org/2000/xmlns/";
+        //doc._namespaces.setNamedItem(iNS);
+    }
+
+  // loop until SAX parser stops emitting events
+  while(true) {
+    // get next event
+    iEvt = p.next();
+
+    if (iEvt == XMLP._ELM_B) {                      // Begin-Element Event
+      pName = p.getName();                      // get the Element name
+      pName = trim(pName, true, true);              // strip spaces from Element name
+      if(pName.toLowerCase() == 'script'){
+        p.replaceEntities = false;
+      }
+
+      if (!impl.namespaceAware) {
+        iNode = doc.createElement(p.getName());     // create the Element
+
+        // add attributes to Element
+        for(i = 0; i < p.getAttributeCount(); i++) {
+          strName = p.getAttributeName(i);          // get Attribute name
+          iAttr = iNode.getAttributeNode(strName);  // if Attribute exists, use it
+
+          if(!iAttr) {
+            iAttr = doc.createAttribute(strName);   // otherwise create it
+          }
+
+          iAttr.value = p.getAttributeValue(i);   // set Attribute value
+          iNode.setAttributeNode(iAttr);            // attach Attribute to Element
+        }
+      }
+      else {  // Namespace Aware
+        // create element (with empty namespaceURI,
+        //  resolve after namespace 'attributes' have been parsed)
+        iNode = doc.createElementNS("", p.getName());
+
+        // duplicate ParentNode's Namespace definitions
+        iNode._namespaces = __cloneNamedNodes__(iNodeParent._namespaces, iNode, true);
+
+        // add attributes to Element
+        for(i = 0; i < p.getAttributeCount(); i++) {
+          strName = p.getAttributeName(i);          // get Attribute name
+
+          // if attribute is a namespace declaration
+          if (__isNamespaceDeclaration__(strName)) {
+            // parse Namespace Declaration
+            namespaceDec = __parseNSName__(strName);
+
+            if (strName != "xmlns") {
+              iNS = doc.createNamespace(strName);   // define namespace
+            }
+            else {
+              iNS = doc.createNamespace("");        // redefine default namespace
+            }
+            iNS.value = p.getAttributeValue(i);   // set value = namespaceURI
+
+            iNode._namespaces.setNamedItem(iNS);    // attach namespace to namespace collection
+          }
+          else {  // otherwise, it is a normal attribute
+            iAttr = iNode.getAttributeNode(strName);        // if Attribute exists, use it
+
+            if(!iAttr) {
+              iAttr = doc.createAttributeNS("", strName);   // otherwise create it
+            }
+
+            iAttr.value = p.getAttributeValue(i);         // set Attribute value
+            iNode.setAttributeNodeNS(iAttr);                // attach Attribute to Element
+
+            if (__isIdDeclaration__(strName)) {
+              iNode.id = p.getAttributeValue(i);    // cache ID for getElementById()
+            }
+          }
+        }
+
+        // resolve namespaceURIs for this Element
+        if (iNode._namespaces.getNamedItem(iNode.prefix)) {
+          iNode.namespaceURI = iNode._namespaces.getNamedItem(iNode.prefix).value;
+        }
+
+        //  for this Element's attributes
+        for (i = 0; i < iNode.attributes.length; i++) {
+          if (iNode.attributes.item(i).prefix != "") {  // attributes do not have a default namespace
+            if (iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix)) {
+              iNode.attributes.item(i).namespaceURI = iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix).value;
+            }
+          }
+        }
+      }
+
+      iNodeParent.appendChild(iNode);               // attach Element to parentNode
+      iNodeParent = iNode;                          // descend one level of the DOM Tree
+    }
+
+    else if(iEvt == XMLP._ELM_E) {                  // End-Element Event
+      
+      iNodeParent = iNodeParent.parentNode;         // ascend one level of the DOM Tree
+
+    }
+
+    else if(iEvt == XMLP._ELM_EMP) {                // Empty Element Event
+      pName = p.getName();                          // get the Element name
+      pName = trim(pName, true, true);              // strip spaces from Element name
+
+      if (!impl.namespaceAware) {
+        iNode = doc.createElement(pName);           // create the Element
+
+        // add attributes to Element
+        for(i = 0; i < p.getAttributeCount(); i++) {
+          strName = p.getAttributeName(i);          // get Attribute name
+          iAttr = iNode.getAttributeNode(strName);  // if Attribute exists, use it
+
+          if(!iAttr) {
+            iAttr = doc.createAttribute(strName);   // otherwise create it
+          }
+
+          iAttr.value = p.getAttributeValue(i);   // set Attribute value
+          iNode.setAttributeNode(iAttr);            // attach Attribute to Element
+        }
+      }
+      else {  // Namespace Aware
+        // create element (with empty namespaceURI,
+        //  resolve after namespace 'attributes' have been parsed)
+        iNode = doc.createElementNS("", p.getName());
+
+        // duplicate ParentNode's Namespace definitions
+        iNode._namespaces = __cloneNamedNodes__(iNodeParent._namespaces, iNode, true);
+
+        // add attributes to Element
+        for(i = 0; i < p.getAttributeCount(); i++) {
+          strName = p.getAttributeName(i);          // get Attribute name
+
+          // if attribute is a namespace declaration
+          if (__isNamespaceDeclaration__(strName)) {
+            // parse Namespace Declaration
+            namespaceDec = __parseNSName__(strName);
+
+            if (strName != "xmlns") {
+              iNS = doc.createNamespace(strName);   // define namespace
+            } else {
+              iNS = doc.createNamespace("");        // redefine default namespace
+            }
+            iNS.value = p.getAttributeValue(i);   // set value = namespaceURI
+
+            iNode._namespaces.setNamedItem(iNS);    // attach namespace to namespace collection
+          }
+          else {  // otherwise, it is a normal attribute
+            iAttr = iNode.getAttributeNode(strName);        // if Attribute exists, use it
+
+            if(!iAttr) {
+              iAttr = doc.createAttributeNS("", strName);   // otherwise create it
+            }
+
+            iAttr.value = p.getAttributeValue(i);         // set Attribute value
+            iNode.setAttributeNodeNS(iAttr);                // attach Attribute to Element
+
+            if (__isIdDeclaration__(strName)) {
+              iNode.id = p.getAttributeValue(i);    // cache ID for getElementById()
+            }
+          }
+        }
+
+        // resolve namespaceURIs for this Element
+        if (iNode._namespaces.getNamedItem(iNode.prefix)) {
+          iNode.namespaceURI = iNode._namespaces.getNamedItem(iNode.prefix).value;
+        }
+
+        //  for this Element's attributes
+        for (i = 0; i < iNode.attributes.length; i++) {
+          if (iNode.attributes.item(i).prefix != "") {  // attributes do not have a default namespace
+            if (iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix)) {
+              iNode.attributes.item(i).namespaceURI = iNode._namespaces.getNamedItem(iNode.attributes.item(i).prefix).value;
+            }
+          }
+        }
+      }
+
+      // if this is the Root Element
+      if (iNodeParent.nodeType == Node.DOCUMENT_NODE) {
+        iNodeParent.documentElement = iNode;        // register this Element as the Document.documentElement
+      }
+
+      iNodeParent.appendChild(iNode);               // attach Element to parentNode
+    }
+    else if(iEvt == XMLP._TEXT || iEvt == XMLP._ENTITY) {                   // TextNode and entity Events
+      // get Text content
+      pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
+
+      if (!impl.preserveWhiteSpace ) {
+        if (trim(pContent, true, true) == "") {
+            pContent = ""; //this will cause us not to create the text node below
+        }
+      }
+
+      if (pContent.length > 0) {                    // ignore empty TextNodes
+        textNode = doc.createTextNode(pContent);
+        iNodeParent.appendChild(textNode); // attach TextNode to parentNode
+
+        //the sax parser breaks up text nodes when it finds an entity. For
+        //example hello&lt;there will fire a text, an entity and another text
+        //this sucks for the dom parser because it looks to us in this logic
+        //as three text nodes. I fix this by keeping track of the entity nodes
+        //and when we're done parsing, calling normalize on their parent to
+        //turn the multiple text nodes into one, which is what DOM users expect
+        //the code to do this is at the bottom of this function
+        if (iEvt == XMLP._ENTITY) {
+            entitiesList[entitiesList.length] = textNode;
+        }
+        else {
+            //I can't properly decide how to handle preserve whitespace
+            //until the siblings of the text node are built due to
+            //the entitiy handling described above. I don't know that this
+            //will be all of the text node or not, so trimming is not appropriate
+            //at this time. Keep a list of all the text nodes for now
+            //and we'll process the preserve whitespace stuff at a later time.
+            textNodesList[textNodesList.length] = textNode;
+        }
+      }
+    }
+    else if(iEvt == XMLP._PI) {                     // ProcessingInstruction Event
+      // attach ProcessingInstruction to parentNode
+      iNodeParent.appendChild(doc.createProcessingInstruction(p.getName(), p.getContent().substring(p.getContentBegin(), p.getContentEnd())));
+    }
+    else if(iEvt == XMLP._CDATA) {                  // CDATA Event
+      // get CDATA data
+      pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
+
+      if (!impl.preserveWhiteSpace) {
+        pContent = trim(pContent, true, true);      // trim whitespace
+        pContent.replace(/ +/g, ' ');               // collapse multiple spaces to 1 space
+      }
+
+      if (pContent.length > 0) {                    // ignore empty CDATANodes
+        iNodeParent.appendChild(doc.createCDATASection(pContent)); // attach CDATA to parentNode
+      }
+    }
+    else if(iEvt == XMLP._COMMENT) {                // Comment Event
+      // get COMMENT data
+      pContent = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
+
+      if (!impl.preserveWhiteSpace) {
+        pContent = trim(pContent, true, true);      // trim whitespace
+        pContent.replace(/ +/g, ' ');               // collapse multiple spaces to 1 space
+      }
+
+      if (pContent.length > 0) {                    // ignore empty CommentNodes
+        iNodeParent.appendChild(doc.createComment(pContent));  // attach Comment to parentNode
+      }
+    }
+    else if(iEvt == XMLP._DTD) {                    // ignore DTD events
+    }
+    else if(iEvt == XMLP._ERROR) {
+        console.log("Fatal Error: " + p.getContent() +
+                "\nLine: " + p.getLineNumber() +
+                "\nColumn: " + p.getColumnNumber() + "\n");
+        throw(new DOMException(DOMException.SYNTAX_ERR));
+    }
+    else if(iEvt == XMLP._NONE) {                   // no more events
+      if (iNodeParent == doc) {                     // confirm that we have recursed back up to root
+        break;
+      }
+      else {
+        throw(new DOMException(DOMException.SYNTAX_ERR));  // one or more Tags were not closed properly
+      }
+        break;
+
+    }
+  }
+
+  var entity,
+      parentNode,
+      children,
+      child,
+      childData,
+      j;
+  //normalize any entities in the DOM to a single textNode
+  for (i = 0; i < entitiesList.length; i++) {
+      entity = entitiesList[i];
+      //its possible (if for example two entities were in the
+      //same domnode, that the normalize on the first entitiy
+      //will remove the parent for the second. Only do normalize
+      //if I can find a parent node
+      parentNode = entity.parentNode;
+      if (parentNode) {
+          parentNode.normalize();
+
+          //now do whitespace (if necessary)
+          //it was not done for text nodes that have entities
+          if(!impl.preserveWhiteSpace) {
+                children = parentNode.childNodes;
+                for ( j = 0; j < children.length; j++) {
+                    child = children.item(j);
+                    if (child.nodeType == Node.TEXT_NODE) {
+                        childData = child.data;
+                        childData.replace(/\s/g, ' ');
+                        child.data = childData;
+                    }
+                }
+          }
+      }
+  }
+
+  //do the preserve whitespace processing on the rest of the text nodes
+  //It's possible (due to the processing above) that the node will have been
+  //removed from the tree. Only do whitespace checking if parentNode is not null.
+  //This may duplicate the whitespace processing for some nodes that had entities in them
+  //but there's no way around that
+  if (!impl.preserveWhiteSpace) {
+    for (i = 0; i < textNodesList.length; i++) {
+        var node = textNodesList[i];
+        if (node.parentNode !== null) {
+            var nodeData = node.data;
+            nodeData.replace(/\s/g, ' ');
+            node.data = nodeData;
+        }
+    }
+  }
+}
+
+
+/**
+ * @method DOMImplementation._isNamespaceDeclaration - Return true, if attributeName is a namespace declaration
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  attributeName : string - the attribute name
+ * @return : boolean
+ */
+function __isNamespaceDeclaration__(attributeName) {
+  // test if attributeName is 'xmlns'
+  return (attributeName.indexOf('xmlns') > -1);
+}
+
+/**
+ * @method DOMImplementation._isIdDeclaration - Return true, if attributeName is an id declaration
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  attributeName : string - the attribute name
+ * @return : boolean
+ */
+function __isIdDeclaration__(attributeName) {
+  // test if attributeName is 'id' (case insensitive)
+  return (attributeName.toLowerCase() == 'id');
+}
+
+/**
+ * @method DOMImplementation._isValidName - Return true,
+ *   if name contains no invalid characters
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  name : string - the candidate name
+ * @return : boolean
+ */
+function __isValidName__(name) {
+  // test if name contains only valid characters
+  return name.match(re_validName);
+}
+var re_validName = /^[a-zA-Z_:][a-zA-Z0-9\.\-_:]*$/;
+
+/**
+ * @method DOMImplementation._isValidString - Return true, if string does not contain any illegal chars
+ *  All of the characters 0 through 31 and character 127 are nonprinting control characters.
+ *  With the exception of characters 09, 10, and 13, (Ox09, Ox0A, and Ox0D)
+ *  Note: different from _isValidName in that ValidStrings may contain spaces
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  name : string - the candidate string
+ * @return : boolean
+ */
+function __isValidString__(name) {
+  // test that string does not contains invalid characters
+  return (name.search(re_invalidStringChars) < 0);
+}
+var re_invalidStringChars = /\x01|\x02|\x03|\x04|\x05|\x06|\x07|\x08|\x0B|\x0C|\x0E|\x0F|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1A|\x1B|\x1C|\x1D|\x1E|\x1F|\x7F/;
+
+/**
+ * @method DOMImplementation._parseNSName - parse the namespace name.
+ *  if there is no colon, the
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  qualifiedName : string - The qualified name
+ * @return : NSName - [
+         .prefix        : string - The prefix part of the qname
+         .namespaceName : string - The namespaceURI part of the qname
+    ]
+ */
+function __parseNSName__(qualifiedName) {
+  var resultNSName = {};
+
+  resultNSName.prefix          = qualifiedName;  // unless the qname has a namespaceName, the prefix is the entire String
+  resultNSName.namespaceName   = "";
+
+  // split on ':'
+  var delimPos = qualifiedName.indexOf(':');
+  if (delimPos > -1) {
+    // get prefix
+    resultNSName.prefix        = qualifiedName.substring(0, delimPos);
+    // get namespaceName
+    resultNSName.namespaceName = qualifiedName.substring(delimPos +1, qualifiedName.length);
+  }
+  return resultNSName;
+}
+
+/**
+ * @method DOMImplementation._parseQName - parse the qualified name
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  qualifiedName : string - The qualified name
+ * @return : QName
+ */
+function __parseQName__(qualifiedName) {
+  var resultQName = {};
+
+  resultQName.localName = qualifiedName;  // unless the qname has a prefix, the local name is the entire String
+  resultQName.prefix    = "";
+
+  // split on ':'
+  var delimPos = qualifiedName.indexOf(':');
+
+  if (delimPos > -1) {
+    // get prefix
+    resultQName.prefix    = qualifiedName.substring(0, delimPos);
+
+    // get localName
+    resultQName.localName = qualifiedName.substring(delimPos +1, qualifiedName.length);
+  }
+
+  return resultQName;
+}
+
+
+/**
+ *
+ * This file only handles XML parser.
+ * It is extended by parser/domparser.js (and parser/htmlparser.js)
+ *
+ * This depends on e4x, which some engines may not have.
+ *
+ * @author thatcher
+ */
+exports.DOMParser = DOMParser = function(principle, documentURI, baseURI) {
+    // TODO: why/what should these 3 args do?
+};
+__extend__(DOMParser.prototype,{
+    parseFromString: function(xmlstring, mimetype){
+        // create SAX Parser
+        var parser = new XMLP(xmlstring+'');
+        var doc = new Document(new DOMImplementation());
+    
+        // populate Document with Parsed Nodes
+        //try {
+            __parseLoop__(doc.implementation, doc, parser);
+        /*} catch (e) {
+            console.log(
+                "Error parsing XML %s %s",  
+                doc.implementation.translateErrCode(e.code),
+                e
+            );
+        }*/
+
+        // set parseComplete flag, (Some validation Rules are relaxed if this is false)
+        doc._parseComplete = true;
+        return doc;
+    
+        /*var e4xsupport = false;
+        try{e4xsupport = new XML();}catch(e){}
+        if(e4xsupport){
+            return __E4XParser__(xmlstring, mimetype);
+        }else{
+            var doc = new Document(new DOMImplementation());
+            //requires envjs parser.js module/mixins
+            XMLParser.parseDocument(xmlstring, doc, mimetype);
+            //console.log('xml \n %s', doc.documentElement.xml);
+            return doc; 
+        }*/
+    }
+});
+
+__E4XParser__ = function(xmlstring, mimetype){
+    
+    var doc = new Document(new DOMImplementation()),
+        e4;
+
+    // The following are e4x directives.
+    // Full spec is here:
+    // http://www.ecma-international.org/publications/standards/Ecma-357.htm
+    //
+    // that is pretty gross, so checkout this summary
+    // http://rephrase.net/days/07/06/e4x
+    //
+    // also see the Mozilla Developer Center:
+    // https://developer.mozilla.org/en/E4X
+    //
+    XML.ignoreComments = false;
+    XML.ignoreProcessingInstructions = false;
+    XML.ignoreWhitespace = false;
+
+    // for some reason e4x can't handle initial xml declarations
+    // https://bugzilla.mozilla.org/show_bug.cgi?id=336551
+    // The official workaround is the big regexp below
+    // but simpler one seems to be ok
+    // xmlstring = xmlstring.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, "");
+    //
+    xmlstring = xmlstring.replace(/<\?xml.*\?>/, '');
+
+    e4 = new XMLList(xmlstring);
+
+    __E4XtoDomNode__(e4, doc, doc);
+
+    //console.log('xml \n %s', doc.documentElement.xml);
+    return doc;
+};
+
+__E4XtoDomNode__ = function(e4, parent, doc){
+    var xnode,
+        domnode,
+        children,
+        target,
+        value,
+        length,
+        element,
+        kind,
+        item;
+    //console.log('converting e4x node list \n %s', e4)
+
+    // not using the for each(item in e4) since some engines can't
+    // handle the syntax (i.e. says syntax error)
+    //
+    // for each(xnode in e4) {
+    for (item in e4) {
+        // NO do not do this if (e4.hasOwnProperty(item)) {
+        // breaks spidermonkey
+        if(item){
+            xnode = e4[item];
+
+            kind = xnode.nodeKind();
+            //console.log('treating node kind %s', kind);
+            switch(kind){
+            case 'element':
+                // add node
+                //console.log('creating element %s %s', xnode.localName(), xnode.namespace());
+                if(xnode.namespace() && (xnode.namespace()+'') !== ''){
+                    //console.log('createElementNS %s %s',xnode.namespace()+'', xnode.localName() );
+                    domnode = doc.createElementNS(xnode.namespace()+'', xnode.localName());
+                }else{
+                    domnode = doc.createElement(xnode.name()+'');
+                }
+                parent.appendChild(domnode);
+
+                // add attributes
+                __E4XtoDomNode__(xnode.attributes(), domnode, doc);
+
+                // add children
+                children = xnode.children();
+                length = children.length();
+                //console.log('recursing? %s', length ? 'yes' : 'no');
+                if (length > 0) {
+                    __E4XtoDomNode__(children, domnode, doc);
+                }
+                break;
+            case 'attribute':
+                // console.log('setting attribute %s %s %s',
+                //       xnode.localName(), xnode.namespace(), xnode.valueOf());
+
+                //
+                // cross-platform alert.  The original code used
+                //  xnode.text() to get the attribute value
+                //  This worked in Rhino, but did not in Spidermonkey
+                //  valueOf seemed to work in both
+                //
+                if(xnode.namespace() && xnode.namespace().prefix){
+                    //console.log("%s", xnode.namespace().prefix);
+                    parent.setAttributeNS(xnode.namespace()+'',
+                                          xnode.namespace().prefix+':'+xnode.localName(),
+                                          xnode.valueOf());
+                }else if((xnode.name()+'').match('http://www.w3.org/2000/xmlns/::')){
+                    if(xnode.localName()!=='xmlns'){
+                        parent.setAttributeNS('http://www.w3.org/2000/xmlns/',
+                                              'xmlns:'+xnode.localName(),
+                                              xnode.valueOf());
+                    }
+                }else{
+                    //console.log('setting attribute %s', xnode.localName());
+                    parent.setAttribute(xnode.localName()+'', xnode.valueOf());
+                }
+                break;
+            case 'text':
+                //console.log('creating text node : %s', xnode);
+                domnode = doc.createTextNode(xnode+'');
+                parent.appendChild(domnode);
+                break;
+            case 'comment':
+                //console.log('creating comment node : %s', xnode);
+                value = xnode+'';
+                domnode = doc.createComment(value.substring(4,value.length-3));
+                parent.appendChild(domnode);
+                break;
+            case 'processing-instruction':
+                //console.log('creating processing-instruction node : %s', xnode);
+                value = xnode+'';
+                target = value.split(' ')[0].substring(2);
+                value = value.split(' ').splice(1).join(' ').replace('?>','');
+                //console.log('creating processing-instruction data : %s', value);
+                domnode = doc.createProcessingInstruction(target, value);
+                parent.appendChild(domnode);
+                break;
+            default:
+                log.error('e4x DOM ERROR');
+                throw "Assertion failed in xml parser";
+            }
+        }
+    }
+};
+
+
+}(/*Envjs.DOM.DOMParser*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Attr').debug('available'); 
+});
+    
+/**
+ * @class  Attr
+ *      The Attr interface represents an attribute in an Element object
+ * @extends Node
+ * @param  ownerDocument : The Document object associated with this node.
+ */
+exports.Attr = Attr = function(ownerDocument) {
+    Node.apply(this, arguments);
+    // set when Attr is added to NamedNodeMap
+    this.ownerElement = null;
+    //TODO: our implementation of Attr is incorrect because we don't
+    //      treat the value of the attribute as a child text node.
+};
+Attr.prototype = new Node();
+__extend__(Attr.prototype, {
+    // the name of this attribute
+    get name(){
+        return this.nodeName;
+    },
+    // the value of the attribute is returned as a string
+    get value(){
+        return this.nodeValue||'';
+    },
+    set value(value){
+        // throw Exception if Attribute is readonly
+        if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
+            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+        // delegate to node
+        this.nodeValue = value;
+    },
+    get textContent(){
+        return this.nodeValue;
+    },
+    set textContent(newText){
+        this.nodeValue = newText;
+    },
+    get specified(){
+        return (this !== null && this !== undefined);
+    },
+    get nodeType(){
+        return Node.ATTRIBUTE_NODE;
+    },
+    get xml() {
+        if (this.nodeValue) {
+            return  __escapeXML__(this.nodeValue+"");
+        } else {
+            return '';
+        }
+    },
+    toString : function() {
+        return '[object Attr]';
+    }
+});
+
+}(/*Envjs.DOM.Attr*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Element').debug('available'); 
+});
+/**
+ * @class  Element -
+ *      By far the vast majority of objects (apart from text)
+ *      that authors encounter when traversing a document are
+ *      Element nodes.
+ * @extends Node
+ * @param  ownerDocument : The Document object associated with this node.
+ */
+exports.Element = Element = function(ownerDocument) {
+    Node.apply(this, arguments);
+    this.attributes = new NamedNodeMap(this.ownerDocument, this);
+};
+Element.prototype = new Node();
+__extend__(Element.prototype, {
+    // The name of the element.
+    get tagName(){
+        return this.nodeName;
+    },
+
+    getAttribute: function(name) {
+        var ret = null;
+        // if attribute exists, use it
+        var attr = this.attributes.getNamedItem(name);
+        if (attr) {
+            ret = attr.value;
+        }
+        // if Attribute exists, return its value, otherwise, return null
+        return ret;
+    },
+
+    setAttribute : function (name, value) {
+		log.debug('setting attribute %s = %s for element %s', name, value, this.nodeName);
+        // if attribute exists, use it
+        var attr = this.attributes.getNamedItem(name);
+        if (attr===null||attr===undefined) {
+            // otherwise create it
+            attr = __ownerDocument__(this).createAttribute(name);
+           //console.log('attr %s', attr);
+        }
+
+
+        // test for exceptions
+        if (__ownerDocument__(this).implementation.errorChecking) {
+            // throw Exception if Attribute is readonly
+            if (attr._readonly) {
+                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            }
+
+            // throw Exception if the value string contains an illegal character
+            if (!__isValidString__(value+'')) {
+                throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
+            }
+        }
+
+        // assign values to properties (and aliases)
+        attr.value     = value + '';
+
+        // add/replace Attribute in NamedNodeMap
+        this.attributes.setNamedItem(attr);
+        //console.log('element setNamedItem %s = %s', attr.name, attr.value);
+    },
+    removeAttribute : function removeAttribute(name) {
+		log.debug('removing attribute %s for element %s', name, this.nodeName);
+        // delegate to NamedNodeMap.removeNamedItem
+        return this.attributes.removeNamedItem(name);
+    },
+    getAttributeNode : function getAttributeNode(name) {
+        // delegate to NamedNodeMap.getNamedItem
+        return this.attributes.getNamedItem(name);
+    },
+    setAttributeNode: function(newAttr) {
+        // delegate to NamedNodeMap.setNamedItem
+        return this.attributes.setNamedItem(newAttr);
+    },
+    removeAttributeNode: function(oldAttr) {
+      // throw Exception if Attribute is readonly
+      if (__ownerDocument__(this).implementation.errorChecking && oldAttr._readonly) {
+        throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+      }
+
+      // get item index
+      var itemIndex = this.attributes._findItemIndex(oldAttr._id);
+
+      // throw Exception if node does not exist in this map
+      if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
+        throw(new DOMException(DOMException.NOT_FOUND_ERR));
+      }
+
+      return this.attributes._removeChild(itemIndex);
+    },
+    getAttributeNS : function(namespaceURI, localName) {
+        var ret = "";
+        // delegate to NAmedNodeMap.getNamedItemNS
+        var attr = this.attributes.getNamedItemNS(namespaceURI, localName);
+        if (attr) {
+            ret = attr.value;
+        }
+        return ret;  // if Attribute exists, return its value, otherwise return ""
+    },
+    setAttributeNS : function(namespaceURI, qualifiedName, value) {
+		log.debug('setAttributeNS %s:%s for element %s', namespaceURI, qualifiedName, this.nodeName);
+        // call NamedNodeMap.getNamedItem
+        //console.log('setAttributeNS %s %s %s', namespaceURI, qualifiedName, value);
+        var attr = this.attributes.getNamedItem(namespaceURI, qualifiedName);
+
+        if (!attr) {  // if Attribute exists, use it
+            // otherwise create it
+            attr = __ownerDocument__(this).createAttributeNS(namespaceURI, qualifiedName);
+        }
+
+        value = '' + value;
+
+        // test for exceptions
+        if (__ownerDocument__(this).implementation.errorChecking) {
+            // throw Exception if Attribute is readonly
+            if (attr._readonly) {
+                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+            }
+
+            // throw Exception if the Namespace is invalid
+            if (!__isValidNamespace__(this.ownerDocument, namespaceURI, qualifiedName, true)) {
+                throw(new DOMException(DOMException.NAMESPACE_ERR));
+            }
+
+            // throw Exception if the value string contains an illegal character
+            if (!__isValidString__(value)) {
+                throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
+            }
+        }
+
+        // assign values to properties (and aliases)
+        attr.value     = value;
+        attr.nodeValue = value;
+
+        // delegate to NamedNodeMap.setNamedItem
+        this.attributes.setNamedItemNS(attr);
+    },
+    removeAttributeNS : function(namespaceURI, localName) {
+        // delegate to NamedNodeMap.removeNamedItemNS
+        return this.attributes.removeNamedItemNS(namespaceURI, localName);
+    },
+    getAttributeNodeNS : function(namespaceURI, localName) {
+        // delegate to NamedNodeMap.getNamedItemNS
+        return this.attributes.getNamedItemNS(namespaceURI, localName);
+    },
+    setAttributeNodeNS : function(newAttr) {
+        // delegate to NamedNodeMap.setNamedItemNS
+        return this.attributes.setNamedItemNS(newAttr);
+    },
+    hasAttribute : function(name) {
+        // delegate to NamedNodeMap._hasAttribute
+        return __hasAttribute__(this.attributes,name);
+    },
+    hasAttributeNS : function(namespaceURI, localName) {
+        // delegate to NamedNodeMap._hasAttributeNS
+        return __hasAttributeNS__(this.attributes, namespaceURI, localName);
+    },
+    get nodeType(){
+        return Node.ELEMENT_NODE;
+    },
+    get xml() {
+        var ret = "",
+            ns = "",
+            attrs,
+            attrstring,
+            i;
+
+        // serialize namespace declarations
+        if (this.namespaceURI){
+            if((this === this.ownerDocument.documentElement) ||
+               (!this.parentNode)||
+               (this.parentNode && (this.parentNode.namespaceURI !== this.namespaceURI))) {
+                ns = ' xmlns' + (this.prefix?(':'+this.prefix):'') +
+                    '="' + this.namespaceURI + '"';
+            }
+        }
+        
+        attrstring = "";
+        if(this._namespaces && this._namespaces.length){
+           attrstring += this._namespaces.xml;
+        }
+        
+
+        // serialize Attribute declarations
+        attrs = this.attributes;
+        for(i=0;i< attrs.length;i++){
+            if(attrs[i].name.match('xmlns:')) {
+                attrstring += " "+attrs[i].name+'="'+attrs[i].xml+'"';
+            }
+        }
+        for(i=0;i< attrs.length;i++){
+            if(!attrs[i].name.match('xmlns:')) {
+                attrstring += " "+attrs[i].name+'="'+attrs[i].xml+'"';
+            }
+        }
+
+        if(this.hasChildNodes()){
+            // serialize this Element
+            ret += "<" + this.tagName + ns + attrstring +">";
+            ret += this.childNodes.xml;
+            ret += "</" + this.tagName + ">";
+        }else{
+            ret += "<" + this.tagName + ns + attrstring +"/>";
+        }
+
+        return ret;
+    },
+    toString : function(){
+        return '[object Element]';
+    }
+});
+
+}(/*Envjs.DOM.Element*/));
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.ProcessingInstruction').debug('available'); 
+});
+/**
+ * @class  ProcessingInstruction -
+ *      The ProcessingInstruction interface represents a
+ *      "processing instruction", used in XML as a way to
+ *      keep processor-specific information in the text of
+ *      the document
+ * @extends Node
+ * @author Jon van Noort (jon@webarcana.com.au)
+ * @param  ownerDocument :  The Document object associated with this node.
+ */
+exports.ProcessingInstruction = ProcessingInstruction = function(ownerDocument) {
+    Node.apply(this, arguments);
+};
+ProcessingInstruction.prototype = new Node();
+__extend__(ProcessingInstruction.prototype, {
+    get data(){
+        return this.nodeValue;
+    },
+    set data(data){
+        // throw Exception if Node is readonly
+        if (__ownerDocument__(this).errorChecking && this._readonly) {
+            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
+        }
+        this.nodeValue = data;
+    },
+    get textContent(){
+        return this.data;
+    },
+    get localName(){
+        return null;
+    },
+    get target(){
+      // The target of this processing instruction.
+      // XML defines this as being the first token following the markup that begins the processing instruction.
+      // The content of this processing instruction.
+        return this.nodeName;
+    },
+    set target(value){
+      // The target of this processing instruction.
+      // XML defines this as being the first token following the markup that begins the processing instruction.
+      // The content of this processing instruction.
+        this.nodeName = value;
+    },
+    get nodeType(){
+        return Node.PROCESSING_INSTRUCTION_NODE;
+    },
+    get xml(){
+        return "<?" + this.nodeName +" "+ this.nodeValue + "?>";
+    },
+    toString : function(){
+        return "[object ProcessingInstruction]";
+    }
+});
+
+}(/*Envjs.DOM.ProcessingInstruction*/));
+
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Entity').debug('available'); 
+});
+/**
+ * @author envjs team
+ */
+
+exports.Entity = Entity = function() {
+    throw new Error("Entity Not Implemented" );
+};
+
+Entity.constants = {
+        // content taken from W3C "HTML 4.01 Specification"
+        //                        "W3C Recommendation 24 December 1999"
+
+    nbsp: "\u00A0",
+    iexcl: "\u00A1",
+    cent: "\u00A2",
+    pound: "\u00A3",
+    curren: "\u00A4",
+    yen: "\u00A5",
+    brvbar: "\u00A6",
+    sect: "\u00A7",
+    uml: "\u00A8",
+    copy: "\u00A9",
+    ordf: "\u00AA",
+    laquo: "\u00AB",
+    not: "\u00AC",
+    shy: "\u00AD",
+    reg: "\u00AE",
+    macr: "\u00AF",
+    deg: "\u00B0",
+    plusmn: "\u00B1",
+    sup2: "\u00B2",
+    sup3: "\u00B3",
+    acute: "\u00B4",
+    micro: "\u00B5",
+    para: "\u00B6",
+    middot: "\u00B7",
+    cedil: "\u00B8",
+    sup1: "\u00B9",
+    ordm: "\u00BA",
+    raquo: "\u00BB",
+    frac14: "\u00BC",
+    frac12: "\u00BD",
+    frac34: "\u00BE",
+    iquest: "\u00BF",
+    Agrave: "\u00C0",
+    Aacute: "\u00C1",
+    Acirc: "\u00C2",
+    Atilde: "\u00C3",
+    Auml: "\u00C4",
+    Aring: "\u00C5",
+    AElig: "\u00C6",
+    Ccedil: "\u00C7",
+    Egrave: "\u00C8",
+    Eacute: "\u00C9",
+    Ecirc: "\u00CA",
+    Euml: "\u00CB",
+    Igrave: "\u00CC",
+    Iacute: "\u00CD",
+    Icirc: "\u00CE",
+    Iuml: "\u00CF",
+    ETH: "\u00D0",
+    Ntilde: "\u00D1",
+    Ograve: "\u00D2",
+    Oacute: "\u00D3",
+    Ocirc: "\u00D4",
+    Otilde: "\u00D5",
+    Ouml: "\u00D6",
+    times: "\u00D7",
+    Oslash: "\u00D8",
+    Ugrave: "\u00D9",
+    Uacute: "\u00DA",
+    Ucirc: "\u00DB",
+    Uuml: "\u00DC",
+    Yacute: "\u00DD",
+    THORN: "\u00DE",
+    szlig: "\u00DF",
+    agrave: "\u00E0",
+    aacute: "\u00E1",
+    acirc: "\u00E2",
+    atilde: "\u00E3",
+    auml: "\u00E4",
+    aring: "\u00E5",
+    aelig: "\u00E6",
+    ccedil: "\u00E7",
+    egrave: "\u00E8",
+    eacute: "\u00E9",
+    ecirc: "\u00EA",
+    euml: "\u00EB",
+    igrave: "\u00EC",
+    iacute: "\u00ED",
+    icirc: "\u00EE",
+    iuml: "\u00EF",
+    eth: "\u00F0",
+    ntilde: "\u00F1",
+    ograve: "\u00F2",
+    oacute: "\u00F3",
+    ocirc: "\u00F4",
+    otilde: "\u00F5",
+    ouml: "\u00F6",
+    divide: "\u00F7",
+    oslash: "\u00F8",
+    ugrave: "\u00F9",
+    uacute: "\u00FA",
+    ucirc: "\u00FB",
+    uuml: "\u00FC",
+    yacute: "\u00FD",
+    thorn: "\u00FE",
+    yuml: "\u00FF",
+    fnof: "\u0192",
+    Alpha: "\u0391",
+    Beta: "\u0392",
+    Gamma: "\u0393",
+    Delta: "\u0394",
+    Epsilon: "\u0395",
+    Zeta: "\u0396",
+    Eta: "\u0397",
+    Theta: "\u0398",
+    Iota: "\u0399",
+    Kappa: "\u039A",
+    Lambda: "\u039B",
+    Mu: "\u039C",
+    Nu: "\u039D",
+    Xi: "\u039E",
+    Omicron: "\u039F",
+    Pi: "\u03A0",
+    Rho: "\u03A1",
+    Sigma: "\u03A3",
+    Tau: "\u03A4",
+    Upsilon: "\u03A5",
+    Phi: "\u03A6",
+    Chi: "\u03A7",
+    Psi: "\u03A8",
+    Omega: "\u03A9",
+    alpha: "\u03B1",
+    beta: "\u03B2",
+    gamma: "\u03B3",
+    delta: "\u03B4",
+    epsilon: "\u03B5",
+    zeta: "\u03B6",
+    eta: "\u03B7",
+    theta: "\u03B8",
+    iota: "\u03B9",
+    kappa: "\u03BA",
+    lambda: "\u03BB",
+    mu: "\u03BC",
+    nu: "\u03BD",
+    xi: "\u03BE",
+    omicron: "\u03BF",
+    pi: "\u03C0",
+    rho: "\u03C1",
+    sigmaf: "\u03C2",
+    sigma: "\u03C3",
+    tau: "\u03C4",
+    upsilon: "\u03C5",
+    phi: "\u03C6",
+    chi: "\u03C7",
+    psi: "\u03C8",
+    omega: "\u03C9",
+    thetasym: "\u03D1",
+    upsih: "\u03D2",
+    piv: "\u03D6",
+    bull: "\u2022",
+    hellip: "\u2026",
+    prime: "\u2032",
+    Prime: "\u2033",
+    oline: "\u203E",
+    frasl: "\u2044",
+    weierp: "\u2118",
+    image: "\u2111",
+    real: "\u211C",
+    trade: "\u2122",
+    alefsym: "\u2135",
+    larr: "\u2190",
+    uarr: "\u2191",
+    rarr: "\u2192",
+    darr: "\u2193",
+    harr: "\u2194",
+    crarr: "\u21B5",
+    lArr: "\u21D0",
+    uArr: "\u21D1",
+    rArr: "\u21D2",
+    dArr: "\u21D3",
+    hArr: "\u21D4",
+    forall: "\u2200",
+    part: "\u2202",
+    exist: "\u2203",
+    empty: "\u2205",
+    nabla: "\u2207",
+    isin: "\u2208",
+    notin: "\u2209",
+    ni: "\u220B",
+    prod: "\u220F",
+    sum: "\u2211",
+    minus: "\u2212",
+    lowast: "\u2217",
+    radic: "\u221A",
+    prop: "\u221D",
+    infin: "\u221E",
+    ang: "\u2220",
+    and: "\u2227",
+    or: "\u2228",
+    cap: "\u2229",
+    cup: "\u222A",
+    intXX: "\u222B",
+    there4: "\u2234",
+    sim: "\u223C",
+    cong: "\u2245",
+    asymp: "\u2248",
+    ne: "\u2260",
+    equiv: "\u2261",
+    le: "\u2264",
+    ge: "\u2265",
+    sub: "\u2282",
+    sup: "\u2283",
+    nsub: "\u2284",
+    sube: "\u2286",
+    supe: "\u2287",
+    oplus: "\u2295",
+    otimes: "\u2297",
+    perp: "\u22A5",
+    sdot: "\u22C5",
+    lceil: "\u2308",
+    rceil: "\u2309",
+    lfloor: "\u230A",
+    rfloor: "\u230B",
+    lang: "\u2329",
+    rang: "\u232A",
+    loz: "\u25CA",
+    spades: "\u2660",
+    clubs: "\u2663",
+    hearts: "\u2665",
+    diams: "\u2666",
+    quot: "\u0022",
+    amp: "\u0026",
+    lt: "\u003C",
+    gt: "\u003E",
+    OElig: "\u0152",
+    oelig: "\u0153",
+    Scaron: "\u0160",
+    scaron: "\u0161",
+    Yuml: "\u0178",
+    circ: "\u02C6",
+    tilde: "\u02DC",
+    ensp: "\u2002",
+    emsp: "\u2003",
+    thinsp: "\u2009",
+    zwnj: "\u200C",
+    zwj: "\u200D",
+    lrm: "\u200E",
+    rlm: "\u200F",
+    ndash: "\u2013",
+    mdash: "\u2014",
+    lsquo: "\u2018",
+    rsquo: "\u2019",
+    sbquo: "\u201A",
+    ldquo: "\u201C",
+    rdquo: "\u201D",
+    bdquo: "\u201E",
+    dagger: "\u2020",
+    Dagger: "\u2021",
+    permil: "\u2030",
+    lsaquo: "\u2039",
+    rsaquo: "\u203A",
+    euro: "\u20AC",
+
+    // non-standard entities
+    apos: "'"
+};
+
+
+}(/*Envjs.DOM.Entity*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.EntityReference').debug('available'); 
+});
+/**
+ * @author envjs team
+ */
+
+exports.EntityReference = EntityReference = function() {
+    throw new Error("EntityReference Not Implemented" );
+};
+
+}(/*Envjs.DOM.EntityReference*/));
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.NodeList').debug('available'); 
+});
+/**
+ * @author envjs team
+ */
+exports.Notation = Notation = function() {
+    throw new Error("Notation Not Implemented" );
+};
+
+}(/*Envjs.DOM.Notation*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Range').debug('available'); 
+});
+
+/**
+ * @author thatcher
+ */
+exports.Range = Range = function(){};
+
+__extend__(Range.prototype, {
+    get startContainer(){
+
+    },
+    get endContainer(){
+
+    },
+    get startOffset(){
+
+    },
+    get endOffset(){
+
+    },
+    get collapsed(){
+
+    },
+    get commonAncestorContainer(){
+
+    },
+    setStart: function(refNode, offset){//throws RangeException
+
+    },
+    setEnd: function(refNode, offset){//throws RangeException
+    
+    },
+    setStartBefore: function(refNode){//throws RangeException
+    
+    },
+    setStartAfter: function(refNode){//throws RangeException
+    
+    },
+    setEndBefore: function(refNode){//throws RangeException
+    
+    },
+    setEndAfter: function(refNode){//throws RangeException
+    
+    },
+    collapse: function(toStart){//throws RangeException
+    
+    },
+    selectNode: function(refNode){//throws RangeException
+    
+    },
+    selectNodeContents: function(refNode){//throws RangeException
+    
+    },
+    compareBoundaryPoints: function(how, sourceRange){
+
+    },
+    deleteContents: function(){
+
+    },
+    extractContents: function(){
+
+    },
+    cloneContents: function(){
+
+    },
+    insertNode: function(newNode){
+
+    },
+    surroundContents: function(newParent){
+
+    },
+    cloneRange: function(){
+
+    },
+    toString: function(){
+        return '[object Range]';
+    },
+    detach: function(){
+
+    }
+});
+
+
+// CompareHow
+Range.START_TO_START                 = 0;
+Range.START_TO_END                   = 1;
+Range.END_TO_END                     = 2;
+Range.END_TO_START                   = 3;
+  
+
+
+}(/*Envjs.DOM.Range*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.XMLSerializer').debug('available'); 
+});
+
+/**
+ * @author envjs team
+ * @class XMLSerializer
+ */
+
+exports.XMLSerializer = XMLSerializer = function() {};
+
+__extend__(XMLSerializer.prototype, {
+    serializeToString: function(node){
+        return node.xml;
+    },
+    toString : function(){
+        return "[object XMLSerializer]";
+    }
+});
+
+}(/*Envjs.DOM.XMLSerilaizer*/));
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.XPathResult').debug('available'); 
+});
+
+/**
+ * @author envjs team
+ * @class XPathResult
+ */
+
+exports.XPathResult = XPathResult = function(resultType, results){
+    if( undefined === resultType){
+        resultType = XPathResult.ANY_TYPE;
+    }
+    this.type = resultType;
+    this.results = results;
+    this.currentIndex = -1;
+};
+
+XPathResult.ANY_TYPE = 0;
+XPathResult.NUMBER_TYPE  = 1;
+XPathResult.STRING_TYPE  = 2;
+XPathResult.BOOLEAN_TYPE  = 3;
+XPathResult.UNORDERED_NODE_ITERATOR_TYPE  = 4;
+XPathResult.ORDERED_NODE_ITERATOR_TYPE  = 5;
+XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE = 6;
+XPathResult.ORDERED_NODE_SNAPSHOT_TYPE  = 7;
+XPathResult.ANY_UNORDERED_NODE_TYPE = 8;
+XPathResult.FIRST_ORDERED_NODE_TYPE = 9;
+
+__extend__(XPathResult.prototype, {
+    get numberValue(){
+        return this.results.numberValue();
+    },
+    get stringValue(){
+        return this.results.stringValue();
+    },
+    get booleanValue(){
+        return this.results.booleanValue();
+    },
+    get singleNodeValue(){
+        var nodelist = this.results.nodeSetValue();
+        return nodelist.length?nodelist[0]:null;
+    },
+    get invalidIteratorState(){
+        return (this.currentIndex < this.results.length)?false:true;
+    },
+    get snapshotLength(){
+        return 'value' in this.results?this.results.value.length:0;
+    },
+    iterateNext: function(){
+        return (++this.currentIndex < this.results.value.length) ? 
+            this.results.value[this.currentIndex] : 
+            null;
+    },
+    snapshotItem: function(index){
+        return index < this.results.value.length ? 
+            this.results.value[index] : 
+            null;
+    }
+});
+
+var __compileXPath__;
+    
+exports.XPathResult = XPathExpression = function(xpathText, nsuriMap){
+    this.raw = xpathText;
+    this.compiled = __compileXPath__(xpathText, nsuriMap);
+};
+//redefined in closure below
+XPathExpression.prototype.evaluate = function(contextNode, resultType, result){
+    throw 'Not Implemented';
+};
+
+// Copyright 2005 Google
+//
+// Author: Steffen Meschkat <mesch@google.com>
+//
+// Miscellaneous utility and placeholder functions.
+
+// Dummy implmentation for the logging functions. Replace by something
+// useful when you want to debug.
+function xpathLog(msg) {}
+function xsltLog(msg) {}
+function xsltLogXml(msg) {}
+
+var ajaxsltIsIE6 = false;//navigator.appVersion.match(/MSIE 6.0/);
+
+// Based on <http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/
+// core.html#ID-1950641247>
+var DOM_ELEMENT_NODE = 1;
+var DOM_ATTRIBUTE_NODE = 2;
+var DOM_TEXT_NODE = 3;
+var DOM_CDATA_SECTION_NODE = 4;
+var DOM_ENTITY_REFERENCE_NODE = 5;
+var DOM_ENTITY_NODE = 6;
+var DOM_PROCESSING_INSTRUCTION_NODE = 7;
+var DOM_COMMENT_NODE = 8;
+var DOM_DOCUMENT_NODE = 9;
+var DOM_DOCUMENT_TYPE_NODE = 10;
+var DOM_DOCUMENT_FRAGMENT_NODE = 11;
+var DOM_NOTATION_NODE = 12;
+
+// Throws an exception if false.
+function assert(b) {
+  if (!b) {
+    throw "Assertion failed";
+  }
+}
+
+// Splits a string s at all occurrences of character c. This is like
+// the split() method of the string object, but IE omits empty
+// strings, which violates the invariant (s.split(x).join(x) == s).
+function stringSplit(s, c) {
+  var a = s.indexOf(c);
+  if (a == -1) {
+    return [ s ];
+  }
+  var parts = [];
+  parts.push(s.substr(0,a));
+  while (a != -1) {
+    var a1 = s.indexOf(c, a + 1);
+    if (a1 != -1) {
+      parts.push(s.substr(a + 1, a1 - a - 1));
+    } else {
+      parts.push(s.substr(a + 1));
+    }
+    a = a1;
+  }
+  return parts;
+}
+
+
+
+// Applies the given function to each element of the array, preserving
+// this, and passing the index.
+function mapExec(array, func) {
+  for (var i = 0; i < array.length; ++i) {
+    func.call(this, array[i], i);
+  }
+}
+
+// Returns an array that contains the return value of the given
+// function applied to every element of the input array.
+function mapExpr(array, func) {
+  var ret = [];
+  for (var i = 0; i < array.length; ++i) {
+    ret.push(func(array[i]));
+  }
+  return ret;
+}
+
+// Reverses the given array in place.
+function reverseInplace(array) {
+  for (var i = 0; i < array.length / 2; ++i) {
+    var h = array[i];
+    var ii = array.length - i - 1;
+    array[i] = array[ii];
+    array[ii] = h;
+  }
+}
+
+// Removes value from array. Returns the number of instances of value
+// that were removed from array.
+function removeFromArray(array, value, opt_notype) {
+  var shift = 0;
+  for (var i = 0; i < array.length; ++i) {
+    if (array[i] === value || (opt_notype && array[i] == value)) {
+      array.splice(i--, 1);
+      shift++;
+    }
+  }
+  return shift;
+}
+
+// Shallow-copies an array to the end of another array
+// Basically Array.concat, but works with other non-array collections
+function copyArray(dst, src) {
+  if (!src){ 
+      return; 
+  }
+  var dstLength = dst.length;
+  for (var i = src.length - 1; i >= 0; --i) {
+    dst[i+dstLength] = src[i];
+  }
+}
+
+/**
+ * This is an optimization for copying attribute lists in IE. IE includes many
+ * extraneous properties in its DOM attribute lists, which take require
+ * significant extra processing when evaluating attribute steps. With this
+ * function, we ignore any such attributes that has an empty string value.
+ */
+function copyArrayIgnoringAttributesWithoutValue(dst, src)
+{
+  if (!src){
+       return;
+   }
+  for (var i = src.length - 1; i >= 0; --i) {
+    // this test will pass so long as the attribute has a non-empty string
+    // value, even if that value is "false", "0", "undefined", etc.
+    if (src[i].nodeValue) {
+      dst.push(src[i]);
+    }
+  }
+}
+
+var JSURL_REGEX = /^javascript:/;
+function xmlValueIE6Hack(node) {
+    // Issue 19, IE6 mangles href attribute when it's a javascript: url
+    var nodeName = node.nodeName;
+    var nodeValue = node.nodeValue;
+    if (nodeName.length != 4){ 
+        return nodeValue; 
+    }
+    if (!/^href$/i.test(nodeName)){
+         return nodeValue;
+    }
+    if (!JSURL_REGEX.test(nodeValue)){
+         return nodeValue;
+    }
+    return unescape(nodeValue);
+}
+
+// Returns the text value of a node; for nodes without children this
+// is the nodeValue, for nodes with children this is the concatenation
+// of the value of all children.
+function xmlValue(node) {
+  if (!node) {
+    return '';
+  }
+
+  var ret = '';
+  if (node.nodeType == DOM_TEXT_NODE ||
+      node.nodeType == DOM_CDATA_SECTION_NODE) {
+    ret += node.nodeValue;
+
+  } else if (node.nodeType == DOM_ATTRIBUTE_NODE) {
+    if (ajaxsltIsIE6) {
+      ret += xmlValueIE6Hack(node);
+    } else {
+      ret += node.nodeValue;
+    }
+  } else if (node.nodeType == DOM_ELEMENT_NODE ||
+             node.nodeType == DOM_DOCUMENT_NODE ||
+             node.nodeType == DOM_DOCUMENT_FRAGMENT_NODE) {
+    for (var i = 0; i < node.childNodes.length; ++i) {
+      ret += arguments.callee(node.childNodes[i]);
+    }
+  }
+  return ret;
+}
+
+
+function xmlFullNodeName(n) {
+  if (n.prefix && n.nodeName.indexOf(n.prefix + ':') !== 0) {
+    return n.prefix + ':' + n.nodeName;
+  } else {
+    return n.nodeName;
+  }
+}
+
+// Escape XML special markup chracters: tag delimiter < > and entity
+// reference start delimiter &. The escaped string can be used in XML
+// text portions (i.e. between tags).
+function xmlEscapeText(s) {
+  return ('' + s).replace(/&/g, '&amp;').replace(/</g, '&lt;').
+    replace(/>/g, '&gt;');
+}
+
+// Escape XML special markup characters: tag delimiter < > entity
+// reference start delimiter & and quotes ". The escaped string can be
+// used in double quoted XML attribute value portions (i.e. in
+// attributes within start tags).
+function xmlEscapeAttr(s) {
+  return xmlEscapeText(s).replace(/\"/g, '&quot;');
+}
+
+// Escape markup in XML text, but don't touch entity references. The
+// escaped string can be used as XML text (i.e. between tags).
+function xmlEscapeTags(s) {
+  return s.replace(/</g, '&lt;').replace(/>/g, '&gt;');
+}
+
+/**
+ * Wrapper function to access the owner document uniformly for document
+ * and other nodes: for the document node, the owner document is the
+ * node itself, for all others it's the ownerDocument property.
+ *
+ * @param {Node} node
+ * @return {Document}
+ */
+function xmlOwnerDocument(node) {
+  if (node.nodeType == DOM_DOCUMENT_NODE) {
+    return node;
+  } else {
+    return node.ownerDocument;
+  }
+}
+
+
+function xmlTextR(node, buf, cdata) {
+    var i;
+  if (node.nodeType == DOM_TEXT_NODE) {
+    buf.push(xmlEscapeText(node.nodeValue));
+
+  } else if (node.nodeType == DOM_CDATA_SECTION_NODE) {
+    if (cdata) {
+      buf.push(node.nodeValue);
+    } else {
+      buf.push('<![CDATA[' + node.nodeValue + ']]>');
+    }
+
+  } else if (node.nodeType == DOM_COMMENT_NODE) {
+    buf.push('<!--' + node.nodeValue + '-->');
+
+  } else if (node.nodeType == DOM_ELEMENT_NODE) {
+    buf.push('<' + xmlFullNodeName(node));
+    for (i = 0; i < node.attributes.length; ++i) {
+      var a = node.attributes[i];
+      if (a && a.nodeName && a.nodeValue) {
+        buf.push(' ' + xmlFullNodeName(a) + '="' +
+                 xmlEscapeAttr(a.nodeValue) + '"');
+      }
+    }
+
+    if (node.childNodes.length === 0) {
+      buf.push('/>');
+    } else {
+      buf.push('>');
+      for (i = 0; i < node.childNodes.length; ++i) {
+        arguments.callee(node.childNodes[i], buf, cdata);
+      }
+      buf.push('</' + xmlFullNodeName(node) + '>');
+    }
+
+  } else if (node.nodeType == DOM_DOCUMENT_NODE ||
+             node.nodeType == DOM_DOCUMENT_FRAGMENT_NODE) {
+    for (i = 0; i < node.childNodes.length; ++i) {
+      arguments.callee(node.childNodes[i], buf, cdata);
+    }
+  }
+}
+
+// Returns the representation of a node as XML text.
+function xmlText(node, opt_cdata) {
+  var buf = [];
+  xmlTextR(node, buf, opt_cdata);
+  return buf.join('');
+}
+
+// Wrapper around DOM methods so we can condense their invocations.
+function domGetAttribute(node, name) {
+  return node.getAttribute(name);
+}
+
+function domSetAttribute(node, name, value) {
+  return node.setAttribute(name, value);
+}
+
+function domRemoveAttribute(node, name) {
+  return node.removeAttribute(name);
+}
+
+function domAppendChild(node, child) {
+  return node.appendChild(child);
+}
+
+function domRemoveChild(node, child) {
+  return node.removeChild(child);
+}
+
+function domReplaceChild(node, newChild, oldChild) {
+  return node.replaceChild(newChild, oldChild);
+}
+
+function domInsertBefore(node, newChild, oldChild) {
+  return node.insertBefore(newChild, oldChild);
+}
+
+function domRemoveNode(node) {
+  return domRemoveChild(node.parentNode, node);
+}
+
+function domCreateTextNode(doc, text) {
+  return doc.createTextNode(text);
+}
+
+function domCreateElement(doc, name) {
+  return doc.createElement(name);
+}
+
+function domCreateAttribute(doc, name) {
+  return doc.createAttribute(name);
+}
+
+function domCreateCDATASection(doc, data) {
+  return doc.createCDATASection(data);
+}
+
+function domCreateComment(doc, text) {
+  return doc.createComment(text);
+}
+
+function domCreateDocumentFragment(doc) {
+  return doc.createDocumentFragment();
+}
+
+function domGetElementById(doc, id) {
+  return doc.getElementById(id);
+}
+
+// Same for window methods.
+function windowSetInterval(win, fun, time) {
+  return win.setInterval(fun, time);
+}
+
+function windowClearInterval(win, id) {
+  return win.clearInterval(id);
+}
+
+// The following function does what document.importNode(node, true)
+// would do for us here; however that method is broken in Safari/1.3,
+// so we have to emulate it.
+function xmlImportNode(doc, node) {
+  if (node.nodeType == DOM_TEXT_NODE) {
+    return domCreateTextNode(doc, node.nodeValue);
+
+  } else if (node.nodeType == DOM_CDATA_SECTION_NODE) {
+    return domCreateCDATASection(doc, node.nodeValue);
+
+  } else if (node.nodeType == DOM_ELEMENT_NODE) {
+    var newNode = domCreateElement(doc, node.nodeName);
+    for (var i = 0; i < node.attributes.length; ++i) {
+      var an = node.attributes[i];
+      var name = an.nodeName;
+      var value = an.nodeValue;
+      domSetAttribute(newNode, name, value);
+    }
+
+    for (var c = node.firstChild; c; c = c.nextSibling) {
+      var cn = arguments.callee(doc, c);
+      domAppendChild(newNode, cn);
+    }
+
+    return newNode;
+
+  } else {
+    return domCreateComment(doc, node.nodeName);
+  }
+}
+
+
+
+
+
+// A set data structure. It can also be used as a map (i.e. the keys
+// can have values other than 1), but we don't call it map because it
+// would be ambiguous in this context. Also, the map is iterable, so
+// we can use it to replace for-in loops over core javascript Objects.
+// For-in iteration breaks when Object.prototype is modified, which
+// some clients of the maps API do.
+//
+// NOTE(mesch): The set keys by the string value of its element, NOT
+// by the typed value. In particular, objects can't be used as keys.
+//
+// @constructor
+function Set() {
+  this.keys = [];
+}
+
+Set.prototype.size = function() {
+  return this.keys.length;
+};
+
+// Adds the entry to the set, ignoring if it is present.
+Set.prototype.add = function(key, opt_value) {
+  var value = opt_value || 1;
+  if (!this.contains(key)) {
+    this[':' + key] = value;
+    this.keys.push(key);
+  }
+};
+
+// Sets the entry in the set, adding if it is not yet present.
+Set.prototype.set = function(key, opt_value) {
+  var value = opt_value || 1;
+  if (!this.contains(key)) {
+    this[':' + key] = value;
+    this.keys.push(key);
+  } else {
+    this[':' + key] = value;
+  }
+};
+
+// Increments the key's value by 1. This works around the fact that
+// numbers are always passed by value, never by reference, so that we
+// can't increment the value returned by get(), or the iterator
+// argument. Sets the key's value to 1 if it doesn't exist yet.
+Set.prototype.inc = function(key) {
+  if (!this.contains(key)) {
+    this[':' + key] = 1;
+    this.keys.push(key);
+  } else {
+    this[':' + key]++;
+  }
+};
+
+Set.prototype.get = function(key) {
+  if (this.contains(key)) {
+    return this[':' + key];
+  }
+};
+
+// Removes the entry from the set.
+Set.prototype.remove = function(key) {
+  if (this.contains(key)) {
+    delete this[':' + key];
+    removeFromArray(this.keys, key, true);
+  }
+};
+
+// Tests if an entry is in the set.
+Set.prototype.contains = function(entry) {
+  return typeof this[':' + entry] != 'undefined';
+};
+
+// Gets a list of values in the set.
+Set.prototype.items = function() {
+  var list = [];
+  for (var i = 0; i < this.keys.length; ++i) {
+    var k = this.keys[i];
+    var v = this[':' + k];
+    list.push(v);
+  }
+  return list;
+};
+
+
+// Invokes function f for every key value pair in the set as a method
+// of the set.
+Set.prototype.map = function(f) {
+  for (var i = 0; i < this.keys.length; ++i) {
+    var k = this.keys[i];
+    f.call(this, k, this[':' + k]);
+  }
+};
+
+Set.prototype.clear = function() {
+  for (var i = 0; i < this.keys.length; ++i) {
+    delete this[':' + this.keys[i]];
+  }
+  this.keys.length = 0;
+};
+
+
+// Copyright 2006 Google Inc.
+// All Rights Reserved
+//
+// Defines regular expression patterns to extract XML tokens from string.
+// See <http://www.w3.org/TR/REC-xml/#sec-common-syn>,
+// <http://www.w3.org/TR/xml11/#sec-common-syn> and
+// <http://www.w3.org/TR/REC-xml-names/#NT-NCName> for the specifications.
+//
+// Author: Junji Takagi <jtakagi@google.com>
+
+// Detect whether RegExp supports Unicode characters or not.
+
+var REGEXP_UNICODE = (function() {
+  var tests = [' ', '\u0120', -1,  // Konquerer 3.4.0 fails here.
+               '!', '\u0120', -1,
+               '\u0120', '\u0120', 0,
+               '\u0121', '\u0120', -1,
+               '\u0121', '\u0120|\u0121', 0,
+               '\u0122', '\u0120|\u0121', -1,
+               '\u0120', '[\u0120]', 0,  // Safari 2.0.3 fails here.
+               '\u0121', '[\u0120]', -1,
+               '\u0121', '[\u0120\u0121]', 0,  // Safari 2.0.3 fails here.
+               '\u0122', '[\u0120\u0121]', -1,
+               '\u0121', '[\u0120-\u0121]', 0,  // Safari 2.0.3 fails here.
+               '\u0122', '[\u0120-\u0121]', -1];
+  for (var i = 0; i < tests.length; i += 3) {
+    if (tests[i].search(new RegExp(tests[i + 1])) != tests[i + 2]) {
+      return false;
+    }
+  }
+  return true;
+}());
+
+// Common tokens in XML 1.0 and XML 1.1.
+
+var XML_S = '[ \t\r\n]+';
+var XML_EQ = '(' + XML_S + ')?=(' + XML_S + ')?';
+var XML_CHAR_REF = '&#[0-9]+;|&#x[0-9a-fA-F]+;';
+
+// XML 1.0 tokens.
+
+var XML10_VERSION_INFO = XML_S + 'version' + XML_EQ + '("1\\.0"|' + "'1\\.0')";
+var XML10_BASE_CHAR = (REGEXP_UNICODE) ?
+  '\u0041-\u005a\u0061-\u007a\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff' +
+  '\u0100-\u0131\u0134-\u013e\u0141-\u0148\u014a-\u017e\u0180-\u01c3' +
+  '\u01cd-\u01f0\u01f4-\u01f5\u01fa-\u0217\u0250-\u02a8\u02bb-\u02c1\u0386' +
+  '\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03ce\u03d0-\u03d6\u03da\u03dc' +
+  '\u03de\u03e0\u03e2-\u03f3\u0401-\u040c\u040e-\u044f\u0451-\u045c' +
+  '\u045e-\u0481\u0490-\u04c4\u04c7-\u04c8\u04cb-\u04cc\u04d0-\u04eb' +
+  '\u04ee-\u04f5\u04f8-\u04f9\u0531-\u0556\u0559\u0561-\u0586\u05d0-\u05ea' +
+  '\u05f0-\u05f2\u0621-\u063a\u0641-\u064a\u0671-\u06b7\u06ba-\u06be' +
+  '\u06c0-\u06ce\u06d0-\u06d3\u06d5\u06e5-\u06e6\u0905-\u0939\u093d' +
+  '\u0958-\u0961\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2' +
+  '\u09b6-\u09b9\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u0a05-\u0a0a' +
+  '\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36' +
+  '\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8b\u0a8d' +
+  '\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9' +
+  '\u0abd\u0ae0\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30' +
+  '\u0b32-\u0b33\u0b36-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b85-\u0b8a' +
+  '\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4' +
+  '\u0ba8-\u0baa\u0bae-\u0bb5\u0bb7-\u0bb9\u0c05-\u0c0c\u0c0e-\u0c10' +
+  '\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c60-\u0c61\u0c85-\u0c8c' +
+  '\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cde\u0ce0-\u0ce1' +
+  '\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d28\u0d2a-\u0d39\u0d60-\u0d61' +
+  '\u0e01-\u0e2e\u0e30\u0e32-\u0e33\u0e40-\u0e45\u0e81-\u0e82\u0e84' +
+  '\u0e87-\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5' +
+  '\u0ea7\u0eaa-\u0eab\u0ead-\u0eae\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4' +
+  '\u0f40-\u0f47\u0f49-\u0f69\u10a0-\u10c5\u10d0-\u10f6\u1100\u1102-\u1103' +
+  '\u1105-\u1107\u1109\u110b-\u110c\u110e-\u1112\u113c\u113e\u1140\u114c' +
+  '\u114e\u1150\u1154-\u1155\u1159\u115f-\u1161\u1163\u1165\u1167\u1169' +
+  '\u116d-\u116e\u1172-\u1173\u1175\u119e\u11a8\u11ab\u11ae-\u11af' +
+  '\u11b7-\u11b8\u11ba\u11bc-\u11c2\u11eb\u11f0\u11f9\u1e00-\u1e9b' +
+  '\u1ea0-\u1ef9\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d' +
+  '\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc' +
+  '\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec' +
+  '\u1ff2-\u1ff4\u1ff6-\u1ffc\u2126\u212a-\u212b\u212e\u2180-\u2182' +
+  '\u3041-\u3094\u30a1-\u30fa\u3105-\u312c\uac00-\ud7a3' :
+  'A-Za-z';
+var XML10_IDEOGRAPHIC = (REGEXP_UNICODE) ?
+  '\u4e00-\u9fa5\u3007\u3021-\u3029' :
+  '';
+var XML10_COMBINING_CHAR = (REGEXP_UNICODE) ?
+  '\u0300-\u0345\u0360-\u0361\u0483-\u0486\u0591-\u05a1\u05a3-\u05b9' +
+  '\u05bb-\u05bd\u05bf\u05c1-\u05c2\u05c4\u064b-\u0652\u0670\u06d6-\u06dc' +
+  '\u06dd-\u06df\u06e0-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0901-\u0903\u093c' +
+  '\u093e-\u094c\u094d\u0951-\u0954\u0962-\u0963\u0981-\u0983\u09bc\u09be' +
+  '\u09bf\u09c0-\u09c4\u09c7-\u09c8\u09cb-\u09cd\u09d7\u09e2-\u09e3\u0a02' +
+  '\u0a3c\u0a3e\u0a3f\u0a40-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a70-\u0a71' +
+  '\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0b01-\u0b03' +
+  '\u0b3c\u0b3e-\u0b43\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b82-\u0b83' +
+  '\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44' +
+  '\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c82-\u0c83\u0cbe-\u0cc4' +
+  '\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0d02-\u0d03\u0d3e-\u0d43' +
+  '\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1' +
+  '\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39' +
+  '\u0f3e\u0f3f\u0f71-\u0f84\u0f86-\u0f8b\u0f90-\u0f95\u0f97\u0f99-\u0fad' +
+  '\u0fb1-\u0fb7\u0fb9\u20d0-\u20dc\u20e1\u302a-\u302f\u3099\u309a' :
+  '';
+var XML10_DIGIT = (REGEXP_UNICODE) ?
+  '\u0030-\u0039\u0660-\u0669\u06f0-\u06f9\u0966-\u096f\u09e6-\u09ef' +
+  '\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be7-\u0bef\u0c66-\u0c6f' +
+  '\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29' :
+  '0-9';
+var XML10_EXTENDER = (REGEXP_UNICODE) ?
+  '\u00b7\u02d0\u02d1\u0387\u0640\u0e46\u0ec6\u3005\u3031-\u3035' +
+  '\u309d-\u309e\u30fc-\u30fe' :
+  '';
+var XML10_LETTER = XML10_BASE_CHAR + XML10_IDEOGRAPHIC;
+var XML10_NAME_CHAR = XML10_LETTER + XML10_DIGIT + '\\._:' +
+                      XML10_COMBINING_CHAR + XML10_EXTENDER + '-';
+var XML10_NAME = '[' + XML10_LETTER + '_:][' + XML10_NAME_CHAR + ']*';
+
+var XML10_ENTITY_REF = '&' + XML10_NAME + ';';
+var XML10_REFERENCE = XML10_ENTITY_REF + '|' + XML_CHAR_REF;
+var XML10_ATT_VALUE = '"(([^<&"]|' + XML10_REFERENCE + ')*)"|' +
+                      "'(([^<&']|" + XML10_REFERENCE + ")*)'";
+var XML10_ATTRIBUTE =
+  '(' + XML10_NAME + ')' + XML_EQ + '(' + XML10_ATT_VALUE + ')';
+
+// XML 1.1 tokens.
+// TODO(jtakagi): NameStartChar also includes \u10000-\ueffff.
+// ECMAScript Language Specifiction defines UnicodeEscapeSequence as
+// "\u HexDigit HexDigit HexDigit HexDigit" and we may need to use
+// surrogate pairs, but any browser doesn't support surrogate paris in
+// character classes of regular expression, so avoid including them for now.
+
+var XML11_VERSION_INFO = XML_S + 'version' + XML_EQ + '("1\\.1"|' + "'1\\.1')";
+var XML11_NAME_START_CHAR = (REGEXP_UNICODE) ?
+  ':A-Z_a-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02ff\u0370-\u037d' +
+  '\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff' +
+  '\uf900-\ufdcf\ufdf0-\ufffd' :
+  ':A-Z_a-z';
+var XML11_NAME_CHAR = XML11_NAME_START_CHAR +
+  ((REGEXP_UNICODE) ? '\\.0-9\u00b7\u0300-\u036f\u203f-\u2040-' : '\\.0-9-');
+var XML11_NAME = '[' + XML11_NAME_START_CHAR + '][' + XML11_NAME_CHAR + ']*';
+
+var XML11_ENTITY_REF = '&' + XML11_NAME + ';';
+var XML11_REFERENCE = XML11_ENTITY_REF + '|' + XML_CHAR_REF;
+var XML11_ATT_VALUE = '"(([^<&"]|' + XML11_REFERENCE + ')*)"|' +
+                      "'(([^<&']|" + XML11_REFERENCE + ")*)'";
+var XML11_ATTRIBUTE =
+  '(' + XML11_NAME + ')' + XML_EQ + '(' + XML11_ATT_VALUE + ')';
+
+// XML Namespace tokens.
+// Used in XML parser and XPath parser.
+
+var XML_NC_NAME_CHAR = XML10_LETTER + XML10_DIGIT + '\\._' +
+                       XML10_COMBINING_CHAR + XML10_EXTENDER + '-';
+var XML_NC_NAME = '[' + XML10_LETTER + '_][' + XML_NC_NAME_CHAR + ']*';
+// Copyright 2005 Google Inc.
+// All Rights Reserved
+//
+// Author: Steffen Meschkat <mesch@google.com>
+//
+// An XML parse and a minimal DOM implementation that just supportes
+// the subset of the W3C DOM that is used in the XSLT implementation.
+
+// NOTE: The split() method in IE omits empty result strings. This is
+// utterly annoying. So we don't use it here.
+
+// Resolve entities in XML text fragments. According to the DOM
+// specification, the DOM is supposed to resolve entity references at
+// the API level. I.e. no entity references are passed through the
+// API. See "Entities and the DOM core", p.12, DOM 2 Core
+// Spec. However, different browsers actually pass very different
+// values at the API. See <http://mesch.nyc/test-xml-quote>.
+function xmlResolveEntities(s) {
+
+  var parts = stringSplit(s, '&');
+
+  var ret = parts[0];
+  for (var i = 1; i < parts.length; ++i) {
+    var rp = parts[i].indexOf(';');
+    if (rp == -1) {
+      // no entity reference: just a & but no ;
+      ret += parts[i];
+      continue;
+    }
+
+    var entityName = parts[i].substring(0, rp);
+    var remainderText = parts[i].substring(rp + 1);
+
+    var ch;
+    switch (entityName) {
+      case 'lt':
+        ch = '<';
+        break;
+      case 'gt':
+        ch = '>';
+        break;
+      case 'amp':
+        ch = '&';
+        break;
+      case 'quot':
+        ch = '"';
+        break;
+      case 'apos':
+        ch = '\'';
+        break;
+      case 'nbsp':
+        ch = String.fromCharCode(160);
+        break;
+      default:
+        // Cool trick: let the DOM do the entity decoding. We assign
+        // the entity text through non-W3C DOM properties and read it
+        // through the W3C DOM. W3C DOM access is specified to resolve
+        // entities.
+        var span = domCreateElement(window.document, 'span');
+        span.innerHTML = '&' + entityName + '; ';
+        ch = span.childNodes[0].nodeValue.charAt(0);
+    }
+    ret += ch + remainderText;
+  }
+
+  return ret;
+}
+
+var XML10_TAGNAME_REGEXP = new RegExp('^(' + XML10_NAME + ')');
+var XML10_ATTRIBUTE_REGEXP = new RegExp(XML10_ATTRIBUTE, 'g');
+
+var XML11_TAGNAME_REGEXP = new RegExp('^(' + XML11_NAME + ')');
+var XML11_ATTRIBUTE_REGEXP = new RegExp(XML11_ATTRIBUTE, 'g');
+
+
+
+
+// Traverses the element nodes in the DOM section underneath the given
+// node and invokes the given callbacks as methods on every element
+// node encountered. Function opt_pre is invoked before a node's
+// children are traversed; opt_post is invoked after they are
+// traversed. Traversal will not be continued if a callback function
+// returns boolean false. NOTE(mesch): copied from
+// <//google3/maps/webmaps/javascript/dom.js>.
+function domTraverseElements(node, opt_pre, opt_post) {
+  var ret;
+  if (opt_pre) {
+    ret = opt_pre.call(null, node);
+    if (typeof ret == 'boolean' && !ret) {
+      return false;
+    }
+  }
+
+  for (var c = node.firstChild; c; c = c.nextSibling) {
+    if (c.nodeType == DOM_ELEMENT_NODE) {
+      ret = arguments.callee.call(this, c, opt_pre, opt_post);
+      if (typeof ret == 'boolean' && !ret) {
+        return false;
+      }
+    }
+  }
+
+  if (opt_post) {
+    ret = opt_post.call(null, node);
+    if (typeof ret == 'boolean' && !ret) {
+      return false;
+    }
+  }
+}
+
+// Our W3C DOM Node implementation. Note we call it XNode because we
+// can't define the identifier Node. We do this mostly for Opera,
+// where we can't reuse the HTML DOM for parsing our own XML, and for
+// Safari, where it is too expensive to have the template processor
+// operate on native DOM nodes.
+function XNode(type, name, opt_value, opt_owner) {
+  this.attributes = [];
+  this.childNodes = [];
+
+  XNode.init.call(this, type, name, opt_value, opt_owner);
+}
+
+function XDocument() {
+  // NOTE(mesch): Acocording to the DOM Spec, ownerDocument of a
+  // document node is null.
+  XNode.call(this, DOM_DOCUMENT_NODE, '#document', null, null);
+  this.documentElement = null;
+}
+
+// Don't call as method, use apply() or call().
+XNode.init = function(type, name, value, owner) {
+  this.nodeType = type - 0;
+  this.nodeName = '' + name;
+  this.nodeValue = '' + value;
+  this.ownerDocument = owner;
+
+  this.firstChild = null;
+  this.lastChild = null;
+  this.nextSibling = null;
+  this.previousSibling = null;
+  this.parentNode = null;
+};
+
+XNode.unused_ = [];
+
+XNode.recycle = function(node) {
+  if (!node) {
+    return;
+  }
+
+  if (node.constructor == XDocument) {
+    XNode.recycle(node.documentElement);
+    return;
+  }
+
+  if (node.constructor != this) {
+    return;
+  }
+
+  XNode.unused_.push(node);
+  for (var a = 0; a < node.attributes.length; ++a) {
+    XNode.recycle(node.attributes[a]);
+  }
+  for (var c = 0; c < node.childNodes.length; ++c) {
+    XNode.recycle(node.childNodes[c]);
+  }
+  node.attributes.length = 0;
+  node.childNodes.length = 0;
+  XNode.init.call(node, 0, '', '', null);
+};
+
+XNode.create = function(type, name, value, owner) {
+  if (XNode.unused_.length > 0) {
+    var node = XNode.unused_.pop();
+    XNode.init.call(node, type, name, value, owner);
+    return node;
+  } else {
+    return new XNode(type, name, value, owner);
+  }
+};
+
+XNode.prototype.appendChild = function(node) {
+  // firstChild
+  if (this.childNodes.length === 0) {
+    this.firstChild = node;
+  }
+
+  // previousSibling
+  node.previousSibling = this.lastChild;
+
+  // nextSibling
+  node.nextSibling = null;
+  if (this.lastChild) {
+    this.lastChild.nextSibling = node;
+  }
+
+  // parentNode
+  node.parentNode = this;
+
+  // lastChild
+  this.lastChild = node;
+
+  // childNodes
+  this.childNodes.push(node);
+};
+
+
+XNode.prototype.replaceChild = function(newNode, oldNode) {
+  if (oldNode == newNode) {
+    return;
+  }
+
+  for (var i = 0; i < this.childNodes.length; ++i) {
+    if (this.childNodes[i] == oldNode) {
+      this.childNodes[i] = newNode;
+
+      var p = oldNode.parentNode;
+      oldNode.parentNode = null;
+      newNode.parentNode = p;
+
+      p = oldNode.previousSibling;
+      oldNode.previousSibling = null;
+      newNode.previousSibling = p;
+      if (newNode.previousSibling) {
+        newNode.previousSibling.nextSibling = newNode;
+      }
+
+      p = oldNode.nextSibling;
+      oldNode.nextSibling = null;
+      newNode.nextSibling = p;
+      if (newNode.nextSibling) {
+        newNode.nextSibling.previousSibling = newNode;
+      }
+
+      if (this.firstChild == oldNode) {
+        this.firstChild = newNode;
+      }
+
+      if (this.lastChild == oldNode) {
+        this.lastChild = newNode;
+      }
+
+      break;
+    }
+  }
+};
+
+
+XNode.prototype.insertBefore = function(newNode, oldNode) {
+  if (oldNode == newNode) {
+    return;
+  }
+
+  if (oldNode.parentNode != this) {
+    return;
+  }
+
+  if (newNode.parentNode) {
+    newNode.parentNode.removeChild(newNode);
+  }
+
+  var newChildren = [];
+  for (var i = 0; i < this.childNodes.length; ++i) {
+    var c = this.childNodes[i];
+    if (c == oldNode) {
+      newChildren.push(newNode);
+
+      newNode.parentNode = this;
+
+      newNode.previousSibling = oldNode.previousSibling;
+      oldNode.previousSibling = newNode;
+      if (newNode.previousSibling) {
+        newNode.previousSibling.nextSibling = newNode;
+      }
+
+      newNode.nextSibling = oldNode;
+
+      if (this.firstChild == oldNode) {
+        this.firstChild = newNode;
+      }
+    }
+    newChildren.push(c);
+  }
+  this.childNodes = newChildren;
+};
+
+
+XNode.prototype.removeChild = function(node) {
+  var newChildren = [];
+  for (var i = 0; i < this.childNodes.length; ++i) {
+    var c = this.childNodes[i];
+    if (c != node) {
+      newChildren.push(c);
+    } else {
+      if (c.previousSibling) {
+        c.previousSibling.nextSibling = c.nextSibling;
+      }
+      if (c.nextSibling) {
+        c.nextSibling.previousSibling = c.previousSibling;
+      }
+      if (this.firstChild == c) {
+        this.firstChild = c.nextSibling;
+      }
+      if (this.lastChild == c) {
+        this.lastChild = c.previousSibling;
+      }
+    }
+  }
+  this.childNodes = newChildren;
+};
+
+
+XNode.prototype.hasAttributes = function() {
+  return this.attributes.length > 0;
+};
+
+
+XNode.prototype.setAttribute = function(name, value) {
+  for (var i = 0; i < this.attributes.length; ++i) {
+    if (this.attributes[i].nodeName == name) {
+      this.attributes[i].nodeValue = '' + value;
+      return;
+    }
+  }
+  this.attributes.push(XNode.create(DOM_ATTRIBUTE_NODE, name, value, this));
+};
+
+
+XNode.prototype.getAttribute = function(name) {
+  for (var i = 0; i < this.attributes.length; ++i) {
+    if (this.attributes[i].nodeName == name) {
+      return this.attributes[i].nodeValue;
+    }
+  }
+  return null;
+};
+
+
+XNode.prototype.removeAttribute = function(name) {
+  var a = [];
+  for (var i = 0; i < this.attributes.length; ++i) {
+    if (this.attributes[i].nodeName != name) {
+      a.push(this.attributes[i]);
+    }
+  }
+  this.attributes = a;
+};
+
+
+XNode.prototype.getElementsByTagName = function(name) {
+  var ret = [];
+  var self = this;
+  if ("*" == name) {
+    domTraverseElements(this, function(node) {
+       if (self == node){
+           return;
+       }
+      ret.push(node);
+    }, null);
+  } else {
+    domTraverseElements(this, function(node) {
+      if (self == node){ 
+          return;
+      }
+      if (node.nodeName == name) {
+        ret.push(node);
+      }
+    }, null);
+  }
+  return ret;
+};
+
+
+XNode.prototype.getElementById = function(id) {
+  var ret = null;
+  domTraverseElements(this, function(node) {
+    if (node.getAttribute('id') == id) {
+      ret = node;
+      return false;
+    }
+  }, null);
+  return ret;
+};
+
+
+
+XDocument.prototype = new XNode(DOM_DOCUMENT_NODE, '#document');
+
+XDocument.prototype.clear = function() {
+  XNode.recycle(this.documentElement);
+  this.documentElement = null;
+};
+
+XDocument.prototype.appendChild = function(node) {
+  XNode.prototype.appendChild.call(this, node);
+  this.documentElement = this.childNodes[0];
+};
+
+XDocument.prototype.createElement = function(name) {
+  return XNode.create(DOM_ELEMENT_NODE, name, null, this);
+};
+
+XDocument.prototype.createDocumentFragment = function() {
+  return XNode.create(DOM_DOCUMENT_FRAGMENT_NODE, '#document-fragment',
+                    null, this);
+};
+
+XDocument.prototype.createTextNode = function(value) {
+  return XNode.create(DOM_TEXT_NODE, '#text', value, this);
+};
+
+XDocument.prototype.createAttribute = function(name) {
+  return XNode.create(DOM_ATTRIBUTE_NODE, name, null, this);
+};
+
+XDocument.prototype.createComment = function(data) {
+  return XNode.create(DOM_COMMENT_NODE, '#comment', data, this);
+};
+
+XDocument.prototype.createCDATASection = function(data) {
+  return XNode.create(DOM_CDATA_SECTION_NODE, '#cdata-section', data, this);
+};
+
+// Parses the given XML string with our custom, JavaScript XML parser. Written
+// by Steffen Meschkat (mesch@google.com).
+function xmlParse(xml) {
+  var regex_empty = /\/$/;
+
+  var regex_tagname;
+  var regex_attribute;
+  if (xml.match(/^<\?xml/)) {
+    // When an XML document begins with an XML declaration
+    // VersionInfo must appear.
+    if (xml.search(new RegExp(XML10_VERSION_INFO)) == 5) {
+      regex_tagname = XML10_TAGNAME_REGEXP;
+      regex_attribute = XML10_ATTRIBUTE_REGEXP;
+    } else if (xml.search(new RegExp(XML11_VERSION_INFO)) == 5) {
+      regex_tagname = XML11_TAGNAME_REGEXP;
+      regex_attribute = XML11_ATTRIBUTE_REGEXP;
+    } else {
+      // VersionInfo is missing, or unknown version number.
+      // TODO : Fallback to XML 1.0 or XML 1.1, or just return null?
+      // alert('VersionInfo is missing, or unknown version number.');
+    }
+  } else {
+    // When an XML declaration is missing it's an XML 1.0 document.
+    regex_tagname = XML10_TAGNAME_REGEXP;
+    regex_attribute = XML10_ATTRIBUTE_REGEXP;
+  }
+
+  var xmldoc = new XDocument();
+  var root = xmldoc;
+
+  // For the record: in Safari, we would create native DOM nodes, but
+  // in Opera that is not possible, because the DOM only allows HTML
+  // element nodes to be created, so we have to do our own DOM nodes.
+
+  // xmldoc = document.implementation.createDocument('','',null);
+  // root = xmldoc; // .createDocumentFragment();
+  // NOTE(mesch): using the DocumentFragment instead of the Document
+  // crashes my Safari 1.2.4 (v125.12).
+  var stack = [];
+
+  var parent = root;
+  stack.push(parent);
+
+  // The token that delimits a section that contains markup as
+  // content: CDATA or comments.
+  var slurp = '';
+
+  var x = stringSplit(xml, '<');
+  for (var i = 1; i < x.length; ++i) {
+    var xx = stringSplit(x[i], '>');
+    var tag = xx[0];
+    var text = xmlResolveEntities(xx[1] || '');
+    var end,
+        start,
+        data,
+        node;
+    
+    if (slurp) {
+      // In a "slurp" section (CDATA or comment): only check for the
+      // end of the section, otherwise append the whole text.
+      end = x[i].indexOf(slurp);
+      if (end != -1) {
+        data = x[i].substring(0, end);
+        parent.nodeValue += '<' + data;
+        stack.pop();
+        parent = stack[stack.length-1];
+        text = x[i].substring(end + slurp.length);
+        slurp = '';
+      } else {
+        parent.nodeValue += '<' + x[i];
+        text = null;
+      }
+
+    } else if (tag.indexOf('![CDATA[') === 0) {
+      start = '![CDATA['.length;
+      end = x[i].indexOf(']]>');
+      if (end != -1) {
+        data = x[i].substring(start, end);
+        node = domCreateCDATASection(xmldoc, data);
+        domAppendChild(parent, node);
+      } else {
+        data = x[i].substring(start);
+        text = null;
+        node = domCreateCDATASection(xmldoc, data);
+        domAppendChild(parent, node);
+        parent = node;
+        stack.push(node);
+        slurp = ']]>';
+      }
+
+    } else if (tag.indexOf('!--') === 0) {
+      start = '!--'.length;
+      end = x[i].indexOf('-->');
+      if (end != -1) {
+        data = x[i].substring(start, end);
+        node = domCreateComment(xmldoc, data);
+        domAppendChild(parent, node);
+      } else {
+        data = x[i].substring(start);
+        text = null;
+        node = domCreateComment(xmldoc, data);
+        domAppendChild(parent, node);
+        parent = node;
+        stack.push(node);
+        slurp = '-->';
+      }
+
+    } else if (tag.charAt(0) == '/') {
+      stack.pop();
+      parent = stack[stack.length-1];
+
+    } else if (tag.charAt(0) == '?') {
+      // Ignore XML declaration and processing instructions
+    } else if (tag.charAt(0) == '!') {
+      // Ignore notation and comments
+    } else {
+      var empty = tag.match(regex_empty);
+      var tagname = regex_tagname.exec(tag)[1];
+      node = domCreateElement(xmldoc, tagname);
+
+      var att = regex_attribute.exec(tag);
+      while (att) {
+        var val = xmlResolveEntities(att[5] || att[7] || '');
+        domSetAttribute(node, att[1], val);
+        att = regex_attribute.exec(tag);
+      }
+
+      domAppendChild(parent, node);
+      if (!empty) {
+        parent = node;
+        stack.push(node);
+      }
+    }
+
+    if (text && parent != root) {
+      domAppendChild(parent, domCreateTextNode(xmldoc, text));
+    }
+  }
+
+  return root;
+}
+
+// XPath expression values. They are what XPath expressions evaluate
+// to. Strangely, the different value types are not specified in the
+// XPath syntax, but only in the semantics, so they don't show up as
+// nonterminals in the grammar. Yet, some expressions are required to
+// evaluate to particular types, and not every type can be coerced
+// into every other type. Although the types of XPath values are
+// similar to the types present in JavaScript, the type coercion rules
+// are a bit peculiar, so we explicitly model XPath types instead of
+// mapping them onto JavaScript types. (See XPath spec.)
+//
+// The four types are:
+//
+//   StringValue
+//
+//   NumberValue
+//
+//   BooleanValue
+//
+//   NodeSetValue
+//
+// The common interface of the value classes consists of methods that
+// implement the XPath type coercion rules:
+//
+//   stringValue() -- returns the value as a JavaScript String,
+//
+//   numberValue() -- returns the value as a JavaScript Number,
+//
+//   booleanValue() -- returns the value as a JavaScript Boolean,
+//
+//   nodeSetValue() -- returns the value as a JavaScript Array of DOM
+//   Node objects.
+//
+
+function StringValue(value) {
+  this.value = value;
+  this.type = 'string';
+}
+
+StringValue.prototype.stringValue = function() {
+  return this.value;
+};
+
+StringValue.prototype.booleanValue = function() {
+  return this.value.length > 0;
+};
+
+StringValue.prototype.numberValue = function() {
+  return this.value - 0;
+};
+
+StringValue.prototype.nodeSetValue = function() {
+  throw this;
+};
+
+function BooleanValue(value) {
+  this.value = value;
+  this.type = 'boolean';
+}
+
+BooleanValue.prototype.stringValue = function() {
+  return '' + this.value;
+};
+
+BooleanValue.prototype.booleanValue = function() {
+  return this.value;
+};
+
+BooleanValue.prototype.numberValue = function() {
+  return this.value ? 1 : 0;
+};
+
+BooleanValue.prototype.nodeSetValue = function() {
+  throw this;
+};
+
+function NumberValue(value) {
+  this.value = value;
+  this.type = 'number';
+}
+
+NumberValue.prototype.stringValue = function() {
+  return '' + this.value;
+};
+
+NumberValue.prototype.booleanValue = function() {
+  return !!this.value;
+};
+
+NumberValue.prototype.numberValue = function() {
+  return this.value - 0;
+};
+
+NumberValue.prototype.nodeSetValue = function() {
+  throw this;
+};
+
+function NodeSetValue(value) {
+  this.value = value;
+  this.type = 'node-set';
+}
+
+NodeSetValue.prototype.stringValue = function() {
+  if (this.value.length === 0) {
+    return '';
+  } else {
+    return xmlValue(this.value[0]);
+  }
+};
+
+NodeSetValue.prototype.booleanValue = function() {
+  return this.value.length > 0;
+};
+
+NodeSetValue.prototype.numberValue = function() {
+  return this.stringValue() - 0;
+};
+
+NodeSetValue.prototype.nodeSetValue = function() {
+  return this.value;
+};
+
+// The axes of XPath expressions.
+
+var xpathAxis = {
+  ANCESTOR_OR_SELF: 'ancestor-or-self',
+  ANCESTOR: 'ancestor',
+  ATTRIBUTE: 'attribute',
+  CHILD: 'child',
+  DESCENDANT_OR_SELF: 'descendant-or-self',
+  DESCENDANT: 'descendant',
+  FOLLOWING_SIBLING: 'following-sibling',
+  FOLLOWING: 'following',
+  NAMESPACE: 'namespace',
+  PARENT: 'parent',
+  PRECEDING_SIBLING: 'preceding-sibling',
+  PRECEDING: 'preceding',
+  SELF: 'self'
+};
+
+var xpathAxesRe = [
+    xpathAxis.ANCESTOR_OR_SELF,
+    xpathAxis.ANCESTOR,
+    xpathAxis.ATTRIBUTE,
+    xpathAxis.CHILD,
+    xpathAxis.DESCENDANT_OR_SELF,
+    xpathAxis.DESCENDANT,
+    xpathAxis.FOLLOWING_SIBLING,
+    xpathAxis.FOLLOWING,
+    xpathAxis.NAMESPACE,
+    xpathAxis.PARENT,
+    xpathAxis.PRECEDING_SIBLING,
+    xpathAxis.PRECEDING,
+    xpathAxis.SELF
+].join('|');
+
+
+// The tokens of the language. The label property is just used for
+// generating debug output. The prec property is the precedence used
+// for shift/reduce resolution. Default precedence is 0 as a lookahead
+// token and 2 on the stack. TODO(mesch): this is certainly not
+// necessary and too complicated. Simplify this!
+
+// NOTE: tabular formatting is the big exception, but here it should
+// be OK.
+
+var TOK_PIPE =   { label: "|",   prec:   17, re: new RegExp("^\\|") };
+var TOK_DSLASH = { label: "//",  prec:   19, re: new RegExp("^//")  };
+var TOK_SLASH =  { label: "/",   prec:   30, re: new RegExp("^/")   };
+var TOK_AXIS =   { label: "::",  prec:   20, re: new RegExp("^::")  };
+var TOK_COLON =  { label: ":",   prec: 1000, re: new RegExp("^:")  };
+var TOK_AXISNAME = { label: "[axis]", re: new RegExp('^(' + xpathAxesRe + ')') };
+var TOK_PARENO = { label: "(",   prec:   34, re: new RegExp("^\\(") };
+var TOK_PARENC = { label: ")",               re: new RegExp("^\\)") };
+var TOK_DDOT =   { label: "..",  prec:   34, re: new RegExp("^\\.\\.") };
+var TOK_DOT =    { label: ".",   prec:   34, re: new RegExp("^\\.") };
+var TOK_AT =     { label: "@",   prec:   34, re: new RegExp("^@")   };
+
+var TOK_COMMA =  { label: ",",               re: new RegExp("^,") };
+
+var TOK_OR =     { label: "or",  prec:   10, re: new RegExp("^or\\b") };
+var TOK_AND =    { label: "and", prec:   11, re: new RegExp("^and\\b") };
+var TOK_EQ =     { label: "=",   prec:   12, re: new RegExp("^=")   };
+var TOK_NEQ =    { label: "!=",  prec:   12, re: new RegExp("^!=")  };
+var TOK_GE =     { label: ">=",  prec:   13, re: new RegExp("^>=")  };
+var TOK_GT =     { label: ">",   prec:   13, re: new RegExp("^>")   };
+var TOK_LE =     { label: "<=",  prec:   13, re: new RegExp("^<=")  };
+var TOK_LT =     { label: "<",   prec:   13, re: new RegExp("^<")   };
+var TOK_PLUS =   { label: "+",   prec:   14, re: new RegExp("^\\+"), left: true };
+var TOK_MINUS =  { label: "-",   prec:   14, re: new RegExp("^\\-"), left: true };
+var TOK_DIV =    { label: "div", prec:   15, re: new RegExp("^div\\b"), left: true };
+var TOK_MOD =    { label: "mod", prec:   15, re: new RegExp("^mod\\b"), left: true };
+
+var TOK_BRACKO = { label: "[",   prec:   32, re: new RegExp("^\\[") };
+var TOK_BRACKC = { label: "]",               re: new RegExp("^\\]") };
+var TOK_DOLLAR = { label: "$",               re: new RegExp("^\\$") };
+
+var TOK_NCNAME = { label: "[ncname]", re: new RegExp('^' + XML_NC_NAME) };
+
+var TOK_ASTERISK = { label: "*", prec: 15, re: new RegExp("^\\*"), left: true };
+var TOK_LITERALQ = { label: "[litq]", prec: 20, re: new RegExp("^'[^\\']*'") };
+var TOK_LITERALQQ = {
+  label: "[litqq]",
+  prec: 20,
+  re: new RegExp('^"[^\\"]*"')
+};
+
+var TOK_NUMBER  = {
+  label: "[number]",
+  prec: 35,
+  re: new RegExp('^\\d+(\\.\\d*)?') };
+
+var TOK_QNAME = {
+  label: "[qname]",
+  re: new RegExp('^(' + XML_NC_NAME + ':)?' + XML_NC_NAME)
+};
+
+var TOK_NODEO = {
+  label: "[nodetest-start]",
+  re: new RegExp('^(processing-instruction|comment|text|node)\\(')
+};
+
+// The table of the tokens of our grammar, used by the lexer: first
+// column the tag, second column a regexp to recognize it in the
+// input, third column the precedence of the token, fourth column a
+// factory function for the semantic value of the token.
+//
+// NOTE: order of this list is important, because the first match
+// counts. Cf. DDOT and DOT, and AXIS and COLON.
+
+var xpathTokenRules = [
+    TOK_DSLASH,
+    TOK_SLASH,
+    TOK_DDOT,
+    TOK_DOT,
+    TOK_AXIS,
+    TOK_COLON,
+    TOK_AXISNAME,
+    TOK_NODEO,
+    TOK_PARENO,
+    TOK_PARENC,
+    TOK_BRACKO,
+    TOK_BRACKC,
+    TOK_AT,
+    TOK_COMMA,
+    TOK_OR,
+    TOK_AND,
+    TOK_NEQ,
+    TOK_EQ,
+    TOK_GE,
+    TOK_GT,
+    TOK_LE,
+    TOK_LT,
+    TOK_PLUS,
+    TOK_MINUS,
+    TOK_ASTERISK,
+    TOK_PIPE,
+    TOK_MOD,
+    TOK_DIV,
+    TOK_LITERALQ,
+    TOK_LITERALQQ,
+    TOK_NUMBER,
+    TOK_QNAME,
+    TOK_NCNAME,
+    TOK_DOLLAR
+];
+
+// All the nonterminals of the grammar. The nonterminal objects are
+// identified by object identity; the labels are used in the debug
+// output only.
+var XPathLocationPath = { label: "LocationPath" };
+var XPathRelativeLocationPath = { label: "RelativeLocationPath" };
+var XPathAbsoluteLocationPath = { label: "AbsoluteLocationPath" };
+var XPathStep = { label: "Step" };
+var XPathNodeTest = { label: "NodeTest" };
+var XPathPredicate = { label: "Predicate" };
+var XPathLiteral = { label: "Literal" };
+var XPathExpr = { label: "Expr" };
+var XPathPrimaryExpr = { label: "PrimaryExpr" };
+var XPathVariableReference = { label: "Variablereference" };
+var XPathNumber = { label: "Number" };
+var XPathFunctionCall = { label: "FunctionCall" };
+var XPathArgumentRemainder = { label: "ArgumentRemainder" };
+var XPathPathExpr = { label: "PathExpr" };
+var XPathUnionExpr = { label: "UnionExpr" };
+var XPathFilterExpr = { label: "FilterExpr" };
+var XPathDigits = { label: "Digits" };
+
+var xpathNonTerminals = [
+    XPathLocationPath,
+    XPathRelativeLocationPath,
+    XPathAbsoluteLocationPath,
+    XPathStep,
+    XPathNodeTest,
+    XPathPredicate,
+    XPathLiteral,
+    XPathExpr,
+    XPathPrimaryExpr,
+    XPathVariableReference,
+    XPathNumber,
+    XPathFunctionCall,
+    XPathArgumentRemainder,
+    XPathPathExpr,
+    XPathUnionExpr,
+    XPathFilterExpr,
+    XPathDigits
+];
+
+// Quantifiers that are used in the productions of the grammar.
+var Q_01 = { label: "?" };
+var Q_MM = { label: "*" };
+var Q_1M = { label: "+" };
+
+// Tag for left associativity (right assoc is implied by undefined).
+var ASSOC_LEFT = true;
+
+
+   
+// XPath expressions. They are used as nodes in the parse tree and
+// possess an evaluate() method to compute an XPath value given an XPath
+// context. Expressions are returned from the parser. Teh set of
+// expression classes closely mirrors the set of non terminal symbols
+// in the grammar. Every non trivial nonterminal symbol has a
+// corresponding expression class.
+//
+// The common expression interface consists of the following methods:
+//
+// evaluate(context) -- evaluates the expression, returns a value.
+//
+// toString() -- returns the XPath text representation of the
+// expression (defined in xsltdebug.js).
+//
+// parseTree(indent) -- returns a parse tree representation of the
+// expression (defined in xsltdebug.js).
+
+function NodeTestAny() {
+  this.value = new BooleanValue(true);
+}
+
+NodeTestAny.prototype.evaluate = function(ctx) {
+  return this.value;
+};
+
+function NodeTestElementOrAttribute() {}
+
+NodeTestElementOrAttribute.prototype.evaluate = function(ctx) {
+  return new BooleanValue(
+      ctx.node.nodeType == DOM_ELEMENT_NODE ||
+      ctx.node.nodeType == DOM_ATTRIBUTE_NODE);
+};
+
+function NodeTestText() {}
+
+NodeTestText.prototype.evaluate = function(ctx) {
+  return new BooleanValue(ctx.node.nodeType == DOM_TEXT_NODE);
+};
+
+function NodeTestComment() {}
+
+NodeTestComment.prototype.evaluate = function(ctx) {
+  return new BooleanValue(ctx.node.nodeType == DOM_COMMENT_NODE);
+};
+
+function NodeTestPI(target) {
+  this.target = target;
+}
+
+NodeTestPI.prototype.evaluate = function(ctx) {
+  return new
+  BooleanValue(ctx.node.nodeType == DOM_PROCESSING_INSTRUCTION_NODE &&
+               (!this.target || ctx.node.nodeName == this.target));
+};
+
+function NodeTestNC(nsprefix) {
+  this.regex = new RegExp("^" + nsprefix + ":");
+  this.nsprefix = nsprefix;
+}
+
+NodeTestNC.prototype.evaluate = function(ctx) {
+  var n = ctx.node;
+  return new BooleanValue(this.regex.match(n.nodeName));
+};
+
+function NodeTestName(name) {
+  this.name = name;
+  this.re = new RegExp('^' + name + '$', "i");
+}
+
+NodeTestName.prototype.evaluate = function(ctx) {
+  var n = ctx.node;
+  if (ctx.caseInsensitive) {
+    if (n.nodeName.length != this.name.length){ 
+        return new BooleanValue(false);
+    }
+    return new BooleanValue(this.re.test(n.nodeName));
+  } else {
+    return new BooleanValue(n.nodeName == this.name);
+  }
+};
+
+function TokenExpr(m) {
+  this.value = m;
+}
+
+TokenExpr.prototype.evaluate = function() {
+  return new StringValue(this.value);
+};
+
+function LocationExpr() {
+  this.absolute = false;
+  this.steps = [];
+}
+
+LocationExpr.prototype.appendStep = function(s) {
+  var combinedStep = this._combineSteps(this.steps[this.steps.length-1], s);
+  if (combinedStep) {
+    this.steps[this.steps.length-1] = combinedStep;
+  } else {
+    this.steps.push(s);
+  }
+};
+
+LocationExpr.prototype.prependStep = function(s) {
+  var combinedStep = this._combineSteps(s, this.steps[0]);
+  if (combinedStep) {
+    this.steps[0] = combinedStep;
+  } else {
+    this.steps.unshift(s);
+  }
+};
+
+// DGF try to combine two steps into one step (perf enhancement)
+LocationExpr.prototype._combineSteps = function(prevStep, nextStep) {
+  if (!prevStep){ 
+      return null;
+  }
+  if (!nextStep) {
+      return null;
+  }
+  var hasPredicates = (prevStep.predicates && prevStep.predicates.length > 0);
+  if (prevStep.nodetest instanceof NodeTestAny && !hasPredicates) {
+    // maybe suitable to be combined
+    if (prevStep.axis == xpathAxis.DESCENDANT_OR_SELF) {
+      if (nextStep.axis == xpathAxis.CHILD) {
+        nextStep.axis = xpathAxis.DESCENDANT;
+        return nextStep;
+      } else if (nextStep.axis == xpathAxis.SELF) {
+        nextStep.axis = xpathAxis.DESCENDANT_OR_SELF;
+        return nextStep;
+      }
+    } else if (prevStep.axis == xpathAxis.DESCENDANT) {
+      if (nextStep.axis == xpathAxis.SELF) {
+        nextStep.axis = xpathAxis.DESCENDANT;
+        return nextStep;
+      }
+    }
+  }
+  return null;
+};
+
+
+function xPathStep(nodes, steps, step, input, ctx) {
+  var s = steps[step];
+  var ctx2 = ctx.clone(input);
+  var nodelist = s.evaluate(ctx2).nodeSetValue();
+
+  for (var i = 0; i < nodelist.length; ++i) {
+    if (step == steps.length - 1) {
+      nodes.push(nodelist[i]);
+    } else {
+      xPathStep(nodes, steps, step + 1, nodelist[i], ctx);
+    }
+  }
+}
+
+LocationExpr.prototype.evaluate = function(ctx) {
+  var start;
+  if (this.absolute) {
+    start = ctx.root;
+
+  } else {
+    start = ctx.node;
+  }
+
+  var nodes = [];
+  xPathStep(nodes, this.steps, 0, start, ctx);
+  return new NodeSetValue(nodes);
+};
+
+
+function StepExpr(axis, nodetest, opt_predicate) {
+  this.axis = axis;
+  this.nodetest = nodetest;
+  this.predicate = opt_predicate || [];
+}
+
+StepExpr.prototype.appendPredicate = function(p) {
+  this.predicate.push(p);
+};
+
+// Local utility functions that are used by the lexer or parser.
+
+function xpathCollectDescendants(nodelist, node, opt_tagName) {
+  if (opt_tagName && node.getElementsByTagName) {
+    copyArray(nodelist, node.getElementsByTagName(opt_tagName));
+    return;
+  }
+  for (var n = node.firstChild; n; n = n.nextSibling) {
+    nodelist.push(n);
+    xpathCollectDescendants(nodelist, n);
+  }
+}
+
+// DGF extract a tag name suitable for getElementsByTagName
+function xpathExtractTagNameFromNodeTest(nodetest) {
+  if (nodetest instanceof NodeTestName) {
+    return nodetest.name;
+  } else if (nodetest instanceof NodeTestAny || nodetest instanceof NodeTestElementOrAttribute) {
+    return "*";
+  }
+}
+
+function xpathCollectDescendantsReverse(nodelist, node) {
+  for (var n = node.lastChild; n; n = n.previousSibling) {
+    nodelist.push(n);
+    xpathCollectDescendantsReverse(nodelist, n);
+  }
+}
+
+StepExpr.prototype.evaluate = function(ctx) {
+  var input = ctx.node;
+  var nodelist = [];
+  var skipNodeTest = false;
+  var n, nn, i, nodelist0, tagName;
+
+  if (this.nodetest instanceof NodeTestAny) {
+    skipNodeTest = true;
+  }
+
+  // NOTE(mesch): When this was a switch() statement, it didn't work
+  // in Safari/2.0. Not sure why though; it resulted in the JavaScript
+  // console output "undefined" (without any line number or so).
+
+  if (this.axis ==  xpathAxis.ANCESTOR_OR_SELF) {
+    nodelist.push(input);
+    for (n = input.parentNode; n; n = n.parentNode) {
+      nodelist.push(n);
+    }
+
+  } else if (this.axis == xpathAxis.ANCESTOR) {
+    for (n = input.parentNode; n; n = n.parentNode) {
+      nodelist.push(n);
+    }
+
+  } else if (this.axis == xpathAxis.ATTRIBUTE) {
+    if (ctx.ignoreAttributesWithoutValue) {
+      copyArrayIgnoringAttributesWithoutValue(nodelist, input.attributes);
+    }
+    else {
+      copyArray(nodelist, input.attributes);
+    }
+
+  } else if (this.axis == xpathAxis.CHILD) {
+    copyArray(nodelist, input.childNodes);
+
+  } else if (this.axis == xpathAxis.DESCENDANT_OR_SELF) {
+    if (this.nodetest.evaluate(ctx).booleanValue()) {
+      nodelist.push(input);
+    }
+    tagName = xpathExtractTagNameFromNodeTest(this.nodetest);
+    xpathCollectDescendants(nodelist, input, tagName);
+    if (tagName){ 
+        skipNodeTest = true;
+    }
+
+  } else if (this.axis == xpathAxis.DESCENDANT) {
+    tagName = xpathExtractTagNameFromNodeTest(this.nodetest);
+    xpathCollectDescendants(nodelist, input, tagName);
+    if (tagName) {
+        skipNodeTest = true;
+    }
+
+  } else if (this.axis == xpathAxis.FOLLOWING) {
+    for (n = input; n; n = n.parentNode) {
+      for (nn = n.nextSibling; nn; nn = nn.nextSibling) {
+        nodelist.push(nn);
+        xpathCollectDescendants(nodelist, nn);
+      }
+    }
+
+  } else if (this.axis == xpathAxis.FOLLOWING_SIBLING) {
+    for (n = input.nextSibling; n; n = n.nextSibling) {
+      nodelist.push(n);
+    }
+
+  } else if (this.axis == xpathAxis.NAMESPACE) {
+    console.warn('not implemented: axis namespace');
+
+  } else if (this.axis == xpathAxis.PARENT) {
+    if (input.parentNode) {
+      nodelist.push(input.parentNode);
+    }
+
+  } else if (this.axis == xpathAxis.PRECEDING) {
+    for (n = input; n; n = n.parentNode) {
+      for (nn = n.previousSibling; nn; nn = nn.previousSibling) {
+        nodelist.push(nn);
+        xpathCollectDescendantsReverse(nodelist, nn);
+      }
+    }
+
+  } else if (this.axis == xpathAxis.PRECEDING_SIBLING) {
+    for (n = input.previousSibling; n; n = n.previousSibling) {
+      nodelist.push(n);
+    }
+
+  } else if (this.axis == xpathAxis.SELF) {
+    nodelist.push(input);
+
+  } else {
+    throw 'ERROR -- NO SUCH AXIS: ' + this.axis;
+  }
+
+  if (!skipNodeTest) {
+    // process node test
+    nodelist0 = nodelist;
+    nodelist = [];
+    for (i = 0; i < nodelist0.length; ++i) {
+      n = nodelist0[i];
+      if (this.nodetest.evaluate(ctx.clone(n, i, nodelist0)).booleanValue()) {
+        nodelist.push(n);
+      }
+    }
+  }
+
+  // process predicates
+  for (i = 0; i < this.predicate.length; ++i) {
+    nodelist0 = nodelist;
+    nodelist = [];
+    for (var ii = 0; ii < nodelist0.length; ++ii) {
+      n = nodelist0[ii];
+      if (this.predicate[i].evaluate(ctx.clone(n, ii, nodelist0)).booleanValue()) {
+        nodelist.push(n);
+      }
+    }
+  }
+
+  return new NodeSetValue(nodelist);
+};
+
+function PredicateExpr(expr) {
+  this.expr = expr;
+}
+
+PredicateExpr.prototype.evaluate = function(ctx) {
+  var v = this.expr.evaluate(ctx);
+  if (v.type == 'number') {
+    // NOTE(mesch): Internally, position is represented starting with
+    // 0, however in XPath position starts with 1. See functions
+    // position() and last().
+    return new BooleanValue(ctx.position == v.numberValue() - 1);
+  } else {
+    return new BooleanValue(v.booleanValue());
+  }
+};
+
+function FunctionCallExpr(name) {
+  this.name = name;
+  this.args = [];
+}
+
+FunctionCallExpr.prototype.appendArg = function(arg) {
+  this.args.push(arg);
+};
+
+FunctionCallExpr.prototype.evaluate = function(ctx) {
+  var fn = '' + this.name.value;
+  var f = this.xpathfunctions[fn];
+  if (f) {
+    return f.call(this, ctx);
+  } else {
+    xpathLog('XPath NO SUCH FUNCTION ' + fn);
+    return new BooleanValue(false);
+  }
+};
+
+FunctionCallExpr.prototype.xpathfunctions = {
+  'last': function(ctx) {
+    assert(this.args.length === 0);
+    // NOTE(mesch): XPath position starts at 1.
+    return new NumberValue(ctx.contextSize());
+  },
+
+  'position': function(ctx) {
+    assert(this.args.length === 0);
+    // NOTE(mesch): XPath position starts at 1.
+    return new NumberValue(ctx.position + 1);
+  },
+
+  'count': function(ctx) {
+    assert(this.args.length == 1);
+    var v = this.args[0].evaluate(ctx);
+    return new NumberValue(v.nodeSetValue().length);
+  },
+
+  'id': function(ctx) {
+    assert(this.args.length == 1);
+    var e = this.args[0].evaluate(ctx);
+    var ret = [];
+    var ids, i, ii, v, n;
+    if (e.type == 'node-set') {
+      ids = [];
+      var en = e.nodeSetValue();
+      for (i = 0; i < en.length; ++i) {
+        v = xmlValue(en[i]).split(/\s+/);
+        for (ii = 0; ii < v.length; ++ii) {
+          ids.push(v[ii]);
+        }
+      }
+    } else {
+      ids = e.stringValue().split(/\s+/);
+    }
+    var d = ctx.root;
+    for (i = 0; i < ids.length; ++i) {
+      n = d.getElementById(ids[i]);
+      if (n) {
+        ret.push(n);
+      }
+    }
+    return new NodeSetValue(ret);
+  },
+
+  'local-name': function(ctx) {
+    console.warn('not implmented yet: XPath function local-name()');
+  },
+
+  'namespace-uri': function(ctx) {
+    console.warn('not implmented yet: XPath function namespace-uri()');
+  },
+
+  'name': function(ctx) {
+    assert(this.args.length == 1 || this.args.length === 0);
+    var n;
+    if (this.args.length === 0) {
+      n = [ ctx.node ];
+    } else {
+      n = this.args[0].evaluate(ctx).nodeSetValue();
+    }
+
+    if (n.length === 0) {
+      return new StringValue('');
+    } else {
+      return new StringValue(n[0].nodeName);
+    }
+  },
+
+  'string':  function(ctx) {
+    assert(this.args.length == 1 || this.args.length === 0);
+    if (this.args.length === 0) {
+      return new StringValue(new NodeSetValue([ ctx.node ]).stringValue());
+    } else {
+      return new StringValue(this.args[0].evaluate(ctx).stringValue());
+    }
+  },
+
+  'concat': function(ctx) {
+    var ret = '';
+    for (var i = 0; i < this.args.length; ++i) {
+      ret += this.args[i].evaluate(ctx).stringValue();
+    }
+    return new StringValue(ret);
+  },
+
+  'starts-with': function(ctx) {
+    assert(this.args.length == 2);
+    var s0 = this.args[0].evaluate(ctx).stringValue();
+    var s1 = this.args[1].evaluate(ctx).stringValue();
+    return new BooleanValue(s0.indexOf(s1) === 0);
+  },
+
+  'contains': function(ctx) {
+    assert(this.args.length == 2);
+    var s0 = this.args[0].evaluate(ctx).stringValue();
+    var s1 = this.args[1].evaluate(ctx).stringValue();
+    return new BooleanValue(s0.indexOf(s1) != -1);
+  },
+
+  'substring-before': function(ctx) {
+    assert(this.args.length == 2);
+    var s0 = this.args[0].evaluate(ctx).stringValue();
+    var s1 = this.args[1].evaluate(ctx).stringValue();
+    var i = s0.indexOf(s1);
+    var ret;
+    if (i == -1) {
+      ret = '';
+    } else {
+      ret = s0.substr(0,i);
+    }
+    return new StringValue(ret);
+  },
+
+  'substring-after': function(ctx) {
+    assert(this.args.length == 2);
+    var s0 = this.args[0].evaluate(ctx).stringValue();
+    var s1 = this.args[1].evaluate(ctx).stringValue();
+    var i = s0.indexOf(s1);
+    var ret;
+    if (i == -1) {
+      ret = '';
+    } else {
+      ret = s0.substr(i + s1.length);
+    }
+    return new StringValue(ret);
+  },
+
+  'substring': function(ctx) {
+    // NOTE: XPath defines the position of the first character in a
+    // string to be 1, in JavaScript this is 0 ([XPATH] Section 4.2).
+    assert(this.args.length == 2 || this.args.length == 3);
+    var s0 = this.args[0].evaluate(ctx).stringValue();
+    var s1 = this.args[1].evaluate(ctx).numberValue();
+    var ret, i0, i1, i2, s2;
+    if (this.args.length == 2) {
+      i1 = Math.max(0, Math.round(s1) - 1);
+      ret = s0.substr(i1);
+
+    } else {
+      s2 = this.args[2].evaluate(ctx).numberValue();
+      i0 = Math.round(s1) - 1;
+      i1 = Math.max(0, i0);
+      i2 = Math.round(s2) - Math.max(0, -i0);
+      ret = s0.substr(i1, i2);
+    }
+    return new StringValue(ret);
+  },
+
+  'string-length': function(ctx) {
+    var s;
+    if (this.args.length > 0) {
+      s = this.args[0].evaluate(ctx).stringValue();
+    } else {
+      s = new NodeSetValue([ ctx.node ]).stringValue();
+    }
+    return new NumberValue(s.length);
+  },
+
+  'normalize-space': function(ctx) {
+    var s;
+    if (this.args.length > 0) {
+      s = this.args[0].evaluate(ctx).stringValue();
+    } else {
+      s = new NodeSetValue([ ctx.node ]).stringValue();
+    }
+    s = s.replace(/^\s*/,'').replace(/\s*$/,'').replace(/\s+/g, ' ');
+    return new StringValue(s);
+  },
+
+  'translate': function(ctx) {
+    assert(this.args.length == 3);
+    var s0 = this.args[0].evaluate(ctx).stringValue();
+    var s1 = this.args[1].evaluate(ctx).stringValue();
+    var s2 = this.args[2].evaluate(ctx).stringValue();
+
+    for (var i = 0; i < s1.length; ++i) {
+      s0 = s0.replace(new RegExp(s1.charAt(i), 'g'), s2.charAt(i));
+    }
+    return new StringValue(s0);
+  },
+
+  'boolean': function(ctx) {
+    assert(this.args.length == 1);
+    return new BooleanValue(this.args[0].evaluate(ctx).booleanValue());
+  },
+
+  'not': function(ctx) {
+    assert(this.args.length == 1);
+    var ret = !this.args[0].evaluate(ctx).booleanValue();
+    return new BooleanValue(ret);
+  },
+
+  'true': function(ctx) {
+    assert(this.args.length === 0);
+    return new BooleanValue(true);
+  },
+
+  'false': function(ctx) {
+    assert(this.args.length === 0);
+    return new BooleanValue(false);
+  },
+
+  'lang': function(ctx) {
+    assert(this.args.length == 1);
+    var lang = this.args[0].evaluate(ctx).stringValue();
+    var xmllang;
+    var n = ctx.node;
+    while (n && n != n.parentNode /* just in case ... */) {
+      xmllang = n.getAttribute('xml:lang');
+      if (xmllang) {
+        break;
+      }
+      n = n.parentNode;
+    }
+    if (!xmllang) {
+      return new BooleanValue(false);
+    } else {
+      var re = new RegExp('^' + lang + '$', 'i');
+      return new BooleanValue(xmllang.match(re) ||
+                              xmllang.replace(/_.*$/,'').match(re));
+    }
+  },
+
+  'number': function(ctx) {
+    assert(this.args.length == 1 || this.args.length === 0);
+
+    if (this.args.length == 1) {
+      return new NumberValue(this.args[0].evaluate(ctx).numberValue());
+    } else {
+      return new NumberValue(new NodeSetValue([ ctx.node ]).numberValue());
+    }
+  },
+
+  'sum': function(ctx) {
+    assert(this.args.length == 1);
+    var n = this.args[0].evaluate(ctx).nodeSetValue();
+    var sum = 0;
+    for (var i = 0; i < n.length; ++i) {
+      sum += xmlValue(n[i]) - 0;
+    }
+    return new NumberValue(sum);
+  },
+
+  'floor': function(ctx) {
+    assert(this.args.length == 1);
+    var num = this.args[0].evaluate(ctx).numberValue();
+    return new NumberValue(Math.floor(num));
+  },
+
+  'ceiling': function(ctx) {
+    assert(this.args.length == 1);
+    var num = this.args[0].evaluate(ctx).numberValue();
+    return new NumberValue(Math.ceil(num));
+  },
+
+  'round': function(ctx) {
+    assert(this.args.length == 1);
+    var num = this.args[0].evaluate(ctx).numberValue();
+    return new NumberValue(Math.round(num));
+  },
+
+  // TODO(mesch): The following functions are custom. There is a
+  // standard that defines how to add functions, which should be
+  // applied here.
+
+  'ext-join': function(ctx) {
+    assert(this.args.length == 2);
+    var nodes = this.args[0].evaluate(ctx).nodeSetValue();
+    var delim = this.args[1].evaluate(ctx).stringValue();
+    var ret = '';
+    for (var i = 0; i < nodes.length; ++i) {
+      if (ret) {
+        ret += delim;
+      }
+      ret += xmlValue(nodes[i]);
+    }
+    return new StringValue(ret);
+  },
+
+  // ext-if() evaluates and returns its second argument, if the
+  // boolean value of its first argument is true, otherwise it
+  // evaluates and returns its third argument.
+
+  'ext-if': function(ctx) {
+    assert(this.args.length == 3);
+    if (this.args[0].evaluate(ctx).booleanValue()) {
+      return this.args[1].evaluate(ctx);
+    } else {
+      return this.args[2].evaluate(ctx);
+    }
+  },
+
+  // ext-cardinal() evaluates its single argument as a number, and
+  // returns the current node that many times. It can be used in the
+  // select attribute to iterate over an integer range.
+
+  'ext-cardinal': function(ctx) {
+    assert(this.args.length >= 1);
+    var c = this.args[0].evaluate(ctx).numberValue();
+    var ret = [];
+    for (var i = 0; i < c; ++i) {
+      ret.push(ctx.node);
+    }
+    return new NodeSetValue(ret);
+  }
+};
+
+function UnionExpr(expr1, expr2) {
+  this.expr1 = expr1;
+  this.expr2 = expr2;
+}
+
+UnionExpr.prototype.evaluate = function(ctx) {
+  var nodes1 = this.expr1.evaluate(ctx).nodeSetValue();
+  var nodes2 = this.expr2.evaluate(ctx).nodeSetValue();
+  var I1 = nodes1.length;
+  for (var i2 = 0; i2 < nodes2.length; ++i2) {
+    var n = nodes2[i2];
+    var inBoth = false;
+    for (var i1 = 0; i1 < I1; ++i1) {
+      if (nodes1[i1] == n) {
+        inBoth = true;
+        i1 = I1; // break inner loop
+      }
+    }
+    if (!inBoth) {
+      nodes1.push(n);
+    }
+  }
+  return new NodeSetValue(nodes1);
+};
+
+function PathExpr(filter, rel) {
+  this.filter = filter;
+  this.rel = rel;
+}
+
+PathExpr.prototype.evaluate = function(ctx) {
+  var nodes = this.filter.evaluate(ctx).nodeSetValue();
+  var nodes1 = [];
+  for (var i = 0; i < nodes.length; ++i) {
+    var nodes0 = this.rel.evaluate(ctx.clone(nodes[i], i, nodes)).nodeSetValue();
+    for (var ii = 0; ii < nodes0.length; ++ii) {
+      nodes1.push(nodes0[ii]);
+    }
+  }
+  return new NodeSetValue(nodes1);
+};
+
+function FilterExpr(expr, predicate) {
+  this.expr = expr;
+  this.predicate = predicate;
+}
+
+FilterExpr.prototype.evaluate = function(ctx) {
+  var nodes = this.expr.evaluate(ctx).nodeSetValue();
+  for (var i = 0; i < this.predicate.length; ++i) {
+    var nodes0 = nodes;
+    nodes = [];
+    for (var j = 0; j < nodes0.length; ++j) {
+      var n = nodes0[j];
+      if (this.predicate[i].evaluate(ctx.clone(n, j, nodes0)).booleanValue()) {
+        nodes.push(n);
+      }
+    }
+  }
+
+  return new NodeSetValue(nodes);
+};
+
+function UnaryMinusExpr(expr) {
+  this.expr = expr;
+}
+
+UnaryMinusExpr.prototype.evaluate = function(ctx) {
+  return new NumberValue(-this.expr.evaluate(ctx).numberValue());
+};
+
+function BinaryExpr(expr1, op, expr2) {
+  this.expr1 = expr1;
+  this.expr2 = expr2;
+  this.op = op;
+}
+
+BinaryExpr.prototype.evaluate = function(ctx) {
+  var ret;
+  switch (this.op.value) {
+    case 'or':
+      ret = new BooleanValue(this.expr1.evaluate(ctx).booleanValue() ||
+                             this.expr2.evaluate(ctx).booleanValue());
+      break;
+
+    case 'and':
+      ret = new BooleanValue(this.expr1.evaluate(ctx).booleanValue() &&
+                             this.expr2.evaluate(ctx).booleanValue());
+      break;
+
+    case '+':
+      ret = new NumberValue(this.expr1.evaluate(ctx).numberValue() +
+                            this.expr2.evaluate(ctx).numberValue());
+      break;
+
+    case '-':
+      ret = new NumberValue(this.expr1.evaluate(ctx).numberValue() -
+                            this.expr2.evaluate(ctx).numberValue());
+      break;
+
+    case '*':
+      ret = new NumberValue(this.expr1.evaluate(ctx).numberValue() *
+                            this.expr2.evaluate(ctx).numberValue());
+      break;
+
+    case 'mod':
+      ret = new NumberValue(this.expr1.evaluate(ctx).numberValue() %
+                            this.expr2.evaluate(ctx).numberValue());
+      break;
+
+    case 'div':
+      ret = new NumberValue(this.expr1.evaluate(ctx).numberValue() /
+                            this.expr2.evaluate(ctx).numberValue());
+      break;
+
+    case '=':
+      ret = this.compare(ctx, function(x1, x2) { return x1 == x2; });
+      break;
+
+    case '!=':
+      ret = this.compare(ctx, function(x1, x2) { return x1 != x2; });
+      break;
+
+    case '<':
+      ret = this.compare(ctx, function(x1, x2) { return x1 < x2; });
+      break;
+
+    case '<=':
+      ret = this.compare(ctx, function(x1, x2) { return x1 <= x2; });
+      break;
+
+    case '>':
+      ret = this.compare(ctx, function(x1, x2) { return x1 > x2; });
+      break;
+
+    case '>=':
+      ret = this.compare(ctx, function(x1, x2) { return x1 >= x2; });
+      break;
+
+    default:
+      console.warn('BinaryExpr.evaluate: ' + this.op.value);
+  }
+  return ret;
+};
+
+BinaryExpr.prototype.compare = function(ctx, cmp) {
+  var v1 = this.expr1.evaluate(ctx);
+  var v2 = this.expr2.evaluate(ctx);
+  var i, n, s, n1, n2, i1, i2, nn;
+
+  var ret;
+  if (v1.type == 'node-set' && v2.type == 'node-set') {
+    n1 = v1.nodeSetValue();
+    n2 = v2.nodeSetValue();
+    ret = false;
+    for (i1 = 0; i1 < n1.length; ++i1) {
+      for (i2 = 0; i2 < n2.length; ++i2) {
+        if (cmp(xmlValue(n1[i1]), xmlValue(n2[i2]))) {
+          ret = true;
+          // Break outer loop. Labels confuse the jscompiler and we
+          // don't use them.
+          i2 = n2.length;
+          i1 = n1.length;
+        }
+      }
+    }
+
+  } else if (v1.type == 'node-set' || v2.type == 'node-set') {
+
+    if (v1.type == 'number') {
+      s = v1.numberValue();
+      n = v2.nodeSetValue();
+
+      ret = false;
+      for (i = 0;  i < n.length; ++i) {
+        nn = xmlValue(n[i]) - 0;
+        if (cmp(s, nn)) {
+          ret = true;
+          break;
+        }
+      }
+
+    } else if (v2.type == 'number') {
+      n = v1.nodeSetValue();
+      s = v2.numberValue();
+
+      ret = false;
+      for (i = 0;  i < n.length; ++i) {
+        nn = xmlValue(n[i]) - 0;
+        if (cmp(nn, s)) {
+          ret = true;
+          break;
+        }
+      }
+
+    } else if (v1.type == 'string') {
+      s = v1.stringValue();
+      n = v2.nodeSetValue();
+
+      ret = false;
+      for (i = 0;  i < n.length; ++i) {
+        nn = xmlValue(n[i]);
+        if (cmp(s, nn)) {
+          ret = true;
+          break;
+        }
+      }
+
+    } else if (v2.type == 'string') {
+      n = v1.nodeSetValue();
+      s = v2.stringValue();
+
+      ret = false;
+      for (i = 0;  i < n.length; ++i) {
+        nn = xmlValue(n[i]);
+        if (cmp(nn, s)) {
+          ret = true;
+          break;
+        }
+      }
+
+    } else {
+      ret = cmp(v1.booleanValue(), v2.booleanValue());
+    }
+
+  } else if (v1.type == 'boolean' || v2.type == 'boolean') {
+    ret = cmp(v1.booleanValue(), v2.booleanValue());
+
+  } else if (v1.type == 'number' || v2.type == 'number') {
+    ret = cmp(v1.numberValue(), v2.numberValue());
+
+  } else {
+    ret = cmp(v1.stringValue(), v2.stringValue());
+  }
+
+  return new BooleanValue(ret);
+};
+
+function LiteralExpr(value) {
+  this.value = value;
+}
+
+LiteralExpr.prototype.evaluate = function(ctx) {
+  return new StringValue(this.value);
+};
+
+function NumberExpr(value) {
+  this.value = value;
+}
+
+NumberExpr.prototype.evaluate = function(ctx) {
+  return new NumberValue(this.value);
+};
+
+function VariableExpr(name) {
+  this.name = name;
+}
+
+VariableExpr.prototype.evaluate = function(ctx) {
+  return ctx.getVariable(this.name);
+};
+
+// Factory functions for semantic values (i.e. Expressions) of the
+// productions in the grammar. When a production is matched to reduce
+// the current parse state stack, the function is called with the
+// semantic values of the matched elements as arguments, and returns
+// another semantic value. The semantic value is a node of the parse
+// tree, an expression object with an evaluate() method that evaluates the
+// expression in an actual context. These factory functions are used
+// in the specification of the grammar rules, below.
+
+function makeTokenExpr(m) {
+  return new TokenExpr(m);
+}
+
+function passExpr(e) {
+  return e;
+}
+
+function makeAbbrevStep(abbrev) {
+  switch (abbrev) {
+  case '//':
+    return new StepExpr('descendant-or-self', new NodeTestAny());
+
+  case '.':
+    return new StepExpr('self', new NodeTestAny());
+
+  case '..':
+    return new StepExpr('parent', new NodeTestAny());
+  }
+}
+
+function makeLocationExpr1(slash, rel) {
+  rel.absolute = true;
+  return rel;
+}
+
+function makeLocationExpr2(dslash, rel) {
+  rel.absolute = true;
+  rel.prependStep(makeAbbrevStep(dslash.value));
+  return rel;
+}
+
+function makeLocationExpr3(slash) {
+  var ret = new LocationExpr();
+  ret.appendStep(makeAbbrevStep('.'));
+  ret.absolute = true;
+  return ret;
+}
+
+function makeLocationExpr4(dslash) {
+  var ret = new LocationExpr();
+  ret.absolute = true;
+  ret.appendStep(makeAbbrevStep(dslash.value));
+  return ret;
+}
+
+function makeLocationExpr5(step) {
+  var ret = new LocationExpr();
+  ret.appendStep(step);
+  return ret;
+}
+
+function makeLocationExpr6(rel, slash, step) {
+  rel.appendStep(step);
+  return rel;
+}
+
+function makeLocationExpr7(rel, dslash, step) {
+  rel.appendStep(makeAbbrevStep(dslash.value));
+  rel.appendStep(step);
+  return rel;
+}
+
+function makeStepExpr1(dot) {
+  return makeAbbrevStep(dot.value);
+}
+
+function makeStepExpr2(ddot) {
+  return makeAbbrevStep(ddot.value);
+}
+
+function makeStepExpr3(axisname, axis, nodetest) {
+  return new StepExpr(axisname.value, nodetest);
+}
+
+function makeStepExpr4(at, nodetest) {
+  return new StepExpr('attribute', nodetest);
+}
+
+function makeStepExpr5(nodetest) {
+  return new StepExpr('child', nodetest);
+}
+
+function makeStepExpr6(step, predicate) {
+  step.appendPredicate(predicate);
+  return step;
+}
+
+
+function makeNodeTestExpr1(asterisk) {
+  return new NodeTestElementOrAttribute();
+}
+
+function makeNodeTestExpr2(ncname, colon, asterisk) {
+  return new NodeTestNC(ncname.value);
+}
+
+function makeNodeTestExpr3(qname) {
+  return new NodeTestName(qname.value);
+}
+
+function makeNodeTestExpr4(typeo, parenc) {
+  var type = typeo.value.replace(/\s*\($/, '');
+  switch(type) {
+  case 'node':
+    return new NodeTestAny();
+
+  case 'text':
+    return new NodeTestText();
+
+  case 'comment':
+    return new NodeTestComment();
+
+  case 'processing-instruction':
+    return new NodeTestPI('');
+  }
+}
+
+function makeNodeTestExpr5(typeo, target, parenc) {
+  var type = typeo.replace(/\s*\($/, '');
+  if (type != 'processing-instruction') {
+    throw type;
+  }
+  return new NodeTestPI(target.value);
+}
+
+function makePredicateExpr(pareno, expr, parenc) {
+  return new PredicateExpr(expr);
+}
+
+function makePrimaryExpr(pareno, expr, parenc) {
+  return expr;
+}
+
+function makeFunctionCallExpr1(name, pareno, parenc) {
+  return new FunctionCallExpr(name);
+}
+
+function makeFunctionCallExpr2(name, pareno, arg1, args, parenc) {
+  var ret = new FunctionCallExpr(name);
+  ret.appendArg(arg1);
+  for (var i = 0; i < args.length; ++i) {
+    ret.appendArg(args[i]);
+  }
+  return ret;
+}
+
+function makeArgumentExpr(comma, expr) {
+  return expr;
+}
+
+function makeUnionExpr(expr1, pipe, expr2) {
+  return new UnionExpr(expr1, expr2);
+}
+
+function makePathExpr1(filter, slash, rel) {
+  return new PathExpr(filter, rel);
+}
+
+function makePathExpr2(filter, dslash, rel) {
+  rel.prependStep(makeAbbrevStep(dslash.value));
+  return new PathExpr(filter, rel);
+}
+
+function makeFilterExpr(expr, predicates) {
+  if (predicates.length > 0) {
+    return new FilterExpr(expr, predicates);
+  } else {
+    return expr;
+  }
+}
+
+function makeUnaryMinusExpr(minus, expr) {
+  return new UnaryMinusExpr(expr);
+}
+
+function makeBinaryExpr(expr1, op, expr2) {
+  return new BinaryExpr(expr1, op, expr2);
+}
+
+function makeLiteralExpr(token) {
+  // remove quotes from the parsed value:
+  var value = token.value.substring(1, token.value.length - 1);
+  return new LiteralExpr(value);
+}
+
+function makeNumberExpr(token) {
+  return new NumberExpr(token.value);
+}
+
+function makeVariableReference(dollar, name) {
+  return new VariableExpr(name.value);
+}
+
+// Used before parsing for optimization of common simple cases. See
+// the begin of xpathParse() for which they are.
+function makeSimpleExpr(expr) {
+    var a,b,c;
+  if (expr.charAt(0) == '$') {
+    return new VariableExpr(expr.substr(1));
+  } else if (expr.charAt(0) == '@') {
+    a = new NodeTestName(expr.substr(1));
+    b = new StepExpr('attribute', a);
+    c = new LocationExpr();
+    c.appendStep(b);
+    return c;
+  } else if (expr.match(/^[0-9]+$/)) {
+    return new NumberExpr(expr);
+  } else {
+    a = new NodeTestName(expr);
+    b = new StepExpr('child', a);
+    c = new LocationExpr();
+    c.appendStep(b);
+    return c;
+  }
+}
+
+function makeSimpleExpr2(expr) {
+  var steps = stringSplit(expr, '/');
+  var c = new LocationExpr();
+  for (var i = 0; i < steps.length; ++i) {
+    var a = new NodeTestName(steps[i]);
+    var b = new StepExpr('child', a);
+    c.appendStep(b);
+  }
+  return c;
+}
+
+// The productions of the grammar. Columns of the table:
+//
+// - target nonterminal,
+// - pattern,
+// - precedence,
+// - semantic value factory
+//
+// The semantic value factory is a function that receives parse tree
+// nodes from the stack frames of the matched symbols as arguments and
+// returns an a node of the parse tree. The node is stored in the top
+// stack frame along with the target object of the rule. The node in
+// the parse tree is an expression object that has an evaluate() method
+// and thus evaluates XPath expressions.
+//
+// The precedence is used to decide between reducing and shifting by
+// comparing the precendence of the rule that is candidate for
+// reducing with the precedence of the look ahead token. Precedence of
+// -1 means that the precedence of the tokens in the pattern is used
+// instead. TODO: It shouldn't be necessary to explicitly assign
+// precedences to rules.
+
+// DGF As it stands, these precedences are purely empirical; we're
+// not sure they can be made to be consistent at all.
+
+var xpathGrammarRules =
+  [
+   [ XPathLocationPath, [ XPathRelativeLocationPath ], 18,
+     passExpr ],
+   [ XPathLocationPath, [ XPathAbsoluteLocationPath ], 18,
+     passExpr ],
+
+   [ XPathAbsoluteLocationPath, [ TOK_SLASH, XPathRelativeLocationPath ], 18,
+     makeLocationExpr1 ],
+   [ XPathAbsoluteLocationPath, [ TOK_DSLASH, XPathRelativeLocationPath ], 18,
+     makeLocationExpr2 ],
+
+   [ XPathAbsoluteLocationPath, [ TOK_SLASH ], 0,
+     makeLocationExpr3 ],
+   [ XPathAbsoluteLocationPath, [ TOK_DSLASH ], 0,
+     makeLocationExpr4 ],
+
+   [ XPathRelativeLocationPath, [ XPathStep ], 31,
+     makeLocationExpr5 ],
+   [ XPathRelativeLocationPath,
+     [ XPathRelativeLocationPath, TOK_SLASH, XPathStep ], 31,
+     makeLocationExpr6 ],
+   [ XPathRelativeLocationPath,
+     [ XPathRelativeLocationPath, TOK_DSLASH, XPathStep ], 31,
+     makeLocationExpr7 ],
+
+   [ XPathStep, [ TOK_DOT ], 33,
+     makeStepExpr1 ],
+   [ XPathStep, [ TOK_DDOT ], 33,
+     makeStepExpr2 ],
+   [ XPathStep,
+     [ TOK_AXISNAME, TOK_AXIS, XPathNodeTest ], 33,
+     makeStepExpr3 ],
+   [ XPathStep, [ TOK_AT, XPathNodeTest ], 33,
+     makeStepExpr4 ],
+   [ XPathStep, [ XPathNodeTest ], 33,
+     makeStepExpr5 ],
+   [ XPathStep, [ XPathStep, XPathPredicate ], 33,
+     makeStepExpr6 ],
+
+   [ XPathNodeTest, [ TOK_ASTERISK ], 33,
+     makeNodeTestExpr1 ],
+   [ XPathNodeTest, [ TOK_NCNAME, TOK_COLON, TOK_ASTERISK ], 33,
+     makeNodeTestExpr2 ],
+   [ XPathNodeTest, [ TOK_QNAME ], 33,
+     makeNodeTestExpr3 ],
+   [ XPathNodeTest, [ TOK_NODEO, TOK_PARENC ], 33,
+     makeNodeTestExpr4 ],
+   [ XPathNodeTest, [ TOK_NODEO, XPathLiteral, TOK_PARENC ], 33,
+     makeNodeTestExpr5 ],
+
+   [ XPathPredicate, [ TOK_BRACKO, XPathExpr, TOK_BRACKC ], 33,
+     makePredicateExpr ],
+
+   [ XPathPrimaryExpr, [ XPathVariableReference ], 33,
+     passExpr ],
+   [ XPathPrimaryExpr, [ TOK_PARENO, XPathExpr, TOK_PARENC ], 33,
+     makePrimaryExpr ],
+   [ XPathPrimaryExpr, [ XPathLiteral ], 30,
+     passExpr ],
+   [ XPathPrimaryExpr, [ XPathNumber ], 30,
+     passExpr ],
+   [ XPathPrimaryExpr, [ XPathFunctionCall ], 31,
+     passExpr ],
+
+   [ XPathFunctionCall, [ TOK_QNAME, TOK_PARENO, TOK_PARENC ], -1,
+     makeFunctionCallExpr1 ],
+   [ XPathFunctionCall,
+     [ TOK_QNAME, TOK_PARENO, XPathExpr, XPathArgumentRemainder, Q_MM,
+       TOK_PARENC ], -1,
+     makeFunctionCallExpr2 ],
+   [ XPathArgumentRemainder, [ TOK_COMMA, XPathExpr ], -1,
+     makeArgumentExpr ],
+
+   [ XPathUnionExpr, [ XPathPathExpr ], 20,
+     passExpr ],
+   [ XPathUnionExpr, [ XPathUnionExpr, TOK_PIPE, XPathPathExpr ], 20,
+     makeUnionExpr ],
+
+   [ XPathPathExpr, [ XPathLocationPath ], 20,
+     passExpr ],
+   [ XPathPathExpr, [ XPathFilterExpr ], 19,
+     passExpr ],
+   [ XPathPathExpr,
+     [ XPathFilterExpr, TOK_SLASH, XPathRelativeLocationPath ], 19,
+     makePathExpr1 ],
+   [ XPathPathExpr,
+     [ XPathFilterExpr, TOK_DSLASH, XPathRelativeLocationPath ], 19,
+     makePathExpr2 ],
+
+   [ XPathFilterExpr, [ XPathPrimaryExpr, XPathPredicate, Q_MM ], 31,
+     makeFilterExpr ],
+
+   [ XPathExpr, [ XPathPrimaryExpr ], 16,
+     passExpr ],
+   [ XPathExpr, [ XPathUnionExpr ], 16,
+     passExpr ],
+
+   [ XPathExpr, [ TOK_MINUS, XPathExpr ], -1,
+     makeUnaryMinusExpr ],
+
+   [ XPathExpr, [ XPathExpr, TOK_OR, XPathExpr ], -1,
+     makeBinaryExpr ],
+   [ XPathExpr, [ XPathExpr, TOK_AND, XPathExpr ], -1,
+     makeBinaryExpr ],
+
+   [ XPathExpr, [ XPathExpr, TOK_EQ, XPathExpr ], -1,
+     makeBinaryExpr ],
+   [ XPathExpr, [ XPathExpr, TOK_NEQ, XPathExpr ], -1,
+     makeBinaryExpr ],
+
+   [ XPathExpr, [ XPathExpr, TOK_LT, XPathExpr ], -1,
+     makeBinaryExpr ],
+   [ XPathExpr, [ XPathExpr, TOK_LE, XPathExpr ], -1,
+     makeBinaryExpr ],
+   [ XPathExpr, [ XPathExpr, TOK_GT, XPathExpr ], -1,
+     makeBinaryExpr ],
+   [ XPathExpr, [ XPathExpr, TOK_GE, XPathExpr ], -1,
+     makeBinaryExpr ],
+
+   [ XPathExpr, [ XPathExpr, TOK_PLUS, XPathExpr ], -1,
+     makeBinaryExpr, ASSOC_LEFT ],
+   [ XPathExpr, [ XPathExpr, TOK_MINUS, XPathExpr ], -1,
+     makeBinaryExpr, ASSOC_LEFT ],
+
+   [ XPathExpr, [ XPathExpr, TOK_ASTERISK, XPathExpr ], -1,
+     makeBinaryExpr, ASSOC_LEFT ],
+   [ XPathExpr, [ XPathExpr, TOK_DIV, XPathExpr ], -1,
+     makeBinaryExpr, ASSOC_LEFT ],
+   [ XPathExpr, [ XPathExpr, TOK_MOD, XPathExpr ], -1,
+     makeBinaryExpr, ASSOC_LEFT ],
+
+   [ XPathLiteral, [ TOK_LITERALQ ], -1,
+     makeLiteralExpr ],
+   [ XPathLiteral, [ TOK_LITERALQQ ], -1,
+     makeLiteralExpr ],
+
+   [ XPathNumber, [ TOK_NUMBER ], -1,
+     makeNumberExpr ],
+
+   [ XPathVariableReference, [ TOK_DOLLAR, TOK_QNAME ], 200,
+     makeVariableReference ]
+   ];
+
+// That function computes some optimizations of the above data
+// structures and will be called right here. It merely takes the
+// counter variables out of the global scope.
+
+
+// XPath expression evaluation context. An XPath context consists of a
+// DOM node, a list of DOM nodes that contains this node, a number
+// that represents the position of the single node in the list, and a
+// current set of variable bindings. (See XPath spec.)
+//
+// The interface of the expression context:
+//
+//   Constructor -- gets the node, its position, the node set it
+//   belongs to, and a parent context as arguments. The parent context
+//   is used to implement scoping rules for variables: if a variable
+//   is not found in the current context, it is looked for in the
+//   parent context, recursively. Except for node, all arguments have
+//   default values: default position is 0, default node set is the
+//   set that contains only the node, and the default parent is null.
+//
+//     Notice that position starts at 0 at the outside interface;
+//     inside XPath expressions this shows up as position()=1.
+//
+//   clone() -- creates a new context with the current context as
+//   parent. If passed as argument to clone(), the new context has a
+//   different node, position, or node set. What is not passed is
+//   inherited from the cloned context.
+//
+//   setVariable(name, expr) -- binds given XPath expression to the
+//   name.
+//
+//   getVariable(name) -- what the name says.
+//
+//   setNode(position) -- sets the context to the node at the given
+//   position. Needed to implement scoping rules for variables in
+//   XPath. (A variable is visible to all subsequent siblings, not
+//   only to its children.)
+//
+//   set/isCaseInsensitive -- specifies whether node name tests should
+//   be case sensitive.  If you're executing xpaths against a regular
+//   HTML DOM, you probably don't want case-sensitivity, because
+//   browsers tend to disagree about whether elements & attributes
+//   should be upper/lower case.  If you're running xpaths in an
+//   XSLT instance, you probably DO want case sensitivity, as per the
+//   XSL spec.
+
+function ExprContext(node, opt_position, opt_nodelist, opt_parent, opt_caseInsensitive, opt_ignoreAttributesWithoutValue) {
+  this.node = node;
+  this.position = opt_position || 0;
+  this.nodelist = opt_nodelist || [ node ];
+  this.variables = {};
+  this.parent = opt_parent || null;
+  this.caseInsensitive = opt_caseInsensitive || false;
+  this.ignoreAttributesWithoutValue = opt_ignoreAttributesWithoutValue || false;
+  if (opt_parent) {
+    this.root = opt_parent.root;
+  } else if (this.node.nodeType == DOM_DOCUMENT_NODE) {
+    // NOTE(mesch): DOM Spec stipulates that the ownerDocument of a
+    // document is null. Our root, however is the document that we are
+    // processing, so the initial context is created from its document
+    // node, which case we must handle here explcitly.
+    this.root = node;
+  } else {
+    this.root = node.ownerDocument;
+  }
+}
+
+ExprContext.prototype.clone = function(opt_node, opt_position, opt_nodelist) {
+  return new ExprContext(
+      opt_node || this.node,
+      typeof opt_position != 'undefined' ? opt_position : this.position,
+      opt_nodelist || this.nodelist, this, this.caseInsensitive,
+      this.ignoreAttributesWithoutValue);
+};
+
+ExprContext.prototype.setVariable = function(name, value) {
+  if (value instanceof StringValue || value instanceof BooleanValue || 
+    value instanceof NumberValue || value instanceof NodeSetValue) {
+    this.variables[name] = value;
+    return;
+  }
+  if ('true' === value) {
+    this.variables[name] = new BooleanValue(true);
+  } else if ('false' === value) {
+    this.variables[name] = new BooleanValue(false);
+  } else if (TOK_NUMBER.re.test(value)) {
+    this.variables[name] = new NumberValue(value);
+  } else {
+    // DGF What if it's null?
+    this.variables[name] = new StringValue(value);
+  }
+};
+
+ExprContext.prototype.getVariable = function(name) {
+  if (typeof this.variables[name] != 'undefined') {
+    return this.variables[name];
+
+  } else if (this.parent) {
+    return this.parent.getVariable(name);
+
+  } else {
+    return null;
+  }
+};
+
+ExprContext.prototype.setNode = function(position) {
+  this.node = this.nodelist[position];
+  this.position = position;
+};
+
+ExprContext.prototype.contextSize = function() {
+  return this.nodelist.length;
+};
+
+ExprContext.prototype.isCaseInsensitive = function() {
+  return this.caseInsensitive;
+};
+
+ExprContext.prototype.setCaseInsensitive = function(caseInsensitive) {
+  this.caseInsensitive = caseInsensitive;
+  return this.caseInsensitive;
+};
+
+ExprContext.prototype.isIgnoreAttributesWithoutValue = function() {
+  return this.ignoreAttributesWithoutValue;
+};
+
+ExprContext.prototype.setIgnoreAttributesWithoutValue = function(ignore) {
+   this.ignoreAttributesWithoutValue = ignore;
+   return ignore;
+};
+
+var xpathRules = [];
+
+function xpathParseInit() {
+  if (xpathRules.length) {
+    return;
+  }
+
+  // Some simple optimizations for the xpath expression parser: sort
+  // grammar rules descending by length, so that the longest match is
+  // first found.
+
+  xpathGrammarRules.sort(function(a,b) {
+    var la = a[1].length;
+    var lb = b[1].length;
+    if (la < lb) {
+      return 1;
+    } else if (la > lb) {
+      return -1;
+    } else {
+      return 0;
+    }
+  });
+
+  var k = 1;
+  for (var i = 0; i < xpathNonTerminals.length; ++i) {
+    xpathNonTerminals[i].key = k++;
+  }
+
+  for (i = 0; i < xpathTokenRules.length; ++i) {
+    xpathTokenRules[i].key = k++;
+  }
+
+  xpathLog('XPath parse INIT: ' + k + ' rules');
+
+  // Another slight optimization: sort the rules into bins according
+  // to the last element (observing quantifiers), so we can restrict
+  // the match against the stack to the subest of rules that match the
+  // top of the stack.
+  //
+  // TODO(mesch): What we actually want is to compute states as in
+  // bison, so that we don't have to do any explicit and iterated
+  // match against the stack.
+
+  function push_(array, position, element) {
+    if (!array[position]) {
+      array[position] = [];
+    }
+    array[position].push(element);
+  }
+
+  for (i = 0; i < xpathGrammarRules.length; ++i) {
+    var rule = xpathGrammarRules[i];
+    var pattern = rule[1];
+
+    for (var j = pattern.length - 1; j >= 0; --j) {
+      if (pattern[j] == Q_1M) {
+        push_(xpathRules, pattern[j-1].key, rule);
+        break;
+
+      } else if (pattern[j] == Q_MM || pattern[j] == Q_01) {
+        push_(xpathRules, pattern[j-1].key, rule);
+        --j;
+
+      } else {
+        push_(xpathRules, pattern[j].key, rule);
+        break;
+      }
+    }
+  }
+
+  xpathLog('XPath parse INIT: ' + xpathRules.length + ' rule bins');
+
+  var sum = 0;
+  mapExec(xpathRules, function(i) {
+    if (i) {
+      sum += i.length;
+    }
+  });
+
+  xpathLog('XPath parse INIT: ' + (sum / xpathRules.length) +
+           ' average bin size');
+}
+
+
+// Sorts by all order criteria defined. According to the JavaScript
+// spec ([ECMA] Section 11.8.5), the compare operators compare strings
+// as strings and numbers as numbers.
+//
+// NOTE: In browsers which do not follow the spec, this breaks only in
+// the case that numbers should be sorted as strings, which is very
+// uncommon.
+function xpathSortByKey(v1, v2) {
+  // NOTE: Sort key vectors of different length never occur in
+  // xsltSort.
+
+  for (var i = 0; i < v1.key.length; ++i) {
+    var o = v1.key[i].order == 'descending' ? -1 : 1;
+    if (v1.key[i].value > v2.key[i].value) {
+      return +1 * o;
+    } else if (v1.key[i].value < v2.key[i].value) {
+      return -1 * o;
+    }
+  }
+
+  return 0;
+}
+
+// Utility function to sort a list of nodes. Used by xsltSort() and
+// nxslSelect().
+function xpathSort(input, sort) {
+  if (sort.length === 0) {
+    return;
+  }
+
+  var sortlist = [], i;
+
+  for (i = 0; i < input.contextSize(); ++i) {
+    var node = input.nodelist[i];
+    var sortitem = { node: node, key: [] };
+    var context = input.clone(node, 0, [ node ]);
+
+    for (var j = 0; j < sort.length; ++j) {
+      var s = sort[j];
+      var value = s.expr.evaluate(context);
+
+      var evalue;
+      if (s.type == 'text') {
+        evalue = value.stringValue();
+      } else if (s.type == 'number') {
+        evalue = value.numberValue();
+      }
+      sortitem.key.push({ value: evalue, order: s.order });
+    }
+
+    // Make the sort stable by adding a lowest priority sort by
+    // id. This is very convenient and furthermore required by the
+    // spec ([XSLT] - Section 10 Sorting).
+    sortitem.key.push({ value: i, order: 'ascending' });
+
+    sortlist.push(sortitem);
+  }
+
+  sortlist.sort(xpathSortByKey);
+
+  var nodes = [];
+  for (i = 0; i < sortlist.length; ++i) {
+    nodes.push(sortlist[i].node);
+  }
+  input.nodelist = nodes;
+  input.setNode(0);
+}
+
+var xpathParseCache = {};
+
+function xpathCacheLookup(expr) {
+  return xpathParseCache[expr];
+}
+
+
+function xpathMatchStack(stack, pattern) {
+
+  // NOTE(mesch): The stack matches for variable cardinality are
+  // greedy but don't do backtracking. This would be an issue only
+  // with rules of the form A* A, i.e. with an element with variable
+  // cardinality followed by the same element. Since that doesn't
+  // occur in the grammar at hand, all matches on the stack are
+  // unambiguous.
+
+  var S = stack.length;
+  var P = pattern.length;
+  var p, s;
+  var match = [];
+  match.matchlength = 0;
+  var ds = 0;
+  var getExpr = function(m) { return m.expr; };
+  for (p = P - 1, s = S - 1; p >= 0 && s >= 0; --p, s -= ds) {
+    ds = 0;
+    var qmatch = [];
+    if (pattern[p] == Q_MM) {
+      p -= 1;
+      match.push(qmatch);
+      while (s - ds >= 0 && stack[s - ds].tag == pattern[p]) {
+        qmatch.push(stack[s - ds]);
+        ds += 1;
+        match.matchlength += 1;
+      }
+
+    } else if (pattern[p] == Q_01) {
+      p -= 1;
+      match.push(qmatch);
+      while (s - ds >= 0 && ds < 2 && stack[s - ds].tag == pattern[p]) {
+        qmatch.push(stack[s - ds]);
+        ds += 1;
+        match.matchlength += 1;
+      }
+
+    } else if (pattern[p] == Q_1M) {
+      p -= 1;
+      match.push(qmatch);
+      if (stack[s].tag == pattern[p]) {
+        while (s - ds >= 0 && stack[s - ds].tag == pattern[p]) {
+          qmatch.push(stack[s - ds]);
+          ds += 1;
+          match.matchlength += 1;
+        }
+      } else {
+        return [];
+      }
+
+    } else if (stack[s].tag == pattern[p]) {
+      match.push(stack[s]);
+      ds += 1;
+      match.matchlength += 1;
+
+    } else {
+      return [];
+    }
+
+    reverseInplace(qmatch);
+    qmatch.expr = mapExpr(qmatch, getExpr);
+  }
+
+  reverseInplace(match);
+
+  if (p == -1) {
+    return match;
+
+  } else {
+    return [];
+  }
+}
+
+function xpathTokenPrecedence(tag) {
+  return tag.prec || 2;
+}
+
+function xpathGrammarPrecedence(frame) {
+  var ret = 0, p;
+
+  if (frame.rule) { /* normal reduce */
+    if (frame.rule.length >= 3 && frame.rule[2] >= 0) {
+      ret = frame.rule[2];
+
+    } else {
+      for (var i = 0; i < frame.rule[1].length; ++i) {
+        p = xpathTokenPrecedence(frame.rule[1][i]);
+        ret = Math.max(ret, p);
+      }
+    }
+  } else if (frame.tag) { /* TOKEN match */
+    ret = xpathTokenPrecedence(frame.tag);
+
+  } else if (frame.length) { /* Q_ match */
+    for (var j = 0; j < frame.length; ++j) {
+      p = xpathGrammarPrecedence(frame[j]);
+      ret = Math.max(ret, p);
+    }
+  }
+
+  return ret;
+}
+/*DGF xpathReduce is where the magic happens in this parser.
+Skim down to the bottom of this file to find the table of 
+grammatical rules and precedence numbers, "The productions of the grammar".
+
+The idea here
+is that we want to take a stack of tokens and apply
+grammatical rules to them, "reducing" them to higher-level
+tokens.  Ultimately, any valid XPath should reduce to exactly one
+"Expr" token.
+
+Reduce too early or too late and you'll have two tokens that can't reduce
+to single Expr.  For example, you may hastily reduce a qname that
+should name a function, incorrectly treating it as a tag name.
+Or you may reduce too late, accidentally reducing the last part of the
+XPath into a top-level "Expr" that won't reduce with earlier parts of
+the XPath.
+
+A "cand" is a grammatical rule candidate, with a given precedence
+number.  "ahead" is the upcoming token, which also has a precedence
+number.  If the token has a higher precedence number than
+the rule candidate, we'll "shift" the token onto the token stack,
+instead of immediately applying the rule candidate.
+
+Some tokens have left associativity, in which case we shift when they
+have LOWER precedence than the candidate.
+*/
+function xpathReduce(stack, ahead) {
+  var cand = null, i;
+
+  if (stack.length > 0) {
+    var top = stack[stack.length-1];
+    var ruleset = xpathRules[top.tag.key];
+
+    if (ruleset) {
+      for (i = 0; i < ruleset.length; ++i) {
+        var rule = ruleset[i];
+        var match = xpathMatchStack(stack, rule[1]);
+        if (match.length) {
+          cand = {
+            tag: rule[0],
+            rule: rule,
+            match: match
+          };
+          cand.prec = xpathGrammarPrecedence(cand);
+          break;
+        }
+      }
+    }
+  }
+
+  var ret;
+  if (cand && (!ahead || cand.prec > ahead.prec ||
+               (ahead.tag.left && cand.prec >= ahead.prec))) {
+    for (i = 0; i < cand.match.matchlength; ++i) {
+      stack.pop();
+    }
+
+    xpathLog('reduce ' + cand.tag.label + ' ' + cand.prec +
+             ' ahead ' + (ahead ? ahead.tag.label + ' ' + ahead.prec +
+                          (ahead.tag.left ? ' left' : '')
+                          : ' none '));
+
+    var matchexpr = mapExpr(cand.match, function(m) { return m.expr; });
+    xpathLog('going to apply ' + cand.rule[3].toString());
+    cand.expr = cand.rule[3].apply(null, matchexpr);
+
+    stack.push(cand);
+    ret = true;
+
+  } else {
+    if (ahead) {
+      xpathLog('shift ' + ahead.tag.label + ' ' + ahead.prec +
+               (ahead.tag.left ? ' left' : '') +
+               ' over ' + (cand ? cand.tag.label + ' ' +
+                           cand.prec : ' none'));
+      stack.push(ahead);
+    }
+    ret = false;
+  }
+  return ret;
+}
+
+
+
+function stackToString(stack) {
+  var ret = '';
+  for (var i = 0; i < stack.length; ++i) {
+    if (ret) {
+      ret += '\n';
+    }
+    ret += stack[i].tag.label;
+  }
+  return ret;
+}
+
+// Copyright 2005 Google Inc.
+// All Rights Reserved
+//
+// An XPath parser and evaluator written in JavaScript. The
+// implementation is complete except for functions handling
+// namespaces.
+//
+// Reference: [XPATH] XPath Specification
+// <http://www.w3.org/TR/1999/REC-xpath-19991116>.
+//
+//
+// The API of the parser has several parts:
+//
+// 1. The parser function xpathParse() that takes a string and returns
+// an expession object.
+//
+// 2. The expression object that has an evaluate() method to evaluate the
+// XPath expression it represents. (It is actually a hierarchy of
+// objects that resembles the parse tree, but an application will call
+// evaluate() only on the top node of this hierarchy.)
+//
+// 3. The context object that is passed as an argument to the evaluate()
+// method, which represents the DOM context in which the expression is
+// evaluated.
+//
+// 4. The value object that is returned from evaluate() and represents
+// values of the different types that are defined by XPath (number,
+// string, boolean, and node-set), and allows to convert between them.
+//
+// These parts are near the top of the file, the functions and data
+// that are used internally follow after them.
+//
+//
+// Author: Steffen Meschkat <mesch@google.com>
+
+
+// The entry point for the parser.
+//
+// @param expr a string that contains an XPath expression.
+// @return an expression object that can be evaluated with an
+// expression context.
+
+function xpathParse(expr) {
+  xpathLog('parse ' + expr);
+  xpathParseInit();
+
+  var cached = xpathCacheLookup(expr);
+  var ret;
+  
+  if (cached) {
+    xpathLog(' ... cached');
+    return cached;
+  }
+
+  // Optimize for a few common cases: simple attribute node tests
+  // (@id), simple element node tests (page), variable references
+  // ($address), numbers (4), multi-step path expressions where each
+  // step is a plain element node test
+  // (page/overlay/locations/location).
+
+  if (expr.match(/^(\$|@)?\w+$/i)) {
+    ret = makeSimpleExpr(expr);
+    xpathParseCache[expr] = ret;
+    xpathLog(' ... simple');
+    return ret;
+  }
+
+  if (expr.match(/^\w+(\/\w+)*$/i)) {
+    ret = makeSimpleExpr2(expr);
+    xpathParseCache[expr] = ret;
+    xpathLog(' ... simple 2');
+    return ret;
+  }
+
+  var cachekey = expr; // expr is modified during parse
+
+  var stack = [];
+  var ahead = null;
+  var previous = null;
+  var done = false;
+
+  var parse_count = 0;
+  var lexer_count = 0;
+  var reduce_count = 0;
+  var result;
+  
+  while (!done) {
+    parse_count++;
+    expr = expr.replace(/^\s*/, '');
+    previous = ahead;
+    ahead = null;
+
+    var rule = null;
+    var match = '';
+    for (var i = 0; i < xpathTokenRules.length; ++i) {
+      result = xpathTokenRules[i].re.exec(expr);
+      lexer_count++;
+      if (result && result.length > 0 && result[0].length > match.length) {
+        rule = xpathTokenRules[i];
+        match = result[0];
+        break;
+      }
+    }
+
+    // Special case: allow operator keywords to be element and
+    // variable names.
+
+    // NOTE(mesch): The parser resolves conflicts by looking ahead,
+    // and this is the only case where we look back to
+    // disambiguate. So this is indeed something different, and
+    // looking back is usually done in the lexer (via states in the
+    // general case, called "start conditions" in flex(1)). Also,the
+    // conflict resolution in the parser is not as robust as it could
+    // be, so I'd like to keep as much off the parser as possible (all
+    // these precedence values should be computed from the grammar
+    // rules and possibly associativity declarations, as in bison(1),
+    // and not explicitly set.
+
+    if (rule &&
+        (rule == TOK_DIV ||
+         rule == TOK_MOD ||
+         rule == TOK_AND ||
+         rule == TOK_OR) &&
+        (!previous ||
+         previous.tag == TOK_AT ||
+         previous.tag == TOK_DSLASH ||
+         previous.tag == TOK_SLASH ||
+         previous.tag == TOK_AXIS ||
+         previous.tag == TOK_DOLLAR)) {
+      rule = TOK_QNAME;
+    }
+
+    if (rule) {
+      expr = expr.substr(match.length);
+      xpathLog('token: ' + match + ' -- ' + rule.label);
+      ahead = {
+        tag: rule,
+        match: match,
+        prec: rule.prec ?  rule.prec : 0, // || 0 is removed by the compiler
+        expr: makeTokenExpr(match)
+      };
+
+    } else {
+      xpathLog('DONE');
+      done = true;
+    }
+
+    while (xpathReduce(stack, ahead)) {
+      reduce_count++;
+      xpathLog('stack: ' + stackToString(stack));
+    }
+  }
+
+  xpathLog('stack: ' + stackToString(stack));
+
+  // DGF any valid XPath should "reduce" to a single Expr token
+  if (stack.length != 1) {
+    throw 'XPath parse error ' + cachekey + ':\n' + stackToString(stack);
+  }
+
+  result = stack[0].expr;
+  xpathParseCache[cachekey] = result;
+
+  xpathLog('XPath parse: ' + parse_count + ' / ' +
+           lexer_count + ' / ' + reduce_count);
+
+  return result;
+}
+
+
+// Parses and then evaluates the given XPath expression in the given
+// input context. Notice that parsed xpath expressions are cached.
+function xpathEval(select, context) {
+  var expr = xpathParse(select);
+  var ret = expr.evaluate(context);
+  return ret;
+}
+
+// The entry point for the library: match an expression against a DOM
+// node. Returns an XPath value.
+function xpathDomEval(expr, node) {
+  var expr1 = xpathParse(expr);
+  var ret = expr1.evaluate(new ExprContext(node));
+  return ret;
+}
+
+
+
+
+__extend__(Document.prototype,{
+    
+    evaluate: function(xpathText, contextNode, nsuriMapper, resultType, result){
+        log.debug('evaluate');
+        var context = new ExprContext(contextNode),
+            compiled = xpathParse(xpathText);
+        result = new XPathResult(
+            resultType, 
+            compiled.evaluate(context)
+        );
+        return result;
+    }
+
+});
+
+XPathExpression.prototype.evaluate = function(contextNode, resultType, result){
+    
+    var context = new ExprContext(contextNode);
+    result = new XPathResult(
+        resultType, 
+        this.compiled.evaluate(context)
+    );
+    return result;
+};
+
+__compileXPath__ = function(xpathText, nsuriMap){
+    return xpathParse(xpathText);
+};
+
+}());
+
+    
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/event.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/event.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/event.js	(revision 76)
@@ -0,0 +1,720 @@
+/*
+ * Envjs event.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ *
+ * This file simply provides the global definitions we need to
+ * be able to correctly implement to core browser DOM Event interfaces.
+
+ - leaked globally -
+
+var Event,
+    MouseEvent,
+    UIEvent,
+    KeyboardEvent,
+    MutationEvent,
+    DocumentEvent,
+    EventTarget,
+    EventException;
+    
+ */
+
+var Envjs = Envjs || require('./platform/core').Envjs,
+	After = After || require('./platform/core').After,
+	Document = Document || require('./dom').Document;
+/*
+ * Envjs event.1.3.pre03 
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    } 
+    return a;
+}
+
+/**
+ * @author john resig
+ */
+//from jQuery
+function __setArray__( target, array ) {
+    // Resetting the length to 0, then using the native Array push
+    // is a super-fast way to populate an object with array-like properties
+    target.length = 0;
+    Array.prototype.push.apply( target, array );
+}
+var __addEventListener__,
+    __removeEventListener__,
+    __dispatchEvent__,
+    __captureEvent__,
+    __bubbleEvent__;
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.EventTarget').debug('available'); 
+});
+
+/**
+ * @name EventTarget
+ * @w3c:domlevel 2
+ * @uri -//TODO: paste dom event level 2 w3c spc uri here
+ */
+exports.EventTarget = EventTarget = function(){};
+EventTarget.prototype.addEventListener = function(type, fn, phase){
+    __addEventListener__(this, type, fn, phase);
+};
+EventTarget.prototype.removeEventListener = function(type, fn, phase){
+    __removeEventListener__(this, type, fn, phase);
+};
+EventTarget.prototype.dispatchEvent = function(event, bubbles){
+    __dispatchEvent__(this, event, bubbles);
+};
+
+__extend__(Node.prototype, EventTarget.prototype);
+
+var $events = [{}];
+
+__addEventListener__ = function(target, type, fn, phase){
+    phase = !!phase?"CAPTURING":"BUBBLING";
+    if ( !target.uuid ) {
+        target.uuid = $events.length+'';
+        log.debug('add event uuid for %s %s', target, target.uuid);
+    }
+    if ( !$events[target.uuid] ) {
+        log.debug('creating listener for target: %s %s', target, target.uuid);
+        $events[target.uuid] = {};
+    }
+    if ( !$events[target.uuid][type] ){
+        log.debug('creating listener for type: %s %s %s', target, target.uuid, type);
+        $events[target.uuid][type] = {
+            CAPTURING:[],
+            BUBBLING:[]
+        };
+    }
+    if ( $events[target.uuid][type][phase].indexOf( fn ) < 0 ){
+        log.debug( 'adding event listener %s %s %s %s', target, target.uuid, type, phase);
+        $events[target.uuid][type][phase].push( fn );
+    }
+    log.debug('registered event listeners %s', $events.length);
+};
+
+__removeEventListener__ = function(target, type, fn, phase){
+    phase = !!phase?"CAPTURING":"BUBBLING";
+    if ( !target.uuid ) {
+        log.debug('target has never had registered events %s', target);
+        return;
+    }
+    if ( !$events[target.uuid] ) {
+        log.debug('target has no registered events to remove %s %s', target, target.uuid);
+        return;
+    }
+    if(type == '*'){
+        //used to clean all event listeners for a given node
+        log.debug('cleaning all event listeners for node %s %s',target, target.uuid);
+        delete $events[target.uuid];
+        return;
+    }else if ( !$events[target.uuid][type] ){
+        log.debug('target has no registered events of type %s to remove %s %s', type, target, target.uuid);
+        return;
+    }
+    $events[target.uuid][type][phase] =
+        $events[target.uuid][type][phase].filter(function(f){
+            log.debug('removing event listener %s %s %s %s',  target, type, phase );
+            return f != fn;
+        });
+};
+
+var __eventuuid__ = 0;
+
+__dispatchEvent__ = function(target, event, bubbles){
+    
+    if (!event.uuid) {
+        event.uuid = __eventuuid__++;
+    }
+    //the window scope defines the $event object, for IE(^^^) compatibility;
+    //$event = event;
+
+    if (bubbles === undefined || bubbles === null) {
+        bubbles = true;
+    }
+
+    if (!event.target) {
+        event.target = target;
+    }
+
+    log.debug('dispatching %s %s %s %s', event.uuid, target, event.type, bubbles);
+    if ( event.type && (target.nodeType || target === window )) {
+
+        __captureEvent__(target, event);
+
+        event.eventPhase = Event.AT_TARGET;
+        if ( target.uuid && $events[target.uuid] && $events[target.uuid][event.type] ) {
+            event.currentTarget = target;
+
+            log.debug('begin dispatching capturing phase %s %s', target, event.type);
+            $events[target.uuid][event.type].CAPTURING.forEach(function(fn){
+                log.debug('capturing event %s', target);
+                var returnValue = fn.apply(target, [event]);
+                if(returnValue === false){
+                    event.stopPropagation();
+                }
+            });
+
+            log.debug('begin dispatching bubbling phase %s %s', target, event.type);
+            $events[target.uuid][event.type].BUBBLING.forEach(function(fn){
+                log.debug('bubbling event %s', target);
+                var returnValue = fn.apply(target, [event] );
+                if(returnValue === false){
+                    event.stopPropagation();
+                }
+            });
+        }
+        if (target["on" + event.type]) {
+            target["on" + event.type](event);
+        }
+        if (bubbles && !event.cancelled){
+            __bubbleEvent__(target, event);
+        }
+        if(!event._preventDefault){
+            //At this point I'm guessing that just HTMLEvents are concerned
+            //with default behavior being executed in a browser but I could be
+            //wrong as usual.  The goal is much more to filter at this point
+            //what events have no need to be handled
+            //console.log('triggering default behavior for %s', event.type);
+            if(event.type in Envjs.defaultEventBehaviors){
+                Envjs.defaultEventBehaviors[event.type](event);
+            }
+        }
+        log.debug('deleting event %s', event.uuid);
+        event.target = null;
+        event = null;
+    }else{
+        throw new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR);
+    }
+};
+
+__captureEvent__ = function(target, event){
+    var ancestorStack = [],
+        parent = target.parentNode,
+        stopevent = function(fn){
+            var returnValue = fn( event );
+            if(returnValue === false){
+                event.stopPropagation();
+            }
+        };
+
+    event.eventPhase = Event.CAPTURING_PHASE;
+    while(parent){
+        if(parent.uuid && $events[parent.uuid] && $events[parent.uuid][event.type]){
+            ancestorStack.push(parent);
+        }
+        parent = parent.parentNode;
+    }
+    while(ancestorStack.length && !event.cancelled){
+        event.currentTarget = ancestorStack.pop();
+        if($events[event.currentTarget.uuid] && $events[event.currentTarget.uuid][event.type]){
+            $events[event.currentTarget.uuid][event.type].CAPTURING.forEach(stopevent);
+        }
+    }
+};
+
+__bubbleEvent__ = function(target, event){
+    var parent = target.parentNode,
+        stopevent = function(fn){
+            var returnValue = fn( event );
+            if(returnValue === false){
+                event.stopPropagation();
+            }
+        };
+    event.eventPhase = Event.BUBBLING_PHASE;
+    while(parent){
+        if(parent.uuid && $events[parent.uuid] && $events[parent.uuid][event.type] ){
+            event.currentTarget = parent;
+            $events[event.currentTarget.uuid][event.type].BUBBLING.forEach(stopevent);
+        }
+        parent = parent.parentNode;
+    }
+};
+
+}(/*Envjs.DOM2.EventTarget*/));
+
+
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.Event').debug('available'); 
+});
+
+/**
+ * @class Event
+ */
+exports.Event = Event = function(options){
+    // event state is kept read-only by forcing
+    // a new object for each event.  This may not
+    // be appropriate in the long run and we'll
+    // have to decide if we simply dont adhere to
+    // the read-only restriction of the specification
+    this._bubbles = true;
+    this._cancelable = true;
+    this._cancelled = false;
+    this._currentTarget = null;
+    this._target = null;
+    this._eventPhase = Event.AT_TARGET;
+    this._timeStamp = new Date().getTime();
+    this._preventDefault = false;
+    this._stopPropogation = false;
+};
+
+__extend__(Event.prototype,{
+    get bubbles(){return this._bubbles;},
+    get cancelable(){return this._cancelable;},
+    get currentTarget(){return this._currentTarget;},
+    set currentTarget(currentTarget){ this._currentTarget = currentTarget; },
+    get eventPhase(){return this._eventPhase;},
+    set eventPhase(eventPhase){this._eventPhase = eventPhase;},
+    get target(){return this._target;},
+    set target(target){ this._target = target;},
+    get timeStamp(){return this._timeStamp;},
+    get type(){return this._type;},
+    initEvent: function(type, bubbles, cancelable){
+        this._type=type?type:'';
+        this._bubbles=!!bubbles;
+        this._cancelable=!!cancelable;
+    },
+    preventDefault: function(){
+        this._preventDefault = true;
+    },
+    stopPropagation: function(){
+        if(this._cancelable){
+            this._cancelled = true;
+            this._bubbles = false;
+        }
+    },
+    get cancelled(){
+        return this._cancelled;
+    },
+    toString: function(){
+        return '[object Event]';
+    }
+});
+
+__extend__(Event,{
+    CAPTURING_PHASE : 1,
+    AT_TARGET       : 2,
+    BUBBLING_PHASE  : 3
+});
+
+}(/*Envjs.DOM.Event*/));
+
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.UIEvent').debug('available'); 
+});
+
+/**
+ * @name UIEvent
+ * @param {Object} options
+ */
+exports.UIEvent = UIEvent = function(options) {
+    this._view = null;
+    this._detail = 0;
+};
+
+UIEvent.prototype = new Event();
+__extend__(UIEvent.prototype,{
+    get view(){
+        return this._view;
+    },
+    get detail(){
+        return this._detail;
+    },
+    initUIEvent: function(type, bubbles, cancelable, windowObject, detail){
+        this.initEvent(type, bubbles, cancelable);
+        this._detail = 0;
+        this._view = windowObject;
+    }
+});
+
+}(/*Envjs.DOM.UIEvent*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.MouseEvent').debug('available'); 
+});
+
+/**
+ * @name MouseEvent
+ * @w3c:domlevel 2 
+ * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
+ */
+exports.MouseEvent = MouseEvent = function(options) {
+    this._screenX= 0;
+    this._screenY= 0;
+    this._clientX= 0;
+    this._clientY= 0;
+    this._ctrlKey= false;
+    this._metaKey= false;
+    this._altKey= false;
+    this._button= null;
+    this._relatedTarget= null;
+};
+MouseEvent.prototype = new UIEvent();
+__extend__(MouseEvent.prototype,{
+    get screenX(){
+        return this._screenX;
+    },
+    get screenY(){
+        return this._screenY;
+    },
+    get clientX(){
+        return this._clientX;
+    },
+    get clientY(){
+        return this._clientY;
+    },
+    get ctrlKey(){
+        return this._ctrlKey;
+    },
+    get altKey(){
+        return this._altKey;
+    },
+    get shiftKey(){
+        return this._shiftKey;
+    },
+    get metaKey(){
+        return this._metaKey;
+    },
+    get button(){
+        return this._button;
+    },
+    get relatedTarget(){
+        return this._relatedTarget;
+    },
+    initMouseEvent: function(type, bubbles, cancelable, windowObject, detail,
+            screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, 
+            metaKey, button, relatedTarget){
+        this.initUIEvent(type, bubbles, cancelable, windowObject, detail);
+        this._screenX = screenX;
+        this._screenY = screenY;
+        this._clientX = clientX;
+        this._clientY = clientY;
+        this._ctrlKey = ctrlKey;
+        this._altKey = altKey;
+        this._shiftKey = shiftKey;
+        this._metaKey = metaKey;
+        this._button = button;
+        this._relatedTarget = relatedTarget;
+    }
+});
+
+}(/*Envjs.DOM2.MouseEvent*/));
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.KeyboardEvent').
+		debug('KeyboardEvent available'); 
+});
+
+/**
+ * Interface KeyboardEvent (introduced in DOM Level 3)
+ */
+exports.KeyboardEvent = KeyboardEvent = function(options) {
+    this._keyIdentifier = 0;
+    this._keyLocation = 0;
+    this._ctrlKey = false;
+    this._metaKey = false;
+    this._altKey = false;
+    this._metaKey = false;
+};
+KeyboardEvent.prototype = new UIEvent();
+
+__extend__(KeyboardEvent.prototype,{
+
+    get ctrlKey(){
+        return this._ctrlKey;
+    },
+    get altKey(){
+        return this._altKey;
+    },
+    get shiftKey(){
+        return this._shiftKey;
+    },
+    get metaKey(){
+        return this._metaKey;
+    },
+    get button(){
+        return this._button;
+    },
+    get relatedTarget(){
+        return this._relatedTarget;
+    },
+    getModifiersState: function(keyIdentifier){
+
+    },
+    initMouseEvent: function(type, bubbles, cancelable, windowObject,
+            keyIdentifier, keyLocation, modifiersList, repeat){
+        this.initUIEvent(type, bubbles, cancelable, windowObject, 0);
+        this._keyIdentifier = keyIdentifier;
+        this._keyLocation = keyLocation;
+        this._modifiersList = modifiersList;
+        this._repeat = repeat;
+    }
+});
+
+KeyboardEvent.DOM_KEY_LOCATION_STANDARD      = 0;
+KeyboardEvent.DOM_KEY_LOCATION_LEFT          = 1;
+KeyboardEvent.DOM_KEY_LOCATION_RIGHT         = 2;
+KeyboardEvent.DOM_KEY_LOCATION_NUMPAD        = 3;
+KeyboardEvent.DOM_KEY_LOCATION_MOBILE        = 4;
+KeyboardEvent.DOM_KEY_LOCATION_JOYSTICK      = 5;
+
+}(/*Envjs.DOM3.KeyboardEvent*/));
+
+
+//We dont fire mutation events until someone has registered for them
+var __supportedMutations__ = /DOMSubtreeModified|DOMNodeInserted|DOMNodeRemoved|DOMAttrModified|DOMCharacterDataModified/;
+
+var __fireMutationEvents__ = Aspect.before({
+    target: EventTarget,
+    method: 'addEventListener'
+}, function(target, type){
+    if(type && type.match(__supportedMutations__)){
+        //unweaving removes the __addEventListener__ aspect
+        __fireMutationEvents__.unweave();
+        // These two methods are enough to cover all dom 2 manipulations
+        Aspect.around({
+            target: Node,
+            method:"removeChild"
+        }, function(invocation){
+            var event,
+                node = invocation['arguments'][0];
+            event = node.ownerDocument.createEvent('MutationEvents');
+            event.initEvent('DOMNodeRemoved', true, false, node.parentNode, null, null, null, null);
+            node.dispatchEvent(event, false);
+            return invocation.proceed();
+
+        });
+        Aspect.around({
+            target: Node,
+            method:"appendChild"
+        }, function(invocation) {
+            var event,
+                node = invocation.proceed();
+            event = node.ownerDocument.createEvent('MutationEvents');
+            event.initEvent('DOMNodeInserted', true, false, node.parentNode, null, null, null, null);
+            node.dispatchEvent(event, false);
+            return node;
+        });
+    }
+});
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.MutationEvent').debug('available'); 
+});
+
+/**
+ * @name MutationEvent
+ * @param {Object} options
+ */
+exports.MutationEvent = MutationEvent = function(options) {
+    this._cancelable = false;
+    this._timeStamp = 0;
+};
+
+MutationEvent.prototype = new Event();
+__extend__(MutationEvent.prototype,{
+    get relatedNode(){
+        return this._relatedNode;
+    },
+    get prevValue(){
+        return this._prevValue;
+    },
+    get newValue(){
+        return this._newValue;
+    },
+    get attrName(){
+        return this._attrName;
+    },
+    get attrChange(){
+        return this._attrChange;
+    },
+    initMutationEvent: function( type, bubbles, cancelable,
+            relatedNode, prevValue, newValue, attrName, attrChange ){
+        this._relatedNode = relatedNode;
+        this._prevValue = prevValue;
+        this._newValue = newValue;
+        this._attrName = attrName;
+        this._attrChange = attrChange;
+        switch(type){
+            case "DOMSubtreeModified":
+                this.initEvent(type, true, false);
+                break;
+            case "DOMNodeInserted":
+                this.initEvent(type, true, false);
+                break;
+            case "DOMNodeRemoved":
+                this.initEvent(type, true, false);
+                break;
+            case "DOMNodeRemovedFromDocument":
+                this.initEvent(type, false, false);
+                break;
+            case "DOMNodeInsertedIntoDocument":
+                this.initEvent(type, false, false);
+                break;
+            case "DOMAttrModified":
+                this.initEvent(type, true, false);
+                break;
+            case "DOMCharacterDataModified":
+                this.initEvent(type, true, false);
+                break;
+            default:
+                this.initEvent(type, bubbles, cancelable);
+        }
+    }
+});
+
+// constants
+MutationEvent.ADDITION = 0;
+MutationEvent.MODIFICATION = 1;
+MutationEvent.REMOVAL = 2;
+
+}(/*Envjs.DOM.MutationEvent*/));
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.EventException').debug('available'); 
+});
+
+/**
+ * @name EventException
+ */
+exports.EventException = EventException = function(code) {
+  this.code = code;
+};
+EventException.UNSPECIFIED_EVENT_TYPE_ERR = 0;
+
+}(/*Envjs.DOM2.EventException*/));
+/**
+ *
+ * DOM Level 2: http://www.w3.org/TR/DOM-Level-2-Events/events.html
+ * DOM Level 3: http://www.w3.org/TR/DOM-Level-3-Events/
+ *
+ * interface DocumentEvent {
+ *   Event createEvent (in DOMString eventType)
+ *      raises (DOMException);
+ * };
+ *
+ * Firefox (3.6) exposes DocumentEvent
+ * Safari (4) does NOT.
+ */
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+   log = Envjs.logger('Envjs.DOM.DocumentEvent').debug('available'); 
+});
+
+/**
+ * TODO: Not sure we need a full prototype.  We not just an regular object?
+ */
+exports.DocumentEvent = DocumentEvent = function(){};
+DocumentEvent.prototype.__EventMap__ = {
+    // Safari4: singular and plural forms accepted
+    // Firefox3.6: singular and plural forms accepted
+    'Event'          : Event,
+    'Events'         : Event,
+    'UIEvent'        : UIEvent,
+    'UIEvents'       : UIEvent,
+    'MouseEvent'     : MouseEvent,
+    'MouseEvents'    : MouseEvent,
+    'MutationEvent'  : MutationEvent,
+    'MutationEvents' : MutationEvent,
+
+    // Safari4: accepts HTMLEvents, but not HTMLEvent
+    // Firefox3.6: accepts HTMLEvents, but not HTMLEvent
+    'HTMLEvent'      : Event,
+    'HTMLEvents'     : Event,
+
+    // Safari4: both not accepted
+    // Firefox3.6, only KeyEvents is accepted
+    'KeyEvent'       : KeyboardEvent,
+    'KeyEvents'      : KeyboardEvent,
+
+    // Safari4: both accepted
+    // Firefox3.6: none accepted
+    'KeyboardEvent'  : KeyboardEvent,
+    'KeyboardEvents' : KeyboardEvent
+};
+
+DocumentEvent.prototype.createEvent = function(eventType) {
+    var Clazz = this.__EventMap__[eventType];
+    if (Clazz) {
+        return new Clazz();
+    }
+    throw(new DOMException(DOMException.NOT_SUPPORTED_ERR));
+};
+
+__extend__(Document.prototype, DocumentEvent.prototype);
+
+
+}(/*Envjs.DOM.DocumentEvent*/));
+
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/html.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/html.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/html.js	(revision 76)
@@ -0,0 +1,4997 @@
+/*
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ *
+ * This file simply provides the global definitions we need to
+ * be able to correctly implement to core browser DOM HTML interfaces.
+
+ // These are exported/leaked globally
+
+    HTMLDocument,
+    HTMLElement,
+    HTMLCollection,
+    HTMLAnchorElement,
+    HTMLAreaElement,
+    HTMLBaseElement,
+    HTMLQuoteElement,
+    HTMLBodyElement,
+    HTMLBRElement,
+    HTMLButtonElement,
+    CanvasRenderingContext2D,
+    HTMLCanvasElement,
+    HTMLTableColElement,
+    HTMLModElement,
+    HTMLDivElement,
+    HTMLDListElement,
+    HTMLFieldSetElement,
+    HTMLFormElement,
+    HTMLFrameElement,
+    HTMLFrameSetElement,
+    HTMLHeadElement,
+    HTMLHeadingElement,
+    HTMLHRElement,
+    HTMLHtmlElement,
+    HTMLIFrameElement,
+    HTMLImageElement,
+    HTMLInputElement,
+    HTMLLabelElement,
+    HTMLLegendElement,
+    HTMLLIElement,
+    HTMLLinkElement,
+    HTMLMapElement,
+    HTMLMetaElement,
+    HTMLObjectElement,
+    HTMLOListElement,
+    HTMLOptGroupElement,
+    HTMLOptionElement,
+    HTMLParagraphElement,
+    HTMLParamElement,
+    HTMLPreElement,
+    HTMLScriptElement,
+    HTMLSelectElement,
+    HTMLSpanElement,
+    HTMLStyleElement,
+    HTMLTableElement,
+    HTMLTableSectionElement,
+    HTMLTableCellElement,
+    HTMLTableDataCellElement,
+    HTMLTableHeaderCellElement,
+    HTMLTableRowElement,
+    HTMLTextAreaElement,
+    HTMLTitleElement,
+    HTMLUListElement,
+    HTMLUnknownElement,
+    Image,
+    Option,
+    __loadImage__,
+    __loadLink__;
+*/
+
+var Envjs = Envjs || require('./platform/core').Envjs,
+	After = After || require('./platform/core').After,
+	Document = Document || require('./dom').Document,
+	Element = Element || require('./dom').Element,
+	NodeList = NodeList || require('./dom').NodeList,
+	Node = Node || require('./dom').Node,
+	Event = Event || require('./event').Event;
+	
+/*
+ * Envjs html.1.3.pre03 
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author ariel flesler
+ *    http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html
+ * @param {Object} str
+ */
+function __trim__( str ){
+    return (str || "").replace( /^\s+|\s+$/g, "" );
+}
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    } 
+    return a;
+}
+
+/**
+ * @author john resig
+ */
+//from jQuery
+function __setArray__( target, array ) {
+    // Resetting the length to 0, then using the native Array push
+    // is a super-fast way to populate an object with array-like properties
+    target.length = 0;
+    Array.prototype.push.apply( target, array );
+}
+var __addNamedMap__,
+    __removeNamedMap__,
+    __isNamedElement__,
+    __selectparent__ ,//see option.js
+    __updateoptions__, //see option.js
+    __loadLink__; //see link.js 
+/**
+ * @class  HTMLDocument
+ *      The Document interface represents the entire HTML or XML document.
+ *      Conceptually, it is the root of the document tree, and provides
+ *      the primary access to the document's data.
+ *
+ * @extends Document
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLDocument').
+        debug('HTMLDocument available');    
+});
+
+exports.HTMLDocument = HTMLDocument = function(implementation, ownerWindow, referrer) {
+    Document.apply(this, arguments);
+    this.referrer = referrer || '';
+    this.baseURI = "about:blank";
+    this.ownerWindow = ownerWindow;
+};
+
+HTMLDocument.prototype = new Document();
+
+__extend__(HTMLDocument.prototype, {
+    createElement: function(tagName){
+        var node;
+        tagName = tagName.toUpperCase();
+        // create Element specifying 'this' as ownerDocument
+        // This is an html document so we need to use explicit interfaces per the
+        //TODO: would be much faster as a big switch
+        switch(tagName){
+        case "A":
+            node = new HTMLAnchorElement(this);break;
+        case "AREA":
+            node = new HTMLAreaElement(this);break;
+        case "BASE":
+            node = new HTMLBaseElement(this);break;
+        case "BLOCKQUOTE":
+            node = new HTMLQuoteElement(this);break;
+        case "CANVAS":
+            node = new HTMLCanvasElement(this);break;
+        case "Q":
+            node = new HTMLQuoteElement(this);break;
+        case "BODY":
+            node = new HTMLBodyElement(this);break;
+        case "BR":
+            node = new HTMLBRElement(this);break;
+        case "BUTTON":
+            node = new HTMLButtonElement(this);break;
+        case "CAPTION":
+            node = new HTMLElement(this);break;
+        case "COL":
+            node = new HTMLTableColElement(this);break;
+        case "COLGROUP":
+            node = new HTMLTableColElement(this);break;
+        case "DEL":
+            node = new HTMLModElement(this);break;
+        case "INS":
+            node = new HTMLModElement(this);break;
+        case "DIV":
+            node = new HTMLDivElement(this);break;
+        case "DL":
+            node = new HTMLDListElement(this);break;
+        case "DT":
+            node = new HTMLElement(this); break;
+        case "FIELDSET":
+            node = new HTMLFieldSetElement(this);break;
+        case "FORM":
+            node = new HTMLFormElement(this);break;
+        case "FRAME":
+            node = new HTMLFrameElement(this);break;
+        case "FRAMESET":
+            node = new HTMLFrameSetElement(this);break;
+        case "H1":
+            node = new HTMLHeadingElement(this);break;
+        case "H2":
+            node = new HTMLHeadingElement(this);break;
+        case "H3":
+            node = new HTMLHeadingElement(this);break;
+        case "H4":
+            node = new HTMLHeadingElement(this);break;
+        case "H5":
+            node = new HTMLHeadingElement(this);break;
+        case "H6":
+            node = new HTMLHeadingElement(this);break;
+        case "HEAD":
+            node = new HTMLHeadElement(this);break;
+        case "HR":
+            node = new HTMLHRElement(this);break;
+        case "HTML":
+            node = new HTMLHtmlElement(this);break;
+        case "IFRAME":
+            node = new HTMLIFrameElement(this);break;
+        case "IMG":
+            node = new HTMLImageElement(this);break;
+        case "INPUT":
+            node = new HTMLInputElement(this);break;
+        case "LABEL":
+            node = new HTMLLabelElement(this);break;
+        case "LEGEND":
+            node = new HTMLLegendElement(this);break;
+        case "LI":
+            node = new HTMLLIElement(this);break;
+        case "LINK":
+            node = new HTMLLinkElement(this);break;
+        case "MAP":
+            node = new HTMLMapElement(this);break;
+        case "META":
+            node = new HTMLMetaElement(this);break;
+        case "NOSCRIPT":
+            node = new HTMLElement(this);break;
+        case "OBJECT":
+            node = new HTMLObjectElement(this);break;
+        case "OPTGROUP":
+            node = new HTMLOptGroupElement(this);break;
+        case "OL":
+            node = new HTMLOListElement(this); break;
+        case "OPTION":
+            node = new HTMLOptionElement(this);break;
+        case "P":
+            node = new HTMLParagraphElement(this);break;
+        case "PARAM":
+            node = new HTMLParamElement(this);break;
+        case "PRE":
+            node = new HTMLPreElement(this);break;
+        case "SCRIPT":
+            node = new HTMLScriptElement(this);break;
+        case "SELECT":
+            node = new HTMLSelectElement(this);break;
+        case "SMALL":
+            node = new HTMLElement(this);break;
+        case "SPAN":
+            node = new HTMLSpanElement(this);break;
+        case "STRONG":
+            node = new HTMLElement(this);break;
+        case "STYLE":
+            node = new HTMLStyleElement(this);break;
+        case "TABLE":
+            node = new HTMLTableElement(this);break;
+        case "TBODY":
+            node = new HTMLTableSectionElement(this);break;
+        case "TFOOT":
+            node = new HTMLTableSectionElement(this);break;
+        case "THEAD":
+            node = new HTMLTableSectionElement(this);break;
+        case "TD":
+            node = new HTMLTableDataCellElement(this);break;
+        case "TH":
+            node = new HTMLTableHeaderCellElement(this);break;
+        case "TEXTAREA":
+            node = new HTMLTextAreaElement(this);break;
+        case "TITLE":
+            node = new HTMLTitleElement(this);break;
+        case "TR":
+            node = new HTMLTableRowElement(this);break;
+        case "UL":
+            node = new HTMLUListElement(this);break;
+        default:
+            node = new HTMLUnknownElement(this);
+        }
+        // assign values to properties (and aliases)
+        node.nodeName  = tagName;
+        return node;
+    },
+    createElementNS : function (uri, local) {
+        //print('createElementNS :'+uri+" "+local);
+        if(!uri){
+            return this.createElement(local);
+        }else if ("http://www.w3.org/1999/xhtml" == uri) {
+            return this.createElement(local);
+        } else if ("http://www.w3.org/1998/Math/MathML" == uri) {
+            return this.createElement(local);
+        } else if ("http://www.w3.org/2000/svg" == uri) {
+            return this.createElement(local);
+        } else {
+            return Document.prototype.createElementNS.apply(this,[uri, local]);
+        }
+    },
+    get anchors(){
+        return new HTMLCollection(this.getElementsByTagName('a'));
+    },
+    get applets(){
+        return new HTMLCollection(this.getElementsByTagName('applet'));
+    },
+    get documentElement(){
+        var html = Document.prototype.__lookupGetter__('documentElement').apply(this,[]);
+        if( html === null){
+            html = this.createElement('html');
+            this.appendChild(html);
+            html.appendChild(this.createElement('head'));
+            html.appendChild(this.createElement('body'));
+        }
+        return html;
+    },
+    //document.head is non-standard
+    get head(){
+        //console.log('get head');
+        if (!this.documentElement) {
+            this.appendChild(this.createElement('html'));
+        }
+        var element = this.documentElement,
+            length = element.childNodes.length,
+            i;
+        //check for the presence of the head element in this html doc
+        for(i=0;i<length;i++){
+            if(element.childNodes[i].nodeType === Node.ELEMENT_NODE){
+                if(element.childNodes[i].tagName.toLowerCase() === 'head'){
+                    return element.childNodes[i];
+                }
+            }
+        }
+        //no head?  ugh bad news html.. I guess we'll force the issue?
+        var head = element.appendChild(this.createElement('head'));
+        return head;
+    },
+    get title(){
+        //console.log('get title');
+        if (!this.documentElement) {
+            this.appendChild(this.createElement('html'));
+        }
+        var title,
+            head = this.head,
+            length = head.childNodes.length,
+            i;
+        //check for the presence of the title element in this head element
+        for(i=0;i<length;i++){
+            if(head.childNodes[i].nodeType === Node.ELEMENT_NODE){
+                if(head.childNodes[i].tagName.toLowerCase() === 'title'){
+                    return head.childNodes[i].textContent;
+                }
+            }
+        }
+        //no title?  ugh bad news html.. I guess we'll force the issue?
+        title = head.appendChild(this.createElement('title'));
+        return title.appendChild(this.createTextNode('Untitled Document')).nodeValue;
+    },
+    set title(titleStr){
+        //console.log('set title %s', titleStr);
+        if (!this.documentElement) {
+            this.appendChild(this.createElement('html'));
+        }
+        var title = this.title;
+        title.textContent = titleStr;
+    },
+
+    get body() {
+        var element = this.documentElement,
+            length = element.childNodes.length,
+            i;
+        for (i=0; i<length; i++) {
+            if (element.childNodes[i].nodeType === Node.ELEMENT_NODE &&
+                (element.childNodes[i].tagName === 'BODY' || 
+                 element.childNodes[i].tagName === 'FRAMESET')) {
+                return element.childNodes[i];
+            }
+        }
+        return null;
+    },
+    set body() {
+        /* in firefox this is a benevolent do nothing*/
+        console.log('set body');
+    },
+
+    get cookie(){
+        return Envjs.getCookies(this.location+'');
+    },
+    set cookie(cookie){
+        return Envjs.setCookie(this.location+'', cookie);
+    },
+
+    /**
+     * document.location
+     *
+     * should be identical to window.location
+     *
+     * HTML5:
+     * http://dev.w3.org/html5/spec/Overview.html#the-location-interface
+     *
+     * Mozilla MDC:
+     * https://developer.mozilla.org/en/DOM/document.location
+     *
+     */
+    get location() {
+        if (this.ownerWindow) {
+            return this.ownerWindow.location;
+        } else {
+            return this.baseURI;
+        }
+    },
+    set location(url) {
+        this.baseURI = url;
+        if (this.ownerWindow) {
+            this.ownerWindow.location = url;
+        }
+    },
+
+    /**
+     * document.URL (read-only)
+     *
+     * HTML DOM Level 2:
+     * http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-46183437
+     *
+     * HTML5:
+     * http://dev.w3.org/html5/spec/Overview.html#dom-document-url
+     *
+     * Mozilla MDC:
+     * https://developer.mozilla.org/en/DOM/document.URL
+     */
+    get URL() {
+        return this.location.href;
+    },
+
+    /**
+     * document.domain
+     *
+     * HTML5 Spec:
+     * http://dev.w3.org/html5/spec/Overview.html#dom-document-domain
+     *
+     * Mozilla MDC:
+     * https://developer.mozilla.org/en/DOM/document.domain
+     *
+     */
+    get domain(){
+        var HOSTNAME = new RegExp('//([^:/]+)'),
+            matches = HOSTNAME.exec(this.baseURI);
+        return matches&&matches.length>1?matches[1]:"";
+    },
+    set domain(value){
+        var i,
+            domainParts = this.domain.split('.').reverse(),
+            newDomainParts = value.split('.').reverse();
+        if(newDomainParts.length > 1){
+            for(i=0;i<newDomainParts.length;i++){
+                if(newDomainParts[i] !== domainParts[i]){
+                    return;
+                }
+            }
+            this.baseURI = this.baseURI.replace(domainParts.join('.'), value);
+        }
+    },
+
+    get forms(){
+        return new HTMLCollection(this.getElementsByTagName('form'));
+    },
+    get images(){
+        return new HTMLCollection(this.getElementsByTagName('img'));
+    },
+    get lastModified(){
+        /* TODO */
+        return this._lastModified;
+    },
+    get links(){
+        return new HTMLCollection(this.getElementsByTagName('a'));
+    },
+    getElementsByName : function(name){
+        //console.log('getting elements for name %s', name);
+        if(!(this._indexes_['@'+name])){
+            this._indexes_["@"+name] = new NodeList(this, this.documentElement);
+        }
+        return this._indexes_["@"+name];
+    },
+    toString: function(){
+        return "[object HTMLDocument]";
+    },
+    get innerHTML(){
+        return this.documentElement.outerHTML;
+    }
+});
+
+}(/*HTMLDocument*/));
+
+Aspect.around({
+    target: Node,
+    method:"appendChild"
+}, function(invocation) {
+    var event,
+        okay,
+        node = invocation.proceed(),
+        doc = node.ownerDocument,
+        target;
+
+    //console.log('element appended: %s %s %s', node+'', node.nodeName, node.namespaceURI);
+    if((node.nodeType !== Node.ELEMENT_NODE)){
+        //for now we are only handling element insertions.  probably
+        //we will need to handle text node changes to script tags and
+        //changes to src attributes
+        return node;
+    }
+    
+    if(node.tagName&&node.tagName.toLowerCase()=="input"){
+        target = node.parentNode;
+        //console.log('adding named map for input');
+        while(target&&target.tagName&&target.tagName.toLowerCase()!="form"){
+            //console.log('possible target for named map for input is %s', target);
+            target = target.parentNode;
+        }
+        if(target){
+            //console.log('target for named map for input is %s', target);
+            __addNamedMap__(target, node);
+        }
+    }
+    //console.log('appended html element %s %s %s', node.namespaceURI, node.nodeName, node);
+    switch(doc.parsing){
+        case true:
+
+            /**
+             * Very special case.  While in parsing mode, in head, a
+             * script can add another script tag to the head, and it will
+             * be evaluated.  This is tested in 'ant fulldoc-spec' tests.
+             *
+             * Not quite sure if the require that the new script tag must
+             * be in the head is correct or not.  NamespaceURI == null
+             * might also need to corrected too.
+             */
+            if (node.tagName.toLowerCase() === 'script' && 
+                (node.namespaceURI === "" || 
+                 node.namespaceURI === "http://www.w3.org/1999/xhtml" || 
+                 node.namespaceURI === null) ) {
+                //console.log('appending script while parsing');
+                if((this.nodeName.toLowerCase() === 'head')){
+                    try{
+                        okay = Envjs.loadLocalScript(node, null);
+                        //console.log('loaded script? %s %s', node.uuid, okay);
+                        // only fire event if we actually had something to load
+                        if (node.src && node.src.length > 0){
+                            event = doc.createEvent('HTMLEvents');
+                            event.initEvent( okay ? "load" : "error", false, false );
+                            node.dispatchEvent( event, false );
+                        }
+                    }catch(e){
+                        console.log('error loading html element %s %e', node, e.toString());
+                    }
+                }
+            }
+            break;
+        case false:
+            switch(node.namespaceURI){
+                case null:
+                    //fall through
+                case "":
+                    //fall through
+                case "http://www.w3.org/1999/xhtml":
+                    switch(node.tagName.toLowerCase()){
+                        case 'style':
+                            document.styleSheets.push(new CSSStyleSheet(node));
+                            break;
+                        case 'script':
+                            //console.log('appending script %s', node.src);
+                            if((this.nodeName.toLowerCase() === 'head')){
+                                try{
+                                    okay = Envjs.loadLocalScript(node, null);
+                                    //console.log('loaded script? %s %s', node.uuid, okay);
+                                    // only fire event if we actually had something to load
+                                    if (node.src && node.src.length > 0){
+                                        event = doc.createEvent('HTMLEvents');
+                                        event.initEvent( okay ? "load" : "error", false, false );
+                                        node.dispatchEvent( event, false );
+                                    }
+                                }catch(ee){
+                                    console.log('error loading html element %s %e', node, ee.toString());
+                                }
+                            }
+                            break;
+                        case 'frame':
+                        case 'iframe':
+                            node.contentWindow = { };
+                            node.contentDocument = new HTMLDocument(new DOMImplementation(), node.contentWindow);
+                            node.contentWindow.document = node.contentDocument;
+                            try{
+                                if(Window){
+                                    //console.log("iframe appended to document %s", node);
+                                }
+                            }catch(eee){
+                                node.contentDocument.addEventListener('DOMContentLoaded', function(){
+                                    event = node.contentDocument.createEvent('HTMLEvents');
+                                    event.initEvent("load", false, false);
+                                    node.dispatchEvent( event, false );
+                                });
+                                console.log('error loading html element %s %e', node, eee.toString());
+                            }
+                            try{
+                                if (node.src && node.src.length > 0){
+                                    //console.log("trigger load on frame from appendChild %s", node.src);
+                                    Envjs.loadFrame(node, Envjs.uri(node.src, doc.location+''));
+                                }else{
+                                    Envjs.loadFrame(node);
+                                }
+                            }catch(_e){
+                                console.log('error loading html element %s %e', node, _e.toString());
+                            }
+                            break;
+
+                        case 'link':
+                            if (node.href && node.href.length > 0) {
+                                Envjs.loadLink(node, node.href);
+                            }
+                            break;
+                            /*
+                              case 'img':
+                              if (node.src && node.src.length > 0){
+                              // don't actually load anything, so we're "done" immediately:
+                              event = doc.createEvent('HTMLEvents');
+                              event.initEvent("load", false, false);
+                              node.dispatchEvent( event, false );
+                              }
+                              break;
+                            */
+                        case 'option':
+                            __updateoptions__(node);
+                            break;
+                        default:
+                            if(node.getAttribute('onload')){
+                                //console.log('calling attribute onload %s | %s', node.onload, node.tagName);
+                                node.onload();
+                            }
+                    }//switch on name
+                    break;
+                default:
+                    break;
+            }//switch on ns
+            break;
+        default:
+            break;
+            // console.log('element appended: %s %s', node+'', node.namespaceURI);
+    }//switch on doc.parsing
+    return node;
+
+});
+
+Aspect.around({
+    target: Node,
+    method:"removeChild"
+}, function(invocation) {
+    var event,
+        okay,
+        target,
+        node = invocation.proceed(),
+        doc = node.ownerDocument;
+    if((node.nodeType !== Node.ELEMENT_NODE)){
+        //for now we are only handling element insertions.  probably we will need
+        //to handle text node changes to script tags and changes to src
+        //attributes
+        if(node.nodeType !== Node.DOCUMENT_NODE && node.uuid){
+            //console.log('removing event listeners, %s', node, node.uuid);
+            node.removeEventListener('*', null, null);
+        }
+        return node;
+    }
+    //console.log('appended html element %s %s %s', node.namespaceURI, node.nodeName, node);
+    if(node.tagName&&node.tagName.toLowerCase()=="input"){
+        target = node.parentNode;
+        //console.log('adding named map for input');
+        while(target&&target.tagName&&target.tagName.toLowerCase()!="form"){
+            //console.log('possible target for named map for input is %s', target);
+            target = target.parentNode;
+        }
+        if(target){
+            //console.log('target for named map for input is %s', target);
+            __removeNamedMap__(target, node);
+        }
+    }
+    switch(doc.parsing){
+        case true:
+            //handled by parser if included
+            break;
+        case false:
+            switch(node.namespaceURI){
+                case null:
+                    //fall through
+                case "":
+                    //fall through
+                case "http://www.w3.org/1999/xhtml":
+                    //this is interesting dillema since our event engine is
+                    //storing the registered events in an array accessed
+                    //by the uuid property of the node.  unforunately this
+                    //means listeners hang out way after(forever ;)) the node
+                    //has been removed and gone out of scope.
+                    //console.log('removing event listeners, %s', node, node.uuid);
+                    node.removeEventListener('*', null, null);
+                    switch(node.tagName.toLowerCase()){
+                        case 'frame':
+                        case 'iframe':
+                            try{
+                                //console.log('removing iframe document');
+                                try{
+                                    Envjs.unloadFrame(node);
+                                }catch(ee){
+                                    console.log('error freeing resources from frame %s', ee);
+                                }
+                                node.contentWindow = null;
+                                node.contentDocument = null;
+                            }catch(e){
+                                console.log('error unloading html element %s %e', node, e.toString());
+                            }
+                            break;
+                        default:
+                    }//switch on name
+                    break;
+                default:
+            }//switch on ns
+            break;
+        default:
+            console.log('element appended: %s %s', node+'', node.namespaceURI);
+    }//switch on doc.parsing
+    return node;
+
+});
+
+
+
+/**
+ * Named Element Support
+ *
+ *
+ */
+
+/*
+ *
+ * @returns 'name' if the node has a appropriate name
+ *          null if node does not have a name
+ */
+
+__isNamedElement__ = function(node) {
+    if (node.nodeType !== Node.ELEMENT_NODE) {
+        return null;
+    }
+    var tagName = node.tagName.toLowerCase();
+    var nodename = null;
+
+    switch (tagName) {
+        case 'embed':
+        case 'form':
+        case 'iframe':
+        case 'input':
+            nodename = node.getAttribute('name');
+            break;
+        case 'applet':
+            nodename = node.id;
+            break;
+        case 'object':
+            // TODO: object needs to be 'fallback free'
+            nodename = node.id;
+            break;
+        case 'img':
+            nodename = node.id;
+            if (!nodename || ! node.getAttribute('name')) {
+                nodename = null;
+            }
+            break;
+    }
+    return (nodename) ? nodename : null;
+};
+
+
+__addNamedMap__ = function(target, node) {
+    var nodename = __isNamedElement__(node);
+    if (nodename) {
+        target.__defineGetter__(nodename, function() {
+            return node;
+        }); 
+        target.__defineSetter__(nodename, function(value) {
+            return value;
+        });
+    }
+};
+
+__removeNamedMap__ = function(target, node) {
+    if (!node) {
+        return;
+    }
+    var nodename = __isNamedElement__(node);
+    if (nodename) {
+        delete target[nodename];
+    }
+};
+
+
+
+/**
+ * @name HTMLEvents
+ * @w3c:domlevel 2
+ * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
+ */
+
+var __eval__ = function(script, node){
+    if (script !== "" && Envjs.scriptTypes['']){
+        // don't assemble environment if no script...
+        try{
+            Envjs['eval'](node.ownerDocument.ownerWindow, script, script+" ("+node+")");
+        }catch(e){
+            console.log('error evaluating %s', e);
+        }
+    }
+};
+
+var HTMLEvents = function(){};
+HTMLEvents.prototype = {
+    onload: function(event){
+        __eval__(this.getAttribute('onload')||'', this);
+    },
+    onunload: function(event){
+        __eval__(this.getAttribute('onunload')||'', this);
+    },
+    onabort: function(event){
+        __eval__(this.getAttribute('onabort')||'', this);
+    },
+    onerror: function(event){
+        __eval__(this.getAttribute('onerror')||'', this);
+    },
+    onselect: function(event){
+        __eval__(this.getAttribute('onselect')||'', this);
+    },
+    onchange: function(event){
+        __eval__(this.getAttribute('onchange')||'', this);
+    },
+    onsubmit: function(event){
+        if (__eval__(this.getAttribute('onsubmit')||'', this)) {
+            this.submit();
+        }
+    },
+    onreset: function(event){
+        __eval__(this.getAttribute('onreset')||'', this);
+    },
+    onfocus: function(event){
+        __eval__(this.getAttribute('onfocus')||'', this);
+    },
+    onblur: function(event){
+        __eval__(this.getAttribute('onblur')||'', this);
+    },
+    onresize: function(event){
+        __eval__(this.getAttribute('onresize')||'', this);
+    },
+    onscroll: function(event){
+        __eval__(this.getAttribute('onscroll')||'', this);
+    }
+};
+
+//HTMLDocument, HTMLFramesetElement, HTMLObjectElement
+var  __load__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("load", false, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//HTMLFramesetElement, HTMLBodyElement
+var  __unload__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("unload", false, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//HTMLObjectElement
+var  __abort__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("abort", true, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//HTMLFramesetElement, HTMLObjectElement, HTMLBodyElement
+var  __error__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("error", true, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//HTMLInputElement, HTMLTextAreaElement
+var  __select__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("select", true, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement
+var  __change__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("change", true, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//HtmlFormElement
+var __submit__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("submit", true, true);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//HtmlFormElement
+var  __reset__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("reset", false, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//LABEL, INPUT, SELECT, TEXTAREA, and BUTTON
+var __focus__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("focus", false, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//LABEL, INPUT, SELECT, TEXTAREA, and BUTTON
+var __blur__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("blur", false, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//Window
+var __resize__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("resize", true, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+//Window
+var __scroll__ = function(element){
+    var event = new Event('HTMLEvents');
+    event.initEvent("scroll", true, false);
+    element.dispatchEvent(event);
+    return event;
+};
+
+/**
+ * @name KeyboardEvents
+ * @w3c:domlevel 2 
+ * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
+ */
+var KeyboardEvents= function(){};
+KeyboardEvents.prototype = {
+    onkeydown: function(event){
+        __eval__(this.getAttribute('onkeydown')||'', this);
+    },
+    onkeypress: function(event){
+        __eval__(this.getAttribute('onkeypress')||'', this);
+    },
+    onkeyup: function(event){
+        __eval__(this.getAttribute('onkeyup')||'', this);
+    }
+};
+
+
+var __registerKeyboardEventAttrs__ = function(elm){
+    if(elm.hasAttribute('onkeydown')){ 
+        elm.addEventListener('keydown', elm.onkeydown, false); 
+    }
+    if(elm.hasAttribute('onkeypress')){ 
+        elm.addEventListener('keypress', elm.onkeypress, false); 
+    }
+    if(elm.hasAttribute('onkeyup')){ 
+        elm.addEventListener('keyup', elm.onkeyup, false); 
+    }
+    return elm;
+};
+
+//HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement
+var  __keydown__ = function(element){
+    var event = new Event('KeyboardEvents');
+    event.initEvent("keydown", false, false);
+    element.dispatchEvent(event);
+};
+
+//HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement
+var  __keypress__ = function(element){
+    var event = new Event('KeyboardEvents');
+    event.initEvent("keypress", false, false);
+    element.dispatchEvent(event);
+};
+
+//HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement
+var  __keyup__ = function(element){
+    var event = new Event('KeyboardEvents');
+    event.initEvent("keyup", false, false);
+    element.dispatchEvent(event);
+};
+
+/**
+ * @name MaouseEvents
+ * @w3c:domlevel 2 
+ * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
+ */
+var MouseEvents= function(){};
+MouseEvents.prototype = {
+    onclick: function(event){
+        __eval__(this.getAttribute('onclick')||'', this);
+    },
+    ondblclick: function(event){
+        __eval__(this.getAttribute('ondblclick')||'', this);
+    },
+    onmousedown: function(event){
+        __eval__(this.getAttribute('onmousedown')||'', this);
+    },
+    onmousemove: function(event){
+        __eval__(this.getAttribute('onmousemove')||'', this);
+    },
+    onmouseout: function(event){
+        __eval__(this.getAttribute('onmouseout')||'', this);
+    },
+    onmouseover: function(event){
+        __eval__(this.getAttribute('onmouseover')||'', this);
+    },
+    onmouseup: function(event){
+        __eval__(this.getAttribute('onmouseup')||'', this);
+    }  
+};
+
+var __registerMouseEventAttrs__ = function(elm){
+    if(elm.hasAttribute('onclick')){ 
+        elm.addEventListener('click', elm.onclick, false); 
+    }
+    if(elm.hasAttribute('ondblclick')){ 
+        elm.addEventListener('dblclick', elm.ondblclick, false); 
+    }
+    if(elm.hasAttribute('onmousedown')){ 
+        elm.addEventListener('mousedown', elm.onmousedown, false); 
+    }
+    if(elm.hasAttribute('onmousemove')){ 
+        elm.addEventListener('mousemove', elm.onmousemove, false); 
+    }
+    if(elm.hasAttribute('onmouseout')){ 
+        elm.addEventListener('mouseout', elm.onmouseout, false); 
+    }
+    if(elm.hasAttribute('onmouseover')){ 
+        elm.addEventListener('mouseover', elm.onmouseover, false); 
+    }
+    if(elm.hasAttribute('onmouseup')){ 
+        elm.addEventListener('mouseup', elm.onmouseup, false); 
+    }
+    return elm;
+};
+
+
+var  __click__ = function(element){
+    var event = new Event('MouseEvents');
+    event.initEvent("click", true, true, null, 0,
+                0, 0, 0, 0, false, false, false, 
+                false, null, null);
+    element.dispatchEvent(event);
+};
+var  __mousedown__ = function(element){
+    var event = new Event('MouseEvents');
+    event.initEvent("mousedown", true, true, null, 0,
+                0, 0, 0, 0, false, false, false, 
+                false, null, null);
+    element.dispatchEvent(event);
+};
+var  __mouseup__ = function(element){
+    var event = new Event('MouseEvents');
+    event.initEvent("mouseup", true, true, null, 0,
+                0, 0, 0, 0, false, false, false, 
+                false, null, null);
+    element.dispatchEvent(event);
+};
+var  __mouseover__ = function(element){
+    var event = new Event('MouseEvents');
+    event.initEvent("mouseover", true, true, null, 0,
+                0, 0, 0, 0, false, false, false, 
+                false, null, null);
+    element.dispatchEvent(event);
+};
+var  __mousemove__ = function(element){
+    var event = new Event('MouseEvents');
+    event.initEvent("mousemove", true, true, null, 0,
+                0, 0, 0, 0, false, false, false, 
+                false, null, null);
+    element.dispatchEvent(event);
+};
+var  __mouseout__ = function(element){
+    var event = new Event('MouseEvents');
+    event.initEvent("mouseout", true, true, null, 0,
+                0, 0, 0, 0, false, false, false, 
+                false, null, null);
+    element.dispatchEvent(event);
+};
+
+/**
+ * HTMLElement - DOM Level 2
+ */
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLElement').
+		debug('HTMLElement available');    
+});
+
+/* Hack for http://www.prototypejs.org/
+ *
+ * Prototype 1.6 (the library) creates a new global Element, which causes
+ * envjs to use the wrong Element.
+ *
+ * http://envjs.lighthouseapp.com/projects/21590/tickets/108-prototypejs-wont-load-due-it-clobbering-element
+ *
+ * Options:
+ *  (1) Rename the dom/element to something else
+ *       rejected: been done before. people want Element.
+ *  (2) merge dom+html and not export Element to global namespace
+ *      (meaning we would use a local var Element in a closure, so prototype
+ *      can do what ever it wants)
+ *       rejected: want dom and html separate
+ *  (3) use global namespace (put everything under Envjs = {})
+ *       rejected: massive change
+ *  (4) use commonjs modules (similar to (3) in spirit)
+ *       rejected: massive change
+ *
+ *  or
+ *
+ *  (5) take a reference to Element during initial loading ("compile
+ *      time"), and use the reference instead of "Element".  That's
+ *      what the next line does.  We use __DOMElement__ if we need to
+ *      reference the parent class.  Only this file explcity uses
+ *      Element so this should work, and is the most minimal change I
+ *      could think of with no external API changes.
+ *
+ */
+var  __DOMElement__ = Element;
+
+exports.HTMLElement = HTMLElement = function(ownerDocument) {
+    __DOMElement__.apply(this, arguments);
+};
+
+HTMLElement.prototype = new Element();
+__extend__(HTMLElement.prototype, HTMLEvents.prototype);
+__extend__(HTMLElement.prototype, {
+    get className() {
+        return this.getAttribute("class")||'';
+    },
+    set className(value) {
+        return this.setAttribute("class",__trim__(value));
+    },
+    get dir() {
+        return this.getAttribute("dir")||"ltr";
+    },
+    set dir(val) {
+        return this.setAttribute("dir",val);
+    },
+    get id(){
+        return this.getAttribute('id') || '';
+    },
+    set id(id){
+        this.setAttribute('id', id);
+    },
+    get innerHTML(){
+        var ret = "",
+        i;
+
+        // create string containing the concatenation of the string
+        // values of each child
+        for (i=0; i < this.childNodes.length; i++) {
+            if(this.childNodes[i]){
+                if(this.childNodes[i].nodeType === Node.ELEMENT_NODE){
+                    ret += this.childNodes[i].xhtml;
+                } else if (this.childNodes[i].nodeType === Node.TEXT_NODE && i>0 &&
+                           this.childNodes[i-1].nodeType === Node.TEXT_NODE){
+                    //add a single space between adjacent text nodes
+                    ret += " "+this.childNodes[i].xml;
+                }else{
+                    ret += this.childNodes[i].xml;
+                }
+            }
+        }
+        return ret;
+    },
+    get lang() {
+        return this.getAttribute("lang");
+    },
+    set lang(val) {
+        return this.setAttribute("lang",val);
+    },
+    get offsetHeight(){
+        return Number((this.style.height || '').replace("px",""));
+    },
+    get offsetWidth(){
+        return Number((this.style.width || '').replace("px",""));
+    },
+    offsetLeft: 0,
+    offsetRight: 0,
+    get offsetParent(){
+        /* TODO */
+        return;
+    },
+    set offsetParent(element){
+        /* TODO */
+        return;
+    },
+    scrollHeight: 0,
+    scrollWidth: 0,
+    scrollLeft: 0,
+    scrollRight: 0,
+    get style(){
+        return this.getAttribute('style')||'';
+    },
+    get title() {
+        return this.getAttribute("title");
+    },
+    set title(value) {
+        return this.setAttribute("title", value);
+    },
+    get tabIndex(){
+        var tabindex = this.getAttribute('tabindex');
+        if(tabindex!==null){
+            return Number(tabindex);
+        } else {
+            return 0;
+        }
+    },
+    set tabIndex(value){
+        if (value === undefined || value === null) {
+            value = 0;
+        }
+        this.setAttribute('tabindex',Number(value));
+    },
+    get outerHTML(){
+        //Not in the specs but I'll leave it here for now.
+        return this.xhtml;
+    },
+    scrollIntoView: function(){
+        /*TODO*/
+        return;
+    },
+    toString: function(){
+        return '[object HTMLElement]';
+    },
+    get xhtml() {
+        // HTMLDocument.xhtml is non-standard
+        // This is exactly like Document.xml except the tagName has to be
+        // lower cased.  I dont like to duplicate this but its really not
+        // a simple work around between xml and html serialization via
+        // XMLSerializer (which uppercases html tags) and innerHTML (which
+        // lowercases tags)
+
+        var ret = "",
+            ns = "",
+            name = (this.tagName+"").toLowerCase(),
+            attrs,
+            attrstring = "",
+			style = false,
+            i;
+
+        // serialize namespace declarations
+        if (this.namespaceURI){
+            if((this === this.ownerDocument.documentElement) ||
+               (!this.parentNode) ||
+               (this.parentNode &&
+                (this.parentNode.namespaceURI !== this.namespaceURI))) {
+                ns = ' xmlns' + (this.prefix ? (':' + this.prefix) : '') +
+                    '="' + this.namespaceURI + '"';
+            }
+        }
+
+        // serialize Attribute declarations
+        attrs = this.attributes;
+        for(i=0;i< attrs.length;i++){
+            attrstring += " "+attrs[i].name+'="'+attrs[i].xml+'"';
+			if(attrs[i].name == 'style'){
+				style = true;
+			}
+        }
+		if(!style ){
+			style = this.getAttribute('style');
+			if(style){
+				attrstring += ' style="'+style+'"';
+			}
+		}
+
+        if(this.hasChildNodes()){
+            // serialize this Element
+	        //console.log('serializing childNodes for %s', name);
+            ret += "<" + name + ns + attrstring +">";
+            for(i=0;i< this.childNodes.length;i++){
+                //console.debug('xhtml for '+ this);
+                ret += 'xhtml' in this.childNodes[i] ?
+                    this.childNodes[i].xhtml :
+                    this.childNodes[i].xml;
+            }
+            ret += "</" + name + ">";
+        }else{	
+            //console.log('no childNodes to serialize for %s', name);
+            switch(name){
+            case 'script':
+            case 'noscript':
+                ret += "<" + name + ns + attrstring +"></"+name+">";
+                break;
+            default:
+                ret += "<" + name + ns + attrstring +"/>";
+            }
+        }
+
+        return ret;
+    },
+
+    /**
+     * setAttribute use a dispatch table that other tags can set to
+     *  "listen" to various values being set.  The dispatch table
+     * and registration functions are at the end of the file.
+     *
+     */
+
+    setAttribute: function(name, value) {
+        var result = __DOMElement__.prototype.setAttribute.apply(this, arguments);
+        __addNamedMap__(this.ownerDocument, this);
+        var tagname = this.tagName;
+        var callback = HTMLElement.getAttributeCallback('set', tagname, name);
+        if (callback) {
+            callback(this, value);
+        }
+    },
+    setAttributeNS: function(namespaceURI, name, value) {
+        var result = __DOMElement__.prototype.setAttributeNS.apply(this, arguments);
+        __addNamedMap__(this.ownerDocument, this);
+        var tagname = this.tagName;
+        var callback = HTMLElement.getAttributeCallback('set', tagname, name);
+        if (callback) {
+            callback(this, value);
+        }
+
+        return result;
+    },
+    setAttributeNode: function(newnode) {
+        var result = __DOMElement__.prototype.setAttributeNode.apply(this, arguments);
+        __addNamedMap__(this.ownerDocument, this);
+        var tagname = this.tagName;
+        var callback = HTMLElement.getAttributeCallback('set', tagname, newnode.name);
+        if (callback) {
+            callback(this, newnode.value);
+        }
+        return result;
+    },
+    setAttributeNodeNS: function(newnode) {
+        var result = __DOMElement__.prototype.setAttributeNodeNS.apply(this, arguments);
+        __addNamedMap__(this.ownerDocument, this);
+        var tagname = this.tagName;
+        var callback = HTMLElement.getAttributeCallback('set', tagname, newnode.name);
+        if (callback) {
+            callback(this, newnode.value);
+        }
+        return result;
+    },
+    removeAttribute: function(name) {
+        __removeNamedMap__(this.ownerDocument, this);
+        return __DOMElement__.prototype.removeAttribute.apply(this, arguments);
+    },
+    removeAttributeNS: function(namespace, localname) {
+        __removeNamedMap__(this.ownerDocument, this);
+        return __DOMElement__.prototype.removeAttributeNS.apply(this, arguments);
+    },
+    removeAttributeNode: function(name) {
+        __removeNamedMap__(this.ownerDocument, this);
+        return __DOMElement__.prototype.removeAttributeNode.apply(this, arguments);
+    },
+    removeChild: function(oldChild) {
+        __removeNamedMap__(this.ownerDocument, oldChild);
+        return __DOMElement__.prototype.removeChild.apply(this, arguments);
+    },
+    importNode: function(othernode, deep) {
+        var newnode = __DOMElement__.prototype.importNode.apply(this, arguments);
+        __addNamedMap__(this.ownerDocument, newnode);
+        return newnode;
+    },
+
+    // not actually sure if this is needed or not
+    replaceNode: function(newchild, oldchild) {
+        var newnode = __DOMElement__.prototype.replaceNode.apply(this, arguments);
+        __removeNamedMap__(this.ownerDocument, oldchild);
+        __addNamedMap__(this.ownerDocument, newnode);
+                return newnode;
+    }
+});
+
+
+HTMLElement.attributeCallbacks = {};
+HTMLElement.registerSetAttribute = function(tag, attrib, callbackfn) {
+    HTMLElement.attributeCallbacks[tag + ':set:' + attrib] = callbackfn;
+};
+HTMLElement.registerRemoveAttribute = function(tag, attrib, callbackfn) {
+    HTMLElement.attributeCallbacks[tag + ':remove:' + attrib] = callbackfn;
+};
+
+/**
+ * This is really only useful internally
+ *
+ */
+HTMLElement.getAttributeCallback = function(type, tag, attrib) {
+    return HTMLElement.attributeCallbacks[tag + ':' + type + ':' + attrib] || null;
+};
+
+}(/*HTMLElement*/));
+/*
+ * HTMLCollection
+ *
+ * HTML5 -- 2.7.2.1 HTMLCollection
+ * http://dev.w3.org/html5/spec/Overview.html#htmlcollection
+ * http://dev.w3.org/html5/spec/Overview.html#collections
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLCollection').
+		debug('HTMLCollection available');    
+});
+
+exports.HTMLCollection = HTMLCollection = function(nodelist, type) {
+	__extend__(nodelist,{
+		namedItem: function (name) {
+	        return this[name] || null;
+	    },
+
+	    toString: function() {
+	        return '[object HTMLCollection]';
+	    }
+	});
+    var n;
+    for (var i=0; i<nodelist.length; i++) {
+        n = nodelist[i].id;
+        if (n && !nodelist[n]) {
+            nodelist[n] = nodelist[i];
+        }
+        n = nodelist[i].name;
+        if (n && !nodelist[n]) {
+            nodelist[n] = nodelist[i];
+        }
+    }
+	return nodelist;
+};
+
+HTMLCollection.prototype = new NodeList();
+__extend__(HTMLCollection.prototype, {
+
+    namedItem: function (name) {
+        return this[name] || null;
+    },
+
+    toString: function() {
+        return '[object HTMLCollection]';
+    }
+});
+
+}(/*Envjs.HTML.HTMLCollection*/));
+
+/*
+ *  a set of convenience classes to centralize implementation of
+ * properties and methods across multiple in-form elements
+ *
+ *  the hierarchy of related HTML elements and their members is as follows:
+ *
+ * Condensed Version
+ *
+ *  HTMLInputCommon
+ *     * legent (no value attr)
+ *     * fieldset (no value attr)
+ *     * label (no value attr)
+ *     * option (custom value)
+ *  HTMLTypeValueInputs (extends InputCommon)
+ *     * select  (custom value)
+ *     * button (just sets value)
+ *  HTMLInputAreaCommon (extends TypeValueIput)
+ *     * input  (custom)
+ *     * textarea (just sets value)
+ *
+ * -----------------------
+ *    HTMLInputCommon:  common to all elements
+ *       .form
+ *
+ *    <legend>
+ *          [common plus:]
+ *       .align
+ *
+ *    <fieldset>
+ *          [identical to "legend" plus:]
+ *       .margin
+ *
+ *
+ *  ****
+ *
+ *    <label>
+ *          [common plus:]
+ *       .dataFormatAs
+ *       .htmlFor
+ *       [plus data properties]
+ *
+ *    <option>
+ *          [common plus:]
+ *       .defaultSelected
+ *       .index
+ *       .label
+ *       .selected
+ *       .text
+ *       .value   // unique implementation, not duplicated
+ *       .form    // unique implementation, not duplicated
+ *  ****
+ *
+ *    HTMLTypeValueInputs:  common to remaining elements
+ *          [common plus:]
+ *       .name
+ *       .type
+ *       .value
+ *       [plus data properties]
+ *
+ *
+ *    <select>
+ *       .length
+ *       .multiple
+ *       .options[]
+ *       .selectedIndex
+ *       .add()
+ *       .remove()
+ *       .item()                                       // unimplemented
+ *       .namedItem()                                  // unimplemented
+ *       [plus ".onchange"]
+ *       [plus focus events]
+ *       [plus data properties]
+ *       [plus ".size"]
+ *
+ *    <button>
+ *       .dataFormatAs   // duplicated from above, oh well....
+ *       [plus ".status", ".createTextRange()"]
+ *
+ *  ****
+ *
+ *    HTMLInputAreaCommon:  common to remaining elements
+ *       .defaultValue
+ *       .readOnly
+ *       .handleEvent()                                // unimplemented
+ *       .select()
+ *       .onselect
+ *       [plus ".size"]
+ *       [plus ".status", ".createTextRange()"]
+ *       [plus focus events]
+ *       [plus ".onchange"]
+ *
+ *    <textarea>
+ *       .cols
+ *       .rows
+ *       .wrap                                         // unimplemented
+ *       .onscroll                                     // unimplemented
+ *
+ *    <input>
+ *       .alt
+ *       .accept                                       // unimplemented
+ *       .checked
+ *       .complete                                     // unimplemented
+ *       .defaultChecked
+ *       .dynsrc                                       // unimplemented
+ *       .height
+ *       .hspace                                       // unimplemented
+ *       .indeterminate                                // unimplemented
+ *       .loop                                         // unimplemented
+ *       .lowsrc                                       // unimplemented
+ *       .maxLength
+ *       .src
+ *       .start                                        // unimplemented
+ *       .useMap
+ *       .vspace                                       // unimplemented
+ *       .width
+ *       .onclick
+ *       [plus ".size"]
+ *       [plus ".status", ".createTextRange()"]
+
+ *    [data properties]                                // unimplemented
+ *       .dataFld
+ *       .dataSrc
+
+ *    [status stuff]                                   // unimplemented
+ *       .status
+ *       .createTextRange()
+
+ *    [focus events]
+ *       .onblur
+ *       .onfocus
+
+ */
+
+
+
+var inputElements_dataProperties = {};
+var inputElements_status = {};
+
+var inputElements_onchange = {
+    onchange: function(event){
+        __eval__(this.getAttribute('onchange')||'', this);
+    }
+};
+
+var inputElements_size = {
+    get size(){
+        return Number(this.getAttribute('size'));
+    },
+    set size(value){
+        this.setAttribute('size',value);
+    }
+};
+
+var inputElements_focusEvents = {
+    blur: function(){
+        __blur__(this);
+
+        if (this._oldValue != this.value){
+            var event = document.createEvent("HTMLEvents");
+            event.initEvent("change", true, true);
+            this.dispatchEvent( event );
+        }
+    },
+    focus: function(){
+        __focus__(this);
+        this._oldValue = this.value;
+    }
+};
+
+
+/*
+* HTMLInputCommon - convenience class, not DOM
+*/
+var HTMLInputCommon = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLInputCommon.prototype = new HTMLElement();
+__extend__(HTMLInputCommon.prototype, {
+    get form() {
+        // parent can be null if element is outside of a form
+        // or not yet added to the document
+        var parent = this.parentNode;
+        while (parent && parent.nodeName.toLowerCase() !== 'form') {
+            parent = parent.parentNode;
+        }
+        return parent;
+    },
+    get accessKey(){
+        return this.getAttribute('accesskey');
+    },
+    set accessKey(value){
+        this.setAttribute('accesskey',value);
+    },
+    get access(){
+        return this.getAttribute('access');
+    },
+    set access(value){
+        this.setAttribute('access', value);
+    },
+    get disabled(){
+        return (this.getAttribute('disabled') === 'disabled');
+    },
+    set disabled(value){
+        this.setAttribute('disabled', (value ? 'disabled' :''));
+    }
+});
+
+
+
+
+/*
+* HTMLTypeValueInputs - convenience class, not DOM
+*/
+var HTMLTypeValueInputs = function(ownerDocument) {
+
+    HTMLInputCommon.apply(this, arguments);
+
+    this._oldValue = "";
+};
+HTMLTypeValueInputs.prototype = new HTMLInputCommon();
+__extend__(HTMLTypeValueInputs.prototype, inputElements_size);
+__extend__(HTMLTypeValueInputs.prototype, inputElements_status);
+__extend__(HTMLTypeValueInputs.prototype, inputElements_dataProperties);
+__extend__(HTMLTypeValueInputs.prototype, {
+    get name(){
+        return this.getAttribute('name')||'';
+    },
+    set name(value){
+        this.setAttribute('name',value);
+    }
+});
+
+
+/*
+* HTMLInputAreaCommon - convenience class, not DOM
+*/
+var HTMLInputAreaCommon = function(ownerDocument) {
+    HTMLTypeValueInputs.apply(this, arguments);
+};
+HTMLInputAreaCommon.prototype = new HTMLTypeValueInputs();
+__extend__(HTMLInputAreaCommon.prototype, inputElements_focusEvents);
+__extend__(HTMLInputAreaCommon.prototype, inputElements_onchange);
+__extend__(HTMLInputAreaCommon.prototype, {
+    get readOnly(){
+        return (this.getAttribute('readonly')=='readonly');
+    },
+    set readOnly(value){
+        this.setAttribute('readonly', (value ? 'readonly' :''));
+    },
+    select:function(){
+        __select__(this);
+
+    }
+});
+
+
+var __updateFormForNamedElement__ = function(node, value) {
+    if (node.form) {
+        // to check for ID or NAME attribute too
+        // not, then nothing to do
+
+		//THATCHER - I believe this is deprecated by the new
+		//internally managed indexes on elements
+        //node.form._updateElements();
+    }
+};
+
+/**
+ * HTMLAnchorElement - DOM Level 2
+ *
+ * HTML5: 4.6.1 The a element
+ * http://dev.w3.org/html5/spec/Overview.html#the-a-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLAnchorElement').
+		debug('HTMLAnchorElement available');    
+});
+
+exports.HTMLAnchorElement = HTMLAnchorElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLAnchorElement.prototype = new HTMLElement();
+__extend__(HTMLAnchorElement.prototype, {
+    get accessKey() {
+        return this.getAttribute("accesskey")||'';
+    },
+    set accessKey(val) {
+        return this.setAttribute("accesskey",val);
+    },
+    get charset() {
+        return this.getAttribute("charset")||'';
+    },
+    set charset(val) {
+        return this.setAttribute("charset",val);
+    },
+    get coords() {
+        return this.getAttribute("coords")||'';
+    },
+    set coords(val) {
+        return this.setAttribute("coords",val);
+    },
+    get href() {
+        var link = this.getAttribute('href');
+        if (!link) {
+            return '';
+        }
+        return Envjs.uri(link, this.ownerDocument.location.toString());
+    },
+    set href(val) {
+        return this.setAttribute("href", val);
+    },
+    get hreflang() {
+        return this.getAttribute("hreflang")||'';
+    },
+    set hreflang(val) {
+        this.setAttribute("hreflang",val);
+    },
+    get name() {
+        return this.getAttribute("name")||'';
+    },
+    set name(val) {
+        this.setAttribute("name",val);
+    },
+    get rel() {
+        return this.getAttribute("rel")||'';
+    },
+    set rel(val) {
+        return this.setAttribute("rel", val);
+    },
+    get rev() {
+        return this.getAttribute("rev")||'';
+    },
+    set rev(val) {
+        return this.setAttribute("rev",val);
+    },
+    get shape() {
+        return this.getAttribute("shape")||'';
+    },
+    set shape(val) {
+        return this.setAttribute("shape",val);
+    },
+    get target() {
+        return this.getAttribute("target")||'';
+    },
+    set target(val) {
+        return this.setAttribute("target",val);
+    },
+    get type() {
+        return this.getAttribute("type")||'';
+    },
+    set type(val) {
+        return this.setAttribute("type",val);
+    },
+    blur: function() {
+        __blur__(this);
+    },
+    focus: function() {
+        __focus__(this);
+    },
+	click: function(){
+		__click__(this);
+	},
+    /**
+     * Unlike other elements, toString returns the href
+     */
+    toString: function() {
+        return this.href;
+    }
+});
+
+}(/*Envjs.HTML.HTMLAnchorElement*/));
+
+/*
+ * HTMLAreaElement - DOM Level 2
+ *
+ * HTML5: 4.8.13 The area element
+ * http://dev.w3.org/html5/spec/Overview.html#the-area-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLAreaElement').
+		debug('HTMLAreaElement available');    
+});
+
+exports.HTMLAreaElement = HTMLAreaElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLAreaElement.prototype = new HTMLElement();
+__extend__(HTMLAreaElement.prototype, {
+    get accessKey(){
+        return this.getAttribute('accesskey');
+    },
+    set accessKey(value){
+        this.setAttribute('accesskey',value);
+    },
+    get alt(){
+        return this.getAttribute('alt') || '';
+    },
+    set alt(value){
+        this.setAttribute('alt',value);
+    },
+    get coords(){
+        return this.getAttribute('coords');
+    },
+    set coords(value){
+        this.setAttribute('coords',value);
+    },
+    get href(){
+        return this.getAttribute('href') || '';
+    },
+    set href(value){
+        this.setAttribute('href',value);
+    },
+    get noHref(){
+        return this.hasAttribute('href');
+    },
+    get shape(){
+        //TODO
+        return 0;
+    },
+    /*get tabIndex(){
+      return this.getAttribute('tabindex');
+      },
+      set tabIndex(value){
+      this.setAttribute('tabindex',value);
+      },*/
+    get target(){
+        return this.getAttribute('target');
+    },
+    set target(value){
+        this.setAttribute('target',value);
+    },
+
+    /**
+     * toString like <a>, returns the href
+     */
+    toString: function() {
+        return this.href;
+    }
+});
+
+}(/*Envjs.HTML.HTMLElement*/));
+
+/*
+ * HTMLBaseElement - DOM Level 2
+ *
+ * HTML5: 4.2.3 The base element
+ * http://dev.w3.org/html5/spec/Overview.html#the-base-element
+ */
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLBaseElement').
+		debug('HTMLBaseElement available');    
+});
+
+exports.HTMLBaseElement = HTMLBaseElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLBaseElement.prototype = new HTMLElement();
+__extend__(HTMLBaseElement.prototype, {
+    get href(){
+        return this.getAttribute('href');
+    },
+    set href(value){
+        this.setAttribute('href',value);
+    },
+    get target(){
+        return this.getAttribute('target');
+    },
+    set target(value){
+        this.setAttribute('target',value);
+    },
+    toString: function() {
+        return '[object HTMLBaseElement]';
+    }
+});
+
+}(/*Envjs.HTML.HTMLBaseElement*/));
+
+/*
+ * HTMLQuoteElement - DOM Level 2
+ * HTML5: 4.5.5 The blockquote element
+ * http://dev.w3.org/html5/spec/Overview.html#htmlquoteelement
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLQuoteElement').
+		debug('HTMLQuoteElement available');    
+});
+
+exports.HTMLQuoteElement = HTMLQuoteElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLQuoteElement.prototype = new HTMLElement();
+__extend__(HTMLQuoteElement.prototype, {
+    /**
+     * Quoth the spec:
+     * """
+     * If the cite attribute is present, it must be a valid URL. To
+     * obtain the corresponding citation link, the value of the
+     * attribute must be resolved relative to the element. User agents
+     * should allow users to follow such citation links.
+     * """
+     *
+     * TODO: normalize
+     *
+     */
+    get cite() {
+        return this.getAttribute('cite') || '';
+    },
+
+    set cite(value) {
+        this.setAttribute('cite', value);
+    },
+    toString: function() {
+        return '[object HTMLQuoteElement]';
+    }
+});
+
+}(/*Envjs.HTML.HTMLQuoteElement*/));
+
+/*
+ * HTMLBodyElement - DOM Level 2
+ * HTML5: http://dev.w3.org/html5/spec/Overview.html#the-body-element-0
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLBodyElement').
+		debug('HTMLBodyElement available');    
+});
+
+exports.HTMLBodyElement = HTMLBodyElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLBodyElement.prototype = new HTMLElement();
+__extend__(HTMLBodyElement.prototype, {
+    onload: function(event){
+        __eval__(this.getAttribute('onload')||'', this);
+    },
+    onunload: function(event){
+        __eval__(this.getAttribute('onunload')||'', this);
+    },
+    toString: function() {
+        return '[object HTMLBodyElement]';
+    }
+});
+
+}(/*Envjs.HTML.HTMLBodyElement*/));
+
+/*
+ * HTMLBRElement
+ * HTML5: 4.5.3 The hr Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-br-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLBRElement').
+		debug('HTMLBRElement available');    
+});
+
+exports.HTMLBRElement = HTMLBRElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLBRElement.prototype = new HTMLElement();
+__extend__(HTMLBRElement.prototype, {
+
+    // no additional properties or elements
+    toString: function() {
+        return '[object HTMLBRElement]';
+    }
+});
+
+}(/*Envjs.HTML.HTMLBRElement*/));
+
+/*
+ * HTMLButtonElement - DOM Level 2
+ *
+ * HTML5: 4.10.6 The button element
+ * http://dev.w3.org/html5/spec/Overview.html#the-button-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLButtonElement').
+		debug('HTMLButtonElement available');    
+});
+
+exports.HTMLButtonElement = HTMLButtonElement = function(ownerDocument) {
+    HTMLTypeValueInputs.apply(this, arguments);
+};
+HTMLButtonElement.prototype = new HTMLTypeValueInputs();
+__extend__(HTMLButtonElement.prototype, inputElements_status);
+__extend__(HTMLButtonElement.prototype, {
+    get dataFormatAs(){
+        return this.getAttribute('dataFormatAs');
+    },
+    set dataFormatAs(value){
+        this.setAttribute('dataFormatAs',value);
+    },
+    get type() {
+        return this.getAttribute('type') || 'submit';
+    },
+    set type(value) {
+        this.setAttribute('type', value);
+    },
+    get value() {
+        return this.getAttribute('value') || '';
+    },
+    set value(value) {
+        this.setAttribute('value', value);
+    },
+    toString: function() {
+        return '[object HTMLButtonElement]';
+    }
+});
+
+// Named Element Support
+HTMLElement.registerSetAttribute('BUTTON', 'name', __updateFormForNamedElement__);
+
+}(/*Envjs.HTML.HTMLButtonElement*/));
+
+/*
+ * HTMLCanvasElement - DOM Level 2
+ * HTML5: 4.8.11 The canvas element
+ * http://dev.w3.org/html5/spec/Overview.html#the-canvas-element
+ */
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.CanvasRenderingContext2D').
+		debug('CanvasRenderingContext2D available');    
+});
+/*
+ * This is a "non-Abstract Base Class". For an implmentation that actually
+ * did something, all these methods would need to over-written
+ */
+exports.CanvasRenderingContext2D = CanvasRenderingContext2D = function() {
+    // NOP
+};
+
+var nullfunction = function() {};
+
+CanvasRenderingContext2D.prototype = {
+    addColorStop: nullfunction,
+    arc: nullfunction,
+    beginPath: nullfunction,
+    bezierCurveTo: nullfunction,
+    clearRect: nullfunction,
+    clip: nullfunction,
+    closePath: nullfunction,
+    createLinearGradient: nullfunction,
+    createPattern: nullfunction,
+    createRadialGradient: nullfunction,
+    drawImage: nullfunction,
+    fill: nullfunction,
+    fillRect:  nullfunction,
+    lineTo: nullfunction,
+    moveTo: nullfunction,
+    quadraticCurveTo: nullfunction,
+    rect: nullfunction,
+    restore: nullfunction,
+    rotate: nullfunction,
+    save: nullfunction,
+    scale: nullfunction,
+    setTranform: nullfunction,
+    stroke: nullfunction,
+    strokeRect: nullfunction,
+    transform: nullfunction,
+    translate: nullfunction,
+
+    toString: function() {
+        return '[object CanvasRenderingContext2D]';
+    }
+};
+
+}(/*Envjs.HTML.CanvasRenderingContext2D*/));
+
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLCanvasElement').
+		debug('HTMLCanvasElement available');    
+});
+
+exports.HTMLCanvasElement = HTMLCanvasElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLCanvasElement.prototype = new HTMLElement();
+__extend__(HTMLCanvasElement.prototype, {
+
+    getContext: function(ctxtype) {
+        if (ctxtype === '2d') {
+            return new CanvasRenderingContext2D();
+        }
+        throw new Error("Unknown context type of '" + ctxtype + '"');
+    },
+
+    get height(){
+        return Number(this.getAttribute('height')|| 150);
+    },
+    set height(value){
+        this.setAttribute('height', value);
+    },
+
+    get width(){
+        return Number(this.getAttribute('width')|| 300);
+    },
+    set width(value){
+        this.setAttribute('width', value);
+    },
+
+    toString: function() {
+        return '[object HTMLCanvasElement]';
+    }
+
+});
+
+}(/*Envjs.HTML.HTMLCanvasElement*/));
+
+
+/*
+* HTMLTableColElement - DOM Level 2
+*
+* HTML5: 4.9.3 The colgroup element
+* http://dev.w3.org/html5/spec/Overview.html#the-colgroup-element
+*/
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTableColElement').
+		debug('HTMLTableColElement available');    
+});
+
+exports.HTMLTableColElement = HTMLTableColElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLTableColElement.prototype = new HTMLElement();
+__extend__(HTMLTableColElement.prototype, {
+    get align(){
+        return this.getAttribute('align');
+    },
+    set align(value){
+        this.setAttribute('align', value);
+    },
+    get ch(){
+        return this.getAttribute('ch');
+    },
+    set ch(value){
+        this.setAttribute('ch', value);
+    },
+    get chOff(){
+        return this.getAttribute('ch');
+    },
+    set chOff(value){
+        this.setAttribute('ch', value);
+    },
+    get span(){
+        return this.getAttribute('span');
+    },
+    set span(value){
+        this.setAttribute('span', value);
+    },
+    get vAlign(){
+        return this.getAttribute('valign');
+    },
+    set vAlign(value){
+        this.setAttribute('valign', value);
+    },
+    get width(){
+        return this.getAttribute('width');
+    },
+    set width(value){
+        this.setAttribute('width', value);
+    },
+    toString: function() {
+        return '[object HTMLTableColElement]';
+    }
+});
+
+}(/*Envjs.HTML.HTMLTableColElement*/));
+
+
+/*
+ * HTMLModElement - DOM Level 2
+ * http://dev.w3.org/html5/spec/Overview.html#htmlmodelement
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLModElement').
+		debug('HTMLModElement available');    
+});
+
+exports.HTMLModElement = HTMLModElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLModElement.prototype = new HTMLElement();
+__extend__(HTMLModElement.prototype, {
+    get cite(){
+        return this.getAttribute('cite');
+    },
+    set cite(value){
+        this.setAttribute('cite', value);
+    },
+    get dateTime(){
+        return this.getAttribute('datetime');
+    },
+    set dateTime(value){
+        this.setAttribute('datetime', value);
+    },
+    toString: function() {
+        return '[object HTMLModElement]';
+    }
+});
+
+}(/*Envjs.HTML.HTMLModElement*/));
+
+/*
+ * HTMLDivElement - DOM Level 2
+ * HTML5: 4.5.12 The Div Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-div-element
+ */
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLDivElement').
+		debug('HTMLDivElement available');    
+});
+
+exports.HTMLDivElement = HTMLDivElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLDivElement.prototype = new HTMLElement();
+__extend__(HTMLDivElement.prototype, {
+    get align(){
+        return this.getAttribute('align') || 'left';
+    },
+    set align(value){
+        this.setAttribute('align', value);
+    },
+    toString: function() {
+        return '[object HTMLDivElement]';
+    }
+});
+
+}(/*HTMLDivElement*/));
+
+/*
+ * HTMLDListElement
+ * HTML5: 4.5.7 The dl Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-dl-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLDListElement').
+		debug('HTMLDListElement available');    
+});
+
+exports.HTMLDListElement = HTMLDListElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLDListElement.prototype = new HTMLElement();
+__extend__(HTMLDListElement.prototype, {
+
+    // no additional properties or elements
+
+    toString: function() {
+        return '[object HTMLDListElement]';
+    }
+});
+
+}(/*HTMLDListElement*/));
+
+/**
+ * HTMLLegendElement - DOM Level 2
+ *
+ * HTML5: 4.10.3 The legend element
+ * http://dev.w3.org/html5/spec/Overview.html#the-legend-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLLegendElement').
+		debug('HTMLLegendElement available');    
+});
+
+exports.HTMLLegendElement = HTMLLegendElement = function(ownerDocument) {
+    HTMLInputCommon.apply(this, arguments);
+};
+HTMLLegendElement.prototype = new HTMLInputCommon();
+__extend__(HTMLLegendElement.prototype, {
+    get align(){
+        return this.getAttribute('align');
+    },
+    set align(value){
+        this.setAttribute('align',value);
+    }
+});
+
+}(/*HTMLLegendElement*/));
+
+/*
+ * HTMLFieldSetElement - DOM Level 2
+ *
+ * HTML5: 4.10.2 The fieldset element
+ * http://dev.w3.org/html5/spec/Overview.html#the-fieldset-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLFieldSetElement').
+		debug('HTMLFieldSetElement available');    
+});
+
+exports.HTMLFieldSetElement = HTMLFieldSetElement = function(ownerDocument) {
+    HTMLLegendElement.apply(this, arguments);
+};
+HTMLFieldSetElement.prototype = new HTMLLegendElement();
+__extend__(HTMLFieldSetElement.prototype, {
+    get margin(){
+        return this.getAttribute('margin');
+    },
+    set margin(value){
+        this.setAttribute('margin',value);
+    },
+    toString: function() {
+        return '[object HTMLFieldSetElement]';
+    }
+});
+
+// Named Element Support
+HTMLElement.registerSetAttribute('FIELDSET', 'name', __updateFormForNamedElement__);
+
+}(/*HTMLFieldSetElement*/));
+
+/*
+ * HTMLFormElement - DOM Level 2
+ *
+ * HTML5: http://dev.w3.org/html5/spec/Overview.html#the-form-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLFormElement').
+		debug('HTMLFormElement available');    
+});
+
+exports.HTMLFormElement = HTMLFormElement = function(ownerDocument){
+    HTMLElement.apply(this, arguments);
+
+    //TODO: on __elementPopped__ from the parser
+    //      we need to determine all the forms default
+    //      values
+};
+HTMLFormElement.prototype = new HTMLElement();
+__extend__(HTMLFormElement.prototype,{
+    get acceptCharset(){
+        return this.getAttribute('accept-charset');
+    },
+    set acceptCharset(acceptCharset) {
+        this.setAttribute('accept-charset', acceptCharset);
+    },
+    get action() {
+        return this.getAttribute('action');
+    },
+    set action(action){
+        this.setAttribute('action', action);
+    },
+
+    get enctype() {
+        return this.getAttribute('enctype');
+    },
+    set enctype(enctype) {
+        this.setAttribute('enctype', enctype);
+    },
+    get method() {
+        return this.getAttribute('method');
+    },
+    set method(method) {
+        this.setAttribute('method', method);
+    },
+    get name() {
+        return this.getAttribute("name");
+    },
+    set name(val) {
+        return this.setAttribute("name",val);
+    },
+    get target() {
+        return this.getAttribute("target");
+    },
+    set target(val) {
+        return this.setAttribute("target",val);
+    },
+
+    /**
+     * "Named Elements"
+     *
+     */
+    /**
+     * returns HTMLFormControlsCollection
+     * http://dev.w3.org/html5/spec/Overview.html#dom-form-elements
+     *
+     * button fieldset input keygen object output select textarea
+     */
+    get elements() {
+        var nodes = this.getElementsByTagName('*');
+        var alist = new NodeList(this.ownerDocument, this);
+        var i, tmp;
+        for (i = 0; i < nodes.length; ++i) {
+            // would like to replace switch with something else
+            //  since it's redundant with the SetAttribute callbacks
+            switch (nodes[i].nodeName) {
+            case 'BUTTON':
+            case 'FIELDSET':
+            case 'INPUT':
+            case 'KEYGEN':
+            case 'OBJECT':
+            case 'OUTPUT':
+            case 'SELECT':
+            case 'TEXTAREA':
+                alist.push(nodes[i]);
+                this[i] = nodes[i];
+                tmp = nodes[i].name;
+                if (tmp) {
+                    this[tmp] = nodes[i];
+                }
+                tmp = nodes[i].id;
+                if (tmp) {
+                    this[tmp] = nodes[i];
+                }
+            }
+        }
+        return new HTMLCollection(alist);
+    },
+    _updateElements: function() {
+        var elm = this.elements;
+    },
+    
+    /*get elements() {
+        //console.log('getting form input type elements.');
+        if(!(this._indexes_['$elements'])){
+			this._indexes_['$elements'] = new NodeList(this.ownerDocument, null);
+		}
+        return new HTMLCollection(this._indexes_['$elements']);
+    },*/
+    get length() {
+        return this.elements.length;
+    },
+    item: function(idx) {
+        return this.elements[idx];
+    },
+    namedItem: function(aname) {
+        return this.elements.namedItem(aname);
+    },
+    toString: function() {
+        return '[object HTMLFormElement]';
+    },
+    submit: function() {
+        var event = __submit__(this);
+    },
+    reset: function() {
+        //TODO: this needs to reset all values specified in the form
+        //      to those which where set as defaults
+        __reset__(this);
+    },
+    onsubmit: HTMLEvents.prototype.onsubmit,
+    onreset: HTMLEvents.prototype.onreset
+});
+
+}(/*HTMLFormElement*/));
+
+/**
+ * HTMLFrameElement - DOM Level 2
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLFrameElement').debug('HTMLFrameElement available');    
+});
+
+exports.HTMLFrameElement = HTMLFrameElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+    // this is normally a getter but we need to be
+    // able to set it to correctly emulate behavior
+    this.contentDocument = null;
+    this.contentWindow = null;
+};
+HTMLFrameElement.prototype = new HTMLElement();
+__extend__(HTMLFrameElement.prototype, {
+
+    get frameBorder(){
+        return this.getAttribute('border')||"";
+    },
+    set frameBorder(value){
+        this.setAttribute('border', value);
+    },
+    get longDesc(){
+        return this.getAttribute('longdesc')||"";
+    },
+    set longDesc(value){
+        this.setAttribute('longdesc', value);
+    },
+    get marginHeight(){
+        return this.getAttribute('marginheight')||"";
+    },
+    set marginHeight(value){
+        this.setAttribute('marginheight', value);
+    },
+    get marginWidth(){
+        return this.getAttribute('marginwidth')||"";
+    },
+    set marginWidth(value){
+        this.setAttribute('marginwidth', value);
+    },
+    get name(){
+        return this.getAttribute('name')||"";
+    },
+    set name(value){
+        this.setAttribute('name', value);
+    },
+    get noResize(){
+        return this.getAttribute('noresize')||false;
+    },
+    set noResize(value){
+        this.setAttribute('noresize', value);
+    },
+    get scrolling(){
+        return this.getAttribute('scrolling')||"";
+    },
+    set scrolling(value){
+        this.setAttribute('scrolling', value);
+    },
+    get src(){
+        return this.getAttribute('src')||"";
+    },
+    set src(value){
+        this.setAttribute('src', value);
+    },
+    toString: function(){
+        return '[object HTMLFrameElement]';
+    },
+    onload: HTMLEvents.prototype.onload
+});
+
+}(/*HTMLFrameElement*/));
+/**
+ * HTMLFrameSetElement - DOM Level 2
+ *
+ * HTML5: 12.3.3 Frames
+ * http://dev.w3.org/html5/spec/Overview.html#frameset
+ */
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLFrameSetElement').debug('HTMLFrameSetElement available');    
+});
+
+exports.HTMLFrameSetElement = HTMLFrameSetElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLFrameSetElement.prototype = new HTMLElement();
+__extend__(HTMLFrameSetElement.prototype, {
+    get cols(){
+        return this.getAttribute('cols');
+    },
+    set cols(value){
+        this.setAttribute('cols', value);
+    },
+    get rows(){
+        return this.getAttribute('rows');
+    },
+    set rows(value){
+        this.setAttribute('rows', value);
+    },
+    toString: function() {
+        return '[object HTMLFrameSetElement]';
+    }
+});
+
+}(/*HTMLFrameSetElement*/));
+
+/*
+ * HTMLHeadingElement
+ * HTML5: 4.4.6 The h1, h2, h3, h4, h5, and h6 elements
+ * http://dev.w3.org/html5/spec/Overview.html#the-h1-h2-h3-h4-h5-and-h6-elements
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLHeadingElement').
+		debug('HTMLHeadingElement available');    
+});
+
+exports.HTMLHeadingElement = HTMLHeadingElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLHeadingElement.prototype = new HTMLElement();
+__extend__(HTMLHeadingElement.prototype, {
+    toString: function() {
+        return '[object HTMLHeadingElement]';
+    }
+});
+
+}(/*HTMLHeadingElement*/));
+
+/**
+ * HTMLHeadElement - DOM Level 2
+ *
+ * HTML5: 4.2.1 The head element
+ * http://dev.w3.org/html5/spec/Overview.html#the-head-element-0
+ */
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLHeadElement').
+		debug('HTMLHeadElement available');    
+});
+
+exports.HTMLHeadElement = HTMLHeadElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLHeadElement.prototype = new HTMLElement();
+__extend__(HTMLHeadElement.prototype, {
+    get profile(){
+        return this.getAttribute('profile');
+    },
+    set profile(value){
+        this.setAttribute('profile', value);
+    },
+    toString: function(){
+        return '[object HTMLHeadElement]';
+    }
+});
+
+}(/*HTMLHeadElement*/));
+
+/*
+ * HTMLHRElement
+ * HTML5: 4.5.2 The hr Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-hr-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLHRElement').
+		debug('HTMLHRElement available');    
+});
+
+exports.HTMLHRElement = HTMLHRElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLHRElement.prototype = new HTMLElement();
+__extend__(HTMLHRElement.prototype, {
+    // no additional properties or elements
+    toString: function() {
+        return '[object HTMLHRElement]';
+    }
+});
+
+}(/*HTMLHRElement*/));
+
+/*
+ * HTMLHtmlElement
+ * HTML5: 4.1.1 The Html Element
+ * http://dev.w3.org/html5/spec/Overview.html#htmlhtmlelement
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLHtmlElement').
+		debug('HTMLHtmlElement available');    
+});
+
+exports.HTMLHtmlElement = HTMLHtmlElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLHtmlElement.prototype = new HTMLElement();
+__extend__(HTMLHtmlElement.prototype, {
+
+    // no additional properties or elements
+    toString: function() {
+        return '[object HTMLHtmlElement]';
+    }
+});
+
+}(/*HTMLHtmlElement*/));
+
+/*
+ * HTMLIFrameElement - DOM Level 2
+ *
+ * HTML5: 4.8.3 The iframe element
+ * http://dev.w3.org/html5/spec/Overview.html#the-iframe-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLIFrameElement').
+		debug('HTMLIFrameElement available');    
+});
+
+exports.HTMLIFrameElement = HTMLIFrameElement = function(ownerDocument) {
+    HTMLFrameElement.apply(this, arguments);
+};
+HTMLIFrameElement.prototype = new HTMLFrameElement();
+__extend__(HTMLIFrameElement.prototype, {
+    get height() {
+        return this.getAttribute("height") || "";
+    },
+    set height(val) {
+        return this.setAttribute("height",val);
+    },
+    get width() {
+        return this.getAttribute("width") || "";
+    },
+    set width(val) {
+        return this.setAttribute("width",val);
+    },
+    toString: function(){
+        return '[object HTMLIFrameElement]';
+    }
+});
+
+}(/*HTMLIFrameElement*/));
+
+/**
+ * HTMLImageElement and Image
+ */
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLImageElement').debug('HTMLImageElement available');    
+});
+
+exports.HTMLImageElement = HTMLImageElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLImageElement.prototype = new HTMLElement();
+__extend__(HTMLImageElement.prototype, {
+    get alt(){
+        return this.getAttribute('alt');
+    },
+    set alt(value){
+        this.setAttribute('alt', value);
+    },
+    get height(){
+        return parseInt(this.getAttribute('height'), 10) || 0;
+    },
+    set height(value){
+        this.setAttribute('height', value);
+    },
+    get isMap(){
+        return this.hasAttribute('map');
+    },
+    set useMap(value){
+        this.setAttribute('map', value);
+    },
+    get longDesc(){
+        return this.getAttribute('longdesc');
+    },
+    set longDesc(value){
+        this.setAttribute('longdesc', value);
+    },
+    get name(){
+        return this.getAttribute('name');
+    },
+    set name(value){
+        this.setAttribute('name', value);
+    },
+    get src(){
+        return this.getAttribute('src') || '';
+    },
+    set src(value){
+        this.setAttribute('src', value);
+    },
+    get width(){
+        return parseInt(this.getAttribute('width'), 10) || 0;
+    },
+    set width(value){
+        this.setAttribute('width', value);
+    },
+    toString: function(){
+        return '[object HTMLImageElement]';
+    }
+});
+
+/*
+ * html5 4.8.1
+ * http://dev.w3.org/html5/spec/Overview.html#the-img-element
+ */
+exports.Image = Image = function(width, height) {
+    // Not sure if "[global].document" satifies this requirement:
+    // "The element's document must be the active document of the
+    // browsing context of the Window object on which the interface
+    // object of the invoked constructor is found."
+
+    HTMLElement.apply(this, [document]);
+    // Note: firefox will throw an error if the width/height
+    //   is not an integer.  Safari just converts to 0 on error.
+    this.width = parseInt(width, 10) || 0;
+    this.height = parseInt(height, 10) || 0;
+    this.nodeName = 'IMG';
+};
+Image.prototype = new HTMLImageElement();
+
+
+/*
+ * Image.src attribute events.
+ *
+ * Not sure where this should live... in events/img.js? in parser/img.js?
+ * Split out to make it easy to move.
+ */
+
+/**
+ * HTMLImageElement && Image are a bit odd in that the 'src' attribute
+ * is 'active' -- changing it triggers loading of the image from the
+ * network.
+ *
+ * This can occur by
+ *   - Directly setting the Image.src =
+ *   - Using one of the Element.setAttributeXXX methods
+ *   - Node.importNode an image
+ *   - The initial creation and parsing of an <img> tag
+ *
+ * __onImageRequest__ is a function that handles eventing
+ *  and dispatches to a user-callback.
+ *
+ */
+
+__extend__(HTMLImageElement.prototype, {
+    onload: function(event){
+        __eval__(this.getAttribute('onload') || '', this);
+    }
+});
+
+
+/*
+ * Image Loading
+ *
+ * The difference between "owner.parsing" and "owner.fragment"
+ *
+ * If owner.parsing === true, then during the html5 parsing then,
+ *  __elementPopped__ is called when a compete tag (with attrs and
+ *  children) is full parsed and added the DOM.
+ *
+ *   For images, __elementPopped__ is called with everything the
+ *    tag has.  which in turn looks for a "src" attr and calls
+ *    Envjs.loadImage
+ *
+ * If owner.parser === false (or non-existant), then we are not in
+ * a parsing step.  For images, perhaps someone directly modified
+ * a 'src' attribute of an existing image.
+ *
+ * 'innerHTML' is tricky since we first create a "fake document",
+ *  parse it, then import the right parts.  This may call
+ *  img.setAttributeNS twice.  once during the parse and once
+ *  during the clone of the node.  We want event to trigger on the
+ *  later and not during th fake doco.  "owner.fragment" is set by
+ *  the fake doco parser to indicate that events should not be
+ *  triggered on this.
+ *
+ * We coud make 'owner.parser' == [ 'none', 'full', 'fragment']
+ * and just use one variable That was not done since the patch is
+ * quite large as is.
+ *
+ * This same problem occurs with scripts.  innerHTML oddly does
+ * not eval any <script> tags inside.
+ */
+HTMLElement.registerSetAttribute('IMG', 'src', function(node, value) {
+    var owner = node.ownerDocument;
+    if (!owner.parsing && !owner.fragment) {
+        Envjs.loadImage(node, value);
+    }
+});
+
+}(/*HTMLImageElement*/));
+/**
+ * HTMLInputElement
+ *
+ * HTML5: 4.10.5 The input element
+ * http://dev.w3.org/html5/spec/Overview.html#the-input-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLInputElement').
+		debug('HTMLInputElement available');    
+});
+
+exports.HTMLInputElement = HTMLInputElement = function(ownerDocument) {
+    HTMLInputAreaCommon.apply(this, arguments);
+    this._dirty = false;
+    this._checked = null;
+    this._value = null;
+};
+HTMLInputElement.prototype = new HTMLInputAreaCommon();
+__extend__(HTMLInputElement.prototype, {
+    get alt(){
+        return this.getAttribute('alt') || '';
+    },
+    set alt(value){
+        this.setAttribute('alt', value);
+    },
+
+    /**
+     * 'checked' returns state, NOT the value of the attribute
+     */
+    get checked(){
+        if (this._checked === null) {
+            this._checked = this.defaultChecked;
+        }
+        return this._checked;
+    },
+    set checked(value){
+        // force to boolean value
+        this._checked = (value) ? true : false;
+    },
+
+    /**
+     * 'defaultChecked' actually reflects if the 'checked' attribute
+     * is present or not
+     */
+    get defaultChecked(){
+        return this.hasAttribute('checked');
+    },
+    set defaultChecked(val){
+        if (val) {
+            this.setAttribute('checked', '');
+        } else {
+            if (this.defaultChecked) {
+                this.removeAttribute('checked');
+            }
+        }
+    },
+    get defaultValue() {
+        return this.getAttribute('value') || '';
+    },
+    set defaultValue(value) {
+        this._dirty = true;
+        this.setAttribute('value', value);
+    },
+    get value() {
+        return (this._value === null) ? this.defaultValue : this._value;
+    },
+    set value(newvalue) {
+        this._value = newvalue;
+    },
+    /**
+     * Height is a string
+     */
+    get height(){
+        // spec says it is a string
+        return this.getAttribute('height') || '';
+    },
+    set height(value){
+        this.setAttribute('height',value);
+    },
+
+    /**
+     * MaxLength is a number
+     */
+    get maxLength(){
+        return Number(this.getAttribute('maxlength')||'-1');
+    },
+    set maxLength(value){
+        this.setAttribute('maxlength', value);
+    },
+
+    /**
+     * Src is a URL string
+     */
+    get src(){
+        return this.getAttribute('src') || '';
+    },
+    set src(value){
+        // TODO: make absolute any relative URLS
+        this.setAttribute('src', value);
+    },
+
+    get type() {
+        return this.getAttribute('type') || 'text';
+    },
+    set type(value) {
+        this.setAttribute('type', value);
+    },
+
+    get useMap(){
+        return this.getAttribute('map') || '';
+    },
+
+    /**
+     * Width: spec says it is a string
+     */
+    get width(){
+        return this.getAttribute('width') || '';
+    },
+    set width(value){
+        this.setAttribute('width',value);
+    },
+    click:function(){
+        __click__(this);
+    },
+    toString: function() {
+        return '[object HTMLInputElement]';
+    }
+});
+
+//http://dev.w3.org/html5/spec/Overview.html#dom-input-value
+// if someone directly modifies the value attribute, then the input's value
+// also directly changes.
+HTMLElement.registerSetAttribute('INPUT', 'value', function(node, value) {
+    if (!node._dirty) {
+        node._value = value;
+        node._dirty = true;
+    }
+});
+
+/*
+ *The checked content attribute is a boolean attribute that gives the
+ *default checkedness of the input element. When the checked content
+ *attribute is added, if the control does not have dirty checkedness,
+ *the user agent must set the checkedness of the element to true; when
+ *the checked content attribute is removed, if the control does not
+ *have dirty checkedness, the user agent must set the checkedness of
+ *the element to false.
+ */
+// Named Element Support
+HTMLElement.registerSetAttribute('INPUT', 'name', __updateFormForNamedElement__);
+
+}(/*HTMLInputElement*/));
+
+/**
+ * HTMLLabelElement - DOM Level 2
+ * HTML5 4.10.4 The label element
+ * http://dev.w3.org/html5/spec/Overview.html#the-label-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLLabelElement').
+		debug('HTMLLabelElement available');    
+});
+
+exports.HTMLLabelElement = HTMLLabelElement = function(ownerDocument) {
+    HTMLInputCommon.apply(this, arguments);
+};
+HTMLLabelElement.prototype = new HTMLInputCommon();
+__extend__(HTMLLabelElement.prototype, inputElements_dataProperties);
+__extend__(HTMLLabelElement.prototype, {
+    get htmlFor() {
+        return this.getAttribute('for');
+    },
+    set htmlFor(value) {
+        this.setAttribute('for',value);
+    },
+    get dataFormatAs() {
+        return this.getAttribute('dataFormatAs');
+    },
+    set dataFormatAs(value) {
+        this.setAttribute('dataFormatAs',value);
+    },
+    toString: function() {
+        return '[object HTMLLabelElement]';
+    }
+});
+
+}(/*HTMLLabelElement*/));
+
+/*
+ * HTMLLIElement
+ * HTML5: 4.5.8 The li Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-li-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLLIElement').
+		debug('HTMLLIElement available');    
+});
+
+exports.HTMLLIElement = HTMLLIElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLLIElement.prototype = new HTMLElement();
+__extend__(HTMLLIElement.prototype, {
+    // TODO: attribute long value;
+    toString: function() {
+        return '[object HTMLLIElement]';
+    }
+});
+
+}(/*HTMLLIElement*/));
+
+/*
+ * HTMLLinkElement - DOM Level 2
+ *
+ * HTML5: 4.8.12 The link element
+ * http://dev.w3.org/html5/spec/Overview.html#the-link-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLLinkElement').
+		debug('HTMLLinkElement available');    
+});
+
+exports.HTMLLinkElement = HTMLLinkElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLLinkElement.prototype = new HTMLElement();
+__extend__(HTMLLinkElement.prototype, {
+    get disabled(){
+        return this.getAttribute('disabled');
+    },
+    set disabled(value){
+        this.setAttribute('disabled',value);
+    },
+    get charset(){
+        return this.getAttribute('charset');
+    },
+    set charset(value){
+        this.setAttribute('charset',value);
+    },
+    get href(){
+        return this.getAttribute('href');
+    },
+    set href(value){
+        this.setAttribute('href',value);
+    },
+    get hreflang(){
+        return this.getAttribute('hreflang');
+    },
+    set hreflang(value){
+        this.setAttribute('hreflang',value);
+    },
+    get media(){
+        return this.getAttribute('media');
+    },
+    set media(value){
+        this.setAttribute('media',value);
+    },
+    get rel(){
+        return this.getAttribute('rel');
+    },
+    set rel(value){
+        this.setAttribute('rel',value);
+    },
+    get rev(){
+        return this.getAttribute('rev');
+    },
+    set rev(value){
+        this.setAttribute('rev',value);
+    },
+    get target(){
+        return this.getAttribute('target');
+    },
+    set target(value){
+        this.setAttribute('target',value);
+    },
+    get type(){
+        return this.getAttribute('type');
+    },
+    set type(value){
+        this.setAttribute('type',value);
+    },
+    toString: function() {
+        return '[object HTMLLinkElement]';
+    }
+});
+
+}(/*HTMLLinkElement*/));
+
+
+
+
+HTMLElement.registerSetAttribute('LINK', 'href', function(node, value) {
+    Envjs.loadLink(node, value);
+});
+
+/**
+ * Event stuff, not sure where it goes
+ */
+__extend__(HTMLLinkElement.prototype, {
+    onload: function(event){
+        __eval__(this.getAttribute('onload')||'', this);
+    }
+});
+
+/**
+ * HTMLMapElement
+ *
+ * 4.8.12 The map element
+ * http://dev.w3.org/html5/spec/Overview.html#the-map-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLMapElement').
+		debug('HTMLMapElement available');    
+});
+
+exports.HTMLMapElement = HTMLMapElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLMapElement.prototype = new HTMLElement();
+__extend__(HTMLMapElement.prototype, {
+    get areas(){
+        return this.getElementsByTagName('area');
+    },
+    get name(){
+        return this.getAttribute('name') || '';
+    },
+    set name(value){
+        this.setAttribute('name',value);
+    },
+    toString: function() {
+        return '[object HTMLMapElement]';
+    }
+});
+
+}(/*HTMLMapElement*/));
+
+/**
+ * HTMLMetaElement - DOM Level 2
+ * HTML5: 4.2.5 The meta element
+ * http://dev.w3.org/html5/spec/Overview.html#meta
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLMetaElement').
+		debug('HTMLMetaElement available');    
+});
+
+exports.HTMLMetaElement = HTMLMetaElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLMetaElement.prototype = new HTMLElement();
+__extend__(HTMLMetaElement.prototype, {
+    get content() {
+        return this.getAttribute('content') || '';
+    },
+    set content(value){
+        this.setAttribute('content',value);
+    },
+    get httpEquiv(){
+        return this.getAttribute('http-equiv') || '';
+    },
+    set httpEquiv(value){
+        this.setAttribute('http-equiv',value);
+    },
+    get name(){
+        return this.getAttribute('name') || '';
+    },
+    set name(value){
+        this.setAttribute('name',value);
+    },
+    get scheme(){
+        return this.getAttribute('scheme');
+    },
+    set scheme(value){
+        this.setAttribute('scheme',value);
+    },
+    toString: function() {
+        return '[object HTMLMetaElement]';
+    }
+});
+
+}(/*HTMLMetaElement*/));
+
+/**
+ * HTMLObjectElement - DOM Level 2
+ * HTML5: 4.8.5 The object element
+ * http://dev.w3.org/html5/spec/Overview.html#the-object-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLObjectElement').
+		debug('HTMLObjectElement available');    
+});
+
+exports.HTMLObjectElement = HTMLObjectElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLObjectElement.prototype = new HTMLElement();
+__extend__(HTMLObjectElement.prototype, {
+    get code(){
+        return this.getAttribute('code');
+    },
+    set code(value){
+        this.setAttribute('code',value);
+    },
+    get archive(){
+        return this.getAttribute('archive');
+    },
+    set archive(value){
+        this.setAttribute('archive',value);
+    },
+    get codeBase(){
+        return this.getAttribute('codebase');
+    },
+    set codeBase(value){
+        this.setAttribute('codebase',value);
+    },
+    get codeType(){
+        return this.getAttribute('codetype');
+    },
+    set codeType(value){
+        this.setAttribute('codetype',value);
+    },
+    get data(){
+        return this.getAttribute('data');
+    },
+    set data(value){
+        this.setAttribute('data',value);
+    },
+    get declare(){
+        return this.getAttribute('declare');
+    },
+    set declare(value){
+        this.setAttribute('declare',value);
+    },
+    get height(){
+        return this.getAttribute('height');
+    },
+    set height(value){
+        this.setAttribute('height',value);
+    },
+    get standby(){
+        return this.getAttribute('standby');
+    },
+    set standby(value){
+        this.setAttribute('standby',value);
+    },
+    /*get tabIndex(){
+      return this.getAttribute('tabindex');
+      },
+      set tabIndex(value){
+      this.setAttribute('tabindex',value);
+      },*/
+    get type(){
+        return this.getAttribute('type');
+    },
+    set type(value){
+        this.setAttribute('type',value);
+    },
+    get useMap(){
+        return this.getAttribute('usemap');
+    },
+    set useMap(value){
+        this.setAttribute('usemap',value);
+    },
+    get width(){
+        return this.getAttribute('width');
+    },
+    set width(value){
+        this.setAttribute('width',value);
+    },
+    get contentDocument(){
+        return this.ownerDocument;
+    },
+    toString: function() {
+        return '[object HTMLObjectElement]';
+    }
+});
+
+// Named Element Support
+HTMLElement.registerSetAttribute('OBJECT', 'name', __updateFormForNamedElement__);
+
+}(/*HTMLObjectElement*/));
+
+/*
+ * HTMLOListElement
+ * HTML5: 4.5.6 The ol Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-ol-element
+ */
+ 
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLOListElement').
+		debug('HTMLOListElement available');    
+});
+
+exports.HTMLOListElement = HTMLOListElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLOListElement.prototype = new HTMLElement();
+__extend__(HTMLOListElement.prototype, {
+    // TODO: attribute boolean reversed;
+    // TODO:  attribute long start;
+    toString: function() {
+        return '[object HTMLOListElement]';
+    }
+});
+
+}(/*HTMLOListElement*/));
+
+/**
+ * HTMLOptGroupElement - DOM Level 2
+ * HTML 5: 4.10.9 The optgroup element
+ * http://dev.w3.org/html5/spec/Overview.html#the-optgroup-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLOptGroupElement').
+        debug('HTMLOptGroupElement available');    
+});
+
+exports.HTMLOptGroupElement = HTMLOptGroupElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLOptGroupElement.prototype = new HTMLElement();
+__extend__(HTMLOptGroupElement.prototype, {
+    get disabled(){
+        return this.getAttribute('disabled');
+    },
+    set disabled(value){
+        this.setAttribute('disabled',value);
+    },
+    get label(){
+        return this.getAttribute('label');
+    },
+    set label(value){
+        this.setAttribute('label',value);
+    },
+    appendChild: function(node){
+        var i,
+            length,
+            selected = false;
+        //make sure at least one is selected by default
+        if(node.nodeType === Node.ELEMENT_NODE && node.tagName === 'OPTION'){
+            length = this.childNodes.length;
+            for(i=0;i<length;i++){
+                if(this.childNodes[i].nodeType === Node.ELEMENT_NODE &&
+                   this.childNodes[i].tagName === 'OPTION'){
+                    //check if it is selected
+                    if(this.selected){
+                        selected = true;
+                        break;
+                    }
+                }
+            }
+            if(!selected){
+                node.selected = true;
+                this.value = node.value?node.value:'';
+            }
+        }
+        return HTMLElement.prototype.appendChild.apply(this, [node]);
+    },
+    toString: function() {
+        return '[object HTMLOptGroupElement]';
+    }
+});
+
+}(/*HTMLOptGroupElement*/));
+
+/**
+ * HTMLOptionElement, Option
+ * HTML5: 4.10.10 The option element
+ * http://dev.w3.org/html5/spec/Overview.html#the-option-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLOptionElement').
+		debug('HTMLOptionElement available');    
+});
+
+exports.HTMLOptionElement = HTMLOptionElement = function(ownerDocument) {
+    HTMLInputCommon.apply(this, arguments);
+    this._selected = null;
+};
+HTMLOptionElement.prototype = new HTMLInputCommon();
+__extend__(HTMLOptionElement.prototype, {
+
+    /**
+     * defaultSelected actually reflects the presence of the
+     * 'selected' attribute.
+     */
+    get defaultSelected() {
+        return this.hasAttribute('selected');
+    },
+    set defaultSelected(value) {
+        if (value) {
+            this.setAttribute('selected','');
+        } else {
+            if (this.hasAttribute('selected')) {
+                this.removeAttribute('selected');
+            }
+        }
+    },
+    get form() {
+        var parent = __selectparent__(this);
+        return parent ? parent.form : null;
+    },
+    get index() {
+        var options, i;
+
+        if (! this.parentNode) {
+            return -1;
+        }
+        options = this.parentNode.options;
+        for (i=0; i < options.length; ++i) {
+            if (this === options[i]) {
+                return i;
+            }
+        }
+        return 0;
+    },
+    get label() {
+        return this.getAttribute('label');
+    },
+    set label(value) {
+        this.setAttribute('label', value);
+    },
+
+    /*
+     * This is not in the spec, but safari and firefox both
+     * use this
+     */
+    get name() {
+        return this.getAttribute('name');
+    },
+    set name(value) {
+        this.setAttribute('name', value);
+    },
+
+    /**
+     *
+     */
+    get selected() {
+        // if disabled, return false, no matter what
+        if (this.disabled) {
+            return false;
+        }
+        if (this._selected === null) {
+            return this.defaultSelected;
+        }
+
+        return this._selected;
+    },
+    set selected(value) {
+        this._selected = (value) ? true : false;
+    },
+
+    get text() {
+        var val = this.nodeValue;
+        return (val === null || this.value === undefined) ?
+            this.innerHTML :
+            val;
+    },
+    get value() {
+        var val = this.getAttribute('value');
+        return (val === null || val === undefined) ?
+            this.textContent :
+            val;
+    },
+    set value(value) {
+        this.setAttribute('value', value);
+    },
+    toString: function() {
+        return '[object HTMLOptionElement]';
+    }
+});
+
+exports.Option = Option = function(text, value, defaultSelected, selected) {
+
+    // Not sure if this is correct:
+    //
+    // The element's document must be the active document of the
+    // browsing context of the Window object on which the interface
+    // object of the invoked constructor is found.
+    HTMLOptionElement.apply(this, [document]);
+    this.nodeName = 'OPTION';
+
+    if (arguments.length >= 1) {
+        this.appendChild(document.createTextNode('' + text));
+    }
+    if (arguments.length >= 2) {
+        this.value = value;
+    }
+    if (arguments.length >= 3) {
+        if (defaultSelected) {
+            this.defaultSelected = '';
+        }
+    }
+    if (arguments.length >= 4) {
+        this.selected = (selected) ? true : false;
+    }
+};
+
+Option.prototype = new HTMLOptionElement();
+
+// Named Element Support
+
+function updater(node, value) {
+    __updateoptions__(node);
+}
+HTMLElement.registerSetAttribute('OPTION', 'name', updater);
+HTMLElement.registerSetAttribute('OPTION', 'id', updater);
+
+
+
+}(/*HTMLOptionElement*/));
+
+
+/*
+ * HTML5: The form IDL attribute's behavior depends on whether the
+ * option element is in a select element or not. If the option has
+ * a select element as its parent, or has a colgroup element as
+ * its parent and that colgroup element has a select element as
+ * its parent, then the form IDL attribute must return the same
+ * value as the form IDL attribute on that select
+ * element. Otherwise, it must return null.
+ */
+__selectparent__ = function(node) {
+    var parent = node.parentNode;
+    if (!parent) {
+        return null;
+    }
+
+    if (parent.tagName === 'SELECT') {
+        return parent;
+    }
+    if (parent.tagName === 'COLGROUP') {
+        parent = parent.parentNode;
+        if (parent && parent.tagName === 'SELECT') {
+            return parent;
+        }
+    }
+};
+//Blah this is used in parser/htmldocument, so we have to create
+//some way to access it outside the module so Envjs.updateOptions
+//is a temp place holder for that
+__updateoptions__ = Envjs.updateOptions = function(node) {
+    var parent = __selectparent__(node),
+        s;
+    if (parent) {
+        // has side effects and updates owner select's options
+        s = parent.options;
+    }
+};
+
+/*
+* HTMLParagraphElement - DOM Level 2
+*/
+
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLParagraphElement').
+		debug('HTMLParagraphElement available');    
+});
+
+exports.HTMLParagraphElement = HTMLParagraphElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLParagraphElement.prototype = new HTMLElement();
+__extend__(HTMLParagraphElement.prototype, {
+    toString: function(){
+        return '[object HTMLParagraphElement]';
+    }
+});
+
+}(/*HTMLParagraphElement*/));
+
+
+/**
+ * HTMLParamElement
+ *
+ * HTML5: 4.8.6 The param element
+ * http://dev.w3.org/html5/spec/Overview.html#the-param-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLParamElement').
+		debug('HTMLParamElement available');    
+});
+
+exports.HTMLParamElement = HTMLParamElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLParamElement.prototype = new HTMLElement();
+__extend__(HTMLParamElement.prototype, {
+    get name() {
+        return this.getAttribute('name') || '';
+    },
+    set name(value) {
+        this.setAttribute('name', value);
+    },
+    get type(){
+        return this.getAttribute('type');
+    },
+    set type(value){
+        this.setAttribute('type',value);
+    },
+    get value(){
+        return this.getAttribute('value');
+    },
+    set value(value){
+        this.setAttribute('value',value);
+    },
+    get valueType(){
+        return this.getAttribute('valuetype');
+    },
+    set valueType(value){
+        this.setAttribute('valuetype',value);
+    },
+    toString: function() {
+        return '[object HTMLParamElement]';
+    }
+});
+
+}(/*HTMLParamElement*/));
+
+/*
+ * HTMLPreElement
+ * HTML5: 4.5.4 The pre Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-pre-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLPreElement').
+		debug('HTMLPreElement available');    
+});
+
+exports.HTMLPreElement = HTMLPreElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLPreElement.prototype = new HTMLElement();
+__extend__(HTMLPreElement.prototype, {
+    // no additional properties or elements
+    toString: function() {
+        return '[object HTMLPreElement]';
+    }
+});
+
+}(/*HTMLPreElement*/));
+
+/**
+ * HTMLScriptElement - DOM Level 2
+ *
+ * HTML5: 4.3.1 The script element
+ * http://dev.w3.org/html5/spec/Overview.html#script
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLScriptElement').
+		debug('HTMLScriptElement available');    
+});
+
+exports.HTMLScriptElement = HTMLScriptElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLScriptElement.prototype = new HTMLElement();
+__extend__(HTMLScriptElement.prototype, {
+
+    /**
+     * HTML5 spec @ http://dev.w3.org/html5/spec/Overview.html#script
+     *
+     * "The IDL attribute text must return a concatenation of the
+     * contents of all the text nodes that are direct children of the
+     * script element (ignoring any other nodes such as comments or
+     * elements), in tree order. On setting, it must act the same way
+     * as the textContent IDL attribute."
+     *
+     * AND... "The term text node refers to any Text node,
+     * including CDATASection nodes; specifically, any Node with node
+     * type TEXT_NODE (3) or CDATA_SECTION_NODE (4)"
+     */
+    get text() {
+        var kids = this.childNodes;
+        var kid;
+        var s = '';
+        var imax = kids.length;
+        for (var i = 0; i < imax; ++i) {
+            kid = kids[i];
+            if (kid.nodeType === Node.TEXT_NODE ||
+                kid.nodeType === Node.CDATA_SECTION_NODE) {
+                s += kid.nodeValue;
+            }
+        }
+        return s;
+    },
+
+    /**
+     * HTML5 spec "Can be set, to replace the element's children with
+     * the given value."
+     */
+    set text(value) {
+        // this deletes all children, and make a new single text node
+        // with value
+        this.textContent = value;
+
+        /* Currently we always execute, but this isn't quite right if
+         * the node has *not* been inserted into the document, then it
+         * should *not* fire.  The more detailed answer from the spec:
+         *
+         * When a script element that is neither marked as having
+         * "already started" nor marked as being "parser-inserted"
+         * experiences one of the events listed in the following list,
+         * the user agent must synchronously run the script element:
+         *
+         *   * The script element gets inserted into a document.
+         *   * The script element is in a Document and its child nodes
+         *     are changed.
+         *   * The script element is in a Document and has a src
+         *     attribute set where previously the element had no such
+         *     attribute.
+         *
+         * And no doubt there are other cases as well.
+         */
+        Envjs.loadInlineScript(this);
+    },
+
+    get htmlFor(){
+        return this.getAttribute('for');
+    },
+    set htmlFor(value){
+        this.setAttribute('for',value);
+    },
+    get event(){
+        return this.getAttribute('event');
+    },
+    set event(value){
+        this.setAttribute('event',value);
+    },
+    get charset(){
+        return this.getAttribute('charset');
+    },
+    set charset(value){
+        this.setAttribute('charset',value);
+    },
+    get defer(){
+        return this.getAttribute('defer');
+    },
+    set defer(value){
+        this.setAttribute('defer',value);
+    },
+    get src(){
+        return this.getAttribute('src')||'';
+    },
+    set src(value){
+        this.setAttribute('src',value);
+    },
+    get type(){
+        return this.getAttribute('type')||'';
+    },
+    set type(value){
+        this.setAttribute('type',value);
+    },
+    onload: HTMLEvents.prototype.onload,
+    onerror: HTMLEvents.prototype.onerror,
+    toString: function() {
+        return '[object HTMLScriptElement]';
+    }
+});
+
+}(/*HTMLScriptElement*/));
+
+/**
+ * HTMLSelectElement
+ * HTML5: http://dev.w3.org/html5/spec/Overview.html#the-select-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLSelectElement').
+		debug('HTMLSelectElement available');    
+});
+
+exports.HTMLSelectElement = HTMLSelectElement = function(ownerDocument) {
+    HTMLTypeValueInputs.apply(this, arguments);
+    this._oldIndex = -1;
+};
+
+HTMLSelectElement.prototype = new HTMLTypeValueInputs();
+__extend__(HTMLSelectElement.prototype, inputElements_dataProperties);
+__extend__(HTMLButtonElement.prototype, inputElements_size);
+__extend__(HTMLSelectElement.prototype, inputElements_onchange);
+__extend__(HTMLSelectElement.prototype, inputElements_focusEvents);
+__extend__(HTMLSelectElement.prototype, {
+
+    get value() {
+        var index = this.selectedIndex;
+        return (index === -1) ? '' : this.options[index].value;
+    },
+    set value(newValue) {
+        var options = this.options;
+        var imax = options.length;
+        for (var i=0; i< imax; ++i) {
+            if (options[i].value == newValue) {
+                this.setAttribute('value', newValue);
+                this.selectedIndex = i;
+                return;
+            }
+        }
+    },
+    get multiple() {
+        return this.hasAttribute('multiple');
+    },
+    set multiple(value) {
+        if (value) {
+            this.setAttribute('multiple', '');
+        } else {
+            if (this.hasAttribute('multiple')) {
+                this.removeAttribute('multiple');
+            }
+        }
+    },
+    // Returns HTMLOptionsCollection
+    get options() {
+        var nodes = this.getElementsByTagName('option');
+        var alist = new NodeList();
+        var i, tmp;
+        for (i = 0; i < nodes.length; ++i) {
+            alist.push(nodes[i]);
+            this[i] = nodes[i];
+            tmp = nodes[i].name;
+            if (tmp) {
+                this[tmp] = nodes[i];
+            }
+            tmp = nodes[i].id;
+            if (tmp) {
+                this[tmp] = nodes[i];
+            }
+        }
+        return new HTMLCollection(alist);
+    },
+    get length() {
+        return this.options.length;
+    },
+    item: function(idx) {
+        return this.options[idx];
+    },
+    namedItem: function(aname) {
+        return this.options[aname];
+    },
+
+    get selectedIndex() {
+        var options = this.options;
+        var imax = options.length;
+        for (var i=0; i < imax; ++i) {
+            if (options[i].selected) {
+                //console.log('select get selectedIndex %s', i);
+                return i;
+            }
+        }
+        //console.log('select get selectedIndex %s', -1);
+        return -1;
+    },
+
+    set selectedIndex(value) {
+        var options = this.options;
+        var num = Number(value);
+        var imax = options.length;
+        for (var i = 0; i < imax; ++i) {
+            options[i].selected = (i === num);
+        }
+    },
+    get type() {
+        return this.multiple ? 'select-multiple' : 'select-one';
+    },
+
+    add: function(element, before) {
+        this.appendChild(element);
+        //__add__(this);
+    },
+    remove: function() {
+        //__remove__(this);
+    },
+    toString: function() {
+        return '[object HTMLSelectElement]';
+    }
+});
+
+// Named Element Support
+HTMLElement.registerSetAttribute('SELECT', 'name', __updateFormForNamedElement__);
+
+}(/*HTMLSelectElement*/));
+/**
+ * HTML 5: 4.6.22 The span element
+ * http://dev.w3.org/html5/spec/Overview.html#the-span-element
+ * 
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLSpanElement').
+		debug('HTMLSpanElement available');    
+});
+
+exports.HTMLSpanElement = HTMLSpanElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLSpanElement.prototype = new HTMLElement();
+__extend__(HTMLSpanElement.prototype, {
+    toString: function(){
+        return '[object HTMLSpanElement]';
+    }
+});
+
+}(/*HTMLSpanElement*/));
+
+/**
+ * HTMLStyleElement - DOM Level 2
+ * HTML5 4.2.6 The style element
+ * http://dev.w3.org/html5/spec/Overview.html#the-style-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLStyleElement').
+		debug('HTMLStyleElement available');    
+});
+
+exports.HTMLStyleElement = HTMLStyleElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLStyleElement.prototype = new HTMLElement();
+__extend__(HTMLStyleElement.prototype, {
+    get disabled(){
+        return this.getAttribute('disabled');
+    },
+    set disabled(value){
+        this.setAttribute('disabled',value);
+    },
+    get media(){
+        return this.getAttribute('media');
+    },
+    set media(value){
+        this.setAttribute('media',value);
+    },
+    get type(){
+        return this.getAttribute('type');
+    },
+    set type(value){
+        this.setAttribute('type',value);
+    },
+    toString: function() {
+        return '[object HTMLStyleElement]';
+    }
+});
+
+}(/*HTMLStyleElement*/));
+
+/**
+ * HTMLTableElement - DOM Level 2
+ * Implementation Provided by Steven Wood
+ *
+ * HTML5: 4.9.1 The table element
+ * http://dev.w3.org/html5/spec/Overview.html#the-table-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTableElement').
+		debug('HTMLTableElement available');    
+});
+
+exports.HTMLTableElement = HTMLTableElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLTableElement.prototype = new HTMLElement();
+__extend__(HTMLTableElement.prototype, {
+
+    get tFoot() {
+        //tFoot returns the table footer.
+        return this.getElementsByTagName("tfoot")[0];
+    },
+
+    createTFoot : function () {
+        var tFoot = this.tFoot;
+
+        if (!tFoot) {
+            tFoot = document.createElement("tfoot");
+            this.appendChild(tFoot);
+        }
+
+        return tFoot;
+    },
+
+    deleteTFoot : function () {
+        var foot = this.tFoot;
+        if (foot) {
+            foot.parentNode.removeChild(foot);
+        }
+    },
+
+    get tHead() {
+        //tHead returns the table head.
+        return this.getElementsByTagName("thead")[0];
+    },
+
+    createTHead : function () {
+        var tHead = this.tHead;
+
+        if (!tHead) {
+            tHead = document.createElement("thead");
+            this.insertBefore(tHead, this.firstChild);
+        }
+
+        return tHead;
+    },
+
+    deleteTHead : function () {
+        var head = this.tHead;
+        if (head) {
+            head.parentNode.removeChild(head);
+        }
+    },
+
+    /*appendChild : function (child) {
+
+      var tagName;
+      if(child&&child.nodeType==Node.ELEMENT_NODE){
+      tagName = child.tagName.toLowerCase();
+      if (tagName === "tr") {
+      // need an implcit <tbody> to contain this...
+      if (!this.currentBody) {
+      this.currentBody = document.createElement("tbody");
+
+      Node.prototype.appendChild.apply(this, [this.currentBody]);
+      }
+
+      return this.currentBody.appendChild(child);
+
+      } else if (tagName === "tbody" || tagName === "tfoot" && this.currentBody) {
+      this.currentBody = child;
+      return Node.prototype.appendChild.apply(this, arguments);
+
+      } else {
+      return Node.prototype.appendChild.apply(this, arguments);
+      }
+      }else{
+      //tables can still have text node from white space
+      return Node.prototype.appendChild.apply(this, arguments);
+      }
+      },*/
+
+    get tBodies() {
+        return new HTMLCollection(this.getElementsByTagName("tbody"));
+
+    },
+
+    get rows() {
+        return new HTMLCollection(this.getElementsByTagName("tr"));
+    },
+
+    insertRow : function (idx) {
+        if (idx === undefined) {
+            throw new Error("Index omitted in call to HTMLTableElement.insertRow ");
+        }
+
+        var rows = this.rows,
+            numRows = rows.length,
+            node,
+            inserted,
+            lastRow;
+
+        if (idx > numRows) {
+            throw new Error("Index > rows.length in call to HTMLTableElement.insertRow");
+        }
+
+        inserted = document.createElement("tr");
+        // If index is -1 or equal to the number of rows,
+        // the row is appended as the last row. If index is omitted
+        // or greater than the number of rows, an error will result
+        if (idx === -1 || idx === numRows) {
+            this.appendChild(inserted);
+        } else {
+            rows[idx].parentNode.insertBefore(inserted, rows[idx]);
+        }
+
+        return inserted;
+    },
+
+    deleteRow : function (idx) {
+        var elem = this.rows[idx];
+        elem.parentNode.removeChild(elem);
+    },
+
+    get summary() {
+        return this.getAttribute("summary");
+    },
+
+    set summary(summary) {
+        this.setAttribute("summary", summary);
+    },
+
+    get align() {
+        return this.getAttribute("align");
+    },
+
+    set align(align) {
+        this.setAttribute("align", align);
+    },
+
+    get bgColor() {
+        return this.getAttribute("bgColor");
+    },
+
+    set bgColor(bgColor) {
+        return this.setAttribute("bgColor", bgColor);
+    },
+
+    get cellPadding() {
+        return this.getAttribute("cellPadding");
+    },
+
+    set cellPadding(cellPadding) {
+        return this.setAttribute("cellPadding", cellPadding);
+    },
+
+    get cellSpacing() {
+        return this.getAttribute("cellSpacing");
+    },
+
+    set cellSpacing(cellSpacing) {
+        this.setAttribute("cellSpacing", cellSpacing);
+    },
+
+    get frame() {
+        return this.getAttribute("frame");
+    },
+
+    set frame(frame) {
+        this.setAttribute("frame", frame);
+    },
+
+    get rules() {
+        return this.getAttribute("rules");
+    },
+
+    set rules(rules) {
+        this.setAttribute("rules", rules);
+    },
+
+    get width() {
+        return this.getAttribute("width");
+    },
+
+    set width(width) {
+        this.setAttribute("width", width);
+    },
+    toString: function() {
+        return '[object HTMLTableElement]';
+    }
+});
+
+}(/*HTMLTableElement*/));
+
+/*
+ * HTMLxElement - DOM Level 2
+ * - Contributed by Steven Wood
+ *
+ * HTML5: 4.9.5 The tbody element
+ * http://dev.w3.org/html5/spec/Overview.html#the-tbody-element
+ * http://dev.w3.org/html5/spec/Overview.html#htmltablesectionelement
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTableSectionElement').
+		debug('HTMLTableSectionElement available');    
+});
+
+exports.HTMLTableSectionElement = HTMLTableSectionElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLTableSectionElement.prototype = new HTMLElement();
+__extend__(HTMLTableSectionElement.prototype, {
+
+    /*appendChild : function (child) {
+
+    // disallow nesting of these elements.
+    if (child.tagName.match(/TBODY|TFOOT|THEAD/)) {
+    return this.parentNode.appendChild(child);
+    } else {
+    return Node.prototype.appendChild.apply(this, arguments);
+    }
+
+    },*/
+
+    get align() {
+        return this.getAttribute("align");
+    },
+
+    get ch() {
+        return this.getAttribute("ch");
+    },
+
+    set ch(ch) {
+        this.setAttribute("ch", ch);
+    },
+
+    // ch gets or sets the alignment character for cells in a column.
+    set chOff(chOff) {
+        this.setAttribute("chOff", chOff);
+    },
+
+    get chOff() {
+        return this.getAttribute("chOff");
+    },
+
+    get vAlign () {
+        return this.getAttribute("vAlign");
+    },
+
+    get rows() {
+        return new HTMLCollection(this.getElementsByTagName("tr"));
+    },
+
+    insertRow : function (idx) {
+        if (idx === undefined) {
+            throw new Error("Index omitted in call to HTMLTableSectionElement.insertRow ");
+        }
+
+        var numRows = this.rows.length,
+        node = null;
+
+        if (idx > numRows) {
+            throw new Error("Index > rows.length in call to HTMLTableSectionElement.insertRow");
+        }
+
+        var row = document.createElement("tr");
+        // If index is -1 or equal to the number of rows,
+        // the row is appended as the last row. If index is omitted
+        // or greater than the number of rows, an error will result
+        if (idx === -1 || idx === numRows) {
+            this.appendChild(row);
+        } else {
+            node = this.firstChild;
+
+            for (var i=0; i<idx; i++) {
+                node = node.nextSibling;
+            }
+        }
+
+        this.insertBefore(row, node);
+
+        return row;
+    },
+
+    deleteRow : function (idx) {
+        var elem = this.rows[idx];
+        this.removeChild(elem);
+    },
+
+    toString: function() {
+        return '[object HTMLTableSectionElement]';
+    }
+});
+
+}(/*HTMLTableSectionElement*/));
+
+
+/**
+ * HTMLTableCellElement
+ * base interface for TD and TH
+ *
+ * HTML5: 4.9.11 Attributes common to td and th elements
+ * http://dev.w3.org/html5/spec/Overview.html#htmltablecellelement
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTableCellElement').
+		debug('HTMLTableCellElement available');    
+});
+
+exports.HTMLTableCellElement = HTMLTableCellElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLTableCellElement.prototype = new HTMLElement();
+__extend__(HTMLTableCellElement.prototype, {
+    // TOOD: attribute unsigned long  colSpan;
+    // TODO: attribute unsigned long  rowSpan;
+    // TODO: attribute DOMString      headers;
+    // TODO: readonly attribute long  cellIndex;
+
+    // Not really necessary but might be helpful in debugging
+    toString: function() {
+        return '[object HTMLTableCellElement]';
+    }
+
+});
+
+}(/*HTMLTableCellElement*/));
+
+/**
+ * HTMLTableDataCellElement
+ * HTML5: 4.9.9 The td Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-td-element
+ */
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTableDataCellElement').
+		debug('HTMLTableDataCellElement available');    
+});
+
+exports.HTMLTableDataCellElement = HTMLTableDataCellElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLTableDataCellElement.prototype = new HTMLTableCellElement();
+__extend__(HTMLTableDataCellElement.prototype, {
+
+    // adds no new properties or methods
+
+    toString: function() {
+        return '[object HTMLTableDataCellElement]';
+    }
+});
+
+}(/*HTMLTableDataCellElement*/));
+
+
+
+/**
+ * HTMLTableHeaderCellElement
+ * HTML5: 4.9.10 The th Element
+ * http://dev.w3.org/html5/spec/Overview.html#the-th-element
+ */
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTableHeaderCellElement').
+		debug('HTMLTableHeaderCellElement available');    
+});
+
+exports.HTMLTableHeaderCellElement = HTMLTableHeaderCellElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLTableHeaderCellElement.prototype = new HTMLTableCellElement();
+__extend__(HTMLTableHeaderCellElement.prototype, {
+    // TODO:  attribute DOMString scope
+    toString: function() {
+        return '[object HTMLTableHeaderCellElement]';
+    }
+});
+
+}(/*HTMLTableHeaderCellElement*/));
+
+
+/**
+ * HTMLTextAreaElement - DOM Level 2
+ * HTML5: 4.10.11 The textarea element
+ * http://dev.w3.org/html5/spec/Overview.html#the-textarea-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTextAreaElement').
+		debug('HTMLTextAreaElement available');    
+});
+
+exports.HTMLTextAreaElement = HTMLTextAreaElement = function(ownerDocument) {
+    HTMLInputAreaCommon.apply(this, arguments);
+    this._rawvalue = null;
+};
+HTMLTextAreaElement.prototype = new HTMLInputAreaCommon();
+__extend__(HTMLTextAreaElement.prototype, {
+    get cols(){
+        return Number(this.getAttribute('cols')||'-1');
+    },
+    set cols(value){
+        this.setAttribute('cols', value);
+    },
+    get rows(){
+        return Number(this.getAttribute('rows')||'-1');
+    },
+    set rows(value){
+        this.setAttribute('rows', value);
+    },
+
+    /*
+     * read-only
+     */
+    get type() {
+        return this.getAttribute('type') || 'textarea';
+    },
+
+    /**
+     * This modifies the text node under the widget
+     */
+    get defaultValue() {
+        return this.textContent;
+    },
+    set defaultValue(value) {
+        this.textContent = value;
+    },
+
+    /**
+     * http://dev.w3.org/html5/spec/Overview.html#concept-textarea-raw-value
+     */
+    get value() {
+        return (this._rawvalue === null) ? this.defaultValue : this._rawvalue;
+    },
+    set value(value) {
+        this._rawvalue = value;
+    },
+    toString: function() {
+        return '[object HTMLTextAreaElement]';
+    }
+});
+
+// Named Element Support
+HTMLElement.registerSetAttribute('TEXTAREA', 'name', __updateFormForNamedElement__);
+
+}(/*HTMLTextAreaElement*/));
+
+/**
+ * HTMLTitleElement - DOM Level 2
+ *
+ * HTML5: 4.2.2 The title element
+ * http://dev.w3.org/html5/spec/Overview.html#the-title-element-0
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTitleElement').
+		debug('HTMLTitleElement available');    
+});
+
+exports.HTMLTitleElement = HTMLTitleElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLTitleElement.prototype = new HTMLElement();
+__extend__(HTMLTitleElement.prototype, {
+    get text() {
+        return this.innerText;
+    },
+
+    set text(titleStr) {
+        this.textContent = titleStr;
+    },
+    toString: function() {
+        return '[object HTMLTitleElement]';
+    }
+});
+
+}(/*HTMLTitleElement*/));
+
+/**
+ * HTMLRowElement - DOM Level 2
+ * Implementation Provided by Steven Wood
+ *
+ * HTML5: 4.9.8 The tr element
+ * http://dev.w3.org/html5/spec/Overview.html#the-tr-element
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLTableRowElement').
+		debug('HTMLTableRowElement available');    
+});
+
+exports.HTMLTableRowElement = HTMLTableRowElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLTableRowElement.prototype = new HTMLElement();
+__extend__(HTMLTableRowElement.prototype, {
+
+    /*appendChild : function (child) {
+
+      var retVal = Node.prototype.appendChild.apply(this, arguments);
+      retVal.cellIndex = this.cells.length -1;
+
+      return retVal;
+      },*/
+    // align gets or sets the horizontal alignment of data within cells of the row.
+    get align() {
+        return this.getAttribute("align");
+    },
+
+    get bgColor() {
+        return this.getAttribute("bgcolor");
+    },
+
+    get cells() {
+        var nl = this.getElementsByTagName("td");
+        return new HTMLCollection(nl);
+    },
+
+    get ch() {
+        return this.getAttribute("ch");
+    },
+
+    set ch(ch) {
+        this.setAttribute("ch", ch);
+    },
+
+    // ch gets or sets the alignment character for cells in a column.
+    set chOff(chOff) {
+        this.setAttribute("chOff", chOff);
+    },
+
+    get chOff() {
+        return this.getAttribute("chOff");
+    },
+
+    /**
+     * http://dev.w3.org/html5/spec/Overview.html#dom-tr-rowindex
+     */
+    get rowIndex() {
+        var nl = this.parentNode.childNodes;
+        for (var i=0; i<nl.length; i++) {
+            if (nl[i] === this) {
+                return i;
+            }
+        }
+        return -1;
+    },
+
+    /**
+     * http://dev.w3.org/html5/spec/Overview.html#dom-tr-sectionrowindex
+     */
+    get sectionRowIndex() {
+        var nl = this.parentNode.getElementsByTagName(this.tagName);
+        for (var i=0; i<nl.length; i++) {
+            if (nl[i] === this) {
+                return i;
+            }
+        }
+        return -1;
+    },
+
+    get vAlign () {
+        return this.getAttribute("vAlign");
+    },
+
+    insertCell : function (idx) {
+        if (idx === undefined) {
+            throw new Error("Index omitted in call to HTMLTableRow.insertCell");
+        }
+
+        var numCells = this.cells.length,
+        node = null;
+
+        if (idx > numCells) {
+            throw new Error("Index > rows.length in call to HTMLTableRow.insertCell");
+        }
+
+        var cell = document.createElement("td");
+
+        if (idx === -1 || idx === numCells) {
+            this.appendChild(cell);
+        } else {
+
+
+            node = this.firstChild;
+
+            for (var i=0; i<idx; i++) {
+                node = node.nextSibling;
+            }
+        }
+
+        this.insertBefore(cell, node);
+        cell.cellIndex = idx;
+
+        return cell;
+    },
+    deleteCell : function (idx) {
+        var elem = this.cells[idx];
+        this.removeChild(elem);
+    },
+    toString: function() {
+        return '[object HTMLTableRowElement]';
+    }
+
+});
+
+}(/*HTMLTableRowElement*/));
+
+/*
+ * HTMLUListElement
+ * HTML5: 4.5.7 The ul Element
+ * http://dev.w3.org/html5/spec/Overview.html#htmlhtmlelement
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLUListElement').
+		debug('HTMLUListElement available');    
+});
+
+exports.HTMLUListElement = HTMLUListElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+
+HTMLUListElement.prototype = new HTMLElement();
+__extend__(HTMLUListElement.prototype, {
+    // no additional properties or elements
+    toString: function() {
+        return '[object HTMLUListElement]';
+    }
+});
+
+}(/*HTMLUListElement*/));
+
+/**
+ * HTMLUnknownElement DOM Level 2
+ */
+ 
+(function(){
+    
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLUnknownElement').
+		debug('HTMLUnknownElement available');    
+});
+
+exports.HTMLUnknownElement = HTMLUnknownElement = function(ownerDocument) {
+    HTMLElement.apply(this, arguments);
+};
+HTMLUnknownElement.prototype = new HTMLElement();
+__extend__(HTMLUnknownElement.prototype,{
+    toString: function(){
+        return '[object HTMLUnknownElement]';
+    }
+});
+
+}(/*HTMLUnknownElement*/));
+
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/johnson.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/johnson.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/johnson.js	(revision 76)
@@ -0,0 +1,66 @@
+// This file must be executed automatically on startup for ruby/v8 rubyracer support.
+var __this__ = this;
+
+var require = (function() {
+    var cached = {};
+    var currentPath = Ruby.ENV['PWD'];
+    var paths = [currentPath];
+    
+    function normalize(id) {
+		var file;
+        id = id + '.js';
+        if (/^\.\.?/.test(id)) {
+            // relative path
+			try{ return Ruby.File.open(id, 'r') }catch(e){}
+        } else {
+            for (var i = 0, len = paths.length; i < len; ++i) {
+			    try{ return Ruby.File.open(paths[i]+'/'+id, 'r') }catch(e){}
+            }
+        }
+        return undefined;
+    };
+    
+    
+    function require(id) {
+		//print('require :'+ id);
+        var file = normalize(id);
+        if (!file) {
+            throw new Error("couldn't find module \"" + id + "\"");
+        }
+        if (!cached.hasOwnProperty(id)) {
+			//print('loading '+id);
+            var source = file.read();
+            source = source.replace(/^\#\!.*/, '');
+            source = "(function (require, exports, module) { "+source+"\n});";
+            cached[id] = {
+                exports: {},
+                module: {
+                    id: id,
+                    uri: id
+                }
+            };
+            var previousPath = currentPath;
+            try {
+                currentPath = id.substr(0, id.lastIndexOf('/')) || '.';
+                var func = global.evaluate( source, id );
+                func(require, cached[id].exports, cached[id].module);
+            } finally {
+                currentPath = previousPath;
+            }
+        }
+		/*
+		print('returning exports for id: '+id+' '+cached[id].exports);
+		for(var prop in cached[id].exports){
+			print('export: '+prop);
+		}
+		*/
+        return cached[id].exports;
+    };
+    
+    require.paths = paths;
+    
+    return require;
+})();
+
+require('./platform/johnson');
+require('./window');
Index: /Dev/trunk/d3/lib/env-js/envjs/johnson.rb
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/johnson.rb	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/johnson.rb	(revision 76)
@@ -0,0 +1,31 @@
+require 'johnson'
+require 'net/http'
+require 'uri'
+require 'thread'
+
+include Config
+
+def configure_context(context)
+  context['global']    = context
+  context['HTTPConnection'] = HTTPConnection.new
+end
+
+class HTTPConnection
+  def go(connection, request, headers, data)
+    headers.each{|key,value| request.add_field(key,value)}
+    response, body = connection.request(request, data)
+    respheaders = Hash.new
+    response.each_header do |name, value|
+      respheaders.store(name, value)
+    end
+    response['body'] = body
+    [response, respheaders]
+  end
+end
+
+global = Johnson::Runtime.new
+configure_context(global)
+envjs = ARGV[0]
+global.load(envjs)
+
+
Index: /Dev/trunk/d3/lib/env-js/envjs/node.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/node.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/node.js	(revision 76)
@@ -0,0 +1,7 @@
+process.env.TZ = 'America/Los_Angeles';
+
+require('./platform/node');
+Envjs.eventLoop = function() {}; // disabled for clean shutdown
+
+require('./window');
+new Window(__this__); // initialize a blank window
Index: /Dev/trunk/d3/lib/env-js/envjs/parser.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/parser.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/parser.js	(revision 76)
@@ -0,0 +1,14465 @@
+/**
+ * these are both non-standard globals that
+ * provide static namespaces and functions
+ * to support the html 5 parser from nu.
+ *
+ * these are intentionally leaked globally
+ *  XMLParser = {},
+ *  HTMLParser = {};
+ *
+ */
+
+var Envjs = Envjs || require('./platform/core').Envjs,
+	After = After || require('./platform/core').After,
+	DOMImplementation = DOMImplementation || require('./dom').DOMImplementation,
+	Document = Document || require('./dom').Document,
+	Element = Element || require('./dom').Element,
+	NodeList = NodeList || require('./dom').NodeList,
+	Node = Node || require('./dom').Node,
+	HTMLDocument = HTMLDocument || require('./html').HTMLDocument,
+	HTMLElement = HTMLElement || require('./html').HTMLElement;
+/*
+ * Envjs parser.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    }
+    return a;
+}
+
+/**
+ * @author john resig
+ */
+//from jQuery
+function __setArray__( target, array ) {
+    // Resetting the length to 0, then using the native Array push
+    // is a super-fast way to populate an object with array-like properties
+    target.length = 0;
+    Array.prototype.push.apply( target, array );
+}
+var $_window = this;var $gwt_version = "2.0.3";var $wnd = $_window;var $doc = $wnd.document;var $moduleName, $moduleBase;var $stats = $wnd.__gwtStatsEvent ? function(a) {$wnd.__gwtStatsEvent(a)} : null;var $strongName = '8150BFC222C63DA4E59C16141DE3DB1B';var _, N8000000000000000_longLit = [0, -9223372036854775808], P1000000_longLit = [16777216, 0], P7fffffffffffffff_longLit = [4294967295, 9223372032559808512];
+function nullMethod(){
+}
+
+function equals(other){
+  return this === (other == null?null:other);
+}
+
+function getClass_0(){
+  return Ljava_lang_Object_2_classLit;
+}
+
+function hashCode_0(){
+  return this.$H || (this.$H = ++sNextHashId);
+}
+
+function toString_0(){
+  return (this.typeMarker$ == nullMethod || this.typeId$ == 2?this.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit).typeName + '@' + toPowerOfTwoString(this.typeMarker$ == nullMethod || this.typeId$ == 2?this.hashCode$():this.$H || (this.$H = ++sNextHashId), 4);
+}
+
+function Object_0(){
+}
+
+_ = Object_0.prototype = {};
+_.equals$ = equals;
+_.getClass$ = getClass_0;
+_.hashCode$ = hashCode_0;
+_.toString$ = toString_0;
+_.toString = function(){
+  return this.toString$();
+}
+;
+_.typeMarker$ = nullMethod;
+_.typeId$ = 1;
+function $setStackTrace(stackTrace){
+  var c, copy, i;
+  copy = initDim(_3Ljava_lang_StackTraceElement_2_classLit, 54, 9, stackTrace.length, 0);
+  for (i = 0 , c = stackTrace.length; i < c; ++i) {
+    if (!stackTrace[i]) {
+      throw $NullPointerException(new NullPointerException);
+    }
+    copy[i] = stackTrace[i];
+  }
+}
+
+function $toString(this$static){
+  var className, msg;
+  className = this$static.getClass$().typeName;
+  msg = this$static.getMessage();
+  if (msg != null) {
+    return className + ': ' + msg;
+  }
+   else {
+    return className;
+  }
+}
+
+function getClass_1(){
+  return Ljava_lang_Throwable_2_classLit;
+}
+
+function getMessage(){
+  return this.detailMessage;
+}
+
+function toString_1(){
+  return $toString(this);
+}
+
+function Throwable(){
+}
+
+_ = Throwable.prototype = new Object_0;
+_.getClass$ = getClass_1;
+_.getMessage = getMessage;
+_.toString$ = toString_1;
+_.typeId$ = 3;
+_.detailMessage = null;
+function getClass_2(){
+  return Ljava_lang_Exception_2_classLit;
+}
+
+function Exception(){
+}
+
+_ = Exception.prototype = new Throwable;
+_.getClass$ = getClass_2;
+_.typeId$ = 4;
+function $RuntimeException(this$static, message){
+  $fillInStackTrace();
+  this$static.detailMessage = message;
+  return this$static;
+}
+
+function getClass_3(){
+  return Ljava_lang_RuntimeException_2_classLit;
+}
+
+function RuntimeException(){
+}
+
+_ = RuntimeException.prototype = new Exception;
+_.getClass$ = getClass_3;
+_.typeId$ = 5;
+function $JavaScriptException(this$static, e){
+  $fillInStackTrace();
+  this$static.e = e;
+  $createStackTrace(this$static);
+  return this$static;
+}
+
+function $getMessage_0(this$static){
+  this$static.message_0 == null && (this$static.name_0 = getName(this$static.e) , this$static.description = getDescription(this$static.e) , this$static.message_0 = '(' + this$static.name_0 + '): ' + this$static.description + getProperties(this$static.e) , undefined);
+  return this$static.message_0;
+}
+
+function getClass_4(){
+  return Lcom_google_gwt_core_client_JavaScriptException_2_classLit;
+}
+
+function getDescription(e){
+  if (e != null && e.typeMarker$ != nullMethod && e.typeId$ != 2) {
+    return getDescription0(dynamicCastJso(e));
+  }
+   else {
+    return e + '';
+  }
+}
+
+function getDescription0(e){
+  return e == null?null:e.message;
+}
+
+function getMessage_0(){
+  return $getMessage_0(this);
+}
+
+function getName(e){
+  if (e == null) {
+    return 'null';
+  }
+   else if (e != null && e.typeMarker$ != nullMethod && e.typeId$ != 2) {
+    return getName0(dynamicCastJso(e));
+  }
+   else if (e != null && canCast(e.typeId$, 1)) {
+    return 'String';
+  }
+   else {
+    return (e.typeMarker$ == nullMethod || e.typeId$ == 2?e.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit).typeName;
+  }
+}
+
+function getName0(e){
+  return e == null?null:e.name;
+}
+
+function getProperties(e){
+  return e != null && e.typeMarker$ != nullMethod && e.typeId$ != 2?getProperties0(dynamicCastJso(e)):'';
+}
+
+function getProperties0(e){
+  var result = '';
+  try {
+    for (prop in e) {
+      if (prop != 'name' && prop != 'message' && prop != 'toString') {
+        try {
+          result += '\n ' + prop + ': ' + e[prop];
+        }
+         catch (ignored) {
+        }
+      }
+    }
+  }
+   catch (ignored) {
+  }
+  return result;
+}
+
+function JavaScriptException(){
+}
+
+_ = JavaScriptException.prototype = new RuntimeException;
+_.getClass$ = getClass_4;
+_.getMessage = getMessage_0;
+_.typeId$ = 6;
+_.description = null;
+_.e = null;
+_.message_0 = null;
+_.name_0 = null;
+function createFunction(){
+  return function(){
+  }
+  ;
+}
+
+function equals__devirtual$(this$static, other){
+  return this$static.typeMarker$ == nullMethod || this$static.typeId$ == 2?this$static.equals$(other):(this$static == null?null:this$static) === (other == null?null:other);
+}
+
+function hashCode__devirtual$(this$static){
+  return this$static.typeMarker$ == nullMethod || this$static.typeId$ == 2?this$static.hashCode$():this$static.$H || (this$static.$H = ++sNextHashId);
+}
+
+function getClass_6(){
+  return Lcom_google_gwt_core_client_Scheduler_2_classLit;
+}
+
+function Scheduler(){
+}
+
+_ = Scheduler.prototype = new Object_0;
+_.getClass$ = getClass_6;
+_.typeId$ = 0;
+function entry_0(jsFunction){
+  return function(){
+    return entry0(jsFunction, this, arguments);
+  }
+  ;
+}
+
+function entry0(jsFunction, thisObj, arguments_0){
+  var initialEntry;
+  initialEntry = entryDepth++ == 0;
+  try {
+    return jsFunction.apply(thisObj, arguments_0);
+  }
+   finally {
+    initialEntry && $flushFinallyCommands(($clinit_12() , INSTANCE));
+    --entryDepth;
+  }
+}
+
+var entryDepth = 0, sNextHashId = 0;
+function $clinit_12(){
+  $clinit_12 = nullMethod;
+  INSTANCE = $SchedulerImpl(new SchedulerImpl);
+}
+
+function $SchedulerImpl(this$static){
+  $clinit_12();
+  this$static.flusher = $SchedulerImpl$1(new SchedulerImpl$1, this$static);
+  $SchedulerImpl$2(new SchedulerImpl$2, this$static);
+  this$static.deferredCommands = [];
+  this$static.incrementalCommands = [];
+  this$static.finallyCommands = [];
+  return this$static;
+}
+
+function $flushFinallyCommands(this$static){
+  var oldFinally;
+  oldFinally = this$static.finallyCommands;
+  this$static.finallyCommands = [];
+  runScheduledTasks(oldFinally, this$static.finallyCommands);
+}
+
+function $flushPostEventPumpCommands(this$static){
+  var oldDeferred;
+  oldDeferred = this$static.deferredCommands;
+  this$static.deferredCommands = [];
+  runScheduledTasks(oldDeferred, this$static.incrementalCommands);
+  this$static.incrementalCommands = runRepeatingTasks(this$static.incrementalCommands);
+}
+
+function $isWorkQueued(this$static){
+  return this$static.deferredCommands.length > 0 || this$static.incrementalCommands.length > 0;
+}
+
+function execute(cmd){
+  return cmd.execute();
+}
+
+function getClass_7(){
+  return Lcom_google_gwt_core_client_impl_SchedulerImpl_2_classLit;
+}
+
+function runRepeatingTasks(tasks){
+  var canceledSomeTasks, i, length_0, newTasks, start, t;
+  canceledSomeTasks = false;
+  length_0 = tasks.length;
+  start = (new Date).getTime();
+  while ((new Date).getTime() - start < 100) {
+    for (i = 0; i < length_0; ++i) {
+      t = tasks[i];
+      if (!t) {
+        continue;
+      }
+      if (!t[0].execute()) {
+        tasks[i] = null;
+        canceledSomeTasks = true;
+      }
+    }
+  }
+  if (canceledSomeTasks) {
+    newTasks = [];
+    for (i = 0; i < length_0; ++i) {
+      if (!tasks[i]) {
+        continue;
+      }
+      newTasks[newTasks.length] = tasks[i];
+    }
+    return newTasks;
+  }
+   else {
+    return tasks;
+  }
+}
+
+function runScheduledTasks(tasks, rescheduled){
+  var $e0, i, j, t;
+  for (i = 0 , j = tasks.length; i < j; ++i) {
+    t = tasks[i];
+    try {
+      t[1]?t[0].execute() && (rescheduled[rescheduled.length] = t , undefined):t[0].nullMethod();
+    }
+     catch ($e0) {
+      $e0 = caught($e0);
+      if (!instanceOf($e0, 2))
+        throw $e0;
+    }
+  }
+}
+
+function scheduleFixedDelayImpl(cmd, delayMs){
+  $clinit_12();
+  $wnd.setTimeout(function(){
+    var ret = $entry(execute)(cmd);
+    ret && $wnd.setTimeout(arguments.callee, delayMs);
+  }
+  , delayMs);
+}
+
+function SchedulerImpl(){
+}
+
+_ = SchedulerImpl.prototype = new Scheduler;
+_.getClass$ = getClass_7;
+_.typeId$ = 0;
+_.flushRunning = false;
+_.shouldBeRunning = false;
+var INSTANCE;
+function $SchedulerImpl$1(this$static, this$0){
+  this$static.this$0 = this$0;
+  return this$static;
+}
+
+function execute_0(){
+  this.this$0.flushRunning = true;
+  $flushPostEventPumpCommands(this.this$0);
+  this.this$0.flushRunning = false;
+  return this.this$0.shouldBeRunning = $isWorkQueued(this.this$0);
+}
+
+function getClass_8(){
+  return Lcom_google_gwt_core_client_impl_SchedulerImpl$1_2_classLit;
+}
+
+function SchedulerImpl$1(){
+}
+
+_ = SchedulerImpl$1.prototype = new Object_0;
+_.execute = execute_0;
+_.getClass$ = getClass_8;
+_.typeId$ = 0;
+_.this$0 = null;
+function $SchedulerImpl$2(this$static, this$0){
+  this$static.this$0 = this$0;
+  return this$static;
+}
+
+function execute_1(){
+  this.this$0.flushRunning && scheduleFixedDelayImpl(this.this$0.flusher, 1);
+  return this.this$0.shouldBeRunning;
+}
+
+function getClass_9(){
+  return Lcom_google_gwt_core_client_impl_SchedulerImpl$2_2_classLit;
+}
+
+function SchedulerImpl$2(){
+}
+
+_ = SchedulerImpl$2.prototype = new Object_0;
+_.execute = execute_1;
+_.getClass$ = getClass_9;
+_.typeId$ = 0;
+_.this$0 = null;
+function extractNameFromToString(fnToString){
+  var index, start, toReturn;
+  toReturn = '';
+  fnToString = $trim(fnToString);
+  index = fnToString.indexOf('(');
+  if (index != -1) {
+    start = fnToString.indexOf('function') == 0?8:0;
+    toReturn = $trim(fnToString.substr(start, index - start));
+  }
+  return toReturn.length > 0?toReturn:'anonymous';
+}
+
+function splice(arr, length_0){
+  arr.length >= length_0 && arr.splice(0, length_0);
+  return arr;
+}
+
+function $createStackTrace(e){
+  var i, j, stack, stackTrace;
+  stack = $inferFrom(instanceOfJso(e.e)?dynamicCastJso(e.e):null);
+  stackTrace = initDim(_3Ljava_lang_StackTraceElement_2_classLit, 54, 9, stack.length, 0);
+  for (i = 0 , j = stackTrace.length; i < j; ++i) {
+    stackTrace[i] = $StackTraceElement(new StackTraceElement, 'Unknown', stack[i], 'Unknown source', 0);
+  }
+  $setStackTrace(stackTrace);
+}
+
+function $fillInStackTrace(){
+  var i, j, stack, stackTrace;
+  stack = splice($inferFrom($makeException()), 2);
+  stackTrace = initDim(_3Ljava_lang_StackTraceElement_2_classLit, 54, 9, stack.length, 0);
+  for (i = 0 , j = stackTrace.length; i < j; ++i) {
+    stackTrace[i] = $StackTraceElement(new StackTraceElement, 'Unknown', stack[i], 'Unknown source', 0);
+  }
+  $setStackTrace(stackTrace);
+}
+
+function $makeException(){
+  try {
+    null.a();
+  }
+   catch (e) {
+    return e;
+  }
+}
+
+function $inferFrom(e){
+  var i, j, stack;
+  stack = e && e.stack?e.stack.split('\n'):[];
+  for (i = 0 , j = stack.length; i < j; ++i) {
+    stack[i] = extractNameFromToString(stack[i]);
+  }
+  return stack;
+}
+
+function getClass_10(){
+  return Lcom_google_gwt_core_client_impl_StringBufferImpl_2_classLit;
+}
+
+function StringBufferImpl(){
+}
+
+_ = StringBufferImpl.prototype = new Object_0;
+_.getClass$ = getClass_10;
+_.typeId$ = 0;
+function $replace(this$static, start, end, toInsert){
+  this$static.string = this$static.string.substr(0, start - 0) + toInsert + $substring(this$static.string, end);
+}
+
+function getClass_11(){
+  return Lcom_google_gwt_core_client_impl_StringBufferImplAppend_2_classLit;
+}
+
+function StringBufferImplAppend(){
+}
+
+_ = StringBufferImplAppend.prototype = new StringBufferImpl;
+_.getClass$ = getClass_11;
+_.typeId$ = 0;
+_.string = '';
+function getClass_12(){
+  return Lcom_google_gwt_event_shared_GwtEvent_2_classLit;
+}
+
+function toString_3(){
+  return 'An event type';
+}
+
+function GwtEvent(){
+}
+
+_ = GwtEvent.prototype = new Object_0;
+_.getClass$ = getClass_12;
+_.toString$ = toString_3;
+_.typeId$ = 0;
+_.dead = false;
+_.source = null;
+function dispatch(p0){
+  $onClose();
+}
+
+function fire(source){
+  var event_0;
+  if (TYPE) {
+    event_0 = new CloseEvent;
+    $fireEvent(source, event_0);
+  }
+}
+
+function getAssociatedType(){
+  return TYPE;
+}
+
+function getClass_13(){
+  return Lcom_google_gwt_event_logical_shared_CloseEvent_2_classLit;
+}
+
+function CloseEvent(){
+}
+
+_ = CloseEvent.prototype = new GwtEvent;
+_.dispatch = dispatch;
+_.getAssociatedType = getAssociatedType;
+_.getClass$ = getClass_13;
+_.typeId$ = 0;
+var TYPE = null;
+function getClass_14(){
+  return Lcom_google_gwt_event_shared_DefaultHandlerRegistration_2_classLit;
+}
+
+function DefaultHandlerRegistration(){
+}
+
+_ = DefaultHandlerRegistration.prototype = new Object_0;
+_.getClass$ = getClass_14;
+_.typeId$ = 0;
+function $GwtEvent$Type(this$static){
+  this$static.index = ++nextHashCode;
+  return this$static;
+}
+
+function getClass_15(){
+  return Lcom_google_gwt_event_shared_GwtEvent$Type_2_classLit;
+}
+
+function hashCode_2(){
+  return this.index;
+}
+
+function toString_4(){
+  return 'Event type';
+}
+
+function GwtEvent$Type(){
+}
+
+_ = GwtEvent$Type.prototype = new Object_0;
+_.getClass$ = getClass_15;
+_.hashCode$ = hashCode_2;
+_.toString$ = toString_4;
+_.typeId$ = 0;
+_.index = 0;
+var nextHashCode = 0;
+function $addHandler(this$static, type, handler){
+  this$static.firingDepth > 0?$defer(this$static, $HandlerManager$1(new HandlerManager$1, this$static, type, handler)):$addHandler_0(this$static.registry, type, handler);
+  return new DefaultHandlerRegistration;
+}
+
+function $defer(this$static, command){
+  !this$static.deferredDeltas && (this$static.deferredDeltas = $ArrayList(new ArrayList));
+  $add(this$static.deferredDeltas, command);
+}
+
+function $fireEvent(this$static, event_0){
+  var oldSource;
+  if (event_0.dead) {
+    event_0.dead = false;
+    event_0.source = null;
+  }
+  oldSource = event_0.source;
+  event_0.source = this$static.source;
+  try {
+    ++this$static.firingDepth;
+    $fireEvent_0(this$static.registry, event_0, this$static.isReverseOrder);
+  }
+   finally {
+    --this$static.firingDepth;
+    this$static.firingDepth == 0 && $handleQueuedAddsAndRemoves(this$static);
+  }
+  if (oldSource == null) {
+    event_0.dead = true;
+    event_0.source = null;
+  }
+   else {
+    event_0.source = oldSource;
+  }
+}
+
+function $handleQueuedAddsAndRemoves(this$static){
+  var c, c$iterator;
+  if (this$static.deferredDeltas) {
+    try {
+      for (c$iterator = $AbstractList$IteratorImpl(new AbstractList$IteratorImpl, this$static.deferredDeltas); c$iterator.i < c$iterator.this$0.size_0();) {
+        c = dynamicCast($next_0(c$iterator), 3);
+        $addHandler_0(c.this$0.registry, c.val$type, c.val$handler);
+      }
+    }
+     finally {
+      this$static.deferredDeltas = null;
+    }
+  }
+}
+
+function getClass_16(){
+  return Lcom_google_gwt_event_shared_HandlerManager_2_classLit;
+}
+
+function HandlerManager(){
+}
+
+_ = HandlerManager.prototype = new Object_0;
+_.getClass$ = getClass_16;
+_.typeId$ = 0;
+_.deferredDeltas = null;
+_.firingDepth = 0;
+_.isReverseOrder = false;
+_.registry = null;
+_.source = null;
+function $HandlerManager$1(this$static, this$0, val$type, val$handler){
+  this$static.this$0 = this$0;
+  this$static.val$type = val$type;
+  this$static.val$handler = val$handler;
+  return this$static;
+}
+
+function getClass_17(){
+  return Lcom_google_gwt_event_shared_HandlerManager$1_2_classLit;
+}
+
+function HandlerManager$1(){
+}
+
+_ = HandlerManager$1.prototype = new Object_0;
+_.getClass$ = getClass_17;
+_.typeId$ = 7;
+_.this$0 = null;
+_.val$handler = null;
+_.val$type = null;
+function $HandlerManager$HandlerRegistry(this$static){
+  this$static.map = $HashMap(new HashMap);
+  return this$static;
+}
+
+function $addHandler_0(this$static, type, handler){
+  var l;
+  l = dynamicCast($get_1(this$static.map, type), 4);
+  if (!l) {
+    l = $ArrayList(new ArrayList);
+    $put(this$static.map, type, l);
+  }
+  setCheck(l.array, l.size++, handler);
+}
+
+function $fireEvent_0(this$static, event_0, isReverseOrder){
+  var count, handler, i, type, l, l_0, l_1;
+  type = event_0.getAssociatedType();
+  count = (l = dynamicCast($get_1(this$static.map, type), 4) , !l?0:l.size);
+  if (isReverseOrder) {
+    for (i = count - 1; i >= 0; --i) {
+      handler = (l_0 = dynamicCast($get_1(this$static.map, type), 4) , dynamicCast((checkIndex(i, l_0.size) , l_0.array[i]), 19));
+      event_0.dispatch(handler);
+    }
+  }
+   else {
+    for (i = 0; i < count; ++i) {
+      handler = (l_1 = dynamicCast($get_1(this$static.map, type), 4) , dynamicCast((checkIndex(i, l_1.size) , l_1.array[i]), 19));
+      event_0.dispatch(handler);
+    }
+  }
+}
+
+function getClass_18(){
+  return Lcom_google_gwt_event_shared_HandlerManager$HandlerRegistry_2_classLit;
+}
+
+function HandlerManager$HandlerRegistry(){
+}
+
+_ = HandlerManager$HandlerRegistry.prototype = new Object_0;
+_.getClass$ = getClass_18;
+_.typeId$ = 0;
+function createFromSeed(seedType, length_0){
+  var array = new Array(length_0);
+  if (seedType > 0) {
+    var value = [null, 0, false, [0, 0]][seedType];
+    for (var i = 0; i < length_0; ++i) {
+      array[i] = value;
+    }
+  }
+  return array;
+}
+
+function getClass_19(){
+  return this.arrayClass$;
+}
+
+function initDim(arrayClass, typeId, queryId, length_0, seedType){
+  var result;
+  result = createFromSeed(seedType, length_0);
+  $clinit_37();
+  wrapArray(result, expandoNames_0, expandoValues_0);
+  result.arrayClass$ = arrayClass;
+  result.typeId$ = typeId;
+  result.queryId$ = queryId;
+  return result;
+}
+
+function initValues(arrayClass, typeId, queryId, array){
+  $clinit_37();
+  wrapArray(array, expandoNames_0, expandoValues_0);
+  array.arrayClass$ = arrayClass;
+  array.typeId$ = typeId;
+  array.queryId$ = queryId;
+  return array;
+}
+
+function setCheck(array, index, value){
+  if (value != null) {
+    if (array.queryId$ > 0 && !canCastUnsafe(value.typeId$, array.queryId$)) {
+      throw $ArrayStoreException(new ArrayStoreException);
+    }
+    if (array.queryId$ < 0 && (value.typeMarker$ == nullMethod || value.typeId$ == 2)) {
+      throw $ArrayStoreException(new ArrayStoreException);
+    }
+  }
+  return array[index] = value;
+}
+
+function Array_0(){
+}
+
+_ = Array_0.prototype = new Object_0;
+_.getClass$ = getClass_19;
+_.typeId$ = 0;
+_.arrayClass$ = null;
+_.length = 0;
+_.queryId$ = 0;
+function $clinit_37(){
+  $clinit_37 = nullMethod;
+  expandoNames_0 = [];
+  expandoValues_0 = [];
+  initExpandos(new Array_0, expandoNames_0, expandoValues_0);
+}
+
+function initExpandos(protoType, expandoNames, expandoValues){
+  var i = 0, value;
+  for (var name_0 in protoType) {
+    if (value = protoType[name_0]) {
+      expandoNames[i] = name_0;
+      expandoValues[i] = value;
+      ++i;
+    }
+  }
+}
+
+function wrapArray(array, expandoNames, expandoValues){
+  $clinit_37();
+  for (var i = 0, c = expandoNames.length; i < c; ++i) {
+    array[expandoNames[i]] = expandoValues[i];
+  }
+}
+
+var expandoNames_0, expandoValues_0;
+function canCast(srcId, dstId){
+  return srcId && !!typeIdArray[srcId][dstId];
+}
+
+function canCastUnsafe(srcId, dstId){
+  return srcId && typeIdArray[srcId][dstId];
+}
+
+function dynamicCast(src, dstId){
+  if (src != null && !canCastUnsafe(src.typeId$, dstId)) {
+    throw $ClassCastException(new ClassCastException);
+  }
+  return src;
+}
+
+function dynamicCastJso(src){
+  if (src != null && (src.typeMarker$ == nullMethod || src.typeId$ == 2)) {
+    throw $ClassCastException(new ClassCastException);
+  }
+  return src;
+}
+
+function instanceOf(src, dstId){
+  return src != null && canCast(src.typeId$, dstId);
+}
+
+function instanceOfJso(src){
+  return src != null && src.typeMarker$ != nullMethod && src.typeId$ != 2;
+}
+
+function throwClassCastExceptionUnlessNull(o){
+  if (o != null) {
+    throw $ClassCastException(new ClassCastException);
+  }
+  return o;
+}
+
+var typeIdArray = [{}, {}, {1:1, 5:1, 6:1, 7:1}, {5:1, 20:1}, {5:1, 20:1}, {2:1, 5:1, 20:1}, {2:1, 5:1, 20:1, 28:1}, {3:1}, {19:1}, {2:1, 5:1, 20:1}, {2:1, 5:1, 20:1}, {5:1, 20:1}, {5:1, 20:1}, {2:1, 5:1, 20:1}, {5:1, 7:1, 8:1}, {2:1, 5:1, 20:1}, {2:1, 5:1, 20:1}, {2:1, 5:1, 20:1}, {5:1, 9:1}, {6:1}, {6:1}, {2:1, 5:1, 20:1}, {2:1, 5:1, 20:1}, {27:1}, {23:1}, {23:1}, {23:1}, {24:1}, {24:1}, {4:1, 5:1, 24:1}, {5:1, 25:1}, {5:1, 24:1}, {23:1}, {2:1, 5:1, 20:1, 26:1}, {5:1, 7:1, 8:1, 10:1}, {5:1, 7:1, 8:1, 11:1}, {5:1, 7:1, 8:1, 12:1}, {29:1}, {21:1}, {13:1}, {14:1}, {15:1}, {31:1}, {5:1, 20:1, 30:1}, {5:1, 20:1, 30:1}, {5:1}, {5:1, 16:1}, {5:1, 17:1}, {5:1, 18:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}, {5:1, 22:1}];
+function init(){
+  !!$stats && $stats({moduleName:$moduleName, sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date).getTime(), type:'onModuleLoadStart', className:'nu.validator.htmlparser.gwt.HtmlParserModule'});
+  Envjs.parseHtmlDocument = parseHtmlDocument;
+  Envjs.parseXmlDocument = parseXmlDocument;
+}
+
+function caught(e){
+  if (e != null && canCast(e.typeId$, 20)) {
+    return e;
+  }
+  return $JavaScriptException(new JavaScriptException, e);
+}
+
+function create(valueLow, valueHigh){
+  var diffHigh, diffLow;
+  valueHigh %= 1.8446744073709552E19;
+  valueLow %= 1.8446744073709552E19;
+  diffHigh = valueHigh % 4294967296;
+  diffLow = Math.floor(valueLow / 4294967296) * 4294967296;
+  valueHigh = valueHigh - diffHigh + diffLow;
+  valueLow = valueLow - diffLow + diffHigh;
+  while (valueLow < 0) {
+    valueLow += 4294967296;
+    valueHigh -= 4294967296;
+  }
+  while (valueLow > 4294967295) {
+    valueLow -= 4294967296;
+    valueHigh += 4294967296;
+  }
+  valueHigh = valueHigh % 1.8446744073709552E19;
+  while (valueHigh > 9223372032559808512) {
+    valueHigh -= 1.8446744073709552E19;
+  }
+  while (valueHigh < -9223372036854775808) {
+    valueHigh += 1.8446744073709552E19;
+  }
+  return [valueLow, valueHigh];
+}
+
+function fromDouble(value){
+  if (isNaN(value)) {
+    return $clinit_44() , ZERO;
+  }
+  if (value < -9223372036854775808) {
+    return $clinit_44() , MIN_VALUE;
+  }
+  if (value >= 9223372036854775807) {
+    return $clinit_44() , MAX_VALUE;
+  }
+  if (value > 0) {
+    return create(Math.floor(value), 0);
+  }
+   else {
+    return create(Math.ceil(value), 0);
+  }
+}
+
+function fromInt(value){
+  var rebase, result;
+  if (value > -129 && value < 128) {
+    rebase = value + 128;
+    result = ($clinit_43() , boxedValues)[rebase];
+    result == null && (result = boxedValues[rebase] = internalFromInt(value));
+    return result;
+  }
+  return internalFromInt(value);
+}
+
+function internalFromInt(value){
+  if (value >= 0) {
+    return [value, 0];
+  }
+   else {
+    return [value + 4294967296, -4294967296];
+  }
+}
+
+function $clinit_43(){
+  $clinit_43 = nullMethod;
+  boxedValues = initDim(_3_3D_classLit, 63, 17, 256, 0);
+}
+
+var boxedValues;
+function $clinit_44(){
+  $clinit_44 = nullMethod;
+  Math.log(2);
+  MAX_VALUE = P7fffffffffffffff_longLit;
+  MIN_VALUE = N8000000000000000_longLit;
+  fromInt(-1);
+  fromInt(1);
+  fromInt(2);
+  ZERO = fromInt(0);
+}
+
+var MAX_VALUE, MIN_VALUE, ZERO;
+function $clinit_47(){
+  $clinit_47 = nullMethod;
+  timers = $ArrayList(new ArrayList);
+  addCloseHandler(new Timer$1);
+}
+
+function $cancel(this$static){
+  this$static.isRepeating?($wnd.clearInterval(this$static.timerId) , undefined):($wnd.clearTimeout(this$static.timerId) , undefined);
+  $remove_0(timers, this$static);
+}
+
+function $schedule(this$static, delayMillis){
+  if (delayMillis <= 0) {
+    throw $IllegalArgumentException(new IllegalArgumentException, 'must be positive');
+  }
+  $cancel(this$static);
+  this$static.isRepeating = false;
+  this$static.timerId = createTimeout(this$static, delayMillis);
+  $add(timers, this$static);
+}
+
+function createTimeout(timer, delay){
+  return $wnd.setTimeout($entry(function(){
+    timer.fire();
+  }
+  ), delay);
+}
+
+function fire_0(){
+  !this.isRepeating && $remove_0(timers, this);
+  $run(this);
+}
+
+function getClass_20(){
+  return Lcom_google_gwt_user_client_Timer_2_classLit;
+}
+
+function Timer(){
+}
+
+_ = Timer.prototype = new Object_0;
+_.fire = fire_0;
+_.getClass$ = getClass_20;
+_.typeId$ = 0;
+_.isRepeating = false;
+_.timerId = 0;
+var timers;
+function $onClose(){
+  while (($clinit_47() , timers).size > 0) {
+    $cancel(dynamicCast($get_2(timers, 0), 21));
+  }
+}
+
+function getClass_21(){
+  return Lcom_google_gwt_user_client_Timer$1_2_classLit;
+}
+
+function Timer$1(){
+}
+
+_ = Timer$1.prototype = new Object_0;
+_.getClass$ = getClass_21;
+_.typeId$ = 8;
+function addCloseHandler(handler){
+  maybeInitializeCloseHandlers();
+  return addHandler(TYPE?TYPE:(TYPE = $GwtEvent$Type(new GwtEvent$Type)), handler);
+}
+
+function addHandler(type, handler){
+  return $addHandler(getHandlers(), type, handler);
+}
+
+function getHandlers(){
+  !handlers && (handlers = $Window$WindowHandlers(new Window$WindowHandlers));
+  return handlers;
+}
+
+function maybeInitializeCloseHandlers(){
+  if (!closeHandlersInitialized) {
+    $initWindowCloseHandler();
+    closeHandlersInitialized = true;
+  }
+}
+
+function onClosing(){
+  var event_0;
+  if (closeHandlersInitialized) {
+    event_0 = ($clinit_50() , new Window$ClosingEvent);
+    !!handlers && $fireEvent(handlers, event_0);
+    return null;
+  }
+  return null;
+}
+
+var closeHandlersInitialized = false, handlers = null;
+function $clinit_50(){
+  $clinit_50 = nullMethod;
+  TYPE_0 = $GwtEvent$Type(new GwtEvent$Type);
+}
+
+function dispatch_0(p0){
+  throwClassCastExceptionUnlessNull(p0);
+  null.nullMethod();
+}
+
+function getAssociatedType_0(){
+  return TYPE_0;
+}
+
+function getClass_22(){
+  return Lcom_google_gwt_user_client_Window$ClosingEvent_2_classLit;
+}
+
+function Window$ClosingEvent(){
+}
+
+_ = Window$ClosingEvent.prototype = new GwtEvent;
+_.dispatch = dispatch_0;
+_.getAssociatedType = getAssociatedType_0;
+_.getClass$ = getClass_22;
+_.typeId$ = 0;
+var TYPE_0;
+function $Window$WindowHandlers(this$static){
+  this$static.registry = $HandlerManager$HandlerRegistry(new HandlerManager$HandlerRegistry);
+  this$static.source = null;
+  this$static.isReverseOrder = false;
+  return this$static;
+}
+
+function getClass_23(){
+  return Lcom_google_gwt_user_client_Window$WindowHandlers_2_classLit;
+}
+
+function Window$WindowHandlers(){
+}
+
+_ = Window$WindowHandlers.prototype = new HandlerManager;
+_.getClass$ = getClass_23;
+_.typeId$ = 0;
+function $initWindowCloseHandler(){
+  var oldOnBeforeUnload = $wnd.onbeforeunload;
+  var oldOnUnload = $wnd.onunload;
+  $wnd.onbeforeunload = function(evt){
+    var ret, oldRet;
+    try {
+      ret = $entry(onClosing)();
+    }
+     finally {
+      oldRet = oldOnBeforeUnload && oldOnBeforeUnload(evt);
+    }
+    if (ret != null) {
+      return ret;
+    }
+    if (oldRet != null) {
+      return oldRet;
+    }
+  }
+  ;
+  $wnd.onunload = $entry(function(evt){
+    try {
+      closeHandlersInitialized && fire(getHandlers());
+    }
+     finally {
+      oldOnUnload && oldOnUnload(evt);
+      $wnd.onresize = null;
+      $wnd.onscroll = null;
+      $wnd.onbeforeunload = null;
+      $wnd.onunload = null;
+    }
+  }
+  );
+}
+
+function $ArrayStoreException(this$static){
+  $fillInStackTrace();
+  return this$static;
+}
+
+function $ArrayStoreException_0(this$static, message){
+  $fillInStackTrace();
+  this$static.detailMessage = message;
+  return this$static;
+}
+
+function getClass_24(){
+  return Ljava_lang_ArrayStoreException_2_classLit;
+}
+
+function ArrayStoreException(){
+}
+
+_ = ArrayStoreException.prototype = new RuntimeException;
+_.getClass$ = getClass_24;
+_.typeId$ = 10;
+function createForArray(packageName, className, componentType){
+  var clazz;
+  clazz = new Class;
+  clazz.typeName = packageName + className;
+  clazz.modifiers = 4;
+  clazz.componentType = componentType;
+  return clazz;
+}
+
+function createForClass(packageName, className){
+  var clazz;
+  clazz = new Class;
+  clazz.typeName = packageName + className;
+  return clazz;
+}
+
+function createForEnum(packageName, className, enumConstantsFunc){
+  var clazz;
+  clazz = new Class;
+  clazz.typeName = packageName + className;
+  clazz.modifiers = enumConstantsFunc?8:0;
+  return clazz;
+}
+
+function createForPrimitive(packageName, className){
+  var clazz;
+  clazz = new Class;
+  clazz.typeName = packageName + className;
+  clazz.modifiers = 1;
+  return clazz;
+}
+
+function getClass_25(){
+  return Ljava_lang_Class_2_classLit;
+}
+
+function toString_5(){
+  return ((this.modifiers & 2) != 0?'interface ':(this.modifiers & 1) != 0?'':'class ') + this.typeName;
+}
+
+function Class(){
+}
+
+_ = Class.prototype = new Object_0;
+_.getClass$ = getClass_25;
+_.toString$ = toString_5;
+_.typeId$ = 0;
+_.componentType = null;
+_.modifiers = 0;
+_.typeName = null;
+function $ClassCastException(this$static){
+  $fillInStackTrace();
+  return this$static;
+}
+
+function getClass_26(){
+  return Ljava_lang_ClassCastException_2_classLit;
+}
+
+function ClassCastException(){
+}
+
+_ = ClassCastException.prototype = new RuntimeException;
+_.getClass$ = getClass_26;
+_.typeId$ = 13;
+function equals_1(other){
+  return this === (other == null?null:other);
+}
+
+function getClass_27(){
+  return Ljava_lang_Enum_2_classLit;
+}
+
+function hashCode_3(){
+  return this.$H || (this.$H = ++sNextHashId);
+}
+
+function toString_6(){
+  return this.name_0;
+}
+
+function Enum(){
+}
+
+_ = Enum.prototype = new Object_0;
+_.equals$ = equals_1;
+_.getClass$ = getClass_27;
+_.hashCode$ = hashCode_3;
+_.toString$ = toString_6;
+_.typeId$ = 14;
+_.name_0 = null;
+_.ordinal = 0;
+function $IllegalArgumentException(this$static, message){
+  $fillInStackTrace();
+  this$static.detailMessage = message;
+  return this$static;
+}
+
+function getClass_28(){
+  return Ljava_lang_IllegalArgumentException_2_classLit;
+}
+
+function IllegalArgumentException(){
+}
+
+_ = IllegalArgumentException.prototype = new RuntimeException;
+_.getClass$ = getClass_28;
+_.typeId$ = 15;
+function $IndexOutOfBoundsException(this$static){
+  $fillInStackTrace();
+  return this$static;
+}
+
+function $IndexOutOfBoundsException_0(this$static, message){
+  $fillInStackTrace();
+  this$static.detailMessage = message;
+  return this$static;
+}
+
+function getClass_29(){
+  return Ljava_lang_IndexOutOfBoundsException_2_classLit;
+}
+
+function IndexOutOfBoundsException(){
+}
+
+_ = IndexOutOfBoundsException.prototype = new RuntimeException;
+_.getClass$ = getClass_29;
+_.typeId$ = 16;
+function toPowerOfTwoString(value, shift){
+  var bitMask, buf, bufSize, digits, pos;
+  bufSize = ~~(32 / shift);
+  bitMask = (1 << shift) - 1;
+  buf = initDim(_3C_classLit, 46, -1, bufSize, 1);
+  digits = ($clinit_70() , digits_0);
+  pos = bufSize - 1;
+  if (value >= 0) {
+    while (value > bitMask) {
+      buf[pos--] = digits[value & bitMask];
+      value >>= shift;
+    }
+  }
+   else {
+    while (pos > 0) {
+      buf[pos--] = digits[value & bitMask];
+      value >>= shift;
+    }
+  }
+  buf[pos] = digits[value & bitMask];
+  return __valueOf(buf, pos, bufSize);
+}
+
+function $NullPointerException(this$static){
+  $fillInStackTrace();
+  return this$static;
+}
+
+function getClass_30(){
+  return Ljava_lang_NullPointerException_2_classLit;
+}
+
+function NullPointerException(){
+}
+
+_ = NullPointerException.prototype = new RuntimeException;
+_.getClass$ = getClass_30;
+_.typeId$ = 17;
+function $clinit_70(){
+  $clinit_70 = nullMethod;
+  digits_0 = initValues(_3C_classLit, 46, -1, [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]);
+}
+
+var digits_0;
+function $StackTraceElement(this$static, className, methodName, fileName, lineNumber){
+  this$static.className = className;
+  this$static.methodName = methodName;
+  this$static.fileName = fileName;
+  this$static.lineNumber = lineNumber;
+  return this$static;
+}
+
+function getClass_31(){
+  return Ljava_lang_StackTraceElement_2_classLit;
+}
+
+function toString_7(){
+  return this.className + '.' + this.methodName + '(' + this.fileName + ':' + this.lineNumber + ')';
+}
+
+function StackTraceElement(){
+}
+
+_ = StackTraceElement.prototype = new Object_0;
+_.getClass$ = getClass_31;
+_.toString$ = toString_7;
+_.typeId$ = 18;
+_.className = null;
+_.fileName = null;
+_.lineNumber = 0;
+_.methodName = null;
+function $equals_1(this$static, other){
+  if (!(other != null && canCast(other.typeId$, 1))) {
+    return false;
+  }
+  return String(this$static) == other;
+}
+
+function $getChars(this$static, srcBegin, srcEnd, dst, dstBegin){
+  var srcIdx;
+  for (srcIdx = srcBegin; srcIdx < srcEnd; ++srcIdx) {
+    dst[dstBegin++] = this$static.charCodeAt(srcIdx);
+  }
+}
+
+function $substring(this$static, beginIndex){
+  return this$static.substr(beginIndex, this$static.length - beginIndex);
+}
+
+function $toCharArray(this$static){
+  var charArr, n;
+  n = this$static.length;
+  charArr = initDim(_3C_classLit, 46, -1, n, 1);
+  $getChars(this$static, 0, n, charArr, 0);
+  return charArr;
+}
+
+function $trim(this$static){
+  if (this$static.length == 0 || this$static[0] > ' ' && this$static[this$static.length - 1] > ' ') {
+    return this$static;
+  }
+  var r1 = this$static.replace(/^(\s*)/, '');
+  var r2 = r1.replace(/\s*$/, '');
+  return r2;
+}
+
+function __checkBounds(legalCount, start, end){
+  if (start < 0) {
+    throw $StringIndexOutOfBoundsException(new StringIndexOutOfBoundsException, start);
+  }
+  if (end < start) {
+    throw $StringIndexOutOfBoundsException(new StringIndexOutOfBoundsException, end - start);
+  }
+  if (end > legalCount) {
+    throw $StringIndexOutOfBoundsException(new StringIndexOutOfBoundsException, end);
+  }
+}
+
+function __valueOf(x, start, end){
+  x = x.slice(start, end);
+  return String.fromCharCode.apply(null, x);
+}
+
+function compareTo(thisStr, otherStr){
+  thisStr = String(thisStr);
+  if (thisStr == otherStr) {
+    return 0;
+  }
+  return thisStr < otherStr?-1:1;
+}
+
+function equals_2(other){
+  return $equals_1(this, other);
+}
+
+function getClass_32(){
+  return Ljava_lang_String_2_classLit;
+}
+
+function hashCode_4(){
+  return getHashCode_0(this);
+}
+
+function toString_8(){
+  return this;
+}
+
+function valueOf_0(x, offset, count){
+  var end;
+  end = offset + count;
+  __checkBounds(x.length, offset, end);
+  return __valueOf(x, offset, end);
+}
+
+_ = String.prototype;
+_.equals$ = equals_2;
+_.getClass$ = getClass_32;
+_.hashCode$ = hashCode_4;
+_.toString$ = toString_8;
+_.typeId$ = 2;
+function $clinit_73(){
+  $clinit_73 = nullMethod;
+  back = {};
+  front = {};
+}
+
+function compute(str){
+  var hashCode, i, n, nBatch;
+  hashCode = 0;
+  n = str.length;
+  nBatch = n - 4;
+  i = 0;
+  while (i < nBatch) {
+    hashCode = str.charCodeAt(i + 3) + 31 * (str.charCodeAt(i + 2) + 31 * (str.charCodeAt(i + 1) + 31 * (str.charCodeAt(i) + 31 * hashCode))) | 0;
+    i += 4;
+  }
+  while (i < n) {
+    hashCode = hashCode * 31 + str.charCodeAt(i++);
+  }
+  return hashCode | 0;
+}
+
+function getHashCode_0(str){
+  $clinit_73();
+  var key = ':' + str;
+  var result = front[key];
+  if (result != null) {
+    return result;
+  }
+  result = back[key];
+  result == null && (result = compute(str));
+  increment();
+  return front[key] = result;
+}
+
+function increment(){
+  if (count_0 == 256) {
+    back = front;
+    front = {};
+    count_0 = 0;
+  }
+  ++count_0;
+}
+
+var back, count_0 = 0, front;
+function $StringBuffer(this$static){
+  this$static.impl = new StringBufferImplAppend;
+  return this$static;
+}
+
+function $append_0(this$static, x){
+  this$static.impl.string += x;
+  return this$static;
+}
+
+function getClass_33(){
+  return Ljava_lang_StringBuffer_2_classLit;
+}
+
+function toString_9(){
+  return this.impl.string;
+}
+
+function StringBuffer(){
+}
+
+_ = StringBuffer.prototype = new Object_0;
+_.getClass$ = getClass_33;
+_.toString$ = toString_9;
+_.typeId$ = 19;
+function $StringBuilder(this$static){
+  this$static.impl = new StringBufferImplAppend;
+  return this$static;
+}
+
+function $append_1(this$static, x){
+  this$static.impl.string += String.fromCharCode(x);
+  return this$static;
+}
+
+function $append_2(this$static, x){
+  this$static.impl.string += String.fromCharCode.apply(null, x);
+  return this$static;
+}
+
+function $getChars_0(this$static, srcStart, srcEnd, dst, dstStart){
+  var s;
+  __checkBounds(this$static.impl.string.length, srcStart, srcEnd);
+  __checkBounds(dst.length, dstStart, dstStart + (srcEnd - srcStart));
+  s = this$static.impl.string;
+  while (srcStart < srcEnd) {
+    dst[dstStart++] = s.charCodeAt(srcStart++);
+  }
+}
+
+function $setLength(this$static, newLength){
+  var oldLength;
+  oldLength = this$static.impl.string.length;
+  newLength < oldLength?$replace(this$static.impl, newLength, oldLength, ''):newLength > oldLength && $append_2(this$static, initDim(_3C_classLit, 46, -1, newLength - oldLength, 1));
+}
+
+function getClass_34(){
+  return Ljava_lang_StringBuilder_2_classLit;
+}
+
+function toString_10(){
+  return this.impl.string;
+}
+
+function StringBuilder(){
+}
+
+_ = StringBuilder.prototype = new Object_0;
+_.getClass$ = getClass_34;
+_.toString$ = toString_10;
+_.typeId$ = 20;
+function $StringIndexOutOfBoundsException(this$static, index){
+  $fillInStackTrace();
+  this$static.detailMessage = 'String index out of range: ' + index;
+  return this$static;
+}
+
+function getClass_35(){
+  return Ljava_lang_StringIndexOutOfBoundsException_2_classLit;
+}
+
+function StringIndexOutOfBoundsException(){
+}
+
+_ = StringIndexOutOfBoundsException.prototype = new IndexOutOfBoundsException;
+_.getClass$ = getClass_35;
+_.typeId$ = 21;
+function arrayTypeMatch(srcComp, destComp){
+  if ((srcComp.modifiers & 1) != 0) {
+    return srcComp == destComp;
+  }
+   else {
+    return (destComp.modifiers & 1) == 0;
+  }
+}
+
+function arraycopy(src, srcOfs, dest, destOfs, len){
+  var destArray, destComp, destEnd, destType, destlen, srcArray, srcComp, srcType, srclen;
+  if (src == null || dest == null) {
+    throw $NullPointerException(new NullPointerException);
+  }
+  srcType = src.typeMarker$ == nullMethod || src.typeId$ == 2?src.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit;
+  destType = dest.typeMarker$ == nullMethod || dest.typeId$ == 2?dest.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit;
+  if ((srcType.modifiers & 4) == 0 || (destType.modifiers & 4) == 0) {
+    throw $ArrayStoreException_0(new ArrayStoreException, 'Must be array types');
+  }
+  srcComp = srcType.componentType;
+  destComp = destType.componentType;
+  if (!arrayTypeMatch(srcComp, destComp)) {
+    throw $ArrayStoreException_0(new ArrayStoreException, 'Array types must match');
+  }
+  srclen = src.length;
+  destlen = dest.length;
+  if (srcOfs < 0 || destOfs < 0 || len < 0 || srcOfs + len > srclen || destOfs + len > destlen) {
+    throw $IndexOutOfBoundsException(new IndexOutOfBoundsException);
+  }
+  if (((srcComp.modifiers & 1) == 0 || (srcComp.modifiers & 4) != 0) && srcType != destType) {
+    srcArray = dynamicCast(src, 22);
+    destArray = dynamicCast(dest, 22);
+    if ((src == null?null:src) === (dest == null?null:dest) && srcOfs < destOfs) {
+      srcOfs += len;
+      for (destEnd = destOfs + len; destEnd-- > destOfs;) {
+        setCheck(destArray, destEnd, srcArray[--srcOfs]);
+      }
+    }
+     else {
+      for (destEnd = destOfs + len; destOfs < destEnd;) {
+        setCheck(destArray, destOfs++, srcArray[srcOfs++]);
+      }
+    }
+  }
+   else {
+    Array.prototype.splice.apply(dest, [destOfs, len].concat(src.slice(srcOfs, srcOfs + len)));
+  }
+}
+
+function $UnsupportedOperationException(this$static, message){
+  $fillInStackTrace();
+  this$static.detailMessage = message;
+  return this$static;
+}
+
+function getClass_36(){
+  return Ljava_lang_UnsupportedOperationException_2_classLit;
+}
+
+function UnsupportedOperationException(){
+}
+
+_ = UnsupportedOperationException.prototype = new RuntimeException;
+_.getClass$ = getClass_36;
+_.typeId$ = 22;
+function $advanceToFind(iter, o){
+  var t;
+  while (iter.hasNext()) {
+    t = iter.next_0();
+    if (o == null?t == null:equals__devirtual$(o, t)) {
+      return iter;
+    }
+  }
+  return null;
+}
+
+function add(o){
+  throw $UnsupportedOperationException(new UnsupportedOperationException, 'Add not supported on this collection');
+}
+
+function contains(o){
+  var iter;
+  iter = $advanceToFind(this.iterator(), o);
+  return !!iter;
+}
+
+function getClass_37(){
+  return Ljava_util_AbstractCollection_2_classLit;
+}
+
+function toString_11(){
+  var comma, iter, sb;
+  sb = $StringBuffer(new StringBuffer);
+  comma = null;
+  sb.impl.string += '[';
+  iter = this.iterator();
+  while (iter.hasNext()) {
+    comma != null?(sb.impl.string += comma , undefined):(comma = ', ');
+    $append_0(sb, '' + iter.next_0());
+  }
+  sb.impl.string += ']';
+  return sb.impl.string;
+}
+
+function AbstractCollection(){
+}
+
+_ = AbstractCollection.prototype = new Object_0;
+_.add = add;
+_.contains = contains;
+_.getClass$ = getClass_37;
+_.toString$ = toString_11;
+_.typeId$ = 0;
+function equals_3(obj){
+  var entry, entry$iterator, otherKey, otherMap, otherValue;
+  if ((obj == null?null:obj) === this) {
+    return true;
+  }
+  if (!(obj != null && canCast(obj.typeId$, 25))) {
+    return false;
+  }
+  otherMap = dynamicCast(obj, 25);
+  if (dynamicCast(this, 25).size != otherMap.size) {
+    return false;
+  }
+  for (entry$iterator = $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator, $AbstractHashMap$EntrySet(new AbstractHashMap$EntrySet, otherMap).this$0); $hasNext_0(entry$iterator.iter);) {
+    entry = dynamicCast($next_0(entry$iterator.iter), 23);
+    otherKey = entry.getKey();
+    otherValue = entry.getValue();
+    if (!(otherKey == null?dynamicCast(this, 25).nullSlotLive:otherKey != null && canCast(otherKey.typeId$, 1)?$hasStringValue(dynamicCast(this, 25), dynamicCast(otherKey, 1)):$hasHashValue(dynamicCast(this, 25), otherKey, ~~hashCode__devirtual$(otherKey)))) {
+      return false;
+    }
+    if (!equalsWithNullCheck(otherValue, otherKey == null?dynamicCast(this, 25).nullSlot:otherKey != null && canCast(otherKey.typeId$, 1)?dynamicCast(this, 25).stringMap[':' + dynamicCast(otherKey, 1)]:$getHashValue(dynamicCast(this, 25), otherKey, ~~hashCode__devirtual$(otherKey)))) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function getClass_38(){
+  return Ljava_util_AbstractMap_2_classLit;
+}
+
+function hashCode_5(){
+  var entry, entry$iterator, hashCode;
+  hashCode = 0;
+  for (entry$iterator = $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator, $AbstractHashMap$EntrySet(new AbstractHashMap$EntrySet, dynamicCast(this, 25)).this$0); $hasNext_0(entry$iterator.iter);) {
+    entry = dynamicCast($next_0(entry$iterator.iter), 23);
+    hashCode += entry.hashCode$();
+    hashCode = ~~hashCode;
+  }
+  return hashCode;
+}
+
+function toString_12(){
+  var comma, entry, iter, s;
+  s = '{';
+  comma = false;
+  for (iter = $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator, $AbstractHashMap$EntrySet(new AbstractHashMap$EntrySet, dynamicCast(this, 25)).this$0); $hasNext_0(iter.iter);) {
+    entry = dynamicCast($next_0(iter.iter), 23);
+    comma?(s += ', '):(comma = true);
+    s += '' + entry.getKey();
+    s += '=';
+    s += '' + entry.getValue();
+  }
+  return s + '}';
+}
+
+function AbstractMap(){
+}
+
+_ = AbstractMap.prototype = new Object_0;
+_.equals$ = equals_3;
+_.getClass$ = getClass_38;
+_.hashCode$ = hashCode_5;
+_.toString$ = toString_12;
+_.typeId$ = 0;
+function $addAllHashEntries(this$static, dest){
+  var hashCodeMap = this$static.hashCodeMap;
+  for (var hashCode in hashCodeMap) {
+    if (hashCode == parseInt(hashCode)) {
+      var array = hashCodeMap[hashCode];
+      for (var i = 0, c = array.length; i < c; ++i) {
+        dest.add(array[i]);
+      }
+    }
+  }
+}
+
+function $addAllStringEntries(this$static, dest){
+  var stringMap = this$static.stringMap;
+  for (var key in stringMap) {
+    if (key.charCodeAt(0) == 58) {
+      var entry = new_$(this$static, key.substring(1));
+      dest.add(entry);
+    }
+  }
+}
+
+function $clearImpl(this$static){
+  this$static.hashCodeMap = [];
+  this$static.stringMap = {};
+  this$static.nullSlotLive = false;
+  this$static.nullSlot = null;
+  this$static.size = 0;
+}
+
+function $containsKey(this$static, key){
+  return key == null?this$static.nullSlotLive:key != null && canCast(key.typeId$, 1)?$hasStringValue(this$static, dynamicCast(key, 1)):$hasHashValue(this$static, key, ~~hashCode__devirtual$(key));
+}
+
+function $get_1(this$static, key){
+  return key == null?this$static.nullSlot:key != null && canCast(key.typeId$, 1)?this$static.stringMap[':' + dynamicCast(key, 1)]:$getHashValue(this$static, key, ~~hashCode__devirtual$(key));
+}
+
+function $getHashValue(this$static, key, hashCode){
+  var array = this$static.hashCodeMap[hashCode];
+  if (array) {
+    for (var i = 0, c = array.length; i < c; ++i) {
+      var entry = array[i];
+      var entryKey = entry.getKey();
+      if (this$static.equalsBridge(key, entryKey)) {
+        return entry.getValue();
+      }
+    }
+  }
+  return null;
+}
+
+function $hasHashValue(this$static, key, hashCode){
+  var array = this$static.hashCodeMap[hashCode];
+  if (array) {
+    for (var i = 0, c = array.length; i < c; ++i) {
+      var entry = array[i];
+      var entryKey = entry.getKey();
+      if (this$static.equalsBridge(key, entryKey)) {
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
+function $hasStringValue(this$static, key){
+  return ':' + key in this$static.stringMap;
+}
+
+function $put(this$static, key, value){
+  return !key?$putNullSlot(this$static, value):$putHashValue(this$static, key, value, ~~key.index);
+}
+
+function $putHashValue(this$static, key, value, hashCode){
+  var array = this$static.hashCodeMap[hashCode];
+  if (array) {
+    for (var i = 0, c = array.length; i < c; ++i) {
+      var entry = array[i];
+      var entryKey = entry.getKey();
+      if (this$static.equalsBridge(key, entryKey)) {
+        var previous = entry.getValue();
+        entry.setValue(value);
+        return previous;
+      }
+    }
+  }
+   else {
+    array = this$static.hashCodeMap[hashCode] = [];
+  }
+  var entry = $MapEntryImpl(new MapEntryImpl, key, value);
+  array.push(entry);
+  ++this$static.size;
+  return null;
+}
+
+function $putNullSlot(this$static, value){
+  var result;
+  result = this$static.nullSlot;
+  this$static.nullSlot = value;
+  if (!this$static.nullSlotLive) {
+    this$static.nullSlotLive = true;
+    ++this$static.size;
+  }
+  return result;
+}
+
+function $putStringValue(this$static, key, value){
+  var result, stringMap = this$static.stringMap;
+  key = ':' + key;
+  key in stringMap?(result = stringMap[key]):++this$static.size;
+  stringMap[key] = value;
+  return result;
+}
+
+function equalsBridge(value1, value2){
+  return (value1 == null?null:value1) === (value2 == null?null:value2) || value1 != null && equals__devirtual$(value1, value2);
+}
+
+function getClass_39(){
+  return Ljava_util_AbstractHashMap_2_classLit;
+}
+
+function AbstractHashMap(){
+}
+
+_ = AbstractHashMap.prototype = new AbstractMap;
+_.equalsBridge = equalsBridge;
+_.getClass$ = getClass_39;
+_.typeId$ = 0;
+_.hashCodeMap = null;
+_.nullSlot = null;
+_.nullSlotLive = false;
+_.size = 0;
+_.stringMap = null;
+function equals_4(o){
+  var iter, other, otherItem;
+  if ((o == null?null:o) === this) {
+    return true;
+  }
+  if (!(o != null && canCast(o.typeId$, 27))) {
+    return false;
+  }
+  other = dynamicCast(o, 27);
+  if (other.this$0.size != this.size_0()) {
+    return false;
+  }
+  for (iter = $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator, other.this$0); $hasNext_0(iter.iter);) {
+    otherItem = dynamicCast($next_0(iter.iter), 23);
+    if (!this.contains(otherItem)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function getClass_40(){
+  return Ljava_util_AbstractSet_2_classLit;
+}
+
+function hashCode_6(){
+  var hashCode, iter, next;
+  hashCode = 0;
+  for (iter = this.iterator(); iter.hasNext();) {
+    next = iter.next_0();
+    if (next != null) {
+      hashCode += hashCode__devirtual$(next);
+      hashCode = ~~hashCode;
+    }
+  }
+  return hashCode;
+}
+
+function AbstractSet(){
+}
+
+_ = AbstractSet.prototype = new AbstractCollection;
+_.equals$ = equals_4;
+_.getClass$ = getClass_40;
+_.hashCode$ = hashCode_6;
+_.typeId$ = 0;
+function $AbstractHashMap$EntrySet(this$static, this$0){
+  this$static.this$0 = this$0;
+  return this$static;
+}
+
+function contains_0(o){
+  var entry, key, value;
+  if (o != null && canCast(o.typeId$, 23)) {
+    entry = dynamicCast(o, 23);
+    key = entry.getKey();
+    if ($containsKey(this.this$0, key)) {
+      value = $get_1(this.this$0, key);
+      return $equals_2(entry.getValue(), value);
+    }
+  }
+  return false;
+}
+
+function getClass_41(){
+  return Ljava_util_AbstractHashMap$EntrySet_2_classLit;
+}
+
+function iterator(){
+  return $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator, this.this$0);
+}
+
+function size_0(){
+  return this.this$0.size;
+}
+
+function AbstractHashMap$EntrySet(){
+}
+
+_ = AbstractHashMap$EntrySet.prototype = new AbstractSet;
+_.contains = contains_0;
+_.getClass$ = getClass_41;
+_.iterator = iterator;
+_.size_0 = size_0;
+_.typeId$ = 23;
+_.this$0 = null;
+function $AbstractHashMap$EntrySetIterator(this$static, this$0){
+  var list;
+  this$static.this$0 = this$0;
+  list = $ArrayList(new ArrayList);
+  this$static.this$0.nullSlotLive && $add(list, $AbstractHashMap$MapEntryNull(new AbstractHashMap$MapEntryNull, this$static.this$0));
+  $addAllStringEntries(this$static.this$0, list);
+  $addAllHashEntries(this$static.this$0, list);
+  this$static.iter = $AbstractList$IteratorImpl(new AbstractList$IteratorImpl, list);
+  return this$static;
+}
+
+function getClass_42(){
+  return Ljava_util_AbstractHashMap$EntrySetIterator_2_classLit;
+}
+
+function hasNext(){
+  return $hasNext_0(this.iter);
+}
+
+function next_0(){
+  return dynamicCast($next_0(this.iter), 23);
+}
+
+function AbstractHashMap$EntrySetIterator(){
+}
+
+_ = AbstractHashMap$EntrySetIterator.prototype = new Object_0;
+_.getClass$ = getClass_42;
+_.hasNext = hasNext;
+_.next_0 = next_0;
+_.typeId$ = 0;
+_.iter = null;
+_.this$0 = null;
+function equals_5(other){
+  var entry;
+  if (other != null && canCast(other.typeId$, 23)) {
+    entry = dynamicCast(other, 23);
+    if (equalsWithNullCheck(this.getKey(), entry.getKey()) && equalsWithNullCheck(this.getValue(), entry.getValue())) {
+      return true;
+    }
+  }
+  return false;
+}
+
+function getClass_43(){
+  return Ljava_util_AbstractMapEntry_2_classLit;
+}
+
+function hashCode_7(){
+  var keyHash, valueHash;
+  keyHash = 0;
+  valueHash = 0;
+  this.getKey() != null && (keyHash = hashCode__devirtual$(this.getKey()));
+  this.getValue() != null && (valueHash = hashCode__devirtual$(this.getValue()));
+  return keyHash ^ valueHash;
+}
+
+function toString_13(){
+  return this.getKey() + '=' + this.getValue();
+}
+
+function AbstractMapEntry(){
+}
+
+_ = AbstractMapEntry.prototype = new Object_0;
+_.equals$ = equals_5;
+_.getClass$ = getClass_43;
+_.hashCode$ = hashCode_7;
+_.toString$ = toString_13;
+_.typeId$ = 24;
+function $AbstractHashMap$MapEntryNull(this$static, this$0){
+  this$static.this$0 = this$0;
+  return this$static;
+}
+
+function getClass_44(){
+  return Ljava_util_AbstractHashMap$MapEntryNull_2_classLit;
+}
+
+function getKey(){
+  return null;
+}
+
+function getValue(){
+  return this.this$0.nullSlot;
+}
+
+function setValue(object){
+  return $putNullSlot(this.this$0, object);
+}
+
+function AbstractHashMap$MapEntryNull(){
+}
+
+_ = AbstractHashMap$MapEntryNull.prototype = new AbstractMapEntry;
+_.getClass$ = getClass_44;
+_.getKey = getKey;
+_.getValue = getValue;
+_.setValue = setValue;
+_.typeId$ = 25;
+_.this$0 = null;
+function $AbstractHashMap$MapEntryString(this$static, key, this$0){
+  this$static.this$0 = this$0;
+  this$static.key = key;
+  return this$static;
+}
+
+function getClass_45(){
+  return Ljava_util_AbstractHashMap$MapEntryString_2_classLit;
+}
+
+function getKey_0(){
+  return this.key;
+}
+
+function getValue_0(){
+  return this.this$0.stringMap[':' + this.key];
+}
+
+function new_$(this$outer, key){
+  return $AbstractHashMap$MapEntryString(new AbstractHashMap$MapEntryString, key, this$outer);
+}
+
+function setValue_0(object){
+  return $putStringValue(this.this$0, this.key, object);
+}
+
+function AbstractHashMap$MapEntryString(){
+}
+
+_ = AbstractHashMap$MapEntryString.prototype = new AbstractMapEntry;
+_.getClass$ = getClass_45;
+_.getKey = getKey_0;
+_.getValue = getValue_0;
+_.setValue = setValue_0;
+_.typeId$ = 26;
+_.key = null;
+_.this$0 = null;
+function add_0(obj){
+  this.add_0(this.size_0(), obj);
+  return true;
+}
+
+function add_1(index, element){
+  throw $UnsupportedOperationException(new UnsupportedOperationException, 'Add not supported on this list');
+}
+
+function checkIndex(index, size){
+  (index < 0 || index >= size) && indexOutOfBounds(index, size);
+}
+
+function equals_6(o){
+  var elem, elemOther, iter, iterOther, other;
+  if ((o == null?null:o) === this) {
+    return true;
+  }
+  if (!(o != null && canCast(o.typeId$, 24))) {
+    return false;
+  }
+  other = dynamicCast(o, 24);
+  if (this.size_0() != other.size_0()) {
+    return false;
+  }
+  iter = this.iterator();
+  iterOther = other.iterator();
+  while (iter.hasNext()) {
+    elem = iter.next_0();
+    elemOther = iterOther.next_0();
+    if (!(elem == null?elemOther == null:equals__devirtual$(elem, elemOther))) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function getClass_46(){
+  return Ljava_util_AbstractList_2_classLit;
+}
+
+function hashCode_8(){
+  var iter, k, obj;
+  k = 1;
+  iter = this.iterator();
+  while (iter.hasNext()) {
+    obj = iter.next_0();
+    k = 31 * k + (obj == null?0:hashCode__devirtual$(obj));
+    k = ~~k;
+  }
+  return k;
+}
+
+function indexOutOfBounds(index, size){
+  throw $IndexOutOfBoundsException_0(new IndexOutOfBoundsException, 'Index: ' + index + ', Size: ' + size);
+}
+
+function iterator_0(){
+  return $AbstractList$IteratorImpl(new AbstractList$IteratorImpl, this);
+}
+
+function AbstractList(){
+}
+
+_ = AbstractList.prototype = new AbstractCollection;
+_.add = add_0;
+_.add_0 = add_1;
+_.equals$ = equals_6;
+_.getClass$ = getClass_46;
+_.hashCode$ = hashCode_8;
+_.iterator = iterator_0;
+_.typeId$ = 27;
+function $AbstractList$IteratorImpl(this$static, this$0){
+  this$static.this$0 = this$0;
+  return this$static;
+}
+
+function $hasNext_0(this$static){
+  return this$static.i < this$static.this$0.size_0();
+}
+
+function $next_0(this$static){
+  if (this$static.i >= this$static.this$0.size_0()) {
+    throw $NoSuchElementException(new NoSuchElementException);
+  }
+  return this$static.this$0.get(this$static.i++);
+}
+
+function getClass_47(){
+  return Ljava_util_AbstractList$IteratorImpl_2_classLit;
+}
+
+function hasNext_0(){
+  return this.i < this.this$0.size_0();
+}
+
+function next_1(){
+  return $next_0(this);
+}
+
+function AbstractList$IteratorImpl(){
+}
+
+_ = AbstractList$IteratorImpl.prototype = new Object_0;
+_.getClass$ = getClass_47;
+_.hasNext = hasNext_0;
+_.next_0 = next_1;
+_.typeId$ = 0;
+_.i = 0;
+_.this$0 = null;
+function add_2(index, element){
+  var iter;
+  iter = $listIterator(this, index);
+  $addBefore(iter.this$0, element, iter.currentNode);
+  ++iter.currentIndex;
+  iter.lastNode = null;
+}
+
+function get(index){
+  var $e0, iter;
+  iter = $listIterator(this, index);
+  try {
+    return $next_1(iter);
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 26)) {
+      throw $IndexOutOfBoundsException_0(new IndexOutOfBoundsException, "Can't get element " + index);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function getClass_48(){
+  return Ljava_util_AbstractSequentialList_2_classLit;
+}
+
+function iterator_1(){
+  return $listIterator(this, 0);
+}
+
+function AbstractSequentialList(){
+}
+
+_ = AbstractSequentialList.prototype = new AbstractList;
+_.add_0 = add_2;
+_.get = get;
+_.getClass$ = getClass_48;
+_.iterator = iterator_1;
+_.typeId$ = 28;
+function $ArrayList(this$static){
+  this$static.array = initDim(_3Ljava_lang_Object_2_classLit, 53, 0, 0, 0);
+  return this$static;
+}
+
+function $add(this$static, o){
+  setCheck(this$static.array, this$static.size++, o);
+  return true;
+}
+
+function $get_2(this$static, index){
+  checkIndex(index, this$static.size);
+  return this$static.array[index];
+}
+
+function $indexOf_0(this$static, o, index){
+  for (; index < this$static.size; ++index) {
+    if (equalsWithNullCheck(o, this$static.array[index])) {
+      return index;
+    }
+  }
+  return -1;
+}
+
+function $remove_0(this$static, o){
+  var i, previous;
+  i = $indexOf_0(this$static, o, 0);
+  if (i == -1) {
+    return false;
+  }
+  previous = (checkIndex(i, this$static.size) , this$static.array[i]);
+  this$static.array.splice(i, 1);
+  --this$static.size;
+  return true;
+}
+
+function add_3(o){
+  return setCheck(this.array, this.size++, o) , true;
+}
+
+function add_4(index, o){
+  (index < 0 || index > this.size) && indexOutOfBounds(index, this.size);
+  this.array.splice(index, 0, o);
+  ++this.size;
+}
+
+function contains_1(o){
+  return $indexOf_0(this, o, 0) != -1;
+}
+
+function get_0(index){
+  return checkIndex(index, this.size) , this.array[index];
+}
+
+function getClass_49(){
+  return Ljava_util_ArrayList_2_classLit;
+}
+
+function size_1(){
+  return this.size;
+}
+
+function ArrayList(){
+}
+
+_ = ArrayList.prototype = new AbstractList;
+_.add = add_3;
+_.add_0 = add_4;
+_.contains = contains_1;
+_.get = get_0;
+_.getClass$ = getClass_49;
+_.size_0 = size_1;
+_.typeId$ = 29;
+_.size = 0;
+function binarySearch(sortedArray, key){
+  var high, low, mid, midVal;
+  low = 0;
+  high = sortedArray.length - 1;
+  while (low <= high) {
+    mid = low + (high - low >> 1);
+    midVal = sortedArray[mid];
+    if (midVal < key) {
+      low = mid + 1;
+    }
+     else if (midVal > key) {
+      high = mid - 1;
+    }
+     else {
+      return mid;
+    }
+  }
+  return -low - 1;
+}
+
+function binarySearch_0(sortedArray, key, comparator){
+  var compareResult, high, low, mid, midVal;
+  !comparator && (comparator = ($clinit_95() , $clinit_95() , NATURAL));
+  low = 0;
+  high = sortedArray.length - 1;
+  while (low <= high) {
+    mid = low + (high - low >> 1);
+    midVal = sortedArray[mid];
+    compareResult = compareTo(midVal, key);
+    if (compareResult < 0) {
+      low = mid + 1;
+    }
+     else if (compareResult > 0) {
+      high = mid - 1;
+    }
+     else {
+      return mid;
+    }
+  }
+  return -low - 1;
+}
+
+function $clinit_95(){
+  $clinit_95 = nullMethod;
+  NATURAL = new Comparators$1;
+}
+
+var NATURAL;
+function getClass_50(){
+  return Ljava_util_Comparators$1_2_classLit;
+}
+
+function Comparators$1(){
+}
+
+_ = Comparators$1.prototype = new Object_0;
+_.getClass$ = getClass_50;
+_.typeId$ = 0;
+function $HashMap(this$static){
+  $clearImpl(this$static);
+  return this$static;
+}
+
+function $equals_2(value1, value2){
+  return (value1 == null?null:value1) === (value2 == null?null:value2) || value1 != null && equals__devirtual$(value1, value2);
+}
+
+function getClass_51(){
+  return Ljava_util_HashMap_2_classLit;
+}
+
+function HashMap(){
+}
+
+_ = HashMap.prototype = new AbstractHashMap;
+_.getClass$ = getClass_51;
+_.typeId$ = 30;
+function $LinkedList(this$static){
+  this$static.header = $LinkedList$Node(new LinkedList$Node);
+  this$static.size = 0;
+  return this$static;
+}
+
+function $addBefore(this$static, o, target){
+  $LinkedList$Node_0(new LinkedList$Node, o, target);
+  ++this$static.size;
+}
+
+function $addLast(this$static, o){
+  $LinkedList$Node_0(new LinkedList$Node, o, this$static.header);
+  ++this$static.size;
+}
+
+function $clear(this$static){
+  this$static.header = $LinkedList$Node(new LinkedList$Node);
+  this$static.size = 0;
+}
+
+function $getLast(this$static){
+  $throwEmptyException(this$static);
+  return this$static.header.prev.value;
+}
+
+function $listIterator(this$static, index){
+  var i, node;
+  (index < 0 || index > this$static.size) && indexOutOfBounds(index, this$static.size);
+  if (index >= this$static.size >> 1) {
+    node = this$static.header;
+    for (i = this$static.size; i > index; --i) {
+      node = node.prev;
+    }
+  }
+   else {
+    node = this$static.header.next;
+    for (i = 0; i < index; ++i) {
+      node = node.next;
+    }
+  }
+  return $LinkedList$ListIteratorImpl(new LinkedList$ListIteratorImpl, index, node, this$static);
+}
+
+function $removeLast(this$static){
+  var node;
+  $throwEmptyException(this$static);
+  --this$static.size;
+  node = this$static.header.prev;
+  node.next.prev = node.prev;
+  node.prev.next = node.next;
+  node.next = node.prev = node;
+  return node.value;
+}
+
+function $throwEmptyException(this$static){
+  if (this$static.size == 0) {
+    throw $NoSuchElementException(new NoSuchElementException);
+  }
+}
+
+function add_5(o){
+  $LinkedList$Node_0(new LinkedList$Node, o, this.header);
+  ++this.size;
+  return true;
+}
+
+function getClass_52(){
+  return Ljava_util_LinkedList_2_classLit;
+}
+
+function size_2(){
+  return this.size;
+}
+
+function LinkedList(){
+}
+
+_ = LinkedList.prototype = new AbstractSequentialList;
+_.add = add_5;
+_.getClass$ = getClass_52;
+_.size_0 = size_2;
+_.typeId$ = 31;
+_.header = null;
+_.size = 0;
+function $LinkedList$ListIteratorImpl(this$static, index, startNode, this$0){
+  this$static.this$0 = this$0;
+  this$static.currentNode = startNode;
+  this$static.currentIndex = index;
+  return this$static;
+}
+
+function $next_1(this$static){
+  if (this$static.currentNode == this$static.this$0.header) {
+    throw $NoSuchElementException(new NoSuchElementException);
+  }
+  this$static.lastNode = this$static.currentNode;
+  this$static.currentNode = this$static.currentNode.next;
+  ++this$static.currentIndex;
+  return this$static.lastNode.value;
+}
+
+function getClass_53(){
+  return Ljava_util_LinkedList$ListIteratorImpl_2_classLit;
+}
+
+function hasNext_1(){
+  return this.currentNode != this.this$0.header;
+}
+
+function next_2(){
+  return $next_1(this);
+}
+
+function LinkedList$ListIteratorImpl(){
+}
+
+_ = LinkedList$ListIteratorImpl.prototype = new Object_0;
+_.getClass$ = getClass_53;
+_.hasNext = hasNext_1;
+_.next_0 = next_2;
+_.typeId$ = 0;
+_.currentIndex = 0;
+_.currentNode = null;
+_.lastNode = null;
+_.this$0 = null;
+function $LinkedList$Node(this$static){
+  this$static.next = this$static.prev = this$static;
+  return this$static;
+}
+
+function $LinkedList$Node_0(this$static, value, nextNode){
+  this$static.value = value;
+  this$static.next = nextNode;
+  this$static.prev = nextNode.prev;
+  nextNode.prev.next = this$static;
+  nextNode.prev = this$static;
+  return this$static;
+}
+
+function getClass_54(){
+  return Ljava_util_LinkedList$Node_2_classLit;
+}
+
+function LinkedList$Node(){
+}
+
+_ = LinkedList$Node.prototype = new Object_0;
+_.getClass$ = getClass_54;
+_.typeId$ = 0;
+_.next = null;
+_.prev = null;
+_.value = null;
+function $MapEntryImpl(this$static, key, value){
+  this$static.key = key;
+  this$static.value = value;
+  return this$static;
+}
+
+function getClass_55(){
+  return Ljava_util_MapEntryImpl_2_classLit;
+}
+
+function getKey_1(){
+  return this.key;
+}
+
+function getValue_1(){
+  return this.value;
+}
+
+function setValue_1(value){
+  var old;
+  old = this.value;
+  this.value = value;
+  return old;
+}
+
+function MapEntryImpl(){
+}
+
+_ = MapEntryImpl.prototype = new AbstractMapEntry;
+_.getClass$ = getClass_55;
+_.getKey = getKey_1;
+_.getValue = getValue_1;
+_.setValue = setValue_1;
+_.typeId$ = 32;
+_.key = null;
+_.value = null;
+function $NoSuchElementException(this$static){
+  $fillInStackTrace();
+  return this$static;
+}
+
+function getClass_56(){
+  return Ljava_util_NoSuchElementException_2_classLit;
+}
+
+function NoSuchElementException(){
+}
+
+_ = NoSuchElementException.prototype = new RuntimeException;
+_.getClass$ = getClass_56;
+_.typeId$ = 33;
+function equalsWithNullCheck(a, b){
+  return (a == null?null:a) === (b == null?null:b) || a != null && equals__devirtual$(a, b);
+}
+
+function $clinit_112(){
+  $clinit_112 = nullMethod;
+  HTML = $DoctypeExpectation(new DoctypeExpectation, 'HTML', 0);
+  HTML401_TRANSITIONAL = $DoctypeExpectation(new DoctypeExpectation, 'HTML401_TRANSITIONAL', 1);
+  HTML401_STRICT = $DoctypeExpectation(new DoctypeExpectation, 'HTML401_STRICT', 2);
+  AUTO = $DoctypeExpectation(new DoctypeExpectation, 'AUTO', 3);
+  NO_DOCTYPE_ERRORS = $DoctypeExpectation(new DoctypeExpectation, 'NO_DOCTYPE_ERRORS', 4);
+}
+
+function $DoctypeExpectation(this$static, enum$name, enum$ordinal){
+  $clinit_112();
+  this$static.name_0 = enum$name;
+  this$static.ordinal = enum$ordinal;
+  return this$static;
+}
+
+function getClass_57(){
+  return Lnu_validator_htmlparser_common_DoctypeExpectation_2_classLit;
+}
+
+function values_0(){
+  $clinit_112();
+  return initValues(_3Lnu_validator_htmlparser_common_DoctypeExpectation_2_classLit, 56, 10, [HTML, HTML401_TRANSITIONAL, HTML401_STRICT, AUTO, NO_DOCTYPE_ERRORS]);
+}
+
+function DoctypeExpectation(){
+}
+
+_ = DoctypeExpectation.prototype = new Enum;
+_.getClass$ = getClass_57;
+_.typeId$ = 34;
+var AUTO, HTML, HTML401_STRICT, HTML401_TRANSITIONAL, NO_DOCTYPE_ERRORS;
+function $clinit_113(){
+  $clinit_113 = nullMethod;
+  STANDARDS_MODE = $DocumentMode(new DocumentMode, 'STANDARDS_MODE', 0);
+  ALMOST_STANDARDS_MODE = $DocumentMode(new DocumentMode, 'ALMOST_STANDARDS_MODE', 1);
+  QUIRKS_MODE = $DocumentMode(new DocumentMode, 'QUIRKS_MODE', 2);
+}
+
+function $DocumentMode(this$static, enum$name, enum$ordinal){
+  $clinit_113();
+  this$static.name_0 = enum$name;
+  this$static.ordinal = enum$ordinal;
+  return this$static;
+}
+
+function getClass_58(){
+  return Lnu_validator_htmlparser_common_DocumentMode_2_classLit;
+}
+
+function values_1(){
+  $clinit_113();
+  return initValues(_3Lnu_validator_htmlparser_common_DocumentMode_2_classLit, 57, 11, [STANDARDS_MODE, ALMOST_STANDARDS_MODE, QUIRKS_MODE]);
+}
+
+function DocumentMode(){
+}
+
+_ = DocumentMode.prototype = new Enum;
+_.getClass$ = getClass_58;
+_.typeId$ = 35;
+var ALMOST_STANDARDS_MODE, QUIRKS_MODE, STANDARDS_MODE;
+function $clinit_115(){
+  $clinit_115 = nullMethod;
+  ALLOW = $XmlViolationPolicy(new XmlViolationPolicy, 'ALLOW', 0);
+  FATAL = $XmlViolationPolicy(new XmlViolationPolicy, 'FATAL', 1);
+  ALTER_INFOSET = $XmlViolationPolicy(new XmlViolationPolicy, 'ALTER_INFOSET', 2);
+}
+
+function $XmlViolationPolicy(this$static, enum$name, enum$ordinal){
+  $clinit_115();
+  this$static.name_0 = enum$name;
+  this$static.ordinal = enum$ordinal;
+  return this$static;
+}
+
+function getClass_59(){
+  return Lnu_validator_htmlparser_common_XmlViolationPolicy_2_classLit;
+}
+
+function values_2(){
+  $clinit_115();
+  return initValues(_3Lnu_validator_htmlparser_common_XmlViolationPolicy_2_classLit, 58, 12, [ALLOW, FATAL, ALTER_INFOSET]);
+}
+
+function XmlViolationPolicy(){
+}
+
+_ = XmlViolationPolicy.prototype = new Enum;
+_.getClass$ = getClass_59;
+_.typeId$ = 36;
+var ALLOW, ALTER_INFOSET, FATAL;
+function $clinit_116(){
+  $clinit_116 = nullMethod;
+  REPLACEMENT_CHARACTER = initValues(_3C_classLit, 46, -1, [65533]);
+  HTML4_PUBLIC_IDS = initValues(_3Ljava_lang_String_2_classLit, 55, 1, ['-//W3C//DTD HTML 4.0 Frameset//EN', '-//W3C//DTD HTML 4.0 Transitional//EN', '-//W3C//DTD HTML 4.0//EN', '-//W3C//DTD HTML 4.01 Frameset//EN', '-//W3C//DTD HTML 4.01 Transitional//EN', '-//W3C//DTD HTML 4.01//EN']);
+  QUIRKY_PUBLIC_IDS = initValues(_3Ljava_lang_String_2_classLit, 55, 1, ['+//silmaril//dtd html pro v0r11 19970101//', '-//advasoft ltd//dtd html 3.0 aswedit + extensions//', '-//as//dtd html 3.0 aswedit + extensions//', '-//ietf//dtd html 2.0 level 1//', '-//ietf//dtd html 2.0 level 2//', '-//ietf//dtd html 2.0 strict level 1//', '-//ietf//dtd html 2.0 strict level 2//', '-//ietf//dtd html 2.0 strict//', '-//ietf//dtd html 2.0//', '-//ietf//dtd html 2.1e//', '-//ietf//dtd html 3.0//', '-//ietf//dtd html 3.2 final//', '-//ietf//dtd html 3.2//', '-//ietf//dtd html 3//', '-//ietf//dtd html level 0//', '-//ietf//dtd html level 1//', '-//ietf//dtd html level 2//', '-//ietf//dtd html level 3//', '-//ietf//dtd html strict level 0//', '-//ietf//dtd html strict level 1//', '-//ietf//dtd html strict level 2//', '-//ietf//dtd html strict level 3//', '-//ietf//dtd html strict//', '-//ietf//dtd html//', '-//metrius//dtd metrius presentational//', '-//microsoft//dtd internet explorer 2.0 html strict//', '-//microsoft//dtd internet explorer 2.0 html//', '-//microsoft//dtd internet explorer 2.0 tables//', '-//microsoft//dtd internet explorer 3.0 html strict//', '-//microsoft//dtd internet explorer 3.0 html//', '-//microsoft//dtd internet explorer 3.0 tables//', '-//netscape comm. corp.//dtd html//', '-//netscape comm. corp.//dtd strict html//', "-//o'reilly and associates//dtd html 2.0//", "-//o'reilly and associates//dtd html extended 1.0//", "-//o'reilly and associates//dtd html extended relaxed 1.0//", '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//', '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//', '-//spyglass//dtd html 2.0 extended//', '-//sq//dtd html 2.0 hotmetal + extensions//', '-//sun microsystems corp.//dtd hotjava html//', '-//sun microsystems corp.//dtd hotjava strict html//', '-//w3c//dtd html 3 1995-03-24//', '-//w3c//dtd html 3.2 draft//', '-//w3c//dtd html 3.2 final//', '-//w3c//dtd html 3.2//', '-//w3c//dtd html 3.2s draft//', '-//w3c//dtd html 4.0 frameset//', '-//w3c//dtd html 4.0 transitional//', '-//w3c//dtd html experimental 19960712//', '-//w3c//dtd html experimental 970421//', '-//w3c//dtd w3 html//', '-//w3o//dtd w3 html 3.0//', '-//webtechs//dtd mozilla html 2.0//', '-//webtechs//dtd mozilla html//']);
+}
+
+function $accumulateCharactersForced(this$static, buf, start, length_0){
+  var newBuf, newLen;
+  newLen = this$static.charBufferLen + length_0;
+  if (newLen > this$static.charBuffer.length) {
+    newBuf = initDim(_3C_classLit, 46, -1, newLen, 1);
+    arraycopy(this$static.charBuffer, 0, newBuf, 0, this$static.charBufferLen);
+    this$static.charBuffer = newBuf;
+  }
+  arraycopy(buf, start, this$static.charBuffer, this$static.charBufferLen, length_0);
+  this$static.charBufferLen = newLen;
+}
+
+function $addAttributesToBody(this$static, attributes){
+  var body;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  if (this$static.currentPtr >= 1) {
+    body = this$static.stack_0[1];
+    if ((body.flags & 127) == 3) {
+      $addAttributesToElement(this$static, body.node, attributes);
+      return true;
+    }
+  }
+  return false;
+}
+
+function $adoptionAgencyEndTag(this$static, name_0){
+  var bookmark, clone, commonAncestor, formattingClone, formattingElt, formattingEltListPos, formattingEltStackPos, furthestBlock, furthestBlockPos, i, inScope, j, lastNode, listNode, newNode, node, nodeListPos, nodePos;
+  for (i = 0; i < 8; ++i) {
+    formattingEltListPos = this$static.listPtr;
+    while (formattingEltListPos > -1) {
+      listNode = this$static.listOfActiveFormattingElements[formattingEltListPos];
+      if (!listNode) {
+        formattingEltListPos = -1;
+        break;
+      }
+       else if (listNode.name_0 == name_0) {
+        break;
+      }
+      --formattingEltListPos;
+    }
+    if (formattingEltListPos == -1) {
+      return false;
+    }
+    formattingElt = this$static.listOfActiveFormattingElements[formattingEltListPos];
+    formattingEltStackPos = this$static.currentPtr;
+    inScope = true;
+    while (formattingEltStackPos > -1) {
+      node = this$static.stack_0[formattingEltStackPos];
+      if (node == formattingElt) {
+        break;
+      }
+       else
+        (node.flags & 134217728) != 0 && (inScope = false);
+      --formattingEltStackPos;
+    }
+    if (formattingEltStackPos == -1) {
+      $removeFromListOfActiveFormattingElements(this$static, formattingEltListPos);
+      return true;
+    }
+    if (!inScope) {
+      return true;
+    }
+    furthestBlockPos = formattingEltStackPos + 1;
+    while (furthestBlockPos <= this$static.currentPtr) {
+      node = this$static.stack_0[furthestBlockPos];
+      if ((node.flags & 536870912) != 0) {
+        break;
+      }
+      ++furthestBlockPos;
+    }
+    if (furthestBlockPos > this$static.currentPtr) {
+      while (this$static.currentPtr >= formattingEltStackPos) {
+        $pop(this$static);
+      }
+      $removeFromListOfActiveFormattingElements(this$static, formattingEltListPos);
+      return true;
+    }
+    commonAncestor = this$static.stack_0[formattingEltStackPos - 1];
+    furthestBlock = this$static.stack_0[furthestBlockPos];
+    bookmark = formattingEltListPos;
+    nodePos = furthestBlockPos;
+    lastNode = furthestBlock;
+    for (j = 0; j < 3; ++j) {
+      --nodePos;
+      node = this$static.stack_0[nodePos];
+      nodeListPos = $findInListOfActiveFormattingElements(this$static, node);
+      if (nodeListPos == -1) {
+        $removeFromStack(this$static, nodePos);
+        --furthestBlockPos;
+        continue;
+      }
+      if (nodePos == formattingEltStackPos) {
+        break;
+      }
+      nodePos == furthestBlockPos && (bookmark = nodeListPos + 1);
+      clone = $createElement(this$static, 'http://www.w3.org/1999/xhtml', node.name_0, $cloneAttributes(node.attributes));
+      newNode = $StackNode(new StackNode, node.flags, node.ns, node.name_0, clone, node.popName, node.attributes);
+      node.attributes = null;
+      this$static.stack_0[nodePos] = newNode;
+      ++newNode.refcount;
+      this$static.listOfActiveFormattingElements[nodeListPos] = newNode;
+      --node.refcount;
+      --node.refcount;
+      node = newNode;
+      $detachFromParent(this$static, lastNode.node);
+      $appendElement(this$static, lastNode.node, node.node);
+      lastNode = node;
+    }
+    if ((commonAncestor.flags & 268435456) != 0) {
+      $detachFromParent(this$static, lastNode.node);
+      $insertIntoFosterParent(this$static, lastNode.node);
+    }
+     else {
+      $detachFromParent(this$static, lastNode.node);
+      $appendElement(this$static, lastNode.node, commonAncestor.node);
+    }
+    clone = $createElement(this$static, 'http://www.w3.org/1999/xhtml', formattingElt.name_0, $cloneAttributes(formattingElt.attributes));
+    formattingClone = $StackNode(new StackNode, formattingElt.flags, formattingElt.ns, formattingElt.name_0, clone, formattingElt.popName, formattingElt.attributes);
+    formattingElt.attributes = null;
+    $appendChildrenToNewParent(this$static, furthestBlock.node, clone);
+    $appendElement(this$static, clone, furthestBlock.node);
+    $removeFromListOfActiveFormattingElements(this$static, formattingEltListPos);
+    ++formattingClone.refcount;
+    bookmark <= this$static.listPtr && arraycopy(this$static.listOfActiveFormattingElements, bookmark, this$static.listOfActiveFormattingElements, bookmark + 1, this$static.listPtr - bookmark + 1);
+    ++this$static.listPtr;
+    this$static.listOfActiveFormattingElements[bookmark] = formattingClone;
+    $removeFromStack(this$static, formattingEltStackPos);
+    $insertIntoStack(this$static, formattingClone, furthestBlockPos);
+  }
+  return true;
+}
+
+function $annotationXmlEncodingPermitsHtml(attributes){
+  var encoding;
+  encoding = $getValue_1(attributes, ($clinit_124() , ENCODING));
+  if (encoding == null) {
+    return false;
+  }
+  return lowerCaseLiteralEqualsIgnoreAsciiCaseString('application/xhtml+xml', encoding) || lowerCaseLiteralEqualsIgnoreAsciiCaseString('text/html', encoding);
+}
+
+function $append_3(this$static, node){
+  var newList;
+  ++this$static.listPtr;
+  if (this$static.listPtr == this$static.listOfActiveFormattingElements.length) {
+    newList = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 61, 15, this$static.listOfActiveFormattingElements.length + 64, 0);
+    arraycopy(this$static.listOfActiveFormattingElements, 0, newList, 0, this$static.listOfActiveFormattingElements.length);
+    this$static.listOfActiveFormattingElements = newList;
+  }
+  this$static.listOfActiveFormattingElements[this$static.listPtr] = node;
+}
+
+function $appendHtmlElementToDocumentAndPush(this$static, attributes){
+  var elt, node;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  elt = $createHtmlElementSetAsRoot(this$static, attributes);
+  node = $StackNode_0(new StackNode, ($clinit_125() , HTML_0), elt);
+  $push_0(this$static, node);
+}
+
+function $appendToCurrentNodeAndPushElement(this$static, elementName, attributes){
+  var elt, node;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  elt = $createElement(this$static, 'http://www.w3.org/1999/xhtml', elementName.name_0, attributes);
+  $appendElement(this$static, elt, this$static.stack_0[this$static.currentPtr].node);
+  node = $StackNode_0(new StackNode, elementName, elt);
+  $push_0(this$static, node);
+}
+
+function $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes){
+  var current, elt, node, popName;
+  popName = elementName.name_0;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  (elementName.flags & 1073741824) != 0 && (popName = $checkPopName(this$static, popName));
+  elt = $createElement(this$static, 'http://www.w3.org/1999/xhtml', popName, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  node = $StackNode_2(new StackNode, elementName, elt, popName);
+  $push_0(this$static, node);
+}
+
+function $appendToCurrentNodeAndPushElementMayFoster_0(this$static, elementName, attributes){
+  var current, elt, node;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  elt = $createElement_0(this$static, 'http://www.w3.org/1999/xhtml', elementName.name_0, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  node = $StackNode_0(new StackNode, elementName, elt);
+  $push_0(this$static, node);
+}
+
+function $appendToCurrentNodeAndPushElementMayFosterMathML(this$static, elementName, attributes){
+  var current, elt, markAsHtmlIntegrationPoint, node, popName;
+  popName = elementName.name_0;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  (elementName.flags & 1073741824) != 0 && (popName = $checkPopName(this$static, popName));
+  elt = $createElement(this$static, 'http://www.w3.org/1998/Math/MathML', popName, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  markAsHtmlIntegrationPoint = false;
+  ($clinit_125() , ANNOTATION_XML) == elementName && $annotationXmlEncodingPermitsHtml(attributes) && (markAsHtmlIntegrationPoint = true);
+  node = $StackNode_4(new StackNode, elementName, elt, popName, markAsHtmlIntegrationPoint);
+  $push_0(this$static, node);
+}
+
+function $appendToCurrentNodeAndPushElementMayFosterSVG(this$static, elementName, attributes){
+  var current, elt, node, popName;
+  popName = elementName.camelCaseName;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  (elementName.flags & 1073741824) != 0 && (popName = $checkPopName(this$static, popName));
+  elt = $createElement(this$static, 'http://www.w3.org/2000/svg', popName, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  node = $StackNode_3(new StackNode, elementName, popName, elt);
+  $push_0(this$static, node);
+}
+
+function $appendToCurrentNodeAndPushFormElementMayFoster(this$static, attributes){
+  var current, elt, node;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  elt = $createElement(this$static, 'http://www.w3.org/1999/xhtml', 'form', attributes);
+  this$static.formPointer = elt;
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  node = $StackNode_0(new StackNode, ($clinit_125() , FORM_0), elt);
+  $push_0(this$static, node);
+}
+
+function $appendToCurrentNodeAndPushFormattingElementMayFoster(this$static, elementName, attributes){
+  var current, elt, node;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  elt = $createElement(this$static, 'http://www.w3.org/1999/xhtml', elementName.name_0, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  node = $StackNode_1(new StackNode, elementName, elt, $cloneAttributes(attributes));
+  $push_0(this$static, node);
+  $append_3(this$static, node);
+  ++node.refcount;
+}
+
+function $appendToCurrentNodeAndPushHeadElement(this$static, attributes){
+  var elt, node;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  elt = $createElement(this$static, 'http://www.w3.org/1999/xhtml', 'head', attributes);
+  $appendElement(this$static, elt, this$static.stack_0[this$static.currentPtr].node);
+  this$static.headPointer = elt;
+  node = $StackNode_0(new StackNode, ($clinit_125() , HEAD), elt);
+  $push_0(this$static, node);
+}
+
+function $appendVoidElementToCurrentMayFoster(this$static, name_0, attributes){
+  var current, elt;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  elt = $createElement_0(this$static, 'http://www.w3.org/1999/xhtml', name_0, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  $elementPopped(this$static, 'http://www.w3.org/1999/xhtml', name_0, elt);
+}
+
+function $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes){
+  var current, elt, popName;
+  popName = elementName.name_0;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  (elementName.flags & 1073741824) != 0 && (popName = $checkPopName(this$static, popName));
+  elt = $createElement(this$static, 'http://www.w3.org/1999/xhtml', popName, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  $elementPopped(this$static, 'http://www.w3.org/1999/xhtml', popName, elt);
+}
+
+function $appendVoidElementToCurrentMayFosterMathML(this$static, elementName, attributes){
+  var current, elt, popName;
+  popName = elementName.name_0;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  (elementName.flags & 1073741824) != 0 && (popName = $checkPopName(this$static, popName));
+  elt = $createElement(this$static, 'http://www.w3.org/1998/Math/MathML', popName, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  $elementPopped(this$static, 'http://www.w3.org/1998/Math/MathML', popName, elt);
+}
+
+function $appendVoidElementToCurrentMayFosterSVG(this$static, elementName, attributes){
+  var current, elt, popName;
+  popName = elementName.camelCaseName;
+  $processNonNcNames(attributes, this$static, this$static.namePolicy);
+  (elementName.flags & 1073741824) != 0 && (popName = $checkPopName(this$static, popName));
+  elt = $createElement(this$static, 'http://www.w3.org/2000/svg', popName, attributes);
+  current = this$static.stack_0[this$static.currentPtr];
+  (current.flags & 268435456) != 0?$insertIntoFosterParent(this$static, elt):$appendElement(this$static, elt, current.node);
+  $elementPopped(this$static, 'http://www.w3.org/2000/svg', popName, elt);
+}
+
+function $cdataSectionAllowed(this$static){
+  return this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml';
+}
+
+function $charBufferContainsNonWhitespace(this$static){
+  var i;
+  for (i = 0; i < this$static.charBufferLen; ++i) {
+    switch (this$static.charBuffer[i]) {
+      case 32:
+      case 9:
+      case 10:
+      case 13:
+      case 12:
+        continue;
+      default:return true;
+    }
+  }
+  return false;
+}
+
+function $characters(this$static, buf, start, length_0){
+  var end, i;
+  if (this$static.needToDropLF) {
+    if (buf[start] == 10) {
+      ++start;
+      --length_0;
+      if (length_0 == 0) {
+        return;
+      }
+    }
+    this$static.needToDropLF = false;
+  }
+  switch (this$static.mode) {
+    case 6:
+    case 12:
+    case 8:
+      !(this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') && $reconstructTheActiveFormattingElements(this$static);
+    case 20:
+      $accumulateCharacters(this$static, buf, start, length_0);
+      return;
+    case 7:
+    case 10:
+    case 11:
+      $accumulateCharactersForced(this$static, buf, start, length_0);
+      return;
+    default:end = start + length_0;
+      charactersloop: for (i = start; i < end; ++i) {
+        switch (buf[i]) {
+          case 32:
+          case 9:
+          case 10:
+          case 13:
+          case 12:
+            switch (this$static.mode) {
+              case 0:
+              case 1:
+              case 2:
+                start = i + 1;
+                continue;
+              case 3:
+              case 4:
+              case 5:
+              case 9:
+              case 16:
+              case 17:
+                continue;
+              case 21:
+              case 6:
+              case 12:
+              case 8:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                if (!(this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml')) {
+                  $flushCharacters(this$static);
+                  $reconstructTheActiveFormattingElements(this$static);
+                }
+
+                break charactersloop;
+              case 13:
+              case 14:
+                break charactersloop;
+              case 7:
+              case 10:
+              case 11:
+                $accumulateCharactersForced(this$static, buf, i, 1);
+                start = i + 1;
+                continue;
+              case 15:
+              case 18:
+              case 19:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                $flushCharacters(this$static);
+                $reconstructTheActiveFormattingElements(this$static);
+                continue;
+            }
+
+          default:switch (this$static.mode) {
+              case 0:
+                $documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE));
+                this$static.mode = 1;
+                --i;
+                continue;
+              case 1:
+                $appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
+                this$static.mode = 2;
+                --i;
+                continue;
+              case 2:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                $flushCharacters(this$static);
+                $appendToCurrentNodeAndPushHeadElement(this$static, ($clinit_128() , EMPTY_ATTRIBUTES));
+                this$static.mode = 3;
+                --i;
+                continue;
+              case 3:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                $flushCharacters(this$static);
+                $pop(this$static);
+                this$static.mode = 5;
+                --i;
+                continue;
+              case 4:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                $flushCharacters(this$static);
+                $pop(this$static);
+                this$static.mode = 3;
+                --i;
+                continue;
+              case 5:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                $flushCharacters(this$static);
+                $appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , BODY), $emptyAttributes(this$static.tokenizer));
+                this$static.mode = 21;
+                --i;
+                continue;
+              case 21:
+                this$static.framesetOk = false;
+                this$static.mode = 6;
+                --i;
+                continue;
+              case 6:
+              case 12:
+              case 8:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                if (!(this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml')) {
+                  $flushCharacters(this$static);
+                  $reconstructTheActiveFormattingElements(this$static);
+                }
+
+                break charactersloop;
+              case 7:
+              case 10:
+              case 11:
+                $accumulateCharactersForced(this$static, buf, i, 1);
+                start = i + 1;
+                continue;
+              case 9:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                if (this$static.currentPtr == 0) {
+                  start = i + 1;
+                  continue;
+                }
+
+                $flushCharacters(this$static);
+                $pop(this$static);
+                this$static.mode = 7;
+                --i;
+                continue;
+              case 13:
+              case 14:
+                break charactersloop;
+              case 15:
+                this$static.mode = this$static.framesetOk?21:6;
+                --i;
+                continue;
+              case 16:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                start = i + 1;
+                continue;
+              case 17:
+                if (start < i) {
+                  $accumulateCharacters(this$static, buf, start, i - start);
+                  start = i;
+                }
+
+                start = i + 1;
+                continue;
+              case 18:
+                this$static.mode = this$static.framesetOk?21:6;
+                --i;
+                continue;
+              case 19:
+                this$static.mode = 16;
+                --i;
+                continue;
+            }
+
+        }
+      }
+
+      start < end && $accumulateCharacters(this$static, buf, start, end - start);
+  }
+}
+
+function $checkMetaCharset(attributes){
+  var charset, content;
+  charset = $getValue_1(attributes, ($clinit_124() , CHARSET));
+  if (charset != null) {
+    return;
+  }
+  if (!lowerCaseLiteralEqualsIgnoreAsciiCaseString('content-type', $getValue_1(attributes, HTTP_EQUIV))) {
+    return;
+  }
+  content = $getValue_1(attributes, CONTENT);
+  content != null && extractCharsetFromContent(content);
+}
+
+function $checkPopName(this$static, name_0){
+  if (isNCName(name_0)) {
+    return name_0;
+  }
+   else {
+    switch (this$static.namePolicy.ordinal) {
+      case 0:
+        return name_0;
+      case 2:
+        return escapeName(name_0);
+      case 1:
+        $fatal_0(this$static, 'Element name \u201C' + name_0 + '\u201D cannot be represented as XML 1.0.');
+    }
+  }
+  return null;
+}
+
+function $clearStackBackTo(this$static, eltPos){
+  while (this$static.currentPtr > eltPos) {
+    $pop(this$static);
+  }
+}
+
+function $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static){
+  while (this$static.listPtr > -1) {
+    if (!this$static.listOfActiveFormattingElements[this$static.listPtr]) {
+      --this$static.listPtr;
+      return;
+    }
+    --this$static.listOfActiveFormattingElements[this$static.listPtr].refcount;
+    --this$static.listPtr;
+  }
+}
+
+function $closeTheCell(this$static, eltPos){
+  $generateImpliedEndTags(this$static);
+  while (this$static.currentPtr >= eltPos) {
+    $pop(this$static);
+  }
+  $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
+  this$static.mode = 11;
+  return;
+}
+
+function $comment(this$static, buf, start, length_0){
+  var end, end_0, end_1;
+  this$static.needToDropLF = false;
+  if (!this$static.wantingComments) {
+    return;
+  }
+  if (!(this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml')) {
+    switch (this$static.mode) {
+      case 0:
+      case 1:
+      case 18:
+      case 19:
+        $appendCommentToDocument(this$static, (end = start + length_0 , __checkBounds(buf.length, start, end) , __valueOf(buf, start, end)));
+        return;
+      case 15:
+        $flushCharacters(this$static);
+        $appendComment(this$static, this$static.stack_0[0].node, (end_0 = start + length_0 , __checkBounds(buf.length, start, end_0) , __valueOf(buf, start, end_0)));
+        return;
+    }
+  }
+  $flushCharacters(this$static);
+  $appendComment(this$static, this$static.stack_0[this$static.currentPtr].node, (end_1 = start + length_0 , __checkBounds(buf.length, start, end_1) , __valueOf(buf, start, end_1)));
+  return;
+}
+
+function $doctype(this$static, name_0, publicIdentifier, systemIdentifier, forceQuirks){
+  this$static.needToDropLF = false;
+  if (!(this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml')) {
+    switch (this$static.mode) {
+      case 0:
+        switch (this$static.doctypeExpectation.ordinal) {
+          case 0:
+            if ($isQuirky(name_0, publicIdentifier, systemIdentifier, forceQuirks)) {
+              $documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE));
+            }
+             else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
+              $documentModeInternal(this$static, ($clinit_113() , ALMOST_STANDARDS_MODE));
+            }
+             else {
+              $equals_1('-//W3C//DTD HTML 4.0//EN', publicIdentifier) && (systemIdentifier == null || $equals_1('http://www.w3.org/TR/REC-html40/strict.dtd', systemIdentifier)) || $equals_1('-//W3C//DTD HTML 4.01//EN', publicIdentifier) && (systemIdentifier == null || $equals_1('http://www.w3.org/TR/html4/strict.dtd', systemIdentifier)) || $equals_1('-//W3C//DTD XHTML 1.0 Strict//EN', publicIdentifier) && $equals_1('http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd', systemIdentifier) || $equals_1('-//W3C//DTD XHTML 1.1//EN', publicIdentifier) && $equals_1('http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd', systemIdentifier) || !((systemIdentifier == null || $equals_1('about:legacy-compat', systemIdentifier)) && publicIdentifier == null);
+              $documentModeInternal(this$static, ($clinit_113() , STANDARDS_MODE));
+            }
+
+            break;
+          case 2:
+            this$static.html4 = true;
+            this$static.tokenizer.html4 = true;
+            if ($isQuirky(name_0, publicIdentifier, systemIdentifier, forceQuirks)) {
+              $documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE));
+            }
+             else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
+              $documentModeInternal(this$static, ($clinit_113() , ALMOST_STANDARDS_MODE));
+            }
+             else {
+              $equals_1('-//W3C//DTD HTML 4.01//EN', publicIdentifier) && !$equals_1('http://www.w3.org/TR/html4/strict.dtd', systemIdentifier);
+              $documentModeInternal(this$static, ($clinit_113() , STANDARDS_MODE));
+            }
+
+            break;
+          case 1:
+            this$static.html4 = true;
+            this$static.tokenizer.html4 = true;
+            if ($isQuirky(name_0, publicIdentifier, systemIdentifier, forceQuirks)) {
+              $documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE));
+            }
+             else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
+              $equals_1('-//W3C//DTD HTML 4.01 Transitional//EN', publicIdentifier) && systemIdentifier != null && !$equals_1('http://www.w3.org/TR/html4/loose.dtd', systemIdentifier);
+              $documentModeInternal(this$static, ($clinit_113() , ALMOST_STANDARDS_MODE));
+            }
+             else {
+              $documentModeInternal(this$static, ($clinit_113() , STANDARDS_MODE));
+            }
+
+            break;
+          case 3:
+            this$static.html4 = $isHtml4Doctype(publicIdentifier);
+            this$static.html4 && (this$static.tokenizer.html4 = true);
+            if ($isQuirky(name_0, publicIdentifier, systemIdentifier, forceQuirks)) {
+              $documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE));
+            }
+             else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
+              $equals_1('-//W3C//DTD HTML 4.01 Transitional//EN', publicIdentifier) && !$equals_1('http://www.w3.org/TR/html4/loose.dtd', systemIdentifier);
+              $documentModeInternal(this$static, ($clinit_113() , ALMOST_STANDARDS_MODE));
+            }
+             else {
+              $equals_1('-//W3C//DTD HTML 4.01//EN', publicIdentifier) && !$equals_1('http://www.w3.org/TR/html4/strict.dtd', systemIdentifier);
+              $documentModeInternal(this$static, ($clinit_113() , STANDARDS_MODE));
+            }
+
+            break;
+          case 4:
+            $isQuirky(name_0, publicIdentifier, systemIdentifier, forceQuirks)?$documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE)):$isAlmostStandards(publicIdentifier, systemIdentifier)?$documentModeInternal(this$static, ($clinit_113() , ALMOST_STANDARDS_MODE)):$documentModeInternal(this$static, ($clinit_113() , STANDARDS_MODE));
+        }
+
+        this$static.mode = 1;
+        return;
+    }
+  }
+  return;
+}
+
+function $documentModeInternal(this$static, m){
+  this$static.quirks = m == ($clinit_113() , QUIRKS_MODE);
+}
+
+function $endTag(this$static, elementName){
+  var eltPos, group, name_0, node, node_33;
+  $flushCharacters(this$static);
+  this$static.needToDropLF = false;
+  group = elementName.flags & 127;
+  name_0 = elementName.name_0;
+  endtagloop: for (;;) {
+    if (this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
+      eltPos = this$static.currentPtr;
+      for (;;) {
+        if (this$static.stack_0[eltPos].name_0 == name_0) {
+          while (this$static.currentPtr >= eltPos) {
+            $pop(this$static);
+          }
+          break endtagloop;
+        }
+        if (this$static.stack_0[--eltPos].ns == 'http://www.w3.org/1999/xhtml') {
+          break;
+        }
+      }
+    }
+    switch (this$static.mode) {
+      case 11:
+        switch (group) {
+          case 37:
+            eltPos = $findLastOrRoot_0(this$static, 37);
+            if (eltPos == 0) {
+              break endtagloop;
+            }
+
+            $clearStackBackTo(this$static, eltPos);
+            $pop(this$static);
+            this$static.mode = 10;
+            break endtagloop;
+          case 34:
+            eltPos = $findLastOrRoot_0(this$static, 37);
+            if (eltPos == 0) {
+              break endtagloop;
+            }
+
+            $clearStackBackTo(this$static, eltPos);
+            $pop(this$static);
+            this$static.mode = 10;
+            continue;
+          case 39:
+            if ($findLastInTableScope(this$static, name_0) == 2147483647) {
+              break endtagloop;
+            }
+
+            eltPos = $findLastOrRoot_0(this$static, 37);
+            if (eltPos == 0) {
+              break endtagloop;
+            }
+
+            $clearStackBackTo(this$static, eltPos);
+            $pop(this$static);
+            this$static.mode = 10;
+            continue;
+          case 3:
+          case 6:
+          case 7:
+          case 8:
+          case 23:
+          case 40:
+            break endtagloop;
+        }
+
+      case 10:
+        switch (group) {
+          case 39:
+            eltPos = $findLastOrRoot(this$static, name_0);
+            if (eltPos == 0) {
+              break endtagloop;
+            }
+
+            $clearStackBackTo(this$static, eltPos);
+            $pop(this$static);
+            this$static.mode = 7;
+            break endtagloop;
+          case 34:
+            eltPos = $findLastInTableScopeOrRootTbodyTheadTfoot(this$static);
+            if (eltPos == 0) {
+              break endtagloop;
+            }
+
+            $clearStackBackTo(this$static, eltPos);
+            $pop(this$static);
+            this$static.mode = 7;
+            continue;
+          case 3:
+          case 6:
+          case 7:
+          case 8:
+          case 23:
+          case 40:
+          case 37:
+            break endtagloop;
+        }
+
+      case 7:
+        switch (group) {
+          case 34:
+            eltPos = $findLast(this$static, 'table');
+            if (eltPos == 2147483647) {
+              break endtagloop;
+            }
+
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            $resetTheInsertionMode(this$static);
+            break endtagloop;
+          case 3:
+          case 6:
+          case 7:
+          case 8:
+          case 23:
+          case 39:
+          case 40:
+          case 37:
+            break endtagloop;
+        }
+
+      case 8:
+        switch (group) {
+          case 6:
+            eltPos = $findLastInTableScope(this$static, 'caption');
+            if (eltPos == 2147483647) {
+              break endtagloop;
+            }
+
+            $generateImpliedEndTags(this$static);
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
+            this$static.mode = 7;
+            break endtagloop;
+          case 34:
+            eltPos = $findLastInTableScope(this$static, 'caption');
+            if (eltPos == 2147483647) {
+              break endtagloop;
+            }
+
+            $generateImpliedEndTags(this$static);
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
+            this$static.mode = 7;
+            continue;
+          case 3:
+          case 7:
+          case 8:
+          case 23:
+          case 39:
+          case 40:
+          case 37:
+            break endtagloop;
+        }
+
+      case 12:
+        switch (group) {
+          case 40:
+            eltPos = $findLastInTableScope(this$static, name_0);
+            if (eltPos == 2147483647) {
+              break endtagloop;
+            }
+
+            $generateImpliedEndTags(this$static);
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
+            this$static.mode = 11;
+            break endtagloop;
+          case 34:
+          case 39:
+          case 37:
+            if ($findLastInTableScope(this$static, name_0) == 2147483647) {
+              break endtagloop;
+            }
+
+            $closeTheCell(this$static, $findLastInTableScopeTdTh(this$static));
+            continue;
+          case 3:
+          case 6:
+          case 7:
+          case 8:
+          case 23:
+            break endtagloop;
+        }
+
+      case 21:
+      case 6:
+        switch (group) {
+          case 3:
+            if (!(this$static.currentPtr >= 1 && (this$static.stack_0[1].flags & 127) == 3)) {
+              break endtagloop;
+            }
+
+            this$static.mode = 15;
+            break endtagloop;
+          case 23:
+            if (!(this$static.currentPtr >= 1 && (this$static.stack_0[1].flags & 127) == 3)) {
+              break endtagloop;
+            }
+
+            this$static.mode = 15;
+            continue;
+          case 50:
+          case 46:
+          case 44:
+          case 61:
+          case 5:
+          case 51:
+            eltPos = $findLastInScope(this$static, name_0);
+            if (!(eltPos == 2147483647)) {
+              $generateImpliedEndTags(this$static);
+              while (this$static.currentPtr >= eltPos) {
+                $pop(this$static);
+              }
+            }
+
+            break endtagloop;
+          case 9:
+            if (!this$static.formPointer) {
+              break endtagloop;
+            }
+
+            this$static.formPointer = null;
+            eltPos = $findLastInScope(this$static, name_0);
+            if (eltPos == 2147483647) {
+              break endtagloop;
+            }
+
+            $generateImpliedEndTags(this$static);
+            $removeFromStack(this$static, eltPos);
+            break endtagloop;
+          case 29:
+            eltPos = $findLastInButtonScope(this$static, 'p');
+            if (eltPos == 2147483647) {
+              if (this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
+                while (this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
+                  $pop(this$static);
+                }
+              }
+              $appendVoidElementToCurrentMayFoster_0(this$static, elementName, ($clinit_128() , EMPTY_ATTRIBUTES));
+              break endtagloop;
+            }
+
+            $generateImpliedEndTagsExceptFor(this$static, 'p');
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            break endtagloop;
+          case 15:
+            eltPos = $findLastInListScope(this$static, name_0);
+            if (!(eltPos == 2147483647)) {
+              $generateImpliedEndTagsExceptFor(this$static, name_0);
+              while (this$static.currentPtr >= eltPos) {
+                $pop(this$static);
+              }
+            }
+
+            break endtagloop;
+          case 41:
+            eltPos = $findLastInScope(this$static, name_0);
+            if (!(eltPos == 2147483647)) {
+              $generateImpliedEndTagsExceptFor(this$static, name_0);
+              while (this$static.currentPtr >= eltPos) {
+                $pop(this$static);
+              }
+            }
+
+            break endtagloop;
+          case 42:
+            eltPos = $findLastInScopeHn(this$static);
+            if (!(eltPos == 2147483647)) {
+              $generateImpliedEndTags(this$static);
+              while (this$static.currentPtr >= eltPos) {
+                $pop(this$static);
+              }
+            }
+
+            break endtagloop;
+          case 63:
+          case 43:
+            eltPos = $findLastInScope(this$static, name_0);
+            if (!(eltPos == 2147483647)) {
+              $generateImpliedEndTags(this$static);
+              while (this$static.currentPtr >= eltPos) {
+                $pop(this$static);
+              }
+              $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
+            }
+
+            break endtagloop;
+          case 4:
+            if (this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
+              while (this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
+                $pop(this$static);
+              }
+            }
+
+            $reconstructTheActiveFormattingElements(this$static);
+            $appendVoidElementToCurrentMayFoster_0(this$static, elementName, ($clinit_128() , EMPTY_ATTRIBUTES));
+            break endtagloop;
+          case 49:
+          case 55:
+          case 48:
+          case 12:
+          case 13:
+          case 65:
+          case 22:
+          case 14:
+          case 47:
+          case 60:
+          case 25:
+          case 32:
+          case 34:
+          case 35:
+            break endtagloop;
+          case 26:
+          case 1:
+          case 45:
+          case 64:
+          case 24:
+            if ($adoptionAgencyEndTag(this$static, name_0)) {
+              break endtagloop;
+            }
+
+          default:if (name_0 == this$static.stack_0[this$static.currentPtr].name_0) {
+              $pop(this$static);
+              break endtagloop;
+            }
+
+            eltPos = this$static.currentPtr;
+            for (;;) {
+              node = this$static.stack_0[eltPos];
+              if (node.name_0 == name_0) {
+                $generateImpliedEndTags(this$static);
+                while (this$static.currentPtr >= eltPos) {
+                  $pop(this$static);
+                }
+                break endtagloop;
+              }
+               else if ((node.flags & 536870912) != 0) {
+                break endtagloop;
+              }
+              --eltPos;
+            }
+
+        }
+
+      case 9:
+        switch (group) {
+          case 8:
+            if (this$static.currentPtr == 0) {
+              break endtagloop;
+            }
+
+            $pop(this$static);
+            this$static.mode = 7;
+            break endtagloop;
+          case 7:
+            break endtagloop;
+          default:if (this$static.currentPtr == 0) {
+              break endtagloop;
+            }
+
+            $pop(this$static);
+            this$static.mode = 7;
+            continue;
+        }
+
+      case 14:
+        switch (group) {
+          case 6:
+          case 34:
+          case 39:
+          case 37:
+          case 40:
+            if ($findLastInTableScope(this$static, name_0) != 2147483647) {
+              eltPos = $findLastInTableScope(this$static, 'select');
+              if (eltPos == 2147483647) {
+                break endtagloop;
+              }
+              while (this$static.currentPtr >= eltPos) {
+                $pop(this$static);
+              }
+              $resetTheInsertionMode(this$static);
+              continue;
+            }
+             else {
+              break endtagloop;
+            }
+
+        }
+
+      case 13:
+        switch (group) {
+          case 28:
+            if ('option' == this$static.stack_0[this$static.currentPtr].name_0) {
+              $pop(this$static);
+              break endtagloop;
+            }
+             else {
+              break endtagloop;
+            }
+
+          case 27:
+            'option' == this$static.stack_0[this$static.currentPtr].name_0 && 'optgroup' == this$static.stack_0[this$static.currentPtr - 1].name_0 && $pop(this$static);
+            'optgroup' == this$static.stack_0[this$static.currentPtr].name_0 && $pop(this$static);
+            break endtagloop;
+          case 32:
+            eltPos = $findLastInTableScope(this$static, 'select');
+            if (eltPos == 2147483647) {
+              break endtagloop;
+            }
+
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            $resetTheInsertionMode(this$static);
+            break endtagloop;
+          default:break endtagloop;
+        }
+
+      case 15:
+        switch (group) {
+          case 23:
+            if (this$static.fragment) {
+              break endtagloop;
+            }
+             else {
+              this$static.mode = 18;
+              break endtagloop;
+            }
+
+          default:this$static.mode = this$static.framesetOk?21:6;
+            continue;
+        }
+
+      case 16:
+        switch (group) {
+          case 11:
+            if (this$static.currentPtr == 0) {
+              break endtagloop;
+            }
+
+            $pop(this$static);
+            !this$static.fragment && 'frameset' != this$static.stack_0[this$static.currentPtr].name_0 && (this$static.mode = 17);
+            break endtagloop;
+          default:break endtagloop;
+        }
+
+      case 17:
+        switch (group) {
+          case 23:
+            this$static.mode = 19;
+            break endtagloop;
+          default:break endtagloop;
+        }
+
+      case 0:
+        $documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE));
+        this$static.mode = 1;
+        continue;
+      case 1:
+        switch (group) {
+          case 20:
+          case 4:
+          case 23:
+          case 3:
+            $appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
+            this$static.mode = 2;
+            continue;
+          default:break endtagloop;
+        }
+
+      case 2:
+        switch (group) {
+          case 20:
+          case 4:
+          case 23:
+          case 3:
+            $appendToCurrentNodeAndPushHeadElement(this$static, ($clinit_128() , EMPTY_ATTRIBUTES));
+            this$static.mode = 3;
+            continue;
+          default:break endtagloop;
+        }
+
+      case 3:
+        switch (group) {
+          case 20:
+            $pop(this$static);
+            this$static.mode = 5;
+            break endtagloop;
+          case 4:
+          case 23:
+          case 3:
+            $pop(this$static);
+            this$static.mode = 5;
+            continue;
+          default:break endtagloop;
+        }
+
+      case 4:
+        switch (group) {
+          case 26:
+            $pop(this$static);
+            this$static.mode = 3;
+            break endtagloop;
+          case 4:
+            $pop(this$static);
+            this$static.mode = 3;
+            continue;
+          default:break endtagloop;
+        }
+
+      case 5:
+        switch (group) {
+          case 23:
+          case 3:
+          case 4:
+            $appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , BODY), $emptyAttributes(this$static.tokenizer));
+            this$static.mode = 21;
+            continue;
+          default:break endtagloop;
+        }
+
+      case 18:
+        this$static.mode = this$static.framesetOk?21:6;
+        continue;
+      case 19:
+        this$static.mode = 16;
+        continue;
+      case 20:
+        $pop(this$static);
+        this$static.originalMode == 5 && (node_33 = this$static.stack_0[this$static.currentPtr] , --this$static.currentPtr , --node_33.refcount , undefined);
+        this$static.mode = this$static.originalMode;
+        break endtagloop;
+    }
+  }
+}
+
+function $endTokenization(this$static){
+  this$static.formPointer = null;
+  this$static.headPointer = null;
+  if (this$static.stack_0 != null) {
+    while (this$static.currentPtr > -1) {
+      --this$static.stack_0[this$static.currentPtr].refcount;
+      --this$static.currentPtr;
+    }
+    this$static.stack_0 = null;
+  }
+  if (this$static.listOfActiveFormattingElements != null) {
+    while (this$static.listPtr > -1) {
+      !!this$static.listOfActiveFormattingElements[this$static.listPtr] && --this$static.listOfActiveFormattingElements[this$static.listPtr].refcount;
+      --this$static.listPtr;
+    }
+    this$static.listOfActiveFormattingElements = null;
+  }
+  $clearImpl(this$static.idLocations);
+  this$static.charBuffer = null;
+}
+
+function $eof(this$static){
+  var group, i;
+  $flushCharacters(this$static);
+  eofloop: for (;;) {
+    if (this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
+      break eofloop;
+    }
+    switch (this$static.mode) {
+      case 0:
+        $documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE));
+        this$static.mode = 1;
+        continue;
+      case 1:
+        $appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
+        this$static.mode = 2;
+        continue;
+      case 2:
+        $appendToCurrentNodeAndPushHeadElement(this$static, ($clinit_128() , EMPTY_ATTRIBUTES));
+        this$static.mode = 3;
+        continue;
+      case 3:
+        while (this$static.currentPtr > 0) {
+          $popOnEof(this$static);
+        }
+
+        this$static.mode = 5;
+        continue;
+      case 4:
+        while (this$static.currentPtr > 1) {
+          $popOnEof(this$static);
+        }
+
+        this$static.mode = 3;
+        continue;
+      case 5:
+        $appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , BODY), $emptyAttributes(this$static.tokenizer));
+        this$static.mode = 6;
+        continue;
+      case 9:
+        if (this$static.currentPtr == 0) {
+          break eofloop;
+        }
+         else {
+          $popOnEof(this$static);
+          this$static.mode = 7;
+          continue;
+        }
+
+      case 21:
+      case 8:
+      case 12:
+      case 6:
+        openelementloop: for (i = this$static.currentPtr; i >= 0; --i) {
+          group = this$static.stack_0[i].flags & 127;
+          switch (group) {
+            case 41:
+            case 15:
+            case 29:
+            case 39:
+            case 40:
+            case 3:
+            case 23:
+              break;
+            default:break openelementloop;
+          }
+        }
+
+        break eofloop;
+      case 20:
+        this$static.originalMode == 5 && $popOnEof(this$static);
+        $popOnEof(this$static);
+        this$static.mode = this$static.originalMode;
+        continue;
+      case 10:
+      case 11:
+      case 7:
+      case 13:
+      case 14:
+      case 16:
+        break eofloop;
+      case 15:
+      case 17:
+      case 18:
+      case 19:
+      default:this$static.currentPtr == 0 && fromDouble((new Date).getTime());
+        break eofloop;
+    }
+  }
+  while (this$static.currentPtr > 0) {
+    $popOnEof(this$static);
+  }
+  !this$static.fragment && $popOnEof(this$static);
+}
+
+function $fatal(this$static, e){
+  var spe;
+  spe = $SAXParseException_0(new SAXParseException, e.getMessage(), this$static.tokenizer, e);
+  throw spe;
+}
+
+function $fatal_0(this$static, s){
+  var spe;
+  spe = $SAXParseException(new SAXParseException, s, this$static.tokenizer);
+  throw spe;
+}
+
+function $findInListOfActiveFormattingElements(this$static, node){
+  var i;
+  for (i = this$static.listPtr; i >= 0; --i) {
+    if (node == this$static.listOfActiveFormattingElements[i]) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+function $findInListOfActiveFormattingElementsContainsBetweenEndAndLastMarker(this$static, name_0){
+  var i, node;
+  for (i = this$static.listPtr; i >= 0; --i) {
+    node = this$static.listOfActiveFormattingElements[i];
+    if (!node) {
+      return -1;
+    }
+     else if (node.name_0 == name_0) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+function $findLast(this$static, name_0){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if (this$static.stack_0[i].name_0 == name_0) {
+      return i;
+    }
+  }
+  return 2147483647;
+}
+
+function $findLastInButtonScope(this$static, name_0){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if (this$static.stack_0[i].name_0 == name_0) {
+      return i;
+    }
+     else if ((this$static.stack_0[i].flags & 134217728) != 0 || this$static.stack_0[i].name_0 == 'button') {
+      return 2147483647;
+    }
+  }
+  return 2147483647;
+}
+
+function $findLastInListScope(this$static, name_0){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if (this$static.stack_0[i].name_0 == name_0) {
+      return i;
+    }
+     else if ((this$static.stack_0[i].flags & 134217728) != 0 || this$static.stack_0[i].name_0 == 'ul' || this$static.stack_0[i].name_0 == 'ol') {
+      return 2147483647;
+    }
+  }
+  return 2147483647;
+}
+
+function $findLastInScope(this$static, name_0){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if (this$static.stack_0[i].name_0 == name_0) {
+      return i;
+    }
+     else if ((this$static.stack_0[i].flags & 134217728) != 0) {
+      return 2147483647;
+    }
+  }
+  return 2147483647;
+}
+
+function $findLastInScopeHn(this$static){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if ((this$static.stack_0[i].flags & 127) == 42) {
+      return i;
+    }
+     else if ((this$static.stack_0[i].flags & 134217728) != 0) {
+      return 2147483647;
+    }
+  }
+  return 2147483647;
+}
+
+function $findLastInTableScope(this$static, name_0){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if (this$static.stack_0[i].name_0 == name_0) {
+      return i;
+    }
+     else if (this$static.stack_0[i].name_0 == 'table') {
+      return 2147483647;
+    }
+  }
+  return 2147483647;
+}
+
+function $findLastInTableScopeOrRootTbodyTheadTfoot(this$static){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if ((this$static.stack_0[i].flags & 127) == 39) {
+      return i;
+    }
+  }
+  return 0;
+}
+
+function $findLastInTableScopeTdTh(this$static){
+  var i, name_0;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    name_0 = this$static.stack_0[i].name_0;
+    if ('td' == name_0 || 'th' == name_0) {
+      return i;
+    }
+     else if (name_0 == 'table') {
+      return 2147483647;
+    }
+  }
+  return 2147483647;
+}
+
+function $findLastOrRoot(this$static, name_0){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if (this$static.stack_0[i].name_0 == name_0) {
+      return i;
+    }
+  }
+  return 0;
+}
+
+function $findLastOrRoot_0(this$static, group){
+  var i;
+  for (i = this$static.currentPtr; i > 0; --i) {
+    if ((this$static.stack_0[i].flags & 127) == group) {
+      return i;
+    }
+  }
+  return 0;
+}
+
+function $flushCharacters(this$static){
+  var elt, eltPos, node;
+  if (this$static.charBufferLen > 0) {
+    if ((this$static.mode == 7 || this$static.mode == 10 || this$static.mode == 11) && $charBufferContainsNonWhitespace(this$static)) {
+      $reconstructTheActiveFormattingElements(this$static);
+      if ((this$static.stack_0[this$static.currentPtr].flags & 268435456) == 0) {
+        $appendCharacters(this$static, this$static.stack_0[this$static.currentPtr].node, valueOf_0(this$static.charBuffer, 0, this$static.charBufferLen));
+        this$static.charBufferLen = 0;
+        return;
+      }
+      eltPos = $findLastOrRoot_0(this$static, 34);
+      node = this$static.stack_0[eltPos];
+      elt = node.node;
+      if (eltPos == 0) {
+        $appendCharacters(this$static, elt, valueOf_0(this$static.charBuffer, 0, this$static.charBufferLen));
+        this$static.charBufferLen = 0;
+        return;
+      }
+      $insertFosterParentedCharacters(this$static, this$static.charBuffer, 0, this$static.charBufferLen, elt, this$static.stack_0[eltPos - 1].node);
+      this$static.charBufferLen = 0;
+      return;
+    }
+    $appendCharacters(this$static, this$static.stack_0[this$static.currentPtr].node, valueOf_0(this$static.charBuffer, 0, this$static.charBufferLen));
+    this$static.charBufferLen = 0;
+  }
+}
+
+function $generateImpliedEndTags(this$static){
+  for (;;) {
+    switch (this$static.stack_0[this$static.currentPtr].flags & 127) {
+      case 29:
+      case 15:
+      case 41:
+      case 28:
+      case 27:
+      case 53:
+        $pop(this$static);
+        continue;
+      default:return;
+    }
+  }
+}
+
+function $generateImpliedEndTagsExceptFor(this$static, name_0){
+  var node;
+  for (;;) {
+    node = this$static.stack_0[this$static.currentPtr];
+    switch (node.flags & 127) {
+      case 29:
+      case 15:
+      case 41:
+      case 28:
+      case 27:
+      case 53:
+        if (node.name_0 == name_0) {
+          return;
+        }
+
+        $pop(this$static);
+        continue;
+      default:return;
+    }
+  }
+}
+
+function $implicitlyCloseP(this$static){
+  var eltPos;
+  eltPos = $findLastInButtonScope(this$static, 'p');
+  if (eltPos == 2147483647) {
+    return;
+  }
+  $generateImpliedEndTagsExceptFor(this$static, 'p');
+  while (this$static.currentPtr >= eltPos) {
+    $pop(this$static);
+  }
+}
+
+function $insertIntoFosterParent(this$static, child){
+  var elt, eltPos, node;
+  eltPos = $findLastOrRoot_0(this$static, 34);
+  node = this$static.stack_0[eltPos];
+  elt = node.node;
+  if (eltPos == 0) {
+    $appendElement(this$static, child, elt);
+    return;
+  }
+  $insertFosterParentedChild(this$static, child, elt, this$static.stack_0[eltPos - 1].node);
+}
+
+function $insertIntoStack(this$static, node, position){
+  if (position == this$static.currentPtr + 1) {
+    $push_0(this$static, node);
+  }
+   else {
+    arraycopy(this$static.stack_0, position, this$static.stack_0, position + 1, this$static.currentPtr - position + 1);
+    ++this$static.currentPtr;
+    this$static.stack_0[position] = node;
+  }
+}
+
+function $isAlmostStandards(publicIdentifier, systemIdentifier){
+  if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd xhtml 1.0 transitional//en', publicIdentifier)) {
+    return true;
+  }
+  if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd xhtml 1.0 frameset//en', publicIdentifier)) {
+    return true;
+  }
+  if (systemIdentifier != null) {
+    if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd html 4.01 transitional//en', publicIdentifier)) {
+      return true;
+    }
+    if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd html 4.01 frameset//en', publicIdentifier)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+function $isHtml4Doctype(publicIdentifier){
+  if (publicIdentifier != null && binarySearch_0(HTML4_PUBLIC_IDS, publicIdentifier, ($clinit_95() , $clinit_95() , NATURAL)) > -1) {
+    return true;
+  }
+  return false;
+}
+
+function $isInStack(this$static, node){
+  var i;
+  for (i = this$static.currentPtr; i >= 0; --i) {
+    if (this$static.stack_0[i] == node) {
+      return true;
+    }
+  }
+  return false;
+}
+
+function $isQuirky(name_0, publicIdentifier, systemIdentifier, forceQuirks){
+  var i;
+  if (forceQuirks) {
+    return true;
+  }
+  if (name_0 != 'html') {
+    return true;
+  }
+  if (publicIdentifier != null) {
+    for (i = 0; i < QUIRKY_PUBLIC_IDS.length; ++i) {
+      if (lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(QUIRKY_PUBLIC_IDS[i], publicIdentifier)) {
+        return true;
+      }
+    }
+    if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3o//dtd w3 html strict 3.0//en//', publicIdentifier) || lowerCaseLiteralEqualsIgnoreAsciiCaseString('-/w3c/dtd html 4.0 transitional/en', publicIdentifier) || lowerCaseLiteralEqualsIgnoreAsciiCaseString('html', publicIdentifier)) {
+      return true;
+    }
+  }
+  if (systemIdentifier == null) {
+    if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd html 4.01 transitional//en', publicIdentifier)) {
+      return true;
+    }
+     else if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd html 4.01 frameset//en', publicIdentifier)) {
+      return true;
+    }
+  }
+   else if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd', systemIdentifier)) {
+    return true;
+  }
+  return false;
+}
+
+function $isSpecialParentInForeign(stackNode){
+  var ns;
+  ns = stackNode.ns;
+  return 'http://www.w3.org/1999/xhtml' == ns || (stackNode.flags & 16777216) != 0 || 'http://www.w3.org/1998/Math/MathML' == ns && (stackNode.flags & 127) == 57;
+}
+
+function $maybeForgetEarlierDuplicateFormattingElement(this$static, name_0, attributes){
+  var candidate, count, i, node;
+  candidate = -1;
+  count = 0;
+  for (i = this$static.listPtr; i >= 0; --i) {
+    node = this$static.listOfActiveFormattingElements[i];
+    if (!node) {
+      break;
+    }
+    if (node.name_0 == name_0 && $equalsAnother_0(node.attributes, attributes)) {
+      candidate = i;
+      ++count;
+    }
+  }
+  count >= 3 && $removeFromListOfActiveFormattingElements(this$static, candidate);
+}
+
+function $pop(this$static){
+  var node;
+  node = this$static.stack_0[this$static.currentPtr];
+  --this$static.currentPtr;
+  $elementPopped(this$static, node.ns, node.popName, node.node);
+  --node.refcount;
+}
+
+function $popOnEof(this$static){
+  var node;
+  node = this$static.stack_0[this$static.currentPtr];
+  --this$static.currentPtr;
+  $elementPopped(this$static, node.ns, node.popName, node.node);
+  --node.refcount;
+}
+
+function $push_0(this$static, node){
+  var newStack;
+  ++this$static.currentPtr;
+  if (this$static.currentPtr == this$static.stack_0.length) {
+    newStack = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 61, 15, this$static.stack_0.length + 64, 0);
+    arraycopy(this$static.stack_0, 0, newStack, 0, this$static.stack_0.length);
+    this$static.stack_0 = newStack;
+  }
+  this$static.stack_0[this$static.currentPtr] = node;
+}
+
+function $reconstructTheActiveFormattingElements(this$static){
+  var clone, currentNode, entry, entryClone, entryPos, mostRecent;
+  if (this$static.listPtr == -1) {
+    return;
+  }
+  mostRecent = this$static.listOfActiveFormattingElements[this$static.listPtr];
+  if (!mostRecent || $isInStack(this$static, mostRecent)) {
+    return;
+  }
+  entryPos = this$static.listPtr;
+  for (;;) {
+    --entryPos;
+    if (entryPos == -1) {
+      break;
+    }
+    if (!this$static.listOfActiveFormattingElements[entryPos]) {
+      break;
+    }
+    if ($isInStack(this$static, this$static.listOfActiveFormattingElements[entryPos])) {
+      break;
+    }
+  }
+  while (entryPos < this$static.listPtr) {
+    ++entryPos;
+    entry = this$static.listOfActiveFormattingElements[entryPos];
+    clone = $createElement(this$static, 'http://www.w3.org/1999/xhtml', entry.name_0, $cloneAttributes(entry.attributes));
+    entryClone = $StackNode(new StackNode, entry.flags, entry.ns, entry.name_0, clone, entry.popName, entry.attributes);
+    entry.attributes = null;
+    currentNode = this$static.stack_0[this$static.currentPtr];
+    (currentNode.flags & 268435456) != 0?$insertIntoFosterParent(this$static, clone):$appendElement(this$static, clone, currentNode.node);
+    $push_0(this$static, entryClone);
+    this$static.listOfActiveFormattingElements[entryPos] = entryClone;
+    --entry.refcount;
+    ++entryClone.refcount;
+  }
+}
+
+function $removeFromListOfActiveFormattingElements(this$static, pos){
+  --this$static.listOfActiveFormattingElements[pos].refcount;
+  if (pos == this$static.listPtr) {
+    --this$static.listPtr;
+    return;
+  }
+  arraycopy(this$static.listOfActiveFormattingElements, pos + 1, this$static.listOfActiveFormattingElements, pos, this$static.listPtr - pos);
+  --this$static.listPtr;
+}
+
+function $removeFromStack(this$static, pos){
+  if (this$static.currentPtr == pos) {
+    $pop(this$static);
+  }
+   else {
+    --this$static.stack_0[pos].refcount;
+    arraycopy(this$static.stack_0, pos + 1, this$static.stack_0, pos, this$static.currentPtr - pos);
+    --this$static.currentPtr;
+  }
+}
+
+function $removeFromStack_0(this$static, node){
+  var pos;
+  if (this$static.stack_0[this$static.currentPtr] == node) {
+    $pop(this$static);
+  }
+   else {
+    pos = this$static.currentPtr - 1;
+    while (pos >= 0 && this$static.stack_0[pos] != node) {
+      --pos;
+    }
+    if (pos == -1) {
+      return;
+    }
+    --node.refcount;
+    arraycopy(this$static.stack_0, pos + 1, this$static.stack_0, pos, this$static.currentPtr - pos);
+    --this$static.currentPtr;
+  }
+}
+
+function $resetTheInsertionMode(this$static){
+  var i, name_0, node, ns;
+  for (i = this$static.currentPtr; i >= 0; --i) {
+    node = this$static.stack_0[i];
+    name_0 = node.name_0;
+    ns = node.ns;
+    if (i == 0) {
+      if (this$static.contextNamespace == 'http://www.w3.org/1999/xhtml' && (this$static.contextName == 'td' || this$static.contextName == 'th')) {
+        this$static.mode = this$static.framesetOk?21:6;
+        return;
+      }
+       else {
+        name_0 = this$static.contextName;
+        ns = this$static.contextNamespace;
+      }
+    }
+    if ('select' == name_0) {
+      this$static.mode = 13;
+      return;
+    }
+     else if ('td' == name_0 || 'th' == name_0) {
+      this$static.mode = 12;
+      return;
+    }
+     else if ('tr' == name_0) {
+      this$static.mode = 11;
+      return;
+    }
+     else if ('tbody' == name_0 || 'thead' == name_0 || 'tfoot' == name_0) {
+      this$static.mode = 10;
+      return;
+    }
+     else if ('caption' == name_0) {
+      this$static.mode = 8;
+      return;
+    }
+     else if ('colgroup' == name_0) {
+      this$static.mode = 9;
+      return;
+    }
+     else if ('table' == name_0) {
+      this$static.mode = 7;
+      return;
+    }
+     else if ('http://www.w3.org/1999/xhtml' != ns) {
+      this$static.mode = this$static.framesetOk?21:6;
+      return;
+    }
+     else if ('head' == name_0) {
+      this$static.mode = this$static.framesetOk?21:6;
+      return;
+    }
+     else if ('body' == name_0) {
+      this$static.mode = this$static.framesetOk?21:6;
+      return;
+    }
+     else if ('frameset' == name_0) {
+      this$static.mode = 16;
+      return;
+    }
+     else if ('html' == name_0) {
+      !this$static.headPointer?(this$static.mode = 2):(this$static.mode = 5);
+      return;
+    }
+     else if (i == 0) {
+      this$static.mode = this$static.framesetOk?21:6;
+      return;
+    }
+  }
+}
+
+function $setFragmentContext(this$static, context){
+  this$static.contextName = context;
+  this$static.contextNamespace = 'http://www.w3.org/1999/xhtml';
+  this$static.fragment = false;
+  this$static.quirks = false;
+}
+
+function $silentPush(this$static, node){
+  var newStack;
+  ++this$static.currentPtr;
+  if (this$static.currentPtr == this$static.stack_0.length) {
+    newStack = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 61, 15, this$static.stack_0.length + 64, 0);
+    arraycopy(this$static.stack_0, 0, newStack, 0, this$static.stack_0.length);
+    this$static.stack_0 = newStack;
+  }
+  this$static.stack_0[this$static.currentPtr] = node;
+}
+
+function $startTag(this$static, elementName, attributes, selfClosing){
+  var actionIndex, activeA, activeAPos, attributeQName, currNs, currentNode, eltPos, formAttrs, group, i, inputAttributes, name_0, node, prompt_0, promptIndex, current_3, elt_10, current_4, elt_11;
+  $flushCharacters(this$static);
+  this$static.needToDropLF = false;
+  starttagloop: for (;;) {
+    group = elementName.flags & 127;
+    name_0 = elementName.name_0;
+    if (this$static.currentPtr >= 0 && this$static.stack_0[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
+      currentNode = this$static.stack_0[this$static.currentPtr];
+      currNs = currentNode.ns;
+      if (!((currentNode.flags & 16777216) != 0 || currNs == 'http://www.w3.org/1998/Math/MathML' && ((currentNode.flags & 127) == 57 && group != 56 || (currentNode.flags & 127) == 58 && group == 19))) {
+        switch (group) {
+          case 45:
+          case 50:
+          case 3:
+          case 4:
+          case 52:
+          case 41:
+          case 46:
+          case 48:
+          case 42:
+          case 20:
+          case 22:
+          case 15:
+          case 18:
+          case 24:
+          case 29:
+          case 44:
+          case 34:
+            while (!$isSpecialParentInForeign(this$static.stack_0[this$static.currentPtr])) {
+              $pop(this$static);
+            }
+
+            continue starttagloop;
+          case 64:
+            if ($contains(attributes, ($clinit_124() , COLOR)) || $contains(attributes, FACE) || $contains(attributes, SIZE)) {
+              while (!$isSpecialParentInForeign(this$static.stack_0[this$static.currentPtr])) {
+                $pop(this$static);
+              }
+              continue starttagloop;
+            }
+
+          default:if ('http://www.w3.org/2000/svg' == currNs) {
+              attributes.mode = 2;
+              if (selfClosing) {
+                $appendVoidElementToCurrentMayFosterSVG(this$static, elementName, attributes);
+                selfClosing = false;
+              }
+               else {
+                $appendToCurrentNodeAndPushElementMayFosterSVG(this$static, elementName, attributes);
+              }
+              attributes = null;
+              break starttagloop;
+            }
+             else {
+              attributes.mode = 1;
+              if (selfClosing) {
+                $appendVoidElementToCurrentMayFosterMathML(this$static, elementName, attributes);
+                selfClosing = false;
+              }
+               else {
+                $appendToCurrentNodeAndPushElementMayFosterMathML(this$static, elementName, attributes);
+              }
+              attributes = null;
+              break starttagloop;
+            }
+
+        }
+      }
+    }
+    switch (this$static.mode) {
+      case 10:
+        switch (group) {
+          case 37:
+            $clearStackBackTo(this$static, $findLastInTableScopeOrRootTbodyTheadTfoot(this$static));
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            this$static.mode = 11;
+            attributes = null;
+            break starttagloop;
+          case 40:
+            $clearStackBackTo(this$static, $findLastInTableScopeOrRootTbodyTheadTfoot(this$static));
+            $appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , TR), ($clinit_128() , EMPTY_ATTRIBUTES));
+            this$static.mode = 11;
+            continue;
+          case 6:
+          case 7:
+          case 8:
+          case 39:
+            eltPos = $findLastInTableScopeOrRootTbodyTheadTfoot(this$static);
+            if (eltPos == 0) {
+              break starttagloop;
+            }
+             else {
+              $clearStackBackTo(this$static, eltPos);
+              $pop(this$static);
+              this$static.mode = 7;
+              continue;
+            }
+
+        }
+
+      case 11:
+        switch (group) {
+          case 40:
+            $clearStackBackTo(this$static, $findLastOrRoot_0(this$static, 37));
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            this$static.mode = 12;
+            $append_3(this$static, null);
+            attributes = null;
+            break starttagloop;
+          case 6:
+          case 7:
+          case 8:
+          case 39:
+          case 37:
+            eltPos = $findLastOrRoot_0(this$static, 37);
+            if (eltPos == 0) {
+              break starttagloop;
+            }
+
+            $clearStackBackTo(this$static, eltPos);
+            $pop(this$static);
+            this$static.mode = 10;
+            continue;
+        }
+
+      case 7:
+        intableloop: for (;;) {
+          switch (group) {
+            case 6:
+              $clearStackBackTo(this$static, $findLastOrRoot_0(this$static, 34));
+              $append_3(this$static, null);
+              $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+              this$static.mode = 8;
+              attributes = null;
+              break starttagloop;
+            case 8:
+              $clearStackBackTo(this$static, $findLastOrRoot_0(this$static, 34));
+              $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+              this$static.mode = 9;
+              attributes = null;
+              break starttagloop;
+            case 7:
+              $clearStackBackTo(this$static, $findLastOrRoot_0(this$static, 34));
+              $appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , COLGROUP), ($clinit_128() , EMPTY_ATTRIBUTES));
+              this$static.mode = 9;
+              continue starttagloop;
+            case 39:
+              $clearStackBackTo(this$static, $findLastOrRoot_0(this$static, 34));
+              $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+              this$static.mode = 10;
+              attributes = null;
+              break starttagloop;
+            case 37:
+            case 40:
+              $clearStackBackTo(this$static, $findLastOrRoot_0(this$static, 34));
+              $appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , TBODY), ($clinit_128() , EMPTY_ATTRIBUTES));
+              this$static.mode = 10;
+              continue starttagloop;
+            case 34:
+              eltPos = $findLastInTableScope(this$static, name_0);
+              if (eltPos == 2147483647) {
+                break starttagloop;
+              }
+
+              $generateImpliedEndTags(this$static);
+              while (this$static.currentPtr >= eltPos) {
+                $pop(this$static);
+              }
+
+              $resetTheInsertionMode(this$static);
+              continue starttagloop;
+            case 31:
+              $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+              this$static.originalMode = this$static.mode;
+              this$static.mode = 20;
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 2, elementName);
+              attributes = null;
+              break starttagloop;
+            case 33:
+              $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+              this$static.originalMode = this$static.mode;
+              this$static.mode = 20;
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 3, elementName);
+              attributes = null;
+              break starttagloop;
+            case 13:
+              if (!lowerCaseLiteralEqualsIgnoreAsciiCaseString('hidden', $getValue_1(attributes, ($clinit_124() , TYPE_1)))) {
+                break intableloop;
+              }
+
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              elt_10 = $createElement_0(this$static, 'http://www.w3.org/1999/xhtml', name_0, attributes);
+              current_3 = this$static.stack_0[this$static.currentPtr];
+              $appendElement(this$static, elt_10, current_3.node);
+              $elementPopped(this$static, 'http://www.w3.org/1999/xhtml', name_0, elt_10);
+              selfClosing = false;
+              attributes = null;
+              break starttagloop;
+            case 9:
+              if (this$static.formPointer) {
+                break starttagloop;
+              }
+               else {
+                $processNonNcNames(attributes, this$static, this$static.namePolicy);
+                elt_11 = $createElement(this$static, 'http://www.w3.org/1999/xhtml', 'form', attributes);
+                this$static.formPointer = elt_11;
+                current_4 = this$static.stack_0[this$static.currentPtr];
+                $appendElement(this$static, elt_11, current_4.node);
+                $elementPopped(this$static, 'http://www.w3.org/1999/xhtml', 'form', elt_11);
+                attributes = null;
+                break starttagloop;
+              }
+
+            default:break intableloop;
+          }
+        }
+
+      case 8:
+        switch (group) {
+          case 6:
+          case 7:
+          case 8:
+          case 39:
+          case 37:
+          case 40:
+            eltPos = $findLastInTableScope(this$static, 'caption');
+            if (eltPos == 2147483647) {
+              break starttagloop;
+            }
+
+            $generateImpliedEndTags(this$static);
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
+            this$static.mode = 7;
+            continue;
+        }
+
+      case 12:
+        switch (group) {
+          case 6:
+          case 7:
+          case 8:
+          case 39:
+          case 37:
+          case 40:
+            eltPos = $findLastInTableScopeTdTh(this$static);
+            if (eltPos == 2147483647) {
+              break starttagloop;
+            }
+             else {
+              $closeTheCell(this$static, eltPos);
+              continue;
+            }
+
+        }
+
+      case 21:
+        switch (group) {
+          case 11:
+            if (this$static.mode == 21) {
+              if (this$static.currentPtr == 0 || (this$static.stack_0[1].flags & 127) != 3) {
+                break starttagloop;
+              }
+               else {
+                $detachFromParent(this$static, this$static.stack_0[1].node);
+                while (this$static.currentPtr > 0) {
+                  $pop(this$static);
+                }
+                $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+                this$static.mode = 16;
+                attributes = null;
+                break starttagloop;
+              }
+            }
+             else {
+              break starttagloop;
+            }
+
+          case 44:
+          case 15:
+          case 41:
+          case 5:
+          case 43:
+          case 63:
+          case 34:
+          case 49:
+          case 4:
+          case 48:
+          case 13:
+          case 65:
+          case 22:
+          case 35:
+          case 38:
+          case 47:
+          case 32:
+            if (this$static.mode == 21 && !(group == 13 && lowerCaseLiteralEqualsIgnoreAsciiCaseString('hidden', $getValue_1(attributes, ($clinit_124() , TYPE_1))))) {
+              this$static.framesetOk = false;
+              this$static.mode = 6;
+            }
+
+        }
+
+      case 6:
+        inbodyloop: for (;;) {
+          switch (group) {
+            case 23:
+              if (!this$static.fragment) {
+                $processNonNcNames(attributes, this$static, this$static.namePolicy);
+                $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+                attributes = null;
+              }
+
+              break starttagloop;
+            case 2:
+            case 16:
+            case 18:
+            case 33:
+            case 31:
+            case 36:
+            case 54:
+              break inbodyloop;
+            case 3:
+              if (this$static.currentPtr == 0 || (this$static.stack_0[1].flags & 127) != 3) {
+                break starttagloop;
+              }
+
+              this$static.framesetOk = false;
+              this$static.mode == 21 && (this$static.mode = 6);
+              $addAttributesToBody(this$static, attributes) && (attributes = null);
+              break starttagloop;
+            case 29:
+            case 50:
+            case 46:
+            case 51:
+              $implicitlyCloseP(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 42:
+              $implicitlyCloseP(this$static);
+              (this$static.stack_0[this$static.currentPtr].flags & 127) == 42 && $pop(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 61:
+              $implicitlyCloseP(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster_0(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 44:
+              $implicitlyCloseP(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              this$static.needToDropLF = true;
+              attributes = null;
+              break starttagloop;
+            case 9:
+              if (this$static.formPointer) {
+                break starttagloop;
+              }
+               else {
+                $implicitlyCloseP(this$static);
+                $appendToCurrentNodeAndPushFormElementMayFoster(this$static, attributes);
+                attributes = null;
+                break starttagloop;
+              }
+
+            case 15:
+            case 41:
+              eltPos = this$static.currentPtr;
+              for (;;) {
+                node = this$static.stack_0[eltPos];
+                if ((node.flags & 127) == group) {
+                  $generateImpliedEndTagsExceptFor(this$static, node.name_0);
+                  while (this$static.currentPtr >= eltPos) {
+                    $pop(this$static);
+                  }
+                  break;
+                }
+                 else if ((node.flags & 134217728) != 0 || (node.flags & 536870912) != 0 && node.name_0 != 'p' && node.name_0 != 'address' && node.name_0 != 'div') {
+                  break;
+                }
+                --eltPos;
+              }
+
+              $implicitlyCloseP(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 30:
+              $implicitlyCloseP(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 8, elementName);
+              attributes = null;
+              break starttagloop;
+            case 1:
+              activeAPos = $findInListOfActiveFormattingElementsContainsBetweenEndAndLastMarker(this$static, 'a');
+              if (activeAPos != -1) {
+                activeA = this$static.listOfActiveFormattingElements[activeAPos];
+                ++activeA.refcount;
+                $adoptionAgencyEndTag(this$static, 'a');
+                $removeFromStack_0(this$static, activeA);
+                activeAPos = $findInListOfActiveFormattingElements(this$static, activeA);
+                activeAPos != -1 && $removeFromListOfActiveFormattingElements(this$static, activeAPos);
+                --activeA.refcount;
+              }
+
+              $reconstructTheActiveFormattingElements(this$static);
+              $appendToCurrentNodeAndPushFormattingElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 45:
+            case 64:
+              $reconstructTheActiveFormattingElements(this$static);
+              $maybeForgetEarlierDuplicateFormattingElement(this$static, elementName.name_0, attributes);
+              $appendToCurrentNodeAndPushFormattingElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 24:
+              $reconstructTheActiveFormattingElements(this$static);
+              2147483647 != $findLastInScope(this$static, 'nobr') && $adoptionAgencyEndTag(this$static, 'nobr');
+              $appendToCurrentNodeAndPushFormattingElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 5:
+              eltPos = $findLastInScope(this$static, name_0);
+              if (eltPos != 2147483647) {
+                $generateImpliedEndTags(this$static);
+                while (this$static.currentPtr >= eltPos) {
+                  $pop(this$static);
+                }
+                continue starttagloop;
+              }
+               else {
+                $reconstructTheActiveFormattingElements(this$static);
+                $appendToCurrentNodeAndPushElementMayFoster_0(this$static, elementName, attributes);
+                attributes = null;
+                break starttagloop;
+              }
+
+            case 63:
+              $reconstructTheActiveFormattingElements(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster_0(this$static, elementName, attributes);
+              $append_3(this$static, null);
+              attributes = null;
+              break starttagloop;
+            case 43:
+              $reconstructTheActiveFormattingElements(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              $append_3(this$static, null);
+              attributes = null;
+              break starttagloop;
+            case 34:
+              !this$static.quirks && $implicitlyCloseP(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              this$static.mode = 7;
+              attributes = null;
+              break starttagloop;
+            case 4:
+            case 48:
+            case 49:
+              $reconstructTheActiveFormattingElements(this$static);
+            case 55:
+              $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+              selfClosing = false;
+              attributes = null;
+              break starttagloop;
+            case 22:
+              $implicitlyCloseP(this$static);
+              $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+              selfClosing = false;
+              attributes = null;
+              break starttagloop;
+            case 12:
+              elementName = ($clinit_125() , IMG);
+              continue starttagloop;
+            case 65:
+            case 13:
+              $reconstructTheActiveFormattingElements(this$static);
+              $appendVoidElementToCurrentMayFoster(this$static, name_0, attributes);
+              selfClosing = false;
+              attributes = null;
+              break starttagloop;
+            case 14:
+              if (this$static.formPointer) {
+                break starttagloop;
+              }
+
+              $implicitlyCloseP(this$static);
+              formAttrs = $HtmlAttributes(new HtmlAttributes, 0);
+              actionIndex = $getIndex(attributes, ($clinit_124() , ACTION));
+              actionIndex > -1 && $addAttribute(formAttrs, ACTION, $getValue_0(attributes, actionIndex), ($clinit_115() , ALLOW));
+              $appendToCurrentNodeAndPushFormElementMayFoster(this$static, formAttrs);
+              $appendVoidElementToCurrentMayFoster_0(this$static, ($clinit_125() , HR), ($clinit_128() , EMPTY_ATTRIBUTES));
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, LABEL_0, EMPTY_ATTRIBUTES);
+              promptIndex = $getIndex(attributes, PROMPT);
+              if (promptIndex > -1) {
+                prompt_0 = $toCharArray($getValue_0(attributes, promptIndex));
+                $appendCharacters(this$static, this$static.stack_0[this$static.currentPtr].node, valueOf_0(prompt_0, 0, prompt_0.length));
+              }
+               else {
+                $appendCharacters(this$static, this$static.stack_0[this$static.currentPtr].node, 'This is a searchable index. Enter search keywords: ');
+              }
+
+              inputAttributes = $HtmlAttributes(new HtmlAttributes, 0);
+              $addAttribute(inputAttributes, NAME, 'isindex', ($clinit_115() , ALLOW));
+              for (i = 0; i < attributes.length_0; ++i) {
+                attributeQName = $getAttributeName(attributes, i);
+                NAME == attributeQName || PROMPT == attributeQName || ACTION != attributeQName && $addAttribute(inputAttributes, attributeQName, $getValue_0(attributes, i), ALLOW);
+              }
+
+              $clearWithoutReleasingContents(attributes);
+              $appendVoidElementToCurrentMayFoster(this$static, 'input', inputAttributes);
+              $pop(this$static);
+              $appendVoidElementToCurrentMayFoster_0(this$static, HR, EMPTY_ATTRIBUTES);
+              $pop(this$static);
+              selfClosing = false;
+              break starttagloop;
+            case 35:
+              $appendToCurrentNodeAndPushElementMayFoster_0(this$static, elementName, attributes);
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 1, elementName);
+              this$static.originalMode = this$static.mode;
+              this$static.mode = 20;
+              this$static.needToDropLF = true;
+              attributes = null;
+              break starttagloop;
+            case 38:
+              $implicitlyCloseP(this$static);
+              $reconstructTheActiveFormattingElements(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              this$static.originalMode = this$static.mode;
+              this$static.mode = 20;
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 3, elementName);
+              attributes = null;
+              break starttagloop;
+            case 26:
+              {
+                $reconstructTheActiveFormattingElements(this$static);
+                $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+                attributes = null;
+                break starttagloop;
+              }
+
+            case 25:
+            case 47:
+            case 60:
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              this$static.originalMode = this$static.mode;
+              this$static.mode = 20;
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 3, elementName);
+              attributes = null;
+              break starttagloop;
+            case 32:
+              $reconstructTheActiveFormattingElements(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster_0(this$static, elementName, attributes);
+              switch (this$static.mode) {
+                case 7:
+                case 8:
+                case 9:
+                case 10:
+                case 11:
+                case 12:
+                  this$static.mode = 14;
+                  break;
+                default:this$static.mode = 13;
+              }
+
+              attributes = null;
+              break starttagloop;
+            case 27:
+            case 28:
+              'option' == this$static.stack_0[this$static.currentPtr].name_0 && $pop(this$static);
+              $reconstructTheActiveFormattingElements(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 53:
+              eltPos = $findLastInScope(this$static, 'ruby');
+              eltPos != 2147483647 && $generateImpliedEndTags(this$static);
+              if (eltPos != this$static.currentPtr) {
+                while (this$static.currentPtr > eltPos) {
+                  $pop(this$static);
+                }
+              }
+
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            case 17:
+              $reconstructTheActiveFormattingElements(this$static);
+              attributes.mode = 1;
+              if (selfClosing) {
+                $appendVoidElementToCurrentMayFosterMathML(this$static, elementName, attributes);
+                selfClosing = false;
+              }
+               else {
+                $appendToCurrentNodeAndPushElementMayFosterMathML(this$static, elementName, attributes);
+              }
+
+              attributes = null;
+              break starttagloop;
+            case 19:
+              $reconstructTheActiveFormattingElements(this$static);
+              attributes.mode = 2;
+              if (selfClosing) {
+                $appendVoidElementToCurrentMayFosterSVG(this$static, elementName, attributes);
+                selfClosing = false;
+              }
+               else {
+                $appendToCurrentNodeAndPushElementMayFosterSVG(this$static, elementName, attributes);
+              }
+
+              attributes = null;
+              break starttagloop;
+            case 6:
+            case 7:
+            case 8:
+            case 39:
+            case 37:
+            case 40:
+            case 10:
+            case 11:
+            case 20:
+              break starttagloop;
+            case 62:
+              $reconstructTheActiveFormattingElements(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster_0(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+            default:$reconstructTheActiveFormattingElements(this$static);
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              attributes = null;
+              break starttagloop;
+          }
+        }
+
+      case 3:
+        inheadloop: for (;;) {
+          switch (group) {
+            case 23:
+              if (!this$static.fragment) {
+                $processNonNcNames(attributes, this$static, this$static.namePolicy);
+                $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+                attributes = null;
+              }
+
+              break starttagloop;
+            case 2:
+            case 54:
+              $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+              selfClosing = false;
+              attributes = null;
+              break starttagloop;
+            case 18:
+            case 16:
+              break inheadloop;
+            case 36:
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              this$static.originalMode = this$static.mode;
+              this$static.mode = 20;
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 1, elementName);
+              attributes = null;
+              break starttagloop;
+            case 26:
+              {
+                $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+                this$static.mode = 4;
+              }
+
+              attributes = null;
+              break starttagloop;
+            case 31:
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              this$static.originalMode = this$static.mode;
+              this$static.mode = 20;
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 2, elementName);
+              attributes = null;
+              break starttagloop;
+            case 33:
+            case 25:
+              $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+              this$static.originalMode = this$static.mode;
+              this$static.mode = 20;
+              $setStateAndEndTagExpectation_0(this$static.tokenizer, 3, elementName);
+              attributes = null;
+              break starttagloop;
+            case 20:
+              break starttagloop;
+            default:$pop(this$static);
+              this$static.mode = 5;
+              continue starttagloop;
+          }
+        }
+
+      case 4:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          case 16:
+            $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+            selfClosing = false;
+            attributes = null;
+            break starttagloop;
+          case 18:
+            $checkMetaCharset(attributes);
+            $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+            selfClosing = false;
+            attributes = null;
+            break starttagloop;
+          case 33:
+          case 25:
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            this$static.originalMode = this$static.mode;
+            this$static.mode = 20;
+            $setStateAndEndTagExpectation_0(this$static.tokenizer, 3, elementName);
+            attributes = null;
+            break starttagloop;
+          case 20:
+            break starttagloop;
+          case 26:
+            break starttagloop;
+          default:$pop(this$static);
+            this$static.mode = 3;
+            continue;
+        }
+
+      case 9:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          case 7:
+            $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+            selfClosing = false;
+            attributes = null;
+            break starttagloop;
+          default:if (this$static.currentPtr == 0) {
+              break starttagloop;
+            }
+
+            $pop(this$static);
+            this$static.mode = 7;
+            continue;
+        }
+
+      case 14:
+        switch (group) {
+          case 6:
+          case 39:
+          case 37:
+          case 40:
+          case 34:
+            eltPos = $findLastInTableScope(this$static, 'select');
+            if (eltPos == 2147483647) {
+              break starttagloop;
+            }
+
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            $resetTheInsertionMode(this$static);
+            continue;
+        }
+
+      case 13:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          case 28:
+            'option' == this$static.stack_0[this$static.currentPtr].name_0 && $pop(this$static);
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            attributes = null;
+            break starttagloop;
+          case 27:
+            'option' == this$static.stack_0[this$static.currentPtr].name_0 && $pop(this$static);
+            'optgroup' == this$static.stack_0[this$static.currentPtr].name_0 && $pop(this$static);
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            attributes = null;
+            break starttagloop;
+          case 32:
+            eltPos = $findLastInTableScope(this$static, name_0);
+            if (eltPos == 2147483647) {
+              break starttagloop;
+            }
+             else {
+              while (this$static.currentPtr >= eltPos) {
+                $pop(this$static);
+              }
+              $resetTheInsertionMode(this$static);
+              break starttagloop;
+            }
+
+          case 13:
+          case 35:
+          case 65:
+            eltPos = $findLastInTableScope(this$static, 'select');
+            if (eltPos == 2147483647) {
+              break starttagloop;
+            }
+
+            while (this$static.currentPtr >= eltPos) {
+              $pop(this$static);
+            }
+
+            $resetTheInsertionMode(this$static);
+            continue;
+          case 31:
+            $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+            this$static.originalMode = this$static.mode;
+            this$static.mode = 20;
+            $setStateAndEndTagExpectation_0(this$static.tokenizer, 2, elementName);
+            attributes = null;
+            break starttagloop;
+          default:break starttagloop;
+        }
+
+      case 15:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          default:this$static.mode = this$static.framesetOk?21:6;
+            continue;
+        }
+
+      case 16:
+        switch (group) {
+          case 11:
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            attributes = null;
+            break starttagloop;
+          case 10:
+            $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+            selfClosing = false;
+            attributes = null;
+            break starttagloop;
+        }
+
+      case 17:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          case 25:
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            this$static.originalMode = this$static.mode;
+            this$static.mode = 20;
+            $setStateAndEndTagExpectation_0(this$static.tokenizer, 3, elementName);
+            attributes = null;
+            break starttagloop;
+          default:break starttagloop;
+        }
+
+      case 0:
+        $documentModeInternal(this$static, ($clinit_113() , QUIRKS_MODE));
+        this$static.mode = 1;
+        continue;
+      case 1:
+        switch (group) {
+          case 23:
+            attributes == ($clinit_128() , EMPTY_ATTRIBUTES)?$appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer)):$appendHtmlElementToDocumentAndPush(this$static, attributes);
+            this$static.mode = 2;
+            attributes = null;
+            break starttagloop;
+          default:$appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
+            this$static.mode = 2;
+            continue;
+        }
+
+      case 2:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          case 20:
+            $appendToCurrentNodeAndPushHeadElement(this$static, attributes);
+            this$static.mode = 3;
+            attributes = null;
+            break starttagloop;
+          default:$appendToCurrentNodeAndPushHeadElement(this$static, ($clinit_128() , EMPTY_ATTRIBUTES));
+            this$static.mode = 3;
+            continue;
+        }
+
+      case 5:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          case 3:
+            attributes.length_0 == 0?($appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , BODY), $emptyAttributes(this$static.tokenizer)) , undefined):$appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , BODY), attributes);
+            this$static.framesetOk = false;
+            this$static.mode = 6;
+            attributes = null;
+            break starttagloop;
+          case 11:
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            this$static.mode = 16;
+            attributes = null;
+            break starttagloop;
+          case 2:
+            $silentPush(this$static, $StackNode_0(new StackNode, ($clinit_125() , HEAD), this$static.headPointer));
+            $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+            selfClosing = false;
+            $pop(this$static);
+            attributes = null;
+            break starttagloop;
+          case 16:
+            $silentPush(this$static, $StackNode_0(new StackNode, ($clinit_125() , HEAD), this$static.headPointer));
+            $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+            selfClosing = false;
+            $pop(this$static);
+            attributes = null;
+            break starttagloop;
+          case 18:
+            $checkMetaCharset(attributes);
+            $silentPush(this$static, $StackNode_0(new StackNode, ($clinit_125() , HEAD), this$static.headPointer));
+            $appendVoidElementToCurrentMayFoster_0(this$static, elementName, attributes);
+            selfClosing = false;
+            $pop(this$static);
+            attributes = null;
+            break starttagloop;
+          case 31:
+            $silentPush(this$static, $StackNode_0(new StackNode, ($clinit_125() , HEAD), this$static.headPointer));
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            this$static.originalMode = this$static.mode;
+            this$static.mode = 20;
+            $setStateAndEndTagExpectation_0(this$static.tokenizer, 2, elementName);
+            attributes = null;
+            break starttagloop;
+          case 33:
+          case 25:
+            $silentPush(this$static, $StackNode_0(new StackNode, ($clinit_125() , HEAD), this$static.headPointer));
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            this$static.originalMode = this$static.mode;
+            this$static.mode = 20;
+            $setStateAndEndTagExpectation_0(this$static.tokenizer, 3, elementName);
+            attributes = null;
+            break starttagloop;
+          case 36:
+            $silentPush(this$static, $StackNode_0(new StackNode, ($clinit_125() , HEAD), this$static.headPointer));
+            $appendToCurrentNodeAndPushElement(this$static, elementName, attributes);
+            this$static.originalMode = this$static.mode;
+            this$static.mode = 20;
+            $setStateAndEndTagExpectation_0(this$static.tokenizer, 1, elementName);
+            attributes = null;
+            break starttagloop;
+          case 20:
+            break starttagloop;
+          default:$appendToCurrentNodeAndPushElement(this$static, ($clinit_125() , BODY), $emptyAttributes(this$static.tokenizer));
+            this$static.mode = 21;
+            continue;
+        }
+
+      case 18:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          default:this$static.mode = this$static.framesetOk?21:6;
+            continue;
+        }
+
+      case 19:
+        switch (group) {
+          case 23:
+            if (!this$static.fragment) {
+              $processNonNcNames(attributes, this$static, this$static.namePolicy);
+              $addAttributesToElement(this$static, this$static.stack_0[0].node, attributes);
+              attributes = null;
+            }
+
+            break starttagloop;
+          case 25:
+            $appendToCurrentNodeAndPushElementMayFoster(this$static, elementName, attributes);
+            this$static.originalMode = this$static.mode;
+            this$static.mode = 20;
+            $setStateAndEndTagExpectation_0(this$static.tokenizer, 2, elementName);
+            attributes = null;
+            break starttagloop;
+          default:break starttagloop;
+        }
+
+      case 20:
+        break starttagloop;
+    }
+  }
+  attributes != ($clinit_128() , EMPTY_ATTRIBUTES);
+}
+
+function $startTokenization(this$static, self_0){
+  var elt, node;
+  this$static.tokenizer = self_0;
+  this$static.stack_0 = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 61, 15, 64, 0);
+  this$static.listOfActiveFormattingElements = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 61, 15, 64, 0);
+  this$static.needToDropLF = false;
+  this$static.originalMode = 0;
+  this$static.currentPtr = -1;
+  this$static.listPtr = -1;
+  this$static.formPointer = null;
+  this$static.headPointer = null;
+  this$static.html4 = false;
+  $clearImpl(this$static.idLocations);
+  this$static.wantingComments = this$static.wantingComments;
+  this$static.script = null;
+  this$static.placeholder = null;
+  this$static.readyToRun = false;
+  this$static.charBufferLen = 0;
+  this$static.charBuffer = initDim(_3C_classLit, 46, -1, 1024, 1);
+  this$static.framesetOk = true;
+  if (this$static.fragment) {
+    elt = $createHtmlElementSetAsRoot(this$static, $emptyAttributes(this$static.tokenizer));
+    node = $StackNode_0(new StackNode, ($clinit_125() , HTML_0), elt);
+    ++this$static.currentPtr;
+    this$static.stack_0[this$static.currentPtr] = node;
+    $resetTheInsertionMode(this$static);
+    'title' == this$static.contextName || 'textarea' == this$static.contextName?$setStateAndEndTagExpectation(this$static.tokenizer, 1):'style' == this$static.contextName || 'xmp' == this$static.contextName || 'iframe' == this$static.contextName || 'noembed' == this$static.contextName || 'noframes' == this$static.contextName?$setStateAndEndTagExpectation(this$static.tokenizer, 3):'plaintext' == this$static.contextName?$setStateAndEndTagExpectation(this$static.tokenizer, 8):'script' == this$static.contextName?$setStateAndEndTagExpectation(this$static.tokenizer, 2):$setStateAndEndTagExpectation(this$static.tokenizer, 0);
+    this$static.contextName = null;
+  }
+   else {
+    this$static.mode = 0;
+  }
+}
+
+function $zeroOriginatingReplacementCharacter(this$static){
+  var stackNode;
+  if (this$static.mode == 20) {
+    $accumulateCharacters(this$static, REPLACEMENT_CHARACTER, 0, 1);
+    return;
+  }
+  if (this$static.currentPtr >= 0) {
+    stackNode = this$static.stack_0[this$static.currentPtr];
+    if (stackNode.ns == 'http://www.w3.org/1999/xhtml') {
+      return;
+    }
+    if ((stackNode.flags & 16777216) != 0) {
+      return;
+    }
+    if (stackNode.ns == 'http://www.w3.org/1998/Math/MathML' && (stackNode.flags & 127) == 57) {
+      return;
+    }
+    $accumulateCharacters(this$static, REPLACEMENT_CHARACTER, 0, 1);
+  }
+}
+
+function extractCharsetFromContent(attributeValue){
+  var buffer, c, charset, charsetState, end, i, start;
+  charsetState = 0;
+  start = -1;
+  end = -1;
+  buffer = $toCharArray(attributeValue);
+  charsetloop: for (i = 0; i < buffer.length; ++i) {
+    c = buffer[i];
+    switch (charsetState) {
+      case 0:
+        switch (c) {
+          case 99:
+          case 67:
+            charsetState = 1;
+            continue;
+          default:continue;
+        }
+
+      case 1:
+        switch (c) {
+          case 104:
+          case 72:
+            charsetState = 2;
+            continue;
+          default:charsetState = 0;
+            continue;
+        }
+
+      case 2:
+        switch (c) {
+          case 97:
+          case 65:
+            charsetState = 3;
+            continue;
+          default:charsetState = 0;
+            continue;
+        }
+
+      case 3:
+        switch (c) {
+          case 114:
+          case 82:
+            charsetState = 4;
+            continue;
+          default:charsetState = 0;
+            continue;
+        }
+
+      case 4:
+        switch (c) {
+          case 115:
+          case 83:
+            charsetState = 5;
+            continue;
+          default:charsetState = 0;
+            continue;
+        }
+
+      case 5:
+        switch (c) {
+          case 101:
+          case 69:
+            charsetState = 6;
+            continue;
+          default:charsetState = 0;
+            continue;
+        }
+
+      case 6:
+        switch (c) {
+          case 116:
+          case 84:
+            charsetState = 7;
+            continue;
+          default:charsetState = 0;
+            continue;
+        }
+
+      case 7:
+        switch (c) {
+          case 9:
+          case 10:
+          case 12:
+          case 13:
+          case 32:
+            continue;
+          case 61:
+            charsetState = 8;
+            continue;
+          default:return null;
+        }
+
+      case 8:
+        switch (c) {
+          case 9:
+          case 10:
+          case 12:
+          case 13:
+          case 32:
+            continue;
+          case 39:
+            start = i + 1;
+            charsetState = 9;
+            continue;
+          case 34:
+            start = i + 1;
+            charsetState = 10;
+            continue;
+          default:start = i;
+            charsetState = 11;
+            continue;
+        }
+
+      case 9:
+        switch (c) {
+          case 39:
+            end = i;
+            break charsetloop;
+          default:continue;
+        }
+
+      case 10:
+        switch (c) {
+          case 34:
+            end = i;
+            break charsetloop;
+          default:continue;
+        }
+
+      case 11:
+        switch (c) {
+          case 9:
+          case 10:
+          case 12:
+          case 13:
+          case 32:
+          case 59:
+            end = i;
+            break charsetloop;
+          default:continue;
+        }
+
+    }
+  }
+  charset = null;
+  if (start != -1) {
+    end == -1 && (end = buffer.length);
+    charset = valueOf_0(buffer, start, end - start);
+  }
+  return charset;
+}
+
+function getClass_60(){
+  return Lnu_validator_htmlparser_impl_TreeBuilder_2_classLit;
+}
+
+function TreeBuilder(){
+}
+
+_ = TreeBuilder.prototype = new Object_0;
+_.getClass$ = getClass_60;
+_.typeId$ = 0;
+_.charBuffer = null;
+_.charBufferLen = 0;
+_.contextName = null;
+_.contextNamespace = null;
+_.currentPtr = -1;
+_.formPointer = null;
+_.fragment = false;
+_.framesetOk = true;
+_.headPointer = null;
+_.html4 = false;
+_.listOfActiveFormattingElements = null;
+_.listPtr = -1;
+_.mode = 0;
+_.needToDropLF = false;
+_.originalMode = 0;
+_.quirks = false;
+_.stack_0 = null;
+_.tokenizer = null;
+_.wantingComments = false;
+var HTML4_PUBLIC_IDS, QUIRKY_PUBLIC_IDS, REPLACEMENT_CHARACTER;
+function $clinit_117(){
+  $clinit_117 = nullMethod;
+  $clinit_116();
+}
+
+function $accumulateCharacters(this$static, buf, start, length_0){
+  var newBuf, newLen;
+  newLen = this$static.charBufferLen + length_0;
+  if (newLen > this$static.charBuffer.length) {
+    newBuf = initDim(_3C_classLit, 46, -1, newLen, 1);
+    arraycopy(this$static.charBuffer, 0, newBuf, 0, this$static.charBufferLen);
+    this$static.charBuffer = null;
+    this$static.charBuffer = newBuf;
+  }
+  arraycopy(buf, start, this$static.charBuffer, this$static.charBufferLen, length_0);
+  this$static.charBufferLen = newLen;
+}
+
+function $insertFosterParentedCharacters(this$static, buf, start, length_0, table, stackParent){
+  var end;
+  $insertFosterParentedCharacters_0(this$static, (end = start + length_0 , __checkBounds(buf.length, start, end) , __valueOf(buf, start, end)), table, stackParent);
+}
+
+function getClass_61(){
+  return Lnu_validator_htmlparser_impl_CoalescingTreeBuilder_2_classLit;
+}
+
+function CoalescingTreeBuilder(){
+}
+
+_ = CoalescingTreeBuilder.prototype = new TreeBuilder;
+_.getClass$ = getClass_61;
+_.typeId$ = 0;
+function $clinit_118(){
+  $clinit_118 = nullMethod;
+  $clinit_117();
+}
+
+function $BrowserTreeBuilder(this$static, document_0){
+  $clinit_118();
+  this$static.doctypeExpectation = ($clinit_112() , HTML);
+  this$static.namePolicy = ($clinit_115() , ALTER_INFOSET);
+  this$static.idLocations = $HashMap(new HashMap);
+  this$static.fragment = false;
+  this$static.scriptStack = $LinkedList(new LinkedList);
+  this$static.document_0 = document_0;
+  return this$static;
+}
+
+function $addAttributesToElement(this$static, element, attributes){
+  var $e0, e, i, localName, uri;
+  try {
+    for (i = 0; i < attributes.length_0; ++i) {
+      localName = $getLocalName(attributes, i);
+      uri = $getURI(attributes, i);
+      !element.hasAttributeNS(uri, localName) && (element.setAttributeNS(uri, localName, $getValue_0(attributes, i)) , undefined);
+    }
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $appendCharacters(this$static, parent_0, text){
+  var $e0, e;
+  try {
+    parent_0 == this$static.placeholder && (this$static.script.appendChild(this$static.document_0.createTextNode(text)) , undefined);
+    parent_0.appendChild(this$static.document_0.createTextNode(text));
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $appendChildrenToNewParent(this$static, oldParent, newParent){
+  var $e0, e;
+  try {
+    while (oldParent.hasChildNodes()) {
+      newParent.appendChild(oldParent.firstChild);
+    }
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $appendComment(this$static, parent_0, comment){
+  var $e0, e;
+  try {
+    parent_0 == this$static.placeholder && (this$static.script.appendChild(this$static.document_0.createComment(comment)) , undefined);
+    parent_0.appendChild(this$static.document_0.createComment(comment));
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $appendCommentToDocument(this$static, comment){
+  var $e0, e;
+  try {
+    this$static.document_0.appendChild(this$static.document_0.createComment(comment));
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $appendElement(this$static, child, newParent){
+  var $e0, e;
+  try {
+    newParent == this$static.placeholder && (this$static.script.appendChild(child.cloneNode(true)) , undefined);
+    newParent.appendChild(child);
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $createElement(this$static, ns, name_0, attributes){
+  var $e0, e, i, rv;
+  try {
+    rv = this$static.document_0.createElementNS(ns, name_0);
+    for (i = 0; i < attributes.length_0; ++i) {
+      rv.setAttributeNS($getURI(attributes, i), $getLocalName(attributes, i), $getValue_0(attributes, i));
+    }
+    if ('script' == name_0) {
+      !!this$static.placeholder && $addLast(this$static.scriptStack, $BrowserTreeBuilder$ScriptHolder(new BrowserTreeBuilder$ScriptHolder, this$static.script, this$static.placeholder));
+      this$static.script = rv;
+      this$static.placeholder = this$static.document_0.createElementNS('http://n.validator.nu/placeholder/', 'script');
+      rv = this$static.placeholder;
+      for (i = 0; i < attributes.length_0; ++i) {
+        rv.setAttributeNS($getURI(attributes, i), $getLocalName(attributes, i), $getValue_0(attributes, i));
+      }
+    }
+    return rv;
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+      throw $RuntimeException(new RuntimeException, 'Unreachable');
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $createElement_0(this$static, ns, name_0, attributes){
+  var $e0, e, rv;
+  try {
+    rv = $createElement(this$static, ns, name_0, attributes);
+    return rv;
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+      return null;
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $createHtmlElementSetAsRoot(this$static, attributes){
+  var $e0, e, i, rv;
+  try {
+    rv = this$static.document_0.createElementNS('http://www.w3.org/1999/xhtml', 'html');
+    for (i = 0; i < attributes.length_0; ++i) {
+      rv.setAttributeNS($getURI(attributes, i), $getLocalName(attributes, i), $getValue_0(attributes, i));
+    }
+    this$static.document_0.appendChild(rv);
+    return rv;
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+      throw $RuntimeException(new RuntimeException, 'Unreachable');
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $detachFromParent(this$static, element){
+  var $e0, e, parent_0;
+  try {
+    parent_0 = element.parentNode;
+    !!parent_0 && (parent_0.removeChild(element) , undefined);
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $elementPopped(this$static, ns, name_0, node){
+  if (node == this$static.placeholder) {
+    this$static.readyToRun = true;
+    this$static.tokenizer.shouldSuspend = true;
+  }
+  __elementPopped__(ns, name_0, node);
+}
+
+function $getDocument(this$static){
+  var rv;
+  rv = this$static.document_0;
+  this$static.document_0 = null;
+  return rv;
+}
+
+function $insertFosterParentedCharacters_0(this$static, text, table, stackParent){
+  var $e0, child, e, parent_0;
+  try {
+    child = this$static.document_0.createTextNode(text);
+    parent_0 = table.parentNode;
+    !!parent_0 && parent_0.nodeType == 1?(parent_0.insertBefore(child, table) , undefined):(stackParent.appendChild(child) , undefined);
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $insertFosterParentedChild(this$static, child, table, stackParent){
+  var $e0, e, parent_0;
+  parent_0 = table.parentNode;
+  try {
+    !!parent_0 && parent_0.nodeType == 1?(parent_0.insertBefore(child, table) , undefined):(stackParent.appendChild(child) , undefined);
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 28)) {
+      e = $e0;
+      $fatal(this$static, e);
+    }
+     else
+      throw $e0;
+  }
+}
+
+function $maybeRunScript(this$static){
+  var scriptHolder;
+  if (this$static.readyToRun) {
+    this$static.readyToRun = false;
+    replace_0(this$static.placeholder, this$static.script);
+    if (this$static.scriptStack.size == 0) {
+      this$static.script = null;
+      this$static.placeholder = null;
+    }
+     else {
+      scriptHolder = dynamicCast($removeLast(this$static.scriptStack), 29);
+      this$static.script = scriptHolder.script;
+      this$static.placeholder = scriptHolder.placeholder;
+    }
+  }
+}
+
+function getClass_62(){
+  return Lnu_validator_htmlparser_gwt_BrowserTreeBuilder_2_classLit;
+}
+
+function replace_0(oldNode, newNode){
+  oldNode.parentNode.replaceChild(newNode, oldNode);
+  __elementPopped__('', newNode.nodeName, newNode);
+}
+
+function BrowserTreeBuilder(){
+}
+
+_ = BrowserTreeBuilder.prototype = new CoalescingTreeBuilder;
+_.getClass$ = getClass_62;
+_.typeId$ = 0;
+_.document_0 = null;
+_.placeholder = null;
+_.readyToRun = false;
+_.script = null;
+function $BrowserTreeBuilder$ScriptHolder(this$static, script, placeholder){
+  this$static.script = script;
+  this$static.placeholder = placeholder;
+  return this$static;
+}
+
+function getClass_63(){
+  return Lnu_validator_htmlparser_gwt_BrowserTreeBuilder$ScriptHolder_2_classLit;
+}
+
+function BrowserTreeBuilder$ScriptHolder(){
+}
+
+_ = BrowserTreeBuilder$ScriptHolder.prototype = new Object_0;
+_.getClass$ = getClass_63;
+_.typeId$ = 37;
+_.placeholder = null;
+_.script = null;
+function $HtmlParser(this$static, document_0){
+  this$static.documentWriteBuffer = $StringBuilder(new StringBuilder);
+  this$static.bufferStack = $LinkedList(new LinkedList);
+  this$static.domTreeBuilder = $BrowserTreeBuilder(new BrowserTreeBuilder, document_0);
+  this$static.tokenizer = $ErrorReportingTokenizer(new ErrorReportingTokenizer, this$static.domTreeBuilder);
+  this$static.domTreeBuilder.namePolicy = ($clinit_115() , ALTER_INFOSET);
+  this$static.tokenizer.commentPolicy = ALTER_INFOSET;
+  this$static.tokenizer.contentNonXmlCharPolicy = ALTER_INFOSET;
+  this$static.tokenizer.contentSpacePolicy = ALTER_INFOSET;
+  this$static.tokenizer.namePolicy = ALTER_INFOSET;
+  $setXmlnsPolicy(this$static.tokenizer, ALTER_INFOSET);
+  return this$static;
+}
+
+function $parse(this$static, source, useSetTimeouts, callback){
+  this$static.parseEndListener = callback;
+  $setFragmentContext(this$static.domTreeBuilder, null);
+  this$static.lastWasCR = false;
+  this$static.ending = false;
+  $setLength(this$static.documentWriteBuffer, 0);
+  this$static.streamLength = source.length;
+  this$static.stream = $UTF16Buffer(new UTF16Buffer, $toCharArray(source), 0, this$static.streamLength < 512?this$static.streamLength:512);
+  $clear(this$static.bufferStack);
+  $addLast(this$static.bufferStack, this$static.stream);
+  $setFragmentContext(this$static.domTreeBuilder, null);
+  $start_0(this$static.tokenizer);
+  $pump(this$static, useSetTimeouts);
+}
+
+function $pump(this$static, useSetTimeouts){
+  var $e0, timer;
+  if ($pumpcore(this$static)) {
+    return;
+  }
+  if (useSetTimeouts) {
+    timer = $HtmlParser$1(new HtmlParser$1, this$static);
+    $schedule(timer, 1);
+  }
+   else {
+    try {
+      while (!$pumpcore(this$static)) {
+      }
+    }
+     catch ($e0) {
+      $e0 = caught($e0);
+      if (instanceOf($e0, 30)) {
+        this$static.ending = true;
+      }
+       else
+        throw $e0;
+    }
+  }
+}
+
+function $pumpcore(this$static){
+  var buffer, docWriteLen, newBuf, newEnd;
+  if (this$static.ending) {
+    $end(this$static.tokenizer);
+    $getDocument(this$static.domTreeBuilder);
+    this$static.parseEndListener.callback();
+    return true;
+  }
+  docWriteLen = this$static.documentWriteBuffer.impl.string.length;
+  if (docWriteLen > 0) {
+    newBuf = initDim(_3C_classLit, 46, -1, docWriteLen, 1);
+    $getChars_0(this$static.documentWriteBuffer, 0, docWriteLen, newBuf, 0);
+    $addLast(this$static.bufferStack, $UTF16Buffer(new UTF16Buffer, newBuf, 0, docWriteLen));
+    $setLength(this$static.documentWriteBuffer, 0);
+  }
+  for (;;) {
+    buffer = dynamicCast($getLast(this$static.bufferStack), 31);
+    if (buffer.start >= buffer.end) {
+      if (buffer == this$static.stream) {
+        if (buffer.end == this$static.streamLength) {
+          $eof_0(this$static.tokenizer);
+          this$static.ending = true;
+          break;
+        }
+         else {
+          newEnd = buffer.start + 512;
+          buffer.end = newEnd < this$static.streamLength?newEnd:this$static.streamLength;
+          continue;
+        }
+      }
+       else {
+        $removeLast(this$static.bufferStack);
+        continue;
+      }
+    }
+    $adjust(buffer, this$static.lastWasCR);
+    this$static.lastWasCR = false;
+    if (buffer.start < buffer.end) {
+      this$static.lastWasCR = $tokenizeBuffer(this$static.tokenizer, buffer);
+      $maybeRunScript(this$static.domTreeBuilder);
+      break;
+    }
+     else {
+      continue;
+    }
+  }
+  return false;
+}
+
+function documentWrite(text){
+  var buffer;
+  buffer = $UTF16Buffer(new UTF16Buffer, $toCharArray(text), 0, text.length);
+  while (buffer.start < buffer.end) {
+    $adjust(buffer, this.lastWasCR);
+    this.lastWasCR = false;
+    if (buffer.start < buffer.end) {
+      this.lastWasCR = $tokenizeBuffer(this.tokenizer, buffer);
+      $maybeRunScript(this.domTreeBuilder);
+    }
+  }
+}
+
+function getClass_64(){
+  return Lnu_validator_htmlparser_gwt_HtmlParser_2_classLit;
+}
+
+function HtmlParser(){
+}
+
+_ = HtmlParser.prototype = new Object_0;
+_.documentWrite = documentWrite;
+_.getClass$ = getClass_64;
+_.typeId$ = 0;
+_.domTreeBuilder = null;
+_.ending = false;
+_.lastWasCR = false;
+_.parseEndListener = null;
+_.stream = null;
+_.streamLength = 0;
+_.tokenizer = null;
+function $clinit_121(){
+  $clinit_121 = nullMethod;
+  $clinit_47();
+}
+
+function $HtmlParser$1(this$static, this$0){
+  $clinit_121();
+  this$static.this$0 = this$0;
+  return this$static;
+}
+
+function $run(this$static){
+  var $e0;
+  try {
+    $pump(this$static.this$0, true);
+  }
+   catch ($e0) {
+    $e0 = caught($e0);
+    if (instanceOf($e0, 30)) {
+      this$static.this$0.ending = true;
+    }
+     else
+      throw $e0;
+  }
+}
+
+function getClass_65(){
+  return Lnu_validator_htmlparser_gwt_HtmlParser$1_2_classLit;
+}
+
+function HtmlParser$1(){
+}
+
+_ = HtmlParser$1.prototype = new Timer;
+_.getClass$ = getClass_65;
+_.typeId$ = 38;
+_.this$0 = null;
+function installDocWrite(doc, parser){
+  doc.write = function(){
+    if (arguments.length == 0) {
+      return;
+    }
+    var text = arguments[0];
+    for (var i = 1; i < arguments.length; i++) {
+      text += arguments[i];
+    }
+    parser.documentWrite(text);
+  }
+  ;
+  doc.writeln = function(){
+    if (arguments.length == 0) {
+      parser.documentWrite('\n');
+      return;
+    }
+    var text = arguments[0];
+    for (var i = 1; i < arguments.length; i++) {
+      text += arguments[i];
+    }
+    text += '\n';
+    parser.documentWrite(text);
+  }
+  ;
+}
+
+function parseHtmlDocument(source, document_0, useSetTimeouts, readyCallback, errorHandler){
+  var parser;
+  !readyCallback && (readyCallback = createFunction());
+  zapChildren(document_0);
+  parser = $HtmlParser(new HtmlParser, document_0);
+  installDocWrite(document_0, parser);
+  $parse(parser, source, useSetTimeouts, $ParseEndListener(new ParseEndListener, readyCallback));
+}
+
+function parseXmlDocument(source, document_0, useSetTimeouts, readyCallback, errorHandler){
+  var parser;
+  !readyCallback && (readyCallback = createFunction());
+  zapChildren(document_0);
+  parser = $HtmlParser(new HtmlParser, document_0);
+  parser.domTreeBuilder.wantingComments = !false;
+  parser.domTreeBuilder.namePolicy = ($clinit_115() , ALLOW);
+  parser.tokenizer.commentPolicy = ALLOW;
+  parser.tokenizer.contentNonXmlCharPolicy = ALLOW;
+  parser.tokenizer.contentSpacePolicy = ALLOW;
+  parser.tokenizer.namePolicy = ALLOW;
+  $setXmlnsPolicy(parser.tokenizer, ALLOW);
+  $parse(parser, source, useSetTimeouts, $ParseEndListener(new ParseEndListener, readyCallback));
+}
+
+function zapChildren(node){
+  while (node.hasChildNodes()) {
+    node.removeChild(node.lastChild);
+  }
+}
+
+function $ParseEndListener(this$static, callback){
+  this$static.callback = callback;
+  return this$static;
+}
+
+function getClass_66(){
+  return Lnu_validator_htmlparser_gwt_ParseEndListener_2_classLit;
+}
+
+function ParseEndListener(){
+}
+
+_ = ParseEndListener.prototype = new Object_0;
+_.getClass$ = getClass_66;
+_.typeId$ = 0;
+_.callback = null;
+function $clinit_124(){
+  var arr_471;
+  $clinit_124 = nullMethod;
+  ALL_NO_NS = initValues(_3Ljava_lang_String_2_classLit, 55, 1, ['', '', '', '']);
+  XMLNS_NS = initValues(_3Ljava_lang_String_2_classLit, 55, 1, ['', 'http://www.w3.org/2000/xmlns/', 'http://www.w3.org/2000/xmlns/', '']);
+  XML_NS = initValues(_3Ljava_lang_String_2_classLit, 55, 1, ['', 'http://www.w3.org/XML/1998/namespace', 'http://www.w3.org/XML/1998/namespace', '']);
+  XLINK_NS = initValues(_3Ljava_lang_String_2_classLit, 55, 1, ['', 'http://www.w3.org/1999/xlink', 'http://www.w3.org/1999/xlink', '']);
+  LANG_NS = initValues(_3Ljava_lang_String_2_classLit, 55, 1, ['', '', '', 'http://www.w3.org/XML/1998/namespace']);
+  ALL_NO_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 55, 1, [null, null, null, null]);
+  XMLNS_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 55, 1, [null, 'xmlns', 'xmlns', null]);
+  XLINK_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 55, 1, [null, 'xlink', 'xlink', null]);
+  XML_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 55, 1, [null, 'xml', 'xml', null]);
+  LANG_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 55, 1, [null, null, null, 'xml']);
+  ALL_NCNAME = initValues(_3Z_classLit, 45, -1, [true, true, true, true]);
+  ALL_NO_NCNAME = initValues(_3Z_classLit, 45, -1, [false, false, false, false]);
+  D = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('d'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  K = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('k'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  R = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('r'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  X = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('x'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  Y = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('y'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  Z = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('z'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('by'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('cx'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('cy'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('dx'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('dy'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  G2 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('g2'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  G1 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('g1'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fx'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fy'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  K4 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('k4'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  K2 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('k2'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  K3 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('k3'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  K1 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('k1'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ID = $AttributeName(new AttributeName, ALL_NO_NS, SAME_LOCAL('id'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  IN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('in'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  U2 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('u2'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  U1 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('u1'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rt'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rx'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ry'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TO = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('to'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  Y2 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('y2'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  Y1 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('y1'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  X1 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('x1'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  X2 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('x2'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ALT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('alt'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DIR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('dir'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DUR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('dur'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  END = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('end'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('for'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  IN2 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('in2'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MAX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('max'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MIN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('min'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LOW = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('low'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rel'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REV = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rev'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SRC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('src'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  AXIS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('axis'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ABBR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('abbr'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BBOX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('bbox'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CITE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('cite'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CODE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('code'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BIAS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('bias'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('cols'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLIP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('clip'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CHAR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('char'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BASE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('base'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  EDGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('edge'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DATA = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('data'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FILL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fill'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FROM = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('from'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FORM = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('form'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('face'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HIGH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('high'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HREF = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('href'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OPEN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('open'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ICON = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('icon'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  NAME = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('name'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MODE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('mode'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MASK = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('mask'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LINK = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('link'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LANG = $AttributeName_0(new AttributeName, LANG_NS, SAME_LOCAL('lang'), LANG_PREFIX, ALL_NCNAME, false);
+  LIST = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('list'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TYPE_1 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('type'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  WHEN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('when'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  WRAP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('wrap'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TEXT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('text'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PATH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('path'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ping'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REFX = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('refx', 'refX'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REFY = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('refy', 'refY'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('size'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SEED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('seed'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ROWS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rows'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SPAN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('span'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STEP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('step'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ROLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('role'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  XREF = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('xref'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ASYNC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('async'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ALINK = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('alink'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ALIGN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('align'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLOSE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('close'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('color'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLASS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('class'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLEAR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('clear'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BEGIN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('begin'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DEPTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('depth'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DEFER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('defer'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FENCE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fence'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FRAME = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('frame'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ISMAP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ismap'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONEND = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onend'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  INDEX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('index'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ORDER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('order'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OTHER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('other'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONCUT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('oncut'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  NARGS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('nargs'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MEDIA = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('media'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LABEL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('label'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LOCAL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('local'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  WIDTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('width'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TITLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('title'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VLINK = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('vlink'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VALUE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('value'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SLOPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('slope'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SHAPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('shape'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCOPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scope'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCALE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scale'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SPEED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('speed'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STYLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('style'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RULES = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rules'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STEMH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stemh'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STEMV = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stemv'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  START = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('start'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  XMLNS = $AttributeName_0(new AttributeName, XMLNS_NS, SAME_LOCAL('xmlns'), ALL_NO_PREFIX, initValues(_3Z_classLit, 45, -1, [false, false, false, false]), true);
+  ACCEPT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('accept'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ACCENT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('accent'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ASCENT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ascent'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ACTIVE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('active'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ALTIMG = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('altimg'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ACTION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('action'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BORDER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('border'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CURSOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('cursor'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COORDS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('coords'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FILTER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('filter'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FORMAT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('format'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HIDDEN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('hidden'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('hspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HEIGHT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('height'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOVE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmove'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONLOAD = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onload'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDRAG = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondrag'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ORIGIN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('origin'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONZOOM = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onzoom'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONHELP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onhelp'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONSTOP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onstop'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDROP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondrop'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBLUR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onblur'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OBJECT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('object'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OFFSET = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('offset'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ORIENT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('orient'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONCOPY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('oncopy'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  NOWRAP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('nowrap'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  NOHREF = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('nohref'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MACROS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('macros'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  METHOD = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('method'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LOWSRC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('lowsrc'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('lspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LQUOTE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('lquote'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  USEMAP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('usemap'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  WIDTHS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('widths'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TARGET = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('target'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VALUES = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('values'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VALIGN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('valign'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('vspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  POSTER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('poster'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  POINTS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('points'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PROMPT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('prompt'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCOPED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scoped'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STRING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('string'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCHEME = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scheme'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STROKE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stroke'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RADIUS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('radius'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RESULT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('result'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REPEAT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('repeat'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ROTATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rotate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RQUOTE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rquote'), ALL_NO_PREFIX, ALL_NCNAME, false);
+	$clinit_124_1();
+}
+function $clinit_124_1(){
+  $clinit_124_1 = nullMethod;
+  ALTTEXT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('alttext'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARCHIVE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('archive'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  AZIMUTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('azimuth'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLOSURE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('closure'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CHECKED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('checked'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLASSID = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('classid'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CHAROFF = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('charoff'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BGCOLOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('bgcolor'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLSPAN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('colspan'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CHARSET = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('charset'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COMPACT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('compact'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CONTENT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('content'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ENCTYPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('enctype'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DATASRC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('datasrc'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DATAFLD = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('datafld'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DECLARE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('declare'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DISPLAY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('display'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DIVISOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('divisor'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DEFAULT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('default'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DESCENT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('descent'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  KERNING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('kerning'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HANGING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('hanging'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HEADERS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('headers'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONPASTE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onpaste'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONCLICK = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onclick'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OPTIMUM = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('optimum'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEGIN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbegin'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONKEYUP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onkeyup'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONFOCUS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onfocus'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONERROR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onerror'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONINPUT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('oninput'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONABORT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onabort'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONSTART = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onstart'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONRESET = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onreset'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OPACITY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  NOSHADE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('noshade'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MINSIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('minsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MAXSIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('maxsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LOOPEND = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('loopend'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LARGEOP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('largeop'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  UNICODE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('unicode'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TARGETX = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('targetx', 'targetX'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TARGETY = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('targety', 'targetY'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VIEWBOX = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('viewbox', 'viewBox'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VERSION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('version'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PATTERN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('pattern'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PROFILE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('profile'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SPACING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('spacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RESTART = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('restart'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ROWSPAN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rowspan'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SANDBOX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('sandbox'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SUMMARY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('summary'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STANDBY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('standby'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REPLACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('replace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  AUTOPLAY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('autoplay'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ADDITIVE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('additive'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CALCMODE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('calcmode', 'calcMode'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CODETYPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('codetype'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CODEBASE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('codebase'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CONTROLS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('controls'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BEVELLED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('bevelled'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BASELINE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('baseline'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  EXPONENT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('exponent'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  EDGEMODE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('edgemode', 'edgeMode'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ENCODING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('encoding'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  GLYPHREF = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('glyphref', 'glyphRef'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DATETIME = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('datetime'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DISABLED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('disabled'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONTSIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fontsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  KEYTIMES = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('keytimes', 'keyTimes'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PANOSE_1 = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('panose-1'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HREFLANG = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('hreflang'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONRESIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onresize'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONCHANGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onchange'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBOUNCE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbounce'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONUNLOAD = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onunload'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONFINISH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onfinish'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONSCROLL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onscroll'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OPERATOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('operator'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OVERFLOW = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('overflow'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONSUBMIT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onsubmit'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONREPEAT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onrepeat'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONSELECT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onselect'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  NOTATION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('notation'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  NORESIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('noresize'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MANIFEST = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('manifest'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MATHSIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('mathsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MULTIPLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('multiple'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LONGDESC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('longdesc'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LANGUAGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('language'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TEMPLATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('template'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TABINDEX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('tabindex'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  READONLY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('readonly'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SELECTED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('selected'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ROWLINES = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rowlines'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SEAMLESS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('seamless'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ROWALIGN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rowalign'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STRETCHY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stretchy'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REQUIRED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('required'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  XML_BASE = $AttributeName_0(new AttributeName, XML_NS, COLONIFIED_LOCAL('xml:base', 'base'), XML_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  XML_LANG = $AttributeName_0(new AttributeName, XML_NS, COLONIFIED_LOCAL('xml:lang', 'lang'), XML_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  X_HEIGHT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('x-height'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_OWNS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-owns'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  AUTOFOCUS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('autofocus'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_SORT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-sort'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ACCESSKEY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('accesskey'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_BUSY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-busy'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_GRAB = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-grab'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  AMPLITUDE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('amplitude'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_LIVE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-live'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLIP_RULE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('clip-rule'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLIP_PATH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('clip-path'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  EQUALROWS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('equalrows'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ELEVATION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('elevation'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DIRECTION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('direction'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DRAGGABLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('draggable'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FILTERRES = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('filterres', 'filterRes'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FILL_RULE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fill-rule'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONTSTYLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fontstyle'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONT_SIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('font-size'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  KEYPOINTS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('keypoints', 'keyPoints'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HIDEFOCUS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('hidefocus'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMESSAGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmessage'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  INTERCEPT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('intercept'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDRAGEND = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondragend'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOVEEND = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmoveend'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONINVALID = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('oninvalid'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONKEYDOWN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onkeydown'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONFOCUSIN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onfocusin'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOUSEUP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmouseup'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  INPUTMODE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('inputmode'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONROWEXIT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onrowexit'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MATHCOLOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('mathcolor'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MASKUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('maskunits', 'maskUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MAXLENGTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('maxlength'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LINEBREAK = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('linebreak'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LOOPSTART = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('loopstart'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TRANSFORM = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('transform'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  V_HANGING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('v-hanging'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VALUETYPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('valuetype'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  POINTSATZ = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('pointsatz', 'pointsAtZ'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  POINTSATX = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('pointsatx', 'pointsAtX'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  POINTSATY = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('pointsaty', 'pointsAtY'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PLAYCOUNT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('playcount'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SYMMETRIC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('symmetric'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCROLLING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scrolling'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REPEATDUR = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('repeatdur', 'repeatDur'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SELECTION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('selection'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SEPARATOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('separator'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  XML_SPACE = $AttributeName_0(new AttributeName, XML_NS, COLONIFIED_LOCAL('xml:space', 'space'), XML_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  AUTOSUBMIT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('autosubmit'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ALPHABETIC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('alphabetic'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ACTIONTYPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('actiontype'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ACCUMULATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('accumulate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_LEVEL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-level'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLUMNSPAN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('columnspan'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CAP_HEIGHT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('cap-height'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BACKGROUND = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('background'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  GLYPH_NAME = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('glyph-name'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  GROUPALIGN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('groupalign'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONTFAMILY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fontfamily'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONTWEIGHT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fontweight'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONT_STYLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('font-style'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  KEYSPLINES = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('keysplines', 'keySplines'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HTTP_EQUIV = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('http-equiv'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONACTIVATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onactivate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OCCURRENCE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('occurrence'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  IRRELEVANT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('irrelevant'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDBLCLICK = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondblclick'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDRAGDROP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondragdrop'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONKEYPRESS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onkeypress'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONROWENTER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onrowenter'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDRAGOVER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondragover'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONFOCUSOUT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onfocusout'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOUSEOUT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmouseout'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  NUMOCTAVES = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('numoctaves', 'numOctaves'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MARKER_MID = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('marker-mid'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MARKER_END = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('marker-end'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TEXTLENGTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('textlength', 'textLength'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VISIBILITY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('visibility'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VIEWTARGET = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('viewtarget', 'viewTarget'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VERT_ADV_Y = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('vert-adv-y'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PATHLENGTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('pathlength', 'pathLength'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REPEAT_MAX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('repeat-max'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RADIOGROUP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('radiogroup'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STOP_COLOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stop-color'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SEPARATORS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('separators'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REPEAT_MIN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('repeat-min'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ROWSPACING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rowspacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ZOOMANDPAN = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('zoomandpan', 'zoomAndPan'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  XLINK_TYPE = $AttributeName_0(new AttributeName, XLINK_NS, COLONIFIED_LOCAL('xlink:type', 'type'), XLINK_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  XLINK_ROLE = $AttributeName_0(new AttributeName, XLINK_NS, COLONIFIED_LOCAL('xlink:role', 'role'), XLINK_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  XLINK_HREF = $AttributeName_0(new AttributeName, XLINK_NS, COLONIFIED_LOCAL('xlink:href', 'href'), XLINK_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  XLINK_SHOW = $AttributeName_0(new AttributeName, XLINK_NS, COLONIFIED_LOCAL('xlink:show', 'show'), XLINK_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+
+	$clinit_124_2();
+}
+function $clinit_124_2(){
+  $clinit_124_2 = nullMethod;
+  ACCENTUNDER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('accentunder'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_SECRET = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-secret'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_ATOMIC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-atomic'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_HIDDEN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-hidden'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_FLOWTO = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-flowto'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARABIC_FORM = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('arabic-form'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CELLPADDING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('cellpadding'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CELLSPACING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('cellspacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLUMNWIDTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('columnwidth'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLUMNALIGN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('columnalign'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLUMNLINES = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('columnlines'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CONTEXTMENU = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('contextmenu'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BASEPROFILE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('baseprofile', 'baseProfile'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONT_FAMILY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('font-family'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FRAMEBORDER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('frameborder'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FILTERUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('filterunits', 'filterUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FLOOD_COLOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('flood-color'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONT_WEIGHT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('font-weight'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HORIZ_ADV_X = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('horiz-adv-x'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDRAGLEAVE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondragleave'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOUSEMOVE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmousemove'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ORIENTATION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('orientation'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOUSEDOWN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmousedown'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOUSEOVER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmouseover'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDRAGENTER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondragenter'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  IDEOGRAPHIC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ideographic'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFORECUT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbeforecut'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONFORMINPUT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onforminput'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDRAGSTART = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondragstart'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOVESTART = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmovestart'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MARKERUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('markerunits', 'markerUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MATHVARIANT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('mathvariant'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MARGINWIDTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('marginwidth'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MARKERWIDTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('markerwidth', 'markerWidth'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TEXT_ANCHOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('text-anchor'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TABLEVALUES = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('tablevalues', 'tableValues'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCRIPTLEVEL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scriptlevel'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REPEATCOUNT = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('repeatcount', 'repeatCount'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STITCHTILES = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('stitchtiles', 'stitchTiles'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STARTOFFSET = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('startoffset', 'startOffset'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCROLLDELAY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scrolldelay'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  XMLNS_XLINK = $AttributeName_0(new AttributeName, XMLNS_NS, COLONIFIED_LOCAL('xmlns:xlink', 'xlink'), XMLNS_PREFIX, initValues(_3Z_classLit, 45, -1, [false, false, false, false]), true);
+  XLINK_TITLE = $AttributeName_0(new AttributeName, XLINK_NS, COLONIFIED_LOCAL('xlink:title', 'title'), XLINK_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  ARIA_INVALID = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-invalid'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_PRESSED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-pressed'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_CHECKED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-checked'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  AUTOCOMPLETE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('autocomplete'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_SETSIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-setsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_CHANNEL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-channel'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  EQUALCOLUMNS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('equalcolumns'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DISPLAYSTYLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('displaystyle'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DATAFORMATAS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('dataformatas'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FILL_OPACITY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('fill-opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONT_VARIANT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('font-variant'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONT_STRETCH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('font-stretch'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FRAMESPACING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('framespacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  KERNELMATRIX = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('kernelmatrix', 'kernelMatrix'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDEACTIVATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondeactivate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONROWSDELETE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onrowsdelete'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOUSELEAVE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmouseleave'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONFORMCHANGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onformchange'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONCELLCHANGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('oncellchange'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOUSEWHEEL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmousewheel'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONMOUSEENTER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onmouseenter'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONAFTERPRINT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onafterprint'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFORECOPY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbeforecopy'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MARGINHEIGHT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('marginheight'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MARKERHEIGHT = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('markerheight', 'markerHeight'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MARKER_START = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('marker-start'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MATHEMATICAL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('mathematical'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LENGTHADJUST = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('lengthadjust', 'lengthAdjust'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  UNSELECTABLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('unselectable'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  UNICODE_BIDI = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('unicode-bidi'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  UNITS_PER_EM = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('units-per-em'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  WORD_SPACING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('word-spacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  WRITING_MODE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('writing-mode'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  V_ALPHABETIC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('v-alphabetic'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PATTERNUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('patternunits', 'patternUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SPREADMETHOD = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('spreadmethod', 'spreadMethod'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SURFACESCALE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('surfacescale', 'surfaceScale'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STROKE_WIDTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stroke-width'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REPEAT_START = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('repeat-start'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STDDEVIATION = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('stddeviation', 'stdDeviation'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STOP_OPACITY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stop-opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_CONTROLS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-controls'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_HASPOPUP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-haspopup'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ACCENT_HEIGHT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('accent-height'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_VALUENOW = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-valuenow'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_RELEVANT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-relevant'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_POSINSET = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-posinset'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_VALUEMAX = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-valuemax'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_READONLY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-readonly'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_SELECTED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-selected'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_REQUIRED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-required'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_EXPANDED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-expanded'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_DISABLED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-disabled'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ATTRIBUTETYPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('attributetype', 'attributeType'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ATTRIBUTENAME = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('attributename', 'attributeName'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_DATATYPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-datatype'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_VALUEMIN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-valuemin'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BASEFREQUENCY = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('basefrequency', 'baseFrequency'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLUMNSPACING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('columnspacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLOR_PROFILE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('color-profile'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CLIPPATHUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('clippathunits', 'clipPathUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DEFINITIONURL = $AttributeName_0(new AttributeName, ALL_NO_NS, (arr_471 = initDim(_3Ljava_lang_String_2_classLit, 55, 1, 4, 0) , arr_471[0] = 'definitionurl' , arr_471[1] = 'definitionURL' , arr_471[2] = 'definitionurl' , arr_471[3] = 'definitionurl' , arr_471), ALL_NO_PREFIX, ALL_NCNAME, false);
+  GRADIENTUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('gradientunits', 'gradientUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FLOOD_OPACITY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('flood-opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONAFTERUPDATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onafterupdate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONERRORUPDATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onerrorupdate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFOREPASTE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbeforepaste'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONLOSECAPTURE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onlosecapture'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONCONTEXTMENU = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('oncontextmenu'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONSELECTSTART = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onselectstart'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFOREPRINT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbeforeprint'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MOVABLELIMITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('movablelimits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LINETHICKNESS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('linethickness'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  UNICODE_RANGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('unicode-range'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  THINMATHSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('thinmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VERT_ORIGIN_X = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('vert-origin-x'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VERT_ORIGIN_Y = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('vert-origin-y'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  V_IDEOGRAPHIC = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('v-ideographic'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PRESERVEALPHA = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('preservealpha', 'preserveAlpha'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCRIPTMINSIZE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scriptminsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SPECIFICATION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('specification'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  XLINK_ACTUATE = $AttributeName_0(new AttributeName, XLINK_NS, COLONIFIED_LOCAL('xlink:actuate', 'actuate'), XLINK_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  XLINK_ARCROLE = $AttributeName_0(new AttributeName, XLINK_NS, COLONIFIED_LOCAL('xlink:arcrole', 'arcrole'), XLINK_PREFIX, initValues(_3Z_classLit, 45, -1, [false, true, true, false]), false);
+  ACCEPT_CHARSET = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('accept-charset'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ALIGNMENTSCOPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('alignmentscope'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_MULTILINE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-multiline'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  BASELINE_SHIFT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('baseline-shift'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HORIZ_ORIGIN_X = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('horiz-origin-x'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  HORIZ_ORIGIN_Y = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('horiz-origin-y'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFOREUPDATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbeforeupdate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONFILTERCHANGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onfilterchange'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONROWSINSERTED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onrowsinserted'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFOREUNLOAD = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbeforeunload'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MATHBACKGROUND = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('mathbackground'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LETTER_SPACING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('letter-spacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LIGHTING_COLOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('lighting-color'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  THICKMATHSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('thickmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TEXT_RENDERING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('text-rendering'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  V_MATHEMATICAL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('v-mathematical'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  POINTER_EVENTS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('pointer-events'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PRIMITIVEUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('primitiveunits', 'primitiveUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SYSTEMLANGUAGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('systemlanguage', 'systemLanguage'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STROKE_LINECAP = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stroke-linecap'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SUBSCRIPTSHIFT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('subscriptshift'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STROKE_OPACITY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stroke-opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_DROPEFFECT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-dropeffect'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_LABELLEDBY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-labelledby'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_TEMPLATEID = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-templateid'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLOR_RENDERING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('color-rendering'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CONTENTEDITABLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('contenteditable'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DIFFUSECONSTANT = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('diffuseconstant', 'diffuseConstant'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDATAAVAILABLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondataavailable'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONCONTROLSELECT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('oncontrolselect'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  IMAGE_RENDERING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('image-rendering'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MEDIUMMATHSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('mediummathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  TEXT_DECORATION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('text-decoration'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SHAPE_RENDERING = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('shape-rendering'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STROKE_LINEJOIN = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stroke-linejoin'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REPEAT_TEMPLATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('repeat-template'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_DESCRIBEDBY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-describedby'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CONTENTSTYLETYPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('contentstyletype', 'contentStyleType'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  FONT_SIZE_ADJUST = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('font-size-adjust'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  KERNELUNITLENGTH = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('kernelunitlength', 'kernelUnitLength'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFOREACTIVATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbeforeactivate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONPROPERTYCHANGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onpropertychange'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDATASETCHANGED = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondatasetchanged'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  MASKCONTENTUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('maskcontentunits', 'maskContentUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PATTERNTRANSFORM = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('patterntransform', 'patternTransform'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REQUIREDFEATURES = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('requiredfeatures', 'requiredFeatures'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  RENDERING_INTENT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('rendering-intent'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SPECULAREXPONENT = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('specularexponent', 'specularExponent'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SPECULARCONSTANT = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('specularconstant', 'specularConstant'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SUPERSCRIPTSHIFT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('superscriptshift'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STROKE_DASHARRAY = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stroke-dasharray'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  XCHANNELSELECTOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('xchannelselector', 'xChannelSelector'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  YCHANNELSELECTOR = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('ychannelselector', 'yChannelSelector'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_AUTOCOMPLETE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-autocomplete'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  CONTENTSCRIPTTYPE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('contentscripttype', 'contentScriptType'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ENABLE_BACKGROUND = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('enable-background'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  DOMINANT_BASELINE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('dominant-baseline'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  GRADIENTTRANSFORM = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('gradienttransform', 'gradientTransform'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFORDEACTIVATE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbefordeactivate'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONDATASETCOMPLETE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('ondatasetcomplete'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OVERLINE_POSITION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('overline-position'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONBEFOREEDITFOCUS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onbeforeeditfocus'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  LIMITINGCONEANGLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('limitingconeangle', 'limitingConeAngle'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VERYTHINMATHSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('verythinmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STROKE_DASHOFFSET = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stroke-dashoffset'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STROKE_MITERLIMIT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('stroke-miterlimit'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ALIGNMENT_BASELINE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('alignment-baseline'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ONREADYSTATECHANGE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('onreadystatechange'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  OVERLINE_THICKNESS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('overline-thickness'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  UNDERLINE_POSITION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('underline-position'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VERYTHICKMATHSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('verythickmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  REQUIREDEXTENSIONS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('requiredextensions', 'requiredExtensions'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLOR_INTERPOLATION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('color-interpolation'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  UNDERLINE_THICKNESS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('underline-thickness'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PRESERVEASPECTRATIO = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('preserveaspectratio', 'preserveAspectRatio'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  PATTERNCONTENTUNITS = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('patterncontentunits', 'patternContentUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_MULTISELECTABLE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-multiselectable'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  SCRIPTSIZEMULTIPLIER = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('scriptsizemultiplier'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ARIA_ACTIVEDESCENDANT = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('aria-activedescendant'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VERYVERYTHINMATHSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('veryverythinmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  VERYVERYTHICKMATHSPACE = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('veryverythickmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STRIKETHROUGH_POSITION = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('strikethrough-position'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  STRIKETHROUGH_THICKNESS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('strikethrough-thickness'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  EXTERNALRESOURCESREQUIRED = $AttributeName_0(new AttributeName, ALL_NO_NS, SVG_DIFFERENT('externalresourcesrequired', 'externalResourcesRequired'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  GLYPH_ORIENTATION_VERTICAL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('glyph-orientation-vertical'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  COLOR_INTERPOLATION_FILTERS = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('color-interpolation-filters'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  GLYPH_ORIENTATION_HORIZONTAL = $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL('glyph-orientation-horizontal'), ALL_NO_PREFIX, ALL_NCNAME, false);
+  ATTRIBUTE_NAMES = initValues(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 59, 13, [D, K, R, X, Y, Z, BY, CX, CY, DX, DY, G2, G1, FX, FY, K4, K2, K3, K1, ID, IN, U2, U1, RT, RX, RY, TO, Y2, Y1, X1, X2, ALT, DIR, DUR, END, FOR, IN2, MAX, MIN, LOW, REL, REV, SRC, AXIS, ABBR, BBOX, CITE, CODE, BIAS, COLS, CLIP, CHAR, BASE, EDGE, DATA, FILL, FROM, FORM, FACE, HIGH, HREF, OPEN, ICON, NAME, MODE, MASK, LINK, LANG, LIST, TYPE_1, WHEN, WRAP, TEXT, PATH, PING, REFX, REFY, SIZE, SEED, ROWS, SPAN, STEP, ROLE, XREF, ASYNC, ALINK, ALIGN, CLOSE, COLOR, CLASS, CLEAR, BEGIN, DEPTH, DEFER, FENCE, FRAME, ISMAP, ONEND, INDEX, ORDER, OTHER, ONCUT, NARGS, MEDIA, LABEL, LOCAL, WIDTH, TITLE, VLINK, VALUE, SLOPE, SHAPE, SCOPE, SCALE, SPEED, STYLE, RULES, STEMH, STEMV, START, XMLNS, ACCEPT, ACCENT, ASCENT, ACTIVE, ALTIMG, ACTION, BORDER, CURSOR, COORDS, FILTER, FORMAT, HIDDEN, HSPACE, HEIGHT, ONMOVE, ONLOAD, ONDRAG, ORIGIN, ONZOOM, ONHELP, ONSTOP, ONDROP, ONBLUR, OBJECT, OFFSET, ORIENT, ONCOPY, NOWRAP, NOHREF, MACROS, METHOD, LOWSRC, LSPACE, LQUOTE, USEMAP, WIDTHS, TARGET, VALUES, VALIGN, VSPACE, POSTER, POINTS, PROMPT, SCOPED, STRING, SCHEME, STROKE, RADIUS, RESULT, REPEAT, RSPACE, ROTATE, RQUOTE, ALTTEXT, ARCHIVE, AZIMUTH, CLOSURE, CHECKED, CLASSID, CHAROFF, BGCOLOR, COLSPAN, CHARSET, COMPACT, CONTENT, ENCTYPE, DATASRC, DATAFLD, DECLARE, DISPLAY, DIVISOR, DEFAULT, DESCENT, KERNING, HANGING, HEADERS, ONPASTE, ONCLICK, OPTIMUM, ONBEGIN, ONKEYUP, ONFOCUS, ONERROR, ONINPUT, ONABORT, ONSTART, ONRESET, OPACITY, NOSHADE, MINSIZE, MAXSIZE, LOOPEND, LARGEOP, UNICODE, TARGETX, TARGETY, VIEWBOX, VERSION, PATTERN, PROFILE, SPACING, RESTART, ROWSPAN, SANDBOX, SUMMARY, STANDBY, REPLACE, AUTOPLAY, ADDITIVE, CALCMODE, CODETYPE, CODEBASE, CONTROLS, BEVELLED, BASELINE, EXPONENT, EDGEMODE, ENCODING, GLYPHREF, DATETIME, DISABLED, FONTSIZE, KEYTIMES, PANOSE_1, HREFLANG, ONRESIZE, ONCHANGE, ONBOUNCE, ONUNLOAD, ONFINISH, ONSCROLL, OPERATOR, OVERFLOW, ONSUBMIT, ONREPEAT, ONSELECT, NOTATION, NORESIZE, MANIFEST, MATHSIZE, MULTIPLE, LONGDESC, LANGUAGE, TEMPLATE, TABINDEX, READONLY, SELECTED, ROWLINES, SEAMLESS, ROWALIGN, STRETCHY, REQUIRED, XML_BASE, XML_LANG, X_HEIGHT, ARIA_OWNS, AUTOFOCUS, ARIA_SORT, ACCESSKEY, ARIA_BUSY, ARIA_GRAB, AMPLITUDE, ARIA_LIVE, CLIP_RULE, CLIP_PATH, EQUALROWS, ELEVATION, DIRECTION, DRAGGABLE, FILTERRES, FILL_RULE, FONTSTYLE, FONT_SIZE, KEYPOINTS, HIDEFOCUS, ONMESSAGE, INTERCEPT, ONDRAGEND, ONMOVEEND, ONINVALID, ONKEYDOWN, ONFOCUSIN, ONMOUSEUP, INPUTMODE, ONROWEXIT, MATHCOLOR, MASKUNITS, MAXLENGTH, LINEBREAK, LOOPSTART, TRANSFORM, V_HANGING, VALUETYPE, POINTSATZ, POINTSATX, POINTSATY, PLAYCOUNT, SYMMETRIC, SCROLLING, REPEATDUR, SELECTION, SEPARATOR, XML_SPACE, AUTOSUBMIT, ALPHABETIC, ACTIONTYPE, ACCUMULATE, ARIA_LEVEL, COLUMNSPAN, CAP_HEIGHT, BACKGROUND, GLYPH_NAME, GROUPALIGN, FONTFAMILY, FONTWEIGHT, FONT_STYLE, KEYSPLINES, HTTP_EQUIV, ONACTIVATE, OCCURRENCE, IRRELEVANT, ONDBLCLICK, ONDRAGDROP, ONKEYPRESS, ONROWENTER, ONDRAGOVER, ONFOCUSOUT, ONMOUSEOUT, NUMOCTAVES, MARKER_MID, MARKER_END, TEXTLENGTH, VISIBILITY, VIEWTARGET, VERT_ADV_Y, PATHLENGTH, REPEAT_MAX, RADIOGROUP, STOP_COLOR, SEPARATORS, REPEAT_MIN, ROWSPACING, ZOOMANDPAN, XLINK_TYPE, XLINK_ROLE, XLINK_HREF, XLINK_SHOW, ACCENTUNDER, ARIA_SECRET, ARIA_ATOMIC, ARIA_HIDDEN, ARIA_FLOWTO, ARABIC_FORM, CELLPADDING, CELLSPACING, COLUMNWIDTH, COLUMNALIGN, COLUMNLINES, CONTEXTMENU, BASEPROFILE, FONT_FAMILY, FRAMEBORDER, FILTERUNITS, FLOOD_COLOR, FONT_WEIGHT, HORIZ_ADV_X, ONDRAGLEAVE, ONMOUSEMOVE, ORIENTATION, ONMOUSEDOWN, ONMOUSEOVER, ONDRAGENTER, IDEOGRAPHIC, ONBEFORECUT, ONFORMINPUT, ONDRAGSTART, ONMOVESTART, MARKERUNITS, MATHVARIANT, MARGINWIDTH, MARKERWIDTH, TEXT_ANCHOR, TABLEVALUES, SCRIPTLEVEL, REPEATCOUNT, STITCHTILES, STARTOFFSET, SCROLLDELAY, XMLNS_XLINK, XLINK_TITLE, ARIA_INVALID, ARIA_PRESSED, ARIA_CHECKED, AUTOCOMPLETE, ARIA_SETSIZE, ARIA_CHANNEL, EQUALCOLUMNS, DISPLAYSTYLE, DATAFORMATAS, FILL_OPACITY, FONT_VARIANT, FONT_STRETCH, FRAMESPACING, KERNELMATRIX, ONDEACTIVATE, ONROWSDELETE, ONMOUSELEAVE, ONFORMCHANGE, ONCELLCHANGE, ONMOUSEWHEEL, ONMOUSEENTER, ONAFTERPRINT, ONBEFORECOPY, MARGINHEIGHT, MARKERHEIGHT, MARKER_START, MATHEMATICAL, LENGTHADJUST, UNSELECTABLE, UNICODE_BIDI, UNITS_PER_EM, WORD_SPACING, WRITING_MODE, V_ALPHABETIC, PATTERNUNITS, SPREADMETHOD, SURFACESCALE, STROKE_WIDTH, REPEAT_START, STDDEVIATION, STOP_OPACITY, ARIA_CONTROLS, ARIA_HASPOPUP, ACCENT_HEIGHT, ARIA_VALUENOW, ARIA_RELEVANT, ARIA_POSINSET, ARIA_VALUEMAX, ARIA_READONLY, ARIA_SELECTED, ARIA_REQUIRED, ARIA_EXPANDED, ARIA_DISABLED, ATTRIBUTETYPE, ATTRIBUTENAME, ARIA_DATATYPE, ARIA_VALUEMIN, BASEFREQUENCY, COLUMNSPACING, COLOR_PROFILE, CLIPPATHUNITS, DEFINITIONURL, GRADIENTUNITS, FLOOD_OPACITY, ONAFTERUPDATE, ONERRORUPDATE, ONBEFOREPASTE, ONLOSECAPTURE, ONCONTEXTMENU, ONSELECTSTART, ONBEFOREPRINT, MOVABLELIMITS, LINETHICKNESS, UNICODE_RANGE, THINMATHSPACE, VERT_ORIGIN_X, VERT_ORIGIN_Y, V_IDEOGRAPHIC, PRESERVEALPHA, SCRIPTMINSIZE, SPECIFICATION, XLINK_ACTUATE, XLINK_ARCROLE, ACCEPT_CHARSET, ALIGNMENTSCOPE, ARIA_MULTILINE, BASELINE_SHIFT, HORIZ_ORIGIN_X, HORIZ_ORIGIN_Y, ONBEFOREUPDATE, ONFILTERCHANGE, ONROWSINSERTED, ONBEFOREUNLOAD, MATHBACKGROUND, LETTER_SPACING, LIGHTING_COLOR, THICKMATHSPACE, TEXT_RENDERING, V_MATHEMATICAL, POINTER_EVENTS, PRIMITIVEUNITS, SYSTEMLANGUAGE, STROKE_LINECAP, SUBSCRIPTSHIFT, STROKE_OPACITY, ARIA_DROPEFFECT, ARIA_LABELLEDBY, ARIA_TEMPLATEID, COLOR_RENDERING, CONTENTEDITABLE, DIFFUSECONSTANT, ONDATAAVAILABLE, ONCONTROLSELECT, IMAGE_RENDERING, MEDIUMMATHSPACE, TEXT_DECORATION, SHAPE_RENDERING, STROKE_LINEJOIN, REPEAT_TEMPLATE, ARIA_DESCRIBEDBY, CONTENTSTYLETYPE, FONT_SIZE_ADJUST, KERNELUNITLENGTH, ONBEFOREACTIVATE, ONPROPERTYCHANGE, ONDATASETCHANGED, MASKCONTENTUNITS, PATTERNTRANSFORM, REQUIREDFEATURES, RENDERING_INTENT, SPECULAREXPONENT, SPECULARCONSTANT, SUPERSCRIPTSHIFT, STROKE_DASHARRAY, XCHANNELSELECTOR, YCHANNELSELECTOR, ARIA_AUTOCOMPLETE, CONTENTSCRIPTTYPE, ENABLE_BACKGROUND, DOMINANT_BASELINE, GRADIENTTRANSFORM, ONBEFORDEACTIVATE, ONDATASETCOMPLETE, OVERLINE_POSITION, ONBEFOREEDITFOCUS, LIMITINGCONEANGLE, VERYTHINMATHSPACE, STROKE_DASHOFFSET, STROKE_MITERLIMIT, ALIGNMENT_BASELINE, ONREADYSTATECHANGE, OVERLINE_THICKNESS, UNDERLINE_POSITION, VERYTHICKMATHSPACE, REQUIREDEXTENSIONS, COLOR_INTERPOLATION, UNDERLINE_THICKNESS, PRESERVEASPECTRATIO, PATTERNCONTENTUNITS, ARIA_MULTISELECTABLE, SCRIPTSIZEMULTIPLIER, ARIA_ACTIVEDESCENDANT, VERYVERYTHINMATHSPACE, VERYVERYTHICKMATHSPACE, STRIKETHROUGH_POSITION, STRIKETHROUGH_THICKNESS, EXTERNALRESOURCESREQUIRED, GLYPH_ORIENTATION_VERTICAL, COLOR_INTERPOLATION_FILTERS, GLYPH_ORIENTATION_HORIZONTAL]);
+  ATTRIBUTE_HASHES = initValues(_3I_classLit, 48, -1, [1153, 1383, 1601, 1793, 1827, 1857, 68600, 69146, 69177, 70237, 70270, 71572, 71669, 72415, 72444, 74846, 74904, 74943, 75001, 75276, 75590, 84742, 84839, 85575, 85963, 85992, 87204, 88074, 88171, 89130, 89163, 3207892, 3283895, 3284791, 3338752, 3358197, 3369562, 3539124, 3562402, 3574260, 3670335, 3696933, 3721879, 135280021, 135346322, 136317019, 136475749, 136548517, 136652214, 136884919, 136902418, 136942992, 137292068, 139120259, 139785574, 142250603, 142314056, 142331176, 142519584, 144752417, 145106895, 146147200, 146765926, 148805544, 149655723, 149809441, 150018784, 150445028, 150923321, 152528754, 152536216, 152647366, 152962785, 155219321, 155654904, 157317483, 157350248, 157437941, 157447478, 157604838, 157685404, 157894402, 158315188, 166078431, 169409980, 169700259, 169856932, 170007032, 170409695, 170466488, 170513710, 170608367, 173028944, 173896963, 176090625, 176129212, 179390001, 179489057, 179627464, 179840468, 179849042, 180004216, 181779081, 183027151, 183645319, 183698797, 185922012, 185997252, 188312483, 188675799, 190977533, 190992569, 191006194, 191033518, 191038774, 191096249, 191166163, 191194426, 191522106, 191568039, 200104642, 202506661, 202537381, 202602917, 203070590, 203120766, 203389054, 203690071, 203971238, 203986524, 209040857, 209125756, 212055489, 212322418, 212746849, 213002877, 213055164, 213088023, 213259873, 213273386, 213435118, 213437318, 213438231, 213493071, 213532268, 213542834, 213584431, 213659891, 215285828, 215880731, 216112976, 216684637, 217369699, 217565298, 217576549, 218186795, 219743185, 220082234, 221623802, 221986406, 222283890, 223089542, 223138630, 223311265, 224547358, 224587256, 224589550, 224655650, 224785518, 224810917, 224813302, 225429618, 225432950, 225440869, 236107233, 236709921, 236838947, 237117095, 237143271, 237172455, 237209953, 237354143, 237372743, 237668065, 237703073, 237714273, 239743521, 240512803, 240522627, 240560417, 240656513, 241015715, 241062755, 241065383, 243523041, 245865199, 246261793, 246556195, 246774817, 246923491, 246928419, 246981667, 247014847, 247058369, 247112833, 247118177, 247119137, 247128739, 247316903, 249533729, 250235623, 250269543, 251083937, 251402351, 252339047, 253260911, 253293679, 254844367, 255547879, 256077281, 256345377, 258124199, 258354465, 258605063, 258744193, 258845603, 258856961, 258926689, 269869248, 270174334, 270709417, 270778994, 270781796, 271102503, 271478858, 271490090, 272870654, 273335275, 273369140, 273924313, 274108530, 274116736, 276818662, 277476156, 279156579, 279349675, 280108533, 280128712, 280132869, 280162403, 280280292, 280413430, 280506130, 280677397, 280678580, 280686710, 280689066, 282736758, 283110901, 283275116, 283823226, 283890012, 284479340, 284606461, 286700477, 286798916, 291557706, 291665349, 291804100, 292138018, 292166446, 292418738, 292451039, 300298041, 300374839, 300597935, 303073389, 303083839, 303266673, 303354997, 303430688, 303576261, 303724281, 303819694, 304242723, 304382625, 306247792, 307227811, 307468786, 307724489, 309671175, 310252031, 310358241, 310373094, 311015256, 313357609, 313683893, 313701861, 313706996, 313707317, 313710350, 314027746, 314038181, 314091299, 314205627, 314233813, 316741830, 316797986, 317486755, 317794164, 318721061, 320076137, 322657125, 322887778, 323506876, 323572412, 323605180, 323938869, 325060058, 325320188, 325398738, 325541490, 325671619, 333868843, 336806130, 337212108, 337282686, 337285434, 337585223, 338036037, 338298087, 338566051, 340943551, 341190970, 342995704, 343352124, 343912673, 344585053, 346977248, 347218098, 347262163, 347278576, 347438191, 347655959, 347684788, 347726430, 347727772, 347776035, 347776629, 349500753, 350880161, 350887073, 353384123, 355496998, 355906922, 355979793, 356545959, 358637867, 358905016, 359164318, 359247286, 359350571, 359579447, 365560330, 367399355, 367420285, 367510727, 368013212, 370234760, 370353345, 370710317, 371074566, 371122285, 371194213, 371448425, 371448430, 371545055, 371596922, 371758751, 371964792, 372151328, 376550136, 376710172, 376795771, 376826271, 376906556, 380514830, 380774774, 380775037, 381030322, 381136500, 381281631, 381282269, 381285504, 381330595, 381331422, 381335911, 381336484, 383907298, 383917408, 384595009, 384595013, 387799894, 387823201, 392581647, 392584937, 392742684, 392906485, 393003349, 400644707, 400973830, 404428547, 404432113, 404432865, 404469244, 404478897, 404694860, 406887479, 408294949, 408789955, 410022510, 410467324, 410586448, 410945965, 411845275, 414327152, 414327932, 414329781, 414346257, 414346439, 414639928, 414835998, 414894517, 414986533, 417465377, 417465381, 417492216, 418259232, 419310946, 420103495, 420242342, 420380455, 420658662, 420717432, 423183880, 424539259, 425929170, 425972964, 426050649, 426126450, 426142833, 426607922, 437289840, 437347469, 437412335, 437423943, 437455540, 437462252, 437597991, 437617485, 437986305, 437986507, 437986828, 437987072, 438015591, 438034813, 438038966, 438179623, 438347971, 438483573, 438547062, 438895551, 441592676, 442032555, 443548979, 447881379, 447881655, 447881895, 447887844, 448416189, 448445746, 448449012, 450942191, 452816744, 453668677, 454434495, 456610076, 456642844, 456738709, 457544600, 459451897, 459680944, 468058810, 468083581, 470964084, 471470955, 471567278, 472267822, 481177859, 481210627, 481435874, 481455115, 481485378, 481490218, 485105638, 486005878, 486383494, 487988916, 488103783, 490661867, 491574090, 491578272, 493041952, 493441205, 493582844, 493716979, 504577572, 504740359, 505091638, 505592418, 505656212, 509516275, 514998531, 515571132, 515594682, 518712698, 521362273, 526592419, 526807354, 527348842, 538294791, 539214049, 544689535, 545535009, 548544752, 548563346, 548595116, 551679010, 558034099, 560329411, 560356209, 560671018, 560671152, 560692590, 560845442, 569212097, 569474241, 572252718, 572768481, 575326764, 576174758, 576190819, 582099184, 582099438, 582372519, 582558889, 586552164, 591325418, 594231990, 594243961, 605711268, 615672071, 616086845, 621792370, 624879850, 627432831, 640040548, 654392808, 658675477, 659420283, 672891587, 694768102, 705890982, 725543146, 759097578, 761686526, 795383908, 843809551, 878105336, 908643300, 945213471]);
+}
+
+function $AttributeName(this$static, uri, local, prefix, ncname, xmlns){
+  $clinit_124();
+  this$static.uri = uri;
+  this$static.local = local;
+  COMPUTE_QNAME(local, prefix);
+  this$static.ncname = ncname;
+  this$static.xmlns = xmlns;
+  return this$static;
+}
+
+function $AttributeName_0(this$static, uri, local, prefix, ncname, xmlns){
+  $clinit_124();
+  this$static.uri = uri;
+  this$static.local = local;
+  COMPUTE_QNAME(local, prefix);
+  this$static.ncname = ncname;
+  this$static.xmlns = xmlns;
+  return this$static;
+}
+
+function $isBoolean(this$static){
+  return this$static == ACTIVE || this$static == ASYNC || this$static == AUTOFOCUS || this$static == AUTOSUBMIT || this$static == CHECKED || this$static == COMPACT || this$static == DECLARE || this$static == DEFAULT || this$static == DEFER || this$static == DISABLED || this$static == ISMAP || this$static == MULTIPLE || this$static == NOHREF || this$static == NORESIZE || this$static == NOSHADE || this$static == NOWRAP || this$static == READONLY || this$static == REQUIRED || this$static == SELECTED;
+}
+
+function $isCaseFolded(this$static){
+  return this$static == ACTIVE || this$static == ALIGN || this$static == ASYNC || this$static == AUTOCOMPLETE || this$static == AUTOFOCUS || this$static == AUTOSUBMIT || this$static == CHECKED || this$static == CLEAR || this$static == COMPACT || this$static == DATAFORMATAS || this$static == DECLARE || this$static == DEFAULT || this$static == DEFER || this$static == DIR || this$static == DISABLED || this$static == ENCTYPE || this$static == FRAME || this$static == ISMAP || this$static == METHOD || this$static == MULTIPLE || this$static == NOHREF || this$static == NORESIZE || this$static == NOSHADE || this$static == NOWRAP || this$static == READONLY || this$static == REPLACE || this$static == REQUIRED || this$static == RULES || this$static == SCOPE || this$static == SCROLLING || this$static == SELECTED || this$static == SHAPE || this$static == STEP || this$static == TYPE_1 || this$static == VALIGN || this$static == VALUETYPE;
+}
+
+function COLONIFIED_LOCAL(name_0, suffix){
+  var arr;
+  arr = initDim(_3Ljava_lang_String_2_classLit, 55, 1, 4, 0);
+  arr[0] = name_0;
+  arr[1] = suffix;
+  arr[2] = suffix;
+  arr[3] = name_0;
+  return arr;
+}
+
+function COMPUTE_QNAME(local, prefix){
+  var arr, i;
+  arr = initDim(_3Ljava_lang_String_2_classLit, 55, 1, 4, 0);
+  for (i = 0; i < arr.length; ++i) {
+    prefix[i] == null?(arr[i] = local[i]):(arr[i] = String(prefix[i] + ':' + local[i]));
+  }
+  return arr;
+}
+
+function SAME_LOCAL(name_0){
+  var arr;
+  arr = initDim(_3Ljava_lang_String_2_classLit, 55, 1, 4, 0);
+  arr[0] = name_0;
+  arr[1] = name_0;
+  arr[2] = name_0;
+  arr[3] = name_0;
+  return arr;
+}
+
+function SVG_DIFFERENT(name_0, camel){
+  var arr;
+  arr = initDim(_3Ljava_lang_String_2_classLit, 55, 1, 4, 0);
+  arr[0] = name_0;
+  arr[1] = name_0;
+  arr[2] = camel;
+  arr[3] = name_0;
+  return arr;
+}
+
+function bufToHash(buf, len){
+  var hash, hash2, i, j;
+  hash2 = 0;
+  hash = len;
+  hash <<= 5;
+  hash += buf[0] - 96;
+  j = len;
+  for (i = 0; i < 4 && j > 0; ++i) {
+    --j;
+    hash <<= 5;
+    hash += buf[j] - 96;
+    hash2 <<= 6;
+    hash2 += buf[i] - 95;
+  }
+  return hash ^ hash2;
+}
+
+function createAttributeName(name_0, checkNcName){
+  var ncName, xmlns;
+  ncName = true;
+  xmlns = name_0.indexOf('xmlns:') == 0;
+  checkNcName && (xmlns?(ncName = false):(ncName = isNCName(name_0)));
+  return $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL(name_0), ALL_NO_PREFIX, ncName?ALL_NCNAME:ALL_NO_NCNAME, xmlns);
+}
+
+function getClass_67(){
+  return Lnu_validator_htmlparser_impl_AttributeName_2_classLit;
+}
+
+function nameByBuffer(buf, offset, length_0, checkNcName){
+  var end, end_0;
+  $clinit_124();
+  var attributeName, hash, index, name_0;
+  hash = bufToHash(buf, length_0);
+  index = binarySearch(ATTRIBUTE_HASHES, hash);
+  if (index < 0) {
+    return createAttributeName(String((end = offset + length_0 , __checkBounds(buf.length, offset, end) , __valueOf(buf, offset, end))), checkNcName);
+  }
+   else {
+    attributeName = ATTRIBUTE_NAMES[index];
+    name_0 = attributeName.local[0];
+    if (!localEqualsBuffer(name_0, buf, offset, length_0)) {
+      return createAttributeName(String((end_0 = offset + length_0 , __checkBounds(buf.length, offset, end_0) , __valueOf(buf, offset, end_0))), checkNcName);
+    }
+    return attributeName;
+  }
+}
+
+function AttributeName(){
+}
+
+_ = AttributeName.prototype = new Object_0;
+_.getClass$ = getClass_67;
+_.typeId$ = 39;
+_.local = null;
+_.ncname = null;
+_.uri = null;
+_.xmlns = false;
+var ABBR, ACCENT, ACCENTUNDER, ACCENT_HEIGHT, ACCEPT, ACCEPT_CHARSET, ACCESSKEY, ACCUMULATE, ACTION, ACTIONTYPE, ACTIVE, ADDITIVE, ALIGN, ALIGNMENTSCOPE, ALIGNMENT_BASELINE, ALINK, ALL_NCNAME, ALL_NO_NCNAME, ALL_NO_NS, ALL_NO_PREFIX, ALPHABETIC, ALT, ALTIMG, ALTTEXT, AMPLITUDE, ARABIC_FORM, ARCHIVE, ARIA_ACTIVEDESCENDANT, ARIA_ATOMIC, ARIA_AUTOCOMPLETE, ARIA_BUSY, ARIA_CHANNEL, ARIA_CHECKED, ARIA_CONTROLS, ARIA_DATATYPE, ARIA_DESCRIBEDBY, ARIA_DISABLED, ARIA_DROPEFFECT, ARIA_EXPANDED, ARIA_FLOWTO, ARIA_GRAB, ARIA_HASPOPUP, ARIA_HIDDEN, ARIA_INVALID, ARIA_LABELLEDBY, ARIA_LEVEL, ARIA_LIVE, ARIA_MULTILINE, ARIA_MULTISELECTABLE, ARIA_OWNS, ARIA_POSINSET, ARIA_PRESSED, ARIA_READONLY, ARIA_RELEVANT, ARIA_REQUIRED, ARIA_SECRET, ARIA_SELECTED, ARIA_SETSIZE, ARIA_SORT, ARIA_TEMPLATEID, ARIA_VALUEMAX, ARIA_VALUEMIN, ARIA_VALUENOW, ASCENT, ASYNC, ATTRIBUTENAME, ATTRIBUTETYPE, ATTRIBUTE_HASHES, ATTRIBUTE_NAMES, AUTOCOMPLETE, AUTOFOCUS, AUTOPLAY, AUTOSUBMIT, AXIS, AZIMUTH, BACKGROUND, BASE, BASEFREQUENCY, BASELINE, BASELINE_SHIFT, BASEPROFILE, BBOX, BEGIN, BEVELLED, BGCOLOR, BIAS, BORDER, BY, CALCMODE, CAP_HEIGHT, CELLPADDING, CELLSPACING, CHAR, CHAROFF, CHARSET, CHECKED, CITE, CLASS, CLASSID, CLEAR, CLIP, CLIPPATHUNITS, CLIP_PATH, CLIP_RULE, CLOSE, CLOSURE, CODE, CODEBASE, CODETYPE, COLOR, COLOR_INTERPOLATION, COLOR_INTERPOLATION_FILTERS, COLOR_PROFILE, COLOR_RENDERING, COLS, COLSPAN, COLUMNALIGN, COLUMNLINES, COLUMNSPACING, COLUMNSPAN, COLUMNWIDTH, COMPACT, CONTENT, CONTENTEDITABLE, CONTENTSCRIPTTYPE, CONTENTSTYLETYPE, CONTEXTMENU, CONTROLS, COORDS, CURSOR, CX, CY, D, DATA, DATAFLD, DATAFORMATAS, DATASRC, DATETIME, DECLARE, DEFAULT, DEFER, DEFINITIONURL, DEPTH, DESCENT, DIFFUSECONSTANT, DIR, DIRECTION, DISABLED, DISPLAY, DISPLAYSTYLE, DIVISOR, DOMINANT_BASELINE, DRAGGABLE, DUR, DX, DY, EDGE, EDGEMODE, ELEVATION, ENABLE_BACKGROUND, ENCODING, ENCTYPE, END, EQUALCOLUMNS, EQUALROWS, EXPONENT, EXTERNALRESOURCESREQUIRED, FACE, FENCE, FILL, FILL_OPACITY, FILL_RULE, FILTER, FILTERRES, FILTERUNITS, FLOOD_COLOR, FLOOD_OPACITY, FONTFAMILY, FONTSIZE, FONTSTYLE, FONTWEIGHT, FONT_FAMILY, FONT_SIZE, FONT_SIZE_ADJUST, FONT_STRETCH, FONT_STYLE, FONT_VARIANT, FONT_WEIGHT, FOR, FORM, FORMAT, FRAME, FRAMEBORDER, FRAMESPACING, FROM, FX, FY, G1, G2, GLYPHREF, GLYPH_NAME, GLYPH_ORIENTATION_HORIZONTAL, GLYPH_ORIENTATION_VERTICAL, GRADIENTTRANSFORM, GRADIENTUNITS, GROUPALIGN, HANGING, HEADERS, HEIGHT, HIDDEN, HIDEFOCUS, HIGH, HORIZ_ADV_X, HORIZ_ORIGIN_X, HORIZ_ORIGIN_Y, HREF, HREFLANG, HSPACE, HTTP_EQUIV, ICON, ID, IDEOGRAPHIC, IMAGE_RENDERING, IN, IN2, INDEX, INPUTMODE, INTERCEPT, IRRELEVANT, ISMAP, K, K1, K2, K3, K4, KERNELMATRIX, KERNELUNITLENGTH, KERNING, KEYPOINTS, KEYSPLINES, KEYTIMES, LABEL, LANG, LANGUAGE, LANG_NS, LANG_PREFIX, LARGEOP, LENGTHADJUST, LETTER_SPACING, LIGHTING_COLOR, LIMITINGCONEANGLE, LINEBREAK, LINETHICKNESS, LINK, LIST, LOCAL, LONGDESC, LOOPEND, LOOPSTART, LOW, LOWSRC, LQUOTE, LSPACE, MACROS, MANIFEST, MARGINHEIGHT, MARGINWIDTH, MARKERHEIGHT, MARKERUNITS, MARKERWIDTH, MARKER_END, MARKER_MID, MARKER_START, MASK, MASKCONTENTUNITS, MASKUNITS, MATHBACKGROUND, MATHCOLOR, MATHEMATICAL, MATHSIZE, MATHVARIANT, MAX, MAXLENGTH, MAXSIZE, MEDIA, MEDIUMMATHSPACE, METHOD, MIN, MINSIZE, MODE, MOVABLELIMITS, MULTIPLE, NAME, NARGS, NOHREF, NORESIZE, NOSHADE, NOTATION, NOWRAP, NUMOCTAVES, OBJECT, OCCURRENCE, OFFSET, ONABORT, ONACTIVATE, ONAFTERPRINT, ONAFTERUPDATE, ONBEFORDEACTIVATE, ONBEFOREACTIVATE, ONBEFORECOPY, ONBEFORECUT, ONBEFOREEDITFOCUS, ONBEFOREPASTE, ONBEFOREPRINT, ONBEFOREUNLOAD, ONBEFOREUPDATE, ONBEGIN, ONBLUR, ONBOUNCE, ONCELLCHANGE, ONCHANGE, ONCLICK, ONCONTEXTMENU, ONCONTROLSELECT, ONCOPY, ONCUT, ONDATAAVAILABLE, ONDATASETCHANGED, ONDATASETCOMPLETE, ONDBLCLICK, ONDEACTIVATE, ONDRAG, ONDRAGDROP, ONDRAGEND, ONDRAGENTER, ONDRAGLEAVE, ONDRAGOVER, ONDRAGSTART, ONDROP, ONEND, ONERROR, ONERRORUPDATE, ONFILTERCHANGE, ONFINISH, ONFOCUS, ONFOCUSIN, ONFOCUSOUT, ONFORMCHANGE, ONFORMINPUT, ONHELP, ONINPUT, ONINVALID, ONKEYDOWN, ONKEYPRESS, ONKEYUP, ONLOAD, ONLOSECAPTURE, ONMESSAGE, ONMOUSEDOWN, ONMOUSEENTER, ONMOUSELEAVE, ONMOUSEMOVE, ONMOUSEOUT, ONMOUSEOVER, ONMOUSEUP, ONMOUSEWHEEL, ONMOVE, ONMOVEEND, ONMOVESTART, ONPASTE, ONPROPERTYCHANGE, ONREADYSTATECHANGE, ONREPEAT, ONRESET, ONRESIZE, ONROWENTER, ONROWEXIT, ONROWSDELETE, ONROWSINSERTED, ONSCROLL, ONSELECT, ONSELECTSTART, ONSTART, ONSTOP, ONSUBMIT, ONUNLOAD, ONZOOM, OPACITY, OPEN, OPERATOR, OPTIMUM, ORDER, ORIENT, ORIENTATION, ORIGIN, OTHER, OVERFLOW, OVERLINE_POSITION, OVERLINE_THICKNESS, PANOSE_1, PATH, PATHLENGTH, PATTERN, PATTERNCONTENTUNITS, PATTERNTRANSFORM, PATTERNUNITS, PING, PLAYCOUNT, POINTER_EVENTS, POINTS, POINTSATX, POINTSATY, POINTSATZ, POSTER, PRESERVEALPHA, PRESERVEASPECTRATIO, PRIMITIVEUNITS, PROFILE, PROMPT, R, RADIOGROUP, RADIUS, READONLY, REFX, REFY, REL, RENDERING_INTENT, REPEAT, REPEATCOUNT, REPEATDUR, REPEAT_MAX, REPEAT_MIN, REPEAT_START, REPEAT_TEMPLATE, REPLACE, REQUIRED, REQUIREDEXTENSIONS, REQUIREDFEATURES, RESTART, RESULT, REV, ROLE, ROTATE, ROWALIGN, ROWLINES, ROWS, ROWSPACING, ROWSPAN, RQUOTE, RSPACE, RT, RULES, RX, RY, SANDBOX, SCALE, SCHEME, SCOPE, SCOPED, SCRIPTLEVEL, SCRIPTMINSIZE, SCRIPTSIZEMULTIPLIER, SCROLLDELAY, SCROLLING, SEAMLESS, SEED, SELECTED, SELECTION, SEPARATOR, SEPARATORS, SHAPE, SHAPE_RENDERING, SIZE, SLOPE, SPACING, SPAN, SPECIFICATION, SPECULARCONSTANT, SPECULAREXPONENT, SPEED, SPREADMETHOD, SRC, STANDBY, START, STARTOFFSET, STDDEVIATION, STEMH, STEMV, STEP, STITCHTILES, STOP_COLOR, STOP_OPACITY, STRETCHY, STRIKETHROUGH_POSITION, STRIKETHROUGH_THICKNESS, STRING, STROKE, STROKE_DASHARRAY, STROKE_DASHOFFSET, STROKE_LINECAP, STROKE_LINEJOIN, STROKE_MITERLIMIT, STROKE_OPACITY, STROKE_WIDTH, STYLE, SUBSCRIPTSHIFT, SUMMARY, SUPERSCRIPTSHIFT, SURFACESCALE, SYMMETRIC, SYSTEMLANGUAGE, TABINDEX, TABLEVALUES, TARGET, TARGETX, TARGETY, TEMPLATE, TEXT, TEXTLENGTH, TEXT_ANCHOR, TEXT_DECORATION, TEXT_RENDERING, THICKMATHSPACE, THINMATHSPACE, TITLE, TO, TRANSFORM, TYPE_1, U1, U2, UNDERLINE_POSITION, UNDERLINE_THICKNESS, UNICODE, UNICODE_BIDI, UNICODE_RANGE, UNITS_PER_EM, UNSELECTABLE, USEMAP, VALIGN, VALUE, VALUES, VALUETYPE, VERSION, VERT_ADV_Y, VERT_ORIGIN_X, VERT_ORIGIN_Y, VERYTHICKMATHSPACE, VERYTHINMATHSPACE, VERYVERYTHICKMATHSPACE, VERYVERYTHINMATHSPACE, VIEWBOX, VIEWTARGET, VISIBILITY, VLINK, VSPACE, V_ALPHABETIC, V_HANGING, V_IDEOGRAPHIC, V_MATHEMATICAL, WHEN, WIDTH, WIDTHS, WORD_SPACING, WRAP, WRITING_MODE, X, X1, X2, XCHANNELSELECTOR, XLINK_ACTUATE, XLINK_ARCROLE, XLINK_HREF, XLINK_NS, XLINK_PREFIX, XLINK_ROLE, XLINK_SHOW, XLINK_TITLE, XLINK_TYPE, XMLNS, XMLNS_NS, XMLNS_PREFIX, XMLNS_XLINK, XML_BASE, XML_LANG, XML_NS, XML_PREFIX, XML_SPACE, XREF, X_HEIGHT, Y, Y1, Y2, YCHANNELSELECTOR, Z, ZOOMANDPAN;
+function $clinit_125(){
+  $clinit_125 = nullMethod;
+  $ElementName_0(new ElementName, null);
+  A = $ElementName(new ElementName, 'a', 'a', 1);
+  B = $ElementName(new ElementName, 'b', 'b', 45);
+  G = $ElementName(new ElementName, 'g', 'g', 0);
+  I = $ElementName(new ElementName, 'i', 'i', 45);
+  P = $ElementName(new ElementName, 'p', 'p', 536870941);
+  Q = $ElementName(new ElementName, 'q', 'q', 0);
+  S = $ElementName(new ElementName, 's', 's', 45);
+  U = $ElementName(new ElementName, 'u', 'u', 45);
+  BR = $ElementName(new ElementName, 'br', 'br', 536870916);
+  CI = $ElementName(new ElementName, 'ci', 'ci', 0);
+  CN = $ElementName(new ElementName, 'cn', 'cn', 0);
+  DD = $ElementName(new ElementName, 'dd', 'dd', 536870953);
+  DL = $ElementName(new ElementName, 'dl', 'dl', 536870958);
+  DT = $ElementName(new ElementName, 'dt', 'dt', 536870953);
+  EM = $ElementName(new ElementName, 'em', 'em', 45);
+  EQ = $ElementName(new ElementName, 'eq', 'eq', 0);
+  FN = $ElementName(new ElementName, 'fn', 'fn', 0);
+  H1 = $ElementName(new ElementName, 'h1', 'h1', 536870954);
+  H2 = $ElementName(new ElementName, 'h2', 'h2', 536870954);
+  H3 = $ElementName(new ElementName, 'h3', 'h3', 536870954);
+  H4 = $ElementName(new ElementName, 'h4', 'h4', 536870954);
+  H5 = $ElementName(new ElementName, 'h5', 'h5', 536870954);
+  H6 = $ElementName(new ElementName, 'h6', 'h6', 536870954);
+  GT = $ElementName(new ElementName, 'gt', 'gt', 0);
+  HR = $ElementName(new ElementName, 'hr', 'hr', 536870934);
+  IN_0 = $ElementName(new ElementName, 'in', 'in', 0);
+  LI = $ElementName(new ElementName, 'li', 'li', 536870927);
+  LN = $ElementName(new ElementName, 'ln', 'ln', 0);
+  LT = $ElementName(new ElementName, 'lt', 'lt', 0);
+  MI = $ElementName(new ElementName, 'mi', 'mi', 33554489);
+  MN = $ElementName(new ElementName, 'mn', 'mn', 33554489);
+  MO = $ElementName(new ElementName, 'mo', 'mo', 33554489);
+  MS = $ElementName(new ElementName, 'ms', 'ms', 33554489);
+  OL = $ElementName(new ElementName, 'ol', 'ol', 536870958);
+  OR = $ElementName(new ElementName, 'or', 'or', 0);
+  PI = $ElementName(new ElementName, 'pi', 'pi', 0);
+  RP = $ElementName(new ElementName, 'rp', 'rp', 53);
+  RT_0 = $ElementName(new ElementName, 'rt', 'rt', 53);
+  TD = $ElementName(new ElementName, 'td', 'td', 671088680);
+  TH = $ElementName(new ElementName, 'th', 'th', 671088680);
+  TR = $ElementName(new ElementName, 'tr', 'tr', 805306405);
+  TT = $ElementName(new ElementName, 'tt', 'tt', 45);
+  UL = $ElementName(new ElementName, 'ul', 'ul', 536870958);
+  AND = $ElementName(new ElementName, 'and', 'and', 0);
+  ARG = $ElementName(new ElementName, 'arg', 'arg', 0);
+  ABS = $ElementName(new ElementName, 'abs', 'abs', 0);
+  BIG = $ElementName(new ElementName, 'big', 'big', 45);
+  BDO = $ElementName(new ElementName, 'bdo', 'bdo', 0);
+  CSC = $ElementName(new ElementName, 'csc', 'csc', 0);
+  COL = $ElementName(new ElementName, 'col', 'col', 536870919);
+  COS = $ElementName(new ElementName, 'cos', 'cos', 0);
+  COT = $ElementName(new ElementName, 'cot', 'cot', 0);
+  DEL = $ElementName(new ElementName, 'del', 'del', 0);
+  DFN = $ElementName(new ElementName, 'dfn', 'dfn', 0);
+  DIR_0 = $ElementName(new ElementName, 'dir', 'dir', 536870963);
+  DIV = $ElementName(new ElementName, 'div', 'div', 536870962);
+  EXP = $ElementName(new ElementName, 'exp', 'exp', 0);
+  GCD = $ElementName(new ElementName, 'gcd', 'gcd', 0);
+  GEQ = $ElementName(new ElementName, 'geq', 'geq', 0);
+  IMG = $ElementName(new ElementName, 'img', 'img', 536870960);
+  INS = $ElementName(new ElementName, 'ins', 'ins', 0);
+  INT = $ElementName(new ElementName, 'int', 'int', 0);
+  KBD = $ElementName(new ElementName, 'kbd', 'kbd', 0);
+  LOG = $ElementName(new ElementName, 'log', 'log', 0);
+  LCM = $ElementName(new ElementName, 'lcm', 'lcm', 0);
+  LEQ = $ElementName(new ElementName, 'leq', 'leq', 0);
+  MTD = $ElementName(new ElementName, 'mtd', 'mtd', 0);
+  MIN_0 = $ElementName(new ElementName, 'min', 'min', 0);
+  MAP = $ElementName(new ElementName, 'map', 'map', 0);
+  MTR = $ElementName(new ElementName, 'mtr', 'mtr', 0);
+  MAX_0 = $ElementName(new ElementName, 'max', 'max', 0);
+  NEQ = $ElementName(new ElementName, 'neq', 'neq', 0);
+  NOT = $ElementName(new ElementName, 'not', 'not', 0);
+  NAV = $ElementName(new ElementName, 'nav', 'nav', 536870963);
+  PRE = $ElementName(new ElementName, 'pre', 'pre', 536870956);
+  REM = $ElementName(new ElementName, 'rem', 'rem', 0);
+  SUB = $ElementName(new ElementName, 'sub', 'sub', 52);
+  SEC = $ElementName(new ElementName, 'sec', 'sec', 0);
+  SVG = $ElementName(new ElementName, 'svg', 'svg', 19);
+  SUM = $ElementName(new ElementName, 'sum', 'sum', 0);
+  SIN = $ElementName(new ElementName, 'sin', 'sin', 0);
+  SEP = $ElementName(new ElementName, 'sep', 'sep', 0);
+  SUP = $ElementName(new ElementName, 'sup', 'sup', 52);
+  SET = $ElementName(new ElementName, 'set', 'set', 0);
+  TAN = $ElementName(new ElementName, 'tan', 'tan', 0);
+  USE = $ElementName(new ElementName, 'use', 'use', 0);
+  VAR = $ElementName(new ElementName, 'var', 'var', 52);
+  WBR = $ElementName(new ElementName, 'wbr', 'wbr', 536870961);
+  XMP = $ElementName(new ElementName, 'xmp', 'xmp', 38);
+  XOR = $ElementName(new ElementName, 'xor', 'xor', 0);
+  AREA = $ElementName(new ElementName, 'area', 'area', 536870961);
+  ABBR_0 = $ElementName(new ElementName, 'abbr', 'abbr', 0);
+  BASE_0 = $ElementName(new ElementName, 'base', 'base', 536870914);
+  BVAR = $ElementName(new ElementName, 'bvar', 'bvar', 0);
+  BODY = $ElementName(new ElementName, 'body', 'body', 536870915);
+  CARD = $ElementName(new ElementName, 'card', 'card', 0);
+  CODE_0 = $ElementName(new ElementName, 'code', 'code', 45);
+  CITE_0 = $ElementName(new ElementName, 'cite', 'cite', 0);
+  CSCH = $ElementName(new ElementName, 'csch', 'csch', 0);
+  COSH = $ElementName(new ElementName, 'cosh', 'cosh', 0);
+  COTH = $ElementName(new ElementName, 'coth', 'coth', 0);
+  CURL = $ElementName(new ElementName, 'curl', 'curl', 0);
+  DESC = $ElementName(new ElementName, 'desc', 'desc', 67108923);
+  DIFF = $ElementName(new ElementName, 'diff', 'diff', 0);
+  DEFS = $ElementName(new ElementName, 'defs', 'defs', 0);
+  FORM_0 = $ElementName(new ElementName, 'form', 'form', 536870921);
+  FONT = $ElementName(new ElementName, 'font', 'font', 64);
+  GRAD = $ElementName(new ElementName, 'grad', 'grad', 0);
+  HEAD = $ElementName(new ElementName, 'head', 'head', 536870932);
+  HTML_0 = $ElementName(new ElementName, 'html', 'html', 671088663);
+  LINE = $ElementName(new ElementName, 'line', 'line', 0);
+  LINK_0 = $ElementName(new ElementName, 'link', 'link', 536870928);
+  LIST_0 = $ElementName(new ElementName, 'list', 'list', 0);
+  META = $ElementName(new ElementName, 'meta', 'meta', 536870930);
+  MSUB = $ElementName(new ElementName, 'msub', 'msub', 0);
+  MODE_0 = $ElementName(new ElementName, 'mode', 'mode', 0);
+  MATH = $ElementName(new ElementName, 'math', 'math', 17);
+  MARK = $ElementName(new ElementName, 'mark', 'mark', 0);
+  MASK_0 = $ElementName(new ElementName, 'mask', 'mask', 0);
+  MEAN = $ElementName(new ElementName, 'mean', 'mean', 0);
+  MSUP = $ElementName(new ElementName, 'msup', 'msup', 0);
+  MENU = $ElementName(new ElementName, 'menu', 'menu', 536870962);
+  MROW = $ElementName(new ElementName, 'mrow', 'mrow', 0);
+  NONE = $ElementName(new ElementName, 'none', 'none', 0);
+  NOBR = $ElementName(new ElementName, 'nobr', 'nobr', 24);
+  NEST = $ElementName(new ElementName, 'nest', 'nest', 0);
+  PATH_0 = $ElementName(new ElementName, 'path', 'path', 0);
+  PLUS = $ElementName(new ElementName, 'plus', 'plus', 0);
+  RULE = $ElementName(new ElementName, 'rule', 'rule', 0);
+  REAL = $ElementName(new ElementName, 'real', 'real', 0);
+  RELN = $ElementName(new ElementName, 'reln', 'reln', 0);
+  RECT = $ElementName(new ElementName, 'rect', 'rect', 0);
+  ROOT = $ElementName(new ElementName, 'root', 'root', 0);
+  RUBY = $ElementName(new ElementName, 'ruby', 'ruby', 52);
+  SECH = $ElementName(new ElementName, 'sech', 'sech', 0);
+  SINH = $ElementName(new ElementName, 'sinh', 'sinh', 0);
+  SPAN_0 = $ElementName(new ElementName, 'span', 'span', 52);
+  SAMP = $ElementName(new ElementName, 'samp', 'samp', 0);
+  STOP = $ElementName(new ElementName, 'stop', 'stop', 0);
+  SDEV = $ElementName(new ElementName, 'sdev', 'sdev', 0);
+  TIME = $ElementName(new ElementName, 'time', 'time', 0);
+  TRUE = $ElementName(new ElementName, 'true', 'true', 0);
+  TREF = $ElementName(new ElementName, 'tref', 'tref', 0);
+  TANH = $ElementName(new ElementName, 'tanh', 'tanh', 0);
+  TEXT_0 = $ElementName(new ElementName, 'text', 'text', 0);
+  VIEW = $ElementName(new ElementName, 'view', 'view', 0);
+  ASIDE = $ElementName(new ElementName, 'aside', 'aside', 536870963);
+  AUDIO = $ElementName(new ElementName, 'audio', 'audio', 0);
+  APPLY = $ElementName(new ElementName, 'apply', 'apply', 0);
+  EMBED = $ElementName(new ElementName, 'embed', 'embed', 536870960);
+  FRAME_0 = $ElementName(new ElementName, 'frame', 'frame', 536870922);
+  FALSE = $ElementName(new ElementName, 'false', 'false', 0);
+  FLOOR = $ElementName(new ElementName, 'floor', 'floor', 0);
+  GLYPH = $ElementName(new ElementName, 'glyph', 'glyph', 0);
+  HKERN = $ElementName(new ElementName, 'hkern', 'hkern', 0);
+  IMAGE = $ElementName(new ElementName, 'image', 'image', 536870924);
+  IDENT = $ElementName(new ElementName, 'ident', 'ident', 0);
+  INPUT = $ElementName(new ElementName, 'input', 'input', 536870925);
+  LABEL_0 = $ElementName(new ElementName, 'label', 'label', 62);
+  LIMIT = $ElementName(new ElementName, 'limit', 'limit', 0);
+  MFRAC = $ElementName(new ElementName, 'mfrac', 'mfrac', 0);
+  MPATH = $ElementName(new ElementName, 'mpath', 'mpath', 0);
+  METER = $ElementName(new ElementName, 'meter', 'meter', 0);
+  MOVER = $ElementName(new ElementName, 'mover', 'mover', 0);
+  MINUS = $ElementName(new ElementName, 'minus', 'minus', 0);
+  MROOT = $ElementName(new ElementName, 'mroot', 'mroot', 0);
+  MSQRT = $ElementName(new ElementName, 'msqrt', 'msqrt', 0);
+  MTEXT = $ElementName(new ElementName, 'mtext', 'mtext', 33554489);
+  NOTIN = $ElementName(new ElementName, 'notin', 'notin', 0);
+  PIECE = $ElementName(new ElementName, 'piece', 'piece', 0);
+  PARAM = $ElementName(new ElementName, 'param', 'param', 536870967);
+  POWER = $ElementName(new ElementName, 'power', 'power', 0);
+  REALS = $ElementName(new ElementName, 'reals', 'reals', 0);
+  STYLE_0 = $ElementName(new ElementName, 'style', 'style', 536870945);
+  SMALL = $ElementName(new ElementName, 'small', 'small', 45);
+  THEAD = $ElementName(new ElementName, 'thead', 'thead', 805306407);
+  TABLE = $ElementName(new ElementName, 'table', 'table', 939524130);
+  TITLE_0 = $ElementName(new ElementName, 'title', 'title', 603979812);
+  TSPAN = $ElementName(new ElementName, 'tspan', 'tspan', 0);
+  TIMES = $ElementName(new ElementName, 'times', 'times', 0);
+  TFOOT = $ElementName(new ElementName, 'tfoot', 'tfoot', 805306407);
+  TBODY = $ElementName(new ElementName, 'tbody', 'tbody', 805306407);
+  UNION = $ElementName(new ElementName, 'union', 'union', 0);
+  VKERN = $ElementName(new ElementName, 'vkern', 'vkern', 0);
+  VIDEO = $ElementName(new ElementName, 'video', 'video', 0);
+  ARCSEC = $ElementName(new ElementName, 'arcsec', 'arcsec', 0);
+  ARCCSC = $ElementName(new ElementName, 'arccsc', 'arccsc', 0);
+  ARCTAN = $ElementName(new ElementName, 'arctan', 'arctan', 0);
+  ARCSIN = $ElementName(new ElementName, 'arcsin', 'arcsin', 0);
+  ARCCOS = $ElementName(new ElementName, 'arccos', 'arccos', 0);
+  APPLET = $ElementName(new ElementName, 'applet', 'applet', 671088683);
+  ARCCOT = $ElementName(new ElementName, 'arccot', 'arccot', 0);
+  APPROX = $ElementName(new ElementName, 'approx', 'approx', 0);
+  BUTTON = $ElementName(new ElementName, 'button', 'button', 536870917);
+  CIRCLE = $ElementName(new ElementName, 'circle', 'circle', 0);
+  CENTER = $ElementName(new ElementName, 'center', 'center', 536870962);
+  CURSOR_0 = $ElementName(new ElementName, 'cursor', 'cursor', 0);
+  CANVAS = $ElementName(new ElementName, 'canvas', 'canvas', 0);
+  DIVIDE = $ElementName(new ElementName, 'divide', 'divide', 0);
+  DEGREE = $ElementName(new ElementName, 'degree', 'degree', 0);
+  DOMAIN = $ElementName(new ElementName, 'domain', 'domain', 0);
+  EXISTS = $ElementName(new ElementName, 'exists', 'exists', 0);
+  FETILE = $ElementName(new ElementName, 'fetile', 'feTile', 0);
+  FIGURE = $ElementName(new ElementName, 'figure', 'figure', 536870963);
+  FORALL = $ElementName(new ElementName, 'forall', 'forall', 0);
+  FILTER_0 = $ElementName(new ElementName, 'filter', 'filter', 0);
+  FOOTER = $ElementName(new ElementName, 'footer', 'footer', 536870963);
+  HGROUP = $ElementName(new ElementName, 'hgroup', 'hgroup', 536870963);
+  HEADER = $ElementName(new ElementName, 'header', 'header', 536870963);
+  IFRAME = $ElementName(new ElementName, 'iframe', 'iframe', 536870959);
+  KEYGEN = $ElementName(new ElementName, 'keygen', 'keygen', 536870977);
+  LAMBDA = $ElementName(new ElementName, 'lambda', 'lambda', 0);
+  LEGEND = $ElementName(new ElementName, 'legend', 'legend', 0);
+  MSPACE = $ElementName(new ElementName, 'mspace', 'mspace', 0);
+  MTABLE = $ElementName(new ElementName, 'mtable', 'mtable', 0);
+  MSTYLE = $ElementName(new ElementName, 'mstyle', 'mstyle', 0);
+  MGLYPH = $ElementName(new ElementName, 'mglyph', 'mglyph', 56);
+  MEDIAN = $ElementName(new ElementName, 'median', 'median', 0);
+  MUNDER = $ElementName(new ElementName, 'munder', 'munder', 0);
+  MARKER = $ElementName(new ElementName, 'marker', 'marker', 0);
+  MERROR = $ElementName(new ElementName, 'merror', 'merror', 0);
+  MOMENT = $ElementName(new ElementName, 'moment', 'moment', 0);
+  MATRIX = $ElementName(new ElementName, 'matrix', 'matrix', 0);
+  OPTION = $ElementName(new ElementName, 'option', 'option', 28);
+  OBJECT_0 = $ElementName(new ElementName, 'object', 'object', 671088703);
+  OUTPUT = $ElementName(new ElementName, 'output', 'output', 62);
+  PRIMES = $ElementName(new ElementName, 'primes', 'primes', 0);
+  SOURCE = $ElementName(new ElementName, 'source', 'source', 55);
+  STRIKE = $ElementName(new ElementName, 'strike', 'strike', 45);
+  STRONG = $ElementName(new ElementName, 'strong', 'strong', 45);
+  SWITCH = $ElementName(new ElementName, 'switch', 'switch', 0);
+  SYMBOL = $ElementName(new ElementName, 'symbol', 'symbol', 0);
+  SELECT = $ElementName(new ElementName, 'select', 'select', 536870944);
+  SUBSET = $ElementName(new ElementName, 'subset', 'subset', 0);
+  SCRIPT = $ElementName(new ElementName, 'script', 'script', 536870943);
+  TBREAK = $ElementName(new ElementName, 'tbreak', 'tbreak', 0);
+  VECTOR = $ElementName(new ElementName, 'vector', 'vector', 0);
+  ARTICLE = $ElementName(new ElementName, 'article', 'article', 536870963);
+  ANIMATE = $ElementName(new ElementName, 'animate', 'animate', 0);
+  ARCSECH = $ElementName(new ElementName, 'arcsech', 'arcsech', 0);
+  ARCCSCH = $ElementName(new ElementName, 'arccsch', 'arccsch', 0);
+  ARCTANH = $ElementName(new ElementName, 'arctanh', 'arctanh', 0);
+  ARCSINH = $ElementName(new ElementName, 'arcsinh', 'arcsinh', 0);
+  ARCCOSH = $ElementName(new ElementName, 'arccosh', 'arccosh', 0);
+  ARCCOTH = $ElementName(new ElementName, 'arccoth', 'arccoth', 0);
+  ACRONYM = $ElementName(new ElementName, 'acronym', 'acronym', 0);
+  ADDRESS = $ElementName(new ElementName, 'address', 'address', 536870963);
+  BGSOUND = $ElementName(new ElementName, 'bgsound', 'bgsound', 536870928);
+  COMMAND = $ElementName(new ElementName, 'command', 'command', 536870966);
+  COMPOSE = $ElementName(new ElementName, 'compose', 'compose', 0);
+  CEILING = $ElementName(new ElementName, 'ceiling', 'ceiling', 0);
+  CSYMBOL = $ElementName(new ElementName, 'csymbol', 'csymbol', 0);
+  CAPTION = $ElementName(new ElementName, 'caption', 'caption', 671088646);
+  DISCARD = $ElementName(new ElementName, 'discard', 'discard', 0);
+  DECLARE_0 = $ElementName(new ElementName, 'declare', 'declare', 0);
+  DETAILS = $ElementName(new ElementName, 'details', 'details', 536870963);
+  ELLIPSE = $ElementName(new ElementName, 'ellipse', 'ellipse', 0);
+  FEFUNCA = $ElementName(new ElementName, 'fefunca', 'feFuncA', 0);
+  FEFUNCB = $ElementName(new ElementName, 'fefuncb', 'feFuncB', 0);
+  FEBLEND = $ElementName(new ElementName, 'feblend', 'feBlend', 0);
+  FEFLOOD = $ElementName(new ElementName, 'feflood', 'feFlood', 0);
+  FEIMAGE = $ElementName(new ElementName, 'feimage', 'feImage', 0);
+  FEMERGE = $ElementName(new ElementName, 'femerge', 'feMerge', 0);
+  FEFUNCG = $ElementName(new ElementName, 'fefuncg', 'feFuncG', 0);
+  FEFUNCR = $ElementName(new ElementName, 'fefuncr', 'feFuncR', 0);
+  HANDLER = $ElementName(new ElementName, 'handler', 'handler', 0);
+  INVERSE = $ElementName(new ElementName, 'inverse', 'inverse', 0);
+  IMPLIES = $ElementName(new ElementName, 'implies', 'implies', 0);
+  ISINDEX = $ElementName(new ElementName, 'isindex', 'isindex', 536870926);
+  LOGBASE = $ElementName(new ElementName, 'logbase', 'logbase', 0);
+  LISTING = $ElementName(new ElementName, 'listing', 'listing', 536870956);
+  MFENCED = $ElementName(new ElementName, 'mfenced', 'mfenced', 0);
+  MPADDED = $ElementName(new ElementName, 'mpadded', 'mpadded', 0);
+  MARQUEE = $ElementName(new ElementName, 'marquee', 'marquee', 671088683);
+  MACTION = $ElementName(new ElementName, 'maction', 'maction', 0);
+  MSUBSUP = $ElementName(new ElementName, 'msubsup', 'msubsup', 0);
+  NOEMBED = $ElementName(new ElementName, 'noembed', 'noembed', 536870972);
+  POLYGON = $ElementName(new ElementName, 'polygon', 'polygon', 0);
+  PATTERN_0 = $ElementName(new ElementName, 'pattern', 'pattern', 0);
+  PRODUCT = $ElementName(new ElementName, 'product', 'product', 0);
+  SETDIFF = $ElementName(new ElementName, 'setdiff', 'setdiff', 0);
+  SECTION = $ElementName(new ElementName, 'section', 'section', 536870963);
+  SUMMARY_0 = $ElementName(new ElementName, 'summary', 'summary', 536870963);
+  TENDSTO = $ElementName(new ElementName, 'tendsto', 'tendsto', 0);
+  UPLIMIT = $ElementName(new ElementName, 'uplimit', 'uplimit', 0);
+  ALTGLYPH = $ElementName(new ElementName, 'altglyph', 'altGlyph', 0);
+  BASEFONT = $ElementName(new ElementName, 'basefont', 'basefont', 536870928);
+  CLIPPATH = $ElementName(new ElementName, 'clippath', 'clipPath', 0);
+  CODOMAIN = $ElementName(new ElementName, 'codomain', 'codomain', 0);
+  COLGROUP = $ElementName(new ElementName, 'colgroup', 'colgroup', 536870920);
+  EMPTYSET = $ElementName(new ElementName, 'emptyset', 'emptyset', 0);
+  FACTOROF = $ElementName(new ElementName, 'factorof', 'factorof', 0);
+  FIELDSET = $ElementName(new ElementName, 'fieldset', 'fieldset', 536870973);
+  FRAMESET = $ElementName(new ElementName, 'frameset', 'frameset', 536870923);
+  FEOFFSET = $ElementName(new ElementName, 'feoffset', 'feOffset', 0);
+  GLYPHREF_0 = $ElementName(new ElementName, 'glyphref', 'glyphRef', 0);
+  INTERVAL = $ElementName(new ElementName, 'interval', 'interval', 0);
+  INTEGERS = $ElementName(new ElementName, 'integers', 'integers', 0);
+  INFINITY = $ElementName(new ElementName, 'infinity', 'infinity', 0);
+  LISTENER = $ElementName(new ElementName, 'listener', 'listener', 0);
+  LOWLIMIT = $ElementName(new ElementName, 'lowlimit', 'lowlimit', 0);
+  METADATA = $ElementName(new ElementName, 'metadata', 'metadata', 0);
+  MENCLOSE = $ElementName(new ElementName, 'menclose', 'menclose', 0);
+  MPHANTOM = $ElementName(new ElementName, 'mphantom', 'mphantom', 0);
+  NOFRAMES = $ElementName(new ElementName, 'noframes', 'noframes', 536870937);
+  NOSCRIPT = $ElementName(new ElementName, 'noscript', 'noscript', 536870938);
+  OPTGROUP = $ElementName(new ElementName, 'optgroup', 'optgroup', 536870939);
+  POLYLINE = $ElementName(new ElementName, 'polyline', 'polyline', 0);
+  PREFETCH = $ElementName(new ElementName, 'prefetch', 'prefetch', 0);
+  PROGRESS = $ElementName(new ElementName, 'progress', 'progress', 0);
+  PRSUBSET = $ElementName(new ElementName, 'prsubset', 'prsubset', 0);
+  QUOTIENT = $ElementName(new ElementName, 'quotient', 'quotient', 0);
+  SELECTOR = $ElementName(new ElementName, 'selector', 'selector', 0);
+  TEXTAREA = $ElementName(new ElementName, 'textarea', 'textarea', 536870947);
+  TEXTPATH = $ElementName(new ElementName, 'textpath', 'textPath', 0);
+  VARIANCE = $ElementName(new ElementName, 'variance', 'variance', 0);
+  ANIMATION = $ElementName(new ElementName, 'animation', 'animation', 0);
+  CONJUGATE = $ElementName(new ElementName, 'conjugate', 'conjugate', 0);
+  CONDITION = $ElementName(new ElementName, 'condition', 'condition', 0);
+  COMPLEXES = $ElementName(new ElementName, 'complexes', 'complexes', 0);
+  FONT_FACE = $ElementName(new ElementName, 'font-face', 'font-face', 0);
+  FACTORIAL = $ElementName(new ElementName, 'factorial', 'factorial', 0);
+  INTERSECT = $ElementName(new ElementName, 'intersect', 'intersect', 0);
+  IMAGINARY = $ElementName(new ElementName, 'imaginary', 'imaginary', 0);
+  LAPLACIAN = $ElementName(new ElementName, 'laplacian', 'laplacian', 0);
+  MATRIXROW = $ElementName(new ElementName, 'matrixrow', 'matrixrow', 0);
+  NOTSUBSET = $ElementName(new ElementName, 'notsubset', 'notsubset', 0);
+  OTHERWISE = $ElementName(new ElementName, 'otherwise', 'otherwise', 0);
+  PIECEWISE = $ElementName(new ElementName, 'piecewise', 'piecewise', 0);
+  PLAINTEXT = $ElementName(new ElementName, 'plaintext', 'plaintext', 536870942);
+  RATIONALS = $ElementName(new ElementName, 'rationals', 'rationals', 0);
+  SEMANTICS = $ElementName(new ElementName, 'semantics', 'semantics', 0);
+  TRANSPOSE = $ElementName(new ElementName, 'transpose', 'transpose', 0);
+  ANNOTATION = $ElementName(new ElementName, 'annotation', 'annotation', 0);
+  BLOCKQUOTE = $ElementName(new ElementName, 'blockquote', 'blockquote', 536870962);
+  DIVERGENCE = $ElementName(new ElementName, 'divergence', 'divergence', 0);
+  EULERGAMMA = $ElementName(new ElementName, 'eulergamma', 'eulergamma', 0);
+  EQUIVALENT = $ElementName(new ElementName, 'equivalent', 'equivalent', 0);
+  FIGCAPTION = $ElementName(new ElementName, 'figcaption', 'figcaption', 536870963);
+  IMAGINARYI = $ElementName(new ElementName, 'imaginaryi', 'imaginaryi', 0);
+  MALIGNMARK = $ElementName(new ElementName, 'malignmark', 'malignmark', 56);
+  MUNDEROVER = $ElementName(new ElementName, 'munderover', 'munderover', 0);
+  MLABELEDTR = $ElementName(new ElementName, 'mlabeledtr', 'mlabeledtr', 0);
+  NOTANUMBER = $ElementName(new ElementName, 'notanumber', 'notanumber', 0);
+  SOLIDCOLOR = $ElementName(new ElementName, 'solidcolor', 'solidcolor', 0);
+  ALTGLYPHDEF = $ElementName(new ElementName, 'altglyphdef', 'altGlyphDef', 0);
+  DETERMINANT = $ElementName(new ElementName, 'determinant', 'determinant', 0);
+  FEMERGENODE = $ElementName(new ElementName, 'femergenode', 'feMergeNode', 0);
+  FECOMPOSITE = $ElementName(new ElementName, 'fecomposite', 'feComposite', 0);
+  FESPOTLIGHT = $ElementName(new ElementName, 'fespotlight', 'feSpotLight', 0);
+  MALIGNGROUP = $ElementName(new ElementName, 'maligngroup', 'maligngroup', 0);
+  MPRESCRIPTS = $ElementName(new ElementName, 'mprescripts', 'mprescripts', 0);
+  MOMENTABOUT = $ElementName(new ElementName, 'momentabout', 'momentabout', 0);
+  NOTPRSUBSET = $ElementName(new ElementName, 'notprsubset', 'notprsubset', 0);
+  PARTIALDIFF = $ElementName(new ElementName, 'partialdiff', 'partialdiff', 0);
+  ALTGLYPHITEM = $ElementName(new ElementName, 'altglyphitem', 'altGlyphItem', 0);
+  ANIMATECOLOR = $ElementName(new ElementName, 'animatecolor', 'animateColor', 0);
+  DATATEMPLATE = $ElementName(new ElementName, 'datatemplate', 'datatemplate', 0);
+  EXPONENTIALE = $ElementName(new ElementName, 'exponentiale', 'exponentiale', 0);
+  FETURBULENCE = $ElementName(new ElementName, 'feturbulence', 'feTurbulence', 0);
+  FEPOINTLIGHT = $ElementName(new ElementName, 'fepointlight', 'fePointLight', 0);
+  FEMORPHOLOGY = $ElementName(new ElementName, 'femorphology', 'feMorphology', 0);
+  OUTERPRODUCT = $ElementName(new ElementName, 'outerproduct', 'outerproduct', 0);
+  ANIMATEMOTION = $ElementName(new ElementName, 'animatemotion', 'animateMotion', 0);
+  COLOR_PROFILE_0 = $ElementName(new ElementName, 'color-profile', 'color-profile', 0);
+  FONT_FACE_SRC = $ElementName(new ElementName, 'font-face-src', 'font-face-src', 0);
+  FONT_FACE_URI = $ElementName(new ElementName, 'font-face-uri', 'font-face-uri', 0);
+  FOREIGNOBJECT = $ElementName(new ElementName, 'foreignobject', 'foreignObject', 67108923);
+  FECOLORMATRIX = $ElementName(new ElementName, 'fecolormatrix', 'feColorMatrix', 0);
+  MISSING_GLYPH = $ElementName(new ElementName, 'missing-glyph', 'missing-glyph', 0);
+  MMULTISCRIPTS = $ElementName(new ElementName, 'mmultiscripts', 'mmultiscripts', 0);
+  SCALARPRODUCT = $ElementName(new ElementName, 'scalarproduct', 'scalarproduct', 0);
+  VECTORPRODUCT = $ElementName(new ElementName, 'vectorproduct', 'vectorproduct', 0);
+  ANNOTATION_XML = $ElementName(new ElementName, 'annotation-xml', 'annotation-xml', 33554490);
+  DEFINITION_SRC = $ElementName(new ElementName, 'definition-src', 'definition-src', 0);
+  FONT_FACE_NAME = $ElementName(new ElementName, 'font-face-name', 'font-face-name', 0);
+  FEGAUSSIANBLUR = $ElementName(new ElementName, 'fegaussianblur', 'feGaussianBlur', 0);
+  FEDISTANTLIGHT = $ElementName(new ElementName, 'fedistantlight', 'feDistantLight', 0);
+  LINEARGRADIENT = $ElementName(new ElementName, 'lineargradient', 'linearGradient', 0);
+  NATURALNUMBERS = $ElementName(new ElementName, 'naturalnumbers', 'naturalnumbers', 0);
+  RADIALGRADIENT = $ElementName(new ElementName, 'radialgradient', 'radialGradient', 0);
+  ANIMATETRANSFORM = $ElementName(new ElementName, 'animatetransform', 'animateTransform', 0);
+  CARTESIANPRODUCT = $ElementName(new ElementName, 'cartesianproduct', 'cartesianproduct', 0);
+  FONT_FACE_FORMAT = $ElementName(new ElementName, 'font-face-format', 'font-face-format', 0);
+  FECONVOLVEMATRIX = $ElementName(new ElementName, 'feconvolvematrix', 'feConvolveMatrix', 0);
+  FEDIFFUSELIGHTING = $ElementName(new ElementName, 'fediffuselighting', 'feDiffuseLighting', 0);
+  FEDISPLACEMENTMAP = $ElementName(new ElementName, 'fedisplacementmap', 'feDisplacementMap', 0);
+  FESPECULARLIGHTING = $ElementName(new ElementName, 'fespecularlighting', 'feSpecularLighting', 0);
+  DOMAINOFAPPLICATION = $ElementName(new ElementName, 'domainofapplication', 'domainofapplication', 0);
+  FECOMPONENTTRANSFER = $ElementName(new ElementName, 'fecomponenttransfer', 'feComponentTransfer', 0);
+  ELEMENT_NAMES = initValues(_3Lnu_validator_htmlparser_impl_ElementName_2_classLit, 60, 14, [A, B, G, I, P, Q, S, U, BR, CI, CN, DD, DL, DT, EM, EQ, FN, H1, H2, H3, H4, H5, H6, GT, HR, IN_0, LI, LN, LT, MI, MN, MO, MS, OL, OR, PI, RP, RT_0, TD, TH, TR, TT, UL, AND, ARG, ABS, BIG, BDO, CSC, COL, COS, COT, DEL, DFN, DIR_0, DIV, EXP, GCD, GEQ, IMG, INS, INT, KBD, LOG, LCM, LEQ, MTD, MIN_0, MAP, MTR, MAX_0, NEQ, NOT, NAV, PRE, REM, SUB, SEC, SVG, SUM, SIN, SEP, SUP, SET, TAN, USE, VAR, WBR, XMP, XOR, AREA, ABBR_0, BASE_0, BVAR, BODY, CARD, CODE_0, CITE_0, CSCH, COSH, COTH, CURL, DESC, DIFF, DEFS, FORM_0, FONT, GRAD, HEAD, HTML_0, LINE, LINK_0, LIST_0, META, MSUB, MODE_0, MATH, MARK, MASK_0, MEAN, MSUP, MENU, MROW, NONE, NOBR, NEST, PATH_0, PLUS, RULE, REAL, RELN, RECT, ROOT, RUBY, SECH, SINH, SPAN_0, SAMP, STOP, SDEV, TIME, TRUE, TREF, TANH, TEXT_0, VIEW, ASIDE, AUDIO, APPLY, EMBED, FRAME_0, FALSE, FLOOR, GLYPH, HKERN, IMAGE, IDENT, INPUT, LABEL_0, LIMIT, MFRAC, MPATH, METER, MOVER, MINUS, MROOT, MSQRT, MTEXT, NOTIN, PIECE, PARAM, POWER, REALS, STYLE_0, SMALL, THEAD, TABLE, TITLE_0, TSPAN, TIMES, TFOOT, TBODY, UNION, VKERN, VIDEO, ARCSEC, ARCCSC, ARCTAN, ARCSIN, ARCCOS, APPLET, ARCCOT, APPROX, BUTTON, CIRCLE, CENTER, CURSOR_0, CANVAS, DIVIDE, DEGREE, DOMAIN, EXISTS, FETILE, FIGURE, FORALL, FILTER_0, FOOTER, HGROUP, HEADER, IFRAME, KEYGEN, LAMBDA, LEGEND, MSPACE, MTABLE, MSTYLE, MGLYPH, MEDIAN, MUNDER, MARKER, MERROR, MOMENT, MATRIX, OPTION, OBJECT_0, OUTPUT, PRIMES, SOURCE, STRIKE, STRONG, SWITCH, SYMBOL, SELECT, SUBSET, SCRIPT, TBREAK, VECTOR, ARTICLE, ANIMATE, ARCSECH, ARCCSCH, ARCTANH, ARCSINH, ARCCOSH, ARCCOTH, ACRONYM, ADDRESS, BGSOUND, COMMAND, COMPOSE, CEILING, CSYMBOL, CAPTION, DISCARD, DECLARE_0, DETAILS, ELLIPSE, FEFUNCA, FEFUNCB, FEBLEND, FEFLOOD, FEIMAGE, FEMERGE, FEFUNCG, FEFUNCR, HANDLER, INVERSE, IMPLIES, ISINDEX, LOGBASE, LISTING, MFENCED, MPADDED, MARQUEE, MACTION, MSUBSUP, NOEMBED, POLYGON, PATTERN_0, PRODUCT, SETDIFF, SECTION, SUMMARY_0, TENDSTO, UPLIMIT, ALTGLYPH, BASEFONT, CLIPPATH, CODOMAIN, COLGROUP, EMPTYSET, FACTOROF, FIELDSET, FRAMESET, FEOFFSET, GLYPHREF_0, INTERVAL, INTEGERS, INFINITY, LISTENER, LOWLIMIT, METADATA, MENCLOSE, MPHANTOM, NOFRAMES, NOSCRIPT, OPTGROUP, POLYLINE, PREFETCH, PROGRESS, PRSUBSET, QUOTIENT, SELECTOR, TEXTAREA, TEXTPATH, VARIANCE, ANIMATION, CONJUGATE, CONDITION, COMPLEXES, FONT_FACE, FACTORIAL, INTERSECT, IMAGINARY, LAPLACIAN, MATRIXROW, NOTSUBSET, OTHERWISE, PIECEWISE, PLAINTEXT, RATIONALS, SEMANTICS, TRANSPOSE, ANNOTATION, BLOCKQUOTE, DIVERGENCE, EULERGAMMA, EQUIVALENT, FIGCAPTION, IMAGINARYI, MALIGNMARK, MUNDEROVER, MLABELEDTR, NOTANUMBER, SOLIDCOLOR, ALTGLYPHDEF, DETERMINANT, FEMERGENODE, FECOMPOSITE, FESPOTLIGHT, MALIGNGROUP, MPRESCRIPTS, MOMENTABOUT, NOTPRSUBSET, PARTIALDIFF, ALTGLYPHITEM, ANIMATECOLOR, DATATEMPLATE, EXPONENTIALE, FETURBULENCE, FEPOINTLIGHT, FEMORPHOLOGY, OUTERPRODUCT, ANIMATEMOTION, COLOR_PROFILE_0, FONT_FACE_SRC, FONT_FACE_URI, FOREIGNOBJECT, FECOLORMATRIX, MISSING_GLYPH, MMULTISCRIPTS, SCALARPRODUCT, VECTORPRODUCT, ANNOTATION_XML, DEFINITION_SRC, FONT_FACE_NAME, FEGAUSSIANBLUR, FEDISTANTLIGHT, LINEARGRADIENT, NATURALNUMBERS, RADIALGRADIENT, ANIMATETRANSFORM, CARTESIANPRODUCT, FONT_FACE_FORMAT, FECONVOLVEMATRIX, FEDIFFUSELIGHTING, FEDISPLACEMENTMAP, FESPECULARLIGHTING, DOMAINOFAPPLICATION, FECOMPONENTTRANSFER]);
+  ELEMENT_HASHES = initValues(_3I_classLit, 48, -1, [1057, 1090, 1255, 1321, 1552, 1585, 1651, 1717, 68162, 68899, 69059, 69764, 70020, 70276, 71077, 71205, 72134, 72232, 72264, 72296, 72328, 72360, 72392, 73351, 74312, 75209, 78124, 78284, 78476, 79149, 79309, 79341, 79469, 81295, 81487, 82224, 84498, 84626, 86164, 86292, 86612, 86676, 87445, 3183041, 3186241, 3198017, 3218722, 3226754, 3247715, 3256803, 3263971, 3264995, 3289252, 3291332, 3295524, 3299620, 3326725, 3379303, 3392679, 3448233, 3460553, 3461577, 3510347, 3546604, 3552364, 3556524, 3576461, 3586349, 3588141, 3590797, 3596333, 3622062, 3625454, 3627054, 3675728, 3749042, 3771059, 3771571, 3776211, 3782323, 3782963, 3784883, 3785395, 3788979, 3815476, 3839605, 3885110, 3917911, 3948984, 3951096, 135304769, 135858241, 136498210, 136906434, 137138658, 137512995, 137531875, 137548067, 137629283, 137645539, 137646563, 137775779, 138529956, 138615076, 139040932, 140954086, 141179366, 141690439, 142738600, 143013512, 146979116, 147175724, 147475756, 147902637, 147936877, 148017645, 148131885, 148228141, 148229165, 148309165, 148395629, 148551853, 148618829, 149076462, 149490158, 149572782, 151277616, 151639440, 153268914, 153486514, 153563314, 153750706, 153763314, 153914034, 154406067, 154417459, 154600979, 154678323, 154680979, 154866835, 155366708, 155375188, 155391572, 155465780, 155869364, 158045494, 168988979, 169321621, 169652752, 173151309, 174240818, 174247297, 174669292, 175391532, 176638123, 177380397, 177879204, 177886734, 180753473, 181020073, 181503558, 181686320, 181999237, 181999311, 182048201, 182074866, 182078003, 182083764, 182920847, 184716457, 184976961, 185145071, 187281445, 187872052, 188100653, 188875944, 188919873, 188920457, 189203987, 189371817, 189414886, 189567458, 190266670, 191318187, 191337609, 202479203, 202493027, 202835587, 202843747, 203013219, 203036048, 203045987, 203177552, 203898516, 204648562, 205067918, 205078130, 205096654, 205689142, 205690439, 205988909, 207213161, 207794484, 207800999, 208023602, 208213644, 208213647, 210261490, 210310273, 210940978, 213325049, 213946445, 214055079, 215125040, 215134273, 215135028, 215237420, 215418148, 215553166, 215553394, 215563858, 215627949, 215754324, 217529652, 217713834, 217732628, 218731945, 221417045, 221424946, 221493746, 221515401, 221658189, 221908140, 221910626, 221921586, 222659762, 225001091, 236105833, 236113965, 236194995, 236195427, 236206132, 236206387, 236211683, 236212707, 236381647, 236571826, 237124271, 238172205, 238210544, 238270764, 238435405, 238501172, 239224867, 239257644, 239710497, 240307721, 241208789, 241241557, 241318060, 241319404, 241343533, 241344069, 241405397, 241765845, 243864964, 244502085, 244946220, 245109902, 247647266, 247707956, 248648814, 248648836, 248682161, 248986932, 249058914, 249697357, 252132601, 252135604, 252317348, 255007012, 255278388, 255641645, 256365156, 257566121, 269763372, 271202790, 271863856, 272049197, 272127474, 274339449, 274939471, 275388004, 275388005, 275388006, 275977800, 278267602, 278513831, 278712622, 281613765, 281683369, 282120228, 282250732, 282508942, 283743649, 283787570, 284710386, 285391148, 285478533, 285854898, 285873762, 286931113, 288964227, 289445441, 289689648, 291671489, 303512884, 305319975, 305610036, 305764101, 308448294, 308675890, 312085683, 312264750, 315032867, 316391000, 317331042, 317902135, 318950711, 319447220, 321499182, 322538804, 323145200, 337067316, 337826293, 339905989, 340833697, 341457068, 342310196, 345302593, 349554733, 349771471, 349786245, 350819405, 356072847, 370349192, 373962798, 375558638, 375574835, 376053993, 383276530, 383373833, 383407586, 384439906, 386079012, 404133513, 404307343, 407031852, 408072233, 409112005, 409608425, 409771500, 419040932, 437730612, 439529766, 442616365, 442813037, 443157674, 443295316, 450118444, 450482697, 456789668, 459935396, 471217869, 474073645, 476230702, 476665218, 476717289, 483014825, 485083298, 489306281, 538364390, 540675748, 543819186, 543958612, 576960820, 577242548, 610515252, 642202932, 644420819]);
+}
+
+function $ElementName(this$static, name_0, camelCaseName, flags){
+  $clinit_125();
+  this$static.name_0 = name_0;
+  this$static.camelCaseName = camelCaseName;
+  this$static.flags = flags;
+  return this$static;
+}
+
+function $ElementName_0(this$static, name_0){
+  $clinit_125();
+  this$static.name_0 = name_0;
+  this$static.camelCaseName = name_0;
+  this$static.flags = 1073741824;
+  return this$static;
+}
+
+function bufToHash_0(buf, len){
+  var hash, i, j;
+  hash = len;
+  hash <<= 5;
+  hash += buf[0] - 96;
+  j = len;
+  for (i = 0; i < 4 && j > 0; ++i) {
+    --j;
+    hash <<= 5;
+    hash += buf[j] - 96;
+  }
+  return hash;
+}
+
+function elementNameByBuffer(buf, offset, length_0){
+  var end, end_0;
+  $clinit_125();
+  var elementName, hash, index, name_0;
+  hash = bufToHash_0(buf, length_0);
+  index = binarySearch(ELEMENT_HASHES, hash);
+  if (index < 0) {
+    return $ElementName_0(new ElementName, String((end = offset + length_0 , __checkBounds(buf.length, offset, end) , __valueOf(buf, offset, end))));
+  }
+   else {
+    elementName = ELEMENT_NAMES[index];
+    name_0 = elementName.name_0;
+    if (!localEqualsBuffer(name_0, buf, offset, length_0)) {
+      return $ElementName_0(new ElementName, String((end_0 = offset + length_0 , __checkBounds(buf.length, offset, end_0) , __valueOf(buf, offset, end_0))));
+    }
+    return elementName;
+  }
+}
+
+function getClass_68(){
+  return Lnu_validator_htmlparser_impl_ElementName_2_classLit;
+}
+
+function ElementName(){
+}
+
+_ = ElementName.prototype = new Object_0;
+_.getClass$ = getClass_68;
+_.typeId$ = 40;
+_.camelCaseName = null;
+_.flags = 0;
+_.name_0 = null;
+var A, ABBR_0, ABS, ACRONYM, ADDRESS, ALTGLYPH, ALTGLYPHDEF, ALTGLYPHITEM, AND, ANIMATE, ANIMATECOLOR, ANIMATEMOTION, ANIMATETRANSFORM, ANIMATION, ANNOTATION, ANNOTATION_XML, APPLET, APPLY, APPROX, ARCCOS, ARCCOSH, ARCCOT, ARCCOTH, ARCCSC, ARCCSCH, ARCSEC, ARCSECH, ARCSIN, ARCSINH, ARCTAN, ARCTANH, AREA, ARG, ARTICLE, ASIDE, AUDIO, B, BASE_0, BASEFONT, BDO, BGSOUND, BIG, BLOCKQUOTE, BODY, BR, BUTTON, BVAR, CANVAS, CAPTION, CARD, CARTESIANPRODUCT, CEILING, CENTER, CI, CIRCLE, CITE_0, CLIPPATH, CN, CODE_0, CODOMAIN, COL, COLGROUP, COLOR_PROFILE_0, COMMAND, COMPLEXES, COMPOSE, CONDITION, CONJUGATE, COS, COSH, COT, COTH, CSC, CSCH, CSYMBOL, CURL, CURSOR_0, DATATEMPLATE, DD, DECLARE_0, DEFINITION_SRC, DEFS, DEGREE, DEL, DESC, DETAILS, DETERMINANT, DFN, DIFF, DIR_0, DISCARD, DIV, DIVERGENCE, DIVIDE, DL, DOMAIN, DOMAINOFAPPLICATION, DT, ELEMENT_HASHES, ELEMENT_NAMES, ELLIPSE, EM, EMBED, EMPTYSET, EQ, EQUIVALENT, EULERGAMMA, EXISTS, EXP, EXPONENTIALE, FACTORIAL, FACTOROF, FALSE, FEBLEND, FECOLORMATRIX, FECOMPONENTTRANSFER, FECOMPOSITE, FECONVOLVEMATRIX, FEDIFFUSELIGHTING, FEDISPLACEMENTMAP, FEDISTANTLIGHT, FEFLOOD, FEFUNCA, FEFUNCB, FEFUNCG, FEFUNCR, FEGAUSSIANBLUR, FEIMAGE, FEMERGE, FEMERGENODE, FEMORPHOLOGY, FEOFFSET, FEPOINTLIGHT, FESPECULARLIGHTING, FESPOTLIGHT, FETILE, FETURBULENCE, FIELDSET, FIGCAPTION, FIGURE, FILTER_0, FLOOR, FN, FONT, FONT_FACE, FONT_FACE_FORMAT, FONT_FACE_NAME, FONT_FACE_SRC, FONT_FACE_URI, FOOTER, FORALL, FOREIGNOBJECT, FORM_0, FRAME_0, FRAMESET, G, GCD, GEQ, GLYPH, GLYPHREF_0, GRAD, GT, H1, H2, H3, H4, H5, H6, HANDLER, HEAD, HEADER, HGROUP, HKERN, HR, HTML_0, I, IDENT, IFRAME, IMAGE, IMAGINARY, IMAGINARYI, IMG, IMPLIES, IN_0, INFINITY, INPUT, INS, INT, INTEGERS, INTERSECT, INTERVAL, INVERSE, ISINDEX, KBD, KEYGEN, LABEL_0, LAMBDA, LAPLACIAN, LCM, LEGEND, LEQ, LI, LIMIT, LINE, LINEARGRADIENT, LINK_0, LIST_0, LISTENER, LISTING, LN, LOG, LOGBASE, LOWLIMIT, LT, MACTION, MALIGNGROUP, MALIGNMARK, MAP, MARK, MARKER, MARQUEE, MASK_0, MATH, MATRIX, MATRIXROW, MAX_0, MEAN, MEDIAN, MENCLOSE, MENU, MERROR, META, METADATA, METER, MFENCED, MFRAC, MGLYPH, MI, MIN_0, MINUS, MISSING_GLYPH, MLABELEDTR, MMULTISCRIPTS, MN, MO, MODE_0, MOMENT, MOMENTABOUT, MOVER, MPADDED, MPATH, MPHANTOM, MPRESCRIPTS, MROOT, MROW, MS, MSPACE, MSQRT, MSTYLE, MSUB, MSUBSUP, MSUP, MTABLE, MTD, MTEXT, MTR, MUNDER, MUNDEROVER, NATURALNUMBERS, NAV, NEQ, NEST, NOBR, NOEMBED, NOFRAMES, NONE, NOSCRIPT, NOT, NOTANUMBER, NOTIN, NOTPRSUBSET, NOTSUBSET, OBJECT_0, OL, OPTGROUP, OPTION, OR, OTHERWISE, OUTERPRODUCT, OUTPUT, P, PARAM, PARTIALDIFF, PATH_0, PATTERN_0, PI, PIECE, PIECEWISE, PLAINTEXT, PLUS, POLYGON, POLYLINE, POWER, PRE, PREFETCH, PRIMES, PRODUCT, PROGRESS, PRSUBSET, Q, QUOTIENT, RADIALGRADIENT, RATIONALS, REAL, REALS, RECT, RELN, REM, ROOT, RP, RT_0, RUBY, RULE, S, SAMP, SCALARPRODUCT, SCRIPT, SDEV, SEC, SECH, SECTION, SELECT, SELECTOR, SEMANTICS, SEP, SET, SETDIFF, SIN, SINH, SMALL, SOLIDCOLOR, SOURCE, SPAN_0, STOP, STRIKE, STRONG, STYLE_0, SUB, SUBSET, SUM, SUMMARY_0, SUP, SVG, SWITCH, SYMBOL, TABLE, TAN, TANH, TBODY, TBREAK, TD, TENDSTO, TEXT_0, TEXTAREA, TEXTPATH, TFOOT, TH, THEAD, TIME, TIMES, TITLE_0, TR, TRANSPOSE, TREF, TRUE, TSPAN, TT, U, UL, UNION, UPLIMIT, USE, VAR, VARIANCE, VECTOR, VECTORPRODUCT, VIDEO, VIEW, VKERN, WBR, XMP, XOR;
+function $clinit_126(){
+  $clinit_126 = nullMethod;
+  LT_GT = initValues(_3C_classLit, 46, -1, [60, 62]);
+  LT_SOLIDUS = initValues(_3C_classLit, 46, -1, [60, 47]);
+  RSQB_RSQB = initValues(_3C_classLit, 46, -1, [93, 93]);
+  REPLACEMENT_CHARACTER_0 = initValues(_3C_classLit, 46, -1, [65533]);
+  SPACE = initValues(_3C_classLit, 46, -1, [32]);
+  LF = initValues(_3C_classLit, 46, -1, [10]);
+  CDATA_LSQB = $toCharArray('CDATA[');
+  OCTYPE = $toCharArray('octype');
+  UBLIC = $toCharArray('ublic');
+  YSTEM = $toCharArray('ystem');
+  TITLE_ARR = initValues(_3C_classLit, 46, -1, [116, 105, 116, 108, 101]);
+  SCRIPT_ARR = initValues(_3C_classLit, 46, -1, [115, 99, 114, 105, 112, 116]);
+  STYLE_ARR = initValues(_3C_classLit, 46, -1, [115, 116, 121, 108, 101]);
+  PLAINTEXT_ARR = initValues(_3C_classLit, 46, -1, [112, 108, 97, 105, 110, 116, 101, 120, 116]);
+  XMP_ARR = initValues(_3C_classLit, 46, -1, [120, 109, 112]);
+  TEXTAREA_ARR = initValues(_3C_classLit, 46, -1, [116, 101, 120, 116, 97, 114, 101, 97]);
+  IFRAME_ARR = initValues(_3C_classLit, 46, -1, [105, 102, 114, 97, 109, 101]);
+  NOEMBED_ARR = initValues(_3C_classLit, 46, -1, [110, 111, 101, 109, 98, 101, 100]);
+  NOSCRIPT_ARR = initValues(_3C_classLit, 46, -1, [110, 111, 115, 99, 114, 105, 112, 116]);
+  NOFRAMES_ARR = initValues(_3C_classLit, 46, -1, [110, 111, 102, 114, 97, 109, 101, 115]);
+}
+
+function $addAttributeWithValue(this$static){
+  var val;
+  this$static.metaBoundaryPassed && ($clinit_125() , META) == this$static.tagName && ($clinit_124() , CHARSET) == this$static.attributeName;
+  if (this$static.attributeName) {
+    val = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+    !this$static.endTag && this$static.html4 && this$static.html4ModeCompatibleWithXhtml1Schemata && $isCaseFolded(this$static.attributeName) && (val = newAsciiLowerCaseStringFromString(val));
+    $addAttribute(this$static.attributes, this$static.attributeName, val, this$static.xmlnsPolicy);
+    this$static.attributeName = null;
+  }
+}
+
+function $addAttributeWithoutValue(this$static){
+  this$static.metaBoundaryPassed && ($clinit_124() , CHARSET) == this$static.attributeName && ($clinit_125() , META) == this$static.tagName;
+  if (this$static.attributeName) {
+    if (this$static.html4) {
+      $isBoolean(this$static.attributeName)?this$static.html4ModeCompatibleWithXhtml1Schemata?$addAttribute(this$static.attributes, this$static.attributeName, this$static.attributeName.local[0], this$static.xmlnsPolicy):$addAttribute(this$static.attributes, this$static.attributeName, '', this$static.xmlnsPolicy):$addAttribute(this$static.attributes, this$static.attributeName, '', this$static.xmlnsPolicy);
+    }
+     else {
+      (($clinit_124() , SRC) == this$static.attributeName || HREF == this$static.attributeName) && $warn('Attribute \u201C' + this$static.attributeName.local[0] + '\u201D without an explicit value seen. The attribute may be dropped by IE7.');
+      $addAttribute(this$static.attributes, this$static.attributeName, '', this$static.xmlnsPolicy);
+    }
+    this$static.attributeName = null;
+  }
+}
+
+function $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, c){
+  switch (this$static.commentPolicy.ordinal) {
+    case 2:
+      --this$static.longStrBufLen;
+      $appendLongStrBuf(this$static, 32);
+      $appendLongStrBuf(this$static, 45);
+    case 0:
+      $appendLongStrBuf(this$static, c);
+      break;
+    case 1:
+      $fatal_1(this$static, 'The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.');
+  }
+}
+
+function $appendLongStrBuf(this$static, c){
+  var newBuf;
+  if (this$static.longStrBufLen == this$static.longStrBuf.length) {
+    newBuf = initDim(_3C_classLit, 46, -1, this$static.longStrBufLen + (this$static.longStrBufLen >> 1), 1);
+    arraycopy(this$static.longStrBuf, 0, newBuf, 0, this$static.longStrBuf.length);
+    this$static.longStrBuf = newBuf;
+  }
+  this$static.longStrBuf[this$static.longStrBufLen++] = c;
+}
+
+function $appendLongStrBuf_0(this$static, buffer, offset, length_0){
+  var newBuf, reqLen;
+  reqLen = this$static.longStrBufLen + length_0;
+  if (this$static.longStrBuf.length < reqLen) {
+    newBuf = initDim(_3C_classLit, 46, -1, reqLen + (reqLen >> 1), 1);
+    arraycopy(this$static.longStrBuf, 0, newBuf, 0, this$static.longStrBuf.length);
+    this$static.longStrBuf = newBuf;
+  }
+  arraycopy(buffer, offset, this$static.longStrBuf, this$static.longStrBufLen, length_0);
+  this$static.longStrBufLen = reqLen;
+}
+
+function $appendSecondHyphenToBogusComment(this$static){
+  switch (this$static.commentPolicy.ordinal) {
+    case 2:
+      $appendLongStrBuf(this$static, 32);
+    case 0:
+      $appendLongStrBuf(this$static, 45);
+      break;
+    case 1:
+      $fatal_1(this$static, 'The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.');
+  }
+}
+
+function $appendStrBuf(this$static, c){
+  var newBuf;
+  if (this$static.strBufLen == this$static.strBuf.length) {
+    newBuf = initDim(_3C_classLit, 46, -1, this$static.strBuf.length + 1024, 1);
+    arraycopy(this$static.strBuf, 0, newBuf, 0, this$static.strBuf.length);
+    this$static.strBuf = newBuf;
+  }
+  this$static.strBuf[this$static.strBufLen++] = c;
+}
+
+function $attributeNameComplete(this$static){
+  this$static.attributeName = nameByBuffer(this$static.strBuf, 0, this$static.strBufLen, this$static.namePolicy != ($clinit_115() , ALLOW));
+  !this$static.attributes && (this$static.attributes = $HtmlAttributes(new HtmlAttributes, this$static.mappingLangToXmlLang));
+  if ($contains(this$static.attributes, this$static.attributeName)) {
+    $err('Duplicate attribute \u201C' + this$static.attributeName.local[0] + '\u201D.');
+    this$static.attributeName = null;
+  }
+}
+
+function $emitCarriageReturn(this$static, buf, pos){
+  this$static.nextCharOnNewLine = true;
+  this$static.lastCR = true;
+  $flushChars(this$static, buf, pos);
+  $characters(this$static.tokenHandler, LF, 0, 1);
+  this$static.cstart = 2147483647;
+}
+
+function $emitCurrentTagToken(this$static, selfClosing, pos){
+  var attrs;
+  this$static.cstart = pos + 1;
+  this$static.stateSave = 0;
+  attrs = !this$static.attributes?($clinit_128() , EMPTY_ATTRIBUTES):this$static.attributes;
+  this$static.endTag?$endTag(this$static.tokenHandler, this$static.tagName):$startTag(this$static.tokenHandler, this$static.tagName, attrs, selfClosing);
+  this$static.tagName = null;
+  this$static.newAttributesEachTime?(this$static.attributes = null):$clear_0(this$static.attributes, this$static.mappingLangToXmlLang);
+  return this$static.stateSave;
+}
+
+function $emitDoctypeToken(this$static, pos){
+  this$static.cstart = pos + 1;
+  $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
+  this$static.doctypeName = null;
+  this$static.publicIdentifier = null;
+  this$static.systemIdentifier = null;
+}
+
+function $emitOrAppendOne(this$static, val, returnState){
+  (returnState & -2) != 0?$appendLongStrBuf(this$static, val[0]):$characters(this$static.tokenHandler, val, 0, 1);
+}
+
+function $emitOrAppendTwo(this$static, val, returnState){
+  if ((returnState & -2) != 0) {
+    $appendLongStrBuf(this$static, val[0]);
+    $appendLongStrBuf(this$static, val[1]);
+  }
+   else {
+    $characters(this$static.tokenHandler, val, 0, 2);
+  }
+}
+
+function $emitStrBuf(this$static){
+  this$static.strBufLen > 0 && $characters(this$static.tokenHandler, this$static.strBuf, 0, this$static.strBufLen);
+}
+
+function $emptyAttributes(this$static){
+  if (this$static.newAttributesEachTime) {
+    return $HtmlAttributes(new HtmlAttributes, this$static.mappingLangToXmlLang);
+  }
+   else {
+    return $clinit_128() , EMPTY_ATTRIBUTES;
+  }
+}
+
+function $end(this$static){
+  this$static.strBuf = null;
+  this$static.longStrBuf = null;
+  this$static.doctypeName = null;
+  this$static.systemIdentifier != null && (this$static.systemIdentifier = null);
+  this$static.publicIdentifier != null && (this$static.publicIdentifier = null);
+  !!this$static.tagName && (this$static.tagName = null);
+  !!this$static.attributeName && (this$static.attributeName = null);
+  $endTokenization(this$static.tokenHandler);
+  if (this$static.attributes) {
+    $clear_0(this$static.attributes, this$static.mappingLangToXmlLang);
+    this$static.attributes = null;
+  }
+}
+
+function $endTagExpectationToArray(this$static){
+  switch (this$static.endTagExpectation.flags & 127) {
+    case 36:
+      this$static.endTagExpectationAsArray = TITLE_ARR;
+      return;
+    case 31:
+      this$static.endTagExpectationAsArray = SCRIPT_ARR;
+      return;
+    case 33:
+      this$static.endTagExpectationAsArray = STYLE_ARR;
+      return;
+    case 30:
+      this$static.endTagExpectationAsArray = PLAINTEXT_ARR;
+      return;
+    case 38:
+      this$static.endTagExpectationAsArray = XMP_ARR;
+      return;
+    case 35:
+      this$static.endTagExpectationAsArray = TEXTAREA_ARR;
+      return;
+    case 47:
+      this$static.endTagExpectationAsArray = IFRAME_ARR;
+      return;
+    case 60:
+      this$static.endTagExpectationAsArray = NOEMBED_ARR;
+      return;
+    case 26:
+      this$static.endTagExpectationAsArray = NOSCRIPT_ARR;
+      return;
+    case 25:
+      this$static.endTagExpectationAsArray = NOFRAMES_ARR;
+      return;
+    default:return;
+  }
+}
+
+function $eof_0(this$static){
+  var candidateName, ch, i, returnState, state, val;
+  state = this$static.stateSave;
+  returnState = this$static.returnStateSave;
+  eofloop: for (;;) {
+    switch (state) {
+      case 59:
+      case 66:
+        $characters(this$static.tokenHandler, LT_GT, 0, 1);
+        break eofloop;
+      case 9:
+        $characters(this$static.tokenHandler, LT_GT, 0, 1);
+        break eofloop;
+      case 65:
+        $characters(this$static.tokenHandler, LT_GT, 0, 1);
+        break eofloop;
+      case 38:
+        $characters(this$static.tokenHandler, LT_SOLIDUS, 0, 2);
+        $emitStrBuf(this$static);
+        break eofloop;
+      case 10:
+        $characters(this$static.tokenHandler, LT_SOLIDUS, 0, 2);
+        break eofloop;
+      case 11:
+        break eofloop;
+      case 12:
+      case 16:
+      case 54:
+        break eofloop;
+      case 13:
+        break eofloop;
+      case 14:
+      case 15:
+        break eofloop;
+      case 5:
+      case 6:
+      case 7:
+        break eofloop;
+      case 17:
+        this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+        this$static.cstart = 1;
+        break eofloop;
+      case 64:
+        $maybeAppendSpaceToBogusComment(this$static);
+        this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+        this$static.cstart = 1;
+        break eofloop;
+      case 18:
+        this$static.longStrBufLen = 0;
+        this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+        this$static.cstart = 1;
+        break eofloop;
+      case 39:
+        this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+        this$static.cstart = 1;
+        break eofloop;
+      case 40:
+        if (this$static.index < 6) {
+          this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+          this$static.cstart = 1;
+        }
+         else {
+          this$static.doctypeName = '';
+          this$static.systemIdentifier != null && (this$static.systemIdentifier = null);
+          this$static.publicIdentifier != null && (this$static.publicIdentifier = null);
+          this$static.forceQuirks = true;
+          $emitDoctypeToken(this$static, 0);
+          break eofloop;
+        }
+
+        break eofloop;
+      case 32:
+      case 34:
+        this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+        this$static.cstart = 1;
+        break eofloop;
+      case 36:
+        this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 2);
+        this$static.cstart = 1;
+        break eofloop;
+      case 35:
+      case 33:
+        this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 1);
+        this$static.cstart = 1;
+        break eofloop;
+      case 37:
+        this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 3);
+        this$static.cstart = 1;
+        break eofloop;
+      case 19:
+      case 20:
+        this$static.forceQuirks = true;
+        $emitDoctypeToken(this$static, 0);
+        break eofloop;
+      case 21:
+        this$static.doctypeName = String(valueOf_0(this$static.strBuf, 0, this$static.strBufLen));
+        this$static.forceQuirks = true;
+        $emitDoctypeToken(this$static, 0);
+        break eofloop;
+      case 41:
+      case 42:
+      case 22:
+      case 43:
+      case 45:
+      case 23:
+        this$static.forceQuirks = true;
+        $emitDoctypeToken(this$static, 0);
+        break eofloop;
+      case 24:
+      case 25:
+        this$static.forceQuirks = true;
+        this$static.publicIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+        $emitDoctypeToken(this$static, 0);
+        break eofloop;
+      case 26:
+      case 27:
+      case 44:
+        this$static.forceQuirks = true;
+        $emitDoctypeToken(this$static, 0);
+        break eofloop;
+      case 28:
+      case 29:
+        this$static.forceQuirks = true;
+        this$static.systemIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+        $emitDoctypeToken(this$static, 0);
+        break eofloop;
+      case 30:
+        this$static.forceQuirks = true;
+        $emitDoctypeToken(this$static, 0);
+        break eofloop;
+      case 31:
+        $emitDoctypeToken(this$static, 0);
+        break eofloop;
+      case 46:
+        (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+        state = returnState;
+        continue;
+      case 53:
+        (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+        state = returnState;
+        continue;
+      case 48:
+        outer: for (;;) {
+          ++this$static.entCol;
+          hiloop: for (;;) {
+            if (this$static.hi == -1) {
+              break hiloop;
+            }
+            if (this$static.entCol == ($clinit_131() , NAMES)[this$static.hi].length) {
+              break hiloop;
+            }
+            if (this$static.entCol > NAMES[this$static.hi].length) {
+              break outer;
+            }
+             else if (0 < NAMES[this$static.hi].charCodeAt(this$static.entCol)) {
+              --this$static.hi;
+            }
+             else {
+              break hiloop;
+            }
+          }
+          loloop: for (;;) {
+            if (this$static.hi < this$static.lo) {
+              break outer;
+            }
+            if (this$static.entCol == ($clinit_131() , NAMES)[this$static.lo].length) {
+              this$static.candidate = this$static.lo;
+              this$static.strBufMark = this$static.strBufLen;
+              ++this$static.lo;
+            }
+             else if (this$static.entCol > NAMES[this$static.lo].length) {
+              break outer;
+            }
+             else if (0 > NAMES[this$static.lo].charCodeAt(this$static.entCol)) {
+              ++this$static.lo;
+            }
+             else {
+              break loloop;
+            }
+          }
+          if (this$static.hi < this$static.lo) {
+            break outer;
+          }
+          continue;
+        }
+
+        if (this$static.candidate == -1) {
+          (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+          state = returnState;
+          continue eofloop;
+        }
+         else {
+          candidateName = ($clinit_131() , NAMES)[this$static.candidate];
+          if (candidateName.length == 0 || candidateName.charCodeAt(candidateName.length - 1) != 59) {
+            if ((returnState & -2) != 0) {
+              this$static.strBufMark == this$static.strBufLen?(ch = 0):(ch = this$static.strBuf[this$static.strBufMark]);
+              if (ch >= 48 && ch <= 57 || ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122) {
+                $appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen);
+                state = returnState;
+                continue eofloop;
+              }
+            }
+          }
+          val = VALUES_0[this$static.candidate];
+          val.length == 1?((returnState & -2) != 0?$appendLongStrBuf(this$static, val[0]):$characters(this$static.tokenHandler, val, 0, 1) , undefined):$emitOrAppendTwo(this$static, val, returnState);
+          if (this$static.strBufMark < this$static.strBufLen) {
+            if ((returnState & -2) != 0) {
+              for (i = this$static.strBufMark; i < this$static.strBufLen; ++i) {
+                $appendLongStrBuf(this$static, this$static.strBuf[i]);
+              }
+            }
+             else {
+              $characters(this$static.tokenHandler, this$static.strBuf, this$static.strBufMark, this$static.strBufLen - this$static.strBufMark);
+            }
+          }
+          state = returnState;
+          continue eofloop;
+        }
+
+      case 47:
+      case 50:
+      case 49:
+        if (!this$static.seenDigits) {
+          $err('No digits after \u201C' + valueOf_0(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.');
+          (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+          state = returnState;
+          continue;
+        }
+
+        $handleNcrValue(this$static, returnState);
+        state = returnState;
+        continue;
+      case 57:
+        $characters(this$static.tokenHandler, RSQB_RSQB, 0, 1);
+        break eofloop;
+      case 58:
+        $characters(this$static.tokenHandler, RSQB_RSQB, 0, 2);
+        break eofloop;
+      case 0:
+      default:break eofloop;
+    }
+  }
+  $eof(this$static.tokenHandler);
+  return;
+}
+
+function $err(){
+  return;
+}
+
+function $fatal_1(this$static, message){
+  var spe;
+  spe = $SAXParseException(new SAXParseException, message, this$static);
+  throw spe;
+}
+
+function $handleNcrValue(this$static, returnState){
+  var ch, val;
+  if (this$static.value <= 65535) {
+    if (this$static.value >= 128 && this$static.value <= 159) {
+      val = ($clinit_131() , WINDOWS_1252)[this$static.value - 128];
+      (returnState & -2) != 0?$appendLongStrBuf(this$static, val[0]):$characters(this$static.tokenHandler, val, 0, 1);
+    }
+     else if (this$static.value == 12 && this$static.contentSpacePolicy != ($clinit_115() , ALLOW)) {
+      this$static.contentSpacePolicy == ($clinit_115() , ALTER_INFOSET)?$emitOrAppendOne(this$static, SPACE, returnState):this$static.contentSpacePolicy == FATAL && $fatal_1(this$static, 'A character reference expanded to a form feed which is not legal XML 1.0 white space.');
+    }
+     else if (this$static.value == 0) {
+      $emitOrAppendOne(this$static, REPLACEMENT_CHARACTER_0, returnState);
+    }
+     else if ((this$static.value & 63488) == 55296) {
+      $emitOrAppendOne(this$static, REPLACEMENT_CHARACTER_0, returnState);
+    }
+     else {
+      ch = this$static.value & 65535;
+      this$static.value == 13 || (this$static.value <= 8 || this$static.value == 11 || this$static.value >= 14 && this$static.value <= 31?(ch = $errNcrControlChar(this$static, ch)):this$static.value >= 64976 && this$static.value <= 65007 || ((this$static.value & 65534) == 65534?(ch = $errNcrNonCharacter(this$static, ch)):this$static.value >= 127 && this$static.value <= 159 && $err('Character reference expands to a control character (' + $toUPlusString(this$static.value & 65535) + ').')));
+      this$static.bmpChar[0] = ch;
+      $emitOrAppendOne(this$static, this$static.bmpChar, returnState);
+    }
+  }
+   else if (this$static.value <= 1114111) {
+    (this$static.value & 65534) == 65534 && $err('Character reference expands to an astral non-character (' + $toUPlusString(this$static.value) + ').');
+    this$static.astralChar[0] = 55232 + (this$static.value >> 10) & 65535;
+    this$static.astralChar[1] = 56320 + (this$static.value & 1023) & 65535;
+    $emitOrAppendTwo(this$static, this$static.astralChar, returnState);
+  }
+   else {
+    $emitOrAppendOne(this$static, REPLACEMENT_CHARACTER_0, returnState);
+  }
+}
+
+function $initDoctypeFields(this$static){
+  this$static.doctypeName = '';
+  this$static.systemIdentifier != null && (this$static.systemIdentifier = null);
+  this$static.publicIdentifier != null && (this$static.publicIdentifier = null);
+  this$static.forceQuirks = false;
+}
+
+function $maybeAppendSpaceToBogusComment(this$static){
+  switch (this$static.commentPolicy.ordinal) {
+    case 2:
+      $appendLongStrBuf(this$static, 32);
+      break;
+    case 1:
+      $fatal_1(this$static, 'The document is not mappable to XML 1.0 due to a trailing hyphen in a comment.');
+  }
+}
+
+function $setStateAndEndTagExpectation(this$static, specialTokenizerState){
+  var asArray;
+  this$static.stateSave = specialTokenizerState;
+  if (specialTokenizerState == 0) {
+    return;
+  }
+  asArray = null.nullMethod();
+  this$static.endTagExpectation = elementNameByBuffer(asArray, 0, null.nullField);
+  $endTagExpectationToArray(this$static);
+}
+
+function $setStateAndEndTagExpectation_0(this$static, specialTokenizerState, endTagExpectation){
+  this$static.stateSave = specialTokenizerState;
+  this$static.endTagExpectation = endTagExpectation;
+  $endTagExpectationToArray(this$static);
+}
+
+function $setXmlnsPolicy(this$static, xmlnsPolicy){
+  if (xmlnsPolicy == ($clinit_115() , FATAL)) {
+    throw $IllegalArgumentException(new IllegalArgumentException, "Can't use FATAL here.");
+  }
+  this$static.xmlnsPolicy = xmlnsPolicy;
+}
+
+function $start_0(this$static){
+  this$static.confident = false;
+  this$static.strBuf = initDim(_3C_classLit, 46, -1, 64, 1);
+  this$static.longStrBuf = initDim(_3C_classLit, 46, -1, 1024, 1);
+  this$static.html4 = false;
+  this$static.metaBoundaryPassed = false;
+  this$static.wantsComments = this$static.tokenHandler.wantingComments;
+  !this$static.newAttributesEachTime && (this$static.attributes = $HtmlAttributes(new HtmlAttributes, this$static.mappingLangToXmlLang));
+  this$static.strBufLen = 0;
+  this$static.longStrBufLen = 0;
+  this$static.stateSave = 0;
+  this$static.lastCR = false;
+  this$static.index = 0;
+  this$static.forceQuirks = false;
+  this$static.additional = 0;
+  this$static.entCol = -1;
+  this$static.firstCharKey = -1;
+  this$static.lo = 0;
+  this$static.hi = 0;
+  this$static.candidate = -1;
+  this$static.strBufMark = 0;
+  this$static.prevValue = -1;
+  this$static.value = 0;
+  this$static.seenDigits = false;
+  this$static.endTag = false;
+  this$static.shouldSuspend = false;
+  $initDoctypeFields(this$static);
+  !!this$static.tagName && (this$static.tagName = null);
+  !!this$static.attributeName && (this$static.attributeName = null);
+  this$static.newAttributesEachTime && !!this$static.attributes && (this$static.attributes = null);
+  $startTokenization(this$static.tokenHandler, this$static);
+  this$static.alreadyComplainedAboutNonAscii = false;
+  this$static.line = this$static.linePrev = 0;
+  this$static.col = this$static.colPrev = 1;
+  this$static.nextCharOnNewLine = true;
+  this$static.prev = 0;
+  this$static.alreadyWarnedAboutPrivateUseCharacters = false;
+}
+
+function $stateLoop(this$static, state, c, pos, buf, reconsume, returnState, endPos){
+  var candidateName, ch, e, folded, hilo, i, row, val;
+  stateloop: for (;;) {
+    switch (state) {
+      case 0:
+        dataloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 38:
+              $flushChars(this$static, buf, pos);
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              this$static.additional = 0;
+              $LocatorImpl(new LocatorImpl, this$static);
+              returnState = state;
+              state = 46;
+              continue stateloop;
+            case 60:
+              $flushChars(this$static, buf, pos);
+              state = 9;
+              break dataloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              continue;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 9:
+        tagopenloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (c >= 65 && c <= 90) {
+            this$static.endTag = false;
+            this$static.strBuf[0] = c + 32 & 65535;
+            this$static.strBufLen = 1;
+            state = 11;
+            break tagopenloop;
+          }
+           else if (c >= 97 && c <= 122) {
+            this$static.endTag = false;
+            this$static.strBuf[0] = c;
+            this$static.strBufLen = 1;
+            state = 11;
+            break tagopenloop;
+          }
+          switch (c) {
+            case 33:
+              state = 18;
+              continue stateloop;
+            case 47:
+              state = 10;
+              continue stateloop;
+            case 63:
+              this$static.longStrBuf[0] = c;
+              this$static.longStrBufLen = 1;
+              state = 17;
+              continue stateloop;
+            case 62:
+              $characters(this$static.tokenHandler, LT_GT, 0, 2);
+              this$static.cstart = pos + 1;
+              state = 0;
+              continue stateloop;
+            default:$characters(this$static.tokenHandler, LT_GT, 0, 1);
+              this$static.cstart = pos;
+              state = 0;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 11:
+        tagnameloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              this$static.tagName = elementNameByBuffer(this$static.strBuf, 0, this$static.strBufLen);
+              state = 12;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              this$static.tagName = elementNameByBuffer(this$static.strBuf, 0, this$static.strBufLen);
+              state = 12;
+              break tagnameloop;
+            case 47:
+              this$static.tagName = elementNameByBuffer(this$static.strBuf, 0, this$static.strBufLen);
+              state = 54;
+              continue stateloop;
+            case 62:
+              this$static.tagName = elementNameByBuffer(this$static.strBuf, 0, this$static.strBufLen);
+              state = $emitCurrentTagToken(this$static, false, pos);
+              if (this$static.shouldSuspend) {
+                break stateloop;
+              }
+
+              continue stateloop;
+            case 0:
+              c = 65533;
+            default:c >= 65 && c <= 90 && (c += 32);
+              $appendStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 12:
+        beforeattributenameloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 47:
+              state = 54;
+              continue stateloop;
+            case 62:
+              state = $emitCurrentTagToken(this$static, false, pos);
+              if (this$static.shouldSuspend) {
+                break stateloop;
+              }
+
+              continue stateloop;
+            case 0:
+              c = 65533;
+            case 34:
+            case 39:
+            case 60:
+            case 61:
+            default:c >= 65 && c <= 90 && (c += 32);
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              state = 13;
+              break beforeattributenameloop;
+          }
+        }
+
+      case 13:
+        attributenameloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $attributeNameComplete(this$static);
+              state = 14;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              $attributeNameComplete(this$static);
+              state = 14;
+              continue stateloop;
+            case 47:
+              $attributeNameComplete(this$static);
+              $addAttributeWithoutValue(this$static);
+              state = 54;
+              continue stateloop;
+            case 61:
+              $attributeNameComplete(this$static);
+              state = 15;
+              break attributenameloop;
+            case 62:
+              $attributeNameComplete(this$static);
+              $addAttributeWithoutValue(this$static);
+              state = $emitCurrentTagToken(this$static, false, pos);
+              if (this$static.shouldSuspend) {
+                break stateloop;
+              }
+
+              continue stateloop;
+            case 0:
+              c = 65533;
+            case 34:
+            case 39:
+            case 60:
+            default:c >= 65 && c <= 90 && (c += 32);
+              $appendStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 15:
+        beforeattributevalueloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 34:
+              this$static.longStrBufLen = 0;
+              state = 5;
+              break beforeattributevalueloop;
+            case 38:
+              this$static.longStrBufLen = 0;
+              state = 7;
+              reconsume = true;
+              continue stateloop;
+            case 39:
+              this$static.longStrBufLen = 0;
+              state = 6;
+              continue stateloop;
+            case 62:
+              $addAttributeWithoutValue(this$static);
+              state = $emitCurrentTagToken(this$static, false, pos);
+              if (this$static.shouldSuspend) {
+                break stateloop;
+              }
+
+              continue stateloop;
+            case 0:
+              c = 65533;
+            case 60:
+            case 61:
+            case 96:
+              $errLtOrEqualsOrGraveInUnquotedAttributeOrNull(c);
+            default:this$static.longStrBuf[0] = c;
+              this$static.longStrBufLen = 1;
+              state = 7;
+              continue stateloop;
+          }
+        }
+
+      case 5:
+        attributevaluedoublequotedloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 34:
+              $addAttributeWithValue(this$static);
+              state = 16;
+              break attributevaluedoublequotedloop;
+            case 38:
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              this$static.additional = 34;
+              $LocatorImpl(new LocatorImpl, this$static);
+              returnState = state;
+              state = 46;
+              continue stateloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 16:
+        afterattributevaluequotedloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              state = 12;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              state = 12;
+              continue stateloop;
+            case 47:
+              state = 54;
+              break afterattributevaluequotedloop;
+            case 62:
+              state = $emitCurrentTagToken(this$static, false, pos);
+              if (this$static.shouldSuspend) {
+                break stateloop;
+              }
+
+              continue stateloop;
+            default:state = 12;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 54:
+        if (++pos == endPos) {
+          break stateloop;
+        }
+
+        c = $checkChar(this$static, buf, pos);
+        switch (c) {
+          case 62:
+            state = $emitCurrentTagToken(this$static, true, pos);
+            if (this$static.shouldSuspend) {
+              break stateloop;
+            }
+
+            continue stateloop;
+          default:state = 12;
+            reconsume = true;
+            continue stateloop;
+        }
+
+      case 7:
+        for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $addAttributeWithValue(this$static);
+              state = 12;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              $addAttributeWithValue(this$static);
+              state = 12;
+              continue stateloop;
+            case 38:
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              this$static.additional = 62;
+              $LocatorImpl(new LocatorImpl, this$static);
+              returnState = state;
+              state = 46;
+              continue stateloop;
+            case 62:
+              $addAttributeWithValue(this$static);
+              state = $emitCurrentTagToken(this$static, false, pos);
+              if (this$static.shouldSuspend) {
+                break stateloop;
+              }
+
+              continue stateloop;
+            case 0:
+              c = 65533;
+            case 60:
+            case 34:
+            case 39:
+            case 61:
+            case 96:
+              $errUnquotedAttributeValOrNull(c);
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 14:
+        for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 47:
+              $addAttributeWithoutValue(this$static);
+              state = 54;
+              continue stateloop;
+            case 61:
+              state = 15;
+              continue stateloop;
+            case 62:
+              $addAttributeWithoutValue(this$static);
+              state = $emitCurrentTagToken(this$static, false, pos);
+              if (this$static.shouldSuspend) {
+                break stateloop;
+              }
+
+              continue stateloop;
+            case 0:
+              c = 65533;
+            case 34:
+            case 39:
+            case 60:
+            default:$addAttributeWithoutValue(this$static);
+              c >= 65 && c <= 90 && (c += 32);
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              state = 13;
+              continue stateloop;
+          }
+        }
+
+      case 18:
+        markupdeclarationopenloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              this$static.longStrBuf[0] = c;
+              this$static.longStrBufLen = 1;
+              state = 39;
+              break markupdeclarationopenloop;
+            case 100:
+            case 68:
+              this$static.longStrBuf[0] = c;
+              this$static.longStrBufLen = 1;
+              this$static.index = 0;
+              state = 40;
+              continue stateloop;
+            case 91:
+              if ($cdataSectionAllowed(this$static.tokenHandler)) {
+                this$static.longStrBuf[0] = c;
+                this$static.longStrBufLen = 1;
+                this$static.index = 0;
+                state = 55;
+                continue stateloop;
+              }
+
+            default:this$static.longStrBufLen = 0;
+              state = 17;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 39:
+        markupdeclarationhyphenloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 0:
+              break stateloop;
+            case 45:
+              this$static.longStrBufLen = 0;
+              state = 32;
+              break markupdeclarationhyphenloop;
+            default:state = 17;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 32:
+        commentstartloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              $appendLongStrBuf(this$static, c);
+              state = 33;
+              continue stateloop;
+            case 62:
+              this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+              this$static.cstart = pos + 1;
+              state = 0;
+              continue stateloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              state = 34;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              state = 34;
+              break commentstartloop;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              state = 34;
+              break commentstartloop;
+          }
+        }
+
+      case 34:
+        commentloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              $appendLongStrBuf(this$static, c);
+              state = 35;
+              break commentloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 35:
+        commentenddashloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              $appendLongStrBuf(this$static, c);
+              state = 36;
+              break commentenddashloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              state = 34;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              state = 34;
+              continue stateloop;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              state = 34;
+              continue stateloop;
+          }
+        }
+
+      case 36:
+        commentendloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 62:
+              this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 2);
+              this$static.cstart = pos + 1;
+              state = 0;
+              continue stateloop;
+            case 45:
+              $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, c);
+              continue;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, 10);
+              state = 34;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, 10);
+              state = 34;
+              continue stateloop;
+            case 33:
+              $appendLongStrBuf(this$static, c);
+              state = 37;
+              continue stateloop;
+            case 0:
+              c = 65533;
+            default:$adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, c);
+              state = 34;
+              continue stateloop;
+          }
+        }
+
+      case 37:
+        for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 62:
+              this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 3);
+              this$static.cstart = pos + 1;
+              state = 0;
+              continue stateloop;
+            case 45:
+              $appendLongStrBuf(this$static, c);
+              state = 35;
+              continue stateloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              state = 34;
+              continue stateloop;
+          }
+        }
+
+      case 33:
+        if (++pos == endPos) {
+          break stateloop;
+        }
+
+        c = $checkChar(this$static, buf, pos);
+        switch (c) {
+          case 45:
+            $appendLongStrBuf(this$static, c);
+            state = 36;
+            continue stateloop;
+          case 62:
+            this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 1);
+            this$static.cstart = pos + 1;
+            state = 0;
+            continue stateloop;
+          case 13:
+            this$static.nextCharOnNewLine = true;
+            this$static.lastCR = true;
+            $appendLongStrBuf(this$static, 10);
+            state = 34;
+            break stateloop;
+          case 10:
+            this$static.nextCharOnNewLine = true;
+            $appendLongStrBuf(this$static, 10);
+            state = 34;
+            continue stateloop;
+          case 0:
+            c = 65533;
+          default:$appendLongStrBuf(this$static, c);
+            state = 34;
+            continue stateloop;
+        }
+
+      case 55:
+        for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (this$static.index < 6) {
+            if (c == CDATA_LSQB[this$static.index]) {
+              $appendLongStrBuf(this$static, c);
+            }
+             else {
+              state = 17;
+              reconsume = true;
+              continue stateloop;
+            }
+            ++this$static.index;
+            continue;
+          }
+           else {
+            this$static.cstart = pos;
+            state = 56;
+            reconsume = true;
+            break;
+          }
+        }
+
+      case 56:
+        cdatasectionloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 93:
+              $flushChars(this$static, buf, pos);
+              state = 57;
+              break cdatasectionloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              continue;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 57:
+        cdatarsqb: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 93:
+              state = 58;
+              break cdatarsqb;
+            default:$characters(this$static.tokenHandler, RSQB_RSQB, 0, 1);
+              this$static.cstart = pos;
+              state = 56;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 58:
+        if (++pos == endPos) {
+          break stateloop;
+        }
+
+        c = $checkChar(this$static, buf, pos);
+        switch (c) {
+          case 62:
+            this$static.cstart = pos + 1;
+            state = 0;
+            continue stateloop;
+          default:$characters(this$static.tokenHandler, RSQB_RSQB, 0, 2);
+            this$static.cstart = pos;
+            state = 56;
+            reconsume = true;
+            continue stateloop;
+        }
+
+      case 6:
+        attributevaluesinglequotedloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 39:
+              $addAttributeWithValue(this$static);
+              state = 16;
+              continue stateloop;
+            case 38:
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              this$static.additional = 39;
+              $LocatorImpl(new LocatorImpl, this$static);
+              returnState = state;
+              state = 46;
+              break attributevaluesinglequotedloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 46:
+        if (++pos == endPos) {
+          break stateloop;
+        }
+
+        c = $checkChar(this$static, buf, pos);
+        if (c == 0) {
+          break stateloop;
+        }
+
+        switch (c) {
+          case 32:
+          case 9:
+          case 10:
+          case 13:
+          case 12:
+          case 60:
+          case 38:
+            (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+            (returnState & -2) == 0 && (this$static.cstart = pos);
+            state = returnState;
+            reconsume = true;
+            continue stateloop;
+          case 35:
+            $appendStrBuf(this$static, 35);
+            state = 47;
+            continue stateloop;
+          default:if (c == this$static.additional) {
+              (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+              state = returnState;
+              reconsume = true;
+              continue stateloop;
+            }
+
+            if (c >= 97 && c <= 122) {
+              this$static.firstCharKey = c - 97 + 26;
+            }
+             else if (c >= 65 && c <= 90) {
+              this$static.firstCharKey = c - 65;
+            }
+             else {
+              (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+              (returnState & -2) == 0 && (this$static.cstart = pos);
+              state = returnState;
+              reconsume = true;
+              continue stateloop;
+            }
+
+            $appendStrBuf(this$static, c);
+            state = 53;
+        }
+
+      case 53:
+        {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (c == 0) {
+            break stateloop;
+          }
+          hilo = 0;
+          if (c <= 122) {
+            row = ($clinit_132() , HILO_ACCEL)[c];
+            row != null && (hilo = row[this$static.firstCharKey]);
+          }
+          if (hilo == 0) {
+            (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+            (returnState & -2) == 0 && (this$static.cstart = pos);
+            state = returnState;
+            reconsume = true;
+            continue stateloop;
+          }
+          $appendStrBuf(this$static, c);
+          this$static.lo = hilo & 65535;
+          this$static.hi = hilo >> 16;
+          this$static.entCol = -1;
+          this$static.candidate = -1;
+          this$static.strBufMark = 0;
+          state = 48;
+        }
+
+      case 48:
+        outer: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (c == 0) {
+            break stateloop;
+          }
+          ++this$static.entCol;
+          loloop: for (;;) {
+            if (this$static.hi < this$static.lo) {
+              break outer;
+            }
+            if (this$static.entCol == ($clinit_131() , NAMES)[this$static.lo].length) {
+              this$static.candidate = this$static.lo;
+              this$static.strBufMark = this$static.strBufLen;
+              ++this$static.lo;
+            }
+             else if (this$static.entCol > NAMES[this$static.lo].length) {
+              break outer;
+            }
+             else if (c > NAMES[this$static.lo].charCodeAt(this$static.entCol)) {
+              ++this$static.lo;
+            }
+             else {
+              break loloop;
+            }
+          }
+          hiloop: for (;;) {
+            if (this$static.hi < this$static.lo) {
+              break outer;
+            }
+            if (this$static.entCol == ($clinit_131() , NAMES)[this$static.hi].length) {
+              break hiloop;
+            }
+            if (this$static.entCol > NAMES[this$static.hi].length) {
+              break outer;
+            }
+             else if (c < NAMES[this$static.hi].charCodeAt(this$static.entCol)) {
+              --this$static.hi;
+            }
+             else {
+              break hiloop;
+            }
+          }
+          if (this$static.hi < this$static.lo) {
+            break outer;
+          }
+          $appendStrBuf(this$static, c);
+          continue;
+        }
+
+        if (this$static.candidate == -1) {
+          (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+          (returnState & -2) == 0 && (this$static.cstart = pos);
+          state = returnState;
+          reconsume = true;
+          continue stateloop;
+        }
+         else {
+          candidateName = ($clinit_131() , NAMES)[this$static.candidate];
+          if (candidateName.length == 0 || candidateName.charCodeAt(candidateName.length - 1) != 59) {
+            if ((returnState & -2) != 0) {
+              this$static.strBufMark == this$static.strBufLen?(ch = c):(ch = this$static.strBuf[this$static.strBufMark]);
+              if (ch == 61 || ch >= 48 && ch <= 57 || ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122) {
+                $appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen);
+                state = returnState;
+                reconsume = true;
+                continue stateloop;
+              }
+            }
+          }
+          val = VALUES_0[this$static.candidate];
+          val.length == 1?((returnState & -2) != 0?$appendLongStrBuf(this$static, val[0]):$characters(this$static.tokenHandler, val, 0, 1) , undefined):$emitOrAppendTwo(this$static, val, returnState);
+          if (this$static.strBufMark < this$static.strBufLen) {
+            if ((returnState & -2) != 0) {
+              for (i = this$static.strBufMark; i < this$static.strBufLen; ++i) {
+                $appendLongStrBuf(this$static, this$static.strBuf[i]);
+              }
+            }
+             else {
+              $characters(this$static.tokenHandler, this$static.strBuf, this$static.strBufMark, this$static.strBufLen - this$static.strBufMark);
+            }
+          }
+          (returnState & -2) == 0 && (this$static.cstart = pos);
+          state = returnState;
+          reconsume = true;
+          continue stateloop;
+        }
+
+      case 47:
+        if (++pos == endPos) {
+          break stateloop;
+        }
+
+        c = $checkChar(this$static, buf, pos);
+        this$static.prevValue = -1;
+        this$static.value = 0;
+        this$static.seenDigits = false;
+        switch (c) {
+          case 120:
+          case 88:
+            $appendStrBuf(this$static, c);
+            state = 49;
+            continue stateloop;
+          default:state = 50;
+            reconsume = true;
+        }
+
+      case 50:
+        decimalloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          this$static.value < this$static.prevValue && (this$static.value = 1114112);
+          this$static.prevValue = this$static.value;
+          if (c >= 48 && c <= 57) {
+            this$static.seenDigits = true;
+            this$static.value *= 10;
+            this$static.value += c - 48;
+            continue;
+          }
+           else if (c == 59) {
+            if (this$static.seenDigits) {
+              (returnState & -2) == 0 && (this$static.cstart = pos + 1);
+              state = 51;
+              break decimalloop;
+            }
+             else {
+              $err('No digits after \u201C' + valueOf_0(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.');
+              $appendStrBuf(this$static, 59);
+              (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+              (returnState & -2) == 0 && (this$static.cstart = pos + 1);
+              state = returnState;
+              continue stateloop;
+            }
+          }
+           else {
+            if (this$static.seenDigits) {
+              (returnState & -2) == 0 && (this$static.cstart = pos);
+              state = 51;
+              reconsume = true;
+              break decimalloop;
+            }
+             else {
+              $err('No digits after \u201C' + valueOf_0(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.');
+              (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+              (returnState & -2) == 0 && (this$static.cstart = pos);
+              state = returnState;
+              reconsume = true;
+              continue stateloop;
+            }
+          }
+        }
+
+      case 51:
+        $handleNcrValue(this$static, returnState);
+        state = returnState;
+        continue stateloop;
+      case 49:
+        for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          this$static.value < this$static.prevValue && (this$static.value = 1114112);
+          this$static.prevValue = this$static.value;
+          if (c >= 48 && c <= 57) {
+            this$static.seenDigits = true;
+            this$static.value *= 16;
+            this$static.value += c - 48;
+            continue;
+          }
+           else if (c >= 65 && c <= 70) {
+            this$static.seenDigits = true;
+            this$static.value *= 16;
+            this$static.value += c - 65 + 10;
+            continue;
+          }
+           else if (c >= 97 && c <= 102) {
+            this$static.seenDigits = true;
+            this$static.value *= 16;
+            this$static.value += c - 97 + 10;
+            continue;
+          }
+           else if (c == 59) {
+            if (this$static.seenDigits) {
+              (returnState & -2) == 0 && (this$static.cstart = pos + 1);
+              state = 51;
+              continue stateloop;
+            }
+             else {
+              $err('No digits after \u201C' + valueOf_0(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.');
+              $appendStrBuf(this$static, 59);
+              (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+              (returnState & -2) == 0 && (this$static.cstart = pos + 1);
+              state = returnState;
+              continue stateloop;
+            }
+          }
+           else {
+            if (this$static.seenDigits) {
+              (returnState & -2) == 0 && (this$static.cstart = pos);
+              state = 51;
+              reconsume = true;
+              continue stateloop;
+            }
+             else {
+              $err('No digits after \u201C' + valueOf_0(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.');
+              (returnState & -2) != 0?$appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen):$emitStrBuf(this$static);
+              (returnState & -2) == 0 && (this$static.cstart = pos);
+              state = returnState;
+              reconsume = true;
+              continue stateloop;
+            }
+          }
+        }
+
+      case 8:
+        plaintextloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $characters(this$static.tokenHandler, REPLACEMENT_CHARACTER_0, 0, 1);
+              this$static.cstart = pos + 1;
+              continue;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 10:
+        if (++pos == endPos) {
+          break stateloop;
+        }
+
+        c = $checkChar(this$static, buf, pos);
+        switch (c) {
+          case 62:
+            this$static.cstart = pos + 1;
+            state = 0;
+            continue stateloop;
+          case 13:
+            this$static.nextCharOnNewLine = true;
+            this$static.lastCR = true;
+            this$static.longStrBuf[0] = 10;
+            this$static.longStrBufLen = 1;
+            state = 17;
+            break stateloop;
+          case 10:
+            this$static.nextCharOnNewLine = true;
+            this$static.longStrBuf[0] = 10;
+            this$static.longStrBufLen = 1;
+            state = 17;
+            continue stateloop;
+          case 0:
+            c = 65533;
+          default:c >= 65 && c <= 90 && (c += 32);
+            if (c >= 97 && c <= 122) {
+              this$static.endTag = true;
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              state = 11;
+              continue stateloop;
+            }
+             else {
+              this$static.longStrBuf[0] = c;
+              this$static.longStrBufLen = 1;
+              state = 17;
+              continue stateloop;
+            }
+
+        }
+
+      case 1:
+        rcdataloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 38:
+              $flushChars(this$static, buf, pos);
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              this$static.additional = 0;
+              returnState = state;
+              state = 46;
+              continue stateloop;
+            case 60:
+              $flushChars(this$static, buf, pos);
+              returnState = state;
+              state = 65;
+              continue stateloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              continue;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 3:
+        rawtextloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 60:
+              $flushChars(this$static, buf, pos);
+              returnState = state;
+              state = 65;
+              break rawtextloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              continue;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 65:
+        rawtextrcdatalessthansignloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 47:
+              this$static.index = 0;
+              this$static.strBufLen = 0;
+              state = 38;
+              break rawtextrcdatalessthansignloop;
+            default:$characters(this$static.tokenHandler, LT_GT, 0, 1);
+              this$static.cstart = pos;
+              state = returnState;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 38:
+        for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (this$static.index < this$static.endTagExpectationAsArray.length) {
+            e = this$static.endTagExpectationAsArray[this$static.index];
+            folded = c;
+            c >= 65 && c <= 90 && (folded += 32);
+            if (folded != e) {
+              this$static.html4 && (this$static.index > 0 || folded >= 97 && folded <= 122) && ($clinit_125() , IFRAME) != this$static.endTagExpectation;
+              $characters(this$static.tokenHandler, LT_SOLIDUS, 0, 2);
+              $emitStrBuf(this$static);
+              this$static.cstart = pos;
+              state = returnState;
+              reconsume = true;
+              continue stateloop;
+            }
+            $appendStrBuf(this$static, c);
+            ++this$static.index;
+            continue;
+          }
+           else {
+            this$static.endTag = true;
+            this$static.tagName = this$static.endTagExpectation;
+            switch (c) {
+              case 13:
+                this$static.nextCharOnNewLine = true;
+                this$static.lastCR = true;
+                state = 12;
+                break stateloop;
+              case 10:
+                this$static.nextCharOnNewLine = true;
+              case 32:
+              case 9:
+              case 12:
+                state = 12;
+                continue stateloop;
+              case 47:
+                state = 54;
+                continue stateloop;
+              case 62:
+                state = $emitCurrentTagToken(this$static, false, pos);
+                if (this$static.shouldSuspend) {
+                  break stateloop;
+                }
+
+                continue stateloop;
+              default:$characters(this$static.tokenHandler, LT_SOLIDUS, 0, 2);
+                $emitStrBuf(this$static);
+                c == 0?($flushChars(this$static, buf, pos) , $zeroOriginatingReplacementCharacter(this$static.tokenHandler) , this$static.cstart = pos + 1 , undefined):(this$static.cstart = pos);
+                state = returnState;
+                continue stateloop;
+            }
+          }
+        }
+
+      case 17:
+        boguscommentloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 62:
+              this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+              this$static.cstart = pos + 1;
+              state = 0;
+              continue stateloop;
+            case 45:
+              $appendLongStrBuf(this$static, c);
+              state = 64;
+              break boguscommentloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 64:
+        boguscommenthyphenloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 62:
+              $maybeAppendSpaceToBogusComment(this$static);
+              this$static.wantsComments && $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - 0);
+              this$static.cstart = pos + 1;
+              state = 0;
+              continue stateloop;
+            case 45:
+              $appendSecondHyphenToBogusComment(this$static);
+              continue boguscommenthyphenloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              state = 17;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              state = 17;
+              continue stateloop;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              state = 17;
+              continue stateloop;
+          }
+        }
+
+      case 2:
+        scriptdataloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 60:
+              $flushChars(this$static, buf, pos);
+              returnState = state;
+              state = 59;
+              break scriptdataloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              continue;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 59:
+        scriptdatalessthansignloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 47:
+              this$static.index = 0;
+              this$static.strBufLen = 0;
+              state = 38;
+              continue stateloop;
+            case 33:
+              $characters(this$static.tokenHandler, LT_GT, 0, 1);
+              this$static.cstart = pos;
+              state = 60;
+              break scriptdatalessthansignloop;
+            default:$characters(this$static.tokenHandler, LT_GT, 0, 1);
+              this$static.cstart = pos;
+              state = 2;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 60:
+        scriptdataescapestartloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              state = 61;
+              break scriptdataescapestartloop;
+            default:state = 2;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 61:
+        scriptdataescapestartdashloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              state = 63;
+              break scriptdataescapestartdashloop;
+            default:state = 2;
+              reconsume = true;
+              continue stateloop;
+          }
+        }
+
+      case 63:
+        scriptdataescapeddashdashloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              continue;
+            case 60:
+              $flushChars(this$static, buf, pos);
+              state = 66;
+              continue stateloop;
+            case 62:
+              state = 2;
+              continue stateloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              state = 4;
+              break scriptdataescapeddashdashloop;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              state = 4;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:state = 4;
+              break scriptdataescapeddashdashloop;
+          }
+        }
+
+      case 4:
+        scriptdataescapedloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 45:
+              state = 62;
+              break scriptdataescapedloop;
+            case 60:
+              $flushChars(this$static, buf, pos);
+              state = 66;
+              continue stateloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              continue;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 62:
+        scriptdataescapeddashloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              state = 63;
+              continue stateloop;
+            case 60:
+              $flushChars(this$static, buf, pos);
+              state = 66;
+              break scriptdataescapeddashloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              state = 4;
+              continue stateloop;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              state = 4;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:state = 4;
+              continue stateloop;
+          }
+        }
+
+      case 66:
+        scriptdataescapedlessthanloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 47:
+              this$static.index = 0;
+              this$static.strBufLen = 0;
+              returnState = 4;
+              state = 38;
+              continue stateloop;
+            case 83:
+            case 115:
+              $characters(this$static.tokenHandler, LT_GT, 0, 1);
+              this$static.cstart = pos;
+              this$static.index = 1;
+              state = 67;
+              break scriptdataescapedlessthanloop;
+            default:$characters(this$static.tokenHandler, LT_GT, 0, 1);
+              this$static.cstart = pos;
+              reconsume = true;
+              state = 4;
+              continue stateloop;
+          }
+        }
+
+      case 67:
+        scriptdatadoubleescapestartloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (this$static.index < 6) {
+            folded = c;
+            c >= 65 && c <= 90 && (folded += 32);
+            if (folded != SCRIPT_ARR[this$static.index]) {
+              reconsume = true;
+              state = 4;
+              continue stateloop;
+            }
+            ++this$static.index;
+            continue;
+          }
+          switch (c) {
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              state = 68;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+            case 47:
+            case 62:
+              state = 68;
+              break scriptdatadoubleescapestartloop;
+            default:reconsume = true;
+              state = 4;
+              continue stateloop;
+          }
+        }
+
+      case 68:
+        scriptdatadoubleescapedloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 45:
+              state = 70;
+              break scriptdatadoubleescapedloop;
+            case 60:
+              state = 69;
+              continue stateloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              continue;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 70:
+        scriptdatadoubleescapeddashloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              state = 71;
+              break scriptdatadoubleescapeddashloop;
+            case 60:
+              state = 69;
+              continue stateloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              state = 68;
+              continue stateloop;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              state = 68;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:state = 68;
+              continue stateloop;
+          }
+        }
+
+      case 71:
+        scriptdatadoubleescapeddashdashloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 45:
+              continue;
+            case 60:
+              state = 69;
+              break scriptdatadoubleescapeddashdashloop;
+            case 62:
+              state = 2;
+              continue stateloop;
+            case 0:
+              $flushChars(this$static, buf, pos);
+              $zeroOriginatingReplacementCharacter(this$static.tokenHandler);
+              this$static.cstart = pos + 1;
+              state = 68;
+              continue stateloop;
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              state = 68;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:state = 68;
+              continue stateloop;
+          }
+        }
+
+      case 69:
+        scriptdatadoubleescapedlessthanloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 47:
+              this$static.index = 0;
+              state = 72;
+              break scriptdatadoubleescapedlessthanloop;
+            default:reconsume = true;
+              state = 68;
+              continue stateloop;
+          }
+        }
+
+      case 72:
+        scriptdatadoubleescapeendloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (this$static.index < 6) {
+            folded = c;
+            c >= 65 && c <= 90 && (folded += 32);
+            if (folded != SCRIPT_ARR[this$static.index]) {
+              reconsume = true;
+              state = 68;
+              continue stateloop;
+            }
+            ++this$static.index;
+            continue;
+          }
+          switch (c) {
+            case 13:
+              $emitCarriageReturn(this$static, buf, pos);
+              state = 4;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+            case 47:
+            case 62:
+              state = 4;
+              continue stateloop;
+            default:reconsume = true;
+              state = 68;
+              continue stateloop;
+          }
+        }
+
+      case 40:
+        markupdeclarationdoctypeloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (this$static.index < 6) {
+            folded = c;
+            c >= 65 && c <= 90 && (folded += 32);
+            if (folded == OCTYPE[this$static.index]) {
+              $appendLongStrBuf(this$static, c);
+            }
+             else {
+              state = 17;
+              reconsume = true;
+              continue stateloop;
+            }
+            ++this$static.index;
+            continue;
+          }
+           else {
+            state = 19;
+            reconsume = true;
+            break markupdeclarationdoctypeloop;
+          }
+        }
+
+      case 19:
+        doctypeloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          $initDoctypeFields(this$static);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              state = 20;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              state = 20;
+              break doctypeloop;
+            default:state = 20;
+              reconsume = true;
+              break doctypeloop;
+          }
+        }
+
+      case 20:
+        beforedoctypenameloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 62:
+              this$static.forceQuirks = true;
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 0:
+              c = 65533;
+            default:c >= 65 && c <= 90 && (c += 32);
+              this$static.strBuf[0] = c;
+              this$static.strBufLen = 1;
+              state = 21;
+              break beforedoctypenameloop;
+          }
+        }
+
+      case 21:
+        doctypenameloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              this$static.doctypeName = String(valueOf_0(this$static.strBuf, 0, this$static.strBufLen));
+              state = 22;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              this$static.doctypeName = String(valueOf_0(this$static.strBuf, 0, this$static.strBufLen));
+              state = 22;
+              break doctypenameloop;
+            case 62:
+              this$static.doctypeName = String(valueOf_0(this$static.strBuf, 0, this$static.strBufLen));
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 0:
+              c = 65533;
+            default:c >= 65 && c <= 90 && (c += 32);
+              $appendStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 22:
+        afterdoctypenameloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 62:
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 112:
+            case 80:
+              this$static.index = 0;
+              state = 41;
+              break afterdoctypenameloop;
+            case 115:
+            case 83:
+              this$static.index = 0;
+              state = 42;
+              continue stateloop;
+            default:this$static.forceQuirks = true;
+              state = 31;
+              continue stateloop;
+          }
+        }
+
+      case 41:
+        doctypeublicloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (this$static.index < 5) {
+            folded = c;
+            c >= 65 && c <= 90 && (folded += 32);
+            if (folded != UBLIC[this$static.index]) {
+              this$static.forceQuirks = true;
+              state = 31;
+              reconsume = true;
+              continue stateloop;
+            }
+            ++this$static.index;
+            continue;
+          }
+           else {
+            state = 43;
+            reconsume = true;
+            break doctypeublicloop;
+          }
+        }
+
+      case 43:
+        afterdoctypepublickeywordloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              state = 23;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              state = 23;
+              break afterdoctypepublickeywordloop;
+            case 34:
+              this$static.longStrBufLen = 0;
+              state = 24;
+              continue stateloop;
+            case 39:
+              this$static.longStrBufLen = 0;
+              state = 25;
+              continue stateloop;
+            case 62:
+              this$static.forceQuirks = true;
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            default:this$static.forceQuirks = true;
+              state = 31;
+              continue stateloop;
+          }
+        }
+
+      case 23:
+        beforedoctypepublicidentifierloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 34:
+              this$static.longStrBufLen = 0;
+              state = 24;
+              break beforedoctypepublicidentifierloop;
+            case 39:
+              this$static.longStrBufLen = 0;
+              state = 25;
+              continue stateloop;
+            case 62:
+              this$static.forceQuirks = true;
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            default:this$static.forceQuirks = true;
+              state = 31;
+              continue stateloop;
+          }
+        }
+
+      case 24:
+        doctypepublicidentifierdoublequotedloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 34:
+              this$static.publicIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+              state = 26;
+              break doctypepublicidentifierdoublequotedloop;
+            case 62:
+              this$static.forceQuirks = true;
+              this$static.publicIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 26:
+        afterdoctypepublicidentifierloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              state = 44;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              state = 44;
+              break afterdoctypepublicidentifierloop;
+            case 62:
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 34:
+              this$static.longStrBufLen = 0;
+              state = 28;
+              continue stateloop;
+            case 39:
+              this$static.longStrBufLen = 0;
+              state = 29;
+              continue stateloop;
+            default:this$static.forceQuirks = true;
+              state = 31;
+              continue stateloop;
+          }
+        }
+
+      case 44:
+        betweendoctypepublicandsystemidentifiersloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 62:
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 34:
+              this$static.longStrBufLen = 0;
+              state = 28;
+              break betweendoctypepublicandsystemidentifiersloop;
+            case 39:
+              this$static.longStrBufLen = 0;
+              state = 29;
+              continue stateloop;
+            default:this$static.forceQuirks = true;
+              state = 31;
+              continue stateloop;
+          }
+        }
+
+      case 28:
+        doctypesystemidentifierdoublequotedloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 34:
+              this$static.systemIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+              state = 30;
+              continue stateloop;
+            case 62:
+              this$static.forceQuirks = true;
+              this$static.systemIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 30:
+        afterdoctypesystemidentifierloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 62:
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            default:this$static.forceQuirks = false;
+              state = 31;
+              break afterdoctypesystemidentifierloop;
+          }
+        }
+
+      case 31:
+        for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 62:
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            default:continue;
+          }
+        }
+
+      case 42:
+        doctypeystemloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          if (this$static.index < 5) {
+            folded = c;
+            c >= 65 && c <= 90 && (folded += 32);
+            if (folded != YSTEM[this$static.index]) {
+              this$static.forceQuirks = true;
+              state = 31;
+              reconsume = true;
+              continue stateloop;
+            }
+            ++this$static.index;
+            continue stateloop;
+          }
+           else {
+            state = 45;
+            reconsume = true;
+            break doctypeystemloop;
+          }
+        }
+
+      case 45:
+        afterdoctypesystemkeywordloop: for (;;) {
+          if (reconsume) {
+            reconsume = false;
+          }
+           else {
+            if (++pos == endPos) {
+              break stateloop;
+            }
+            c = $checkChar(this$static, buf, pos);
+          }
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              state = 27;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              state = 27;
+              break afterdoctypesystemkeywordloop;
+            case 34:
+              this$static.longStrBufLen = 0;
+              state = 28;
+              continue stateloop;
+            case 39:
+              this$static.longStrBufLen = 0;
+              state = 29;
+              continue stateloop;
+            case 62:
+              this$static.forceQuirks = true;
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            default:this$static.forceQuirks = true;
+              state = 31;
+              continue stateloop;
+          }
+        }
+
+      case 27:
+        beforedoctypesystemidentifierloop: for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+            case 32:
+            case 9:
+            case 12:
+              continue;
+            case 34:
+              this$static.longStrBufLen = 0;
+              state = 28;
+              continue stateloop;
+            case 39:
+              this$static.longStrBufLen = 0;
+              state = 29;
+              break beforedoctypesystemidentifierloop;
+            case 62:
+              this$static.forceQuirks = true;
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            default:this$static.forceQuirks = true;
+              state = 31;
+              continue stateloop;
+          }
+        }
+
+      case 29:
+        for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 39:
+              this$static.systemIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+              state = 30;
+              continue stateloop;
+            case 62:
+              this$static.forceQuirks = true;
+              this$static.systemIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+      case 25:
+        for (;;) {
+          if (++pos == endPos) {
+            break stateloop;
+          }
+          c = $checkChar(this$static, buf, pos);
+          switch (c) {
+            case 39:
+              this$static.publicIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+              state = 26;
+              continue stateloop;
+            case 62:
+              this$static.forceQuirks = true;
+              this$static.publicIdentifier = valueOf_0(this$static.longStrBuf, 0, this$static.longStrBufLen);
+              $emitDoctypeToken(this$static, pos);
+              state = 0;
+              continue stateloop;
+            case 13:
+              this$static.nextCharOnNewLine = true;
+              this$static.lastCR = true;
+              $appendLongStrBuf(this$static, 10);
+              break stateloop;
+            case 10:
+              this$static.nextCharOnNewLine = true;
+              $appendLongStrBuf(this$static, 10);
+              continue;
+            case 0:
+              c = 65533;
+            default:$appendLongStrBuf(this$static, c);
+              continue;
+          }
+        }
+
+    }
+  }
+  $flushChars(this$static, buf, pos);
+  this$static.stateSave = state;
+  this$static.returnStateSave = returnState;
+  return pos;
+}
+
+function $tokenizeBuffer(this$static, buffer){
+  var pos, returnState, start, state;
+  state = this$static.stateSave;
+  returnState = this$static.returnStateSave;
+  this$static.shouldSuspend = false;
+  this$static.lastCR = false;
+  start = buffer.start;
+  pos = start - 1;
+  switch (state) {
+    case 0:
+    case 1:
+    case 2:
+    case 8:
+    case 3:
+    case 56:
+    case 4:
+    case 60:
+    case 61:
+    case 62:
+    case 63:
+    case 67:
+    case 68:
+    case 69:
+    case 70:
+    case 71:
+    case 72:
+      this$static.cstart = start;
+      break;
+    default:this$static.cstart = 2147483647;
+  }
+  pos = $stateLoop(this$static, state, 0, pos, buffer.buffer, false, returnState, buffer.end);
+  pos == buffer.end?(buffer.start = pos):(buffer.start = pos + 1);
+  return this$static.lastCR;
+}
+
+function $warn(){
+  return;
+}
+
+function getClass_69(){
+  return Lnu_validator_htmlparser_impl_Tokenizer_2_classLit;
+}
+
+function newAsciiLowerCaseStringFromString(str){
+  var buf, c, i;
+  if (str == null) {
+    return null;
+  }
+  buf = initDim(_3C_classLit, 46, -1, str.length, 1);
+  for (i = 0; i < str.length; ++i) {
+    c = str.charCodeAt(i);
+    c >= 65 && c <= 90 && (c += 32);
+    buf[i] = c;
+  }
+  return String.fromCharCode.apply(null, buf);
+}
+
+function Tokenizer(){
+}
+
+_ = Tokenizer.prototype = new Object_0;
+_.getClass$ = getClass_69;
+_.typeId$ = 0;
+_.additional = 0;
+_.astralChar = null;
+_.attributeName = null;
+_.attributes = null;
+_.bmpChar = null;
+_.candidate = 0;
+_.confident = false;
+_.cstart = 0;
+_.doctypeName = null;
+_.endTag = false;
+_.endTagExpectation = null;
+_.endTagExpectationAsArray = null;
+_.entCol = 0;
+_.firstCharKey = 0;
+_.forceQuirks = false;
+_.hi = 0;
+_.html4 = false;
+_.html4ModeCompatibleWithXhtml1Schemata = false;
+_.index = 0;
+_.lastCR = false;
+_.lo = 0;
+_.longStrBuf = null;
+_.longStrBufLen = 0;
+_.mappingLangToXmlLang = 0;
+_.metaBoundaryPassed = false;
+_.newAttributesEachTime = false;
+_.prevValue = 0;
+_.publicIdentifier = null;
+_.returnStateSave = 0;
+_.seenDigits = false;
+_.shouldSuspend = false;
+_.stateSave = 0;
+_.strBuf = null;
+_.strBufLen = 0;
+_.strBufMark = 0;
+_.systemIdentifier = null;
+_.tagName = null;
+_.tokenHandler = null;
+_.value = 0;
+_.wantsComments = false;
+var CDATA_LSQB, IFRAME_ARR, LF, LT_GT, LT_SOLIDUS, NOEMBED_ARR, NOFRAMES_ARR, NOSCRIPT_ARR, OCTYPE, PLAINTEXT_ARR, REPLACEMENT_CHARACTER_0, RSQB_RSQB, SCRIPT_ARR, SPACE, STYLE_ARR, TEXTAREA_ARR, TITLE_ARR, UBLIC, XMP_ARR, YSTEM;
+function $clinit_127(){
+  $clinit_127 = nullMethod;
+  $clinit_126();
+}
+
+function $ErrorReportingTokenizer(this$static, tokenHandler){
+  $clinit_127();
+  this$static.contentSpacePolicy = ($clinit_115() , ALTER_INFOSET);
+  this$static.commentPolicy = ALTER_INFOSET;
+  this$static.xmlnsPolicy = ALTER_INFOSET;
+  this$static.namePolicy = ALTER_INFOSET;
+  this$static.tokenHandler = tokenHandler;
+  this$static.newAttributesEachTime = false;
+  this$static.bmpChar = initDim(_3C_classLit, 46, -1, 1, 1);
+  this$static.astralChar = initDim(_3C_classLit, 46, -1, 2, 1);
+  this$static.tagName = null;
+  this$static.attributeName = null;
+  this$static.doctypeName = null;
+  this$static.publicIdentifier = null;
+  this$static.systemIdentifier = null;
+  this$static.attributes = null;
+  this$static.contentNonXmlCharPolicy = ALTER_INFOSET;
+  return this$static;
+}
+
+function $checkChar(this$static, buf, pos){
+  var c, intVal;
+  this$static.linePrev = this$static.line;
+  this$static.colPrev = this$static.col;
+  if (this$static.nextCharOnNewLine) {
+    ++this$static.line;
+    this$static.col = 1;
+    this$static.nextCharOnNewLine = false;
+  }
+   else {
+    ++this$static.col;
+  }
+  c = buf[pos];
+  !this$static.confident && !this$static.alreadyComplainedAboutNonAscii && c > 127 && (this$static.alreadyComplainedAboutNonAscii = true);
+  switch (c) {
+    case 0:
+    case 9:
+    case 13:
+    case 10:
+      break;
+    case 12:
+      if (this$static.contentNonXmlCharPolicy == ($clinit_115() , FATAL)) {
+        $fatal_1(this$static, 'This document is not mappable to XML 1.0 without data loss due to ' + $toUPlusString(c) + ' which is not a legal XML 1.0 character.');
+      }
+       else {
+        this$static.contentNonXmlCharPolicy == ALTER_INFOSET && (c = buf[pos] = 32);
+        $warn('This document is not mappable to XML 1.0 without data loss due to ' + $toUPlusString(c) + ' which is not a legal XML 1.0 character.');
+      }
+
+      break;
+    default:if ((c & 64512) == 56320) {
+        if ((this$static.prev & 64512) == 55296) {
+          intVal = (this$static.prev << 10) + c + -56613888;
+          (intVal >= 983040 && intVal <= 1048573 || intVal >= 1048576 && intVal <= 1114109) && (!this$static.alreadyWarnedAboutPrivateUseCharacters && (this$static.alreadyWarnedAboutPrivateUseCharacters = true) , undefined);
+        }
+      }
+       else if (c < 32 || (c & 65534) == 65534) {
+        switch (this$static.contentNonXmlCharPolicy.ordinal) {
+          case 1:
+            $fatal_1(this$static, 'Forbidden code point ' + $toUPlusString(c) + '.');
+            break;
+          case 2:
+            c = buf[pos] = 65533;
+          case 0:
+            $err('Forbidden code point ' + $toUPlusString(c) + '.');
+        }
+      }
+       else
+        c >= 127 && c <= 159 || c >= 64976 && c <= 65007?$err('Forbidden code point ' + $toUPlusString(c) + '.'):c >= 57344 && c <= 63743 && (!this$static.alreadyWarnedAboutPrivateUseCharacters && (this$static.alreadyWarnedAboutPrivateUseCharacters = true) , undefined);
+  }
+  this$static.prev = c;
+  return c;
+}
+
+function $errLtOrEqualsOrGraveInUnquotedAttributeOrNull(c){
+  switch (c) {
+    case 61:
+      return;
+    case 60:
+      return;
+    case 96:
+      return;
+  }
+}
+
+function $errNcrControlChar(this$static, ch){
+  switch (this$static.contentNonXmlCharPolicy.ordinal) {
+    case 1:
+      $fatal_1(this$static, 'Character reference expands to a control character (' + $toUPlusString(this$static.value & 65535) + ').');
+      break;
+    case 2:
+      ch = 65533;
+    case 0:
+      $err('Character reference expands to a control character (' + $toUPlusString(this$static.value & 65535) + ').');
+  }
+  return ch;
+}
+
+function $errNcrNonCharacter(this$static, ch){
+  switch (this$static.contentNonXmlCharPolicy.ordinal) {
+    case 1:
+      $fatal_1(this$static, 'Character reference expands to a non-character (' + $toUPlusString(this$static.value & 65535) + ').');
+      break;
+    case 2:
+      ch = 65533;
+    case 0:
+      $err('Character reference expands to a non-character (' + $toUPlusString(this$static.value & 65535) + ').');
+  }
+  return ch;
+}
+
+function $errUnquotedAttributeValOrNull(c){
+  switch (c) {
+    case 60:
+      return;
+    case 96:
+      return;
+    case 65533:
+      return;
+    default:return;
+  }
+}
+
+function $flushChars(this$static, buf, pos){
+  var currCol, currLine;
+  if (pos > this$static.cstart) {
+    currLine = this$static.line;
+    currCol = this$static.col;
+    this$static.line = this$static.linePrev;
+    this$static.col = this$static.colPrev;
+    $characters(this$static.tokenHandler, buf, this$static.cstart, pos - this$static.cstart);
+    this$static.line = currLine;
+    this$static.col = currCol;
+  }
+  this$static.cstart = 2147483647;
+}
+
+function $getColumnNumber(this$static){
+  if (this$static.col > 0) {
+    return this$static.col;
+  }
+   else {
+    return -1;
+  }
+}
+
+function $getLineNumber(this$static){
+  if (this$static.line > 0) {
+    return this$static.line;
+  }
+   else {
+    return -1;
+  }
+}
+
+function $toUPlusString(c){
+  var hexString;
+  hexString = toPowerOfTwoString(c, 4);
+  switch (hexString.length) {
+    case 1:
+      return 'U+000' + hexString;
+    case 2:
+      return 'U+00' + hexString;
+    case 3:
+      return 'U+0' + hexString;
+    default:return 'U+' + hexString;
+  }
+}
+
+function getClass_70(){
+  return Lnu_validator_htmlparser_impl_ErrorReportingTokenizer_2_classLit;
+}
+
+function ErrorReportingTokenizer(){
+}
+
+_ = ErrorReportingTokenizer.prototype = new Tokenizer;
+_.getClass$ = getClass_70;
+_.typeId$ = 0;
+_.alreadyComplainedAboutNonAscii = false;
+_.alreadyWarnedAboutPrivateUseCharacters = false;
+_.col = 0;
+_.colPrev = 0;
+_.line = 0;
+_.linePrev = 0;
+_.nextCharOnNewLine = false;
+_.prev = 0;
+function $clinit_128(){
+  $clinit_128 = nullMethod;
+  EMPTY_ATTRIBUTENAMES = initDim(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 59, 13, 0, 0);
+  EMPTY_STRINGS = initDim(_3Ljava_lang_String_2_classLit, 55, 1, 0, 0);
+  EMPTY_ATTRIBUTES = $HtmlAttributes(new HtmlAttributes, 0);
+}
+
+function $HtmlAttributes(this$static, mode){
+  $clinit_128();
+  this$static.mode = mode;
+  this$static.length_0 = 0;
+  this$static.names = initDim(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 59, 13, 5, 0);
+  this$static.values = initDim(_3Ljava_lang_String_2_classLit, 55, 1, 5, 0);
+  this$static.xmlnsLength = 0;
+  this$static.xmlnsNames = EMPTY_ATTRIBUTENAMES;
+  this$static.xmlnsValues = EMPTY_STRINGS;
+  return this$static;
+}
+
+function $addAttribute(this$static, name_0, value, xmlnsPolicy){
+  var newLen, newNames, newValues;
+  name_0 == ($clinit_124() , ID);
+  if (name_0.xmlns) {
+    if (this$static.xmlnsNames.length == this$static.xmlnsLength) {
+      newLen = this$static.xmlnsLength == 0?2:this$static.xmlnsLength << 1;
+      newNames = initDim(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 59, 13, newLen, 0);
+      arraycopy(this$static.xmlnsNames, 0, newNames, 0, this$static.xmlnsNames.length);
+      this$static.xmlnsNames = newNames;
+      newValues = initDim(_3Ljava_lang_String_2_classLit, 55, 1, newLen, 0);
+      arraycopy(this$static.xmlnsValues, 0, newValues, 0, this$static.xmlnsValues.length);
+      this$static.xmlnsValues = newValues;
+    }
+    this$static.xmlnsNames[this$static.xmlnsLength] = name_0;
+    this$static.xmlnsValues[this$static.xmlnsLength] = value;
+    ++this$static.xmlnsLength;
+    switch (xmlnsPolicy.ordinal) {
+      case 1:
+        throw $SAXException(new SAXException, 'Saw an xmlns attribute.');
+      case 2:
+        return;
+    }
+  }
+  if (this$static.names.length == this$static.length_0) {
+    newLen = this$static.length_0 << 1;
+    newNames = initDim(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 59, 13, newLen, 0);
+    arraycopy(this$static.names, 0, newNames, 0, this$static.names.length);
+    this$static.names = newNames;
+    newValues = initDim(_3Ljava_lang_String_2_classLit, 55, 1, newLen, 0);
+    arraycopy(this$static.values, 0, newValues, 0, this$static.values.length);
+    this$static.values = newValues;
+  }
+  this$static.names[this$static.length_0] = name_0;
+  this$static.values[this$static.length_0] = value;
+  ++this$static.length_0;
+}
+
+function $clear_0(this$static, m){
+  var i;
+  for (i = 0; i < this$static.length_0; ++i) {
+    setCheck(this$static.names, i, null);
+    setCheck(this$static.values, i, null);
+  }
+  this$static.length_0 = 0;
+  this$static.mode = m;
+  for (i = 0; i < this$static.xmlnsLength; ++i) {
+    setCheck(this$static.xmlnsNames, i, null);
+    setCheck(this$static.xmlnsValues, i, null);
+  }
+  this$static.xmlnsLength = 0;
+}
+
+function $clearWithoutReleasingContents(this$static){
+  var i;
+  for (i = 0; i < this$static.length_0; ++i) {
+    setCheck(this$static.names, i, null);
+    setCheck(this$static.values, i, null);
+  }
+  this$static.length_0 = 0;
+}
+
+function $cloneAttributes(this$static){
+  var clone, i;
+  clone = $HtmlAttributes(new HtmlAttributes, 0);
+  for (i = 0; i < this$static.length_0; ++i) {
+    $addAttribute(clone, this$static.names[i], this$static.values[i], ($clinit_115() , ALLOW));
+  }
+  for (i = 0; i < this$static.xmlnsLength; ++i) {
+    $addAttribute(clone, this$static.xmlnsNames[i], this$static.xmlnsValues[i], ($clinit_115() , ALLOW));
+  }
+  return clone;
+}
+
+function $contains(this$static, name_0){
+  var i;
+  for (i = 0; i < this$static.length_0; ++i) {
+    if (name_0.local[0] == this$static.names[i].local[0]) {
+      return true;
+    }
+  }
+  for (i = 0; i < this$static.xmlnsLength; ++i) {
+    if (name_0.local[0] == this$static.xmlnsNames[i].local[0]) {
+      return true;
+    }
+  }
+  return false;
+}
+
+function $equalsAnother_0(this$static, other){
+  var found, i, j, otherLength, ownLocal;
+  otherLength = other.length_0;
+  if (this$static.length_0 != otherLength) {
+    return false;
+  }
+  for (i = 0; i < this$static.length_0; ++i) {
+    found = false;
+    ownLocal = this$static.names[i].local[0];
+    for (j = 0; j < otherLength; ++j) {
+      if (ownLocal == other.names[j].local[0]) {
+        found = true;
+        if (!$equals_1(this$static.values[i], other.values[j])) {
+          return false;
+        }
+      }
+    }
+    if (!found) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function $getAttributeName(this$static, index){
+  if (index < this$static.length_0 && index >= 0) {
+    return this$static.names[index];
+  }
+   else {
+    return null;
+  }
+}
+
+function $getIndex(this$static, name_0){
+  var i;
+  for (i = 0; i < this$static.length_0; ++i) {
+    if (this$static.names[i] == name_0) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+function $getLocalName(this$static, index){
+  if (index < this$static.length_0 && index >= 0) {
+    return this$static.names[index].local[this$static.mode];
+  }
+   else {
+    return null;
+  }
+}
+
+function $getURI(this$static, index){
+  if (index < this$static.length_0 && index >= 0) {
+    return this$static.names[index].uri[this$static.mode];
+  }
+   else {
+    return null;
+  }
+}
+
+function $getValue_0(this$static, index){
+  if (index < this$static.length_0 && index >= 0) {
+    return this$static.values[index];
+  }
+   else {
+    return null;
+  }
+}
+
+function $getValue_1(this$static, name_0){
+  var index;
+  index = $getIndex(this$static, name_0);
+  if (index == -1) {
+    return null;
+  }
+   else {
+    return $getValue_0(this$static, index);
+  }
+}
+
+function $processNonNcNames(this$static, treeBuilder, namePolicy){
+  var attName, i, name_0;
+  for (i = 0; i < this$static.length_0; ++i) {
+    attName = this$static.names[i];
+    if (!attName.ncname[this$static.mode]) {
+      name_0 = attName.local[this$static.mode];
+      switch (namePolicy.ordinal) {
+        case 2:
+          this$static.names[i] = ($clinit_124() , $AttributeName_0(new AttributeName, ALL_NO_NS, SAME_LOCAL(escapeName(name_0)), ALL_NO_PREFIX, ALL_NCNAME, false));
+        case 0:
+          attName != ($clinit_124() , XML_LANG);
+          break;
+        case 1:
+          $fatal_0(treeBuilder, 'Attribute \u201C' + name_0 + '\u201D is not serializable as XML 1.0.');
+      }
+    }
+  }
+}
+
+function getClass_71(){
+  return Lnu_validator_htmlparser_impl_HtmlAttributes_2_classLit;
+}
+
+function HtmlAttributes(){
+}
+
+_ = HtmlAttributes.prototype = new Object_0;
+_.getClass$ = getClass_71;
+_.typeId$ = 0;
+_.length_0 = 0;
+_.mode = 0;
+_.names = null;
+_.values = null;
+_.xmlnsLength = 0;
+_.xmlnsNames = null;
+_.xmlnsValues = null;
+var EMPTY_ATTRIBUTENAMES, EMPTY_ATTRIBUTES, EMPTY_STRINGS;
+function $LocatorImpl(this$static, locator){
+  $getColumnNumber(locator);
+  $getLineNumber(locator);
+  return this$static;
+}
+
+function getClass_72(){
+  return Lnu_validator_htmlparser_impl_LocatorImpl_2_classLit;
+}
+
+function LocatorImpl(){
+}
+
+_ = LocatorImpl.prototype = new Object_0;
+_.getClass$ = getClass_72;
+_.typeId$ = 0;
+function $clinit_130(){
+  $clinit_130 = nullMethod;
+  HEX_TABLE = $toCharArray('0123456789ABCDEF');
+}
+
+function appendUHexTo(sb, c){
+  var i;
+  sb.impl.string += 'U';
+  for (i = 0; i < 6; ++i) {
+    $append_1(sb, HEX_TABLE[(c & 15728640) >> 20]);
+    c <<= 4;
+  }
+}
+
+function escapeName(str){
+  $clinit_130();
+  var c, i, next, sb;
+  sb = $StringBuilder(new StringBuilder);
+  for (i = 0; i < str.length; ++i) {
+    c = str.charCodeAt(i);
+    if ((c & 64512) == 55296) {
+      next = str.charCodeAt(++i);
+      appendUHexTo(sb, (c << 10) + next + -56613888);
+    }
+     else
+      i == 0 && !(c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 255 || c >= 256 && c <= 305 || c >= 308 && c <= 318 || c >= 321 && c <= 328 || c >= 330 && c <= 382 || c >= 384 && c <= 451 || c >= 461 && c <= 496 || c >= 500 && c <= 501 || c >= 506 && c <= 535 || c >= 592 && c <= 680 || c >= 699 && c <= 705 || c == 902 || c >= 904 && c <= 906 || c == 908 || c >= 910 && c <= 929 || c >= 931 && c <= 974 || c >= 976 && c <= 982 || c == 986 || c == 988 || c == 990 || c == 992 || c >= 994 && c <= 1011 || c >= 1025 && c <= 1036 || c >= 1038 && c <= 1103 || c >= 1105 && c <= 1116 || c >= 1118 && c <= 1153 || c >= 1168 && c <= 1220 || c >= 1223 && c <= 1224 || c >= 1227 && c <= 1228 || c >= 1232 && c <= 1259 || c >= 1262 && c <= 1269 || c >= 1272 && c <= 1273 || c >= 1329 && c <= 1366 || c == 1369 || c >= 1377 && c <= 1414 || c >= 1488 && c <= 1514 || c >= 1520 && c <= 1522 || c >= 1569 && c <= 1594 || c >= 1601 && c <= 1610 || c >= 1649 && c <= 1719 || c >= 1722 && c <= 1726 || c >= 1728 && c <= 1742 || c >= 1744 && c <= 1747 || c == 1749 || c >= 1765 && c <= 1766 || c >= 2309 && c <= 2361 || c == 2365 || c >= 2392 && c <= 2401 || c >= 2437 && c <= 2444 || c >= 2447 && c <= 2448 || c >= 2451 && c <= 2472 || c >= 2474 && c <= 2480 || c == 2482 || c >= 2486 && c <= 2489 || c >= 2524 && c <= 2525 || c >= 2527 && c <= 2529 || c >= 2544 && c <= 2545 || c >= 2565 && c <= 2570 || c >= 2575 && c <= 2576 || c >= 2579 && c <= 2600 || c >= 2602 && c <= 2608 || c >= 2610 && c <= 2611 || c >= 2613 && c <= 2614 || c >= 2616 && c <= 2617 || c >= 2649 && c <= 2652 || c == 2654 || c >= 2674 && c <= 2676 || c >= 2693 && c <= 2699 || c == 2701 || c >= 2703 && c <= 2705 || c >= 2707 && c <= 2728 || c >= 2730 && c <= 2736 || c >= 2738 && c <= 2739 || c >= 2741 && c <= 2745 || c == 2749 || c == 2784 || c >= 2821 && c <= 2828 || c >= 2831 && c <= 2832 || c >= 2835 && c <= 2856 || c >= 2858 && c <= 2864 || c >= 2866 && c <= 2867 || c >= 2870 && c <= 2873 || c == 2877 || c >= 2908 && c <= 2909 || c >= 2911 && c <= 2913 || c >= 2949 && c <= 2954 || c >= 2958 && c <= 2960 || c >= 2962 && c <= 2965 || c >= 2969 && c <= 2970 || c == 2972 || c >= 2974 && c <= 2975 || c >= 2979 && c <= 2980 || c >= 2984 && c <= 2986 || c >= 2990 && c <= 2997 || c >= 2999 && c <= 3001 || c >= 3077 && c <= 3084 || c >= 3086 && c <= 3088 || c >= 3090 && c <= 3112 || c >= 3114 && c <= 3123 || c >= 3125 && c <= 3129 || c >= 3168 && c <= 3169 || c >= 3205 && c <= 3212 || c >= 3214 && c <= 3216 || c >= 3218 && c <= 3240 || c >= 3242 && c <= 3251 || c >= 3253 && c <= 3257 || c == 3294 || c >= 3296 && c <= 3297 || c >= 3333 && c <= 3340 || c >= 3342 && c <= 3344 || c >= 3346 && c <= 3368 || c >= 3370 && c <= 3385 || c >= 3424 && c <= 3425 || c >= 3585 && c <= 3630 || c == 3632 || c >= 3634 && c <= 3635 || c >= 3648 && c <= 3653 || c >= 3713 && c <= 3714 || c == 3716 || c >= 3719 && c <= 3720 || c == 3722 || c == 3725 || c >= 3732 && c <= 3735 || c >= 3737 && c <= 3743 || c >= 3745 && c <= 3747 || c == 3749 || c == 3751 || c >= 3754 && c <= 3755 || c >= 3757 && c <= 3758 || c == 3760 || c >= 3762 && c <= 3763 || c == 3773 || c >= 3776 && c <= 3780 || c >= 3904 && c <= 3911 || c >= 3913 && c <= 3945 || c >= 4256 && c <= 4293 || c >= 4304 && c <= 4342 || c == 4352 || c >= 4354 && c <= 4355 || c >= 4357 && c <= 4359 || c == 4361 || c >= 4363 && c <= 4364 || c >= 4366 && c <= 4370 || c == 4412 || c == 4414 || c == 4416 || c == 4428 || c == 4430 || c == 4432 || c >= 4436 && c <= 4437 || c == 4441 || c >= 4447 && c <= 4449 || c == 4451 || c == 4453 || c == 4455 || c == 4457 || c >= 4461 && c <= 4462 || c >= 4466 && c <= 4467 || c == 4469 || c == 4510 || c == 4520 || c == 4523 || c >= 4526 && c <= 4527 || c >= 4535 && c <= 4536 || c == 4538 || c >= 4540 && c <= 4546 || c == 4587 || c == 4592 || c == 4601 || c >= 7680 && c <= 7835 || c >= 7840 && c <= 7929 || c >= 7936 && c <= 7957 || c >= 7960 && c <= 7965 || c >= 7968 && c <= 8005 || c >= 8008 && c <= 8013 || c >= 8016 && c <= 8023 || c == 8025 || c == 8027 || c == 8029 || c >= 8031 && c <= 8061 || c >= 8064 && c <= 8116 || c >= 8118 && c <= 8124 || c == 8126 || c >= 8130 && c <= 8132 || c >= 8134 && c <= 8140 || c >= 8144 && c <= 8147 || c >= 8150 && c <= 8155 || c >= 8160 && c <= 8172 || c >= 8178 && c <= 8180 || c >= 8182 && c <= 8188 || c == 8486 || c >= 8490 && c <= 8491 || c == 8494 || c >= 8576 && c <= 8578 || c >= 12353 && c <= 12436 || c >= 12449 && c <= 12538 || c >= 12549 && c <= 12588 || c >= 44032 && c <= 55203 || c >= 19968 && c <= 40869 || c == 12295 || c >= 12321 && c <= 12329 || c == 95)?appendUHexTo(sb, c):i != 0 && !(c >= 48 && c <= 57 || c >= 1632 && c <= 1641 || c >= 1776 && c <= 1785 || c >= 2406 && c <= 2415 || c >= 2534 && c <= 2543 || c >= 2662 && c <= 2671 || c >= 2790 && c <= 2799 || c >= 2918 && c <= 2927 || c >= 3047 && c <= 3055 || c >= 3174 && c <= 3183 || c >= 3302 && c <= 3311 || c >= 3430 && c <= 3439 || c >= 3664 && c <= 3673 || c >= 3792 && c <= 3801 || c >= 3872 && c <= 3881 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 255 || c >= 256 && c <= 305 || c >= 308 && c <= 318 || c >= 321 && c <= 328 || c >= 330 && c <= 382 || c >= 384 && c <= 451 || c >= 461 && c <= 496 || c >= 500 && c <= 501 || c >= 506 && c <= 535 || c >= 592 && c <= 680 || c >= 699 && c <= 705 || c == 902 || c >= 904 && c <= 906 || c == 908 || c >= 910 && c <= 929 || c >= 931 && c <= 974 || c >= 976 && c <= 982 || c == 986 || c == 988 || c == 990 || c == 992 || c >= 994 && c <= 1011 || c >= 1025 && c <= 1036 || c >= 1038 && c <= 1103 || c >= 1105 && c <= 1116 || c >= 1118 && c <= 1153 || c >= 1168 && c <= 1220 || c >= 1223 && c <= 1224 || c >= 1227 && c <= 1228 || c >= 1232 && c <= 1259 || c >= 1262 && c <= 1269 || c >= 1272 && c <= 1273 || c >= 1329 && c <= 1366 || c == 1369 || c >= 1377 && c <= 1414 || c >= 1488 && c <= 1514 || c >= 1520 && c <= 1522 || c >= 1569 && c <= 1594 || c >= 1601 && c <= 1610 || c >= 1649 && c <= 1719 || c >= 1722 && c <= 1726 || c >= 1728 && c <= 1742 || c >= 1744 && c <= 1747 || c == 1749 || c >= 1765 && c <= 1766 || c >= 2309 && c <= 2361 || c == 2365 || c >= 2392 && c <= 2401 || c >= 2437 && c <= 2444 || c >= 2447 && c <= 2448 || c >= 2451 && c <= 2472 || c >= 2474 && c <= 2480 || c == 2482 || c >= 2486 && c <= 2489 || c >= 2524 && c <= 2525 || c >= 2527 && c <= 2529 || c >= 2544 && c <= 2545 || c >= 2565 && c <= 2570 || c >= 2575 && c <= 2576 || c >= 2579 && c <= 2600 || c >= 2602 && c <= 2608 || c >= 2610 && c <= 2611 || c >= 2613 && c <= 2614 || c >= 2616 && c <= 2617 || c >= 2649 && c <= 2652 || c == 2654 || c >= 2674 && c <= 2676 || c >= 2693 && c <= 2699 || c == 2701 || c >= 2703 && c <= 2705 || c >= 2707 && c <= 2728 || c >= 2730 && c <= 2736 || c >= 2738 && c <= 2739 || c >= 2741 && c <= 2745 || c == 2749 || c == 2784 || c >= 2821 && c <= 2828 || c >= 2831 && c <= 2832 || c >= 2835 && c <= 2856 || c >= 2858 && c <= 2864 || c >= 2866 && c <= 2867 || c >= 2870 && c <= 2873 || c == 2877 || c >= 2908 && c <= 2909 || c >= 2911 && c <= 2913 || c >= 2949 && c <= 2954 || c >= 2958 && c <= 2960 || c >= 2962 && c <= 2965 || c >= 2969 && c <= 2970 || c == 2972 || c >= 2974 && c <= 2975 || c >= 2979 && c <= 2980 || c >= 2984 && c <= 2986 || c >= 2990 && c <= 2997 || c >= 2999 && c <= 3001 || c >= 3077 && c <= 3084 || c >= 3086 && c <= 3088 || c >= 3090 && c <= 3112 || c >= 3114 && c <= 3123 || c >= 3125 && c <= 3129 || c >= 3168 && c <= 3169 || c >= 3205 && c <= 3212 || c >= 3214 && c <= 3216 || c >= 3218 && c <= 3240 || c >= 3242 && c <= 3251 || c >= 3253 && c <= 3257 || c == 3294 || c >= 3296 && c <= 3297 || c >= 3333 && c <= 3340 || c >= 3342 && c <= 3344 || c >= 3346 && c <= 3368 || c >= 3370 && c <= 3385 || c >= 3424 && c <= 3425 || c >= 3585 && c <= 3630 || c == 3632 || c >= 3634 && c <= 3635 || c >= 3648 && c <= 3653 || c >= 3713 && c <= 3714 || c == 3716 || c >= 3719 && c <= 3720 || c == 3722 || c == 3725 || c >= 3732 && c <= 3735 || c >= 3737 && c <= 3743 || c >= 3745 && c <= 3747 || c == 3749 || c == 3751 || c >= 3754 && c <= 3755 || c >= 3757 && c <= 3758 || c == 3760 || c >= 3762 && c <= 3763 || c == 3773 || c >= 3776 && c <= 3780 || c >= 3904 && c <= 3911 || c >= 3913 && c <= 3945 || c >= 4256 && c <= 4293 || c >= 4304 && c <= 4342 || c == 4352 || c >= 4354 && c <= 4355 || c >= 4357 && c <= 4359 || c == 4361 || c >= 4363 && c <= 4364 || c >= 4366 && c <= 4370 || c == 4412 || c == 4414 || c == 4416 || c == 4428 || c == 4430 || c == 4432 || c >= 4436 && c <= 4437 || c == 4441 || c >= 4447 && c <= 4449 || c == 4451 || c == 4453 || c == 4455 || c == 4457 || c >= 4461 && c <= 4462 || c >= 4466 && c <= 4467 || c == 4469 || c == 4510 || c == 4520 || c == 4523 || c >= 4526 && c <= 4527 || c >= 4535 && c <= 4536 || c == 4538 || c >= 4540 && c <= 4546 || c == 4587 || c == 4592 || c == 4601 || c >= 7680 && c <= 7835 || c >= 7840 && c <= 7929 || c >= 7936 && c <= 7957 || c >= 7960 && c <= 7965 || c >= 7968 && c <= 8005 || c >= 8008 && c <= 8013 || c >= 8016 && c <= 8023 || c == 8025 || c == 8027 || c == 8029 || c >= 8031 && c <= 8061 || c >= 8064 && c <= 8116 || c >= 8118 && c <= 8124 || c == 8126 || c >= 8130 && c <= 8132 || c >= 8134 && c <= 8140 || c >= 8144 && c <= 8147 || c >= 8150 && c <= 8155 || c >= 8160 && c <= 8172 || c >= 8178 && c <= 8180 || c >= 8182 && c <= 8188 || c == 8486 || c >= 8490 && c <= 8491 || c == 8494 || c >= 8576 && c <= 8578 || c >= 12353 && c <= 12436 || c >= 12449 && c <= 12538 || c >= 12549 && c <= 12588 || c >= 44032 && c <= 55203 || c >= 19968 && c <= 40869 || c == 12295 || c >= 12321 && c <= 12329 || c == 95 || c == 46 || c == 45 || c >= 768 && c <= 837 || c >= 864 && c <= 865 || c >= 1155 && c <= 1158 || c >= 1425 && c <= 1441 || c >= 1443 && c <= 1465 || c >= 1467 && c <= 1469 || c == 1471 || c >= 1473 && c <= 1474 || c == 1476 || c >= 1611 && c <= 1618 || c == 1648 || c >= 1750 && c <= 1756 || c >= 1757 && c <= 1759 || c >= 1760 && c <= 1764 || c >= 1767 && c <= 1768 || c >= 1770 && c <= 1773 || c >= 2305 && c <= 2307 || c == 2364 || c >= 2366 && c <= 2380 || c == 2381 || c >= 2385 && c <= 2388 || c >= 2402 && c <= 2403 || c >= 2433 && c <= 2435 || c == 2492 || c == 2494 || c == 2495 || c >= 2496 && c <= 2500 || c >= 2503 && c <= 2504 || c >= 2507 && c <= 2509 || c == 2519 || c >= 2530 && c <= 2531 || c == 2562 || c == 2620 || c == 2622 || c == 2623 || c >= 2624 && c <= 2626 || c >= 2631 && c <= 2632 || c >= 2635 && c <= 2637 || c >= 2672 && c <= 2673 || c >= 2689 && c <= 2691 || c == 2748 || c >= 2750 && c <= 2757 || c >= 2759 && c <= 2761 || c >= 2763 && c <= 2765 || c >= 2817 && c <= 2819 || c == 2876 || c >= 2878 && c <= 2883 || c >= 2887 && c <= 2888 || c >= 2891 && c <= 2893 || c >= 2902 && c <= 2903 || c >= 2946 && c <= 2947 || c >= 3006 && c <= 3010 || c >= 3014 && c <= 3016 || c >= 3018 && c <= 3021 || c == 3031 || c >= 3073 && c <= 3075 || c >= 3134 && c <= 3140 || c >= 3142 && c <= 3144 || c >= 3146 && c <= 3149 || c >= 3157 && c <= 3158 || c >= 3202 && c <= 3203 || c >= 3262 && c <= 3268 || c >= 3270 && c <= 3272 || c >= 3274 && c <= 3277 || c >= 3285 && c <= 3286 || c >= 3330 && c <= 3331 || c >= 3390 && c <= 3395 || c >= 3398 && c <= 3400 || c >= 3402 && c <= 3405 || c == 3415 || c == 3633 || c >= 3636 && c <= 3642 || c >= 3655 && c <= 3662 || c == 3761 || c >= 3764 && c <= 3769 || c >= 3771 && c <= 3772 || c >= 3784 && c <= 3789 || c >= 3864 && c <= 3865 || c == 3893 || c == 3895 || c == 3897 || c == 3902 || c == 3903 || c >= 3953 && c <= 3972 || c >= 3974 && c <= 3979 || c >= 3984 && c <= 3989 || c == 3991 || c >= 3993 && c <= 4013 || c >= 4017 && c <= 4023 || c == 4025 || c >= 8400 && c <= 8412 || c == 8417 || c >= 12330 && c <= 12335 || c == 12441 || c == 12442 || c == 183 || c == 720 || c == 721 || c == 903 || c == 1600 || c == 3654 || c == 3782 || c == 12293 || c >= 12337 && c <= 12341 || c >= 12445 && c <= 12446 || c >= 12540 && c <= 12542)?appendUHexTo(sb, c):(sb.impl.string += String.fromCharCode(c) , undefined);
+  }
+  return String(sb.impl.string);
+}
+
+function isNCName(str){
+  $clinit_130();
+  var i, len;
+  if (str == null) {
+    return false;
+  }
+   else {
+    len = str.length;
+    switch (len) {
+      case 0:
+        return false;
+      case 1:
+        return isNCNameStart(str.charCodeAt(0));
+      default:if (!isNCNameStart(str.charCodeAt(0))) {
+          return false;
+        }
+
+        for (i = 1; i < len; ++i) {
+          if (!isNCNameTrail(str.charCodeAt(i))) {
+            return false;
+          }
+        }
+
+    }
+    return true;
+  }
+}
+
+function isNCNameStart(c){
+  return c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 255 || c >= 256 && c <= 305 || c >= 308 && c <= 318 || c >= 321 && c <= 328 || c >= 330 && c <= 382 || c >= 384 && c <= 451 || c >= 461 && c <= 496 || c >= 500 && c <= 501 || c >= 506 && c <= 535 || c >= 592 && c <= 680 || c >= 699 && c <= 705 || c == 902 || c >= 904 && c <= 906 || c == 908 || c >= 910 && c <= 929 || c >= 931 && c <= 974 || c >= 976 && c <= 982 || c == 986 || c == 988 || c == 990 || c == 992 || c >= 994 && c <= 1011 || c >= 1025 && c <= 1036 || c >= 1038 && c <= 1103 || c >= 1105 && c <= 1116 || c >= 1118 && c <= 1153 || c >= 1168 && c <= 1220 || c >= 1223 && c <= 1224 || c >= 1227 && c <= 1228 || c >= 1232 && c <= 1259 || c >= 1262 && c <= 1269 || c >= 1272 && c <= 1273 || c >= 1329 && c <= 1366 || c == 1369 || c >= 1377 && c <= 1414 || c >= 1488 && c <= 1514 || c >= 1520 && c <= 1522 || c >= 1569 && c <= 1594 || c >= 1601 && c <= 1610 || c >= 1649 && c <= 1719 || c >= 1722 && c <= 1726 || c >= 1728 && c <= 1742 || c >= 1744 && c <= 1747 || c == 1749 || c >= 1765 && c <= 1766 || c >= 2309 && c <= 2361 || c == 2365 || c >= 2392 && c <= 2401 || c >= 2437 && c <= 2444 || c >= 2447 && c <= 2448 || c >= 2451 && c <= 2472 || c >= 2474 && c <= 2480 || c == 2482 || c >= 2486 && c <= 2489 || c >= 2524 && c <= 2525 || c >= 2527 && c <= 2529 || c >= 2544 && c <= 2545 || c >= 2565 && c <= 2570 || c >= 2575 && c <= 2576 || c >= 2579 && c <= 2600 || c >= 2602 && c <= 2608 || c >= 2610 && c <= 2611 || c >= 2613 && c <= 2614 || c >= 2616 && c <= 2617 || c >= 2649 && c <= 2652 || c == 2654 || c >= 2674 && c <= 2676 || c >= 2693 && c <= 2699 || c == 2701 || c >= 2703 && c <= 2705 || c >= 2707 && c <= 2728 || c >= 2730 && c <= 2736 || c >= 2738 && c <= 2739 || c >= 2741 && c <= 2745 || c == 2749 || c == 2784 || c >= 2821 && c <= 2828 || c >= 2831 && c <= 2832 || c >= 2835 && c <= 2856 || c >= 2858 && c <= 2864 || c >= 2866 && c <= 2867 || c >= 2870 && c <= 2873 || c == 2877 || c >= 2908 && c <= 2909 || c >= 2911 && c <= 2913 || c >= 2949 && c <= 2954 || c >= 2958 && c <= 2960 || c >= 2962 && c <= 2965 || c >= 2969 && c <= 2970 || c == 2972 || c >= 2974 && c <= 2975 || c >= 2979 && c <= 2980 || c >= 2984 && c <= 2986 || c >= 2990 && c <= 2997 || c >= 2999 && c <= 3001 || c >= 3077 && c <= 3084 || c >= 3086 && c <= 3088 || c >= 3090 && c <= 3112 || c >= 3114 && c <= 3123 || c >= 3125 && c <= 3129 || c >= 3168 && c <= 3169 || c >= 3205 && c <= 3212 || c >= 3214 && c <= 3216 || c >= 3218 && c <= 3240 || c >= 3242 && c <= 3251 || c >= 3253 && c <= 3257 || c == 3294 || c >= 3296 && c <= 3297 || c >= 3333 && c <= 3340 || c >= 3342 && c <= 3344 || c >= 3346 && c <= 3368 || c >= 3370 && c <= 3385 || c >= 3424 && c <= 3425 || c >= 3585 && c <= 3630 || c == 3632 || c >= 3634 && c <= 3635 || c >= 3648 && c <= 3653 || c >= 3713 && c <= 3714 || c == 3716 || c >= 3719 && c <= 3720 || c == 3722 || c == 3725 || c >= 3732 && c <= 3735 || c >= 3737 && c <= 3743 || c >= 3745 && c <= 3747 || c == 3749 || c == 3751 || c >= 3754 && c <= 3755 || c >= 3757 && c <= 3758 || c == 3760 || c >= 3762 && c <= 3763 || c == 3773 || c >= 3776 && c <= 3780 || c >= 3904 && c <= 3911 || c >= 3913 && c <= 3945 || c >= 4256 && c <= 4293 || c >= 4304 && c <= 4342 || c == 4352 || c >= 4354 && c <= 4355 || c >= 4357 && c <= 4359 || c == 4361 || c >= 4363 && c <= 4364 || c >= 4366 && c <= 4370 || c == 4412 || c == 4414 || c == 4416 || c == 4428 || c == 4430 || c == 4432 || c >= 4436 && c <= 4437 || c == 4441 || c >= 4447 && c <= 4449 || c == 4451 || c == 4453 || c == 4455 || c == 4457 || c >= 4461 && c <= 4462 || c >= 4466 && c <= 4467 || c == 4469 || c == 4510 || c == 4520 || c == 4523 || c >= 4526 && c <= 4527 || c >= 4535 && c <= 4536 || c == 4538 || c >= 4540 && c <= 4546 || c == 4587 || c == 4592 || c == 4601 || c >= 7680 && c <= 7835 || c >= 7840 && c <= 7929 || c >= 7936 && c <= 7957 || c >= 7960 && c <= 7965 || c >= 7968 && c <= 8005 || c >= 8008 && c <= 8013 || c >= 8016 && c <= 8023 || c == 8025 || c == 8027 || c == 8029 || c >= 8031 && c <= 8061 || c >= 8064 && c <= 8116 || c >= 8118 && c <= 8124 || c == 8126 || c >= 8130 && c <= 8132 || c >= 8134 && c <= 8140 || c >= 8144 && c <= 8147 || c >= 8150 && c <= 8155 || c >= 8160 && c <= 8172 || c >= 8178 && c <= 8180 || c >= 8182 && c <= 8188 || c == 8486 || c >= 8490 && c <= 8491 || c == 8494 || c >= 8576 && c <= 8578 || c >= 12353 && c <= 12436 || c >= 12449 && c <= 12538 || c >= 12549 && c <= 12588 || c >= 44032 && c <= 55203 || c >= 19968 && c <= 40869 || c == 12295 || c >= 12321 && c <= 12329 || c == 95;
+}
+
+function isNCNameTrail(c){
+  return c >= 48 && c <= 57 || c >= 1632 && c <= 1641 || c >= 1776 && c <= 1785 || c >= 2406 && c <= 2415 || c >= 2534 && c <= 2543 || c >= 2662 && c <= 2671 || c >= 2790 && c <= 2799 || c >= 2918 && c <= 2927 || c >= 3047 && c <= 3055 || c >= 3174 && c <= 3183 || c >= 3302 && c <= 3311 || c >= 3430 && c <= 3439 || c >= 3664 && c <= 3673 || c >= 3792 && c <= 3801 || c >= 3872 && c <= 3881 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 255 || c >= 256 && c <= 305 || c >= 308 && c <= 318 || c >= 321 && c <= 328 || c >= 330 && c <= 382 || c >= 384 && c <= 451 || c >= 461 && c <= 496 || c >= 500 && c <= 501 || c >= 506 && c <= 535 || c >= 592 && c <= 680 || c >= 699 && c <= 705 || c == 902 || c >= 904 && c <= 906 || c == 908 || c >= 910 && c <= 929 || c >= 931 && c <= 974 || c >= 976 && c <= 982 || c == 986 || c == 988 || c == 990 || c == 992 || c >= 994 && c <= 1011 || c >= 1025 && c <= 1036 || c >= 1038 && c <= 1103 || c >= 1105 && c <= 1116 || c >= 1118 && c <= 1153 || c >= 1168 && c <= 1220 || c >= 1223 && c <= 1224 || c >= 1227 && c <= 1228 || c >= 1232 && c <= 1259 || c >= 1262 && c <= 1269 || c >= 1272 && c <= 1273 || c >= 1329 && c <= 1366 || c == 1369 || c >= 1377 && c <= 1414 || c >= 1488 && c <= 1514 || c >= 1520 && c <= 1522 || c >= 1569 && c <= 1594 || c >= 1601 && c <= 1610 || c >= 1649 && c <= 1719 || c >= 1722 && c <= 1726 || c >= 1728 && c <= 1742 || c >= 1744 && c <= 1747 || c == 1749 || c >= 1765 && c <= 1766 || c >= 2309 && c <= 2361 || c == 2365 || c >= 2392 && c <= 2401 || c >= 2437 && c <= 2444 || c >= 2447 && c <= 2448 || c >= 2451 && c <= 2472 || c >= 2474 && c <= 2480 || c == 2482 || c >= 2486 && c <= 2489 || c >= 2524 && c <= 2525 || c >= 2527 && c <= 2529 || c >= 2544 && c <= 2545 || c >= 2565 && c <= 2570 || c >= 2575 && c <= 2576 || c >= 2579 && c <= 2600 || c >= 2602 && c <= 2608 || c >= 2610 && c <= 2611 || c >= 2613 && c <= 2614 || c >= 2616 && c <= 2617 || c >= 2649 && c <= 2652 || c == 2654 || c >= 2674 && c <= 2676 || c >= 2693 && c <= 2699 || c == 2701 || c >= 2703 && c <= 2705 || c >= 2707 && c <= 2728 || c >= 2730 && c <= 2736 || c >= 2738 && c <= 2739 || c >= 2741 && c <= 2745 || c == 2749 || c == 2784 || c >= 2821 && c <= 2828 || c >= 2831 && c <= 2832 || c >= 2835 && c <= 2856 || c >= 2858 && c <= 2864 || c >= 2866 && c <= 2867 || c >= 2870 && c <= 2873 || c == 2877 || c >= 2908 && c <= 2909 || c >= 2911 && c <= 2913 || c >= 2949 && c <= 2954 || c >= 2958 && c <= 2960 || c >= 2962 && c <= 2965 || c >= 2969 && c <= 2970 || c == 2972 || c >= 2974 && c <= 2975 || c >= 2979 && c <= 2980 || c >= 2984 && c <= 2986 || c >= 2990 && c <= 2997 || c >= 2999 && c <= 3001 || c >= 3077 && c <= 3084 || c >= 3086 && c <= 3088 || c >= 3090 && c <= 3112 || c >= 3114 && c <= 3123 || c >= 3125 && c <= 3129 || c >= 3168 && c <= 3169 || c >= 3205 && c <= 3212 || c >= 3214 && c <= 3216 || c >= 3218 && c <= 3240 || c >= 3242 && c <= 3251 || c >= 3253 && c <= 3257 || c == 3294 || c >= 3296 && c <= 3297 || c >= 3333 && c <= 3340 || c >= 3342 && c <= 3344 || c >= 3346 && c <= 3368 || c >= 3370 && c <= 3385 || c >= 3424 && c <= 3425 || c >= 3585 && c <= 3630 || c == 3632 || c >= 3634 && c <= 3635 || c >= 3648 && c <= 3653 || c >= 3713 && c <= 3714 || c == 3716 || c >= 3719 && c <= 3720 || c == 3722 || c == 3725 || c >= 3732 && c <= 3735 || c >= 3737 && c <= 3743 || c >= 3745 && c <= 3747 || c == 3749 || c == 3751 || c >= 3754 && c <= 3755 || c >= 3757 && c <= 3758 || c == 3760 || c >= 3762 && c <= 3763 || c == 3773 || c >= 3776 && c <= 3780 || c >= 3904 && c <= 3911 || c >= 3913 && c <= 3945 || c >= 4256 && c <= 4293 || c >= 4304 && c <= 4342 || c == 4352 || c >= 4354 && c <= 4355 || c >= 4357 && c <= 4359 || c == 4361 || c >= 4363 && c <= 4364 || c >= 4366 && c <= 4370 || c == 4412 || c == 4414 || c == 4416 || c == 4428 || c == 4430 || c == 4432 || c >= 4436 && c <= 4437 || c == 4441 || c >= 4447 && c <= 4449 || c == 4451 || c == 4453 || c == 4455 || c == 4457 || c >= 4461 && c <= 4462 || c >= 4466 && c <= 4467 || c == 4469 || c == 4510 || c == 4520 || c == 4523 || c >= 4526 && c <= 4527 || c >= 4535 && c <= 4536 || c == 4538 || c >= 4540 && c <= 4546 || c == 4587 || c == 4592 || c == 4601 || c >= 7680 && c <= 7835 || c >= 7840 && c <= 7929 || c >= 7936 && c <= 7957 || c >= 7960 && c <= 7965 || c >= 7968 && c <= 8005 || c >= 8008 && c <= 8013 || c >= 8016 && c <= 8023 || c == 8025 || c == 8027 || c == 8029 || c >= 8031 && c <= 8061 || c >= 8064 && c <= 8116 || c >= 8118 && c <= 8124 || c == 8126 || c >= 8130 && c <= 8132 || c >= 8134 && c <= 8140 || c >= 8144 && c <= 8147 || c >= 8150 && c <= 8155 || c >= 8160 && c <= 8172 || c >= 8178 && c <= 8180 || c >= 8182 && c <= 8188 || c == 8486 || c >= 8490 && c <= 8491 || c == 8494 || c >= 8576 && c <= 8578 || c >= 12353 && c <= 12436 || c >= 12449 && c <= 12538 || c >= 12549 && c <= 12588 || c >= 44032 && c <= 55203 || c >= 19968 && c <= 40869 || c == 12295 || c >= 12321 && c <= 12329 || c == 95 || c == 46 || c == 45 || c >= 768 && c <= 837 || c >= 864 && c <= 865 || c >= 1155 && c <= 1158 || c >= 1425 && c <= 1441 || c >= 1443 && c <= 1465 || c >= 1467 && c <= 1469 || c == 1471 || c >= 1473 && c <= 1474 || c == 1476 || c >= 1611 && c <= 1618 || c == 1648 || c >= 1750 && c <= 1756 || c >= 1757 && c <= 1759 || c >= 1760 && c <= 1764 || c >= 1767 && c <= 1768 || c >= 1770 && c <= 1773 || c >= 2305 && c <= 2307 || c == 2364 || c >= 2366 && c <= 2380 || c == 2381 || c >= 2385 && c <= 2388 || c >= 2402 && c <= 2403 || c >= 2433 && c <= 2435 || c == 2492 || c == 2494 || c == 2495 || c >= 2496 && c <= 2500 || c >= 2503 && c <= 2504 || c >= 2507 && c <= 2509 || c == 2519 || c >= 2530 && c <= 2531 || c == 2562 || c == 2620 || c == 2622 || c == 2623 || c >= 2624 && c <= 2626 || c >= 2631 && c <= 2632 || c >= 2635 && c <= 2637 || c >= 2672 && c <= 2673 || c >= 2689 && c <= 2691 || c == 2748 || c >= 2750 && c <= 2757 || c >= 2759 && c <= 2761 || c >= 2763 && c <= 2765 || c >= 2817 && c <= 2819 || c == 2876 || c >= 2878 && c <= 2883 || c >= 2887 && c <= 2888 || c >= 2891 && c <= 2893 || c >= 2902 && c <= 2903 || c >= 2946 && c <= 2947 || c >= 3006 && c <= 3010 || c >= 3014 && c <= 3016 || c >= 3018 && c <= 3021 || c == 3031 || c >= 3073 && c <= 3075 || c >= 3134 && c <= 3140 || c >= 3142 && c <= 3144 || c >= 3146 && c <= 3149 || c >= 3157 && c <= 3158 || c >= 3202 && c <= 3203 || c >= 3262 && c <= 3268 || c >= 3270 && c <= 3272 || c >= 3274 && c <= 3277 || c >= 3285 && c <= 3286 || c >= 3330 && c <= 3331 || c >= 3390 && c <= 3395 || c >= 3398 && c <= 3400 || c >= 3402 && c <= 3405 || c == 3415 || c == 3633 || c >= 3636 && c <= 3642 || c >= 3655 && c <= 3662 || c == 3761 || c >= 3764 && c <= 3769 || c >= 3771 && c <= 3772 || c >= 3784 && c <= 3789 || c >= 3864 && c <= 3865 || c == 3893 || c == 3895 || c == 3897 || c == 3902 || c == 3903 || c >= 3953 && c <= 3972 || c >= 3974 && c <= 3979 || c >= 3984 && c <= 3989 || c == 3991 || c >= 3993 && c <= 4013 || c >= 4017 && c <= 4023 || c == 4025 || c >= 8400 && c <= 8412 || c == 8417 || c >= 12330 && c <= 12335 || c == 12441 || c == 12442 || c == 183 || c == 720 || c == 721 || c == 903 || c == 1600 || c == 3654 || c == 3782 || c == 12293 || c >= 12337 && c <= 12341 || c >= 12445 && c <= 12446 || c >= 12540 && c <= 12542;
+}
+
+var HEX_TABLE;
+function $clinit_131(){
+  $clinit_131 = nullMethod;
+  NAMES = initValues(_3Ljava_lang_String_2_classLit, 55, 1, ['lig', 'lig;', 'P', 'P;', 'cute', 'cute;', 'reve;', 'irc', 'irc;', 'y;', 'r;', 'rave', 'rave;', 'pha;', 'acr;', 'd;', 'gon;', 'pf;', 'plyFunction;', 'ing', 'ing;', 'cr;', 'sign;', 'ilde', 'ilde;', 'ml', 'ml;', 'ckslash;', 'rv;', 'rwed;', 'y;', 'cause;', 'rnoullis;', 'ta;', 'r;', 'pf;', 'eve;', 'cr;', 'mpeq;', 'cy;', 'PY', 'PY;', 'cute;', 'p;', 'pitalDifferentialD;', 'yleys;', 'aron;', 'edil', 'edil;', 'irc;', 'onint;', 'ot;', 'dilla;', 'nterDot;', 'r;', 'i;', 'rcleDot;', 'rcleMinus;', 'rclePlus;', 'rcleTimes;', 'ockwiseContourIntegral;', 'oseCurlyDoubleQuote;', 'oseCurlyQuote;', 'lon;', 'lone;', 'ngruent;', 'nint;', 'ntourIntegral;', 'pf;', 'product;', 'unterClockwiseContourIntegral;', 'oss;', 'cr;', 'p;', 'pCap;', ';', 'otrahd;', 'cy;', 'cy;', 'cy;', 'gger;', 'rr;', 'shv;', 'aron;', 'y;', 'l;', 'lta;', 'r;', 'acriticalAcute;', 'acriticalDot;', 'acriticalDoubleAcute;', 'acriticalGrave;', 'acriticalTilde;', 'amond;', 'fferentialD;', 'pf;', 't;', 'tDot;', 'tEqual;', 'ubleContourIntegral;', 'ubleDot;', 'ubleDownArrow;', 'ubleLeftArrow;', 'ubleLeftRightArrow;', 'ubleLeftTee;', 'ubleLongLeftArrow;', 'ubleLongLeftRightArrow;', 'ubleLongRightArrow;', 'ubleRightArrow;', 'ubleRightTee;', 'ubleUpArrow;', 'ubleUpDownArrow;', 'ubleVerticalBar;', 'wnArrow;', 'wnArrowBar;', 'wnArrowUpArrow;', 'wnBreve;', 'wnLeftRightVector;', 'wnLeftTeeVector;', 'wnLeftVector;', 'wnLeftVectorBar;', 'wnRightTeeVector;', 'wnRightVector;', 'wnRightVectorBar;', 'wnTee;', 'wnTeeArrow;', 'wnarrow;', 'cr;', 'trok;', 'G;', 'H', 'H;', 'cute', 'cute;', 'aron;', 'irc', 'irc;', 'y;', 'ot;', 'r;', 'rave', 'rave;', 'ement;', 'acr;', 'ptySmallSquare;', 'ptyVerySmallSquare;', 'gon;', 'pf;', 'silon;', 'ual;', 'ualTilde;', 'uilibrium;', 'cr;', 'im;', 'a;', 'ml', 'ml;', 'ists;', 'ponentialE;', 'y;', 'r;', 'lledSmallSquare;', 'lledVerySmallSquare;', 'pf;', 'rAll;', 'uriertrf;', 'cr;', 'cy;', '', ';', 'mma;', 'mmad;', 'reve;', 'edil;', 'irc;', 'y;', 'ot;', 'r;', ';', 'pf;', 'eaterEqual;', 'eaterEqualLess;', 'eaterFullEqual;', 'eaterGreater;', 'eaterLess;', 'eaterSlantEqual;', 'eaterTilde;', 'cr;', ';', 'RDcy;', 'cek;', 't;', 'irc;', 'r;', 'lbertSpace;', 'pf;', 'rizontalLine;', 'cr;', 'trok;', 'mpDownHump;', 'mpEqual;', 'cy;', 'lig;', 'cy;', 'cute', 'cute;', 'irc', 'irc;', 'y;', 'ot;', 'r;', 'rave', 'rave;', ';', 'acr;', 'aginaryI;', 'plies;', 't;', 'tegral;', 'tersection;', 'visibleComma;', 'visibleTimes;', 'gon;', 'pf;', 'ta;', 'cr;', 'ilde;', 'kcy;', 'ml', 'ml;', 'irc;', 'y;', 'r;', 'pf;', 'cr;', 'ercy;', 'kcy;', 'cy;', 'cy;', 'ppa;', 'edil;', 'y;', 'r;', 'pf;', 'cr;', 'cy;', '', ';', 'cute;', 'mbda;', 'ng;', 'placetrf;', 'rr;', 'aron;', 'edil;', 'y;', 'ftAngleBracket;', 'ftArrow;', 'ftArrowBar;', 'ftArrowRightArrow;', 'ftCeiling;', 'ftDoubleBracket;', 'ftDownTeeVector;', 'ftDownVector;', 'ftDownVectorBar;', 'ftFloor;', 'ftRightArrow;', 'ftRightVector;', 'ftTee;', 'ftTeeArrow;', 'ftTeeVector;', 'ftTriangle;', 'ftTriangleBar;', 'ftTriangleEqual;', 'ftUpDownVector;', 'ftUpTeeVector;', 'ftUpVector;', 'ftUpVectorBar;', 'ftVector;', 'ftVectorBar;', 'ftarrow;', 'ftrightarrow;', 'ssEqualGreater;', 'ssFullEqual;', 'ssGreater;', 'ssLess;', 'ssSlantEqual;', 'ssTilde;', 'r;', ';', 'eftarrow;', 'idot;', 'ngLeftArrow;', 'ngLeftRightArrow;', 'ngRightArrow;', 'ngleftarrow;', 'ngleftrightarrow;', 'ngrightarrow;', 'pf;', 'werLeftArrow;', 'werRightArrow;', 'cr;', 'h;', 'trok;', ';', 'p;', 'y;', 'diumSpace;', 'llintrf;', 'r;', 'nusPlus;', 'pf;', 'cr;', ';', 'cy;', 'cute;', 'aron;', 'edil;', 'y;', 'gativeMediumSpace;', 'gativeThickSpace;', 'gativeThinSpace;', 'gativeVeryThinSpace;', 'stedGreaterGreater;', 'stedLessLess;', 'wLine;', 'r;', 'Break;', 'nBreakingSpace;', 'pf;', 't;', 'tCongruent;', 'tCupCap;', 'tDoubleVerticalBar;', 'tElement;', 'tEqual;', 'tEqualTilde;', 'tExists;', 'tGreater;', 'tGreaterEqual;', 'tGreaterFullEqual;', 'tGreaterGreater;', 'tGreaterLess;', 'tGreaterSlantEqual;', 'tGreaterTilde;', 'tHumpDownHump;', 'tHumpEqual;', 'tLeftTriangle;', 'tLeftTriangleBar;', 'tLeftTriangleEqual;', 'tLess;', 'tLessEqual;', 'tLessGreater;', 'tLessLess;', 'tLessSlantEqual;', 'tLessTilde;', 'tNestedGreaterGreater;', 'tNestedLessLess;', 'tPrecedes;', 'tPrecedesEqual;', 'tPrecedesSlantEqual;', 'tReverseElement;', 'tRightTriangle;', 'tRightTriangleBar;', 'tRightTriangleEqual;', 'tSquareSubset;', 'tSquareSubsetEqual;', 'tSquareSuperset;', 'tSquareSupersetEqual;', 'tSubset;', 'tSubsetEqual;', 'tSucceeds;', 'tSucceedsEqual;', 'tSucceedsSlantEqual;', 'tSucceedsTilde;', 'tSuperset;', 'tSupersetEqual;', 'tTilde;', 'tTildeEqual;', 'tTildeFullEqual;', 'tTildeTilde;', 'tVerticalBar;', 'cr;', 'ilde', 'ilde;', ';', 'lig;', 'cute', 'cute;', 'irc', 'irc;', 'y;', 'blac;', 'r;', 'rave', 'rave;', 'acr;', 'ega;', 'icron;', 'pf;', 'enCurlyDoubleQuote;', 'enCurlyQuote;', ';', 'cr;', 'lash', 'lash;', 'ilde', 'ilde;', 'imes;', 'ml', 'ml;', 'erBar;', 'erBrace;', 'erBracket;', 'erParenthesis;', 'rtialD;', 'y;', 'r;', 'i;', ';', 'usMinus;', 'incareplane;', 'pf;', ';', 'ecedes;', 'ecedesEqual;', 'ecedesSlantEqual;', 'ecedesTilde;', 'ime;', 'oduct;', 'oportion;', 'oportional;', 'cr;', 'i;', 'OT', 'OT;', 'r;', 'pf;', 'cr;', 'arr;', 'G', 'G;', 'cute;', 'ng;', 'rr;', 'rrtl;', 'aron;', 'edil;', 'y;', ';', 'verseElement;', 'verseEquilibrium;', 'verseUpEquilibrium;', 'r;', 'o;', 'ghtAngleBracket;', 'ghtArrow;', 'ghtArrowBar;', 'ghtArrowLeftArrow;', 'ghtCeiling;', 'ghtDoubleBracket;', 'ghtDownTeeVector;', 'ghtDownVector;', 'ghtDownVectorBar;', 'ghtFloor;', 'ghtTee;', 'ghtTeeArrow;', 'ghtTeeVector;', 'ghtTriangle;', 'ghtTriangleBar;', 'ghtTriangleEqual;', 'ghtUpDownVector;', 'ghtUpTeeVector;', 'ghtUpVector;', 'ghtUpVectorBar;', 'ghtVector;', 'ghtVectorBar;', 'ghtarrow;', 'pf;', 'undImplies;', 'ightarrow;', 'cr;', 'h;', 'leDelayed;', 'CHcy;', 'cy;', 'FTcy;', 'cute;', ';', 'aron;', 'edil;', 'irc;', 'y;', 'r;', 'ortDownArrow;', 'ortLeftArrow;', 'ortRightArrow;', 'ortUpArrow;', 'gma;', 'allCircle;', 'pf;', 'rt;', 'uare;', 'uareIntersection;', 'uareSubset;', 'uareSubsetEqual;', 'uareSuperset;', 'uareSupersetEqual;', 'uareUnion;', 'cr;', 'ar;', 'b;', 'bset;', 'bsetEqual;', 'cceeds;', 'cceedsEqual;', 'cceedsSlantEqual;', 'cceedsTilde;', 'chThat;', 'm;', 'p;', 'perset;', 'persetEqual;', 'pset;', 'ORN', 'ORN;', 'ADE;', 'Hcy;', 'cy;', 'b;', 'u;', 'aron;', 'edil;', 'y;', 'r;', 'erefore;', 'eta;', 'ickSpace;', 'inSpace;', 'lde;', 'ldeEqual;', 'ldeFullEqual;', 'ldeTilde;', 'pf;', 'ipleDot;', 'cr;', 'trok;', 'cute', 'cute;', 'rr;', 'rrocir;', 'rcy;', 'reve;', 'irc', 'irc;', 'y;', 'blac;', 'r;', 'rave', 'rave;', 'acr;', 'derBar;', 'derBrace;', 'derBracket;', 'derParenthesis;', 'ion;', 'ionPlus;', 'gon;', 'pf;', 'Arrow;', 'ArrowBar;', 'ArrowDownArrow;', 'DownArrow;', 'Equilibrium;', 'Tee;', 'TeeArrow;', 'arrow;', 'downarrow;', 'perLeftArrow;', 'perRightArrow;', 'si;', 'silon;', 'ing;', 'cr;', 'ilde;', 'ml', 'ml;', 'ash;', 'ar;', 'y;', 'ash;', 'ashl;', 'e;', 'rbar;', 'rt;', 'rticalBar;', 'rticalLine;', 'rticalSeparator;', 'rticalTilde;', 'ryThinSpace;', 'r;', 'pf;', 'cr;', 'dash;', 'irc;', 'dge;', 'r;', 'pf;', 'cr;', 'r;', ';', 'pf;', 'cr;', 'cy;', 'cy;', 'cy;', 'cute', 'cute;', 'irc;', 'y;', 'r;', 'pf;', 'cr;', 'ml;', 'cy;', 'cute;', 'aron;', 'y;', 'ot;', 'roWidthSpace;', 'ta;', 'r;', 'pf;', 'cr;', 'cute', 'cute;', 'reve;', ';', 'E;', 'd;', 'irc', 'irc;', 'ute', 'ute;', 'y;', 'lig', 'lig;', ';', 'r;', 'rave', 'rave;', 'efsym;', 'eph;', 'pha;', 'acr;', 'alg;', 'p', 'p;', 'd;', 'dand;', 'dd;', 'dslope;', 'dv;', 'g;', 'ge;', 'gle;', 'gmsd;', 'gmsdaa;', 'gmsdab;', 'gmsdac;', 'gmsdad;', 'gmsdae;', 'gmsdaf;', 'gmsdag;', 'gmsdah;', 'grt;', 'grtvb;', 'grtvbd;', 'gsph;', 'gst;', 'gzarr;', 'gon;', 'pf;', ';', 'E;', 'acir;', 'e;', 'id;', 'os;', 'prox;', 'proxeq;', 'ing', 'ing;', 'cr;', 't;', 'ymp;', 'ympeq;', 'ilde', 'ilde;', 'ml', 'ml;', 'conint;', 'int;', 'ot;', 'ckcong;', 'ckepsilon;', 'ckprime;', 'cksim;', 'cksimeq;', 'rvee;', 'rwed;', 'rwedge;', 'rk;', 'rktbrk;', 'ong;', 'y;', 'quo;', 'caus;', 'cause;', 'mptyv;', 'psi;', 'rnou;', 'ta;', 'th;', 'tween;', 'r;', 'gcap;', 'gcirc;', 'gcup;', 'godot;', 'goplus;', 'gotimes;', 'gsqcup;', 'gstar;', 'gtriangledown;', 'gtriangleup;', 'guplus;', 'gvee;', 'gwedge;', 'arow;', 'acklozenge;', 'acksquare;', 'acktriangle;', 'acktriangledown;', 'acktriangleleft;', 'acktriangleright;', 'ank;', 'k12;', 'k14;', 'k34;', 'ock;', 'e;', 'equiv;', 'ot;', 'pf;', 't;', 'ttom;', 'wtie;', 'xDL;', 'xDR;', 'xDl;', 'xDr;', 'xH;', 'xHD;', 'xHU;', 'xHd;', 'xHu;', 'xUL;', 'xUR;', 'xUl;', 'xUr;', 'xV;', 'xVH;', 'xVL;', 'xVR;', 'xVh;', 'xVl;', 'xVr;', 'xbox;', 'xdL;', 'xdR;', 'xdl;', 'xdr;', 'xh;', 'xhD;', 'xhU;', 'xhd;', 'xhu;', 'xminus;', 'xplus;', 'xtimes;', 'xuL;', 'xuR;', 'xul;', 'xur;', 'xv;', 'xvH;', 'xvL;', 'xvR;', 'xvh;', 'xvl;', 'xvr;', 'rime;', 'eve;', 'vbar', 'vbar;', 'cr;', 'emi;', 'im;', 'ime;', 'ol;', 'olb;', 'olhsub;', 'll;', 'llet;', 'mp;', 'mpE;', 'mpe;', 'mpeq;', 'cute;', 'p;', 'pand;', 'pbrcup;', 'pcap;', 'pcup;', 'pdot;', 'ps;', 'ret;', 'ron;', 'aps;', 'aron;', 'edil', 'edil;', 'irc;', 'ups;', 'upssm;', 'ot;', 'dil', 'dil;', 'mptyv;', 'nt', 'nt;', 'nterdot;', 'r;', 'cy;', 'eck;', 'eckmark;', 'i;', 'r;', 'rE;', 'rc;', 'rceq;', 'rclearrowleft;', 'rclearrowright;', 'rcledR;', 'rcledS;', 'rcledast;', 'rcledcirc;', 'rcleddash;', 're;', 'rfnint;', 'rmid;', 'rscir;', 'ubs;', 'ubsuit;', 'lon;', 'lone;', 'loneq;', 'mma;', 'mmat;', 'mp;', 'mpfn;', 'mplement;', 'mplexes;', 'ng;', 'ngdot;', 'nint;', 'pf;', 'prod;', 'py', 'py;', 'pysr;', 'arr;', 'oss;', 'cr;', 'ub;', 'ube;', 'up;', 'upe;', 'dot;', 'darrl;', 'darrr;', 'epr;', 'esc;', 'larr;', 'larrp;', 'p;', 'pbrcap;', 'pcap;', 'pcup;', 'pdot;', 'por;', 'ps;', 'rarr;', 'rarrm;', 'rlyeqprec;', 'rlyeqsucc;', 'rlyvee;', 'rlywedge;', 'rren', 'rren;', 'rvearrowleft;', 'rvearrowright;', 'vee;', 'wed;', 'conint;', 'int;', 'lcty;', 'rr;', 'ar;', 'gger;', 'leth;', 'rr;', 'sh;', 'shv;', 'karow;', 'lac;', 'aron;', 'y;', ';', 'agger;', 'arr;', 'otseq;', 'g', 'g;', 'lta;', 'mptyv;', 'isht;', 'r;', 'arl;', 'arr;', 'am;', 'amond;', 'amondsuit;', 'ams;', 'e;', 'gamma;', 'sin;', 'v;', 'vide', 'vide;', 'videontimes;', 'vonx;', 'cy;', 'corn;', 'crop;', 'llar;', 'pf;', 't;', 'teq;', 'teqdot;', 'tminus;', 'tplus;', 'tsquare;', 'ublebarwedge;', 'wnarrow;', 'wndownarrows;', 'wnharpoonleft;', 'wnharpoonright;', 'bkarow;', 'corn;', 'crop;', 'cr;', 'cy;', 'ol;', 'trok;', 'dot;', 'ri;', 'rif;', 'arr;', 'har;', 'angle;', 'cy;', 'igrarr;', 'Dot;', 'ot;', 'cute', 'cute;', 'ster;', 'aron;', 'ir;', 'irc', 'irc;', 'olon;', 'y;', 'ot;', ';', 'Dot;', 'r;', ';', 'rave', 'rave;', 's;', 'sdot;', ';', 'inters;', 'l;', 's;', 'sdot;', 'acr;', 'pty;', 'ptyset;', 'ptyv;', 'sp13;', 'sp14;', 'sp;', 'g;', 'sp;', 'gon;', 'pf;', 'ar;', 'arsl;', 'lus;', 'si;', 'silon;', 'siv;', 'circ;', 'colon;', 'sim;', 'slantgtr;', 'slantless;', 'uals;', 'uest;', 'uiv;', 'uivDD;', 'vparsl;', 'Dot;', 'arr;', 'cr;', 'dot;', 'im;', 'a;', 'h', 'h;', 'ml', 'ml;', 'ro;', 'cl;', 'ist;', 'pectation;', 'ponentiale;', 'llingdotseq;', 'y;', 'male;', 'ilig;', 'lig;', 'llig;', 'r;', 'lig;', 'lig;', 'at;', 'lig;', 'tns;', 'of;', 'pf;', 'rall;', 'rk;', 'rkv;', 'artint;', 'ac12', 'ac12;', 'ac13;', 'ac14', 'ac14;', 'ac15;', 'ac16;', 'ac18;', 'ac23;', 'ac25;', 'ac34', 'ac34;', 'ac35;', 'ac38;', 'ac45;', 'ac56;', 'ac58;', 'ac78;', 'asl;', 'own;', 'cr;', ';', 'l;', 'cute;', 'mma;', 'mmad;', 'p;', 'reve;', 'irc;', 'y;', 'ot;', ';', 'l;', 'q;', 'qq;', 'qslant;', 's;', 'scc;', 'sdot;', 'sdoto;', 'sdotol;', 'sl;', 'sles;', 'r;', ';', 'g;', 'mel;', 'cy;', ';', 'E;', 'a;', 'j;', 'E;', 'ap;', 'approx;', 'e;', 'eq;', 'eqq;', 'sim;', 'pf;', 'ave;', 'cr;', 'im;', 'ime;', 'iml;', '', ';', 'cc;', 'cir;', 'dot;', 'lPar;', 'quest;', 'rapprox;', 'rarr;', 'rdot;', 'reqless;', 'reqqless;', 'rless;', 'rsim;', 'ertneqq;', 'nE;', 'rr;', 'irsp;', 'lf;', 'milt;', 'rdcy;', 'rr;', 'rrcir;', 'rrw;', 'ar;', 'irc;', 'arts;', 'artsuit;', 'llip;', 'rcon;', 'r;', 'searow;', 'swarow;', 'arr;', 'mtht;', 'okleftarrow;', 'okrightarrow;', 'pf;', 'rbar;', 'cr;', 'lash;', 'trok;', 'bull;', 'phen;', 'cute', 'cute;', ';', 'irc', 'irc;', 'y;', 'cy;', 'xcl', 'xcl;', 'f;', 'r;', 'rave', 'rave;', ';', 'iint;', 'int;', 'nfin;', 'ota;', 'lig;', 'acr;', 'age;', 'agline;', 'agpart;', 'ath;', 'of;', 'ped;', ';', 'care;', 'fin;', 'fintie;', 'odot;', 't;', 'tcal;', 'tegers;', 'tercal;', 'tlarhk;', 'tprod;', 'cy;', 'gon;', 'pf;', 'ta;', 'rod;', 'uest', 'uest;', 'cr;', 'in;', 'inE;', 'indot;', 'ins;', 'insv;', 'inv;', ';', 'ilde;', 'kcy;', 'ml', 'ml;', 'irc;', 'y;', 'r;', 'ath;', 'pf;', 'cr;', 'ercy;', 'kcy;', 'ppa;', 'ppav;', 'edil;', 'y;', 'r;', 'reen;', 'cy;', 'cy;', 'pf;', 'cr;', 'arr;', 'rr;', 'tail;', 'arr;', ';', 'g;', 'ar;', 'cute;', 'emptyv;', 'gran;', 'mbda;', 'ng;', 'ngd;', 'ngle;', 'p;', 'quo', 'quo;', 'rr;', 'rrb;', 'rrbfs;', 'rrfs;', 'rrhk;', 'rrlp;', 'rrpl;', 'rrsim;', 'rrtl;', 't;', 'tail;', 'te;', 'tes;', 'arr;', 'brk;', 'race;', 'rack;', 'rke;', 'rksld;', 'rkslu;', 'aron;', 'edil;', 'eil;', 'ub;', 'y;', 'ca;', 'quo;', 'quor;', 'rdhar;', 'rushar;', 'sh;', ';', 'ftarrow;', 'ftarrowtail;', 'ftharpoondown;', 'ftharpoonup;', 'ftleftarrows;', 'ftrightarrow;', 'ftrightarrows;', 'ftrightharpoons;', 'ftrightsquigarrow;', 'ftthreetimes;', 'g;', 'q;', 'qq;', 'qslant;', 's;', 'scc;', 'sdot;', 'sdoto;', 'sdotor;', 'sg;', 'sges;', 'ssapprox;', 'ssdot;', 'sseqgtr;', 'sseqqgtr;', 'ssgtr;', 'sssim;', 'isht;', 'loor;', 'r;', ';', 'E;', 'ard;', 'aru;', 'arul;', 'blk;', 'cy;', ';', 'arr;', 'corner;', 'hard;', 'tri;', 'idot;', 'oust;', 'oustache;', 'E;', 'ap;', 'approx;', 'e;', 'eq;', 'eqq;', 'sim;', 'ang;', 'arr;', 'brk;', 'ngleftarrow;', 'ngleftrightarrow;', 'ngmapsto;', 'ngrightarrow;', 'oparrowleft;', 'oparrowright;', 'par;', 'pf;', 'plus;', 'times;', 'wast;', 'wbar;', 'z;', 'zenge;', 'zf;', 'ar;', 'arlt;', 'arr;', 'corner;', 'har;', 'hard;', 'm;', 'tri;', 'aquo;', 'cr;', 'h;', 'im;', 'ime;', 'img;', 'qb;', 'quo;', 'quor;', 'trok;', '', ';', 'cc;', 'cir;', 'dot;', 'hree;', 'imes;', 'larr;', 'quest;', 'rPar;', 'ri;', 'rie;', 'rif;', 'rdshar;', 'ruhar;', 'ertneqq;', 'nE;', 'Dot;', 'cr', 'cr;', 'le;', 'lt;', 'ltese;', 'p;', 'psto;', 'pstodown;', 'pstoleft;', 'pstoup;', 'rker;', 'omma;', 'y;', 'ash;', 'asuredangle;', 'r;', 'o;', 'cro', 'cro;', 'd;', 'dast;', 'dcir;', 'ddot', 'ddot;', 'nus;', 'nusb;', 'nusd;', 'nusdu;', 'cp;', 'dr;', 'plus;', 'dels;', 'pf;', ';', 'cr;', 'tpos;', ';', 'ltimap;', 'map;', 'g;', 't;', 'tv;', 'eftarrow;', 'eftrightarrow;', 'l;', 't;', 'tv;', 'ightarrow;', 'Dash;', 'dash;', 'bla;', 'cute;', 'ng;', 'p;', 'pE;', 'pid;', 'pos;', 'pprox;', 'tur;', 'tural;', 'turals;', 'sp', 'sp;', 'ump;', 'umpe;', 'ap;', 'aron;', 'edil;', 'ong;', 'ongdot;', 'up;', 'y;', 'ash;', ';', 'Arr;', 'arhk;', 'arr;', 'arrow;', 'dot;', 'quiv;', 'sear;', 'sim;', 'xist;', 'xists;', 'r;', 'E;', 'e;', 'eq;', 'eqq;', 'eqslant;', 'es;', 'sim;', 't;', 'tr;', 'Arr;', 'arr;', 'par;', ';', 's;', 'sd;', 'v;', 'cy;', 'Arr;', 'E;', 'arr;', 'dr;', 'e;', 'eftarrow;', 'eftrightarrow;', 'eq;', 'eqq;', 'eqslant;', 'es;', 'ess;', 'sim;', 't;', 'tri;', 'trie;', 'id;', 'pf;', 't', 't;', 'tin;', 'tinE;', 'tindot;', 'tinva;', 'tinvb;', 'tinvc;', 'tni;', 'tniva;', 'tnivb;', 'tnivc;', 'ar;', 'arallel;', 'arsl;', 'art;', 'olint;', 'r;', 'rcue;', 're;', 'rec;', 'receq;', 'Arr;', 'arr;', 'arrc;', 'arrw;', 'ightarrow;', 'tri;', 'trie;', 'c;', 'ccue;', 'ce;', 'cr;', 'hortmid;', 'hortparallel;', 'im;', 'ime;', 'imeq;', 'mid;', 'par;', 'qsube;', 'qsupe;', 'ub;', 'ubE;', 'ube;', 'ubset;', 'ubseteq;', 'ubseteqq;', 'ucc;', 'ucceq;', 'up;', 'upE;', 'upe;', 'upset;', 'upseteq;', 'upseteqq;', 'gl;', 'ilde', 'ilde;', 'lg;', 'riangleleft;', 'rianglelefteq;', 'riangleright;', 'rianglerighteq;', ';', 'm;', 'mero;', 'msp;', 'Dash;', 'Harr;', 'ap;', 'dash;', 'ge;', 'gt;', 'infin;', 'lArr;', 'le;', 'lt;', 'ltrie;', 'rArr;', 'rtrie;', 'sim;', 'Arr;', 'arhk;', 'arr;', 'arrow;', 'near;', ';', 'cute', 'cute;', 'st;', 'ir;', 'irc', 'irc;', 'y;', 'ash;', 'blac;', 'iv;', 'ot;', 'sold;', 'lig;', 'cir;', 'r;', 'on;', 'rave', 'rave;', 't;', 'bar;', 'm;', 'nt;', 'arr;', 'cir;', 'cross;', 'ine;', 't;', 'acr;', 'ega;', 'icron;', 'id;', 'inus;', 'pf;', 'ar;', 'erp;', 'lus;', ';', 'arr;', 'd;', 'der;', 'derof;', 'df', 'df;', 'dm', 'dm;', 'igof;', 'or;', 'slope;', 'v;', 'cr;', 'lash', 'lash;', 'ol;', 'ilde', 'ilde;', 'imes;', 'imesas;', 'ml', 'ml;', 'bar;', 'r;', 'ra', 'ra;', 'rallel;', 'rsim;', 'rsl;', 'rt;', 'y;', 'rcnt;', 'riod;', 'rmil;', 'rp;', 'rtenk;', 'r;', 'i;', 'iv;', 'mmat;', 'one;', ';', 'tchfork;', 'v;', 'anck;', 'anckh;', 'ankv;', 'us;', 'usacir;', 'usb;', 'uscir;', 'usdo;', 'usdu;', 'use;', 'usmn', 'usmn;', 'ussim;', 'ustwo;', ';', 'intint;', 'pf;', 'und', 'und;', ';', 'E;', 'ap;', 'cue;', 'e;', 'ec;', 'ecapprox;', 'eccurlyeq;', 'eceq;', 'ecnapprox;', 'ecneqq;', 'ecnsim;', 'ecsim;', 'ime;', 'imes;', 'nE;', 'nap;', 'nsim;', 'od;', 'ofalar;', 'ofline;', 'ofsurf;', 'op;', 'opto;', 'sim;', 'urel;', 'cr;', 'i;', 'ncsp;', 'r;', 'nt;', 'pf;', 'rime;', 'cr;', 'aternions;', 'atint;', 'est;', 'esteq;', 'ot', 'ot;', 'arr;', 'rr;', 'tail;', 'arr;', 'ar;', 'ce;', 'cute;', 'dic;', 'emptyv;', 'ng;', 'ngd;', 'nge;', 'ngle;', 'quo', 'quo;', 'rr;', 'rrap;', 'rrb;', 'rrbfs;', 'rrc;', 'rrfs;', 'rrhk;', 'rrlp;', 'rrpl;', 'rrsim;', 'rrtl;', 'rrw;', 'tail;', 'tio;', 'tionals;', 'arr;', 'brk;', 'race;', 'rack;', 'rke;', 'rksld;', 'rkslu;', 'aron;', 'edil;', 'eil;', 'ub;', 'y;', 'ca;', 'ldhar;', 'quo;', 'quor;', 'sh;', 'al;', 'aline;', 'alpart;', 'als;', 'ct;', 'g', 'g;', 'isht;', 'loor;', 'r;', 'ard;', 'aru;', 'arul;', 'o;', 'ov;', 'ghtarrow;', 'ghtarrowtail;', 'ghtharpoondown;', 'ghtharpoonup;', 'ghtleftarrows;', 'ghtleftharpoons;', 'ghtrightarrows;', 'ghtsquigarrow;', 'ghtthreetimes;', 'ng;', 'singdotseq;', 'arr;', 'har;', 'm;', 'oust;', 'oustache;', 'mid;', 'ang;', 'arr;', 'brk;', 'par;', 'pf;', 'plus;', 'times;', 'ar;', 'argt;', 'polint;', 'arr;', 'aquo;', 'cr;', 'h;', 'qb;', 'quo;', 'quor;', 'hree;', 'imes;', 'ri;', 'rie;', 'rif;', 'riltri;', 'luhar;', ';', 'cute;', 'quo;', ';', 'E;', 'ap;', 'aron;', 'cue;', 'e;', 'edil;', 'irc;', 'nE;', 'nap;', 'nsim;', 'polint;', 'sim;', 'y;', 'ot;', 'otb;', 'ote;', 'Arr;', 'arhk;', 'arr;', 'arrow;', 'ct', 'ct;', 'mi;', 'swar;', 'tminus;', 'tmn;', 'xt;', 'r;', 'rown;', 'arp;', 'chcy;', 'cy;', 'ortmid;', 'ortparallel;', 'y', 'y;', 'gma;', 'gmaf;', 'gmav;', 'm;', 'mdot;', 'me;', 'meq;', 'mg;', 'mgE;', 'ml;', 'mlE;', 'mne;', 'mplus;', 'mrarr;', 'arr;', 'allsetminus;', 'ashp;', 'eparsl;', 'id;', 'ile;', 't;', 'te;', 'tes;', 'ftcy;', 'l;', 'lb;', 'lbar;', 'pf;', 'ades;', 'adesuit;', 'ar;', 'cap;', 'caps;', 'cup;', 'cups;', 'sub;', 'sube;', 'subset;', 'subseteq;', 'sup;', 'supe;', 'supset;', 'supseteq;', 'u;', 'uare;', 'uarf;', 'uf;', 'arr;', 'cr;', 'etmn;', 'mile;', 'tarf;', 'ar;', 'arf;', 'raightepsilon;', 'raightphi;', 'rns;', 'b;', 'bE;', 'bdot;', 'be;', 'bedot;', 'bmult;', 'bnE;', 'bne;', 'bplus;', 'brarr;', 'bset;', 'bseteq;', 'bseteqq;', 'bsetneq;', 'bsetneqq;', 'bsim;', 'bsub;', 'bsup;', 'cc;', 'ccapprox;', 'cccurlyeq;', 'cceq;', 'ccnapprox;', 'ccneqq;', 'ccnsim;', 'ccsim;', 'm;', 'ng;', 'p1', 'p1;', 'p2', 'p2;', 'p3', 'p3;', 'p;', 'pE;', 'pdot;', 'pdsub;', 'pe;', 'pedot;', 'phsol;', 'phsub;', 'plarr;', 'pmult;', 'pnE;', 'pne;', 'pplus;', 'pset;', 'pseteq;', 'pseteqq;', 'psetneq;', 'psetneqq;', 'psim;', 'psub;', 'psup;', 'Arr;', 'arhk;', 'arr;', 'arrow;', 'nwar;', 'lig', 'lig;', 'rget;', 'u;', 'rk;', 'aron;', 'edil;', 'y;', 'ot;', 'lrec;', 'r;', 'ere4;', 'erefore;', 'eta;', 'etasym;', 'etav;', 'ickapprox;', 'icksim;', 'insp;', 'kap;', 'ksim;', 'orn', 'orn;', 'lde;', 'mes', 'mes;', 'mesb;', 'mesbar;', 'mesd;', 'nt;', 'ea;', 'p;', 'pbot;', 'pcir;', 'pf;', 'pfork;', 'sa;', 'rime;', 'ade;', 'iangle;', 'iangledown;', 'iangleleft;', 'ianglelefteq;', 'iangleq;', 'iangleright;', 'ianglerighteq;', 'idot;', 'ie;', 'iminus;', 'iplus;', 'isb;', 'itime;', 'pezium;', 'cr;', 'cy;', 'hcy;', 'trok;', 'ixt;', 'oheadleftarrow;', 'oheadrightarrow;', 'rr;', 'ar;', 'cute', 'cute;', 'rr;', 'rcy;', 'reve;', 'irc', 'irc;', 'y;', 'arr;', 'blac;', 'har;', 'isht;', 'r;', 'rave', 'rave;', 'arl;', 'arr;', 'blk;', 'corn;', 'corner;', 'crop;', 'tri;', 'acr;', 'l', 'l;', 'gon;', 'pf;', 'arrow;', 'downarrow;', 'harpoonleft;', 'harpoonright;', 'lus;', 'si;', 'sih;', 'silon;', 'uparrows;', 'corn;', 'corner;', 'crop;', 'ing;', 'tri;', 'cr;', 'dot;', 'ilde;', 'ri;', 'rif;', 'arr;', 'ml', 'ml;', 'angle;', 'rr;', 'ar;', 'arv;', 'ash;', 'ngrt;', 'repsilon;', 'rkappa;', 'rnothing;', 'rphi;', 'rpi;', 'rpropto;', 'rr;', 'rrho;', 'rsigma;', 'rsubsetneq;', 'rsubsetneqq;', 'rsupsetneq;', 'rsupsetneqq;', 'rtheta;', 'rtriangleleft;', 'rtriangleright;', 'y;', 'ash;', 'e;', 'ebar;', 'eeq;', 'llip;', 'rbar;', 'rt;', 'r;', 'tri;', 'sub;', 'sup;', 'pf;', 'rop;', 'tri;', 'cr;', 'ubnE;', 'ubne;', 'upnE;', 'upne;', 'igzag;', 'irc;', 'dbar;', 'dge;', 'dgeq;', 'ierp;', 'r;', 'pf;', ';', ';', 'eath;', 'cr;', 'ap;', 'irc;', 'up;', 'tri;', 'r;', 'Arr;', 'arr;', ';', 'Arr;', 'arr;', 'ap;', 'is;', 'dot;', 'pf;', 'plus;', 'time;', 'Arr;', 'arr;', 'cr;', 'qcup;', 'plus;', 'tri;', 'ee;', 'edge;', 'cute', 'cute;', 'cy;', 'irc;', 'y;', 'n', 'n;', 'r;', 'cy;', 'pf;', 'cr;', 'cy;', 'ml', 'ml;', 'cute;', 'aron;', 'y;', 'ot;', 'etrf;', 'ta;', 'r;', 'cy;', 'grarr;', 'pf;', 'cr;', 'j;', 'nj;']);
+  $$clinit_131();
+  $$$clinit_131();
+}
+function $$clinit_131() {
+    $$clinit_131 = nullMethod;
+    var i = initValues,
+        c = _3C_classLit;
+    VALUES_0 = i(c, 62, 16,
+        [i(c, 46, -1, [198]),
+        i(c, 46, -1, [198]),
+        i(c, 46, -1, [38]),
+        i(c, 46, -1, [38]),
+        i(c, 46, -1, [193]),
+        i(c, 46, -1, [193]),
+        i(c, 46, -1, [258]),
+        i(c, 46, -1, [194]),
+        i(c, 46, -1, [194]),
+        i(c, 46, -1, [1040]),
+        i(c, 46, -1, [55349, 56580]),
+        i(c, 46, -1, [192]),
+        i(c, 46, -1, [192]),
+        i(c, 46, -1, [913]),
+        i(c, 46, -1, [256]),
+        i(c, 46, -1, [10835]),
+        i(c, 46, -1, [260]),
+        i(c, 46, -1, [55349, 56632]),
+        i(c, 46, -1, [8289]),
+        i(c, 46, -1, [197]),
+        i(c, 46, -1, [197]),
+        i(c, 46, -1, [55349, 56476]),
+        i(c, 46, -1, [8788]),
+        i(c, 46, -1, [195]),
+        i(c, 46, -1, [195]),
+        i(c, 46, -1, [196]),
+        i(c, 46, -1, [196]),
+        i(c, 46, -1, [8726]),
+        i(c, 46, -1, [10983]),
+        i(c, 46, -1, [8966]),
+        i(c, 46, -1, [1041]),
+        i(c, 46, -1, [8757]),
+        i(c, 46, -1, [8492]),
+        i(c, 46, -1, [914]),
+        i(c, 46, -1, [55349, 56581]),
+        i(c, 46, -1, [55349, 56633]),
+        i(c, 46, -1, [728]),
+        i(c, 46, -1, [8492]),
+        i(c, 46, -1, [8782]),
+        i(c, 46, -1, [1063]),
+        i(c, 46, -1, [169]),
+        i(c, 46, -1, [169]),
+        i(c, 46, -1, [262]),
+        i(c, 46, -1, [8914]),
+        i(c, 46, -1, [8517]),
+        i(c, 46, -1, [8493]),
+        i(c, 46, -1, [268]),
+        i(c, 46, -1, [199]),
+        i(c, 46, -1, [199]),
+        i(c, 46, -1, [264]),
+        i(c, 46, -1, [8752]),
+        i(c, 46, -1, [266]),
+        i(c, 46, -1, [184]),
+        i(c, 46, -1, [183]),
+        i(c, 46, -1, [8493]),
+        i(c, 46, -1, [935]),
+        i(c, 46, -1, [8857]),
+        i(c, 46, -1, [8854]),
+        i(c, 46, -1, [8853]),
+        i(c, 46, -1, [8855]),
+        i(c, 46, -1, [8754]),
+        i(c, 46, -1, [8221]),
+        i(c, 46, -1, [8217]),
+        i(c, 46, -1, [8759]),
+        i(c, 46, -1, [10868]),
+        i(c, 46, -1, [8801]),
+        i(c, 46, -1, [8751]),
+        i(c, 46, -1, [8750]),
+        i(c, 46, -1, [8450]),
+        i(c, 46, -1, [8720]),
+        i(c, 46, -1, [8755]),
+        i(c, 46, -1, [10799]),
+        i(c, 46, -1, [55349, 56478]),
+        i(c, 46, -1, [8915]),
+        i(c, 46, -1, [8781]),
+        i(c, 46, -1, [8517]),
+        i(c, 46, -1, [10513]),
+        i(c, 46, -1, [1026]),
+        i(c, 46, -1, [1029]),
+        i(c, 46, -1, [1039]),
+        i(c, 46, -1, [8225]),
+        i(c, 46, -1, [8609]),
+        i(c, 46, -1, [10980]),
+        i(c, 46, -1, [270]),
+        i(c, 46, -1, [1044]),
+        i(c, 46, -1, [8711]),
+        i(c, 46, -1, [916]),
+        i(c, 46, -1, [55349, 56583]),
+        i(c, 46, -1, [180]),
+        i(c, 46, -1, [729]),
+        i(c, 46, -1, [733]),
+        i(c, 46, -1, [96]),
+        i(c, 46, -1, [732]),
+        i(c, 46, -1, [8900]),
+        i(c, 46, -1, [8518]),
+        i(c, 46, -1, [55349, 56635]),
+        i(c, 46, -1, [168]),
+        i(c, 46, -1, [8412]),
+        i(c, 46, -1, [8784]),
+        i(c, 46, -1, [8751]),
+        i(c, 46, -1, [168]),
+        i(c, 46, -1, [8659]),
+        i(c, 46, -1, [8656]),
+        i(c, 46, -1, [8660]),
+        i(c, 46, -1, [10980]),
+        i(c, 46, -1, [10232]),
+        i(c, 46, -1, [10234]),
+        i(c, 46, -1, [10233]),
+        i(c, 46, -1, [8658]),
+        i(c, 46, -1, [8872]),
+        i(c, 46, -1, [8657]),
+        i(c, 46, -1, [8661]),
+        i(c, 46, -1, [8741]),
+        i(c, 46, -1, [8595]),
+        i(c, 46, -1, [10515]),
+        i(c, 46, -1, [8693]),
+        i(c, 46, -1, [785]),
+        i(c, 46, -1, [10576]),
+        i(c, 46, -1, [10590]),
+        i(c, 46, -1, [8637]),
+        i(c, 46, -1, [10582]),
+        i(c, 46, -1, [10591]),
+        i(c, 46, -1, [8641]),
+        i(c, 46, -1, [10583]),
+        i(c, 46, -1, [8868]),
+        i(c, 46, -1, [8615]),
+        i(c, 46, -1, [8659]),
+        i(c, 46, -1, [55349, 56479]),
+        i(c, 46, -1, [272]),
+        i(c, 46, -1, [330]),
+        i(c, 46, -1, [208]),
+        i(c, 46, -1, [208]),
+        i(c, 46, -1, [201]),
+        i(c, 46, -1, [201]),
+        i(c, 46, -1, [282]),
+        i(c, 46, -1, [202]),
+        i(c, 46, -1, [202]),
+        i(c, 46, -1, [1069]),
+        i(c, 46, -1, [278]),
+        i(c, 46, -1, [55349, 56584]),
+        i(c, 46, -1, [200]),
+        i(c, 46, -1, [200]),
+        i(c, 46, -1, [8712]),
+        i(c, 46, -1, [274]),
+        i(c, 46, -1, [9723]),
+        i(c, 46, -1, [9643]),
+        i(c, 46, -1, [280]),
+        i(c, 46, -1, [55349, 56636]),
+        i(c, 46, -1, [917]),
+        i(c, 46, -1, [10869]),
+        i(c, 46, -1, [8770]),
+        i(c, 46, -1, [8652]),
+        i(c, 46, -1, [8496]),
+        i(c, 46, -1, [10867]),
+        i(c, 46, -1, [919]),
+        i(c, 46, -1, [203]),
+        i(c, 46, -1, [203]),
+        i(c, 46, -1, [8707]),
+        i(c, 46, -1, [8519]),
+        i(c, 46, -1, [1060]),
+        i(c, 46, -1, [55349, 56585]),
+        i(c, 46, -1, [9724]),
+        i(c, 46, -1, [9642]),
+        i(c, 46, -1, [55349, 56637]),
+        i(c, 46, -1, [8704]),
+        i(c, 46, -1, [8497]),
+        i(c, 46, -1, [8497]),
+        i(c, 46, -1, [1027]),
+        i(c, 46, -1, [62]),
+        i(c, 46, -1, [62]),
+        i(c, 46, -1, [915]),
+        i(c, 46, -1, [988]),
+        i(c, 46, -1, [286]),
+        i(c, 46, -1, [290]),
+        i(c, 46, -1, [284]),
+        i(c, 46, -1, [1043]),
+        i(c, 46, -1, [288]),
+        i(c, 46, -1, [55349, 56586]),
+        i(c, 46, -1, [8921]),
+        i(c, 46, -1, [55349, 56638]),
+        i(c, 46, -1, [8805]),
+        i(c, 46, -1, [8923]),
+        i(c, 46, -1, [8807]),
+        i(c, 46, -1, [10914]),
+        i(c, 46, -1, [8823]),
+        i(c, 46, -1, [10878]),
+        i(c, 46, -1, [8819]),
+        i(c, 46, -1, [55349, 56482]),
+        i(c, 46, -1, [8811]),
+        i(c, 46, -1, [1066]),
+        i(c, 46, -1, [711]),
+        i(c, 46, -1, [94]),
+        i(c, 46, -1, [292]),
+        i(c, 46, -1, [8460]),
+        i(c, 46, -1, [8459]),
+        i(c, 46, -1, [8461]),
+        i(c, 46, -1, [9472]),
+        i(c, 46, -1, [8459]),
+        i(c, 46, -1, [294]),
+        i(c, 46, -1, [8782]),
+        i(c, 46, -1, [8783]),
+        i(c, 46, -1, [1045]),
+        i(c, 46, -1, [306]),
+        i(c, 46, -1, [1025]),
+        i(c, 46, -1, [205]),
+        i(c, 46, -1, [205]),
+        i(c, 46, -1, [206]),
+        i(c, 46, -1, [206]),
+        i(c, 46, -1, [1048]),
+        i(c, 46, -1, [304]),
+        i(c, 46, -1, [8465]),
+        i(c, 46, -1, [204]),
+        i(c, 46, -1, [204]),
+        i(c, 46, -1, [8465]),
+        i(c, 46, -1, [298]),
+        i(c, 46, -1, [8520]),
+        i(c, 46, -1, [8658]),
+        i(c, 46, -1, [8748]),
+        i(c, 46, -1, [8747]),
+        i(c, 46, -1, [8898]),
+        i(c, 46, -1, [8291]),
+        i(c, 46, -1, [8290]),
+        i(c, 46, -1, [302]),
+        i(c, 46, -1, [55349, 56640]),
+        i(c, 46, -1, [921]),
+        i(c, 46, -1, [8464]),
+        i(c, 46, -1, [296]),
+        i(c, 46, -1, [1030]),
+        i(c, 46, -1, [207]),
+        i(c, 46, -1, [207]),
+        i(c, 46, -1, [308]),
+        i(c, 46, -1, [1049]),
+        i(c, 46, -1, [55349, 56589]),
+        i(c, 46, -1, [55349, 56641]),
+        i(c, 46, -1, [55349, 56485]),
+        i(c, 46, -1, [1032]),
+        i(c, 46, -1, [1028]),
+        i(c, 46, -1, [1061]),
+        i(c, 46, -1, [1036]),
+        i(c, 46, -1, [922]),
+        i(c, 46, -1, [310]),
+        i(c, 46, -1, [1050]),
+        i(c, 46, -1, [55349, 56590]),
+        i(c, 46, -1, [55349, 56642]),
+        i(c, 46, -1, [55349, 56486]),
+        i(c, 46, -1, [1033]),
+        i(c, 46, -1, [60]),
+        i(c, 46, -1, [60]),
+        i(c, 46, -1, [313]),
+        i(c, 46, -1, [923]),
+        i(c, 46, -1, [10218]),
+        i(c, 46, -1, [8466]),
+        i(c, 46, -1, [8606]),
+        i(c, 46, -1, [317]),
+        i(c, 46, -1, [315]),
+        i(c, 46, -1, [1051]),
+        i(c, 46, -1, [10216]),
+        i(c, 46, -1, [8592]),
+        i(c, 46, -1, [8676]),
+        i(c, 46, -1, [8646]),
+        i(c, 46, -1, [8968]),
+        i(c, 46, -1, [10214]),
+        i(c, 46, -1, [10593]),
+        i(c, 46, -1, [8643]),
+        i(c, 46, -1, [10585]),
+        i(c, 46, -1, [8970]),
+        i(c, 46, -1, [8596]),
+        i(c, 46, -1, [10574]),
+        i(c, 46, -1, [8867]),
+        i(c, 46, -1, [8612]),
+        i(c, 46, -1, [10586]),
+        i(c, 46, -1, [8882]),
+        i(c, 46, -1, [10703]),
+        i(c, 46, -1, [8884]),
+        i(c, 46, -1, [10577]),
+        i(c, 46, -1, [10592]),
+        i(c, 46, -1, [8639]),
+        i(c, 46, -1, [10584]),
+        i(c, 46, -1, [8636]),
+        i(c, 46, -1, [10578]),
+        i(c, 46, -1, [8656]),
+        i(c, 46, -1, [8660]),
+        i(c, 46, -1, [8922]),
+        i(c, 46, -1, [8806]),
+        i(c, 46, -1, [8822]),
+        i(c, 46, -1, [10913]),
+        i(c, 46, -1, [10877]),
+        i(c, 46, -1, [8818]),
+        i(c, 46, -1, [55349, 56591]),
+        i(c, 46, -1, [8920]),
+        i(c, 46, -1, [8666]),
+        i(c, 46, -1, [319]),
+        i(c, 46, -1, [10229]),
+        i(c, 46, -1, [10231]),
+        i(c, 46, -1, [10230]),
+        i(c, 46, -1, [10232]),
+        i(c, 46, -1, [10234]),
+        i(c, 46, -1, [10233]),
+        i(c, 46, -1, [55349, 56643]),
+        i(c, 46, -1, [8601]),
+        i(c, 46, -1, [8600]),
+        i(c, 46, -1, [8466]),
+        i(c, 46, -1, [8624]),
+        i(c, 46, -1, [321]),
+        i(c, 46, -1, [8810]),
+        i(c, 46, -1, [10501]),
+        i(c, 46, -1, [1052]),
+        i(c, 46, -1, [8287]),
+        i(c, 46, -1, [8499]),
+        i(c, 46, -1, [55349, 56592]),
+        i(c, 46, -1, [8723]),
+        i(c, 46, -1, [55349, 56644]),
+        i(c, 46, -1, [8499]),
+        i(c, 46, -1, [924]),
+        i(c, 46, -1, [1034]),
+        i(c, 46, -1, [323]),
+        i(c, 46, -1, [327]),
+        i(c, 46, -1, [325]),
+        i(c, 46, -1, [1053]),
+        i(c, 46, -1, [8203]),
+        i(c, 46, -1, [8203]),
+        i(c, 46, -1, [8203]),
+        i(c, 46, -1, [8203]),
+        i(c, 46, -1, [8811]),
+        i(c, 46, -1, [8810]),
+        i(c, 46, -1, [10]),
+        i(c, 46, -1, [55349, 56593]),
+        i(c, 46, -1, [8288]),
+        i(c, 46, -1, [160]),
+        i(c, 46, -1, [8469]),
+        i(c, 46, -1, [10988]),
+        i(c, 46, -1, [8802]),
+        i(c, 46, -1, [8813]),
+        i(c, 46, -1, [8742]),
+        i(c, 46, -1, [8713]),
+        i(c, 46, -1, [8800]),
+        i(c, 46, -1, [8770, 824]),
+        i(c, 46, -1, [8708]),
+        i(c, 46, -1, [8815]),
+        i(c, 46, -1, [8817]),
+        i(c, 46, -1, [8807, 824]),
+        i(c, 46, -1, [8811, 824]),
+        i(c, 46, -1, [8825]),
+        i(c, 46, -1, [10878, 824]),
+        i(c, 46, -1, [8821]),
+        i(c, 46, -1, [8782, 824]),
+        i(c, 46, -1, [8783, 824]),
+        i(c, 46, -1, [8938]),
+        i(c, 46, -1, [10703, 824]),
+        i(c, 46, -1, [8940]),
+        i(c, 46, -1, [8814]),
+        i(c, 46, -1, [8816]),
+        i(c, 46, -1, [8824]),
+        i(c, 46, -1, [8810, 824]),
+        i(c, 46, -1, [10877, 824]),
+        i(c, 46, -1, [8820]),
+        i(c, 46, -1, [10914, 824]),
+        i(c, 46, -1, [10913, 824]),
+        i(c, 46, -1, [8832]),
+        i(c, 46, -1, [10927, 824]),
+        i(c, 46, -1, [8928]),
+        i(c, 46, -1, [8716]),
+        i(c, 46, -1, [8939]),
+        i(c, 46, -1, [10704, 824]),
+        i(c, 46, -1, [8941]),
+        i(c, 46, -1, [8847, 824]),
+        i(c, 46, -1, [8930]),
+        i(c, 46, -1, [8848, 824]),
+        i(c, 46, -1, [8931]),
+        i(c, 46, -1, [8834, 8402]),
+        i(c, 46, -1, [8840]),
+        i(c, 46, -1, [8833]),
+        i(c, 46, -1, [10928, 824]),
+        i(c, 46, -1, [8929]),
+        i(c, 46, -1, [8831, 824]),
+        i(c, 46, -1, [8835, 8402]),
+        i(c, 46, -1, [8841]),
+        i(c, 46, -1, [8769]),
+        i(c, 46, -1, [8772]),
+        i(c, 46, -1, [8775]),
+        i(c, 46, -1, [8777]),
+        i(c, 46, -1, [8740]),
+        i(c, 46, -1, [55349, 56489]),
+        i(c, 46, -1, [209]),
+        i(c, 46, -1, [209]),
+        i(c, 46, -1, [925]),
+        i(c, 46, -1, [338]),
+        i(c, 46, -1, [211]),
+        i(c, 46, -1, [211]),
+        i(c, 46, -1, [212]),
+        i(c, 46, -1, [212]),
+        i(c, 46, -1, [1054]),
+        i(c, 46, -1, [336]),
+        i(c, 46, -1, [55349, 56594]),
+        i(c, 46, -1, [210]),
+        i(c, 46, -1, [210]),
+        i(c, 46, -1, [332]),
+        i(c, 46, -1, [937]),
+        i(c, 46, -1, [927]),
+        i(c, 46, -1, [55349, 56646]),
+        i(c, 46, -1, [8220]),
+        i(c, 46, -1, [8216]),
+        i(c, 46, -1, [10836]),
+        i(c, 46, -1, [55349, 56490]),
+        i(c, 46, -1, [216]),
+        i(c, 46, -1, [216]),
+        i(c, 46, -1, [213]),
+        i(c, 46, -1, [213]),
+        i(c, 46, -1, [10807]),
+        i(c, 46, -1, [214]),
+        i(c, 46, -1, [214]),
+        i(c, 46, -1, [8254]),
+        i(c, 46, -1, [9182]),
+        i(c, 46, -1, [9140]),
+        i(c, 46, -1, [9180]),
+        i(c, 46, -1, [8706]),
+        i(c, 46, -1, [1055]),
+        i(c, 46, -1, [55349, 56595]),
+        i(c, 46, -1, [934]),
+        i(c, 46, -1, [928]),
+        i(c, 46, -1, [177]),
+        i(c, 46, -1, [8460]),
+        i(c, 46, -1, [8473]),
+        i(c, 46, -1, [10939]),
+        i(c, 46, -1, [8826]),
+        i(c, 46, -1, [10927]),
+        i(c, 46, -1, [8828]),
+        i(c, 46, -1, [8830]),
+        i(c, 46, -1, [8243]),
+        i(c, 46, -1, [8719]),
+        i(c, 46, -1, [8759]),
+        i(c, 46, -1, [8733]),
+        i(c, 46, -1, [55349, 56491]),
+        i(c, 46, -1, [936]),
+        i(c, 46, -1, [34]),
+        i(c, 46, -1, [34]),
+        i(c, 46, -1, [55349, 56596]),
+        i(c, 46, -1, [8474]),
+        i(c, 46, -1, [55349, 56492]),
+        i(c, 46, -1, [10512]),
+        i(c, 46, -1, [174]),
+        i(c, 46, -1, [174]),
+        i(c, 46, -1, [340]),
+        i(c, 46, -1, [10219]),
+        i(c, 46, -1, [8608]),
+        i(c, 46, -1, [10518]),
+        i(c, 46, -1, [344]),
+        i(c, 46, -1, [342]),
+        i(c, 46, -1, [1056]),
+        i(c, 46, -1, [8476]),
+        i(c, 46, -1, [8715]),
+        i(c, 46, -1, [8651]),
+        i(c, 46, -1, [10607]),
+        i(c, 46, -1, [8476]),
+        i(c, 46, -1, [929]),
+        i(c, 46, -1, [10217]),
+        i(c, 46, -1, [8594]),
+        i(c, 46, -1, [8677]),
+        i(c, 46, -1, [8644]),
+        i(c, 46, -1, [8969]),
+        i(c, 46, -1, [10215]),
+        i(c, 46, -1, [10589]),
+        i(c, 46, -1, [8642]),
+        i(c, 46, -1, [10581]),
+        i(c, 46, -1, [8971]),
+        i(c, 46, -1, [8866]),
+        i(c, 46, -1, [8614]),
+        i(c, 46, -1, [10587]),
+        i(c, 46, -1, [8883]),
+        i(c, 46, -1, [10704]),
+        i(c, 46, -1, [8885]),
+        i(c, 46, -1, [10575]),
+        i(c, 46, -1, [10588]),
+        i(c, 46, -1, [8638]),
+        i(c, 46, -1, [10580]),
+        i(c, 46, -1, [8640]),
+        i(c, 46, -1, [10579]),
+        i(c, 46, -1, [8658]),
+        i(c, 46, -1, [8477]),
+        i(c, 46, -1, [10608]),
+        i(c, 46, -1, [8667]),
+        i(c, 46, -1, [8475]),
+        i(c, 46, -1, [8625]),
+        i(c, 46, -1, [10740]),
+        i(c, 46, -1, [1065]),
+        i(c, 46, -1, [1064]),
+        i(c, 46, -1, [1068]),
+        i(c, 46, -1, [346]),
+        i(c, 46, -1, [10940]),
+        i(c, 46, -1, [352]),
+        i(c, 46, -1, [350]),
+        i(c, 46, -1, [348]),
+        i(c, 46, -1, [1057]),
+        i(c, 46, -1, [55349, 56598]),
+        i(c, 46, -1, [8595]),
+        i(c, 46, -1, [8592]),
+        i(c, 46, -1, [8594]),
+        i(c, 46, -1, [8593]),
+        i(c, 46, -1, [931]),
+        i(c, 46, -1, [8728]),
+        i(c, 46, -1, [55349, 56650]),
+        i(c, 46, -1, [8730]),
+        i(c, 46, -1, [9633]),
+        i(c, 46, -1, [8851]),
+        i(c, 46, -1, [8847]),
+        i(c, 46, -1, [8849]),
+        i(c, 46, -1, [8848]),
+        i(c, 46, -1, [8850]),
+        i(c, 46, -1, [8852]),
+        i(c, 46, -1, [55349, 56494]),
+        i(c, 46, -1, [8902]),
+        i(c, 46, -1, [8912]),
+        i(c, 46, -1, [8912]),
+        i(c, 46, -1, [8838]),
+        i(c, 46, -1, [8827]),
+        i(c, 46, -1, [10928]),
+        i(c, 46, -1, [8829]),
+        i(c, 46, -1, [8831]),
+        i(c, 46, -1, [8715]),
+        i(c, 46, -1, [8721]),
+        i(c, 46, -1, [8913]),
+        i(c, 46, -1, [8835]),
+        i(c, 46, -1, [8839]),
+        i(c, 46, -1, [8913]),
+        i(c, 46, -1, [222]),
+        i(c, 46, -1, [222]),
+        i(c, 46, -1, [8482]),
+        i(c, 46, -1, [1035]),
+        i(c, 46, -1, [1062]),
+        i(c, 46, -1, [9]),
+        i(c, 46, -1, [932]),
+        i(c, 46, -1, [356]),
+        i(c, 46, -1, [354]),
+        i(c, 46, -1, [1058]),
+        i(c, 46, -1, [55349, 56599]),
+        i(c, 46, -1, [8756]),
+        i(c, 46, -1, [920]),
+        i(c, 46, -1, [8287, 8202]),
+        i(c, 46, -1, [8201]),
+        i(c, 46, -1, [8764]),
+        i(c, 46, -1, [8771]),
+        i(c, 46, -1, [8773]),
+        i(c, 46, -1, [8776]),
+        i(c, 46, -1, [55349, 56651]),
+        i(c, 46, -1, [8411])].concat($$clinit_131_1()));
+}
+function $$clinit_131_1(){
+    $$clinit_131_1 = nullMethod;
+    var i = initValues,
+        c = _3C_classLit;
+    return [
+        i(c, 46, -1, [55349, 56495]),
+        i(c, 46, -1, [358]),
+        i(c, 46, -1, [218]),
+        i(c, 46, -1, [218]),
+        i(c, 46, -1, [8607]),
+        i(c, 46, -1, [10569]),
+        i(c, 46, -1, [1038]),
+        i(c, 46, -1, [364]),
+        i(c, 46, -1, [219]),
+        i(c, 46, -1, [219]),
+        i(c, 46, -1, [1059]),
+        i(c, 46, -1, [368]),
+        i(c, 46, -1, [55349, 56600]),
+        i(c, 46, -1, [217]),
+        i(c, 46, -1, [217]),
+        i(c, 46, -1, [362]),
+        i(c, 46, -1, [95]),
+        i(c, 46, -1, [9183]),
+        i(c, 46, -1, [9141]),
+        i(c, 46, -1, [9181]),
+        i(c, 46, -1, [8899]),
+        i(c, 46, -1, [8846]),
+        i(c, 46, -1, [370]),
+        i(c, 46, -1, [55349, 56652]),
+        i(c, 46, -1, [8593]),
+        i(c, 46, -1, [10514]),
+        i(c, 46, -1, [8645]),
+        i(c, 46, -1, [8597]),
+        i(c, 46, -1, [10606]),
+        i(c, 46, -1, [8869]),
+        i(c, 46, -1, [8613]),
+        i(c, 46, -1, [8657]),
+        i(c, 46, -1, [8661]),
+        i(c, 46, -1, [8598]),
+        i(c, 46, -1, [8599]),
+        i(c, 46, -1, [978]),
+        i(c, 46, -1, [933]),
+        i(c, 46, -1, [366]),
+        i(c, 46, -1, [55349, 56496]),
+        i(c, 46, -1, [360]),
+        i(c, 46, -1, [220]),
+        i(c, 46, -1, [220]),
+        i(c, 46, -1, [8875]),
+        i(c, 46, -1, [10987]),
+        i(c, 46, -1, [1042]),
+        i(c, 46, -1, [8873]),
+        i(c, 46, -1, [10982]),
+        i(c, 46, -1, [8897]),
+        i(c, 46, -1, [8214]),
+        i(c, 46, -1, [8214]),
+        i(c, 46, -1, [8739]),
+        i(c, 46, -1, [124]),
+        i(c, 46, -1, [10072]),
+        i(c, 46, -1, [8768]),
+        i(c, 46, -1, [8202]),
+        i(c, 46, -1, [55349, 56601]),
+        i(c, 46, -1, [55349, 56653]),
+        i(c, 46, -1, [55349, 56497]),
+        i(c, 46, -1, [8874]),
+        i(c, 46, -1, [372]),
+        i(c, 46, -1, [8896]),
+        i(c, 46, -1, [55349, 56602]),
+        i(c, 46, -1, [55349, 56654]),
+        i(c, 46, -1, [55349, 56498]),
+        i(c, 46, -1, [55349, 56603]),
+        i(c, 46, -1, [926]),
+        i(c, 46, -1, [55349, 56655]),
+        i(c, 46, -1, [55349, 56499]),
+        i(c, 46, -1, [1071]),
+        i(c, 46, -1, [1031]),
+        i(c, 46, -1, [1070]),
+        i(c, 46, -1, [221]),
+        i(c, 46, -1, [221]),
+        i(c, 46, -1, [374]),
+        i(c, 46, -1, [1067]),
+        i(c, 46, -1, [55349, 56604]),
+        i(c, 46, -1, [55349, 56656]),
+        i(c, 46, -1, [55349, 56500]),
+        i(c, 46, -1, [376]),
+        i(c, 46, -1, [1046]),
+        i(c, 46, -1, [377]),
+        i(c, 46, -1, [381]),
+        i(c, 46, -1, [1047]),
+        i(c, 46, -1, [379]),
+        i(c, 46, -1, [8203]),
+        i(c, 46, -1, [918]),
+        i(c, 46, -1, [8488]),
+        i(c, 46, -1, [8484]),
+        i(c, 46, -1, [55349, 56501]),
+        i(c, 46, -1, [225]),
+        i(c, 46, -1, [225]),
+        i(c, 46, -1, [259]),
+        i(c, 46, -1, [8766]),
+        i(c, 46, -1, [8766, 819]),
+        i(c, 46, -1, [8767]),
+        i(c, 46, -1, [226]),
+        i(c, 46, -1, [226]),
+        i(c, 46, -1, [180]),
+        i(c, 46, -1, [180]),
+        i(c, 46, -1, [1072]),
+        i(c, 46, -1, [230]),
+        i(c, 46, -1, [230]),
+        i(c, 46, -1, [8289]),
+        i(c, 46, -1, [55349, 56606]),
+        i(c, 46, -1, [224]),
+        i(c, 46, -1, [224]),
+        i(c, 46, -1, [8501]),
+        i(c, 46, -1, [8501]),
+        i(c, 46, -1, [945]),
+        i(c, 46, -1, [257]),
+        i(c, 46, -1, [10815]),
+        i(c, 46, -1, [38]),
+        i(c, 46, -1, [38]),
+        i(c, 46, -1, [8743]),
+        i(c, 46, -1, [10837]),
+        i(c, 46, -1, [10844]),
+        i(c, 46, -1, [10840]),
+        i(c, 46, -1, [10842]),
+        i(c, 46, -1, [8736]),
+        i(c, 46, -1, [10660]),
+        i(c, 46, -1, [8736]),
+        i(c, 46, -1, [8737]),
+        i(c, 46, -1, [10664]),
+        i(c, 46, -1, [10665]),
+        i(c, 46, -1, [10666]),
+        i(c, 46, -1, [10667]),
+        i(c, 46, -1, [10668]),
+        i(c, 46, -1, [10669]),
+        i(c, 46, -1, [10670]),
+        i(c, 46, -1, [10671]),
+        i(c, 46, -1, [8735]),
+        i(c, 46, -1, [8894]),
+        i(c, 46, -1, [10653]),
+        i(c, 46, -1, [8738]),
+        i(c, 46, -1, [197]),
+        i(c, 46, -1, [9084]),
+        i(c, 46, -1, [261]),
+        i(c, 46, -1, [55349, 56658]),
+        i(c, 46, -1, [8776]),
+        i(c, 46, -1, [10864]),
+        i(c, 46, -1, [10863]),
+        i(c, 46, -1, [8778]),
+        i(c, 46, -1, [8779]),
+        i(c, 46, -1, [39]),
+        i(c, 46, -1, [8776]),
+        i(c, 46, -1, [8778]),
+        i(c, 46, -1, [229]),
+        i(c, 46, -1, [229]),
+        i(c, 46, -1, [55349, 56502]),
+        i(c, 46, -1, [42]),
+        i(c, 46, -1, [8776]),
+        i(c, 46, -1, [8781]),
+        i(c, 46, -1, [227]),
+        i(c, 46, -1, [227]),
+        i(c, 46, -1, [228]),
+        i(c, 46, -1, [228]),
+        i(c, 46, -1, [8755]),
+        i(c, 46, -1, [10769]),
+        i(c, 46, -1, [10989]),
+        i(c, 46, -1, [8780]),
+        i(c, 46, -1, [1014]),
+        i(c, 46, -1, [8245]),
+        i(c, 46, -1, [8765]),
+        i(c, 46, -1, [8909]),
+        i(c, 46, -1, [8893]),
+        i(c, 46, -1, [8965]),
+        i(c, 46, -1, [8965]),
+        i(c, 46, -1, [9141]),
+        i(c, 46, -1, [9142]),
+        i(c, 46, -1, [8780]),
+        i(c, 46, -1, [1073]),
+        i(c, 46, -1, [8222]),
+        i(c, 46, -1, [8757]),
+        i(c, 46, -1, [8757]),
+        i(c, 46, -1, [10672]),
+        i(c, 46, -1, [1014]),
+        i(c, 46, -1, [8492]),
+        i(c, 46, -1, [946]),
+        i(c, 46, -1, [8502]),
+        i(c, 46, -1, [8812]),
+        i(c, 46, -1, [55349, 56607]),
+        i(c, 46, -1, [8898]),
+        i(c, 46, -1, [9711]),
+        i(c, 46, -1, [8899]),
+        i(c, 46, -1, [10752]),
+        i(c, 46, -1, [10753]),
+        i(c, 46, -1, [10754]),
+        i(c, 46, -1, [10758]),
+        i(c, 46, -1, [9733]),
+        i(c, 46, -1, [9661]),
+        i(c, 46, -1, [9651]),
+        i(c, 46, -1, [10756]),
+        i(c, 46, -1, [8897]),
+        i(c, 46, -1, [8896]),
+        i(c, 46, -1, [10509]),
+        i(c, 46, -1, [10731]),
+        i(c, 46, -1, [9642]),
+        i(c, 46, -1, [9652]),
+        i(c, 46, -1, [9662]),
+        i(c, 46, -1, [9666]),
+        i(c, 46, -1, [9656]),
+        i(c, 46, -1, [9251]),
+        i(c, 46, -1, [9618]),
+        i(c, 46, -1, [9617]),
+        i(c, 46, -1, [9619]),
+        i(c, 46, -1, [9608]),
+        i(c, 46, -1, [61, 8421]),
+        i(c, 46, -1, [8801, 8421]),
+        i(c, 46, -1, [8976]),
+        i(c, 46, -1, [55349, 56659]),
+        i(c, 46, -1, [8869]),
+        i(c, 46, -1, [8869]),
+        i(c, 46, -1, [8904]),
+        i(c, 46, -1, [9559]),
+        i(c, 46, -1, [9556]),
+        i(c, 46, -1, [9558]),
+        i(c, 46, -1, [9555]),
+        i(c, 46, -1, [9552]),
+        i(c, 46, -1, [9574]),
+        i(c, 46, -1, [9577]),
+        i(c, 46, -1, [9572]),
+        i(c, 46, -1, [9575]),
+        i(c, 46, -1, [9565]),
+        i(c, 46, -1, [9562]),
+        i(c, 46, -1, [9564]),
+        i(c, 46, -1, [9561]),
+        i(c, 46, -1, [9553]),
+        i(c, 46, -1, [9580]),
+        i(c, 46, -1, [9571]),
+        i(c, 46, -1, [9568]),
+        i(c, 46, -1, [9579]),
+        i(c, 46, -1, [9570]),
+        i(c, 46, -1, [9567]),
+        i(c, 46, -1, [10697]),
+        i(c, 46, -1, [9557]),
+        i(c, 46, -1, [9554]),
+        i(c, 46, -1, [9488]),
+        i(c, 46, -1, [9484]),
+        i(c, 46, -1, [9472]),
+        i(c, 46, -1, [9573]),
+        i(c, 46, -1, [9576]),
+        i(c, 46, -1, [9516]),
+        i(c, 46, -1, [9524]),
+        i(c, 46, -1, [8863]),
+        i(c, 46, -1, [8862]),
+        i(c, 46, -1, [8864]),
+        i(c, 46, -1, [9563]),
+        i(c, 46, -1, [9560]),
+        i(c, 46, -1, [9496]),
+        i(c, 46, -1, [9492]),
+        i(c, 46, -1, [9474]),
+        i(c, 46, -1, [9578]),
+        i(c, 46, -1, [9569]),
+        i(c, 46, -1, [9566]),
+        i(c, 46, -1, [9532]),
+        i(c, 46, -1, [9508]),
+        i(c, 46, -1, [9500]),
+        i(c, 46, -1, [8245]),
+        i(c, 46, -1, [728]),
+        i(c, 46, -1, [166]),
+        i(c, 46, -1, [166]),
+        i(c, 46, -1, [55349, 56503]),
+        i(c, 46, -1, [8271]),
+        i(c, 46, -1, [8765]),
+        i(c, 46, -1, [8909]),
+        i(c, 46, -1, [92]),
+        i(c, 46, -1, [10693]),
+        i(c, 46, -1, [10184]),
+        i(c, 46, -1, [8226]),
+        i(c, 46, -1, [8226]),
+        i(c, 46, -1, [8782]),
+        i(c, 46, -1, [10926]),
+        i(c, 46, -1, [8783]),
+        i(c, 46, -1, [8783]),
+        i(c, 46, -1, [263]),
+        i(c, 46, -1, [8745]),
+        i(c, 46, -1, [10820]),
+        i(c, 46, -1, [10825]),
+        i(c, 46, -1, [10827]),
+        i(c, 46, -1, [10823]),
+        i(c, 46, -1, [10816]),
+        i(c, 46, -1, [8745, 65024]),
+        i(c, 46, -1, [8257]),
+        i(c, 46, -1, [711]),
+        i(c, 46, -1, [10829]),
+        i(c, 46, -1, [269]),
+        i(c, 46, -1, [231]),
+        i(c, 46, -1, [231]),
+        i(c, 46, -1, [265]),
+        i(c, 46, -1, [10828]),
+        i(c, 46, -1, [10832]),
+        i(c, 46, -1, [267]),
+        i(c, 46, -1, [184]),
+        i(c, 46, -1, [184]),
+        i(c, 46, -1, [10674]),
+        i(c, 46, -1, [162]),
+        i(c, 46, -1, [162]),
+        i(c, 46, -1, [183]),
+        i(c, 46, -1, [55349, 56608]),
+        i(c, 46, -1, [1095]),
+        i(c, 46, -1, [10003]),
+        i(c, 46, -1, [10003]),
+        i(c, 46, -1, [967]),
+        i(c, 46, -1, [9675]),
+        i(c, 46, -1, [10691]),
+        i(c, 46, -1, [710]),
+        i(c, 46, -1, [8791]),
+        i(c, 46, -1, [8634]),
+        i(c, 46, -1, [8635]),
+        i(c, 46, -1, [174]),
+        i(c, 46, -1, [9416]),
+        i(c, 46, -1, [8859]),
+        i(c, 46, -1, [8858]),
+        i(c, 46, -1, [8861]),
+        i(c, 46, -1, [8791]),
+        i(c, 46, -1, [10768]),
+        i(c, 46, -1, [10991]),
+        i(c, 46, -1, [10690]),
+        i(c, 46, -1, [9827]),
+        i(c, 46, -1, [9827]),
+        i(c, 46, -1, [58]),
+        i(c, 46, -1, [8788]),
+        i(c, 46, -1, [8788]),
+        i(c, 46, -1, [44]),
+        i(c, 46, -1, [64]),
+        i(c, 46, -1, [8705]),
+        i(c, 46, -1, [8728]),
+        i(c, 46, -1, [8705]),
+        i(c, 46, -1, [8450]),
+        i(c, 46, -1, [8773]),
+        i(c, 46, -1, [10861]),
+        i(c, 46, -1, [8750]),
+        i(c, 46, -1, [55349, 56660]),
+        i(c, 46, -1, [8720]),
+        i(c, 46, -1, [169]),
+        i(c, 46, -1, [169]),
+        i(c, 46, -1, [8471]),
+        i(c, 46, -1, [8629]),
+        i(c, 46, -1, [10007]),
+        i(c, 46, -1, [55349, 56504]),
+        i(c, 46, -1, [10959]),
+        i(c, 46, -1, [10961]),
+        i(c, 46, -1, [10960]),
+        i(c, 46, -1, [10962]),
+        i(c, 46, -1, [8943]),
+        i(c, 46, -1, [10552]),
+        i(c, 46, -1, [10549]),
+        i(c, 46, -1, [8926]),
+        i(c, 46, -1, [8927]),
+        i(c, 46, -1, [8630]),
+        i(c, 46, -1, [10557]),
+        i(c, 46, -1, [8746]),
+        i(c, 46, -1, [10824]),
+        i(c, 46, -1, [10822]),
+        i(c, 46, -1, [10826]),
+        i(c, 46, -1, [8845]),
+        i(c, 46, -1, [10821]),
+        i(c, 46, -1, [8746, 65024]),
+        i(c, 46, -1, [8631]),
+        i(c, 46, -1, [10556]),
+        i(c, 46, -1, [8926]),
+        i(c, 46, -1, [8927]),
+        i(c, 46, -1, [8910]),
+        i(c, 46, -1, [8911]),
+        i(c, 46, -1, [164]),
+        i(c, 46, -1, [164]),
+        i(c, 46, -1, [8630]),
+        i(c, 46, -1, [8631]),
+        i(c, 46, -1, [8910]),
+        i(c, 46, -1, [8911]),
+        i(c, 46, -1, [8754]),
+        i(c, 46, -1, [8753]),
+        i(c, 46, -1, [9005]),
+        i(c, 46, -1, [8659]),
+        i(c, 46, -1, [10597]),
+        i(c, 46, -1, [8224]),
+        i(c, 46, -1, [8504]),
+        i(c, 46, -1, [8595]),
+        i(c, 46, -1, [8208]),
+        i(c, 46, -1, [8867]),
+        i(c, 46, -1, [10511]),
+        i(c, 46, -1, [733]),
+        i(c, 46, -1, [271]),
+        i(c, 46, -1, [1076]),
+        i(c, 46, -1, [8518]),
+        i(c, 46, -1, [8225]),
+        i(c, 46, -1, [8650]),
+        i(c, 46, -1, [10871]),
+        i(c, 46, -1, [176]),
+        i(c, 46, -1, [176]),
+        i(c, 46, -1, [948]),
+        i(c, 46, -1, [10673]),
+        i(c, 46, -1, [10623]),
+        i(c, 46, -1, [55349, 56609]),
+        i(c, 46, -1, [8643]),
+        i(c, 46, -1, [8642]),
+        i(c, 46, -1, [8900]),
+        i(c, 46, -1, [8900]),
+        i(c, 46, -1, [9830]),
+        i(c, 46, -1, [9830]),
+        i(c, 46, -1, [168]),
+        i(c, 46, -1, [989]),
+        i(c, 46, -1, [8946]),
+        i(c, 46, -1, [247]),
+        i(c, 46, -1, [247]),
+        i(c, 46, -1, [247]),
+        i(c, 46, -1, [8903]),
+        i(c, 46, -1, [8903]),
+        i(c, 46, -1, [1106]),
+        i(c, 46, -1, [8990]),
+        i(c, 46, -1, [8973]),
+        i(c, 46, -1, [36]),
+        i(c, 46, -1, [55349, 56661]),
+        i(c, 46, -1, [729]),
+        i(c, 46, -1, [8784]),
+        i(c, 46, -1, [8785]),
+        i(c, 46, -1, [8760]),
+        i(c, 46, -1, [8724]),
+        i(c, 46, -1, [8865]),
+        i(c, 46, -1, [8966]),
+        i(c, 46, -1, [8595]),
+        i(c, 46, -1, [8650]),
+        i(c, 46, -1, [8643]),
+        i(c, 46, -1, [8642]),
+        i(c, 46, -1, [10512]),
+        i(c, 46, -1, [8991]),
+        i(c, 46, -1, [8972]),
+        i(c, 46, -1, [55349, 56505]),
+        i(c, 46, -1, [1109]),
+        i(c, 46, -1, [10742]),
+        i(c, 46, -1, [273]),
+        i(c, 46, -1, [8945]),
+        i(c, 46, -1, [9663]),
+        i(c, 46, -1, [9662]),
+        i(c, 46, -1, [8693]),
+        i(c, 46, -1, [10607]),
+        i(c, 46, -1, [10662]),
+        i(c, 46, -1, [1119]),
+        i(c, 46, -1, [10239]),
+        i(c, 46, -1, [10871]),
+        i(c, 46, -1, [8785]),
+        i(c, 46, -1, [233]),
+        i(c, 46, -1, [233]),
+        i(c, 46, -1, [10862]),
+        i(c, 46, -1, [283]),
+        i(c, 46, -1, [8790]),
+        i(c, 46, -1, [234]),
+        i(c, 46, -1, [234]),
+        i(c, 46, -1, [8789]),
+        i(c, 46, -1, [1101]),
+        i(c, 46, -1, [279]),
+        i(c, 46, -1, [8519]),
+        i(c, 46, -1, [8786]),
+        i(c, 46, -1, [55349, 56610]),
+        i(c, 46, -1, [10906]),
+        i(c, 46, -1, [232]),
+        i(c, 46, -1, [232]),
+        i(c, 46, -1, [10902]),
+        i(c, 46, -1, [10904]),
+        i(c, 46, -1, [10905]),
+        i(c, 46, -1, [9191]),
+        i(c, 46, -1, [8467]),
+        i(c, 46, -1, [10901]),
+        i(c, 46, -1, [10903]),
+        i(c, 46, -1, [275]),
+        i(c, 46, -1, [8709]),
+        i(c, 46, -1, [8709]),
+        i(c, 46, -1, [8709]),
+        i(c, 46, -1, [8196]),
+        i(c, 46, -1, [8197]),
+        i(c, 46, -1, [8195]),
+        i(c, 46, -1, [331]),
+        i(c, 46, -1, [8194]),
+        i(c, 46, -1, [281]),
+        i(c, 46, -1, [55349, 56662]),
+        i(c, 46, -1, [8917]),
+        i(c, 46, -1, [10723]),
+        i(c, 46, -1, [10865]),
+        i(c, 46, -1, [949]),
+        i(c, 46, -1, [949]),
+        i(c, 46, -1, [1013]),
+        i(c, 46, -1, [8790]),
+        i(c, 46, -1, [8789]),
+        i(c, 46, -1, [8770]),
+        i(c, 46, -1, [10902]),
+        i(c, 46, -1, [10901]),
+        i(c, 46, -1, [61]),
+        i(c, 46, -1, [8799]),
+        i(c, 46, -1, [8801]),
+        i(c, 46, -1, [10872]),
+        i(c, 46, -1, [10725]),
+        i(c, 46, -1, [8787]),
+        i(c, 46, -1, [10609]),
+        i(c, 46, -1, [8495]),
+        i(c, 46, -1, [8784]),
+        i(c, 46, -1, [8770]),
+        i(c, 46, -1, [951]),
+        i(c, 46, -1, [240]),
+        i(c, 46, -1, [240]),
+        i(c, 46, -1, [235]),
+        i(c, 46, -1, [235]),
+        i(c, 46, -1, [8364]),
+        i(c, 46, -1, [33]),
+        i(c, 46, -1, [8707]),
+        i(c, 46, -1, [8496]),
+        i(c, 46, -1, [8519]),
+        i(c, 46, -1, [8786]),
+        i(c, 46, -1, [1092]),
+        i(c, 46, -1, [9792]),
+        i(c, 46, -1, [64259]),
+        i(c, 46, -1, [64256]),
+        i(c, 46, -1, [64260]),
+        i(c, 46, -1, [55349, 56611]),
+        i(c, 46, -1, [64257]),
+        i(c, 46, -1, [102, 106]),
+        i(c, 46, -1, [9837]),
+        i(c, 46, -1, [64258]),
+        i(c, 46, -1, [9649]),
+        i(c, 46, -1, [402]),
+        i(c, 46, -1, [55349, 56663]),
+        i(c, 46, -1, [8704]),
+        i(c, 46, -1, [8916]),
+        i(c, 46, -1, [10969]),
+        i(c, 46, -1, [10765]),
+        i(c, 46, -1, [189]),
+        i(c, 46, -1, [189]),
+        i(c, 46, -1, [8531]),
+        i(c, 46, -1, [188]),
+        i(c, 46, -1, [188]),
+        i(c, 46, -1, [8533]),
+        i(c, 46, -1, [8537]),
+        i(c, 46, -1, [8539]),
+        i(c, 46, -1, [8532]),
+        i(c, 46, -1, [8534]),
+        i(c, 46, -1, [190]),
+        i(c, 46, -1, [190]),
+        i(c, 46, -1, [8535]),
+        i(c, 46, -1, [8540]),
+        i(c, 46, -1, [8536]),
+        i(c, 46, -1, [8538]),
+        i(c, 46, -1, [8541]),
+        i(c, 46, -1, [8542]),
+        i(c, 46, -1, [8260]),
+        i(c, 46, -1, [8994]),
+        i(c, 46, -1, [55349, 56507]),
+        i(c, 46, -1, [8807]),
+        i(c, 46, -1, [10892]),
+        i(c, 46, -1, [501]),
+        i(c, 46, -1, [947]),
+        i(c, 46, -1, [989])].concat($$clinit_131_2());
+}
+function $$clinit_131_2(){
+    var i = initValues,
+        c = _3C_classLit;
+    $$clinit_131_2 = nullMethod;
+    return [i(c, 46, -1, [10886]),
+        i(c, 46, -1, [287]),
+        i(c, 46, -1, [285]),
+        i(c, 46, -1, [1075]),
+        i(c, 46, -1, [289]),
+        i(c, 46, -1, [8805]),
+        i(c, 46, -1, [8923]),
+        i(c, 46, -1, [8805]),
+        i(c, 46, -1, [8807]),
+        i(c, 46, -1, [10878]),
+        i(c, 46, -1, [10878]),
+        i(c, 46, -1, [10921]),
+        i(c, 46, -1, [10880]),
+        i(c, 46, -1, [10882]),
+        i(c, 46, -1, [10884]),
+        i(c, 46, -1, [8923, 65024]),
+        i(c, 46, -1, [10900]),
+        i(c, 46, -1, [55349, 56612]),
+        i(c, 46, -1, [8811]),
+        i(c, 46, -1, [8921]),
+        i(c, 46, -1, [8503]),
+        i(c, 46, -1, [1107]),
+        i(c, 46, -1, [8823]),
+        i(c, 46, -1, [10898]),
+        i(c, 46, -1, [10917]),
+        i(c, 46, -1, [10916]),
+        i(c, 46, -1, [8809]),
+        i(c, 46, -1, [10890]),
+        i(c, 46, -1, [10890]),
+        i(c, 46, -1, [10888]),
+        i(c, 46, -1, [10888]),
+        i(c, 46, -1, [8809]),
+        i(c, 46, -1, [8935]),
+        i(c, 46, -1, [55349, 56664]),
+        i(c, 46, -1, [96]),
+        i(c, 46, -1, [8458]),
+        i(c, 46, -1, [8819]),
+        i(c, 46, -1, [10894]),
+        i(c, 46, -1, [10896]),
+        i(c, 46, -1, [62]),
+        i(c, 46, -1, [62]),
+        i(c, 46, -1, [10919]),
+        i(c, 46, -1, [10874]),
+        i(c, 46, -1, [8919]),
+        i(c, 46, -1, [10645]),
+        i(c, 46, -1, [10876]),
+        i(c, 46, -1, [10886]),
+        i(c, 46, -1, [10616]),
+        i(c, 46, -1, [8919]),
+        i(c, 46, -1, [8923]),
+        i(c, 46, -1, [10892]),
+        i(c, 46, -1, [8823]),
+        i(c, 46, -1, [8819]),
+        i(c, 46, -1, [8809, 65024]),
+        i(c, 46, -1, [8809, 65024]),
+        i(c, 46, -1, [8660]),
+        i(c, 46, -1, [8202]),
+        i(c, 46, -1, [189]),
+        i(c, 46, -1, [8459]),
+        i(c, 46, -1, [1098]),
+        i(c, 46, -1, [8596]),
+        i(c, 46, -1, [10568]),
+        i(c, 46, -1, [8621]),
+        i(c, 46, -1, [8463]),
+        i(c, 46, -1, [293]),
+        i(c, 46, -1, [9829]),
+        i(c, 46, -1, [9829]),
+        i(c, 46, -1, [8230]),
+        i(c, 46, -1, [8889]),
+        i(c, 46, -1, [55349, 56613]),
+        i(c, 46, -1, [10533]),
+        i(c, 46, -1, [10534]),
+        i(c, 46, -1, [8703]),
+        i(c, 46, -1, [8763]),
+        i(c, 46, -1, [8617]),
+        i(c, 46, -1, [8618]),
+        i(c, 46, -1, [55349, 56665]),
+        i(c, 46, -1, [8213]),
+        i(c, 46, -1, [55349, 56509]),
+        i(c, 46, -1, [8463]),
+        i(c, 46, -1, [295]),
+        i(c, 46, -1, [8259]),
+        i(c, 46, -1, [8208]),
+        i(c, 46, -1, [237]),
+        i(c, 46, -1, [237]),
+        i(c, 46, -1, [8291]),
+        i(c, 46, -1, [238]),
+        i(c, 46, -1, [238]),
+        i(c, 46, -1, [1080]),
+        i(c, 46, -1, [1077]),
+        i(c, 46, -1, [161]),
+        i(c, 46, -1, [161]),
+        i(c, 46, -1, [8660]),
+        i(c, 46, -1, [55349, 56614]),
+        i(c, 46, -1, [236]),
+        i(c, 46, -1, [236]),
+        i(c, 46, -1, [8520]),
+        i(c, 46, -1, [10764]),
+        i(c, 46, -1, [8749]),
+        i(c, 46, -1, [10716]),
+        i(c, 46, -1, [8489]),
+        i(c, 46, -1, [307]),
+        i(c, 46, -1, [299]),
+        i(c, 46, -1, [8465]),
+        i(c, 46, -1, [8464]),
+        i(c, 46, -1, [8465]),
+        i(c, 46, -1, [305]),
+        i(c, 46, -1, [8887]),
+        i(c, 46, -1, [437]),
+        i(c, 46, -1, [8712]),
+        i(c, 46, -1, [8453]),
+        i(c, 46, -1, [8734]),
+        i(c, 46, -1, [10717]),
+        i(c, 46, -1, [305]),
+        i(c, 46, -1, [8747]),
+        i(c, 46, -1, [8890]),
+        i(c, 46, -1, [8484]),
+        i(c, 46, -1, [8890]),
+        i(c, 46, -1, [10775]),
+        i(c, 46, -1, [10812]),
+        i(c, 46, -1, [1105]),
+        i(c, 46, -1, [303]),
+        i(c, 46, -1, [55349, 56666]),
+        i(c, 46, -1, [953]),
+        i(c, 46, -1, [10812]),
+        i(c, 46, -1, [191]),
+        i(c, 46, -1, [191]),
+        i(c, 46, -1, [55349, 56510]),
+        i(c, 46, -1, [8712]),
+        i(c, 46, -1, [8953]),
+        i(c, 46, -1, [8949]),
+        i(c, 46, -1, [8948]),
+        i(c, 46, -1, [8947]),
+        i(c, 46, -1, [8712]),
+        i(c, 46, -1, [8290]),
+        i(c, 46, -1, [297]),
+        i(c, 46, -1, [1110]),
+        i(c, 46, -1, [239]),
+        i(c, 46, -1, [239]),
+        i(c, 46, -1, [309]),
+        i(c, 46, -1, [1081]),
+        i(c, 46, -1, [55349, 56615]),
+        i(c, 46, -1, [567]),
+        i(c, 46, -1, [55349, 56667]),
+        i(c, 46, -1, [55349, 56511]),
+        i(c, 46, -1, [1112]),
+        i(c, 46, -1, [1108]),
+        i(c, 46, -1, [954]),
+        i(c, 46, -1, [1008]),
+        i(c, 46, -1, [311]),
+        i(c, 46, -1, [1082]),
+        i(c, 46, -1, [55349, 56616]),
+        i(c, 46, -1, [312]),
+        i(c, 46, -1, [1093]),
+        i(c, 46, -1, [1116]),
+        i(c, 46, -1, [55349, 56668]),
+        i(c, 46, -1, [55349, 56512]),
+        i(c, 46, -1, [8666]),
+        i(c, 46, -1, [8656]),
+        i(c, 46, -1, [10523]),
+        i(c, 46, -1, [10510]),
+        i(c, 46, -1, [8806]),
+        i(c, 46, -1, [10891]),
+        i(c, 46, -1, [10594]),
+        i(c, 46, -1, [314]),
+        i(c, 46, -1, [10676]),
+        i(c, 46, -1, [8466]),
+        i(c, 46, -1, [955]),
+        i(c, 46, -1, [10216]),
+        i(c, 46, -1, [10641]),
+        i(c, 46, -1, [10216]),
+        i(c, 46, -1, [10885]),
+        i(c, 46, -1, [171]),
+        i(c, 46, -1, [171]),
+        i(c, 46, -1, [8592]),
+        i(c, 46, -1, [8676]),
+        i(c, 46, -1, [10527]),
+        i(c, 46, -1, [10525]),
+        i(c, 46, -1, [8617]),
+        i(c, 46, -1, [8619]),
+        i(c, 46, -1, [10553]),
+        i(c, 46, -1, [10611]),
+        i(c, 46, -1, [8610]),
+        i(c, 46, -1, [10923]),
+        i(c, 46, -1, [10521]),
+        i(c, 46, -1, [10925]),
+        i(c, 46, -1, [10925, 65024]),
+        i(c, 46, -1, [10508]),
+        i(c, 46, -1, [10098]),
+        i(c, 46, -1, [123]),
+        i(c, 46, -1, [91]),
+        i(c, 46, -1, [10635]),
+        i(c, 46, -1, [10639]),
+        i(c, 46, -1, [10637]),
+        i(c, 46, -1, [318]),
+        i(c, 46, -1, [316]),
+        i(c, 46, -1, [8968]),
+        i(c, 46, -1, [123]),
+        i(c, 46, -1, [1083]),
+        i(c, 46, -1, [10550]),
+        i(c, 46, -1, [8220]),
+        i(c, 46, -1, [8222]),
+        i(c, 46, -1, [10599]),
+        i(c, 46, -1, [10571]),
+        i(c, 46, -1, [8626]),
+        i(c, 46, -1, [8804]),
+        i(c, 46, -1, [8592]),
+        i(c, 46, -1, [8610]),
+        i(c, 46, -1, [8637]),
+        i(c, 46, -1, [8636]),
+        i(c, 46, -1, [8647]),
+        i(c, 46, -1, [8596]),
+        i(c, 46, -1, [8646]),
+        i(c, 46, -1, [8651]),
+        i(c, 46, -1, [8621]),
+        i(c, 46, -1, [8907]),
+        i(c, 46, -1, [8922]),
+        i(c, 46, -1, [8804]),
+        i(c, 46, -1, [8806]),
+        i(c, 46, -1, [10877]),
+        i(c, 46, -1, [10877]),
+        i(c, 46, -1, [10920]),
+        i(c, 46, -1, [10879]),
+        i(c, 46, -1, [10881]),
+        i(c, 46, -1, [10883]),
+        i(c, 46, -1, [8922, 65024]),
+        i(c, 46, -1, [10899]),
+        i(c, 46, -1, [10885]),
+        i(c, 46, -1, [8918]),
+        i(c, 46, -1, [8922]),
+        i(c, 46, -1, [10891]),
+        i(c, 46, -1, [8822]),
+        i(c, 46, -1, [8818]),
+        i(c, 46, -1, [10620]),
+        i(c, 46, -1, [8970]),
+        i(c, 46, -1, [55349, 56617]),
+        i(c, 46, -1, [8822]),
+        i(c, 46, -1, [10897]),
+        i(c, 46, -1, [8637]),
+        i(c, 46, -1, [8636]),
+        i(c, 46, -1, [10602]),
+        i(c, 46, -1, [9604]),
+        i(c, 46, -1, [1113]),
+        i(c, 46, -1, [8810]),
+        i(c, 46, -1, [8647]),
+        i(c, 46, -1, [8990]),
+        i(c, 46, -1, [10603]),
+        i(c, 46, -1, [9722]),
+        i(c, 46, -1, [320]),
+        i(c, 46, -1, [9136]),
+        i(c, 46, -1, [9136]),
+        i(c, 46, -1, [8808]),
+        i(c, 46, -1, [10889]),
+        i(c, 46, -1, [10889]),
+        i(c, 46, -1, [10887]),
+        i(c, 46, -1, [10887]),
+        i(c, 46, -1, [8808]),
+        i(c, 46, -1, [8934]),
+        i(c, 46, -1, [10220]),
+        i(c, 46, -1, [8701]),
+        i(c, 46, -1, [10214]),
+        i(c, 46, -1, [10229]),
+        i(c, 46, -1, [10231]),
+        i(c, 46, -1, [10236]),
+        i(c, 46, -1, [10230]),
+        i(c, 46, -1, [8619]),
+        i(c, 46, -1, [8620]),
+        i(c, 46, -1, [10629]),
+        i(c, 46, -1, [55349, 56669]),
+        i(c, 46, -1, [10797]),
+        i(c, 46, -1, [10804]),
+        i(c, 46, -1, [8727]),
+        i(c, 46, -1, [95]),
+        i(c, 46, -1, [9674]),
+        i(c, 46, -1, [9674]),
+        i(c, 46, -1, [10731]),
+        i(c, 46, -1, [40]),
+        i(c, 46, -1, [10643]),
+        i(c, 46, -1, [8646]),
+        i(c, 46, -1, [8991]),
+        i(c, 46, -1, [8651]),
+        i(c, 46, -1, [10605]),
+        i(c, 46, -1, [8206]),
+        i(c, 46, -1, [8895]),
+        i(c, 46, -1, [8249]),
+        i(c, 46, -1, [55349, 56513]),
+        i(c, 46, -1, [8624]),
+        i(c, 46, -1, [8818]),
+        i(c, 46, -1, [10893]),
+        i(c, 46, -1, [10895]),
+        i(c, 46, -1, [91]),
+        i(c, 46, -1, [8216]),
+        i(c, 46, -1, [8218]),
+        i(c, 46, -1, [322]),
+        i(c, 46, -1, [60]),
+        i(c, 46, -1, [60]),
+        i(c, 46, -1, [10918]),
+        i(c, 46, -1, [10873]),
+        i(c, 46, -1, [8918]),
+        i(c, 46, -1, [8907]),
+        i(c, 46, -1, [8905]),
+        i(c, 46, -1, [10614]),
+        i(c, 46, -1, [10875]),
+        i(c, 46, -1, [10646]),
+        i(c, 46, -1, [9667]),
+        i(c, 46, -1, [8884]),
+        i(c, 46, -1, [9666]),
+        i(c, 46, -1, [10570]),
+        i(c, 46, -1, [10598]),
+        i(c, 46, -1, [8808, 65024]),
+        i(c, 46, -1, [8808, 65024]),
+        i(c, 46, -1, [8762]),
+        i(c, 46, -1, [175]),
+        i(c, 46, -1, [175]),
+        i(c, 46, -1, [9794]),
+        i(c, 46, -1, [10016]),
+        i(c, 46, -1, [10016]),
+        i(c, 46, -1, [8614]),
+        i(c, 46, -1, [8614]),
+        i(c, 46, -1, [8615]),
+        i(c, 46, -1, [8612]),
+        i(c, 46, -1, [8613]),
+        i(c, 46, -1, [9646]),
+        i(c, 46, -1, [10793]),
+        i(c, 46, -1, [1084]),
+        i(c, 46, -1, [8212]),
+        i(c, 46, -1, [8737]),
+        i(c, 46, -1, [55349, 56618]),
+        i(c, 46, -1, [8487]),
+        i(c, 46, -1, [181]),
+        i(c, 46, -1, [181]),
+        i(c, 46, -1, [8739]),
+        i(c, 46, -1, [42]),
+        i(c, 46, -1, [10992]),
+        i(c, 46, -1, [183]),
+        i(c, 46, -1, [183]),
+        i(c, 46, -1, [8722]),
+        i(c, 46, -1, [8863]),
+        i(c, 46, -1, [8760]),
+        i(c, 46, -1, [10794]),
+        i(c, 46, -1, [10971]),
+        i(c, 46, -1, [8230]),
+        i(c, 46, -1, [8723]),
+        i(c, 46, -1, [8871]),
+        i(c, 46, -1, [55349, 56670]),
+        i(c, 46, -1, [8723]),
+        i(c, 46, -1, [55349, 56514]),
+        i(c, 46, -1, [8766]),
+        i(c, 46, -1, [956]),
+        i(c, 46, -1, [8888]),
+        i(c, 46, -1, [8888]),
+        i(c, 46, -1, [8921, 824]),
+        i(c, 46, -1, [8811, 8402]),
+        i(c, 46, -1, [8811, 824]),
+        i(c, 46, -1, [8653]),
+        i(c, 46, -1, [8654]),
+        i(c, 46, -1, [8920, 824]),
+        i(c, 46, -1, [8810, 8402]),
+        i(c, 46, -1, [8810, 824]),
+        i(c, 46, -1, [8655]),
+        i(c, 46, -1, [8879]),
+        i(c, 46, -1, [8878]),
+        i(c, 46, -1, [8711]),
+        i(c, 46, -1, [324]),
+        i(c, 46, -1, [8736, 8402]),
+        i(c, 46, -1, [8777]),
+        i(c, 46, -1, [10864, 824]),
+        i(c, 46, -1, [8779, 824]),
+        i(c, 46, -1, [329]),
+        i(c, 46, -1, [8777]),
+        i(c, 46, -1, [9838]),
+        i(c, 46, -1, [9838]),
+        i(c, 46, -1, [8469]),
+        i(c, 46, -1, [160]),
+        i(c, 46, -1, [160]),
+        i(c, 46, -1, [8782, 824]),
+        i(c, 46, -1, [8783, 824]),
+        i(c, 46, -1, [10819]),
+        i(c, 46, -1, [328]),
+        i(c, 46, -1, [326]),
+        i(c, 46, -1, [8775]),
+        i(c, 46, -1, [10861, 824]),
+        i(c, 46, -1, [10818]),
+        i(c, 46, -1, [1085]),
+        i(c, 46, -1, [8211]),
+        i(c, 46, -1, [8800]),
+        i(c, 46, -1, [8663]),
+        i(c, 46, -1, [10532]),
+        i(c, 46, -1, [8599]),
+        i(c, 46, -1, [8599]),
+        i(c, 46, -1, [8784, 824]),
+        i(c, 46, -1, [8802]),
+        i(c, 46, -1, [10536]),
+        i(c, 46, -1, [8770, 824]),
+        i(c, 46, -1, [8708]),
+        i(c, 46, -1, [8708]),
+        i(c, 46, -1, [55349, 56619]),
+        i(c, 46, -1, [8807, 824]),
+        i(c, 46, -1, [8817]),
+        i(c, 46, -1, [8817]),
+        i(c, 46, -1, [8807, 824]),
+        i(c, 46, -1, [10878, 824]),
+        i(c, 46, -1, [10878, 824]),
+        i(c, 46, -1, [8821]),
+        i(c, 46, -1, [8815]),
+        i(c, 46, -1, [8815]),
+        i(c, 46, -1, [8654]),
+        i(c, 46, -1, [8622]),
+        i(c, 46, -1, [10994]),
+        i(c, 46, -1, [8715]),
+        i(c, 46, -1, [8956]),
+        i(c, 46, -1, [8954]),
+        i(c, 46, -1, [8715]),
+        i(c, 46, -1, [1114]),
+        i(c, 46, -1, [8653]),
+        i(c, 46, -1, [8806, 824]),
+        i(c, 46, -1, [8602]),
+        i(c, 46, -1, [8229]),
+        i(c, 46, -1, [8816]),
+        i(c, 46, -1, [8602]),
+        i(c, 46, -1, [8622]),
+        i(c, 46, -1, [8816]),
+        i(c, 46, -1, [8806, 824]),
+        i(c, 46, -1, [10877, 824]),
+        i(c, 46, -1, [10877, 824]),
+        i(c, 46, -1, [8814]),
+        i(c, 46, -1, [8820]),
+        i(c, 46, -1, [8814]),
+        i(c, 46, -1, [8938]),
+        i(c, 46, -1, [8940]),
+        i(c, 46, -1, [8740]),
+        i(c, 46, -1, [55349, 56671]),
+        i(c, 46, -1, [172]),
+        i(c, 46, -1, [172]),
+        i(c, 46, -1, [8713]),
+        i(c, 46, -1, [8953, 824]),
+        i(c, 46, -1, [8949, 824]),
+        i(c, 46, -1, [8713]),
+        i(c, 46, -1, [8951]),
+        i(c, 46, -1, [8950]),
+        i(c, 46, -1, [8716]),
+        i(c, 46, -1, [8716]),
+        i(c, 46, -1, [8958]),
+        i(c, 46, -1, [8957]),
+        i(c, 46, -1, [8742]),
+        i(c, 46, -1, [8742]),
+        i(c, 46, -1, [11005, 8421]),
+        i(c, 46, -1, [8706, 824]),
+        i(c, 46, -1, [10772]),
+        i(c, 46, -1, [8832]),
+        i(c, 46, -1, [8928]),
+        i(c, 46, -1, [10927, 824]),
+        i(c, 46, -1, [8832]),
+        i(c, 46, -1, [10927, 824]),
+        i(c, 46, -1, [8655]),
+        i(c, 46, -1, [8603]),
+        i(c, 46, -1, [10547, 824]),
+        i(c, 46, -1, [8605, 824]),
+        i(c, 46, -1, [8603]),
+        i(c, 46, -1, [8939]),
+        i(c, 46, -1, [8941]),
+        i(c, 46, -1, [8833]),
+        i(c, 46, -1, [8929]),
+        i(c, 46, -1, [10928, 824]),
+        i(c, 46, -1, [55349, 56515]),
+        i(c, 46, -1, [8740]),
+        i(c, 46, -1, [8742]),
+        i(c, 46, -1, [8769]),
+        i(c, 46, -1, [8772]),
+        i(c, 46, -1, [8772]),
+        i(c, 46, -1, [8740]),
+        i(c, 46, -1, [8742]),
+        i(c, 46, -1, [8930]),
+        i(c, 46, -1, [8931]),
+        i(c, 46, -1, [8836]),
+        i(c, 46, -1, [10949, 824]),
+        i(c, 46, -1, [8840]),
+        i(c, 46, -1, [8834, 8402]),
+        i(c, 46, -1, [8840]),
+        i(c, 46, -1, [10949, 824]),
+        i(c, 46, -1, [8833]),
+        i(c, 46, -1, [10928, 824]),
+        i(c, 46, -1, [8837]),
+        i(c, 46, -1, [10950, 824]),
+        i(c, 46, -1, [8841]),
+        i(c, 46, -1, [8835, 8402]),
+        i(c, 46, -1, [8841]),
+        i(c, 46, -1, [10950, 824]),
+        i(c, 46, -1, [8825]),
+        i(c, 46, -1, [241]),
+        i(c, 46, -1, [241]),
+        i(c, 46, -1, [8824]),
+        i(c, 46, -1, [8938]),
+        i(c, 46, -1, [8940]),
+        i(c, 46, -1, [8939]),
+        i(c, 46, -1, [8941]),
+        i(c, 46, -1, [957]),
+        i(c, 46, -1, [35]),
+        i(c, 46, -1, [8470]),
+        i(c, 46, -1, [8199]),
+        i(c, 46, -1, [8877]),
+        i(c, 46, -1, [10500]),
+        i(c, 46, -1, [8781, 8402]),
+        i(c, 46, -1, [8876]),
+        i(c, 46, -1, [8805, 8402]),
+        i(c, 46, -1, [62, 8402]),
+        i(c, 46, -1, [10718]),
+        i(c, 46, -1, [10498]),
+        i(c, 46, -1, [8804, 8402]),
+        i(c, 46, -1, [60, 8402]),
+        i(c, 46, -1, [8884, 8402]),
+        i(c, 46, -1, [10499]),
+        i(c, 46, -1, [8885, 8402]),
+        i(c, 46, -1, [8764, 8402]),
+        i(c, 46, -1, [8662]),
+        i(c, 46, -1, [10531]),
+        i(c, 46, -1, [8598]),
+        i(c, 46, -1, [8598]),
+        i(c, 46, -1, [10535]),
+        i(c, 46, -1, [9416]),
+        i(c, 46, -1, [243]),
+        i(c, 46, -1, [243]),
+        i(c, 46, -1, [8859]),
+        i(c, 46, -1, [8858]),
+        i(c, 46, -1, [244]),
+        i(c, 46, -1, [244]),
+        i(c, 46, -1, [1086]),
+        i(c, 46, -1, [8861]),
+        i(c, 46, -1, [337]),
+        i(c, 46, -1, [10808]),
+        i(c, 46, -1, [8857]),
+        i(c, 46, -1, [10684]),
+        i(c, 46, -1, [339]),
+        i(c, 46, -1, [10687]),
+        i(c, 46, -1, [55349, 56620]),
+        i(c, 46, -1, [731]),
+        i(c, 46, -1, [242]),
+        i(c, 46, -1, [242]),
+        i(c, 46, -1, [10689]),
+        i(c, 46, -1, [10677]),
+        i(c, 46, -1, [937]),
+        i(c, 46, -1, [8750]),
+        i(c, 46, -1, [8634]),
+        i(c, 46, -1, [10686]),
+        i(c, 46, -1, [10683])].concat($$clinit_131_3());
+}
+function $$clinit_131_3(){
+    var i = initValues,
+        c = _3C_classLit;
+    $$clinit_131_3 = nullMethod;
+    return [
+        i(c, 46, -1, [8254]),
+        i(c, 46, -1, [10688]),
+        i(c, 46, -1, [333]),
+        i(c, 46, -1, [969]),
+        i(c, 46, -1, [959]),
+        i(c, 46, -1, [10678]),
+        i(c, 46, -1, [8854]),
+        i(c, 46, -1, [55349, 56672]),
+        i(c, 46, -1, [10679]),
+        i(c, 46, -1, [10681]),
+        i(c, 46, -1, [8853]),
+        i(c, 46, -1, [8744]),
+        i(c, 46, -1, [8635]),
+        i(c, 46, -1, [10845]),
+        i(c, 46, -1, [8500]),
+        i(c, 46, -1, [8500]),
+        i(c, 46, -1, [170]),
+        i(c, 46, -1, [170]),
+        i(c, 46, -1, [186]),
+        i(c, 46, -1, [186]),
+        i(c, 46, -1, [8886]),
+        i(c, 46, -1, [10838]),
+        i(c, 46, -1, [10839]),
+        i(c, 46, -1, [10843]),
+        i(c, 46, -1, [8500]),
+        i(c, 46, -1, [248]),
+        i(c, 46, -1, [248]),
+        i(c, 46, -1, [8856]),
+        i(c, 46, -1, [245]),
+        i(c, 46, -1, [245]),
+        i(c, 46, -1, [8855]),
+        i(c, 46, -1, [10806]),
+        i(c, 46, -1, [246]),
+        i(c, 46, -1, [246]),
+        i(c, 46, -1, [9021]),
+        i(c, 46, -1, [8741]),
+        i(c, 46, -1, [182]),
+        i(c, 46, -1, [182]),
+        i(c, 46, -1, [8741]),
+        i(c, 46, -1, [10995]),
+        i(c, 46, -1, [11005]),
+        i(c, 46, -1, [8706]),
+        i(c, 46, -1, [1087]),
+        i(c, 46, -1, [37]),
+        i(c, 46, -1, [46]),
+        i(c, 46, -1, [8240]),
+        i(c, 46, -1, [8869]),
+        i(c, 46, -1, [8241]),
+        i(c, 46, -1, [55349, 56621]),
+        i(c, 46, -1, [966]),
+        i(c, 46, -1, [981]),
+        i(c, 46, -1, [8499]),
+        i(c, 46, -1, [9742]),
+        i(c, 46, -1, [960]),
+        i(c, 46, -1, [8916]),
+        i(c, 46, -1, [982]),
+        i(c, 46, -1, [8463]),
+        i(c, 46, -1, [8462]),
+        i(c, 46, -1, [8463]),
+        i(c, 46, -1, [43]),
+        i(c, 46, -1, [10787]),
+        i(c, 46, -1, [8862]),
+        i(c, 46, -1, [10786]),
+        i(c, 46, -1, [8724]),
+        i(c, 46, -1, [10789]),
+        i(c, 46, -1, [10866]),
+        i(c, 46, -1, [177]),
+        i(c, 46, -1, [177]),
+        i(c, 46, -1, [10790]),
+        i(c, 46, -1, [10791]),
+        i(c, 46, -1, [177]),
+        i(c, 46, -1, [10773]),
+        i(c, 46, -1, [55349, 56673]),
+        i(c, 46, -1, [163]),
+        i(c, 46, -1, [163]),
+        i(c, 46, -1, [8826]),
+        i(c, 46, -1, [10931]),
+        i(c, 46, -1, [10935]),
+        i(c, 46, -1, [8828]),
+        i(c, 46, -1, [10927]),
+        i(c, 46, -1, [8826]),
+        i(c, 46, -1, [10935]),
+        i(c, 46, -1, [8828]),
+        i(c, 46, -1, [10927]),
+        i(c, 46, -1, [10937]),
+        i(c, 46, -1, [10933]),
+        i(c, 46, -1, [8936]),
+        i(c, 46, -1, [8830]),
+        i(c, 46, -1, [8242]),
+        i(c, 46, -1, [8473]),
+        i(c, 46, -1, [10933]),
+        i(c, 46, -1, [10937]),
+        i(c, 46, -1, [8936]),
+        i(c, 46, -1, [8719]),
+        i(c, 46, -1, [9006]),
+        i(c, 46, -1, [8978]),
+        i(c, 46, -1, [8979]),
+        i(c, 46, -1, [8733]),
+        i(c, 46, -1, [8733]),
+        i(c, 46, -1, [8830]),
+        i(c, 46, -1, [8880]),
+        i(c, 46, -1, [55349, 56517]),
+        i(c, 46, -1, [968]),
+        i(c, 46, -1, [8200]),
+        i(c, 46, -1, [55349, 56622]),
+        i(c, 46, -1, [10764]),
+        i(c, 46, -1, [55349, 56674]),
+        i(c, 46, -1, [8279]),
+        i(c, 46, -1, [55349, 56518]),
+        i(c, 46, -1, [8461]),
+        i(c, 46, -1, [10774]),
+        i(c, 46, -1, [63]),
+        i(c, 46, -1, [8799]),
+        i(c, 46, -1, [34]),
+        i(c, 46, -1, [34]),
+        i(c, 46, -1, [8667]),
+        i(c, 46, -1, [8658]),
+        i(c, 46, -1, [10524]),
+        i(c, 46, -1, [10511]),
+        i(c, 46, -1, [10596]),
+        i(c, 46, -1, [8765, 817]),
+        i(c, 46, -1, [341]),
+        i(c, 46, -1, [8730]),
+        i(c, 46, -1, [10675]),
+        i(c, 46, -1, [10217]),
+        i(c, 46, -1, [10642]),
+        i(c, 46, -1, [10661]),
+        i(c, 46, -1, [10217]),
+        i(c, 46, -1, [187]),
+        i(c, 46, -1, [187]),
+        i(c, 46, -1, [8594]),
+        i(c, 46, -1, [10613]),
+        i(c, 46, -1, [8677]),
+        i(c, 46, -1, [10528]),
+        i(c, 46, -1, [10547]),
+        i(c, 46, -1, [10526]),
+        i(c, 46, -1, [8618]),
+        i(c, 46, -1, [8620]),
+        i(c, 46, -1, [10565]),
+        i(c, 46, -1, [10612]),
+        i(c, 46, -1, [8611]),
+        i(c, 46, -1, [8605]),
+        i(c, 46, -1, [10522]),
+        i(c, 46, -1, [8758]),
+        i(c, 46, -1, [8474]),
+        i(c, 46, -1, [10509]),
+        i(c, 46, -1, [10099]),
+        i(c, 46, -1, [125]),
+        i(c, 46, -1, [93]),
+        i(c, 46, -1, [10636]),
+        i(c, 46, -1, [10638]),
+        i(c, 46, -1, [10640]),
+        i(c, 46, -1, [345]),
+        i(c, 46, -1, [343]),
+        i(c, 46, -1, [8969]),
+        i(c, 46, -1, [125]),
+        i(c, 46, -1, [1088]),
+        i(c, 46, -1, [10551]),
+        i(c, 46, -1, [10601]),
+        i(c, 46, -1, [8221]),
+        i(c, 46, -1, [8221]),
+        i(c, 46, -1, [8627]),
+        i(c, 46, -1, [8476]),
+        i(c, 46, -1, [8475]),
+        i(c, 46, -1, [8476]),
+        i(c, 46, -1, [8477]),
+        i(c, 46, -1, [9645]),
+        i(c, 46, -1, [174]),
+        i(c, 46, -1, [174]),
+        i(c, 46, -1, [10621]),
+        i(c, 46, -1, [8971]),
+        i(c, 46, -1, [55349, 56623]),
+        i(c, 46, -1, [8641]),
+        i(c, 46, -1, [8640]),
+        i(c, 46, -1, [10604]),
+        i(c, 46, -1, [961]),
+        i(c, 46, -1, [1009]),
+        i(c, 46, -1, [8594]),
+        i(c, 46, -1, [8611]),
+        i(c, 46, -1, [8641]),
+        i(c, 46, -1, [8640]),
+        i(c, 46, -1, [8644]),
+        i(c, 46, -1, [8652]),
+        i(c, 46, -1, [8649]),
+        i(c, 46, -1, [8605]),
+        i(c, 46, -1, [8908]),
+        i(c, 46, -1, [730]),
+        i(c, 46, -1, [8787]),
+        i(c, 46, -1, [8644]),
+        i(c, 46, -1, [8652]),
+        i(c, 46, -1, [8207]),
+        i(c, 46, -1, [9137]),
+        i(c, 46, -1, [9137]),
+        i(c, 46, -1, [10990]),
+        i(c, 46, -1, [10221]),
+        i(c, 46, -1, [8702]),
+        i(c, 46, -1, [10215]),
+        i(c, 46, -1, [10630]),
+        i(c, 46, -1, [55349, 56675]),
+        i(c, 46, -1, [10798]),
+        i(c, 46, -1, [10805]),
+        i(c, 46, -1, [41]),
+        i(c, 46, -1, [10644]),
+        i(c, 46, -1, [10770]),
+        i(c, 46, -1, [8649]),
+        i(c, 46, -1, [8250]),
+        i(c, 46, -1, [55349, 56519]),
+        i(c, 46, -1, [8625]),
+        i(c, 46, -1, [93]),
+        i(c, 46, -1, [8217]),
+        i(c, 46, -1, [8217]),
+        i(c, 46, -1, [8908]),
+        i(c, 46, -1, [8906]),
+        i(c, 46, -1, [9657]),
+        i(c, 46, -1, [8885]),
+        i(c, 46, -1, [9656]),
+        i(c, 46, -1, [10702]),
+        i(c, 46, -1, [10600]),
+        i(c, 46, -1, [8478]),
+        i(c, 46, -1, [347]),
+        i(c, 46, -1, [8218]),
+        i(c, 46, -1, [8827]),
+        i(c, 46, -1, [10932]),
+        i(c, 46, -1, [10936]),
+        i(c, 46, -1, [353]),
+        i(c, 46, -1, [8829]),
+        i(c, 46, -1, [10928]),
+        i(c, 46, -1, [351]),
+        i(c, 46, -1, [349]),
+        i(c, 46, -1, [10934]),
+        i(c, 46, -1, [10938]),
+        i(c, 46, -1, [8937]),
+        i(c, 46, -1, [10771]),
+        i(c, 46, -1, [8831]),
+        i(c, 46, -1, [1089]),
+        i(c, 46, -1, [8901]),
+        i(c, 46, -1, [8865]),
+        i(c, 46, -1, [10854]),
+        i(c, 46, -1, [8664]),
+        i(c, 46, -1, [10533]),
+        i(c, 46, -1, [8600]),
+        i(c, 46, -1, [8600]),
+        i(c, 46, -1, [167]),
+        i(c, 46, -1, [167]),
+        i(c, 46, -1, [59]),
+        i(c, 46, -1, [10537]),
+        i(c, 46, -1, [8726]),
+        i(c, 46, -1, [8726]),
+        i(c, 46, -1, [10038]),
+        i(c, 46, -1, [55349, 56624]),
+        i(c, 46, -1, [8994]),
+        i(c, 46, -1, [9839]),
+        i(c, 46, -1, [1097]),
+        i(c, 46, -1, [1096]),
+        i(c, 46, -1, [8739]),
+        i(c, 46, -1, [8741]),
+        i(c, 46, -1, [173]),
+        i(c, 46, -1, [173]),
+        i(c, 46, -1, [963]),
+        i(c, 46, -1, [962]),
+        i(c, 46, -1, [962]),
+        i(c, 46, -1, [8764]),
+        i(c, 46, -1, [10858]),
+        i(c, 46, -1, [8771]),
+        i(c, 46, -1, [8771]),
+        i(c, 46, -1, [10910]),
+        i(c, 46, -1, [10912]),
+        i(c, 46, -1, [10909]),
+        i(c, 46, -1, [10911]),
+        i(c, 46, -1, [8774]),
+        i(c, 46, -1, [10788]),
+        i(c, 46, -1, [10610]),
+        i(c, 46, -1, [8592]),
+        i(c, 46, -1, [8726]),
+        i(c, 46, -1, [10803]),
+        i(c, 46, -1, [10724]),
+        i(c, 46, -1, [8739]),
+        i(c, 46, -1, [8995]),
+        i(c, 46, -1, [10922]),
+        i(c, 46, -1, [10924]),
+        i(c, 46, -1, [10924, 65024]),
+        i(c, 46, -1, [1100]),
+        i(c, 46, -1, [47]),
+        i(c, 46, -1, [10692]),
+        i(c, 46, -1, [9023]),
+        i(c, 46, -1, [55349, 56676]),
+        i(c, 46, -1, [9824]),
+        i(c, 46, -1, [9824]),
+        i(c, 46, -1, [8741]),
+        i(c, 46, -1, [8851]),
+        i(c, 46, -1, [8851, 65024]),
+        i(c, 46, -1, [8852]),
+        i(c, 46, -1, [8852, 65024]),
+        i(c, 46, -1, [8847]),
+        i(c, 46, -1, [8849]),
+        i(c, 46, -1, [8847]),
+        i(c, 46, -1, [8849]),
+        i(c, 46, -1, [8848]),
+        i(c, 46, -1, [8850]),
+        i(c, 46, -1, [8848]),
+        i(c, 46, -1, [8850]),
+        i(c, 46, -1, [9633]),
+        i(c, 46, -1, [9633]),
+        i(c, 46, -1, [9642]),
+        i(c, 46, -1, [9642]),
+        i(c, 46, -1, [8594]),
+        i(c, 46, -1, [55349, 56520]),
+        i(c, 46, -1, [8726]),
+        i(c, 46, -1, [8995]),
+        i(c, 46, -1, [8902]),
+        i(c, 46, -1, [9734]),
+        i(c, 46, -1, [9733]),
+        i(c, 46, -1, [1013]),
+        i(c, 46, -1, [981]),
+        i(c, 46, -1, [175]),
+        i(c, 46, -1, [8834]),
+        i(c, 46, -1, [10949]),
+        i(c, 46, -1, [10941]),
+        i(c, 46, -1, [8838]),
+        i(c, 46, -1, [10947]),
+        i(c, 46, -1, [10945]),
+        i(c, 46, -1, [10955]),
+        i(c, 46, -1, [8842]),
+        i(c, 46, -1, [10943]),
+        i(c, 46, -1, [10617]),
+        i(c, 46, -1, [8834]),
+        i(c, 46, -1, [8838]),
+        i(c, 46, -1, [10949]),
+        i(c, 46, -1, [8842]),
+        i(c, 46, -1, [10955]),
+        i(c, 46, -1, [10951]),
+        i(c, 46, -1, [10965]),
+        i(c, 46, -1, [10963]),
+        i(c, 46, -1, [8827]),
+        i(c, 46, -1, [10936]),
+        i(c, 46, -1, [8829]),
+        i(c, 46, -1, [10928]),
+        i(c, 46, -1, [10938]),
+        i(c, 46, -1, [10934]),
+        i(c, 46, -1, [8937]),
+        i(c, 46, -1, [8831]),
+        i(c, 46, -1, [8721]),
+        i(c, 46, -1, [9834]),
+        i(c, 46, -1, [185]),
+        i(c, 46, -1, [185]),
+        i(c, 46, -1, [178]),
+        i(c, 46, -1, [178]),
+        i(c, 46, -1, [179]),
+        i(c, 46, -1, [179]),
+        i(c, 46, -1, [8835]),
+        i(c, 46, -1, [10950]),
+        i(c, 46, -1, [10942]),
+        i(c, 46, -1, [10968]),
+        i(c, 46, -1, [8839]),
+        i(c, 46, -1, [10948]),
+        i(c, 46, -1, [10185]),
+        i(c, 46, -1, [10967]),
+        i(c, 46, -1, [10619]),
+        i(c, 46, -1, [10946]),
+        i(c, 46, -1, [10956]),
+        i(c, 46, -1, [8843]),
+        i(c, 46, -1, [10944]),
+        i(c, 46, -1, [8835]),
+        i(c, 46, -1, [8839]),
+        i(c, 46, -1, [10950]),
+        i(c, 46, -1, [8843]),
+        i(c, 46, -1, [10956]),
+        i(c, 46, -1, [10952]),
+        i(c, 46, -1, [10964]),
+        i(c, 46, -1, [10966]),
+        i(c, 46, -1, [8665]),
+        i(c, 46, -1, [10534]),
+        i(c, 46, -1, [8601]),
+        i(c, 46, -1, [8601]),
+        i(c, 46, -1, [10538]),
+        i(c, 46, -1, [223]),
+        i(c, 46, -1, [223]),
+        i(c, 46, -1, [8982]),
+        i(c, 46, -1, [964]),
+        i(c, 46, -1, [9140]),
+        i(c, 46, -1, [357]),
+        i(c, 46, -1, [355]),
+        i(c, 46, -1, [1090]),
+        i(c, 46, -1, [8411]),
+        i(c, 46, -1, [8981]),
+        i(c, 46, -1, [55349, 56625]),
+        i(c, 46, -1, [8756]),
+        i(c, 46, -1, [8756]),
+        i(c, 46, -1, [952]),
+        i(c, 46, -1, [977]),
+        i(c, 46, -1, [977]),
+        i(c, 46, -1, [8776]),
+        i(c, 46, -1, [8764]),
+        i(c, 46, -1, [8201]),
+        i(c, 46, -1, [8776]),
+        i(c, 46, -1, [8764]),
+        i(c, 46, -1, [254]),
+        i(c, 46, -1, [254]),
+        i(c, 46, -1, [732]),
+        i(c, 46, -1, [215]),
+        i(c, 46, -1, [215]),
+        i(c, 46, -1, [8864]),
+        i(c, 46, -1, [10801]),
+        i(c, 46, -1, [10800]),
+        i(c, 46, -1, [8749]),
+        i(c, 46, -1, [10536]),
+        i(c, 46, -1, [8868]),
+        i(c, 46, -1, [9014]),
+        i(c, 46, -1, [10993]),
+        i(c, 46, -1, [55349, 56677]),
+        i(c, 46, -1, [10970]),
+        i(c, 46, -1, [10537]),
+        i(c, 46, -1, [8244]),
+        i(c, 46, -1, [8482]),
+        i(c, 46, -1, [9653]),
+        i(c, 46, -1, [9663]),
+        i(c, 46, -1, [9667]),
+        i(c, 46, -1, [8884]),
+        i(c, 46, -1, [8796]),
+        i(c, 46, -1, [9657]),
+        i(c, 46, -1, [8885]),
+        i(c, 46, -1, [9708]),
+        i(c, 46, -1, [8796]),
+        i(c, 46, -1, [10810]),
+        i(c, 46, -1, [10809]),
+        i(c, 46, -1, [10701]),
+        i(c, 46, -1, [10811]),
+        i(c, 46, -1, [9186]),
+        i(c, 46, -1, [55349, 56521]),
+        i(c, 46, -1, [1094]),
+        i(c, 46, -1, [1115]),
+        i(c, 46, -1, [359]),
+        i(c, 46, -1, [8812]),
+        i(c, 46, -1, [8606]),
+        i(c, 46, -1, [8608]),
+        i(c, 46, -1, [8657]),
+        i(c, 46, -1, [10595]),
+        i(c, 46, -1, [250]),
+        i(c, 46, -1, [250]),
+        i(c, 46, -1, [8593]),
+        i(c, 46, -1, [1118]),
+        i(c, 46, -1, [365]),
+        i(c, 46, -1, [251]),
+        i(c, 46, -1, [251]),
+        i(c, 46, -1, [1091]),
+        i(c, 46, -1, [8645]),
+        i(c, 46, -1, [369]),
+        i(c, 46, -1, [10606]),
+        i(c, 46, -1, [10622]),
+        i(c, 46, -1, [55349, 56626]),
+        i(c, 46, -1, [249]),
+        i(c, 46, -1, [249]),
+        i(c, 46, -1, [8639]),
+        i(c, 46, -1, [8638]),
+        i(c, 46, -1, [9600]),
+        i(c, 46, -1, [8988]),
+        i(c, 46, -1, [8988]),
+        i(c, 46, -1, [8975]),
+        i(c, 46, -1, [9720]),
+        i(c, 46, -1, [363]),
+        i(c, 46, -1, [168]),
+        i(c, 46, -1, [168]),
+        i(c, 46, -1, [371]),
+        i(c, 46, -1, [55349, 56678]),
+        i(c, 46, -1, [8593]),
+        i(c, 46, -1, [8597]),
+        i(c, 46, -1, [8639]),
+        i(c, 46, -1, [8638]),
+        i(c, 46, -1, [8846]),
+        i(c, 46, -1, [965]),
+        i(c, 46, -1, [978]),
+        i(c, 46, -1, [965]),
+        i(c, 46, -1, [8648]),
+        i(c, 46, -1, [8989]),
+        i(c, 46, -1, [8989]),
+        i(c, 46, -1, [8974]),
+        i(c, 46, -1, [367]),
+        i(c, 46, -1, [9721]),
+        i(c, 46, -1, [55349, 56522]),
+        i(c, 46, -1, [8944]),
+        i(c, 46, -1, [361]),
+        i(c, 46, -1, [9653]),
+        i(c, 46, -1, [9652]),
+        i(c, 46, -1, [8648]),
+        i(c, 46, -1, [252]),
+        i(c, 46, -1, [252]),
+        i(c, 46, -1, [10663]),
+        i(c, 46, -1, [8661]),
+        i(c, 46, -1, [10984]),
+        i(c, 46, -1, [10985]),
+        i(c, 46, -1, [8872]),
+        i(c, 46, -1, [10652]),
+        i(c, 46, -1, [1013]),
+        i(c, 46, -1, [1008]),
+        i(c, 46, -1, [8709]),
+        i(c, 46, -1, [981]),
+        i(c, 46, -1, [982]),
+        i(c, 46, -1, [8733]),
+        i(c, 46, -1, [8597]),
+        i(c, 46, -1, [1009]),
+        i(c, 46, -1, [962]),
+        i(c, 46, -1, [8842, 65024]),
+        i(c, 46, -1, [10955, 65024]),
+        i(c, 46, -1, [8843, 65024]),
+        i(c, 46, -1, [10956, 65024]),
+        i(c, 46, -1, [977]),
+        i(c, 46, -1, [8882]),
+        i(c, 46, -1, [8883]),
+        i(c, 46, -1, [1074]),
+        i(c, 46, -1, [8866]),
+        i(c, 46, -1, [8744]),
+        i(c, 46, -1, [8891]),
+        i(c, 46, -1, [8794]),
+        i(c, 46, -1, [8942]),
+        i(c, 46, -1, [124]),
+        i(c, 46, -1, [124]),
+        i(c, 46, -1, [55349, 56627]),
+        i(c, 46, -1, [8882]),
+        i(c, 46, -1, [8834, 8402]),
+        i(c, 46, -1, [8835, 8402]),
+        i(c, 46, -1, [55349, 56679]),
+        i(c, 46, -1, [8733]),
+        i(c, 46, -1, [8883]),
+        i(c, 46, -1, [55349, 56523]),
+        i(c, 46, -1, [10955, 65024]),
+        i(c, 46, -1, [8842, 65024]),
+        i(c, 46, -1, [10956, 65024]),
+        i(c, 46, -1, [8843, 65024]),
+        i(c, 46, -1, [10650]),
+        i(c, 46, -1, [373]),
+        i(c, 46, -1, [10847]),
+        i(c, 46, -1, [8743]),
+        i(c, 46, -1, [8793]),
+        i(c, 46, -1, [8472]),
+        i(c, 46, -1, [55349, 56628]),
+        i(c, 46, -1, [55349, 56680]),
+        i(c, 46, -1, [8472]),
+        i(c, 46, -1, [8768]),
+        i(c, 46, -1, [8768]),
+        i(c, 46, -1, [55349, 56524]),
+        i(c, 46, -1, [8898]),
+        i(c, 46, -1, [9711]),
+        i(c, 46, -1, [8899]),
+        i(c, 46, -1, [9661]),
+        i(c, 46, -1, [55349, 56629]),
+        i(c, 46, -1, [10234]),
+        i(c, 46, -1, [10231]),
+        i(c, 46, -1, [958]),
+        i(c, 46, -1, [10232]),
+        i(c, 46, -1, [10229]),
+        i(c, 46, -1, [10236]),
+        i(c, 46, -1, [8955]),
+        i(c, 46, -1, [10752]),
+        i(c, 46, -1, [55349, 56681]),
+        i(c, 46, -1, [10753]),
+        i(c, 46, -1, [10754]),
+        i(c, 46, -1, [10233]),
+        i(c, 46, -1, [10230]),
+        i(c, 46, -1, [55349, 56525]),
+        i(c, 46, -1, [10758]),
+        i(c, 46, -1, [10756]),
+        i(c, 46, -1, [9651]),
+        i(c, 46, -1, [8897]),
+        i(c, 46, -1, [8896]),
+        i(c, 46, -1, [253]),
+        i(c, 46, -1, [253]),
+        i(c, 46, -1, [1103]),
+        i(c, 46, -1, [375]),
+        i(c, 46, -1, [1099]),
+        i(c, 46, -1, [165]),
+        i(c, 46, -1, [165]),
+        i(c, 46, -1, [55349, 56630]),
+        i(c, 46, -1, [1111]),
+        i(c, 46, -1, [55349, 56682]),
+        i(c, 46, -1, [55349, 56526]),
+        i(c, 46, -1, [1102]),
+        i(c, 46, -1, [255]),
+        i(c, 46, -1, [255]),
+        i(c, 46, -1, [378]),
+        i(c, 46, -1, [382]),
+        i(c, 46, -1, [1079]),
+        i(c, 46, -1, [380]),
+        i(c, 46, -1, [8488]),
+        i(c, 46, -1, [950]),
+        i(c, 46, -1, [55349, 56631]),
+        i(c, 46, -1, [1078]),
+        i(c, 46, -1, [8669]),
+        i(c, 46, -1, [55349, 56683]),
+        i(c, 46, -1, [55349, 56527]),
+        i(c, 46, -1, [8205]),
+        i(c, 46, -1, [8204])];
+}
+
+function $$$clinit_131(){
+  	$$$clinit_131 = nullMethod;
+	 WINDOWS_1252 = initValues(_3_3C_classLit, 62, 16, [initValues(_3C_classLit, 46, -1, [8364]), initValues(_3C_classLit, 46, -1, [129]), initValues(_3C_classLit, 46, -1, [8218]), initValues(_3C_classLit, 46, -1, [402]), initValues(_3C_classLit, 46, -1, [8222]), initValues(_3C_classLit, 46, -1, [8230]), initValues(_3C_classLit, 46, -1, [8224]), initValues(_3C_classLit, 46, -1, [8225]), initValues(_3C_classLit, 46, -1, [710]), initValues(_3C_classLit, 46, -1, [8240]), initValues(_3C_classLit, 46, -1, [352]), initValues(_3C_classLit, 46, -1, [8249]), initValues(_3C_classLit, 46, -1, [338]), initValues(_3C_classLit, 46, -1, [141]), initValues(_3C_classLit, 46, -1, [381]), initValues(_3C_classLit, 46, -1, [143]), initValues(_3C_classLit, 46, -1, [144]), initValues(_3C_classLit, 46, -1, [8216]), initValues(_3C_classLit, 46, -1, [8217]), initValues(_3C_classLit, 46, -1, [8220]), initValues(_3C_classLit, 46, -1, [8221]), initValues(_3C_classLit, 46, -1, [8226]), initValues(_3C_classLit, 46, -1, [8211]), initValues(_3C_classLit, 46, -1, [8212]), initValues(_3C_classLit, 46, -1, [732]), initValues(_3C_classLit, 46, -1, [8482]), initValues(_3C_classLit, 46, -1, [353]), initValues(_3C_classLit, 46, -1, [8250]), initValues(_3C_classLit, 46, -1, [339]), initValues(_3C_classLit, 46, -1, [157]), initValues(_3C_classLit, 46, -1, [382]), initValues(_3C_classLit, 46, -1, [376])]);
+}
+
+var NAMES, VALUES_0, WINDOWS_1252;
+function $clinit_132(){
+  $clinit_132 = nullMethod;
+  HILO_ACCEL = initValues(_3_3I_classLit, 64, 18, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 12386493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40174181, 0, 0, 0, 0, 60162966, 0, 0, 0, 75367550, 0, 0, 0, 82183396, 0, 0, 0, 0, 0, 115148507, 0, 0, 135989275, 139397199, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28770743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82248935, 0, 0, 0, 0, 0, 115214046, 0, 0, 0, 139528272, 0, 0, 0, 0]), null, initValues(_3I_classLit, 48, -1, [0, 0, 0, 4980811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38470219, 0, 0, 0, 0, 0, 0, 0, 0, 64553944, 0, 0, 0, 0, 0, 0, 0, 92145022, 0, 0, 0, 0, 0, 0, 0, 0, 139593810, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [65536, 0, 0, 0, 0, 0, 0, 0, 13172937, 0, 0, 0, 0, 0, 25297282, 0, 0, 28901816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71500866, 0, 0, 0, 0, 82380008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), null, initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94897574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 2555943, 0, 0, 0, 0, 0, 0, 0, 15532269, 0, 0, 0, 0, 0, 0, 0, 31785444, 34406924, 0, 0, 0, 0, 0, 40895088, 0, 0, 0, 60228503, 0, 0, 0, 0, 0, 0, 0, 82445546, 0, 0, 0, 0, 0, 115279583, 0, 0, 136054812, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40239718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 5046349, 0, 0, 10944679, 0, 13238474, 0, 15597806, 16056565, 0, 20578618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), null, initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95225257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [196610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 8454273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46072511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 2687016, 0, 0, 0, 0, 0, 13304011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31850982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), null, null, initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34472462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95290798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 5111886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34603535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105776718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 8585346, 0, 11075752, 0, 0, 0, 0, 16187638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28508594, 0, 0, 0, 0, 0, 0, 0, 40305255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95421871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), null, null, null, initValues(_3I_classLit, 48, -1, [0, 0, 0, 5177423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), null, null, null, null, null, null, initValues(_3I_classLit, 48, -1, [327684, 1900571, 2949162, 5374032, 8716420, 0, 11206826, 12517566, 13435084, 0, 15663343, 16515320, 19988785, 20644155, 25428355, 27197855, 0, 29163962, 31916519, 34734609, 36045347, 0, 0, 0, 40436328, 40960625, 41615994, 46596800, 54264627, 60556184, 64750554, 68879387, 71763012, 75826303, 77268122, 0, 81462490, 83952875, 92865919, 96142769, 105973327, 110167691, 0, 116917984, 121833283, 132253665, 136251421, 140707923, 0, 0, 144574620, 145361066]), initValues(_3I_classLit, 48, -1, [393222, 0, 0, 0, 0, 0, 11272364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36176423, 38535756, 0, 0, 0, 0, 41681532, 46727880, 0, 60687261, 0, 0, 71828552, 75891846, 0, 0, 0, 84411650, 0, 96404924, 0, 0, 0, 117376761, 121898820, 132319203, 136382496, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [589831, 1966110, 3276846, 5505107, 8978566, 10420383, 11468973, 12583104, 13631694, 15139046, 15794416, 16711933, 20054322, 20840764, 25624965, 27263392, 0, 29360574, 32244200, 34931219, 36373033, 38601293, 39584348, 0, 40567402, 41091698, 42205821, 46858954, 54723389, 60818335, 65143773, 68944924, 71959625, 75957383, 77530268, 80938194, 81593564, 84739337, 92997002, 96863680, 106235474, 110233234, 0, 117704448, 122816325, 132515812, 136579106, 140773476, 142149753, 143001732, 144705695, 145492139]), initValues(_3I_classLit, 48, -1, [0, 0, 3342387, 0, 9044106, 0, 11534512, 0, 13697233, 0, 0, 0, 0, 0, 25690504, 0, 0, 0, 0, 0, 36438572, 38732366, 0, 0, 0, 41157236, 0, 46924492, 54788932, 61080481, 65209315, 0, 72025163, 0, 0, 0, 0, 85132558, 93062540, 96929223, 106563158, 0, 0, 118032133, 123012947, 132581351, 136775717, 140839013, 0, 143067271, 0, 145557677]), initValues(_3I_classLit, 48, -1, [0, 2162719, 3473460, 5636181, 0, 0, 0, 0, 0, 0, 0, 18809088, 20185395, 21299519, 0, 0, 0, 29622721, 0, 0, 0, 39256656, 39649885, 0, 0, 41288309, 42336901, 47448781, 55182149, 61342629, 65274852, 69010461, 72811596, 76219528, 77726880, 0, 0, 86967572, 93128077, 97650120, 106628699, 110560915, 0, 118490890, 123733846, 132646888, 0, 141232230, 142411898, 0, 144836769, 145688750]), initValues(_3I_classLit, 48, -1, [655370, 2228258, 3538998, 5701719, 9109643, 10485920, 11600049, 12648641, 13762770, 15204584, 15859954, 18874656, 20250933, 21365062, 25756041, 27328929, 28574132, 29688261, 32309741, 34996758, 36504109, 39322200, 39715422, 39912033, 40632940, 41353847, 42467975, 47514325, 55247691, 61473705, 65405925, 69272606, 72877144, 76285068, 77857955, 81003732, 81659102, 87164208, 93193614, 97715667, 106759772, 110626456, 114296528, 118687505, 123864929, 132712425, 136906792, 141297772, 142477438, 143132808, 144902307, 145754288]), initValues(_3I_classLit, 48, -1, [786443, 0, 0, 0, 9240716, 0, 11665586, 0, 13893843, 0, 0, 0, 0, 0, 25887114, 0, 0, 0, 0, 0, 36635182, 0, 0, 0, 0, 0, 42599049, 0, 0, 0, 65733607, 0, 73008217, 0, 77989029, 0, 81724639, 87295283, 0, 98305492, 107021918, 0, 0, 0, 0, 0, 137037866, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 3604535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27394466, 0, 29753798, 32571886, 35258903, 0, 0, 0, 0, 0, 0, 0, 0, 55509836, 61604779, 0, 0, 0, 0, 0, 0, 81790176, 87557429, 93259151, 98502109, 107152994, 110888601, 0, 119015188, 124323683, 133498858, 137234476, 0, 0, 143263881, 0, 145819825]), initValues(_3I_classLit, 48, -1, [0, 0, 3866680, 6160472, 0, 10616993, 0, 12714178, 0, 0, 0, 0, 20316470, 0, 0, 27460003, 0, 31261127, 32637426, 35521051, 0, 0, 0, 39977570, 0, 0, 0, 48366294, 56492880, 62391213, 0, 69338146, 73073755, 0, 78316711, 0, 0, 0, 93980048, 98764256, 107218532, 111085213, 114362065, 119736089, 125241194, 133957622, 0, 0, 0, 143329419, 144967844, 145885362]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62456761, 0, 69403683, 73139292, 0, 78382252, 0, 81855713, 87622969, 0, 98829796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48431843, 0, 0, 0, 0, 0, 76416141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [851981, 0, 4063292, 0, 9306254, 0, 0, 0, 0, 0, 0, 19005729, 0, 0, 0, 27525540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42795659, 49152740, 56623967, 62587834, 66061292, 69600292, 73401437, 0, 0, 0, 0, 87950650, 94111131, 99878373, 107546213, 112002720, 0, 119932708, 125306744, 0, 137496623, 141363309, 0, 143460492, 0, 0]), initValues(_3I_classLit, 48, -1, [917518, 0, 0, 0, 9502863, 0, 0, 0, 14155989, 0, 0, 19071267, 0, 0, 26083724, 0, 0, 0, 32702963, 0, 36700720, 0, 0, 0, 0, 0, 43057806, 0, 0, 0, 66520049, 0, 0, 0, 78841005, 81069269, 0, 88147263, 0, 99943925, 107873898, 112068270, 0, 120063783, 125831033, 0, 137693235, 0, 0, 143526030, 0, 0]), initValues(_3I_classLit, 48, -1, [983055, 0, 0, 0, 0, 0, 0, 0, 14483673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37093937, 0, 0, 0, 0, 0, 44565138, 49349359, 0, 0, 66651128, 69665831, 73860193, 0, 79561908, 0, 0, 88606018, 94176669, 0, 0, 0, 0, 120129321, 0, 0, 0, 141494382, 0, 143591567, 0, 0]), initValues(_3I_classLit, 48, -1, [1114128, 2293795, 4587583, 8257631, 9633938, 10813603, 11731123, 12845251, 14680286, 15270121, 15925491, 19661092, 20382007, 24969543, 26149263, 27656613, 28639669, 31392222, 32768500, 35586591, 37225015, 39387737, 39780959, 40043107, 40698477, 41419384, 44696233, 52495090, 57738081, 63439804, 66782202, 69927976, 73925736, 76809359, 79824063, 81134806, 81921250, 89785673, 94307742, 100795894, 107939439, 112330415, 114427602, 120588074, 126158721, 134416381, 137824310, 141559920, 142542975, 143853712, 145033381, 145950899]), initValues(_3I_classLit, 48, -1, [1179666, 0, 0, 0, 9699476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26280336, 0, 0, 0, 0, 0, 38076985, 0, 0, 0, 0, 0, 45220523, 52560674, 0, 0, 67175420, 69993516, 0, 0, 79889603, 0, 0, 89916763, 94373280, 101451267, 108136048, 0, 114493139, 120784689, 126355334, 134481924, 138414136, 141625457, 142608512, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 9896085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33292789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67830786, 0, 0, 0, 80020676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127403913, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [1310739, 2359332, 4653127, 0, 0, 0, 12189876, 0, 0, 0, 0, 0, 0, 0, 26345874, 28246439, 0, 31457760, 0, 35652128, 38142534, 0, 0, 0, 0, 0, 45351603, 52757283, 57869170, 63636425, 67961868, 71304237, 73991273, 0, 0, 0, 0, 90309981, 0, 101910029, 108988019, 114034355, 0, 120850228, 127469465, 135464965, 138741825, 141690994, 142739585, 143984788, 0, 0]), initValues(_3I_classLit, 48, -1, [1441813, 2424869, 4718664, 8388735, 10027160, 10879142, 12255419, 12976325, 14745825, 15401194, 15991028, 19857709, 20447544, 25035134, 26542483, 28377520, 28705206, 31588833, 33358333, 35783201, 38208071, 39453274, 39846496, 40108644, 40764014, 41484921, 45613749, 53216038, 58196852, 63898572, 68158478, 71369793, 74253418, 77005973, 80479430, 81265879, 81986787, 90965347, 94504353, 103679508, 109250176, 114165453, 114558676, 121243445, 127731610, 135727124, 138807366, 142018675, 142805123, 144115862, 145098918, 146016436]), initValues(_3I_classLit, 48, -1, [1572887, 0, 0, 0, 10092698, 0, 12320956, 0, 14811362, 0, 0, 19923248, 0, 25166207, 26739094, 0, 0, 0, 33423870, 0, 38273608, 0, 0, 0, 0, 0, 45744825, 0, 58262393, 64095184, 68355089, 0, 75170926, 0, 80610509, 0, 0, 91817325, 0, 104203823, 109512324, 0, 0, 121636667, 128059294, 0, 139069511, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [1703961, 2490406, 4849737, 0, 10223771, 0, 0, 13107399, 15007971, 15466732, 0, 0, 20513081, 25231745, 26870169, 0, 0, 31654371, 34275839, 0, 38404681, 0, 0, 0, 40829551, 0, 45875899, 53609261, 59900794, 64226259, 68551700, 0, 0, 0, 80807119, 81331417, 0, 91948410, 94700963, 104465975, 109643400, 114230991, 114951893, 121702209, 131663779, 0, 139266123, 0, 0, 144246936, 145295527, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27132315, 0, 0, 0, 0, 0, 0, 39518811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75302012, 0, 0, 0, 0, 92079484, 0, 105383483, 109708938, 0, 0, 0, 0, 0, 0, 0, 0, 144312474, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46006973, 0, 60031891, 64291797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105711177, 0, 0, 0, 0, 131991514, 135923736, 139331662, 0, 0, 144378011, 0, 146147509]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 10354845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68813847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121767746, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60097429, 0, 0, 0, 0, 77137048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), initValues(_3I_classLit, 48, -1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64422870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132122591, 0, 0, 142084216, 0, 0, 0, 0])]);
+}
+
+var HILO_ACCEL;
+function localEqualsBuffer(local, buf, offset, length_0){
+  var i;
+  if (local.length != length_0) {
+    return false;
+  }
+  for (i = 0; i < length_0; ++i) {
+    if (local.charCodeAt(i) != buf[offset + i]) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function lowerCaseLiteralEqualsIgnoreAsciiCaseString(lowerCaseLiteral, string){
+  var c0, c1, i;
+  if (string == null) {
+    return false;
+  }
+  if (lowerCaseLiteral.length != string.length) {
+    return false;
+  }
+  for (i = 0; i < lowerCaseLiteral.length; ++i) {
+    c0 = lowerCaseLiteral.charCodeAt(i);
+    c1 = string.charCodeAt(i);
+    c1 >= 65 && c1 <= 90 && (c1 += 32);
+    if (c0 != c1) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(lowerCaseLiteral, string){
+  var c0, c1, i;
+  if (string == null) {
+    return false;
+  }
+  if (lowerCaseLiteral.length > string.length) {
+    return false;
+  }
+  for (i = 0; i < lowerCaseLiteral.length; ++i) {
+    c0 = lowerCaseLiteral.charCodeAt(i);
+    c1 = string.charCodeAt(i);
+    c1 >= 65 && c1 <= 90 && (c1 += 32);
+    if (c0 != c1) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function $StackNode(this$static, flags, ns, name_0, node, popName, attributes){
+  this$static.flags = flags;
+  this$static.name_0 = name_0;
+  this$static.popName = popName;
+  this$static.ns = ns;
+  this$static.node = node;
+  this$static.attributes = attributes;
+  this$static.refcount = 1;
+  return this$static;
+}
+
+function $StackNode_0(this$static, elementName, node){
+  this$static.flags = elementName.flags;
+  this$static.name_0 = elementName.name_0;
+  this$static.popName = elementName.name_0;
+  this$static.ns = 'http://www.w3.org/1999/xhtml';
+  this$static.node = node;
+  this$static.attributes = null;
+  this$static.refcount = 1;
+  return this$static;
+}
+
+function $StackNode_1(this$static, elementName, node, attributes){
+  this$static.flags = elementName.flags;
+  this$static.name_0 = elementName.name_0;
+  this$static.popName = elementName.name_0;
+  this$static.ns = 'http://www.w3.org/1999/xhtml';
+  this$static.node = node;
+  this$static.attributes = attributes;
+  this$static.refcount = 1;
+  return this$static;
+}
+
+function $StackNode_2(this$static, elementName, node, popName){
+  this$static.flags = elementName.flags;
+  this$static.name_0 = elementName.name_0;
+  this$static.popName = popName;
+  this$static.ns = 'http://www.w3.org/1999/xhtml';
+  this$static.node = node;
+  this$static.attributes = null;
+  this$static.refcount = 1;
+  return this$static;
+}
+
+function $StackNode_3(this$static, elementName, popName, node){
+  this$static.flags = prepareSvgFlags(elementName.flags);
+  this$static.name_0 = elementName.name_0;
+  this$static.popName = popName;
+  this$static.ns = 'http://www.w3.org/2000/svg';
+  this$static.node = node;
+  this$static.attributes = null;
+  this$static.refcount = 1;
+  return this$static;
+}
+
+function $StackNode_4(this$static, elementName, node, popName, markAsIntegrationPoint){
+  this$static.flags = prepareMathFlags(elementName.flags, markAsIntegrationPoint);
+  this$static.name_0 = elementName.name_0;
+  this$static.popName = popName;
+  this$static.ns = 'http://www.w3.org/1998/Math/MathML';
+  this$static.node = node;
+  this$static.attributes = null;
+  this$static.refcount = 1;
+  return this$static;
+}
+
+function getClass_73(){
+  return Lnu_validator_htmlparser_impl_StackNode_2_classLit;
+}
+
+function prepareMathFlags(flags, markAsIntegrationPoint){
+  flags &= -939524097;
+  (flags & 33554432) != 0 && (flags |= 671088640);
+  markAsIntegrationPoint && (flags |= 16777216);
+  return flags;
+}
+
+function prepareSvgFlags(flags){
+  flags &= -939524097;
+  (flags & 67108864) != 0 && (flags |= 687865856);
+  return flags;
+}
+
+function toString_14(){
+  return this.name_0;
+}
+
+function StackNode(){
+}
+
+_ = StackNode.prototype = new Object_0;
+_.getClass$ = getClass_73;
+_.toString$ = toString_14;
+_.typeId$ = 41;
+_.attributes = null;
+_.flags = 0;
+_.name_0 = null;
+_.node = null;
+_.ns = null;
+_.popName = null;
+_.refcount = 1;
+function $UTF16Buffer(this$static, buffer, start, end){
+  this$static.buffer = buffer;
+  this$static.start = start;
+  this$static.end = end;
+  return this$static;
+}
+
+function $adjust(this$static, lastWasCR){
+  lastWasCR && this$static.buffer[this$static.start] == 10 && ++this$static.start;
+}
+
+function getClass_74(){
+  return Lnu_validator_htmlparser_impl_UTF16Buffer_2_classLit;
+}
+
+function UTF16Buffer(){
+}
+
+_ = UTF16Buffer.prototype = new Object_0;
+_.getClass$ = getClass_74;
+_.typeId$ = 42;
+_.buffer = null;
+_.end = 0;
+_.start = 0;
+function $SAXException(this$static, message){
+  $fillInStackTrace();
+  this$static.detailMessage = message;
+  this$static.exception = null;
+  return this$static;
+}
+
+function $getMessage_1(this$static){
+  var message;
+  message = this$static.detailMessage;
+  if (message == null && !!this$static.exception) {
+    return $getMessage_0(this$static.exception);
+  }
+   else {
+    return message;
+  }
+}
+
+function getClass_75(){
+  return Lorg_xml_sax_SAXException_2_classLit;
+}
+
+function getMessage_1(){
+  return $getMessage_1(this);
+}
+
+function toString_15(){
+  if (this.exception) {
+    return $toString(this.exception);
+  }
+   else {
+    return $toString(this);
+  }
+}
+
+function SAXException(){
+}
+
+_ = SAXException.prototype = new Exception;
+_.getClass$ = getClass_75;
+_.getMessage = getMessage_1;
+_.toString$ = toString_15;
+_.typeId$ = 43;
+_.exception = null;
+function $SAXParseException(this$static, message, locator){
+  $fillInStackTrace();
+  this$static.detailMessage = message;
+  this$static.exception = null;
+  if (locator) {
+    $getLineNumber(locator);
+    $getColumnNumber(locator);
+  }
+  return this$static;
+}
+
+function $SAXParseException_0(this$static, message, locator, e){
+  $fillInStackTrace();
+  this$static.detailMessage = message;
+  this$static.exception = e;
+  if (locator) {
+    $getLineNumber(locator);
+    $getColumnNumber(locator);
+  }
+  return this$static;
+}
+
+function getClass_76(){
+  return Lorg_xml_sax_SAXParseException_2_classLit;
+}
+
+function SAXParseException(){
+}
+
+_ = SAXParseException.prototype = new SAXException;
+_.getClass$ = getClass_76;
+_.typeId$ = 44;
+var $entry = entry_0;
+function gwtOnLoad(errFn, modName, modBase){
+  $moduleName = modName;
+  $moduleBase = modBase;
+  if (errFn)
+    try {
+      $entry(init)();
+    }
+     catch (e) {
+      errFn(modName);
+    }
+   else {
+    $entry(init)();
+  }
+}
+
+var I_classLit = createForPrimitive('', 'int'),
+    _3I_classLit = createForArray('', '[I', I_classLit),
+    Ljava_lang_Object_2_classLit = createForClass('java.lang.', 'Object'),
+    Ljava_lang_Throwable_2_classLit = createForClass('java.lang.', 'Throwable'),
+    Ljava_lang_Exception_2_classLit = createForClass('java.lang.', 'Exception'),
+    Ljava_lang_RuntimeException_2_classLit = createForClass('java.lang.', 'RuntimeException'),
+    Lcom_google_gwt_core_client_Scheduler_2_classLit = createForClass('com.google.gwt.core.client.', 'Scheduler'),
+    Lcom_google_gwt_core_client_impl_SchedulerImpl_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'SchedulerImpl'),
+    Lcom_google_gwt_core_client_impl_SchedulerImpl$1_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'SchedulerImpl$1'),
+    Lcom_google_gwt_core_client_impl_SchedulerImpl$2_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'SchedulerImpl$2'),
+    Ljava_lang_StackTraceElement_2_classLit = createForClass('java.lang.', 'StackTraceElement'),
+    _3Ljava_lang_StackTraceElement_2_classLit = createForArray('[Ljava.lang.', 'StackTraceElement;', Ljava_lang_StackTraceElement_2_classLit),
+    Lcom_google_gwt_core_client_impl_StringBufferImpl_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'StringBufferImpl'),
+    Lcom_google_gwt_core_client_impl_StringBufferImplAppend_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'StringBufferImplAppend'),
+    Lcom_google_gwt_core_client_JavaScriptException_2_classLit = createForClass('com.google.gwt.core.client.', 'JavaScriptException'),
+    Lcom_google_gwt_core_client_JavaScriptObject_2_classLit = createForClass('com.google.gwt.core.client.', 'JavaScriptObject$'),
+    Ljava_lang_String_2_classLit = createForClass('java.lang.', 'String'),
+    _3Ljava_lang_String_2_classLit = createForArray('[Ljava.lang.', 'String;', Ljava_lang_String_2_classLit), Ljava_lang_Enum_2_classLit = createForClass('java.lang.', 'Enum'), Lcom_google_gwt_event_shared_GwtEvent_2_classLit = createForClass('com.google.gwt.event.shared.', 'GwtEvent'), Lcom_google_gwt_event_shared_GwtEvent$Type_2_classLit = createForClass('com.google.gwt.event.shared.', 'GwtEvent$Type'), Lcom_google_gwt_event_logical_shared_CloseEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'CloseEvent'), Lcom_google_gwt_event_shared_DefaultHandlerRegistration_2_classLit = createForClass('com.google.gwt.event.shared.', 'DefaultHandlerRegistration'), Lcom_google_gwt_event_shared_HandlerManager_2_classLit = createForClass('com.google.gwt.event.shared.', 'HandlerManager'), Lcom_google_gwt_event_shared_HandlerManager$HandlerRegistry_2_classLit = createForClass('com.google.gwt.event.shared.', 'HandlerManager$HandlerRegistry'), Lcom_google_gwt_event_shared_HandlerManager$1_2_classLit = createForClass('com.google.gwt.event.shared.', 'HandlerManager$1'), D_classLit = createForPrimitive('', 'double'), _3D_classLit = createForArray('', '[D', D_classLit), _3_3D_classLit = createForArray('', '[[D', _3D_classLit), Lcom_google_gwt_user_client_Timer_2_classLit = createForClass('com.google.gwt.user.client.', 'Timer'), Lcom_google_gwt_user_client_Timer$1_2_classLit = createForClass('com.google.gwt.user.client.', 'Timer$1'), Lcom_google_gwt_user_client_Window$ClosingEvent_2_classLit = createForClass('com.google.gwt.user.client.', 'Window$ClosingEvent'), Lcom_google_gwt_user_client_Window$WindowHandlers_2_classLit = createForClass('com.google.gwt.user.client.', 'Window$WindowHandlers'), Ljava_lang_IndexOutOfBoundsException_2_classLit = createForClass('java.lang.', 'IndexOutOfBoundsException'), Ljava_lang_ArrayStoreException_2_classLit = createForClass('java.lang.', 'ArrayStoreException'),
+    C_classLit = createForPrimitive('', 'char'),
+    _3C_classLit = createForArray('', '[C', C_classLit),
+    Ljava_lang_Class_2_classLit = createForClass('java.lang.', 'Class'), Ljava_lang_ClassCastException_2_classLit = createForClass('java.lang.', 'ClassCastException'), Ljava_lang_IllegalArgumentException_2_classLit = createForClass('java.lang.', 'IllegalArgumentException'), Ljava_lang_NullPointerException_2_classLit = createForClass('java.lang.', 'NullPointerException'),
+    Ljava_lang_StringBuffer_2_classLit = createForClass('java.lang.', 'StringBuffer'), Ljava_lang_StringBuilder_2_classLit = createForClass('java.lang.', 'StringBuilder'), Ljava_lang_StringIndexOutOfBoundsException_2_classLit = createForClass('java.lang.', 'StringIndexOutOfBoundsException'), Ljava_lang_UnsupportedOperationException_2_classLit = createForClass('java.lang.', 'UnsupportedOperationException'), _3Ljava_lang_Object_2_classLit = createForArray('[Ljava.lang.', 'Object;', Ljava_lang_Object_2_classLit), Ljava_util_AbstractCollection_2_classLit = createForClass('java.util.', 'AbstractCollection'), Ljava_util_AbstractMap_2_classLit = createForClass('java.util.', 'AbstractMap'), Ljava_util_AbstractHashMap_2_classLit = createForClass('java.util.', 'AbstractHashMap'), Ljava_util_AbstractSet_2_classLit = createForClass('java.util.', 'AbstractSet'), Ljava_util_AbstractHashMap$EntrySet_2_classLit = createForClass('java.util.', 'AbstractHashMap$EntrySet'), Ljava_util_AbstractHashMap$EntrySetIterator_2_classLit = createForClass('java.util.', 'AbstractHashMap$EntrySetIterator'), Ljava_util_AbstractMapEntry_2_classLit = createForClass('java.util.', 'AbstractMapEntry'), Ljava_util_AbstractHashMap$MapEntryNull_2_classLit = createForClass('java.util.', 'AbstractHashMap$MapEntryNull'), Ljava_util_AbstractHashMap$MapEntryString_2_classLit = createForClass('java.util.', 'AbstractHashMap$MapEntryString'), Ljava_util_AbstractList_2_classLit = createForClass('java.util.', 'AbstractList'), Ljava_util_AbstractList$IteratorImpl_2_classLit = createForClass('java.util.', 'AbstractList$IteratorImpl'), Ljava_util_AbstractSequentialList_2_classLit = createForClass('java.util.', 'AbstractSequentialList'), Ljava_util_ArrayList_2_classLit = createForClass('java.util.', 'ArrayList'), Ljava_util_Comparators$1_2_classLit = createForClass('java.util.', 'Comparators$1'), Ljava_util_HashMap_2_classLit = createForClass('java.util.', 'HashMap'), Ljava_util_LinkedList_2_classLit = createForClass('java.util.', 'LinkedList'), Ljava_util_LinkedList$ListIteratorImpl_2_classLit = createForClass('java.util.', 'LinkedList$ListIteratorImpl'), Ljava_util_LinkedList$Node_2_classLit = createForClass('java.util.', 'LinkedList$Node'), Ljava_util_MapEntryImpl_2_classLit = createForClass('java.util.', 'MapEntryImpl'), Ljava_util_NoSuchElementException_2_classLit = createForClass('java.util.', 'NoSuchElementException'),
+    Lnu_validator_htmlparser_common_DoctypeExpectation_2_classLit = createForEnum('nu.validator.htmlparser.common.', 'DoctypeExpectation', values_0), _3Lnu_validator_htmlparser_common_DoctypeExpectation_2_classLit = createForArray('[Lnu.validator.htmlparser.common.', 'DoctypeExpectation;', Lnu_validator_htmlparser_common_DoctypeExpectation_2_classLit), Lnu_validator_htmlparser_common_DocumentMode_2_classLit = createForEnum('nu.validator.htmlparser.common.', 'DocumentMode', values_1), _3Lnu_validator_htmlparser_common_DocumentMode_2_classLit = createForArray('[Lnu.validator.htmlparser.common.', 'DocumentMode;', Lnu_validator_htmlparser_common_DocumentMode_2_classLit), Lnu_validator_htmlparser_common_XmlViolationPolicy_2_classLit = createForEnum('nu.validator.htmlparser.common.', 'XmlViolationPolicy', values_2), _3Lnu_validator_htmlparser_common_XmlViolationPolicy_2_classLit = createForArray('[Lnu.validator.htmlparser.common.', 'XmlViolationPolicy;', Lnu_validator_htmlparser_common_XmlViolationPolicy_2_classLit), Lnu_validator_htmlparser_impl_TreeBuilder_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'TreeBuilder'), Lnu_validator_htmlparser_impl_CoalescingTreeBuilder_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'CoalescingTreeBuilder'), Lnu_validator_htmlparser_gwt_BrowserTreeBuilder_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'BrowserTreeBuilder'), Lnu_validator_htmlparser_gwt_BrowserTreeBuilder$ScriptHolder_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'BrowserTreeBuilder$ScriptHolder'), Lnu_validator_htmlparser_gwt_HtmlParser_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'HtmlParser'), Lnu_validator_htmlparser_gwt_HtmlParser$1_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'HtmlParser$1'), Lnu_validator_htmlparser_gwt_ParseEndListener_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'ParseEndListener'), Z_classLit = createForPrimitive('', 'boolean'), _3Z_classLit = createForArray('', '[Z', Z_classLit), Lnu_validator_htmlparser_impl_AttributeName_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'AttributeName'), _3Lnu_validator_htmlparser_impl_AttributeName_2_classLit = createForArray('[Lnu.validator.htmlparser.impl.', 'AttributeName;', Lnu_validator_htmlparser_impl_AttributeName_2_classLit),
+    Lnu_validator_htmlparser_impl_ElementName_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'ElementName'), _3Lnu_validator_htmlparser_impl_ElementName_2_classLit = createForArray('[Lnu.validator.htmlparser.impl.', 'ElementName;', Lnu_validator_htmlparser_impl_ElementName_2_classLit), Lnu_validator_htmlparser_impl_Tokenizer_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'Tokenizer'), Lnu_validator_htmlparser_impl_ErrorReportingTokenizer_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'ErrorReportingTokenizer'), Lnu_validator_htmlparser_impl_HtmlAttributes_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'HtmlAttributes'), Lnu_validator_htmlparser_impl_LocatorImpl_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'LocatorImpl'), _3_3C_classLit = createForArray('', '[[C', _3C_classLit), _3_3I_classLit = createForArray('', '[[I', _3I_classLit), Lnu_validator_htmlparser_impl_StackNode_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'StackNode'), _3Lnu_validator_htmlparser_impl_StackNode_2_classLit = createForArray('[Lnu.validator.htmlparser.impl.', 'StackNode;', Lnu_validator_htmlparser_impl_StackNode_2_classLit), Lnu_validator_htmlparser_impl_UTF16Buffer_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'UTF16Buffer'), Lorg_xml_sax_SAXException_2_classLit = createForClass('org.xml.sax.', 'SAXException'), Lorg_xml_sax_SAXParseException_2_classLit = createForClass('org.xml.sax.', 'SAXParseException');
+gwtOnLoad();(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.Parser.XMLParser').
+		debug('XMLParser available');
+});
+
+/**
+ * XMLParser
+ */
+exports.XMLParser = XMLParser = {};
+
+XMLParser.parseDocument = function(xmlstring, xmldoc, mimetype){
+    log.debug('parseDocument');
+    var tmpdoc = new Document(new DOMImplementation()),
+		importing,
+        parent,
+        importedNode,
+        tmpNode;
+
+    if(mimetype && mimetype == 'text/xml'){
+        log.debug('mimetype: text/xml');
+        xmldoc.baseURI = 'http://envjs.com/xml';
+        xmlstring = '<?xml version="1.0" encoding="utf-8"?>\n'+
+		'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '+
+		'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n'+
+		'<html xmlns:envjs="http://envjs.com/xml">'+
+			'<head></head>'+
+			'<body>'+
+            '<envjs:xmlp id="envjs_1234567890">'+
+                xmlstring+
+			'</envjs:xmlp>'+
+			'</body>'+
+		'</html>';
+        Envjs.parseXmlDocument(xmlstring, tmpdoc, false, null, null);
+		__Nu5toDomNode__(tmpdoc.getElementById('envjs_1234567890').childNodes, xmldoc, xmldoc);
+    }
+
+    return xmldoc;
+};
+
+
+var __Nu5toDomNode__ = function(nu5, parent, doc){
+    var xnode,
+        domnode,
+        children,
+        target,
+        value,
+        length,
+        element,
+        kind,
+		k;
+    log.debug('converting nu5 node list %s', nu5);
+
+	//for elements and namednodemaps
+    for (k = 0; k < nu5.length; k++) {
+		//for elements and namednodemaps
+        xnode = nu5[k];
+        kind = xnode.nodeType;
+        log.debug('treating node kind %s', kind);
+        switch(kind){
+        case Node.ELEMENT_NODE:
+            // add node
+            log.debug('creating element %s %s', xnode.localName, xnode.namespaceURI);
+            if(xnode.namespaceURI && (xnode.namespaceURI+'') !== ''){
+                log.debug('createElementNS %s %s',xnode.namespaceURI, xnode.localName);
+                domnode = doc.createElementNS(xnode.namespaceURI+'', xnode.localName);
+            }else{
+                domnode = doc.createElement(xnode.tagName);
+            }
+            parent.appendChild(domnode);
+
+            // add attributes
+            __Nu5toDomNode__(xnode.attributes, domnode, doc);
+
+            // add children
+            children = xnode.childNodes;
+            length = children.length;
+            log.debug('recursing? %s', length ? 'yes' : 'no');
+            if (length > 0) {
+                __Nu5toDomNode__(children, domnode, doc);
+            }
+            break;
+
+        case Node.ATTRIBUTE_NODE:
+            log.debug(
+				'setting attribute %s %s %s',
+                xnode.localName, xnode.namespaceURI, xnode.value
+			);
+
+            if(xnode.namespaceURI && xnode.prefix){
+                log.debug("xmlns:%s=%s", xnode.prefix, xnode.namespaceURI);
+                parent.setAttributeNS(
+					xnode.namespaceURI,
+                    xnode.prefix+':'+xnode.localName,
+                    xnode.value);
+            }else if((xnode.name+'').match('xmlns')){
+                if(xnode.localName!=='xmlns'){
+                    parent.setAttributeNS(
+						'http://www.w3.org/2000/xmlns/',
+                        'xmlns:'+xnode.localName,
+                         xnode.value);
+                }
+            }else{
+				log.debug('setting attribute %s', xnode.localName);
+                parent.setAttribute(xnode.localName+'', xnode.value);
+            }
+            break;
+
+        case Node.TEXT_NODE:
+            log.debug('creating text node : %s', xnode);
+            domnode = doc.createTextNode(xnode.nodeValue);
+            parent.appendChild(domnode);
+            break;
+
+        case Node.COMMENT_NODE:
+            log.debug('creating comment node : %s', xnode);
+            value = xnode+'';
+            domnode = doc.createComment(value);
+            parent.appendChild(domnode);
+            break;
+
+        case Node.PROCESSING_INSTRUCTION_NODE:
+            log.debug('creating processing-instruction node : %s', xnode);
+            value = xnode+'';
+            target = value.split(' ')[0].substring(2);
+            value = value.split(' ').splice(1).join(' ').replace('?>','');
+
+            log.debug('creating processing-instruction data : %s', value);
+            domnode = doc.createProcessingInstruction(target, value);
+            parent.appendChild(domnode);
+            break;
+
+        default:
+            log.debug('nu5 DOM ERROR');
+            throw new Error("Assertion failed in xml parser");
+        }
+    }
+};
+
+})(/*Envjs.Parser.XMLParser*/);
+
+
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.Parser.HTMLParser').
+		debug('HTMLParser available');
+});
+
+var __fragmentCache__ = {length:0},
+    __cachable__ = 255;
+
+exports.HTMLParser = HTMLParser = {};
+
+HTMLParser.parseDocument = function(htmlstring, htmldoc){
+    log.info('parseDocument %s', htmlstring.length);
+    htmldoc.parsing = true;
+	var start = Date.now();
+    Envjs.parseHtmlDocument(htmlstring, htmldoc, htmldoc.async, function(){
+		var end = Date.now(),
+			total = (end-start)/1000;
+		log.info("from parse start to after document ready in %s", total);
+	}, null);
+    log.debug('Finished HTMLParser.parseDocument in %s (async? %s)', start - Date.now(), htmldoc.async);
+    return htmldoc;
+};
+HTMLParser.parseFragment = function(htmlstring, element){
+    log.debug('parseFragment')
+    // fragment is allowed to be an element as well
+    var tmpdoc,
+        parent,
+        importedNode,
+        tmpNode,
+        length,
+        i,
+        docstring,
+        start = Date.now();
+    log.debug('parsing fragment: %s (cached %s)', htmlstring.length,  __fragmentCache__.length);
+    if( htmlstring.length > __cachable__ && htmlstring in __fragmentCache__){
+        tmpdoc = __fragmentCache__[htmlstring];
+    }else{
+        log.debug('not cached, parsing html fragment %s', htmlstring.length);
+        tmpdoc = new HTMLDocument(new DOMImplementation());
+        // Need some indicator that this document isn't THE document
+        // to fire off img.src change events and other items.
+        // Otherwise, what happens is the tmpdoc fires and img.src
+        // event, then when it's all imported to the original document
+        // it happens again.
+
+        tmpdoc.fragment = true;
+
+        //preserves leading white space
+        docstring = '<html><head></head><body>'+
+            '<envjs_1234567890 xmlns="envjs_1234567890">'
+                +htmlstring+
+            '</envjs_1234567890>'+
+        '</body></html>';
+        Envjs.parseHtmlDocument(docstring,tmpdoc, false, null,null);
+        if(htmlstring.length > __cachable__ ){
+            tmpdoc.normalizeDocument();
+            __fragmentCache__[htmlstring] = tmpdoc;
+            __fragmentCache__.length += htmlstring.length;
+            tmpdoc.cached = true;
+        }else{
+            tmpdoc.cached = false;
+        }
+    }
+
+    //parent is envjs_1234567890 element
+    parent = tmpdoc.body.childNodes[0];
+    while(element.firstChild != null){
+        //zap the elements children so we can import
+        element.removeChild( element.firstChild );
+    }
+
+    if(tmpdoc.cached){
+        length = parent.childNodes.length;
+        for(i=0;i<length;i++){
+            importedNode = element.importNode( parent.childNodes[i], true );
+            element.appendChild( importedNode );
+        }
+    }else{
+        while(parent.firstChild != null){
+            tmpNode  = parent.removeChild( parent.firstChild );
+            importedNode = element.importNode( tmpNode, true);
+            element.appendChild( importedNode );
+        }
+    }
+
+    log.debug('finished fragment: %s, time: %s', htmlstring.length, start - Date.now());
+    return element;
+};
+
+var __clearFragmentCache__ = function(){
+    __fragmentCache__ = {};
+}
+
+})(/*Envjs.Parser.HTMLParser*/);
+
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.DOM.Document').
+		debug('Document.loadXML available');
+});
+
+/**
+ * @name Document
+ * @w3c:domlevel 2
+ * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
+ */
+__extend__(Document.prototype, {
+    loadXML : function(xmlString) {
+        //console.log('Parser::Document.loadXML');
+        // create Document
+        // populate Document
+        try {
+            // make sure this document object is empty before we try to load ...
+            this.attributes      = new NamedNodeMap(this, this);
+            this._namespaces     = new NamespaceNodeMap(this, this);
+            this._readonly = false;
+
+            XMLParser.parseDocument(xmlString, this);
+
+        } catch (e) {
+            log.error(e);
+        }
+        return this;
+    }
+});
+
+})(/*Envjs.DOM.Document*/);
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.Document').
+		debug('HTMLDocument write module/mixins available');
+});
+
+__extend__(HTMLDocument.prototype, {
+
+    open : function() {
+        //console.log('opening doc for write.');
+        if (! this._writebuffer) {
+            this._writebuffer = [];
+        }
+    },
+    close : function() {
+		var text;
+        //console.log('closing doc.');
+        if (this._writebuffer) {
+			text = this._writebuffer.join('');
+            //HTMLParser.parseDocument(this._writebuffer.join(''), this);
+			Envjs.exchangeHTMLDocument(this, text, this.location);
+            this._writebuffer = null;
+            //console.log('finished writing doc.');
+        }
+    },
+
+    /**
+     * http://dev.w3.org/html5/spec/Overview.html#document.write
+     */
+    write: function(htmlstring) {
+        //console.log('writing doc.');
+        this.open();
+        this._writebuffer.push(htmlstring);
+    },
+
+    /**
+     * http://dev.w3.org/html5/spec/Overview.html#dom-document-writeln
+     */
+    writeln: function(htmlstring) {
+        this.open();
+        this._writebuffer.push(htmlstring + '\n');
+    }
+});
+
+})(/*Envjs.HTML.Document*/);
+
+
+/**
+ * elementPopped is called by the parser in two cases
+ *
+ * - a 'tag' is * complete
+ *      (all children process and end tag, real or implied is * processed)
+ * - a replaceElement happens
+ *      (this happens by making placeholder nodes and then the real one
+ *      is swapped in.
+ *
+ */
+var __elementPopped__;
+
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.Parser').
+		debug('Parser elementPopped available');
+});
+
+__elementPopped__ = function(ns, name, node){
+    log.debug('elementPopped %s %s %s', ns, name, node);
+    var doc = node.ownerDocument,
+        okay,
+        event;
+    switch(doc.parsing){
+        case false:
+            //innerHTML so dont do loading patterns for parsing
+            //console.log('element popped (implies innerHTML) not in parsing mode %s', node.nodeName);
+            break;
+        case true:
+            switch(doc+''){
+                case '[object XMLDocument]':
+                    break;
+                case '[object HTMLDocument]':
+                    switch(node.namespaceURI){
+                        case "http://n.validator.nu/placeholder/":
+                            //console.log('got holder script during parsing %s', node.textContent);
+                            break;
+                        case null:
+                        case "":
+                        case "http://www.w3.org/1999/xhtml":
+                            switch(name.toLowerCase()){
+                                case 'script':
+		                            //console.log('got actual script during parsing %s', node.textContent);
+                                    try{
+                                        okay = Envjs.loadLocalScript(node, null);
+                                        //console.log('loaded script? %s %s', node.src, okay);
+                                        // only fire event if we actually had something to load
+                                        if (node.src && node.src.length > 0){
+                                            event = doc.createEvent('HTMLEvents');
+                                            event.initEvent( okay ? "load" : "error", false, false );
+                                            node.dispatchEvent( event, false );
+                                        }
+                                    }catch(e){
+                                        console.log('error loading html element %s %s %s %e', ns, name, node, e.toString());
+                                    }
+                                    break;
+                                case 'frame':
+                                case 'iframe':
+									//console.log('popped frame');
+                                    node.contentWindow = { };
+                                    node.contentDocument = new HTMLDocument(new DOMImplementation(), node.contentWindow);
+                                    node.contentWindow.document = node.contentDocument;
+                                    try{
+                                        Window;
+                                    }catch(e){
+                                        node.contentDocument.addEventListener('DOMContentLoaded', function(){
+                                            event = node.contentDocument.createEvent('HTMLEvents');
+                                            event.initEvent("load", false, false);
+                                            node.dispatchEvent( event, false );
+                                        });
+                                    }
+                                    try{
+                                        if (node.src && node.src.length > 0){
+                                            //console.log("getting content document for (i)frame from %s", node.src);
+                                            Envjs.loadFrame(node, Envjs.uri(node.src, node.ownerDocument.location+''));
+                                            event = node.contentDocument.createEvent('HTMLEvents');
+                                            event.initEvent("load", false, false);
+                                            node.dispatchEvent( event, false );
+                                        }else{
+                                            //I dont like this being here:
+                                            //TODO: better  mix-in strategy so the try/catch isnt required
+                                            try{
+                                                if(Window){
+                                                    Envjs.loadFrame(node);
+                                                    //console.log('src/html/document.js: triggering frame load');
+                                                    event = node.contentDocument.createEvent('HTMLEvents');
+                                                    event.initEvent("load", false, false);
+                                                    node.dispatchEvent( event, false );
+                                                }
+                                            }catch(e){}
+                                        }
+                                    }catch(e){
+                                        console.log('error loading html element %s %e', node, e.toString());
+                                    }
+                                    /*try{
+                                        if (node.src && node.src.length > 0){
+                                            //console.log("getting content document for (i)frame from %s", node.src);
+                                            Envjs.loadFrame(node, Envjs.uri(node.src));
+                                            event = node.ownerDocument.createEvent('HTMLEvents');
+                                            event.initEvent("load", false, false);
+                                            node.dispatchEvent( event, false );
+                                        }else{
+                                            //console.log('src/parser/htmldocument: triggering frame load (no src)');
+                                        }
+                                    }catch(e){
+                                        console.log('error loading html element %s %s %s %e', ns, name, node, e.toString());
+                                    }*/
+                                    break;
+                                case 'link':
+                                    if (node.href) {
+                                        Envjs.loadLink(node, node.href);
+                                    }
+                                    break;
+                                case 'option':
+                                    Envjs.updateOptions(node);
+                                    break;
+                                case 'img':
+                                    if (node.src){
+                                        Envjs.loadImage(node, node.src);
+                                    }
+                                    break;
+                                case 'html':
+                                    //console.log('html popped');
+                                    doc.parsing = false;
+                                    //DOMContentLoaded event
+                                    try{
+                                        if(doc.createEvent){
+                                            event = doc.createEvent('Events');
+                                            event.initEvent("DOMContentLoaded", false, false);
+                                            doc.dispatchEvent( event, false );
+                                        }
+                                    }catch(e){
+                                        console.log('%s', e);
+                                    }
+                                    try{
+                                        if(doc.createEvent){
+                                            event = doc.createEvent('HTMLEvents');
+                                            event.initEvent("load", false, false);
+                                            doc.dispatchEvent( event, false );
+                                        }
+                                    }catch(e){
+                                        console.log('%s', e);
+                                    }
+
+                                    try{
+                                        if(doc.parentWindow){
+                                            event = doc.createEvent('HTMLEvents');
+                                            event.initEvent("load", false, false);
+                                            doc.parentWindow.dispatchEvent( event, false );
+                                        }
+                                    }catch(e){
+                                        console.log('%s', e);
+                                    }
+                                    try{
+                                        if(doc === window.document){
+                                            //console.log('triggering window.load')
+                                            event = doc.createEvent('HTMLEvents');
+                                            event.initEvent("load", false, false);
+                                            try{
+                                                window.dispatchEvent( event, false );
+                                            }catch(e){
+                                                console.log('%s', e);
+                                            }
+                                        }
+                                    }catch(e){
+                                        //console.log('%s', e);
+                                        //swallow
+                                    }
+                                default:
+                                    if(node.getAttribute('onload')){
+                                        //console.log('%s onload', node);
+                                        node.onload();
+                                    }
+                                    break;
+                            }//switch on name
+                        default:
+                            break;
+                    }//switch on ns
+                    break;
+                default:
+                    console.log('element popped: %s %s', ns, name, node.ownerDocument+'');
+            }//switch on doc type
+        default:
+            break;
+    }//switch on parsing
+};
+
+})(/*Envjs.Parser*/);
+
+
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.HTML.HTMLElement').
+        debug('HTMLElement set innerHTML mixin available');
+});
+
+__extend__(HTMLElement.prototype,{
+    set innerHTML(html){
+        HTMLParser.parseFragment(html, this);
+    }
+});
+
+})(/*Envjs.HTML.HTMLElement*/);
+
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/platform/core.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/platform/core.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/platform/core.js	(revision 76)
@@ -0,0 +1,3041 @@
+/*
+ * Envjs core-env.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+Envjs = exports.Envjs = function(){
+    var i,
+        override = function(){
+            for(i=0;i<arguments.length;i++){
+                for ( var name in arguments[i] ) {
+					if(arguments[i].hasOwnProperty(name)){
+                        var g = arguments[i].__lookupGetter__(name),
+                            s = arguments[i].__lookupSetter__(name);
+                        if ( g || s ) {
+                            if ( g ) { Envjs.__defineGetter__(name, g); }
+                            if ( s ) { Envjs.__defineSetter__(name, s); }
+                        } else {
+                            Envjs[name] = arguments[i][name];
+                        }
+					}
+                }
+            }
+        };
+
+    if(arguments.length === 1 && typeof(arguments[0]) == 'string'){
+        window.location = arguments[0];
+    }else if (arguments.length === 1 && typeof(arguments[0]) == "object"){
+        override(arguments[0]);
+    }else if(arguments.length === 2 && typeof(arguments[0]) == 'string'){
+        override(arguments[1]);
+        window.location = arguments[0];
+    }
+    return;
+};
+
+var log = {
+    debug: function(){return this;},
+    info: function(){return this;},
+    warn: function(){return this;},
+    error: function(){return this;},
+    exception: function(){return this;}
+};
+
+if (typeof console == "undefined") {
+	console = require('./console').console;
+}
+
+//eg "Mozilla"
+Envjs.appCodeName  = "Envjs";
+
+//eg "Gecko/20070309 Firefox/2.0.0.3"
+Envjs.appName      = "Netscape";
+
+Envjs.version = "1.618";//
+Envjs.revision = '';
+
+Envjs.exit = function(){};
+
+
+
+/*
+ * Envjs core-env.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    }
+    return a;
+}
+
+/**
+ * @author ariel flesler
+ *    http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html
+ * @param {Object} str
+ */
+function __trim__( str ){
+    return (str || "").replace( /^\s+|\s+$/g, "" );
+}
+
+/**
+ * Borrowed with love from:
+ *
+ * jQuery AOP - jQuery plugin to add features of aspect-oriented programming (AOP) to jQuery.
+ * http://jquery-aop.googlecode.com/
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Version: 1.1
+ */
+
+(function(){
+
+	var _after	= 1;
+	var _before	= 2;
+	var _around	= 3;
+	var _intro  = 4;
+	var _regexEnabled = true;
+
+	/**
+	 * Private weaving function.
+	 */
+	var weaveOne = function(source, method, advice) {
+
+		var old = source[method];
+
+		var aspect;
+		if (advice.type == _after){
+			aspect = function() {
+				var returnValue = old.apply(this, arguments);
+				return advice.value.apply(this, [returnValue, method]);
+			};
+		}else if (advice.type == _before){
+			aspect = function() {
+				advice.value.apply(this, [arguments, method]);
+				return old.apply(this, arguments);
+			};
+		}else if (advice.type == _intro){
+			aspect = function() {
+				return advice.value.apply(this, arguments);
+			};
+		}else if (advice.type == _around) {
+			aspect = function() {
+				var invocation = { object: this, args: arguments };
+				return advice.value.apply(invocation.object, [{ 'arguments': invocation.args, method: method, proceed :
+					function() {
+						return old.apply(invocation.object, invocation.args);
+					}
+				}] );
+			};
+		}
+
+		aspect.unweave = function() {
+			source[method] = old;
+			source = aspect = old = null;
+		};
+
+		source[method] = aspect;
+
+		return aspect;
+
+	};
+
+
+	/**
+	 * Private weaver and pointcut parser.
+	 */
+	var weave = function(pointcut, advice)
+	{
+
+		var source = (typeof(pointcut.target.prototype) != 'undefined') ? pointcut.target.prototype : pointcut.target;
+		var advices = [];
+
+		// If it's not an introduction and no method was found, try with regex...
+		if (advice.type != _intro && typeof(source[pointcut.method]) == 'undefined')
+		{
+
+			for (var method in source)
+			{
+				if (source[method] && source[method] instanceof Function && method.match(pointcut.method))
+				{
+					advices[advices.length] = weaveOne(source, method, advice);
+				}
+			}
+
+			if (advices.length === 0){
+				throw 'No method: ' + pointcut.method;
+			}
+
+		}
+		else
+		{
+			// Return as an array of one element
+			advices[0] = weaveOne(source, pointcut.method, advice);
+		}
+
+		return _regexEnabled ? advices : advices[0];
+
+	};
+
+	exports.Aspect = Aspect =
+	{
+		/**
+		 * Creates an advice after the defined point-cut. The advice will be executed after the point-cut method
+		 * has completed execution successfully, and will receive one parameter with the result of the execution.
+		 * This function returns an array of weaved aspects (Function).
+		 *
+		 * @example jQuery.aop.after( {target: window, method: 'MyGlobalMethod'}, function(result) { alert('Returned: ' + result); } );
+		 * @result Array<Function>
+		 *
+		 * @example jQuery.aop.after( {target: String, method: 'indexOf'}, function(index) { alert('Result found at: ' + index + ' on:' + this); } );
+		 * @result Array<Function>
+		 *
+		 * @name after
+		 * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
+		 * @option Object target Target object to be weaved.
+		 * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
+		 * @param Function advice Function containing the code that will get called after the execution of the point-cut. It receives one parameter
+		 *                        with the result of the point-cut's execution.
+		 *
+		 * @type Array<Function>
+		 * @cat Plugins/General
+		 */
+		after : function(pointcut, advice)
+		{
+			return weave( pointcut, { type: _after, value: advice } );
+		},
+
+		/**
+		 * Creates an advice before the defined point-cut. The advice will be executed before the point-cut method
+		 * but cannot modify the behavior of the method, or prevent its execution.
+		 * This function returns an array of weaved aspects (Function).
+		 *
+		 * @example jQuery.aop.before( {target: window, method: 'MyGlobalMethod'}, function() { alert('About to execute MyGlobalMethod'); } );
+		 * @result Array<Function>
+		 *
+		 * @example jQuery.aop.before( {target: String, method: 'indexOf'}, function(index) { alert('About to execute String.indexOf on: ' + this); } );
+		 * @result Array<Function>
+		 *
+		 * @name before
+		 * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
+		 * @option Object target Target object to be weaved.
+		 * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
+		 * @param Function advice Function containing the code that will get called before the execution of the point-cut.
+		 *
+		 * @type Array<Function>
+		 * @cat Plugins/General
+		 */
+		before : function(pointcut, advice)
+		{
+			return weave( pointcut, { type: _before, value: advice } );
+		},
+
+
+		/**
+		 * Creates an advice 'around' the defined point-cut. This type of advice can control the point-cut method execution by calling
+		 * the functions '.proceed()' on the 'invocation' object, and also, can modify the arguments collection before sending them to the function call.
+		 * This function returns an array of weaved aspects (Function).
+		 *
+		 * @example jQuery.aop.around( {target: window, method: 'MyGlobalMethod'}, function(invocation) {
+		 *                alert('# of Arguments: ' + invocation.arguments.length);
+		 *                return invocation.proceed();
+		 *          } );
+		 * @result Array<Function>
+		 *
+		 * @example jQuery.aop.around( {target: String, method: 'indexOf'}, function(invocation) {
+		 *                alert('Searching: ' + invocation.arguments[0] + ' on: ' + this);
+		 *                return invocation.proceed();
+		 *          } );
+		 * @result Array<Function>
+		 *
+		 * @example jQuery.aop.around( {target: window, method: /Get(\d+)/}, function(invocation) {
+		 *                alert('Executing ' + invocation.method);
+		 *                return invocation.proceed();
+		 *          } );
+		 * @desc Matches all global methods starting with 'Get' and followed by a number.
+		 * @result Array<Function>
+		 *
+		 *
+		 * @name around
+		 * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
+		 * @option Object target Target object to be weaved.
+		 * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
+		 * @param Function advice Function containing the code that will get called around the execution of the point-cut. This advice will be called with one
+		 *                        argument containing one function '.proceed()', the collection of arguments '.arguments', and the matched method name '.method'.
+		 *
+		 * @type Array<Function>
+		 * @cat Plugins/General
+		 */
+		around : function(pointcut, advice)
+		{
+			return weave( pointcut, { type: _around, value: advice } );
+		},
+
+		/**
+		 * Creates an introduction on the defined point-cut. This type of advice replaces any existing methods with the same
+		 * name. To restore them, just unweave it.
+		 * This function returns an array with only one weaved aspect (Function).
+		 *
+		 * @example jQuery.aop.introduction( {target: window, method: 'MyGlobalMethod'}, function(result) { alert('Returned: ' + result); } );
+		 * @result Array<Function>
+		 *
+		 * @example jQuery.aop.introduction( {target: String, method: 'log'}, function() { alert('Console: ' + this); } );
+		 * @result Array<Function>
+		 *
+		 * @name introduction
+		 * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
+		 * @option Object target Target object to be weaved.
+		 * @option String method Name of the function to be weaved.
+		 * @param Function advice Function containing the code that will be executed on the point-cut.
+		 *
+		 * @type Array<Function>
+		 * @cat Plugins/General
+		 */
+		introduction : function(pointcut, advice)
+		{
+			return weave( pointcut, { type: _intro, value: advice } );
+		},
+
+		/**
+		 * Configures global options.
+		 *
+		 * @name setup
+		 * @param Map settings Configuration options.
+		 * @option Boolean regexMatch Enables/disables regex matching of method names.
+		 *
+		 * @example jQuery.aop.setup( { regexMatch: false } );
+		 * @desc Disable regex matching.
+		 *
+		 * @type Void
+		 * @cat Plugins/General
+		 */
+		setup: function(settings)
+		{
+			_regexEnabled = settings.regexMatch;
+		}
+	};
+
+}(/*Aspect*/));
+
+
+
+
+(function(){
+
+Envjs.Configuration = {
+    /** Please see each module for specific configuration options */
+    //this is a short list of well knowns, but can always be extended
+    logging:[
+        {category:'Envjs.Core',                 level:'WARN'},
+        {category:'Envjs.Core.REPL',            level:'WARN'},
+        {category:'Envjs.DOM',                  level:'WARN'},
+        {category:'Envjs.DOM.Node',             level:'WARN'},
+        {category:'Envjs.DOM.NodeList',         level:'WARN'},
+        {category:'Envjs.DOM.NamedNodeMap',     level:'WARN'},
+        {category:'Envjs.DOM.Element',          level:'WARN'},
+        {category:'Envjs.DOM.Document',         level:'WARN'},
+        {category:'Envjs.DOM.EventTarget',      level:'WARN'},
+        {category:'Envjs.Timer',                level:'WARN'},
+        {category:'Envjs.Location',             level:'WARN'},
+        {category:'Envjs.XMLHttpRequest',       level:'WARN'},
+        {category:'Envjs.Parser',               level:'WARN'},
+        {category:'Envjs.Parser.HTMLParser',    level:'WARN'},
+        {category:'Envjs.Parser.XMLParser',     level:'WARN'},
+        {category:'Envjs.HTML.FrameElement',    level:'WARN'},
+        {category:'Envjs.Window',               level:'WARN'},
+        {category:'Envjs.Platform',             level:'WARN'},
+        {category:'root',                       level:'WARN'}
+    ],
+    env : {
+        dev:{},
+        prod:{},
+        test:{}
+    }
+};
+
+Envjs.config = function(){
+    var config, subconfig;
+    if(arguments.length === 0){
+        return Envjs.Configuration;
+    }else if(arguments.length === 1 && typeof(arguments[0]) == "string"){
+        return Envjs.Configuration[arguments[0]];
+    }else{
+        Envjs.Configuration[arguments[0]] =  arguments[1];
+    }
+    return this;//chain
+};
+
+
+var $guid = 0;
+Envjs.guid = function(){
+    return ++$guid;
+};
+
+}(/*Envjs.Configuration*/));
+
+
+/**
+ * Writes message to system out
+ * @param {String} message
+ */
+Envjs.log = function(message){};
+
+/**
+ * Prints stack trace of current execution point
+ */
+Envjs.trace = function(){};
+
+/**
+ * Writes error info out to console
+ * @param {Error} e
+ */
+Envjs.lineSource = function(e){};
+
+/**
+ * Provides prompt to system stdout
+ * @param {Error} e
+ */
+Envjs.prompt = function(e){};
+
+/**
+ * Reads line from system stdin
+ * @param {Error} e
+ */
+Envjs.readConsole = function(e){};
+
+/**
+ * Starts a read-eval-print-loop
+ */
+Envjs.repl = function(){
+    var line,
+        waiting,
+		$_ = null;
+    var log = Envjs.logger('Envjs.Core.REPL');
+    Envjs.on('tick', function(){
+        log.debug('tick for REPL');
+        if(!waiting){
+            log.debug('not waiting in REPL');
+            waiting = true;
+            Envjs.prompt();
+            log.debug('waiting for line in');
+            Envjs.spawn(function(){
+                log.info('async waiting for line in');
+                line = Envjs.readConsole();
+                if(line === "quit" || line === "exit") {
+                    log.info('%sting', line);
+                    Envjs.emit('exit', 'repl');
+                }else{
+                    setTimeout(function(){
+                        try{
+                            if(line){
+                                log.info('evaluating console line in: %s', line);
+                                $_ = Envjs['eval'](__this__, line);
+                                if($_!==undefined){
+                                    log.info('result of evaluation: %s', $_);
+                                    Envjs.log( $_ );
+                                }
+                             }else{
+                                log.info('not evaluating console line in: %s', line);
+                             }
+                        }catch(e) {
+                            Envjs.log('[Envjs.REPL Error] ' + e);
+                        }finally{
+                            waiting = false;
+                        }
+                    },1);
+                }
+            });
+        }else{
+            log.debug('waiting in REPL');
+        }
+    });
+};
+
+Envjs.CURSOR = "envjs>";
+
+
+
+Envjs.Logging = {};
+
+
+/**
+ * Descibe this class
+ * @author
+ * @version $Rev$
+ * @requires OtherClassName
+ */
+(function($$Log){
+
+    var loggerFactory = null;
+
+    Envjs.logging = function(config){
+        return Envjs.config('logging', config);
+    };
+
+    Envjs.logger = function(category){
+        if(!category){
+            return new $$Log.NullLogger();
+        }
+        if(!$$Log.loggerFactory){
+            $$Log.loggerFactory = new $$Log.Factory();
+        }
+        if($$Log.updated){
+            $$Log.loggerFactory.updateConfig();
+            $$Log.updated = false;
+        }
+        return $$Log.loggerFactory.create(category);
+    };
+
+    $$Log.Level = {
+        DEBUG:0,
+        INFO:1,
+        WARN:2,
+        ERROR:3,
+        NONE:4
+    };
+
+    $$Log.NullLogger = function(){
+        //for speed why bother implement the interface, just null the functions
+        var nullFunction = function(){
+            return this;
+        };
+        __extend__(this,  {
+            debug:nullFunction,
+            info:nullFunction,
+            warn:nullFunction,
+            error:nullFunction,
+            exception:nullFunction
+        });
+    };
+    //leaked globally intentionally
+    log = new $$Log.NullLogger();
+
+
+    $$Log.Logger = function(options){
+        this.category   = "root";
+        this.level      = null;
+        __extend__(this, options);
+        try{
+            this.level = $$Log.Level[
+                this.level?this.level:"NONE"
+            ];
+            this.appender = new $$Log.ConsoleAppender(options);
+            return this;
+        }catch(e){
+            return new $$Log.NullLogger();
+        }
+    };
+
+
+
+    //All logging calls are chainable
+    __extend__($$Log.Logger.prototype, {
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        debug: function(){
+            if(this.level<=$$Log.Level.DEBUG){
+              this.appender.append("DEBUG",this.category,arguments);
+              return this;
+            }else{
+                this.debug = function(){
+                    return this;
+                };
+            }
+            return this;
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        info: function(){
+            if(this.level<=$$Log.Level.INFO){
+              this.appender.append("INFO",this.category,arguments);
+              return this;
+            }else{
+                this.info = function(){
+                    return this;
+                };
+            }
+            return this;
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        warn: function(){
+            if(this.level<=$$Log.Level.WARN){
+              this.appender.append("WARN",this.category,arguments);
+              return this;
+            }else{ this.warn = function(){return this;}; }
+            return this;
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        error: function(){
+            if(this.level<=$$Log.Level.ERROR){
+              this.appender.append("ERROR",this.category,arguments);
+              return this;
+            }else{ this.error = function(){return this;}; }
+            return this;
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        exception: function(e){
+            if(this.level < $$Log.Level.NONE){
+                if(e){
+                    this.appender.append("EXCEPTION", this.category,e);
+                    return this;
+                }
+            }else{
+                this.exception = function(){
+                    return this;
+                };
+            }
+            return this;
+        }
+    });
+
+    /**
+     * @constructor
+     */
+    $$Log.ConsoleAppender = function(options){
+        __extend__(this,options);
+        try{
+            this.formatter = new $$Log.FireBugFormatter(options);
+            return this;
+        }catch(e){
+            //Since the console and print arent available use a null implementation.
+            throw e;
+        }
+        return this;
+    };
+
+    __extend__( $$Log.ConsoleAppender.prototype, {
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        append: function(level, category, message){
+            switch(level){
+                case ("DEBUG"):
+                    console.log.apply(console, this.formatter.format(level, category, message));
+                    break;
+                case ("INFO"):
+                    console.info.apply(console, this.formatter.format(level, category, message));
+                    break;
+                case ("WARN"):
+                    console.warn.apply(console, this.formatter.format(level, category, message));
+                    break;
+                case ("ERROR"):
+                    console.error.apply(console,this.formatter.format(level, category, message));
+                    break;
+                case ("EXCEPTION"):
+                    //message is e
+                    console.error.apply(console, this.formatter.format(level, category,
+                        message.message?[message.message]:[]));
+                    console.trace();
+                    break;
+            }
+        }
+    });
+
+    $$Log.FireBugFormatter = function(options){
+        __extend__(this, options);
+    };
+
+    __extend__($$Log.FireBugFormatter.prototype, {
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        getDateString: function(){
+            return " ["+ new Date().toUTCString() +"] ";
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        format: function(level, category, objects){
+            var msgPrefix = category + " "+level+": "+ this.getDateString();
+            objects = (objects&&objects.length&&(objects.length>0))?objects:[];
+            var msgFormat = (objects.length > 0)?objects[0]:null;
+            if (typeof(msgFormat) != "string"){
+                objects.unshift(msgPrefix);
+            }else{
+                objects[0] = msgPrefix + msgFormat;
+            }
+            return objects;
+        }
+    });
+
+    $$Log.Factory = function(options){
+        __extend__(this,options);
+        this.configurationId = 'logging';
+        //The LogFactory is unique in that it will create its own logger
+        //so that it's events can be logged to console or screen in a
+        //standard way.
+        this.logger = new $$Log.Logger({
+            category:"Envjs.Logging.Factory",
+            level:"INFO",
+            appender:"Envjs.Logging.ConsoleAppender"
+        });
+        this.attemptedConfigure = false;
+        this.clear();
+        this.updateConfig();
+    };
+
+    __extend__($$Log.Factory.prototype,  {
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        clear: function(){
+            this.logger.debug("Clearing Cache.");
+            this.cache = null;
+            this.cache = {};
+            this.size = 0;
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        add: function(id, object){
+            this.logger.debug("Adding To Cache: %s", id);
+            if ( !this.cache[id] ){
+                this.cache[id] = object;
+                this.size++;
+                return id;
+            }
+            return null;
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        remove: function(id){
+            this.logger.debug("Removing From Cache id: %s", id);
+            if(this.find(id)){
+                return (delete this.cache[id])?--this.size:-1;
+            }return null;
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        find: function(id){
+            this.logger.debug("Searching Cache for id: %s", id);
+            return this.cache[id] || null;
+        },
+
+        /**
+         * returns the portion configuration specified by 'configurationId'
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        getConfig: function(){
+            if( !this.configuration ){
+                //First look for an object name Envjs.Configuration
+                this.logger.debug( "Configuration for <%s> has not been set explicitly or has been updated implicitly.",  this.configurationId );
+                try{
+                    if(Envjs.Configuration[this.configurationId]){
+                        this.logger.debug("Found Envjs.Configuration");
+                        this.configuration = Envjs.Configuration[this.configurationId];
+                    }
+                }catch(e){
+                    this.logger.exception(e);
+                    throw new Error('Logging Configuration Error');
+                }
+            }
+            return this.configuration;
+        },
+        /**
+         * Describe what this method does
+         * @private
+         * @param {String} paramName Describe this parameter
+         * @returns Describe what it returns
+         * @type String
+         */
+        setConfig: function(id, configuration){
+            this.logger.debug("Setting configuration");
+            this.configuration = configuration;
+            Envjs.Configuration[id] = configuration;
+        },
+       /**
+        * Describe what this method does
+        * @private
+        * @param {String} paramName Describe this parameter
+        * @returns Describe what it returns
+        * @type String
+        */
+       create: function(category){
+           var categoryParts,
+               subcategory,
+               loggerConf,
+               rootLoggerConf,
+               i;
+           if(!this.configuration){
+               //Only warn about lack of configuration once
+               if(!this.attemptedConfigure){
+                   this.logger.warn("Claypool Logging was not initalized correctly. Logging will not occur unless initialized.");
+               }
+               this.attemptedConfigure = true;
+               return new $$Log.NullLogger();
+           }else{
+               //Find the closest configured category
+               categoryParts = category.split(".");
+               for(i=0;i<categoryParts.length;i++){
+                   subcategory = categoryParts.slice(0,categoryParts.length-i).join(".");
+                   loggerConf = this.find(subcategory);
+                   if(loggerConf !== null){
+                       //The level is set by the closest subcategory, but we still want the
+                       //full category to display when we log the messages
+                       loggerConf.category = category;
+                       //TODO: we need to use the formatter/appender specified in the config
+                       return new $$Log.Logger( loggerConf );
+                   }
+               }
+               //try the special 'root' category
+               rootLoggerConf = this.find('root');
+               this.logger.debug('root logging category is set to %s', rootLoggerConf);
+               if(rootLoggerConf !== null){
+                   //The level is set by the closest subcategory, but we still want the
+                   //full category to display when we log the messages
+                   rootLoggerConf.category = category;
+                   return new $$Log.Logger(rootLoggerConf);
+               }
+           }
+           //No matching category found
+           this.logger.warn("No Matching category: %s Please configure a root logger.", category);
+           return new $$Log.NullLogger();
+       },
+       /**
+        * Describe what this method does
+        * @private
+        * @param {String} paramName Describe this parameter
+        * @returns Describe what it returns
+        * @type String
+        */
+       updateConfig: function(){
+           var loggingConfiguration;
+           var logconf;
+           var i;
+           try{
+               this.logger.debug("Configuring Logging");
+               this.clear();
+               loggingConfiguration = this.getConfig()||[];
+               for(i=0;i<loggingConfiguration.length;i++){
+                   try{
+                       logconf = loggingConfiguration[i];
+                       this.add( logconf.category, logconf );
+                   }catch(ee){
+                       this.logger.exception(ee);
+                       return false;
+                   }
+               }
+           }catch(e){
+               this.logger.exception(e);
+               throw new Error('Logging configuration error');
+           }
+           return true;
+        }
+    });
+
+
+    Envjs.logging = function(){
+        if(arguments.length === 0){
+            return Envjs.config('logging');
+        }else{
+            Envjs.Logging.updated = true;
+            return Envjs.config('logging', arguments[0]);
+        }
+    };
+
+}( Envjs.Logging ));
+
+
+(function(){
+/**
+ *  The main event loop is unrelated to html/dom events
+ */
+var log;
+
+var eventListeners = {
+        newListener:[],
+        tick:[],
+        exit:[]
+    },
+    eventQueue = [];
+
+Envjs.eventLoop = Envjs.eventLoop || function(){
+    log = log||Envjs.logger('Envjs.Core');
+    while(true) {
+        Envjs.tick();
+    }
+};
+
+Envjs.on = function(event, callback){
+    if(!(event in eventListeners)){
+        eventListeners[event] = [];
+    }
+    eventListeners[event].push(callback);
+};
+
+Envjs.once = function(event, callback){
+    var once = function(){
+        Envjs.removeListener(event, once);
+        callback.apply(callback, arguments);
+    };
+    Envjs.on(event, once);
+};
+
+Envjs.removeListener = function(event, callback){
+    if(!(event in eventListeners)){
+        return;
+    }
+    var index = eventListeners[event].indexOf(callback);
+    if(index > -1){
+        eventListeners[event].splice(index, 1);
+    }
+};
+
+Envjs.removeAllListeners = function(event){
+    eventListeners[event] = [];
+};
+
+Envjs.listeners = function(event){
+    return (event in eventListeners) ?
+        eventListeners[event] : [];
+};
+
+Envjs.emit = function(event /*, arg1, arg2, etc*/ ){
+    eventQueue.push({event:event, args:arguments});
+};
+
+var $warming = 10;
+
+Envjs.tick = function(){
+    var y, next, fn, arg, file;
+    log = log||Envjs.logger('Envjs.Core');
+
+    log.debug('go through %s events', eventQueue.length);
+    next = eventQueue.shift();
+    while( next ){
+
+        log.debug('next event %s', next.event);
+        if(next.event in eventListeners){
+
+            if('exit' === next.event){
+                log.info('exiting');
+                Envjs.exit();
+            }
+            for(y = 0; y < eventListeners[next.event].length; y++){
+                log.debug('event %s %s', y, next.event);
+                fn = eventListeners[next.event][y];
+                fn.apply(fn, next.args);
+            }
+        }
+        next = eventQueue.shift();
+    }
+    if(!$warming && Envjs.argv && Envjs.argv.length){
+
+        log.debug('parsing args %s',  Envjs.argv);
+        arg = Envjs.argv.shift();
+        if(arg && typeof(arg) == 'string'){
+            file = arg;
+            log.debug('will load file %s next', file);
+            setTimeout(function(){
+                log.debug('loading script %s', file);
+                Envjs['eval'](__this__, Envjs.readFromFile(file), file, !$warming);
+            },1);
+        }
+
+    }else if($warming === 0 && Envjs.argv.length === 0){
+        $warming = false;
+        //prevents repl from being opened twice
+        //Envjs.repl();
+    }else if($warming){
+        log.debug('warming');
+        $warming--;
+    }
+
+    if($warming === false && !eventQueue.length && !Envjs.connections.length && !Envjs.timers.length ){
+        log.debug('ready to exit warming %s eventQueue %s connections %s timers %s',
+            $warming,
+            eventQueue.length,
+            Envjs.connections.length,
+            Envjs.timers.length
+        );
+        log.info('event loop is passive, exiting');
+        Envjs.emit('exit');
+    }
+
+    Envjs.emit('tick', Date.now());
+    Envjs.sleep(4);
+};
+
+
+/**
+ * Used in ./event/eventtarget.js  These are DOM related events
+ * @param {Object} event
+ */
+Envjs.defaultEventBehaviors = {
+    'submit': function(event) {
+        var target = event.target,
+            serialized,
+            method,
+            action;
+        while (target && target.nodeName !== 'FORM') {
+            target = target.parentNode;
+        }
+        if (target && target.nodeName === 'FORM') {
+            serialized = Envjs.serializeForm(target);
+            //console.log('serialized %s', serialized);
+            method = target.method?target.method.toUpperCase():"GET";
+
+            action = Envjs.uri(
+                target.action !== ""?target.action:target.ownerDocument.baseURI,
+                target.ownerDocument.baseURI
+            );
+            if(method=='GET' && !action.match(/^file:/)){
+                action = action + "?" + serialized;
+            }
+            //console.log('replacing document with form submission %s', action);
+            target.ownerDocument.location.replace(
+                action, method, serialized
+            );
+        }
+    },
+
+    'click': function(event) {
+        //console.log("handling default behavior for click %s", event.target);
+        var target = event.target,
+            url,
+            form,
+            inputs;
+        while (target && target.nodeName !== 'A' && target.nodeName !== 'INPUT') {
+            target = target.parentNode;
+        }
+        if (target && target.nodeName === 'A') {
+            //console.log('target is a link');
+            if(target.href && !target.href.match(/^#/)){
+                url = Envjs.uri(target.href, target.ownerDocument.baseURI);
+                target.ownerDocument.location.replace(url);
+            }
+        }else if (target && target.nodeName === 'INPUT') {
+            //console.log('input %s', target.xml);
+            if(target.type.toLowerCase() === 'submit'){
+                if(!target.value){
+                    target.value = 'submit';
+                }
+                //console.log('submit click %s %s', target.name, target.value);
+                form = target.parentNode;
+                while (form && form.nodeName !== 'FORM' ) {
+                    form = form.parentNode;
+                }
+                if(form && form.nodeName === 'FORM'){
+                    //disable other submit buttons before serializing
+                    inputs = form.getElementsByTagName('input');
+                    for(var i=0;i<inputs.length;i++){
+                        //console.log('checking for non-relevant submit buttons %s', inputs[i].name);
+                        if(inputs[i].type == 'submit' && inputs[i]!=target){
+                            //console.log('disabling the non-relevant submit button %s', inputs[i].value);
+                            inputs[i].disabled = true;
+                            inputs[i].value = null;
+                        }
+                    }
+                    form.submit();
+                }
+            }
+        }
+    }
+};
+
+}(/*Envjs.Platform.Core*/));
+
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.Platform.HTML').
+        debug('Platform Core HTML API available');
+});
+
+/**
+ * describes which script src values will trigger Envjs to load
+ * the script like a browser would
+ */
+Envjs.scriptTypes = {
+    "": true, //anonymous/inline
+    "text/javascript"   :true,
+    "text/envjs"        :true
+};
+
+/**
+ * will be called when loading a script throws an error
+ * @param {Object} script
+ * @param {Object} e
+ */
+Envjs.onScriptLoadError = function(script, e){
+    log.error('error loading script %s %s', script, e);
+};
+
+/**
+ * load and execute script tag text content
+ * @param {Object} script
+ */
+Envjs.loadInlineScript = function(script){
+    if(script.ownerDocument.ownerWindow){
+        log.debug('evaulating inline in window %s', script.ownerDocument.ownerWindow);
+        Envjs['eval'](
+            script.ownerDocument.ownerWindow,
+            script.text,
+            'eval('+script.text.substring(0,16)+'...):'+new Date().getTime()
+        );
+    }else{
+        log.debug('evaulating inline in global %s',  __this__);
+        Envjs['eval'](
+            __this__,
+            script.text,
+            'eval('+script.text.substring(0,16)+'...):'+new Date().getTime()
+        );
+    }
+    //console.log('evaluated at scope %s \n%s',
+    //    script.ownerDocument.ownerWindow.guid, script.text);
+};
+
+/**
+ * Should evaluate script in some context
+ * @param {Object} context
+ * @param {Object} source
+ * @param {Object} name
+ */
+Envjs['eval'] = function(context, source, name){};
+
+
+/**
+ * Executes a script tag
+ * @param {Object} script
+ * @param {Object} parser
+ */
+Envjs.loadLocalScript = function(script){
+    var types,
+        src,
+        i,
+        base,
+        filename,
+        xhr,
+        brief = script.src||script.text.substring(0,64);
+
+    log.debug("loading script type %s : %s", script.type, brief);
+
+    if(script.type){
+        types = script.type.split(";");
+        for(i=0;i<types.length;i++){
+            if(Envjs.scriptTypes[types[i].toLowerCase()]){
+                //ok this script type is allowed
+                break;
+            }
+            if(i+1 == types.length){
+                log.debug('wont load script type %s', script.type);
+                return false;
+            }
+        }
+    }else if(!Envjs.scriptTypes['']){
+        log.debug('wont load anonymous script type ""');
+        return false;
+    }
+
+    try{
+        if(!script.src.length ){
+            if(Envjs.scriptTypes[""]){
+                log.debug('handling inline scripts %s %s', script.src, Envjs.scriptTypes[""] );
+                Envjs.loadInlineScript(script);
+                return true;
+            }else{
+                return false;
+            }
+        }
+    }catch(e){
+        log.error("Error loading script. %s", e);
+        Envjs.onScriptLoadError(script, e);
+        return false;
+    }
+
+
+    log.debug("loading allowed external script %s", script.src);
+
+    //lets you register a function to execute
+    //before the script is loaded
+    if(Envjs.beforeScriptLoad){
+        for(src in Envjs.beforeScriptLoad){
+            if(script.src.match(src)){
+                Envjs.beforeScriptLoad[src](script);
+            }
+        }
+    }
+    base = "" + script.ownerDocument.location;
+    //filename = Envjs.uri(script.src.match(/([^\?#]*)/)[1], base );
+    log.debug('loading script from base %s', base);
+    filename = Envjs.uri(script.src, base);
+    try {
+        xhr = new XMLHttpRequest();
+        xhr.open("GET", filename, false/*syncronous*/);
+        log.debug("loading external script %s", filename);
+        xhr.onreadystatechange = function(){
+            log.debug("readyState %s", xhr.readyState);
+            if(xhr.readyState === 4){
+                Envjs['eval'](
+                    script.ownerDocument.ownerWindow,
+                    xhr.responseText,
+                    filename
+                );
+            }
+            log.debug('finished evaluating %s', filename);
+        };
+        xhr.send(null, false);
+    } catch(ee) {
+        log.error("could not load script %s \n %s", filename, ee );
+        Envjs.onScriptLoadError(script, ee);
+        return false;
+    }
+    //lets you register a function to execute
+    //after the script is loaded
+    if(Envjs.afterScriptLoad){
+        for(src in Envjs.afterScriptLoad){
+            if(script.src.match(src)){
+                Envjs.afterScriptLoad[src](script);
+            }
+        }
+    }
+    return true;
+};
+
+
+/**
+ * An 'image' was requested by the document.
+ *
+ * - During inital parse of a <link>
+ * - Via an innerHTML parse of a <link>
+ * - A modificiation of the 'src' attribute of an Image/HTMLImageElement
+ *
+ * NOTE: this is optional API.  If this doesn't exist then the default
+ * 'loaded' event occurs.
+ *
+ * @param node {Object} the <img> node
+ * @param node the src value
+ * @return 'true' to indicate the 'load' succeed, false otherwise
+ */
+Envjs.loadImage = function(node, src) {
+    return true;
+};
+
+Envjs.loadImage = function(node, value) {
+    var event;
+    var owner = node.ownerDocument;
+    if (value) {
+        // value has to be something (easy)
+        // if the user-land API doesn't exist
+        // Or if the API exists and it returns true, then ok:
+        event = owner.createEvent('Events');
+        event.initEvent('load');
+    } else {
+        // oops
+        event = owner.createEvent('Events');
+        event.initEvent('error');
+    }
+    node.dispatchEvent(event, false);
+};
+
+/**
+ * A 'link'  was requested by the document.  Typically this occurs when:
+ * - During inital parse of a <link>
+ * - Via an innerHTML parse of a <link>
+ * - A modificiation of the 'href' attribute on a <link> node in the tree
+ *
+ * @param node {Object} is the link node in question
+ * @param href {String} is the href.
+ *
+ * Return 'true' to indicate that the 'load' was successful, or false
+ * otherwise.  The appropriate event is then triggered.
+ *
+ * NOTE: this is optional API.  If this doesn't exist then the default
+ *   'loaded' event occurs
+ */
+Envjs.loadLink = function(node, value) {
+    var event;
+    var owner = node.ownerDocument;
+
+    if (owner.fragment) {
+        /**
+         * if we are in an innerHTML fragment parsing step
+         * then ignore.  It will be handled once the fragment is
+         * added to the real doco
+         */
+        return;
+    }
+
+    if (node.parentNode === null) {
+        /*
+         * if a <link> is parentless (normally by create a new link
+         * via document.createElement('link'), then do *not* fire an
+         * event, even if it has a valid 'href' attribute.
+         */
+        return;
+    }
+    if (value != '') {
+        // value has to be something (easy)
+        // if the user-land API doesn't exist
+        // Or if the API exists and it returns true, then ok:
+        event = owner.createEvent('Events');
+        event.initEvent('load');
+    } else {
+        // oops
+        event = owner.createEvent('Events');
+        event.initEvent('error');
+    }
+    node.dispatchEvent(event, false);
+};
+
+var HTMLParser;
+Envjs.exchangeHTMLDocument = function(doc, text, url) {
+    var html, head, title, body,
+        event,
+        frame = doc.__ownerFrame__,
+        i;
+    try {
+        HTMLParser = HTMLParser || require('./../parser').HTMLParser;
+        //do some cleanup so we can reuse the document
+        doc.baseURI = url;
+        log.debug('reseting document indexes');
+        doc._indexes_ = {
+            'ancestors' : new NodeList(doc, doc),
+            '*': new NodeList(doc, doc)
+        };
+        //TODO: we should remove the events for the document but
+        // its so nice to setup a load handler before calling
+        // document.location
+        //doc.removeEventListener('*');
+
+        log.debug('parsing document for window exchange %s', url);
+        HTMLParser.parseDocument(text, doc);
+
+        log.debug('finsihed parsing document for window exchange %s', url);
+        //if this document is inside a frame make sure to trigger
+        //a new load event on the frame
+        if(frame){
+            event = doc.createEvent('HTMLEvents');
+            event.initEvent('load', false, false);
+            frame.dispatchEvent( event, false );
+        }
+    } catch (e) {
+        log.warn('parsererror %s', e);
+        try {
+            log.debug('document before error\n %s', doc.documentElement.outerHTML);
+        } catch (ee) {
+            // swallow
+        }
+        doc = new HTMLDocument(new DOMImplementation(), doc.ownerWindow);
+        html =    doc.createElement('html');
+        head =    doc.createElement('head');
+        title =   doc.createElement('title');
+        body =    doc.createElement('body');
+        title.appendChild(doc.createTextNode('Error'));
+        body.appendChild(doc.createTextNode('' + e));
+        head.appendChild(title);
+        html.appendChild(head);
+        html.appendChild(body);
+        doc.appendChild(html);
+        log.debug('default error document \n %s', doc.documentElement.outerHTML);
+
+        //DOMContentLoaded event
+        if (doc.createEvent) {
+            event = doc.createEvent('Event');
+            event.initEvent('DOMContentLoaded', false, false);
+            doc.dispatchEvent( event, false );
+
+            event = doc.createEvent('HTMLEvents');
+            event.initEvent('load', false, false);
+            doc.dispatchEvent( event, false );
+        }
+
+        //finally fire the window.onload event
+        //TODO: this belongs in window.js which is a event
+        //      event handler for DOMContentLoaded on document
+
+        try {
+            if (doc === window.document) {
+                console.log('triggering window.load');
+                event = doc.createEvent('HTMLEvents');
+                event.initEvent('load', false, false);
+                window.dispatchEvent( event, false );
+            }
+        } catch (eee) {
+            log.debug('window load event failed %s', eee);
+            //swallow
+        }
+    }
+};
+
+(function(){
+
+
+/*
+ *  cookie handling
+ *  Private internal helper class used to save/retreive cookies
+ */
+
+/**
+ * Specifies the location of the cookie file
+ */
+Envjs.cookieFile = function(){
+    return 'file://'+Envjs.homedir+'/.cookies';
+};
+
+/**
+ * saves cookies to a local file
+ * @param {Object} htmldoc
+ */
+Envjs.saveCookies = function(){
+    var cookiejson = JSON.stringify(Envjs.cookies.persistent,null,'\t');
+    log.debug('persisting cookies %s', cookiejson);
+    Envjs.writeToFile(cookiejson, Envjs.cookieFile());
+};
+
+/**
+ * loads cookies from a local file
+ * @param {Object} htmldoc
+ */
+Envjs.loadCookies = function(){
+    var cookiejson,
+        js,
+        file;
+    try{
+        file = Envjs.cookieFile();
+        log.debug('load cookies %s', file);
+        cookiejson = Envjs.readFromFile(file);
+
+        log.debug('cookies json %s', cookiejson);
+        js = JSON.parse(cookiejson, null, '\t');
+    }catch(e){
+        log.debug('failed to load cookies %s', e);
+        js = {};
+    }
+    return js;
+};
+
+Envjs.cookies = {
+    persistent:{
+        //domain - key on domain name {
+            //path - key on path {
+                //name - key on name {
+                     //value : cookie value
+                     //other cookie properties
+                //}
+            //}
+        //}
+        //expire - provides a timestamp for expiring the cookie
+        //cookie - the cookie!
+    },
+    temporary:{//transient is a reserved word :(
+        //like above
+    }
+};
+
+var __cookies__;
+
+function __domainValid__(url, value){
+    var i,
+        domainParts = url.hostname.split('.').reverse(),
+        newDomainParts = value.split('.').reverse();
+    if(newDomainParts.length > 1){
+        for(i=0;i<newDomainParts.length;i++){
+            if(newDomainParts[i] !== domainParts[i]){
+                return false;
+            }
+        }
+        return true;
+    }
+    return false;
+}
+
+
+function __mergeCookie__(target, cookie, properties){
+    var name, now;
+    if(!target[cookie.domain]){
+        target[cookie.domain] = {};
+    }
+    if(!target[cookie.domain][cookie.path]){
+        target[cookie.domain][cookie.path] = {};
+    }
+    for(name in properties){
+        if(properties.hasOwnProperty(name)){
+            now = new Date().getTime();
+            target[cookie.domain][cookie.path][name] = {
+                "value":properties[name],
+                "secure":cookie.secure,
+                "max-age":cookie['max-age'],
+                "date-created":now,
+                "expiration":(cookie['max-age']===0) ?
+                    0 :
+                    now + cookie['max-age']
+            };
+        }
+        //console.log('cookie is %o',target[cookie.domain][cookie.path][name]);
+    }
+}
+
+//HTMLDocument cookie
+Envjs.setCookie = function(url, cookie){
+    var i,
+        index,
+        name,
+        value,
+        properties = {},
+        attr,
+        attrs;
+    url = Envjs.urlsplit(url);
+    if(cookie){
+        attrs = cookie.split(";");
+    }else{
+        return;
+    }
+
+    //for now the strategy is to simply create a json object
+    //and post it to a file in the .cookies.js file.  I hate parsing
+    //dates so I decided not to implement support for 'expires'
+    //(which is deprecated) and instead focus on the easier 'max-age'
+    //(which succeeds 'expires')
+    cookie = {};//keyword properties of the cookie
+    cookie.domain = url.hostname;
+    cookie.path = url.path||'/';
+    for(i=0;i<attrs.length;i++){
+        index = attrs[i].indexOf("=");
+        if(index > -1){
+            name = __trim__(attrs[i].slice(0,index));
+            value = __trim__(attrs[i].slice(index+1));
+            if(name.toLowerCase() == 'max-age'){
+                //we'll have to when to check these
+                //and garbage collect expired cookies
+                cookie[name] = parseInt(value, 10);
+            } else if( name.toLowerCase() == 'domain' ){
+                if(__domainValid__(url, value)){
+                    cookie.domain = value;
+                }
+            } else if( name.toLowerCase() == 'path' ){
+                //not sure of any special logic for path
+                cookie.path = value;
+            } else {
+                //its not a cookie keyword so store it in our array of properties
+                //and we'll serialize individually in a moment
+                properties[name] = value;
+            }
+        }else{
+            if( attrs[i].toLowerCase() == 'secure' ){
+                cookie[attrs[i]] = true;
+            }
+        }
+    }
+    if(!('max-age' in cookie)){
+        //it's a transient cookie so it only lasts as long as
+        //the window.location remains the same (ie in-memory cookie)
+        __mergeCookie__(Envjs.cookies.temporary, cookie, properties);
+    }else{
+        //the cookie is persistent
+        __mergeCookie__(Envjs.cookies.persistent, cookie, properties);
+        Envjs.saveCookies();
+    }
+};
+
+
+function __cookieString__(cookies, url) {
+    var cookieString = "",
+        domain,
+        path,
+        name,
+        i=0;
+    for (domain in cookies) {
+        if (cookies.hasOwnProperty(domain) && (domain == "" || domain == url.hostname)) {
+            // check if the cookie is in the current domain (if domain is set)
+            log.debug('cookie domain %s', domain);
+            for (path in cookies[domain]) {
+                if (cookies[domain].hasOwnProperty(path) &&
+                    (path == "/" || url.path.indexOf(path) > -1)) {
+                    log.debug('cookie domain path %s', path);
+                    // make sure path is at or below the window location path
+                    for (name in cookies[domain][path]) {
+                        if(cookies[domain][path].hasOwnProperty(name)){
+                            log.debug('cookie domain path name %s', name);
+                            cookieString +=
+                                ((i++ > 0)?'; ':'') +
+                                name + "=" +
+                                cookies[domain][path][name].value;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return cookieString;
+}
+
+
+Envjs.getCookies = function(url){
+    //The cookies that are returned must belong to the same domain
+    //and be at or below the current window.location.path.  Also
+    //we must check to see if the cookie was set to 'secure' in which
+    //case we must check our current location.protocol to make sure it's
+    //https:
+    var persisted;
+    url = Envjs.urlsplit(url);
+    if(!__cookies__){
+        try{
+            __cookies__ = true;
+            try{
+                persisted = Envjs.loadCookies();
+            }catch(ee){
+                //fail gracefully
+                log.debug('failed to load persistant cookies %s', ee);
+            }
+            if(persisted){
+                __extend__(Envjs.cookies.persistent, persisted);
+            }
+            log.debug('set cookies for doc %s', url);
+        }catch(e){
+            log.debug('cookies not loaded %s', e);
+        }
+    }
+    var temporary = __cookieString__(Envjs.cookies.temporary, url),
+        persistent =  __cookieString__(Envjs.cookies.persistent, url);
+    log.debug('temporary cookies: %s', temporary);
+    log.debug('persistent cookies: %s', persistent);
+    return  temporary + persistent;
+};
+
+
+}());//end cookies
+
+
+/**
+ * Returns the value of the field element.
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true.  If the given element is not
+ * successful and the successful arg is not false then the returned value will be null.
+ *
+ * Note: If the successful flag is true (default) but the element is not successful, the return will be null
+ * Note: The value returned for a successful select-multiple element will always be an array.
+ * Note: If the element has no value the return value will be undefined.
+ *
+ * @name fieldValue
+ * @param Element el The DOM element for which the value will be returned
+ * @param Boolean successful true if value returned must be for a successful controls (default is true)
+ * @type String or Array<String> or null or undefined
+ */
+ function __fieldValue__(element, successful) {
+    var name = element.name,
+        type = element.type,
+        tag = element.tagName.toLowerCase(),
+        index,
+        array,
+        options,
+        option,
+        one,
+        i, imax,
+        value;
+
+    if (typeof successful == 'undefined')  {
+        successful = true;
+    }
+    //console.log('element %s disabled ? %s (successful:%s)', name, element.disabled, successful);
+
+    if (successful && (!name || element.disabled || type == 'reset' || type == 'button' ||
+             (type == 'checkbox' || type == 'radio') &&  !element.checked ||
+            //thatcher - todo: determine why not type == 'submit'
+             (/*type == 'submit||*/ type == 'image') &&
+             element.form && element.form.clk != element || tag === 'select' &&
+             element.selectedIndex === -1)) {
+            //console.log('skipping element in form serialization %s', element);
+            return null;
+    }
+
+    if (tag === 'select') {
+        index = element.selectedIndex;
+        if (index < 0) {
+            return null;
+        }
+        array = [];
+        options = element.options;
+        one = (type == 'select-one');
+        imax = (one ? index+1 : options.length);
+        i = (one ? index : 0);
+        for( i; i < imax; i++) {
+            option = options[i];
+            if (option.selected) {
+                value = option.value;
+                if (one) {
+                    return value;
+                }
+                array.push(value);
+            }
+        }
+        return array;
+    }
+    return element.value;
+}
+
+
+// Serialize an array of key/values into a query string
+function __param__( array ) {
+    var i, serialized = [];
+
+    // Serialize the key/values
+    for(i=0; i<array.length; i++){
+        serialized[ serialized.length ] =
+            encodeURIComponent(array[i].name) + '=' +
+            encodeURIComponent(array[i].value);
+    }
+
+    // Return the resulting serialization
+    return serialized.join("&").replace(/%20/g, "+");
+}
+
+/**
+ * Serializes all field elements inputs Array into a query string.
+ * This method will return a string in the format: name1=value1&amp;name2=value2
+ *
+ * The successful argument controls whether or not serialization is limited to
+ * 'successful' controls (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true.
+ *
+ *
+ * @name fieldSerialize
+ * @param successful true if only successful controls should be serialized (default is true)
+ * @type String
+ */
+function __fieldSerialize__(inputs, successful) {
+    var array = [],
+        input,
+        name,
+        value,
+        i,j, imax, jmax;
+
+    imax = inputs.length;
+    for(i=0; i<imax; i++){
+        input = inputs[i];
+        name = input.name;
+        if (!name) {
+            return '';
+        }
+        value = __fieldValue__(input, successful);
+        if (value && value.constructor == Array) {
+            jmax = value.length;
+            for (j=0; j < jmax; j++){
+                array.push({
+                    name: name,
+                    value: value[j]
+                });
+            }
+        }else if (value !== null && typeof value != 'undefined'){
+            array.push({
+                name: input.name,
+                value: value
+            });
+        }
+    }
+
+    //hand off  for proper encoding
+    return __param__(array);
+}
+
+/**
+ * Form Submissions
+ *
+ * This code is borrow largely from jquery.params and jquery.form.js
+ *
+ * formToArray() gathers form element data into an array of objects that can
+ * be passed to any of the following ajax functions: $.get, $.post, or load.
+ * Each object in the array has both a 'name' and 'value' property.  An example of
+ * an array for a simple login form might be:
+ *
+ * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * It is this array that is passed to pre-submit callback functions provided to the
+ * ajaxSubmit() and ajaxForm() methods.
+ *
+ * The semantic argument can be used to force form serialization in semantic order.
+ * This is normally true anyway, unless the form contains input elements of type='image'.
+ * If your form must be submitted with name/value pairs in semantic order and your form
+ * contains an input of type='image" then pass true for this arg, otherwise pass false
+ * (or nothing) to avoid the overhead for this logic.
+ *
+ *
+ * @name formToArray
+ * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
+ * @type Array<Object>
+ */
+function __formToArray__(form, semantic) {
+    var array = [],
+        elements = semantic ? form.getElementsByTagName('*') : form.elements,
+        element,
+        i,j,imax, jmax,
+        name,
+        value;
+
+    if (!elements) {
+        return array;
+    }
+
+    imax = elements.length;
+    for(i=0; i < imax; i++) {
+        element = elements[i];
+        name = element.name;
+        if (!name) {
+            continue;
+        }
+        log.debug('serializing input %s', name);
+        if (semantic && form.clk && element.type === "image") {
+            // handle image inputs on the fly when semantic == true
+            if(!element.disabled && form.clk == element) {
+                array.push({
+                    name: name+'.x',
+                    value: form.clk_x
+                },{
+                    name: name+'.y',
+                    value: form.clk_y
+                });
+            }
+            continue;
+        }
+
+        value = __fieldValue__(element, true);
+        log.debug('input value is %s', value);
+        if (value && value.constructor == Array) {
+            jmax = value.length;
+            for(j=0; j < jmax; j++){
+                array.push({name: name, value: value[j]});
+            }
+        } else if (value !== null && typeof value != 'undefined'){
+            log.debug('serializing form %s %s', name, value);
+            array.push({name: name, value: value});
+        }
+    }
+
+    if (!semantic && form.clk) {
+        // input type=='image' are not found in elements array! handle them here
+        elements = form.getElementsByTagName("input");
+        imax = imax=elements.length;
+        for(i=0; i < imax; i++) {
+            element = elements[i];
+            name = element.name;
+            if(name && !element.disabled && element.type == "image") {
+                array.push(
+                    {name: name+'.x', value: form.clk_x},
+                    {name: name+'.y', value: form.clk_y});
+            }
+        }
+    }
+    return array;
+}
+
+
+/**
+ * Serializes form data into a 'submittable' string. This method will return a string
+ * in the format: name1=value1&amp;name2=value2
+ *
+ * The semantic argument can be used to force form serialization in semantic order.
+ * If your form must be submitted with name/value pairs in semantic order then pass
+ * true for this arg, otherwise pass false (or nothing) to avoid the overhead for
+ * this logic (which can be significant for very large forms).
+ *
+ *
+ * @name formSerialize
+ * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
+ * @type String
+ */
+function __formSerialize__(form, semantic) {
+    //hand off to param for proper encoding
+    return __param__(__formToArray__(form, semantic));
+}
+
+Envjs.serializeForm = __formSerialize__;
+
+
+/**
+ * Returns the value(s) of the element in the matched set.  For example, consider the following form:
+ *
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true.  If this value is false the value(s)
+ * for each element is returned.
+ *
+ * Note: This method *always* returns an array.  If no valid value can be determined the
+ *       array will be empty, otherwise it will contain one or more values.
+ *
+ *
+ * @name fieldValue
+ * @param Boolean successful true if only the values for successful controls
+ *        should be returned (default is true)
+ * @type Array<String>
+ */
+ function __fieldValues__(inputs, successful) {
+    var i,
+        imax = inputs.length,
+        element,
+        values = [],
+        value;
+    for (i=0; i < imax; i++) {
+        element = inputs[i];
+        value = __fieldValue__(element, successful);
+        if (value === null || typeof value == 'undefined' ||
+            (value.constructor == Array && !value.length)) {
+            continue;
+        }
+        if (value.constructor == Array) {
+            Array.prototype.push(values, value);
+        } else {
+            values.push(value);
+        }
+    }
+    return values;
+}
+
+/**
+ * Clears the selected form element.  Takes the following actions on the element:
+ *  - input text fields will have their 'value' property set to the empty string
+ *  - select elements will have their 'selectedIndex' property set to -1
+ *  - checkbox and radio inputs will have their 'checked' property set to false
+ *  - inputs of type submit, button, reset, and hidden will *not* be effected
+ *  - button elements will *not* be effected
+ *
+ * @name clearFields
+ */
+ function __clearField__(element) {
+    var type = element.type,
+        tag = element.tagName.toLowerCase();
+    if (type == 'text' || type == 'password' || tag === 'textarea') {
+        element.value = '';
+    } else if (type == 'checkbox' || type == 'radio') {
+        element.checked = false;
+    } else if (tag === 'select') {
+        element.selectedIndex = -1;
+    }
+}
+
+
+/**
+ * Clears the form data.  Takes the following actions on the form's input fields:
+ *  - input text fields will have their 'value' property set to the empty string
+ *  - select elements will have their 'selectedIndex' property set to -1
+ *  - checkbox and radio inputs will have their 'checked' property set to false
+ *  - inputs of type submit, button, reset, and hidden will *not* be effected
+ *  - button elements will *not* be effected
+ *
+ *
+ * @name clearForm
+ */
+ function __clearForm__(form) {
+    var i,
+        j, jmax,
+        elements,
+        resetable = ['input','select','textarea'];
+    for(i=0; i<resetable.length; i++){
+        elements = form.getElementsByTagName(resetable[i]);
+        jmax = elements.length;
+        for(j=0;j<jmax;j++){
+            __clearField__(elements[j]);
+        }
+    }
+}
+
+
+
+
+}(/*Envjs.Platform.HTML*/));
+/*
+    http://www.JSON.org/json2.js
+    2008-07-15
+
+    Public Domain.
+
+    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+    See http://www.JSON.org/js.html
+
+
+    This code should be minified before deployment.
+    See http://javascript.crockford.com/jsmin.html
+
+    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+    NOT CONTROL.
+*/
+try{ JSON = JSON; }catch(e){
+JSON = (function () {
+
+    function f(n) {
+        // Format integers to have at least two digits.
+        return n < 10 ? '0' + n : n;
+    }
+
+    Date.prototype.toJSON = function (key) {
+
+        return this.getUTCFullYear()   + '-' +
+             f(this.getUTCMonth() + 1) + '-' +
+             f(this.getUTCDate())      + 'T' +
+             f(this.getUTCHours())     + ':' +
+             f(this.getUTCMinutes())   + ':' +
+             f(this.getUTCSeconds())   + 'Z';
+    };
+
+    String.prototype.toJSON = function (key) {
+        return String(this);
+    };
+    Number.prototype.toJSON =
+    Boolean.prototype.toJSON = function (key) {
+        return this.valueOf();
+    };
+
+    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+        escapeable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+        gap,
+        indent,
+        meta = {    // table of character substitutions
+            '\b': '\\b',
+            '\t': '\\t',
+            '\n': '\\n',
+            '\f': '\\f',
+            '\r': '\\r',
+            '"' : '\\"',
+            '\\': '\\\\'
+        },
+        rep;
+
+
+    function quote(string) {
+
+        escapeable.lastIndex = 0;
+        return escapeable.test(string) ?
+            '"' + string.replace(escapeable, function (a) {
+                var c = meta[a];
+                if (typeof c === 'string') {
+                    return c;
+                }
+                return '\\u' + ('0000' +
+                        (+(a.charCodeAt(0))).toString(16)).slice(-4);
+            }) + '"' :
+            '"' + string + '"';
+    }
+
+
+    function str(key, holder) {
+
+        var i,          // The loop counter.
+            k,          // The member key.
+            v,          // The member value.
+            length,
+            mind = gap,
+            partial,
+            value = holder[key];
+
+        if (value && typeof value === 'object' &&
+                typeof value.toJSON === 'function') {
+            value = value.toJSON(key);
+        }
+        if (typeof rep === 'function') {
+            value = rep.call(holder, key, value);
+        }
+
+        switch (typeof value) {
+        case 'string':
+            return quote(value);
+
+        case 'number':
+            return isFinite(value) ? String(value) : 'null';
+
+        case 'boolean':
+        case 'null':
+
+            return String(value);
+
+        case 'object':
+
+            if (!value) {
+                return 'null';
+            }
+            gap += indent;
+            partial = [];
+
+            if (typeof value.length === 'number' &&
+                    !(value.propertyIsEnumerable('length'))) {
+
+                length = value.length;
+                for (i = 0; i < length; i += 1) {
+                    partial[i] = str(i, value) || 'null';
+                }
+
+                v = partial.length === 0 ? '[]' :
+                    gap ? '[\n' + gap +
+                            partial.join(',\n' + gap) + '\n' +
+                                mind + ']' :
+                          '[' + partial.join(',') + ']';
+                gap = mind;
+                return v;
+            }
+
+            if (rep && typeof rep === 'object') {
+                length = rep.length;
+                for (i = 0; i < length; i += 1) {
+                    k = rep[i];
+                    if (typeof k === 'string') {
+                        v = str(k, value);
+                        if (v) {
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                        }
+                    }
+                }
+            } else {
+
+                for (k in value) {
+                    if (Object.hasOwnProperty.call(value, k)) {
+                        v = str(k, value);
+                        if (v) {
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                        }
+                    }
+                }
+            }
+
+            v = partial.length === 0 ? '{}' :
+                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
+                        mind + '}' : '{' + partial.join(',') + '}';
+            gap = mind;
+            return v;
+        }
+    }
+
+    return {
+        stringify: function (value, replacer, space) {
+
+            var i;
+            gap = '';
+            indent = '';
+
+            if (typeof space === 'number') {
+                for (i = 0; i < space; i += 1) {
+                    indent += ' ';
+                }
+
+            } else if (typeof space === 'string') {
+                indent = space;
+            }
+
+            rep = replacer;
+            if (replacer && typeof replacer !== 'function' &&
+                    (typeof replacer !== 'object' ||
+                     typeof replacer.length !== 'number')) {
+                throw new Error('JSON.stringify');
+            }
+
+            return str('', {'': value});
+        },
+
+
+        parse: function (text, reviver) {
+            var j;
+            function walk(holder, key) {
+                var k, v, value = holder[key];
+                if (value && typeof value === 'object') {
+                    for (k in value) {
+                        if (Object.hasOwnProperty.call(value, k)) {
+                            v = walk(value, k);
+                            if (v !== undefined) {
+                                value[k] = v;
+                            } else {
+                                delete value[k];
+                            }
+                        }
+                    }
+                }
+                return reviver.call(holder, key, value);
+            }
+
+            cx.lastIndex = 0;
+            if (cx.test(text)) {
+                text = text.replace(cx, function (a) {
+                    return '\\u' + ('0000' +
+                            (+(a.charCodeAt(0))).toString(16)).slice(-4);
+                });
+            }
+
+
+            if (/^[\],:{}\s]*$/.
+test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
+replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
+replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+                j = eval('(' + text + ')');
+
+                return typeof reviver === 'function' ?
+                    walk({'': j}, '') : j;
+            }
+
+            throw new SyntaxError('JSON.parse');
+        }
+    };
+}());
+
+}
+
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.Platform.Timer').
+        debug('Platform Core Timer API available');
+});
+
+/**
+ * synchronizes thread modifications
+ * @param {Function} fn
+ */
+Envjs.sync = function(fn){return fn;};
+
+/**
+ * sleep thread for specified duration
+ * @param {Object} milliseconds
+ */
+Envjs.sleep = function(milliseconds){};
+
+/**
+ * run function in another thread
+ * @param {Function} fn
+ */
+Envjs.spawn = function(fn){};
+
+/**
+ *
+ * @param {Object} fn
+ * @param {Object} onInterupt
+ */
+Envjs.runAsync = function(fn, onInterupt){
+    log.debug("running function async");
+    var running = true,
+        run;
+
+    try{
+        log.debug('spawning synced function');
+        return Envjs.spawn(fn);
+    }catch(e){
+        log.error("error while running async operation", e);
+        try{
+            if(onInterupt){
+                onInterupt(e);
+            }
+        }catch(ee){}
+    }
+};
+
+
+Envjs.timers = [];
+
+// html5 says this should be at least 4
+Envjs.MIN_TIMER_TIME = 4;
+
+//static
+Envjs.normalizeTime = function(time) {
+    time = time*1;
+    if ( isNaN(time) || time < 0 ) {
+        time = 0;
+    }
+
+    if ( time < Envjs.MIN_TIMER_TIME ) {
+        time = Envjs.MIN_TIMER_TIME;
+    }
+    return time;
+};
+
+
+Envjs.timers.addTimerOrInterval = Envjs.sync(function(fn, time, timerOrInterval){
+    // this is Envjs.timers so this function is safe to call from threads
+    // and more specifically setTimeout/setInterval should be safe to use
+    // from threads
+    var id = Envjs.guid();
+    //console.log('setting %s %s %s', timerOrInterval, time, fn);
+    time = Envjs.normalizeTime(time);
+    Envjs.timers.push({
+        type: timerOrInterval,
+        time: time,
+        at: Date.now() + time,
+        fn: (typeof fn == 'string') ? new Function(fn) : fn,
+        id: id
+    });
+    return id;
+});
+
+Envjs.timers.removeTimerOrInterval = Envjs.sync(function(id, timerOrInterval){
+    // this is Envjs.timers so this function is safe to call from threads
+    // and more specifically clearTimeout/clearInterval should be safe to
+    // use from threads
+    var i;
+    //console.log("clearing %s %s", timerOrInterval, id);
+    for(i = 0; i < Envjs.timers.length; i++){
+        if(Envjs.timers[i].id === id){
+            Envjs.timers.splice(i,1);
+            break;
+        }
+    }
+    return;
+});
+
+
+Envjs.on('tick', function(type, now){
+    //this is a nice simple implementation
+    var callbacks = [],
+        timers = Envjs.timers,
+        timer,
+        i;
+    //console.log('handling %s timer(s) in tick', timers.length);
+    for(i = 0; i < timers.length;){
+        timer = timers[i];
+        //console.log('scheduled for %s , currently %s', timer.at, now);
+        if(timer.at <= now){
+            //console.log('timer past due: at(%s), now(%s), type(%s)',timer.at, now, timer.type);
+            switch(timer.type){
+            case 'timeout':
+                //we need to remove it from the timers list and add it to the callback list
+                callbacks.push.apply(callbacks, timers.splice(i,1));
+                //dont increment the counter since the timers array was spliced
+                break;
+            case 'interval':
+                //we need to add it to the callback list but leave it in the timers list
+                callbacks.push(timer);
+                //fall through to increament the counter since the timers array is unchanged
+                i++;
+                break;
+            default:
+                i++;
+            }
+        }else{
+            //timer isnt read for execution so just leave it be
+            i++;
+        }
+    }
+    //console.log('timer tick has %s callbacks', callbacks.length);
+    //finally we need to execute the callbacks in the order added to this stack
+    for(i = 0; i < callbacks.length; i++){
+        timer = callbacks[i];
+        timer.fn.apply(timer.fn,[]);
+    }
+});
+
+//DEPRECATED
+Envjs.wait = Envjs.wait||function(wait) {};
+
+}());
+
+/*
+ * Copyright (c) 2010 Nick Galbreath
+ * http://code.google.com/p/stringencoders/source/browse/#svn/trunk/javascript
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * url processing in the spirit of python's urlparse module
+ * see `pydoc urlparse` or
+ * http://docs.python.org/library/urlparse.html
+ *
+ *  urlsplit: break apart a URL into components
+ *  urlunsplit:  reconsistute a URL from componets
+ *  urljoin: join an absolute and another URL
+ *  urldefrag: remove the fragment from a URL
+ *
+ * Take a look at the tests in urlparse-test.html
+ *
+ * On URL Normalization:
+ *
+ * urlsplit only does minor normalization the components Only scheme
+ * and hostname are lowercased urljoin does a bit more, normalizing
+ * paths with "."  and "..".
+
+ * urlnormalize adds additional normalization
+ *
+ *   * removes default port numbers
+ *     http://abc.com:80/ -> http://abc.com/, etc
+ *   * normalizes path
+ *     http://abc.com -> http://abc.com/
+ *     and other "." and ".." cleanups
+ *   * if file, remove query and fragment
+ *
+ * It does not do:
+ *   * normalizes escaped hex values
+ *     http://abc.com/%7efoo -> http://abc.com/%7Efoo
+ *   * normalize '+' <--> '%20'
+ *
+ * Differences with Python
+ *
+ * The javascript urlsplit returns a normal object with the following
+ * properties: scheme, netloc, hostname, port, path, query, fragment.
+ * All properties are read-write.
+ *
+ * In python, the resulting object is not a dict, but a specialized,
+ * read-only, and has alternative tuple interface (e.g. obj[0] ==
+ * obj.scheme).  It's not clear why such a simple function requires
+ * a unique datastructure.
+ *
+ * urlunsplit in javascript takes an duck-typed object,
+ *  { scheme: 'http', netloc: 'abc.com', ...}
+ *  while in  * python it takes a list-like object.
+ *  ['http', 'abc.com'... ]
+ *
+ * For all functions, the javascript version use
+ * hostname+port if netloc is missing.  In python
+ * hostname+port were always ignored.
+ *
+ * Similar functionality in different languages:
+ *
+ *   http://php.net/manual/en/function.parse-url.php
+ *   returns assocative array but cannot handle relative URL
+ *
+ * TODO: test allowfragments more
+ * TODO: test netloc missing, but hostname present
+ */
+
+var urlparse = {};
+
+// Unlike to be useful standalone
+//
+// NORMALIZE PATH with "../" and "./"
+//   http://en.wikipedia.org/wiki/URL_normalization
+//   http://tools.ietf.org/html/rfc3986#section-5.2.3
+//
+urlparse.normalizepath = function(path)
+{
+    if (!path || path === '/') {
+        return '/';
+    }
+
+    var parts = path.split('/');
+
+    var newparts = [];
+    // make sure path always starts with '/'
+    if (parts[0]) {
+        newparts.push('');
+    }
+
+    for (var i = 0; i < parts.length; ++i) {
+        if (parts[i] === '..') {
+            if (newparts.length > 1) {
+                newparts.pop();
+            } else {
+                newparts.push(parts[i]);
+            }
+        } else if (parts[i] != '.') {
+            newparts.push(parts[i]);
+        }
+    }
+
+    path = newparts.join('/');
+    if (!path) {
+        path = '/';
+    }
+    return path;
+};
+
+//
+// Does many of the normalizations that the stock
+//  python urlsplit/urlunsplit/urljoin neglects
+//
+// Doesn't do hex-escape normalization on path or query
+//   %7e -> %7E
+// Nor, '+' <--> %20 translation
+//
+urlparse.urlnormalize = function(url)
+{
+    var parts = urlparse.urlsplit(url);
+    switch (parts.scheme) {
+    case 'file':
+        // files can't have query strings
+        //  and we don't bother with fragments
+        parts.query = '';
+        parts.fragment = '';
+        break;
+    case 'http':
+    case 'https':
+        // remove default port
+        if ((parts.scheme === 'http' && parts.port == 80) ||
+            (parts.scheme === 'https' && parts.port == 443)) {
+            parts.port = null;
+            // hostname is already lower case
+            parts.netloc = parts.hostname;
+        }
+        break;
+    default:
+        // if we don't have specific normalizations for this
+        // scheme, return the original url unmolested
+        return url;
+    }
+
+    // for [file|http|https].  Not sure about other schemes
+    parts.path = urlparse.normalizepath(parts.path);
+
+    return urlparse.urlunsplit(parts);
+};
+
+urlparse.urldefrag = function(url)
+{
+    var idx = url.indexOf('#');
+    if (idx == -1) {
+        return [ url, '' ];
+    } else {
+        return [ url.substr(0,idx), url.substr(idx+1) ];
+    }
+};
+
+urlparse.urlsplit = function(url, default_scheme, allow_fragments)
+{
+    var leftover;
+
+    if (typeof allow_fragments === 'undefined') {
+        allow_fragments = true;
+    }
+
+    // scheme (optional), host, port
+    var fullurl = /^([A-Za-z]+)?(:?\/\/)([0-9.\-A-Za-z]*)(?::(\d+))?(.*)$/;
+    // path, query, fragment
+    var parse_leftovers = /([^?#]*)?(?:\?([^#]*))?(?:#(.*))?$/;
+
+    var o = {};
+
+    var parts = url.match(fullurl);
+    if (parts) {
+        o.scheme = parts[1] || default_scheme || '';
+        o.hostname = parts[3].toLowerCase() || '';
+        o.port = parseInt(parts[4],10) || '';
+        // Probably should grab the netloc from regexp
+        //  and then parse again for hostname/port
+
+        o.netloc = parts[3];
+        if (parts[4]) {
+            o.netloc += ':' + parts[4];
+        }
+
+        leftover = parts[5];
+    } else {
+        o.scheme = default_scheme || '';
+        o.netloc = '';
+        o.hostname = '';
+        leftover = url;
+    }
+    o.scheme = o.scheme.toLowerCase();
+
+    parts = leftover.match(parse_leftovers);
+
+    o.path =  parts[1] || '';
+    o.query = parts[2] || '';
+
+    if (allow_fragments) {
+        o.fragment = parts[3] || '';
+    } else {
+        o.fragment = '';
+    }
+
+    return o;
+};
+
+urlparse.urlunsplit = function(o) {
+    var s = '';
+    if (o.scheme) {
+        s += o.scheme + '://';
+    }
+
+    if (o.netloc) {
+        if (s == '') {
+            s += '//';
+        }
+        s +=  o.netloc;
+    } else if (o.hostname) {
+        // extension.  Python only uses netloc
+        if (s == '') {
+            s += '//';
+        }
+        s += o.hostname;
+        if (o.port) {
+            s += ':' + o.port;
+        }
+    }
+
+    if (o.path) {
+        s += o.path;
+    }
+
+    if (o.query) {
+        s += '?' + o.query;
+    }
+    if (o.fragment) {
+        s += '#' + o.fragment;
+    }
+    return s;
+};
+
+urlparse.urljoin = function(base, url, allow_fragments)
+{
+    if (typeof allow_fragments === 'undefined') {
+        allow_fragments = true;
+    }
+
+    var url_parts = urlparse.urlsplit(url);
+
+    // if url parts has a scheme (i.e. absolute)
+    // then nothing to do
+    if (url_parts.scheme) {
+        if (! allow_fragments) {
+            return url;
+        } else {
+            return urlparse.urldefrag(url)[0];
+        }
+    }
+    var base_parts = urlparse.urlsplit(base);
+
+    // copy base, only if not present
+    if (!base_parts.scheme) {
+        base_parts.scheme = url_parts.scheme;
+    }
+
+    // copy netloc, only if not present
+    if (!base_parts.netloc || !base_parts.hostname) {
+        base_parts.netloc = url_parts.netloc;
+        base_parts.hostname = url_parts.hostname;
+        base_parts.port = url_parts.port;
+    }
+
+    // paths
+    if (url_parts.path.length > 0) {
+        if (url_parts.path.charAt(0) == '/') {
+            base_parts.path = url_parts.path;
+        } else {
+            // relative path.. get rid of "current filename" and
+            //   replace.  Same as var parts =
+            //   base_parts.path.split('/'); parts[parts.length-1] =
+            //   url_parts.path; base_parts.path = parts.join('/');
+            var idx = base_parts.path.lastIndexOf('/');
+            if (idx == -1) {
+                base_parts.path = url_parts.path;
+            } else {
+                base_parts.path = base_parts.path.substr(0,idx) + '/' +
+                    url_parts.path;
+            }
+        }
+    }
+
+    // clean up path
+    base_parts.path = urlparse.normalizepath(base_parts.path);
+
+    // copy query string
+    base_parts.query = url_parts.query;
+
+    // copy fragments
+    if (allow_fragments) {
+        base_parts.fragment = url_parts.fragment;
+    } else {
+        base_parts.fragment = '';
+    }
+
+    return urlparse.urlunsplit(base_parts);
+};
+
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.XMLHttpRequest.Core').
+        debug('XMLHttpRequest.Core available');
+});
+
+/**
+ * getcwd - named after posix call of same name (see 'man 2 getcwd')
+ *
+ */
+Envjs.getcwd = function() {
+    return Envjs.uri('.');
+};
+
+/**
+ * resolves location relative to doc location
+ *
+ * @param {Object} path  Relative or absolute URL
+ * @param {Object} base  (semi-optional)  The base url used in resolving "path" above
+ */
+Envjs.uri = function(path, base) {
+    //console.log('constructing uri from path %s and base %s', path, base);
+    path = path+'';
+    // Semi-common trick is to make an iframe with src='javascript:false'
+    //  (or some equivalent).  By returning '', the load is skipped'
+    var js = 'javascript';
+    if (path.indexOf(js+':') === 0) {
+        return '';
+    }
+
+    // if path is absolute, then just normalize and return
+    if (path.match('^[a-zA-Z]+://')) {
+        return urlparse.urlnormalize(path);
+    }
+
+    // interesting special case, a few very large websites use
+    // '//foo/bar/' to mean 'http://foo/bar'
+    if (path.match('^//')) {
+        path = 'http:' + path;
+    }
+
+    // if base not passed in, try to get it from document
+    // Ideally I would like the caller to pass in document.baseURI to
+    //  make this more self-sufficient and testable
+    if (!base && document) {
+        base = document.baseURI;
+    }
+
+    // about:blank doesn't count
+    if (base === 'about:blank'){
+        base = '';
+    }
+
+    // if base is still empty, then we are in QA mode loading local
+    // files.  Get current working directory
+    if (!base) {
+        base = 'file://' +  Envjs.getcwd() + '/';
+    }
+    // handles all cases if path is abosulte or relative to base
+    // 3rd arg is "false" --> remove fragments
+    var newurl = urlparse.urlnormalize(urlparse.urljoin(base, path, false));
+    //console.log('uri %s %s = %s', base, path, newurl);
+    return newurl;
+};
+
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} url
+ */
+Envjs.writeToFile = function(text, url){};
+
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} suffix
+ */
+Envjs.writeToTempFile = function(text, suffix){};
+
+/**
+ * Used to read the contents of a local file
+ * @param {Object} url
+ */
+Envjs.readFromFile = function(url){};
+
+/**
+ * Used to delete a local file
+ * @param {Object} url
+ */
+Envjs.deleteFile = function(url){};
+
+
+Envjs.connections = [];
+Envjs.connections.addConnection = Envjs.sync(function(xhr){
+    log.debug('registering connection.');
+    Envjs.connections.push(xhr);
+});
+Envjs.connections.removeConnection = Envjs.sync(function(xhr){
+    log.debug('unregistering connection.');
+    var i;
+    for(i = 0; i < Envjs.connections.length; i++){
+        if(Envjs.connections[i] === xhr){
+            Envjs.connections.splice(i,1);
+            break;
+        }
+    }
+    return;
+});
+/**
+ * establishes connection and calls responsehandler
+ * @param {Object} xhr
+ * @param {Object} responseHandler
+ * @param {Object} data
+ */
+Envjs.connection = function(xhr, responseHandler, data){};
+
+Envjs.localXHR = function(url, xhr, connection, data){
+    try{
+        if ( "PUT" == xhr.method || "POST" == xhr.method ) {
+            log.debug('writing to file %s', url);
+            data =  data || "" ;
+            Envjs.writeToFile(data, url);
+            xhr.readyState = 4;
+            //could be improved, I just cant recall the correct http codes
+            xhr.status = 200;
+            xhr.statusText = "";
+        } else if ( xhr.method == "DELETE" ) {
+            log.debug('deleting file %s', url);
+            Envjs.deleteFile(url);
+            xhr.readyState = 4;
+            //could be improved, I just cant recall the correct http codes
+            xhr.status = 200;
+            xhr.statusText = "";
+        } else {
+            //try to add some canned headers that make sense
+            log.debug('reading from file %s', url);
+            xhr.readyState = 4;
+            xhr.statusText = "ok";
+            xhr.responseText = Envjs.readFromFile(url);
+            try{
+                if(url.match(/html$/)){
+                    xhr.responseHeaders["Content-Type"] = 'text/html';
+                }else if(url.match(/.xml$/)){
+                    xhr.responseHeaders["Content-Type"] = 'text/xml';
+                }else if(url.match(/.js$/)){
+                    xhr.responseHeaders["Content-Type"] = 'text/javascript';
+                }else if(url.match(/.json$/)){
+                    xhr.responseHeaders["Content-Type"] = 'application/json';
+                }else{
+                    xhr.responseHeaders["Content-Type"] = 'text/plain';
+                }
+                //xhr.responseHeaders['Last-Modified'] = connection.getLastModified();
+                //xhr.responseHeaders['Content-Length'] = headerValue+'';
+                //xhr.responseHeaders['Date'] = new Date()+'';
+            }catch(ee){
+                log.error('failed to load response headers', ee);
+            }
+        }
+    }catch(e){
+        log.error('failed to open file %s %s', url, e);
+        connection = null;
+        xhr.readyState = 4;
+        xhr.statusText = "Local File Protocol Error";
+        xhr.responseText = "<html><head/><body><p>"+ e+ "</p></body></html>";
+    }
+};
+
+__extend__(Envjs, urlparse);
+
+}(/*Envjs.XMLHttpRequest.Core*/));
+(function(){
+
+var log = Envjs.logger('Envjs.Window');
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.Window');
+});
+
+/**
+ * Makes an object window-like by proxying object accessors
+ * @param {Object} scope
+ * @param {Object} parent
+ */
+Envjs.proxy = function(scope, parent, aliasList){
+    return (function(){return this;}());
+};
+
+Envjs.javaEnabled = false;
+
+Envjs.homedir        = '';
+Envjs.tmpdir         = '';
+Envjs.os_name        = '';
+Envjs.os_arch        = '';
+Envjs.os_version     = '';
+Envjs.lang           = '';
+Envjs.platform       = '';
+
+//some common user agents as constants so you can emulate them
+Envjs.userAgents = {
+    firefox3: 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'
+};
+
+var __windows__ = {};
+
+Envjs.windows = function(uuid, scope){
+    var w;
+    if(arguments.length === 0){
+        return __windows__;
+    }else if(arguments.length === 1){
+        return __windows__.hasOwnProperty(uuid) ?
+            __windows__[uuid] :
+            null;
+    }else if(arguments.length === 2){
+        __windows__[uuid] = scope;
+        if(scope === null){
+            delete __windows__[uuid];
+        }
+    }
+};
+/**
+ *
+ * @param {Object} frameElement
+ * @param {Object} url
+ */
+Envjs.loadFrame = function(frame, url){
+    var w;
+    try {
+        //console.log('loading frame %s', url);
+        if(frame.contentWindow && frame.contentWindow.close){
+            //mark for garbage collection
+            frame.contentWindow.close();
+        }
+
+        //create a new scope for the window proxy
+        //platforms will need to override this function
+        //to make sure the scope is global-like
+        frame.contentWindow = Envjs.proxy({});
+        //console.log("frame.ownerDocument %s subframe %s",
+        //  frame.ownerDocument.location,
+        //  frame.ownerDocument.__ownerFrame__);
+        if(frame.ownerDocument&&frame.ownerDocument.__ownerFrame__){
+            //console.log('frame is parent %s', frame.ownerDocument.__ownerFrame__.contentWindow.guid);
+            w = new Window(frame.contentWindow, frame.ownerDocument.__ownerFrame__.contentWindow);
+        }else{
+            //log.debug("window is parent %s", window.guid);
+            w = new Window(frame.contentWindow, window);
+        }
+
+        //I dont think frames load asynchronously in firefox
+        //and I think the tests have verified this but for
+        //some reason I'm less than confident... Are there cases?
+        frame.contentDocument = frame.contentWindow.document;
+        frame.contentDocument.async = false;
+        frame.contentDocument.__ownerFrame__ = frame;
+        if(url){
+            log.debug('envjs.loadFrame async %s', frame.contentDocument.async);
+            frame.contentDocument.location.assign(Envjs.uri(url, frame.ownerDocument.location.toString()));
+        }
+    } catch(e) {
+        log.error("failed to load frame content: from %s %s", url, e);
+    }
+};
+
+
+/**
+ * unloadFrame
+ * @param {Object} frame
+ */
+Envjs.unloadFrame = function(frame){
+    var all, length, i;
+    try{
+        //TODO: probably self-referencing structures within a document tree
+        //preventing it from being entirely garbage collected once orphaned.
+        //Should have code to walk tree and break all links between contained
+        //objects.
+        frame.contentDocument = null;
+        if(frame.contentWindow){
+            //console.log('closing window %s', frame.contentWindow);
+            frame.contentWindow.close();
+        }
+        Envjs.gc();
+    }catch(e){
+        console.log(e);
+    }
+};
+
+/**
+ * Platform clean up hook if it ever makes sense - see Envjs.unloadFrame for example
+ */
+Envjs.gc = function(){};
+
+}());
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/platform/johnson.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/platform/johnson.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/platform/johnson.js	(revision 76)
@@ -0,0 +1,363 @@
+var __context__ = __this__;
+
+var Envjs = Envjs ||
+	require('./core').Envjs;
+	require('local_settings');
+
+Envjs.platform       = "Johnson SpiderMonkey";
+Envjs.revision       = Ruby.CONFIG.ruby_version;
+
+Ruby.ARGV.shift();
+Envjs.argv = Ruby.ARGV;
+
+Envjs.exit = function(){ Ruby['exit!'](); };
+
+/*
+ * Envjs johnson-env.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    }
+    return a;
+}
+
+Envjs.log = function(msg){
+	Ruby.puts(msg);
+}
+
+Envjs.lineSource = function(e){
+    return "(line ?)";
+};
+
+Envjs.readConsole = function(){
+     return Ruby.$stdin.gets();
+};
+
+Envjs.prompt = function(){
+    Ruby.$stdout.write(Envjs.CURSOR+' ');
+    Ruby.$stdout.flush;
+};
+
+//No REPL for
+Envjs.repl = function(){
+    console.log('Envjs REPL Not Available');
+};
+(function(){
+
+var log = Envjs.logger('Envjs.Platform.Johnson');
+
+Envjs.eval = function(context, source, name){
+    if(context == __this__){
+        return global.evaluate( source, name );
+    }else{
+		var abc = new Ruby.Johnson.Runtime()
+		log.debug('evaluating in framed context %s %s', context, abc);
+	    return context.evaluate( source, name );
+    }
+};
+
+})();
+/**
+ * synchronizes thread modifications
+ * @param {Function} fn
+ */
+var	lock = new Ruby.Mutex();
+
+//NOTES:
+//context['sync'] = lambda{|wrapper|
+//    Proc.new{|*args|lock.synchronize {wrapper['fn'].call(*args)}}
+//}
+//context['sync']      = lambda{|fn| Proc.new{|*args| fn.call(*args) }}
+Envjs.sync = function(fn){
+    //console.log('syncing js fn %s', fn);
+    var wrapper = {fn:fn};
+	//return lock.synchronize(fn)
+    return fn;
+};
+
+//NOTES:
+//context['spawn']    = lambda{|wrapper| Thread.new {wrapper['fn'].call} }
+//context['spawn']     = lambda{|wrapper| wrapper['fn'].call }
+ Envjs.spawn = function(fn){
+     //console.log('spawning js fn %s', fn);
+     var wrapper = {fn:fn};
+     return fn();
+ };
+
+/**
+ * sleep thread for specified duration
+ * @param {Object} milliseconds
+ */
+Envjs.sleep = function(milliseconds){
+	return Ruby.sleep(1.0*milliseconds/1000.0);
+};
+(function(){
+
+var log = Envjs.logger('Envjs.Platform.Johnson');
+
+//Since we're running in spydermonkey I guess we can safely assume
+//java is not 'enabled'.  I'm sure this requires more thought
+//than I've given it here
+Envjs.javaEnabled 	 = false;
+
+Envjs.homedir        = Ruby.ENV.HOME
+Envjs.tmpdir         = Ruby.ENV.TMPDIR;
+Envjs.os_name        = Ruby.CONFIG.host_os;
+Envjs.os_arch        = Ruby.CONFIG.host_cpu;
+Envjs.os_version     = "";//part of os_arch
+Envjs.lang           = Ruby.ENV.LANG;
+
+Envjs.gc = function(){ Ruby.Johnson.Runtime.gc(); };
+
+/**
+ * Makes an object window-like by proxying object accessors
+ * @param {Object} scope
+ * @param {Object} parent
+ */
+Envjs.proxy = function(scope, parent) {
+    try{
+        if(scope == __this__){
+            return scope;
+        }else{
+            return new Ruby.Johnson.Runtime();
+        }
+    }catch(e){
+        console.log('failed to init standard objects %s %s \n%s', scope, parent, e);
+    }
+};
+
+})();(function(){
+
+var log = Envjs.logger('Envjs.XMLHttpRequest.Johnson');
+
+/**
+ * Get 'Current Working Directory'
+ */
+Envjs.getcwd = function() {
+    return Ruby.ENV['PWD'];
+};
+
+/**
+ * Used to read the contents of a local file
+ * @param {Object} url
+ */
+Envjs.readFromFile = function( url ){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+    log.debug('reading file %s', url);
+    var file = Ruby.File.open(url, 'r'),
+        data = file.read();
+    return data;
+};
+
+Envjs.writeToFile = function(text, url){
+    var file = Ruby.File.open(url, 'w');
+	log.debug('writing to file %s', url);
+	file.write(text);
+	return;
+};
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} suffix
+ */
+Envjs.writeToTempFile = function(text, suffix){
+    // Create temp file.
+    var temp = Envjs.tmpdir+"."+(new Date().getTime())+(suffix||'.js');
+    log.debug("writing text to temp url : %s ", temp);
+    Envjs.writeToFile(text, temp);
+    return temp;
+};
+
+
+/**
+ * Used to read the contents of a local file
+ * @param {Object} url
+ */
+Envjs.readFromFile = function( url ){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+	log.debug('reading file %s', url);
+    var file = Ruby.File.open(url, 'r'),
+		data = file.read();
+	return data;
+};
+
+
+/**
+ * Used to delete a local file
+ * @param {Object} url
+ */
+Envjs.deleteFile = function(url){
+    return ;//TODO
+};
+
+/**
+ * establishes connection and calls responsehandler
+ * @param {Object} xhr
+ * @param {Object} responseHandler
+ * @param {Object} data
+ */
+Envjs.connection = function(xhr, responseHandler, data){
+    var url = xhr.url,
+		urlparts = Envjs.urlsplit(xhr.url),
+        connection,
+		request,
+		headers,
+        header,
+        length,
+        binary = false,
+        name, value,
+        contentEncoding,
+        responseXML,
+        i;
+
+    if ( /^file\:/.test(url) ) {
+	    //console.log('establishing file connection');
+        Envjs.localXHR(url, xhr, connection, data);
+    } else {
+	    log.debug('establishing http connection %s', xhr.url);
+		try{
+
+	        connection = Ruby.Net.HTTP.start(
+				urlparts.hostname,
+				Number(urlparts.port||80)
+			);
+			log.debug('connection established %s', connection);
+
+			path = urlparts.path+(urlparts.query?'?'+urlparts.query:'');
+		    switch(	xhr.method.toUpperCase() ){
+				case "GET":
+					request = new Ruby.Net.HTTP.Get(path);break;
+			    case "PUT":
+					request = new Ruby.Net.HTTP.Put(path);break;
+			    case "POST"	:
+					request = new Ruby.Net.HTTP.Post(path);break;
+			    case "HEAD":
+					request = new Ruby.Net.HTTP.Head(path);break;
+			    case "DELETE":
+					request = new Ruby.Net.HTTP.Delete(path);break;
+				default:
+					request = null;
+			}
+			log.debug('request query string %s', urlparts.query);
+			log.debug('formulated %s request %s %s', xhr.method, urlparts.path, request);
+			//TODO: add gzip support
+	        //connection.putheader("Accept-Encoding", 'gzip');
+			//connection.endheaders();
+
+	        //write data to output stream if required
+			//TODO: if they have set the request header for a chunked
+			//request body, implement a chunked output stream
+	        if(data){
+	            if(data instanceof Document){
+	                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+	                    connection.send((new XMLSerializer()).serializeToString(data));
+	                }
+	            }else if(data.length&&data.length>0){
+	                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+	                    connection.send(data+'');
+	                }
+	            }
+	        }
+		}catch(e){
+			log.error("connection failed %s",e);
+			if (connection)
+				connection.finish();
+			connection = null;
+		}
+    }
+
+    if(connection){
+		[response, headers] = HTTPConnection.go(connection, request, xhr.headers, null);
+
+        try{
+            // Stick the response headers into responseHeaders
+			var keys = headers.keys();
+            for (var i = 0;i<keys.length;i++) {
+				header = keys[i];
+				log.debug('response header [%s] = %s', header, headers[header]);
+                xhr.responseHeaders[header] = headers[header];
+            }
+        }catch(e){
+            log.error('failed to load response headers \n%s',e);
+        }
+
+        xhr.readyState = 4;
+        xhr.status = parseInt(response.code,10) || undefined;
+        xhr.statusText = response.message || "";
+		log.info('%s %s %s %s', xhr.method, xhr.status, xhr.url, xhr.statusText);
+        contentEncoding = xhr.getResponseHeader('content-encoding') || "utf-8";
+        responseXML = null;
+
+        try{
+            //console.log('contentEncoding %s', contentEncoding);
+            if( contentEncoding.toLowerCase() == "gzip" ||
+                contentEncoding.toLowerCase() == "decompress"){
+                //zipped content
+                binary = true;
+				//TODO
+				log.debug('TODO: handle gzip compression');
+                xhr.responseText = response.body;
+            }else{
+                //this is a text file
+                xhr.responseText = response.body+'';
+            }
+        }catch(e){
+            log.warn('failed to open connection stream \n%s, %s %s %s',
+            	xhr.status, xhr.url, e.toString(), e
+			);
+        }finally{
+			if(connection)
+				connection.finish();
+		}
+
+
+    }
+
+    if(responseHandler){
+        log.debug('calling ajax response handler');
+        if(!xhr.async){
+			log.debug('calling sync response handler directly');
+			responseHandler();
+		}else{
+			log.debug('using setTimeout for async response handler');
+			setTimeout(responseHandler, 1);
+		}
+    }
+};
+
+})(/*Envjs.XMLHttpRequest.Johnson*/);
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/platform/node.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/platform/node.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/platform/node.js	(revision 76)
@@ -0,0 +1,343 @@
+var __context__ = __this__ = global;
+
+var Envjs = Envjs ||
+	require('./core').Envjs;
+	require('./../../local_settings');
+
+Envjs.platform       = "Node";
+Envjs.revision       = process.version;
+
+/*process.on('uncaughtException', function (err) {
+  	console.log('Envjs Caught exception: %s \n %s', err);
+});*/
+
+Envjs.argv = process.argv;
+Envjs.argv.shift();
+Envjs.argv.shift();//node is argv[0] but we want to start at argv[1]
+
+Envjs.exit = function(){
+    /*setTimeout(function () {
+        if(!Envjs.timers.length){
+            //console.log('no timers remaining %s', Envjs.timers.length);
+            process.exit();
+        }else{
+            Envjs.exit();
+        }
+    }, 13);*/
+};
+
+
+/*
+ * Envjs node-env.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    }
+    return a;
+}
+
+var $print = require('sys').print;
+
+Envjs.log = function(msg){
+    console.log(msg+'\n\n');
+};
+
+Envjs.lineSource = function(e){
+    return "(line ?)";
+};
+
+Envjs.readConsole = function(){
+     return $stdin.gets();
+};
+
+Envjs.prompt = function(){
+    $stdout.write(Envjs.CURSOR+' ');
+    $stdout.flush;
+};
+
+//No REPL for
+Envjs.repl = function(){
+    //require('repl').start(Envjs.CURSOR+' ');
+    console.log('Envjs REPL Not Available');
+};
+var Script = process.binding('evals').Script;
+
+Envjs.eval = function(context, source, name, warming){
+	if(context === global){
+		return warming ?
+			eval(source) :
+			Script.runInThisContext(source, name);
+	}else{
+		return Script.runInNewContext(source, context, name);
+	}
+};
+Envjs.wait = function(){ return; }
+
+var $tick = function(){
+    process.nextTick(function () {
+        //console.log('node tick');
+        Envjs.tick();
+        $tick();
+    });
+};
+
+Envjs.eventLoop = function(){
+    //console.log('event loop');
+    $tick();
+};
+/**
+ * provides callback hook for when the system exits
+ */
+Envjs.onExit = function(callback){
+    process.on('exit', callback);
+};
+
+
+/**
+ * synchronizes thread modifications
+ * @param {Function} fn
+ */
+ Envjs.sync = function(fn){
+     //console.log('syncing js fn %s', fn);
+     return fn;
+ };
+
+ Envjs.spawn = function(fn){
+     return fn();
+ };
+
+/**
+ * sleep thread for specified duration
+ * @param {Object} milliseconds
+ */
+Envjs.sleep = function(milliseconds){
+    return;
+};
+
+
+//Since we're running in v8 I guess we can safely assume
+//java is not 'enabled'.  I'm sure this requires more thought
+//than I've given it here
+Envjs.javaEnabled 	 = false;
+
+Envjs.homedir        = process.env["HOME"];
+Envjs.tmpdir         = process.env["TMPDIR"];
+Envjs.os_name        = process.platform;
+Envjs.os_arch        = "os arch";
+Envjs.os_version     = "os version";
+Envjs.lang           = process.env["LANG"];
+
+
+Envjs.gc = function(){ return; };
+
+/**
+ * Makes an object window-like by proxying object accessors
+ * @param {Object} scope
+ * @param {Object} parent
+ */
+Envjs.proxy = function(scope, parent) {
+    try{
+        if(scope.toString() == global){
+            return __this__;
+        }else{
+            return scope;
+        }
+    }catch(e){
+       console.log('failed to init standard objects %s %s \n%s', scope, parent, e);
+    }
+
+};var filesystem = require('fs');
+/**
+ * Get 'Current Working Directory'
+ */
+Envjs.getcwd = function() {
+    return process.cwd();
+}
+
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} url
+ */
+Envjs.writeToFile = function(text, url){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+    filesystem.writeFileSync(url, text, 'utf8');
+};
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} suffix
+ */
+Envjs.writeToTempFile = function(text, suffix){
+	var url =  Envjs.tmpdir+'envjs-'+(new Date().getTime())+'.'+suffix;
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+	filesystem.writeFileSync(tmpfile, text, 'utf8');
+    return tmpfile;
+};
+
+
+/**
+ * Used to read the contents of a local file
+ * @param {Object} url
+ */
+Envjs.readFromFile = function( url ){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+    return filesystem.readFileSync(url, 'utf8');
+};
+
+
+/**
+ * Used to delete a local file
+ * @param {Object} url
+ */
+Envjs.deleteFile = function(url){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+    filesystem.unlink(url);
+};
+
+/**
+ * establishes connection and calls responsehandler
+ * @param {Object} xhr
+ * @param {Object} responseHandler
+ * @param {Object} data
+ */
+Envjs.connection = function(xhr, responseHandler, data){
+    var url = xhr.url,
+        connection,
+		request,
+        binary = false,
+        contentEncoding,
+        responseXML = null,
+		http = require('http'),
+		urlparts = Envjs.urlsplit(url),
+        i;
+
+
+    if ( /^file\:/.test(url) ) {
+        Envjs.localXHR(url, xhr, connection, data);
+    } else {
+	    //console.log('connecting to %s \n\t port(%s) host(%s) path(%s) query(%s)',
+	    //    url, urlparts.port, urlparts.hostname, urlparts.path, urlparts.query);
+		connection = http.createClient(urlparts.port||'80', urlparts.hostname);
+		request = connection.request(
+			xhr.method,
+			urlparts.path+(urlparts.query?"?"+urlparts.query:''),
+			__extend__(xhr.headers,{
+				"Host": urlparts.hostname,
+				//"Connection":"Keep-Alive"
+				//"Accept-Encoding", 'gzip'
+			})
+		);
+		xhr.statusText = "";
+
+	    if(connection&&request){
+			request.on('response', function (response) {
+				//console.log('response begin');
+				xhr.readyState = 3;
+				response.on('end', function (chunk) {
+					//console.log('connection complete');
+		        	xhr.readyState = 4;
+				    if(responseHandler){
+				        //console.log('calling ajax response handler');
+				        if(!xhr.async){
+							responseHandler();
+						}else{
+							setTimeout(responseHandler, 1);
+						}
+				    }
+					if(xhr.onreadystatechange){
+						xhr.onreadystatechange();
+					}
+				});
+
+				xhr.responseHeaders = __extend__({},response.headers);
+                xhr.statusText = "OK";
+			    xhr.status = response.statusCode;
+				//console.log('response headers : %s', JSON.stringify(xhr.responseHeaders));
+				contentEncoding = xhr.getResponseHeader('Content-Encoding') || "utf-8";
+				response.setEncoding(contentEncoding);
+	            //console.log('contentEncoding %s', contentEncoding);
+
+			  	response.on('data', function (chunk) {
+			    	//console.log('\nBODY: %s', chunk);
+		            if( contentEncoding.match("gzip") ||
+		                contentEncoding.match("decompress")){
+		                //zipped content
+		                binary = true;
+						//Not supported yet
+		                xhr.responseText += (chunk+'');
+		            }else{
+		                //this is a text file
+		                xhr.responseText += (chunk+'');
+		            }
+					if(xhr.onreadystatechange){
+						xhr.onreadystatechange();
+					}
+			  	});
+				if(xhr.onreadystatechange){
+					xhr.onreadystatechange();
+				}
+			});
+	    }
+        //write data to output stream if required
+		//TODO: if they have set the request header for a chunked
+		//request body, implement a chunked output stream
+
+        //console.log('sending request %s\n', xhr.url);
+        if(data){
+            if(data instanceof Document){
+                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+                    xml = (new XMLSerializer()).serializeToString(data);
+					request.write(xml);
+                }
+            }else if(data.length&&data.length>0){
+                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+                    request.write(data);
+                }
+            }
+            request.end();
+        }else{
+            request.end();
+        }
+    }
+
+};
+
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/platform/rhino.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/platform/rhino.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/platform/rhino.js	(revision 76)
@@ -0,0 +1,461 @@
+/*
+ * Envjs rhino-env.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+var Envjs = Envjs ||
+	require('./core').Envjs;
+	require('local_settings');
+
+var __context__ = Packages.org.mozilla.javascript.Context.getCurrentContext();
+
+Envjs.platform       = "Rhino";
+Envjs.revision       = "1.7.0.rc2";
+Envjs.argv = [];
+if(__argv__ && __argv__.length){
+	for(var i = 0; i < __argv__.length; i++){
+		Envjs.argv[i] = __argv__[i];
+	}
+}
+
+Envjs.exit = function(){
+	java.lang.System.exit(0);
+};
+
+/*
+ * Envjs rhino-env.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    }
+    return a;
+}
+
+/**
+ * Writes message to system out.
+ *
+ * @param {Object} message
+ */
+(function(){
+
+Envjs.log = print;
+
+Envjs.lineSource = function(e){
+    return e&&e.rhinoException?e.rhinoException.lineSource():"(line ?)";
+};
+
+var $in, log;
+Envjs.readConsole = function(){
+	log = log||Envjs.logger('Envjs.Rhino');
+	$in = $in||new java.io.BufferedReader(
+		new java.io.InputStreamReader(java.lang.System['in'])
+	);
+	return  $in.readLine()+'';
+};
+Envjs.prompt = function(){
+  	java.lang.System.out.print(Envjs.CURSOR+' ');
+	java.lang.System.out.flush();
+};
+
+}());
+
+
+(function(){
+
+var log = Envjs.logger('Envjs.HTML.Rhino');
+
+Envjs.eval = function(context, source, name){
+    //console.log('evaluating javascript source %s', source.substring(0,64));
+	return  __context__.evaluateString(
+        context,
+        source,
+        name,
+        0,
+        null
+    );
+};
+
+}());Envjs.renderSVG = function(svgstring, url){
+    //console.log("svg template url %s", templateSVG);
+    // Create a JPEG transcoder
+    var t = new Packages.org.apache.batik.transcoder.image.JPEGTranscoder();
+
+    // Set the transcoding hints.
+    t.addTranscodingHint(
+        Packages.org.apache.batik.transcoder.image.JPEGTranscoder.KEY_QUALITY,
+        new java.lang.Float(1.0));
+    // Create the transcoder input.
+    var input = new Packages.org.apache.batik.transcoder.TranscoderInput(
+        new java.io.StringReader(svgstring));
+
+    // Create the transcoder output.
+    var ostream = new java.io.ByteArrayOutputStream();
+    var output = new Packages.org.apache.batik.transcoder.TranscoderOutput(ostream);
+
+    // Save the image.
+    t.transcode(input, output);
+
+    // Flush and close the stream.
+    ostream.flush();
+    ostream.close();
+
+	var out = new java.io.FileOutputStream(new java.io.File(new java.net.URI(url.toString())));
+	try{
+    	out.write( ostream.toByteArray() );
+	}catch(e){
+
+	}finally{
+    	out.flush();
+    	out.close();
+    }
+};
+(function(){
+
+var log = Envjs.logger('Envjs.Timer.Rhino');
+/**
+ * Rhino provides a very succinct 'sync'
+ * @param {Function} fn
+ */
+try{
+    Envjs.sync = sync;
+    Envjs.spawn = spawn;
+	//print('sync and spawn are available');
+} catch(e){
+	//print('sync and spawn are not available : ' + e);
+    //sync unavailable on AppEngine
+    Envjs.sync = function(fn){
+        console.log('Threadless platform, sync is safe');
+        return fn;
+    };
+
+    Envjs.spawn = function(fn){
+        console.log('Threadless platform, spawn shares main thread.');
+        return fn();
+    };
+};
+
+
+/**
+ * sleep thread for specified duration
+ * @param {Object} milliseconds
+ */
+Envjs.sleep = function(milliseconds){
+    try{
+        return java.lang.Thread.currentThread().sleep(milliseconds);
+    }catch(e){
+        console.log('Threadless platform, cannot sleep.');
+    }
+};
+
+/**
+ * provides callback hook for when the system exits
+ */
+Envjs.onExit = function(callback){
+    var rhino = Packages.org.mozilla.javascript,
+        contextFactory =  __context__.getFactory(),
+        listener = new rhino.ContextFactory.Listener({
+            contextReleased: function(context){
+                if(context === __context__)
+                    console.log('context released', context);
+                contextFactory.removeListener(this);
+                if(callback)
+                    callback();
+            }
+        });
+    contextFactory.addListener(listener);
+};
+
+}());
+(function(){
+
+var log = Envjs.logger('Envjs.XMLHttpRequest.Rhino');
+
+/**
+ * Get 'Current Working Directory'
+ */
+Envjs.getcwd = function() {
+    return java.lang.System.getProperty('user.dir');
+}
+
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} url
+ */
+Envjs.writeToFile = function(text, url){
+    //Envjs.debug("writing text to url : " + url);
+    var out = new java.io.FileWriter(
+        new java.io.File(
+            new java.net.URI(url.toString())));
+    out.write( text, 0, text.length );
+    out.flush();
+    out.close();
+};
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} suffix
+ */
+Envjs.writeToTempFile = function(text, suffix){
+    //console.log("writing text to temp url : %s");
+    // Create temp file.
+    var temp = java.io.File.createTempFile("envjs-tmp", suffix);
+
+    // Delete temp file when program exits.
+    temp.deleteOnExit();
+
+    // Write to temp file
+    var out = new java.io.FileWriter(temp);
+    out.write(text, 0, text.length);
+    out.close();
+    return temp.getAbsolutePath().toString()+'';
+};
+
+
+/**
+ * Used to read the contents of a local file
+ * @param {Object} url
+ */
+Envjs.readFromFile = function( url ){
+	if(typeof url == 'string')
+    	url = Envjs.uri(url);
+    //console.log("reading from url : %s", url);
+    var fileReader = new java.io.FileReader(
+        new java.io.File(
+            new java.net.URI( url )));
+
+    var stringwriter = new java.io.StringWriter(),
+        buffer = java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, 1024),
+        length;
+
+    while ((length = fileReader.read(buffer, 0, 1024)) != -1) {
+        stringwriter.write(buffer, 0, length);
+    }
+
+    stringwriter.close();
+    return stringwriter.toString()+"";
+};
+
+
+/**
+ * Used to delete a local file
+ * @param {Object} url
+ */
+Envjs.deleteFile = function(url){
+    var file = new java.io.File( new java.net.URI( url ) );
+    file["delete"]();
+};
+
+/**
+ * establishes connection and calls responsehandler
+ * @param {Object} xhr
+ * @param {Object} responseHandler
+ * @param {Object} data
+ */
+Envjs.connection = function(xhr, responseHandler, data){
+    var url = java.net.URL(xhr.url),
+        connection,
+        header,
+        outstream,
+        buffer,
+        length,
+        binary = false,
+        name, value,
+        contentEncoding,
+        instream,
+        responseXML,
+        i;
+
+
+    if ( /^file\:/.test(url) ) {
+        Envjs.localXHR(url, xhr, connection, data);
+    } else {
+        connection = url.openConnection();
+        //handle redirects manually since cookie support sucks out of the box
+        connection.setFollowRedirects(false);
+        connection.setRequestMethod( xhr.method );
+
+        // Add headers to Java connection
+        for (header in xhr.headers){
+            connection.addRequestProperty(header+'', xhr.headers[header]+'');
+        }
+        connection.addRequestProperty("Accept-Encoding", 'gzip');
+
+        //write data to output stream if required
+		//TODO: if they have set the request header for a chunked
+		//request body, implement a chunked output stream
+        if(data){
+            if(data instanceof Document){
+                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+                    connection.setDoOutput(true);
+                    outstream = connection.getOutputStream(),
+                    xml = (new XMLSerializer()).serializeToString(data);
+                    buffer = new java.lang.String(xml).getBytes('UTF-8');
+                    outstream.write(buffer, 0, buffer.length);
+                    outstream.close();
+                }
+            }else if(data.length&&data.length>0){
+                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+                    connection.setDoOutput(true);
+                    outstream = connection.getOutputStream();
+                    buffer = new java.lang.String(data).getBytes('UTF-8');
+                    outstream.write(buffer, 0, buffer.length);
+                    outstream.close();
+                }
+            }
+            connection.connect();
+        }else{
+            connection.connect();
+        }
+    }
+
+    if(connection){
+        try{
+            length = connection.getHeaderFields().size();
+            // Stick the response headers into responseHeaders
+            for (i = 0; i < length; i++) {
+                name = connection.getHeaderFieldKey(i);
+                value = connection.getHeaderField(i);
+                if (name)
+                    xhr.responseHeaders[name+''] = value+'';
+            }
+        }catch(e){
+            console.log('failed to load response headers \n%s',e);
+        }
+
+        xhr.readyState = 4;
+        xhr.status = parseInt(connection.responseCode,10) || undefined;
+        xhr.statusText = connection.responseMessage || "";
+
+        contentEncoding = connection.getContentEncoding() || "utf-8";
+        instream = null;
+        responseXML = null;
+
+        try{
+            //console.log('contentEncoding %s', contentEncoding);
+            if( contentEncoding.equalsIgnoreCase("gzip") ||
+                contentEncoding.equalsIgnoreCase("decompress")){
+                //zipped content
+                binary = true;
+                outstream = new java.io.ByteArrayOutputStream();
+                buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024);
+                instream = new java.util.zip.GZIPInputStream(connection.getInputStream())
+            }else{
+                //this is a text file
+                outstream = new java.io.StringWriter();
+                buffer = java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, 1024);
+                instream = new java.io.InputStreamReader(connection.getInputStream());
+            }
+        }catch(e){
+            if (connection.getResponseCode() == 404){
+                console.log('failed to open connection stream \n %s %s',
+                            e.toString(), e);
+            }else{
+                console.log('failed to open connection stream \n %s %s',
+                            e.toString(), e);
+            }
+            instream = connection.getErrorStream();
+        }
+
+        while ((length = instream.read(buffer, 0, 1024)) != -1) {
+            outstream.write(buffer, 0, length);
+        }
+
+        outstream.close();
+        instream.close();
+
+        if(binary){
+            xhr.responseText = new java.lang.String(outstream.toByteArray(), 'UTF-8')+'';
+        }else{
+            xhr.responseText = outstream.toString()+'';
+        }
+
+    }
+    if(responseHandler){
+        //console.log('calling ajax response handler');
+        if(!xhr.async){
+			responseHandler();
+		}else{
+		    //console.log('synchronizing ajax response handler via setTimeout');
+			setTimeout(responseHandler, 1);
+		}
+    }
+};
+
+}());
+
+
+(function(){
+
+var log = Envjs.logger('Envjs.Window.Rhino');
+
+//Since we're running in rhino I guess we can safely assume
+//java is 'enabled'.  I'm sure this requires more thought
+//than I've given it here
+Envjs.javaEnabled = true;
+
+Envjs.homedir        = java.lang.System.getProperty("user.home");
+Envjs.tmpdir         = java.lang.System.getProperty("java.io.tmpdir");
+Envjs.os_name        = java.lang.System.getProperty("os.name");
+Envjs.os_arch        = java.lang.System.getProperty("os.arch");
+Envjs.os_version     = java.lang.System.getProperty("os.version");
+Envjs.lang           = java.lang.System.getProperty("user.lang");
+
+
+Envjs.gc = function(){ gc(); };
+
+/**
+ * Makes an object window-like by proxying object accessors
+ * @param {Object} scope
+ * @param {Object} parent
+ */
+Envjs.proxy = function(scope, parent) {
+    try{
+        if(scope+'' == '[object global]'){
+            return scope;
+        }else{
+            return  __context__.initStandardObjects();
+        }
+    }catch(e){
+        console.log('failed to init standard objects %s %s \n%s', scope, parent, e);
+    }
+
+};
+
+}());
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/platform/rubyracer.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/platform/rubyracer.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/platform/rubyracer.js	(revision 76)
@@ -0,0 +1,340 @@
+var __context__ = __this__;
+
+var Envjs = Envjs ||
+	require('./core').Envjs;
+	require('local_settings');
+
+Envjs.platform       = "V8 RubyRacer";
+Envjs.revision       = Ruby.CONFIG.ruby_version;
+
+Ruby.ARGV.shift();
+Envjs.argv = Ruby.ARGV;
+
+Envjs.exit = function(){ Ruby.Process['exit!'](); };
+
+/*
+ * Envjs rubyracer-env.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    }
+    return a;
+}
+
+Envjs.log = function(msg){
+	Ruby.puts(msg);
+};
+
+Envjs.lineSource = function(e){
+    return "(line ?)";
+};
+
+var line = "";
+Envjs.readConsole = function(){
+	try{
+		line = Ruby.$stdin.gets();
+	}catch(e){
+		console.log('ERROR : %s', e);
+	}
+	return line;
+};
+
+Envjs.prompt = function(){
+  	Ruby.$stdout.write(Envjs.CURSOR+' ');
+	Ruby.$stdout.flush;
+};
+
+//No REPL for
+Envjs.repl = function(){
+	console.log('Envjs REPL Not Available');
+};
+(function(){
+
+var log = Envjs.logger('Envjs.Platform.RubyRacer');
+
+Envjs.eval = function(context, source, name){
+    if(context == __this__){
+        return __this__.eval( source );
+    }else{
+		log.debug('evaluating in proxy scope %s', context);
+	    return context.eval( source );
+    }
+};
+
+})();
+/**
+ * synchronizes thread modifications
+ * @param {Function} fn
+ */
+ Envjs.sync = function(fn){
+     //console.log('Threadless platform, sync is safe');
+     return sync(fn);
+ };
+
+ Envjs.spawn = function(fn){
+     return spawn(fn);
+ };
+
+/**
+ * sleep thread for specified duration
+ * @param {Object} milliseconds
+ */
+Envjs.sleep = function(milliseconds){
+	return Ruby.sleep(1.0*milliseconds/1000.0);
+};
+//Since we're running in spydermonkey I guess we can safely assume
+//java is not 'enabled'.  I'm sure this requires more thought
+//than I've given it here
+Envjs.javaEnabled 	 = false;
+
+Envjs.homedir        = Ruby.ENV.HOME
+Envjs.tmpdir         = Ruby.ENV.TMPDIR;
+Envjs.os_name        = Ruby.CONFIG.host_os;
+Envjs.os_arch        = Ruby.CONFIG.host_cpu;
+Envjs.os_version     = "";//part of os_arch
+Envjs.lang           = Ruby.ENV.LANG;
+
+Envjs.gc = function(){ Ruby.gc(); };
+
+/**
+ * Makes an object window-like by proxying object accessors
+ * @param {Object} scope
+ * @param {Object} parent
+ */
+Envjs.proxy = function(scope, parent) {
+    try{
+        if(scope == __this__){
+            return scope;
+        }else{
+            return new_context();
+        }
+    }catch(e){
+        console.log('failed to init standard objects %s %s \n%s', scope, parent, e);
+    }
+
+};
+(function(){
+
+var log = Envjs.logger('Envjs.XMLHttpRequest.RubyRacer');
+
+/**
+ * Get 'Current Working Directory'
+ */
+Envjs.getcwd = function() {
+    return Ruby.ENV.PWD;
+};
+
+/**
+ * Used to read the contents of a local file
+ * @param {Object} url
+ */
+Envjs.readFromFile = function( url ){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+    log.debug('reading file %s', url);
+    var file = fopen(url, 'r'),
+        data = file.read();
+    return data;
+};
+
+Envjs.writeToFile = function(text, url){
+    var file = fopen(url, 'w');
+	log.debug('writing to file %s', url);
+	file.write(text);
+	return;
+};
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} suffix
+ */
+Envjs.writeToTempFile = function(text, suffix){
+    // Create temp file.
+    var temp = Envjs.tmpdir+"."+(new Date().getTime())+(suffix||'.js');
+    log.debug("writing text to temp url : %s ", temp);
+    Envjs.writeToFile(text, temp);
+    return temp;
+};
+
+
+/**
+ * Used to read the contents of a local file
+ * @param {Object} url
+ */
+Envjs.readFromFile = function( url ){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+	log.debug('reading file %s', url);
+    var file = fopen(url, 'r'),
+		data = file.read();
+	return data;
+};
+
+
+/**
+ * Used to delete a local file
+ * @param {Object} url
+ */
+Envjs.deleteFile = function(url){
+    return ;//TODO
+};
+
+/**
+ * establishes connection and calls responsehandler
+ * @param {Object} xhr
+ * @param {Object} responseHandler
+ * @param {Object} data
+ */
+Envjs.connection = function(xhr, responseHandler, data){
+    var url = xhr.url,
+		urlparts = Envjs.urlsplit(xhr.url),
+        connection,
+		request,
+		headers,
+        header,
+        length,
+        binary = false,
+        name, value,
+        contentEncoding,
+        responseXML,
+        i;
+
+    if ( /^file\:/.test(url) ) {
+	    log.debug('establishing file connection');
+        Envjs.localXHR(url, xhr, connection, data);
+    } else {
+	    log.debug('establishing http native ruby connection %s', xhr.url);
+		try{
+
+	        connection = HTTPConnection.connect(
+				urlparts.hostname,
+				Number(urlparts.port||80)
+			);
+			log.debug('native ruby connection established %s', connection);
+
+			path = urlparts.path+(urlparts.query?'?'+urlparts.query:'');
+			request = HTTPConnection.request(xhr.method.toUpperCase(), path);
+			log.debug('request query string %s', urlparts.query);
+			log.debug('formulated %s request %s %s', xhr.method, urlparts.path, request);
+			//TODO: add gzip support
+	        //connection.putheader("Accept-Encoding", 'gzip');
+			//connection.endheaders();
+
+	        //write data to output stream if required
+			//TODO: if they have set the request header for a chunked
+			//request body, implement a chunked output stream
+	        if(data){
+	            if(data instanceof Document){
+	                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+	                    connection.send((new XMLSerializer()).serializeToString(data));
+	                }
+	            }else if(data.length&&data.length>0){
+	                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+	                    connection.send(data+'');
+	                }
+	            }
+	        }
+		}catch(e){
+			log.error("connection failed %s",e);
+			if (connection){
+				HTTPConnection.finish(connection);
+			}
+			connection = null;
+		}
+    }
+
+    if(connection){
+		log.debug('loading response from native ruby connection');
+		response = HTTPConnection.go(connection, request, xhr.headers, null);
+		log.debug('got response from native ruby connection');
+		headers = response[1];
+		response = response[0];
+        try{
+            // Stick the response headers into responseHeaders
+            for (var header in headers) {
+				log.debug('response header [%s] = %s', header, headers[header]);
+                xhr.responseHeaders[header] = headers[header];
+            }
+        }catch(e){
+            log.error('failed to load response headers \n%s',e);
+        }
+
+        xhr.readyState = 4;
+        xhr.status = parseInt(response.code,10) || undefined;
+        xhr.statusText = response.message || "";
+		log.info('%s %s %s %s', xhr.method, xhr.status, xhr.url, xhr.statusText);
+        contentEncoding = xhr.getResponseHeader('content-encoding') || "utf-8";
+        responseXML = null;
+
+        try{
+            //console.log('contentEncoding %s', contentEncoding);
+            if( contentEncoding.toLowerCase() == "gzip" ||
+                contentEncoding.toLowerCase() == "decompress"){
+                //zipped content
+                binary = true;
+				//TODO
+				log.debug('TODO: handle gzip compression');
+                xhr.responseText = response.body;
+            }else{
+                //this is a text file
+                xhr.responseText = response.body+'';
+            }
+        }catch(e){
+            log.warn('failed to open connection stream \n%s, %s %s %s',
+            	xhr.status, xhr.url, e.toString(), e
+			);
+        }finally{
+			if(connection){
+				HTTPConnection.finish(connection);
+			}
+		}
+
+
+    }
+
+    if(responseHandler){
+        log.debug('calling ajax response handler');
+        if(!xhr.async){
+			log.debug('calling sync response handler directly');
+			responseHandler();
+		}else{
+			log.debug('using setTimeout for async response handler');
+			setTimeout(responseHandler, 1);
+		}
+    }
+};
+
+})(/*Envjs.XMLHttpRequest.Johnson*/);
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/platform/spydermonkey.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/platform/spydermonkey.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/platform/spydermonkey.js	(revision 76)
@@ -0,0 +1,352 @@
+var __context__ = __this__;
+
+var Envjs = Envjs ||
+	require('./core').Envjs;
+	require('local_settings');
+
+Envjs.platform       = "SpyderMonkey";
+Envjs.revision       = sys.version.substring(0,5);
+
+Envjs.argv = []
+for(var i in sys.argv){
+    Envjs.argv.push(sys.argv[i]);
+}
+Envjs.argv.shift();
+Envjs.argv.shift();
+
+Envjs.exit = function(){
+	exit();
+};
+
+/*
+ * Envjs node-env.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    }
+    return a;
+}
+Envjs.log = print;
+
+Envjs.lineSource = function(e){
+    return "(line ?)";
+};
+
+Envjs.readConsole = function(){
+     return sys.stdin.readline();
+};
+
+Envjs.prompt = function(){
+    sys.stdout.write(Envjs.CURSOR+' ');
+    sys.stdout.flush();
+};
+
+//No REPL for
+Envjs.repl = function(){
+    console.log('Envjs REPL Not Available');
+};
+
+Envjs.eval = function(context, source, name){
+    if(context == __this__){
+        return global.execute( source );
+    }else{
+	    return context.execute( source );
+    }
+};
+
+/**
+ * synchronizes thread modifications
+ * @param {Function} fn
+ */
+Envjs.sync = function(fn){
+    /*return function(){
+        try{
+           //console.log('locking');
+           $lock.acquire();
+           fn.apply(fn, arguments);
+        }catch(e){
+            console.log('error in sync: %s',e);
+        }finally{
+           //console.log('unlocking');
+           $lock.release();
+        }
+    }*/
+    return fn;
+};
+
+Envjs.spawn = function(fn){
+    /*var t = threading.Thread();
+    t.run = function(){
+        try{
+            console.log('spawned');
+            fn.apply(fn, arguments);
+        }catch(e){
+            console.error(e);
+        }
+    }
+    return t.start();*/
+	fn();
+ };
+
+/**
+ * sleep thread for specified duration
+ * @param {Number} milliseconds
+ */
+Envjs.sleep = function(milliseconds){
+	return time.sleep(1.0*milliseconds/1000.0);
+};
+
+//Since we're running in spydermonkey I guess we can safely assume
+//java is not 'enabled'.  I'm sure this requires more thought
+//than I've given it here
+Envjs.javaEnabled = false;
+
+Envjs.homedir        = os.environ['HOME']
+Envjs.tmpdir         = os.environ['TMPDIR'];
+Envjs.os_name        = platform.system();
+Envjs.os_arch        = platform.processor();
+Envjs.os_version     = platform.release();
+Envjs.lang           = os.environ['LANG'];
+
+
+Envjs.gc = function(){ global.gc(); };
+
+/**
+ * Makes an object window-like by proxying object accessors
+ * @param {Object} scope
+ * @param {Object} parent
+ */
+Envjs.proxy = function(scope, parent) {
+    try{
+        if(scope == __this__){
+            return scope;
+        }else{
+            return new_global();
+        }
+    }catch(e){
+        console.log('failed to init standard objects %s %s \n%s', scope, parent, e);
+    }
+
+};
+
+(function(){
+
+var log = Envjs.logger('Envjs.XMLHttpRequest.SpyderMonkey');
+
+/**
+ * Get 'Current Working Directory'
+ */
+Envjs.getcwd = function() {
+    return os.getcwd();
+}
+
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} url
+ */
+Envjs.writeToFile = function(text, url){
+    var file = fopen(url, 'w');
+	file.write(text);
+	return;
+};
+
+/**
+ * Used to write to a local file
+ * @param {Object} text
+ * @param {Object} suffix
+ */
+Envjs.writeToTempFile = function(text, suffix){
+    // Create temp file.
+    var temp = Envjs.tmpdir+"."+(new Date().getTime())+(suffix||'.js');
+    log.debug("writing text to temp url : %s ", temp);
+    Envjs.writeToFile(text, temp);
+    return temp;
+};
+
+
+/**
+ * Used to read the contents of a local file
+ * @param {Object} url
+ */
+Envjs.readFromFile = function( url ){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+	log.debug('reading file %s', url);
+    var file = fopen(url, 'r'),
+		data = file.read();
+	return data;
+};
+
+
+/**
+ * Used to delete a local file
+ * @param {Object} url
+ */
+Envjs.deleteFile = function(url){
+	if(/^file\:\/\//.test(url))
+		url = url.substring(7,url.length);
+	log.debug('deleting file %s', url);
+    return os.delete(url);
+};
+
+/**
+ * establishes connection and calls responsehandler
+ * @param {Object} xhr
+ * @param {Object} responseHandler
+ * @param {Object} data
+ */
+Envjs.connection = function(xhr, responseHandler, data){
+    var url = xhr.url,
+		urlparts = Envjs.urlsplit(xhr.url),
+        connection,
+		request,
+        header,
+        length,
+        binary = false,
+        name, value,
+        contentEncoding,
+        responseXML,
+        i;
+
+    if ( /^file\:/.test(url) ) {
+	    log.debug('establishing platform file connection');
+        Envjs.localXHR(url, xhr, connection, data);
+    } else {
+	    log.debug('establishing python platform network connection');
+		try{
+	        log.debug('connecting to %s \n\t port(%s) hostname(%s) path(%s) query(%s)',
+	            url, urlparts.port, urlparts.hostname, urlparts.path, urlparts.query);
+        	connection = httplib.HTTPConnection(urlparts.hostname, urlparts.port || 80);
+			connection.connect();
+			request = connection.putrequest(
+				xhr.method,
+				urlparts.path+(urlparts.query?'?'+urlparts.query:'')
+			);
+
+	        // Add headers to connection
+	        for (header in xhr.headers){
+	            log.debug('adding request header %s %s',header+'', xhr.headers[header]+'')
+	            connection.putheader(header+'', xhr.headers[header]+'');
+	        }
+			//TODO: add gzip support
+	        //connection.putheader("Accept-Encoding", 'gzip');
+			connection.endheaders();
+
+	        //write data to output stream if required
+			//TODO: if they have set the request header for a chunked
+			//request body, implement a chunked output stream
+	        if(data){
+	            if(data instanceof Document){
+	                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+	                    connection.send((new XMLSerializer()).serializeToString(data));
+	                }
+	            }else if(data.length&&data.length>0){
+	                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
+	                    connection.send(data+'');
+	                }
+	            }
+	        }
+		}catch(e){
+		    log.error('error making python native connection %s', e);
+			connection.close();
+			connection = null;
+		}
+    }
+
+    if(connection){
+        try{
+		    response = connection.getresponse();
+	        log.debug('got native platform connection response');
+            length = response.getheaders().length;
+            // Stick the response headers into responseHeaders
+            for (i = 0; i < length; i++) {
+				header = response.getheaders()[i];
+                name = header[0];
+                value = header[1];
+                if (name){
+	                log.debug('response header %s %s', name, value);
+                    xhr.responseHeaders[name+''] = value+'';
+                }
+            }
+        }catch(e){
+            console.log('failed to load response headers \n%s',e);
+        }
+
+        xhr.readyState = 4;
+        xhr.status = parseInt(response.status,10) || undefined;
+        xhr.statusText = response.reason || "";
+		log.info('%s %s %s %s', xhr.method, xhr.status, xhr.url, xhr.statusText);
+        contentEncoding = xhr.getResponseHeader('content-encoding') || "utf-8";
+        responseXML = null;
+
+        try{
+            //console.log('contentEncoding %s', contentEncoding);
+            if( contentEncoding.toLowerCase() == "gzip" ||
+                contentEncoding.toLowerCase() == "decompress"){
+                //zipped content
+                binary = true;
+				//TODO
+				console.log('TODO: handle gzip compression');
+                xhr.responseText = response.read();
+            }else{
+                //this is a text file
+                xhr.responseText = response.read();
+            }
+        }catch(e){
+            if (xhr.status == 404){
+                console.log('failed to open connection stream \n %s %s',
+                            e.toString(), e);
+            }else{
+                console.log('failed to open connection stream \n %s %s',
+                            e.toString(), e);
+            }
+        }finally{
+			connection.close();
+		}
+    }
+
+    if(responseHandler){
+        log.debug('calling ajax response handler');
+        if(!xhr.async){
+			responseHandler();
+		}else{
+			setTimeout(responseHandler, 1);
+		}
+    }
+};
+
+})(/*Envjs.Platform.SpyderMonkey*/);
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/rhino.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/rhino.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/rhino.js	(revision 76)
@@ -0,0 +1,91 @@
+// This file is compiled into the jar and executed automatically on startup.
+var __this__ = this;
+var require = (function() {
+    var cached = {};
+    var currentPath = java.lang.System.getProperty('user.dir');
+    var paths = [currentPath];
+    
+    function normalize(id) {
+		var file;
+        id = id + '.js';
+        if (/^\.\.?/.test(id)) {
+            // relative path
+            file = new java.io.File(currentPath, id);
+            if (file.isFile()) {
+                return file.toURL();
+            }
+        } else {
+            for (var i = 0, len = paths.length; i < len; ++i) {
+                file = new java.io.File(paths[i], id);
+                if (file.isFile()) {
+                    return file.toURL();
+                }
+            }
+            // try to get it from the jar as a last resort
+            /*var url = rhoop.getClass().getResource('/' + id);
+            if (url !== null) {
+                return url;
+            }*/
+        }
+        return undefined;
+    };
+    
+    function read(connection) {
+        var stream = connection.getInputStream();
+        var bytes = java.lang.reflect.Array.newInstance(
+                java.lang.Byte.TYPE, 4096);
+        var bytesStream = new java.io.ByteArrayOutputStream();
+        var bytesRead;
+        while ((bytesRead = stream.read(bytes)) >= 0) {
+            if (bytesRead > 0) {
+                bytesStream.write(bytes, 0, bytesRead);
+            }
+        }
+        return String(bytesStream.toString());
+    };
+    
+    function require(id) {
+		//print('require :'+ id);
+        var url = normalize(id);
+        if (!url) {
+            throw new Error("couldn't find module \"" + id + "\"");
+        }
+        id = String(url.toString());
+        if (!cached.hasOwnProperty(id)) {
+            var source = read(url.openConnection());
+            source = source.replace(/^\#\!.*/, '');
+            source = (
+                "(function (require, exports, module) { " + source + "\n});");
+            cached[id] = {
+                exports: {},
+                module: {
+                    id: id,
+                    uri: id
+                }
+            };
+            var previousPath = currentPath;
+            try {
+                currentPath = id.substr(0, id.lastIndexOf('/')) || '.';
+                var ctx = org.mozilla.javascript.Context.getCurrentContext();
+                var func = ctx.evaluateString({}, source, id, 1, null);
+                func(require, cached[id].exports, cached[id].module);
+            } finally {
+                currentPath = previousPath;
+            }
+        }
+		/*
+		print('returning exports for id: '+id+' '+cached[id].exports);
+		for(var prop in cached[id].exports){
+			print('export: '+prop);
+		}
+		*/
+        return cached[id].exports;
+    };
+    
+    require.paths = paths;
+    
+    return require;
+}());
+var __argv__ = arguments;
+require('./platform/rhino');
+require('./window');
Index: /Dev/trunk/d3/lib/env-js/envjs/rubyracer.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/rubyracer.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/rubyracer.js	(revision 76)
@@ -0,0 +1,72 @@
+// This file must be executed automatically on startup for ruby/v8 rubyracer support.
+var __this__ = this;
+var require = (function() {
+    var cached = {};
+    var currentPath = Ruby.ENV.PWD;
+    var paths = [currentPath];
+    
+	/*Ruby.puts("$PROGRAM_NAME " + Ruby.$PROGRAM_NAME)
+	Ruby.puts("Ruby.Config.ruby_version " + Ruby.Config.ruby_version)
+	Ruby.puts("Ruby.File " + Ruby.File)
+	Ruby.puts("Ruby.File.open " + Ruby.File.open)
+	Ruby.puts("Ruby.File equality " + (File === Ruby.File))
+	Ruby.puts("Ruby.File.open() " + Ruby.File.open('/tmp/t.tmp','r').read())*/
+	
+    function normalize(id) {
+		var file;
+        id = id + '.js';
+        if (/^\.\.?/.test(id)) {
+            // relative path
+			try{ return fopen(id, 'r') }catch(e){}
+        } else {
+            for (var i = 0, len = paths.length; i < len; ++i) {
+			    try{ return fopen(paths[i]+'/'+id, 'r') }catch(e){}
+            }
+        }
+        return undefined;
+    };
+    
+    
+    function require(id) {
+		//print('require :'+ id);
+        var file = normalize(id);
+        if (!file) {
+            throw new Error("couldn't find module \"" + id + "\"");
+        }
+        if (!cached.hasOwnProperty(id)) {
+			//print('loading '+id);
+            var source = file.read();
+            source = source.replace(/^\#\!.*/, '');
+            source = "(function (require, exports, module) { "+source+"\n});";
+            cached[id] = {
+                exports: {},
+                module: {
+                    id: id,
+                    uri: id
+                }
+            };
+            var previousPath = currentPath;
+            try {
+                currentPath = id.substr(0, id.lastIndexOf('/')) || '.';
+                var func = __this__.eval(source);
+                func(require, cached[id].exports, cached[id].module);
+            } finally {
+                currentPath = previousPath;
+            }
+        }
+		/*
+		print('returning exports for id: '+id+' '+cached[id].exports);
+		for(var prop in cached[id].exports){
+			print('export: '+prop);
+		}
+		*/
+        return cached[id].exports;
+    };
+    
+    require.paths = paths;
+    
+    return require;
+})();
+var __argv__ = Ruby.ARGV;
+require('./platform/rubyracer');
+require('./window');
Index: /Dev/trunk/d3/lib/env-js/envjs/rubyracer.rb
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/rubyracer.rb	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/rubyracer.rb	(revision 76)
@@ -0,0 +1,90 @@
+require 'v8'
+require 'net/http'
+require 'uri'
+require 'thread'
+
+include Config
+
+lock  = Mutex.new
+class Runtime
+  def new_context()
+    V8::Context.new
+  end
+  def configure_context(runtime, context)
+    ruby = {}
+    Module.included_modules.each{|m| 
+      #puts "adding module #{m}"
+      ruby[m.to_s] = m
+    }
+    Module.constants.each{|c| 
+      #puts "adding constant #{c}"
+      ruby[c.to_s] = Kernel.eval(c)
+    }
+    Kernel.global_variables.each{|g| 
+      #puts "adding global variable #{g}"
+      ruby[g.to_s] = Kernel.eval(g)
+    }
+    Kernel.methods.each{|m| 
+      #puts "adding global method #{m}"
+      ruby[m.to_s] = Kernel.method(m)
+    }
+    ruby['CONFIG'] = CONFIG
+    ruby['gc'] = lambda{ GC.start() }
+    context['Ruby']  = ruby
+    
+    context['__this__']  = context
+    context['File']      = File
+    #context['sync']      = lambda{|fn| Proc.new{|*args|lock.synchronize {fn.call(*args)}} }
+    context['sync']      = lambda{|fn| Proc.new{|*args| fn.call(*args) }}
+    #context['spawn']     = lambda{|fn| Thread.new {fn.call}}
+    context['spawn']     = lambda{|fn| fn.call}
+    context['print']     = lambda{|msg| puts msg}
+    context['fopen']     = lambda{|name, mode| File.open(name, mode)}
+    context['runtime']   = runtime
+    context['new_context']   = lambda{
+      rt = Runtime.new
+      ct = rt.new_context()
+      rt.configure_context(rt, ct)
+      ct['_eval'] = lambda{|script| ct.eval(script)}
+      ct.eval('var t = new Function(); t._eval = __this__._eval;t;') 
+    }
+    context['HTTPConnection'] = HTTPConnection.new
+  end
+end
+
+class HTTPConnection
+  def connect(host, port)
+    Net::HTTP.start(host, port)
+  end
+  def request(httpMethod, path)
+    case httpMethod
+    when "GET" then return Net::HTTP::Get.new(path) 
+    when "PUT" then return Net::HTTP::Put.new(path) 
+    when "POST" then return Net::HTTP::Post.new(path)
+    when "HEAD" then return Net::HTTP::Head.new(path)
+    when "DELETE" then return Net::HTTP::Delete.new(path)
+    else return nil
+    end
+  end
+  def go(connection, request, headers, data)
+    headers.each{|key,value| request.add_field(key,value)}
+    response, body = connection.request(request, data)
+    respheaders = Hash.new
+    response.each_header do |name, value|
+      respheaders.store(name, value)
+    end
+    response['body'] = body
+    [response, respheaders]
+  end
+  def finish(connection)
+    connection.finish if connection.started?
+  end
+end
+
+runtime = Runtime.new
+global = runtime.new_context()
+runtime.configure_context(runtime, global)
+envjs = ARGV[0]
+global.load(envjs)
+
+
Index: /Dev/trunk/d3/lib/env-js/envjs/spydermonkey.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/spydermonkey.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/spydermonkey.js	(revision 76)
@@ -0,0 +1,64 @@
+// This file must be executed automatically on startup for ruby/v8 rubyracer support.
+var __this__ = this;
+var require = (function() {
+    var cached = {};
+    var currentPath = os.getcwd();
+    var paths = [currentPath];
+    
+    function normalize(id) {
+		var file;
+        id = id + '.js';
+        if (/^\.\.?/.test(id)) {
+            // relative path
+			try{ return fopen(id, 'r') }catch(e){}
+        } else {
+            for (var i = 0, len = paths.length; i < len; ++i) {
+			    try{ return fopen(paths[i]+'/'+id, 'r') }catch(e){}
+            }
+        }
+        return undefined;
+    };
+    
+    
+    function require(id) {
+		//print('require :'+ id);
+        var file = normalize(id);
+        if (!file) {
+            throw new Error("couldn't find module \"" + id + "\"");
+        }
+        if (!cached.hasOwnProperty(id)) {
+			//print('loading '+id);
+            var source = file.read();
+            source = source.replace(/^\#\!.*/, '');
+            source = "(function (require, exports, module) { "+source+"\n});";
+            cached[id] = {
+                exports: {},
+                module: {
+                    id: id,
+                    uri: id
+                }
+            };
+            var previousPath = currentPath;
+            try {
+                currentPath = id.substr(0, id.lastIndexOf('/')) || '.';
+                var func = global.execute( source );
+                func(require, cached[id].exports, cached[id].module);
+            } finally {
+                currentPath = previousPath;
+            }
+        }
+		/*
+		print('returning exports for id: '+id+' '+cached[id].exports);
+		for(var prop in cached[id].exports){
+			print('export: '+prop);
+		}
+		*/
+        return cached[id].exports;
+    };
+    
+    require.paths = paths;
+    
+    return require;
+})();
+require('./platform/spydermonkey');
+require('./window');
Index: /Dev/trunk/d3/lib/env-js/envjs/spydermonkey.py
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/spydermonkey.py	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/spydermonkey.py	(revision 76)
@@ -0,0 +1,56 @@
+import spidermonkey
+import threading
+import platform
+import httplib
+import time
+import sys
+import os
+
+runtime = spidermonkey.Runtime()
+context = runtime.new_context()
+lock = threading.Lock()
+        
+def load(filename):
+    script = ''
+    f = open(filename, 'r')
+    script = f.read()
+    context.execute(script)
+    
+def _print(string):
+    print string    
+    
+def _open(url, mode):
+    return open(url, mode)
+
+def _exit():
+	return os._exit(1)
+	
+def new_global():
+	nc = runtime.new_context()
+	configure_context(nc)
+	return nc.execute('''
+		this.execute = global.execute;
+		this;
+	''')
+
+def configure_context(context):  
+	context.add_global('os', os)
+	context.add_global('sys', sys)
+	context.add_global('time', time)
+	context.add_global('$lock', lock);
+	context.add_global('exit', _exit)
+	context.add_global('fopen', _open)
+	context.add_global('print', _print)
+	context.add_global('httplib', httplib)
+	context.add_global('platform', platform)
+	context.add_global('threading', threading)
+	context.add_global('global', context)
+	context.add_global('runtime', runtime)
+	context.add_global('new_global', new_global)
+
+configure_context(context)
+ 
+if __name__=='__main__':
+    argv = sys.argv
+    if os.path.isfile( argv[1] ):
+        load(argv[1])
Index: /Dev/trunk/d3/lib/env-js/envjs/window.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/window.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/window.js	(revision 76)
@@ -0,0 +1,864 @@
+/*
+ * Envjs window.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+
+This module leaks the following global definitions.
+
+var Window,
+    Screen,
+    History,
+    Navigator;
+
+ */
+
+var Envjs               = Envjs             || require('./platform/core').Envjs,
+    DOMImplementation   = DOMImplementation || require('./dom').DOMImplementation,
+    HTMLDocument        = HTMLDocument      || require('./html').HTMLDocument,
+    HTMLFrameElement    = HTMLFrameElement  || require('./html').HTMLFrameElement,
+    HTMLIFrameElement   = HTMLIFrameElement || require('./html').HTMLIFrameElement,
+    HTMLParser          = HTMLParser        || require('./parser').HTMLParser,
+    Location            = Location          || require('./xhr').Location,
+    CSSRule             = CSSRule           || require('./css').CSSRule;
+
+
+/*
+ * Envjs window.1.3.pre03
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    }
+    return a;
+}
+
+/**
+ * Frame/Window Mixin
+ */
+(function(){
+
+var log = Envjs.logger();
+Envjs.once('tick', function(){
+	log = Envjs.logger('Envjs.HTML.Frame').
+		debug('html frame logger available');
+});
+
+__extend__(HTMLFrameElement.prototype,{
+
+    set src(value){
+        var event;
+        this.setAttribute('src', value);
+		//only load if we are already appended to the dom
+        if (this.parentNode && value && value.length > 0){
+            log.debug('loading frame via set src %s', value);
+            Envjs.loadFrame(this, Envjs.uri(value, this.ownerDocument?this.ownerDocument.location+'':null));
+        }
+    }
+
+});
+
+__extend__(HTMLIFrameElement.prototype, HTMLFrameElement.prototype);
+
+}(/*Frame/Window Mixin*/));
+
+/*
+ *  TODO: Document the History object via HTML5 spec
+ *
+ */
+(function(){
+
+var log = Envjs.logger();
+Envjs.once('tick', function(){
+	log = Envjs.logger('Envjs.Window.History').
+		debug('history logger available');
+});
+
+exports.History = History = function(owner) {
+    var $current = 0,
+        $history = [null],
+        $owner = owner;
+
+    return {
+        go : function(target) {
+            if (typeof target === "number") {
+                target = $current + target;
+                if (target > -1 && target < $history.length){
+                    if ($history[target].type === "hash") {
+                        if ($owner.location) {
+                            $owner.location.hash = $history[target].value;
+                        }
+                    } else {
+                        if ($owner.location) {
+                            $owner.location = $history[target].value;
+                        }
+                    }
+                    $current = target;
+                }
+            } else {
+                //TODO: walk through the history and find the 'best match'?
+            }
+        },
+
+        get length() {
+            return $history.length;
+        },
+
+        back : function(count) {
+            if (count) {
+                this.go(-count);
+            } else {
+                this.go(-1);
+            }
+        },
+
+        get current() {
+            return this.item($current);
+        },
+
+        get previous() {
+            return this.item($current-1);
+        },
+
+        forward : function(count) {
+            if (count) {
+                this.go(count);
+            } else {
+                this.go(1);
+            }
+        },
+
+        item: function(idx) {
+            if (idx >= 0 && idx < $history.length) {
+                return $history[idx];
+            } else {
+                return null;
+            }
+        },
+
+        add: function(newLocation, type) {
+            //not a standard interface, we expose it to simplify
+            //history state modifications
+            if (newLocation !== $history[$current]) {
+                $history.slice(0, $current);
+                $history.push({
+                    type: type || 'href',
+                    value: newLocation
+                });
+            }
+        }
+    };
+};
+
+}(/*History*/));
+
+
+/*
+ *      navigator.js
+ *  Browser Navigator
+ */
+
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+	log = Envjs.logger('Envjs.Window.Navigator').
+		debug('window navigator logger available');
+});
+
+exports.Navigator = Navigator = function(){
+	var $userAgent;
+    return {
+        get appCodeName(){
+            return Envjs.appCodeName;
+        },
+        get appName(){
+            return Envjs.appName;
+        },
+        get appVersion(){
+            return Envjs.version +" ("+
+                this.platform +"; "+
+                "U; "+//?
+                Envjs.os_name+" "+Envjs.os_arch+" "+Envjs.os_version+"; "+
+                (Envjs.lang?Envjs.lang:"en-US")+"; "+
+                "rv:"+Envjs.revision+
+                ")";
+        },
+        get cookieEnabled(){
+            return true;
+        },
+        get mimeTypes(){
+            return [];
+        },
+        get platform(){
+            return Envjs.platform;
+        },
+        get plugins(){
+            return [];
+        },
+        get userAgent(){
+            return $userAgent||(this.appCodeName + "/" + this.appVersion + " Resig/20070309 PilotFish/1.3.pre03");
+        },
+		set userAgent(agent){
+			if(agent){
+				$userAgent = agent;
+			}
+		},
+        javaEnabled : function(){
+            return Envjs.javaEnabled;
+        }
+    };
+};
+
+}());
+/**
+ * Screen
+ * @param {Object} __window__
+ */
+(function(){
+
+var log = Envjs.logger();
+
+Envjs.once('tick', function(){
+	log = Envjs.logger('Envjs.Window.Screen').
+		debug('window screen logger available');
+});
+
+exports.Screen = Screen = function(__window__){
+
+    var $availHeight  = 600,
+        $availWidth   = 800,
+        $colorDepth   = 16,
+        $pixelDepth   = 24,
+        $height       = 600,
+        $width        = 800,
+        $top          = 0,
+        $left         = 0,
+        $availTop     = 0,
+        $availLeft    = 0;
+
+	log.debug('extending window with screen properties');
+    __extend__( __window__, {
+        moveBy : function(dx,dy){
+            //TODO - modify $locals to reflect change
+        },
+        moveTo : function(x,y) {
+            //TODO - modify $locals to reflect change
+        },
+        /*print : function(){
+            //TODO - good global to modify to ensure print is not misused
+        };*/
+        resizeBy : function(dw, dh){
+            __window__.resizeTo($width + dw, $height + dh);
+        },
+        resizeTo : function(width, height){
+            $width = (width <= $availWidth) ? width : $availWidth;
+            $height = (height <= $availHeight) ? height : $availHeight;
+        },
+        scroll : function(x,y){
+            //TODO - modify $locals to reflect change
+        },
+        scrollBy : function(dx, dy){
+            //TODO - modify $locals to reflect change
+        },
+        scrollTo : function(x,y){
+            //TODO - modify $locals to reflect change
+        }
+    });
+
+	log.debug('creating screen');
+    return {
+        get top(){
+            return $top;
+        },
+        get left(){
+            return $left;
+        },
+        get availTop(){
+            return $availTop;
+        },
+        get availLeft(){
+            return $availLeft;
+        },
+        get availHeight(){
+            return $availHeight;
+        },
+        get availWidth(){
+            return $availWidth;
+        },
+        get colorDepth(){
+            return $colorDepth;
+        },
+        get pixelDepth(){
+            return $pixelDepth;
+        },
+        get height(){
+            return $height;
+        },
+        get width(){
+            return $width;
+        }
+    };
+};
+
+}(/*Screen*/));
+/*
+ * Copyright (c) 2010 Nick Galbreath
+ * http://code.google.com/p/stringencoders/source/browse/#svn/trunk/javascript
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/* base64 encode/decode compatible with window.btoa/atob
+ *
+ * window.atob/btoa is a Firefox extension to convert binary data (the "b")
+ * to base64 (ascii, the "a").
+ *
+ * It is also found in Safari and Chrome.  It is not available in IE.
+ *
+ * if (!window.btoa) window.btoa = base64.encode
+ * if (!window.atob) window.atob = base64.decode
+ *
+ * The original spec's for atob/btoa are a bit lacking
+ * https://developer.mozilla.org/en/DOM/window.atob
+ * https://developer.mozilla.org/en/DOM/window.btoa
+ *
+ * window.btoa and base64.encode takes a string where charCodeAt is [0,255]
+ * If any character is not [0,255], then an DOMException(5) is thrown.
+ *
+ * window.atob and base64.decode take a base64-encoded string
+ * If the input length is not a multiple of 4, or contains invalid characters
+ *   then an DOMException(5) is thrown.
+ */
+var base64 = {};
+base64.PADCHAR = '=';
+base64.ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+base64.makeDOMException = function() {
+    // sadly in FF,Safari,Chrome you can't make a DOMException
+    var e;
+
+    try {
+        return new DOMException(DOMException.INVALID_CHARACTER_ERR);
+    } catch (tmp) {
+        // not available, just passback a duck-typed equiv
+        // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error
+        // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error/prototype
+        var ex = new Error("DOM Exception 5");
+
+        // ex.number and ex.description is IE-specific.
+        ex.code = ex.number = 5;
+        ex.name = ex.description = "INVALID_CHARACTER_ERR";
+
+        // Safari/Chrome output format
+        ex.toString = function() { return 'Error: ' + ex.name + ': ' + ex.message; };
+        return ex;
+    }
+};
+
+base64.getbyte64 = function(s,i) {
+    // This is oddly fast, except on Chrome/V8.
+    //  Minimal or no improvement in performance by using a
+    //   object with properties mapping chars to value (eg. 'A': 0)
+    var idx = base64.ALPHA.indexOf(s.charAt(i));
+    if (idx === -1) {
+        throw base64.makeDOMException();
+    }
+    return idx;
+};
+
+base64.decode = function(s) {
+    // convert to string
+    s = '' + s;
+    var getbyte64 = base64.getbyte64;
+    var pads, i, b10;
+    var imax = s.length;
+    if (imax === 0) {
+        return s;
+    }
+
+    if (imax % 4 !== 0) {
+        throw base64.makeDOMException();
+    }
+
+    pads = 0;
+    if (s.charAt(imax - 1) === base64.PADCHAR) {
+        pads = 1;
+        if (s.charAt(imax - 2) === base64.PADCHAR) {
+            pads = 2;
+        }
+        // either way, we want to ignore this last block
+        imax -= 4;
+    }
+
+    var x = [];
+    for (i = 0; i < imax; i += 4) {
+        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12) |
+            (getbyte64(s,i+2) << 6) | getbyte64(s,i+3);
+        x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 0xff, b10 & 0xff));
+    }
+
+    switch (pads) {
+    case 1:
+        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12) | (getbyte64(s,i+2) << 6);
+        x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 0xff));
+        break;
+    case 2:
+        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12);
+        x.push(String.fromCharCode(b10 >> 16));
+        break;
+    }
+    return x.join('');
+};
+
+base64.getbyte = function(s,i) {
+    var x = s.charCodeAt(i);
+    if (x > 255) {
+        throw base64.makeDOMException();
+    }
+    return x;
+};
+
+base64.encode = function(s) {
+    if (arguments.length !== 1) {
+        throw new SyntaxError("Not enough arguments");
+    }
+    var padchar = base64.PADCHAR;
+    var alpha   = base64.ALPHA;
+    var getbyte = base64.getbyte;
+
+    var i, b10;
+    var x = [];
+
+    // convert to string
+    s = '' + s;
+
+    var imax = s.length - s.length % 3;
+
+    if (s.length === 0) {
+        return s;
+    }
+    for (i = 0; i < imax; i += 3) {
+        b10 = (getbyte(s,i) << 16) | (getbyte(s,i+1) << 8) | getbyte(s,i+2);
+        x.push(alpha.charAt(b10 >> 18));
+        x.push(alpha.charAt((b10 >> 12) & 0x3F));
+        x.push(alpha.charAt((b10 >> 6) & 0x3f));
+        x.push(alpha.charAt(b10 & 0x3f));
+    }
+    switch (s.length - imax) {
+    case 1:
+        b10 = getbyte(s,i) << 16;
+        x.push(alpha.charAt(b10 >> 18) + alpha.charAt((b10 >> 12) & 0x3F) +
+               padchar + padchar);
+        break;
+    case 2:
+        b10 = (getbyte(s,i) << 16) | (getbyte(s,i+1) << 8);
+        x.push(alpha.charAt(b10 >> 18) + alpha.charAt((b10 >> 12) & 0x3F) +
+               alpha.charAt((b10 >> 6) & 0x3f) + padchar);
+        break;
+    }
+    return x.join('');
+};
+
+
+(function(){
+
+var log = Envjs.logger('Envjs.Window');
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.Window').
+        debug('window logger available');
+});
+
+//These descriptions of window properties are taken loosely David Flanagan's
+//'JavaScript - The Definitive Guide' (O'Reilly)
+
+var __top__ = function(_scope){
+    var _parent = _scope.parent;
+    while (_scope && _parent && _scope !== _parent) {
+        if (_parent === _parent.parent) {
+            break;
+        }
+        _parent = _parent.parent;
+        //console.log('scope %s _parent %s', scope, _parent);
+    }
+    return _parent || null;
+};
+
+/**
+ * Window
+ * @param {Object} scope
+ * @param {Object} parent
+ * @param {Object} opener
+ */
+exports.Window = Window = function(scope, parent, opener){
+
+    if(!scope){
+        scope = __this__;
+    }
+    if(!parent){
+        parent = scope;
+    }
+    // the window property is identical to the self property and to this obj
+    scope.__defineGetter__('window', function(){
+        return scope;
+    });
+
+    var $uuid = new Date().getTime()+'-'+Math.floor(Math.random()*1000000000000000);
+    Envjs.windows($uuid, scope);
+    //log.debug('opening window %s', $uuid);
+
+    // every window has one-and-only-one .document property which is always
+    // an [object HTMLDocument].  also, only window.document objects are
+    // html documents, all other documents created by the window.document are
+    // [object XMLDocument]
+    var $htmlImplementation =  new DOMImplementation();
+    $htmlImplementation.namespaceAware = true;
+    $htmlImplementation.errorChecking = false;
+
+    // read only reference to the Document object
+    var $document = new HTMLDocument($htmlImplementation, scope);
+
+    // A read-only reference to the Window object that contains this window
+    // or frame.  If the window is a top-level window, parent refers to
+    // the window itself.  If this window is a frame, this property refers
+    // to the window or frame that contains it.
+    var $parent = parent;
+
+    /**> $cookies - see cookie.js <*/
+    // read only boolean specifies whether the window has been closed
+    var $closed = false;
+
+    // a read/write string that specifies the default message that
+    // appears in the status line
+    var $defaultStatus = "Done";
+
+    // IE only, refers to the most recent event object - this maybe be
+    // removed after review
+    var $event = null;
+
+    // a read-only reference to the History object
+    var $history = new History();
+
+    // a read-only reference to the Location object.  the location object does
+    // expose read/write properties
+    var $location = new Location('about:blank', $document, $history);
+
+    // The name of window/frame. Set directly, when using open(), or in frameset.
+    // May be used when specifying the target attribute of links
+    var $name = null;
+
+    // a read-only reference to the Navigator object
+    var $navigator = new Navigator();
+
+    // a read/write reference to the Window object that contained the script
+    // that called open() to open this browser window.  This property is valid
+    // only for top-level window objects.
+    var $opener = opener?opener:null;
+
+    // read-only properties that specify the height and width, in pixels
+    var $innerHeight = 600, $innerWidth = 800;
+
+    // Read-only properties that specify the total height and width, in pixels,
+    // of the browser window. These dimensions include the height and width of
+    // the menu bar, toolbars, scrollbars, window borders and so on.  These
+    // properties are not supported by IE and IE offers no alternative
+    // properties;
+    var $outerHeight = $innerHeight,
+        $outerWidth = $innerWidth;
+
+    // Read-only properties that specify the number of pixels that the current
+    // document has been scrolled to the right and down.  These are not
+    // supported by IE.
+    var $pageXOffset = 0, $pageYOffset = 0;
+
+    // a read-only reference to the Screen object that specifies information
+    // about the screen: the number of available pixels and the number of
+    // available colors.
+    var $screen = new Screen(scope);
+
+    // read only properties that specify the coordinates of the upper-left
+    // corner of the screen.
+    var $screenX = 1,
+        $screenY = 1;
+    var $screenLeft = $screenX,
+        $screenTop = $screenY;
+
+    // a read/write string that specifies the current status line.
+    var $status = '';
+    __extend__(scope, EventTarget.prototype);
+
+    return __extend__( scope, {
+        get closed(){
+            return $closed;
+        },
+        get defaultStatus(){
+            return $defaultStatus;
+        },
+        set defaultStatus(defaultStatus){
+            $defaultStatus = defaultStatus;
+        },
+        get document(){
+            return $document;
+        },
+        set document(doc){
+            $document = doc;
+        },
+        /*
+        deprecated ie specific property probably not good to support
+        get event(){
+            return $event;
+        },
+        */
+        get frames(){
+            return $document.getElementsByTagName('frame');
+        },
+        get length(){
+            // should be frames.length,
+            return this.frames.length;
+        },
+        get history(){
+            return $history;
+        },
+        get innerHeight(){
+            return $innerHeight;
+        },
+        get innerWidth(){
+            return $innerWidth;
+        },
+        get clientHeight(){
+            return $innerHeight;
+        },
+        get clientWidth(){
+            return $innerWidth;
+        },
+        get location(){
+            return $location;
+        },
+        set location(url){
+            //very important or you will go into an infinite
+            //loop when creating a xml document
+            log.debug('setting window location %s', url);
+            if(url) {
+                $location.assign(Envjs.uri(url, $location+''));
+            }
+        },
+        get name(){
+            return $name;
+        },
+        set name(newName){
+            $name = newName;
+        },
+        get navigator(){
+            return $navigator;
+        },
+        get opener(){
+            return $opener;
+        },
+        get outerHeight(){
+            return $outerHeight;
+        },
+        get outerWidth(){
+            return $outerWidth;
+        },
+        get pageXOffest(){
+            return $pageXOffset;
+        },
+        get pageYOffset(){
+            return $pageYOffset;
+        },
+        get parent(){
+            return $parent;
+        },
+        get screen(){
+            return $screen;
+        },
+        get screenLeft(){
+            return $screenLeft;
+        },
+        get screenTop(){
+            return $screenTop;
+        },
+        get screenX(){
+            return $screenX;
+        },
+        get screenY(){
+            return $screenY;
+        },
+        get self(){
+            return scope;
+        },
+        get status(){
+            return $status;
+        },
+        set status(status){
+            $status = status;
+        },
+        // a read-only reference to the top-level window that contains this window.
+        // If this window is a top-level window it is simply a reference to itself.
+        // If this window is a frame, the top property refers to the top-level
+        // window that contains the frame.
+        get top(){
+            return __top__(scope);
+        },
+        get window(){
+            return this;
+        },
+        toString : function(){
+            return '[Window]';
+        },
+
+        /**
+         * getComputedStyle
+         *
+         * Firefox 3.6:
+         *  - Requires both elements to be present else an
+         *    exception is thrown.
+         *  - Returns a 'ComputedCSSStyleDeclaration' object.
+         *    while a raw element.style returns a 'CSSStyleDeclaration' object.
+         *  - Bogus input also throws exception
+         *
+         * Safari 4:
+         *  - Requires one argument (second can be MIA)
+         *  - Returns a CSSStyleDeclaration object
+         *  - if bad imput, returns null
+         *
+         * getComputedStyle should really be an "add on" from the css
+         * modules.  Unfortunately, 'window' comes way after the 'css'
+         * so css can't add it.
+         */
+        getComputedStyle: function(element, pseudoElement) {
+            return element.style;
+        },
+
+        open: function(url, name, features, replace){
+            if (features) {
+                console.log("'features argument not yet implemented");
+            }
+            var _window = Envjs.proxy({}),
+                open;
+            if(replace && name){
+                for(open in Envjs.windows()){
+                    if(open.name === name) {
+                        _window = open;
+                    }
+                }
+            }
+            var w = new Window(_window, _window, this);
+            if(name) {
+                _window.name = name;
+            }
+            _window.document.async = false;
+            _window.document.location.assign(Envjs.uri(url));
+            return _window;
+        },
+        close: function(){
+            log.debug('closing window %s', $uuid);
+            var frames = $document.getElementsByTagName('frame'),
+                iframes = $document.getElementsByTagName('iframe'),
+                i;
+            for(i=0;i<frames.length;i++){
+                Envjs.unloadFrame(frames[i]);
+            }
+            for(i=0;i<iframes.length;i++){
+                Envjs.unloadFrame(iframes[i]);
+            }
+            try{
+                Envjs.windows($uuid, null);
+            }catch(e){
+                log.error('%s',e);
+            }
+            return null;
+        },
+        alert : function(message){
+            Envjs.alert(message);
+        },
+        confirm : function(question){
+            Envjs.confirm(question);
+        },
+        prompt : function(message, defaultMsg){
+            Envjs.prompt(message, defaultMsg);
+        },
+        btoa: function(binary){
+            return base64.encode(binary);
+        },
+        atob: function(ascii){
+            return base64.decode(ascii);
+        },
+        //these should be undefined on instantiation
+        //onload: function(){},
+        //onunload: function(){},
+        focus: function(){},
+        blur: function(){},
+        get guid(){
+            return $uuid;
+        },
+        set guid(_guid){
+            $uuid = _guid;
+        }
+    });
+
+};
+
+//console.log('scheduling default window creation');
+setTimeout(function(){
+    var w = new Window(__this__);
+    log.info('[ %s ]', window.navigator.userAgent);
+},1);
+
+}(/*Window*/));
+
+
+//console.log('starting Envjs.eventLoop');
+Envjs.eventLoop();
+
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/envjs/xhr.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/envjs/xhr.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/envjs/xhr.js	(revision 76)
@@ -0,0 +1,566 @@
+
+/*
+ * Envjs xhr.1.3.pre03 
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ */
+
+//CLOSURE_START
+(function(){
+
+
+
+
+/*
+ * Envjs xhr.1.3.pre03 
+ * Pure JavaScript Browser Environment
+ * By John Resig <http://ejohn.org/> and the Envjs Team
+ * Copyright 2008-2010 John Resig, under the MIT License
+ * 
+ * Parts of the implementation originally written by Yehuda Katz.
+ * 
+ * This file simply provides the global definitions we need to 
+ * be able to correctly implement to core browser (XML)HTTPRequest 
+ * interfaces.
+
+This module leaks the following global definitions. 
+
+var Location,
+    XMLHttpRequest;
+
+ */
+
+var Envjs = Envjs || require('./platform/core').Envjs,
+	Document = Document || require('./dom').Document;
+
+/**
+ * @author john resig
+ */
+// Helper method for extending one object with another.
+function __extend__(a,b) {
+    for ( var i in b ) {
+        if(b.hasOwnProperty(i)){
+            var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
+            if ( g || s ) {
+                if ( g ) { a.__defineGetter__(i, g); }
+                if ( s ) { a.__defineSetter__(i, s); }
+            } else {
+                a[i] = b[i];
+            }
+        }
+    } 
+    return a;
+}
+
+/**
+ * These functions require network IO provided by XMLHttpRequest
+ */
+(function(){
+	
+var log = Envjs.logger();	
+Envjs.once('tick', function(){
+	log = Envjs.logger('Envjs.DOM.Document').
+		info('doc logger available');
+});
+
+__extend__(Document.prototype,{
+    load: function(url){
+        if(this.documentURI == 'about:html'){
+            this.location.assign(url);
+        }else if(this.documentURI == url){
+            this.location.reload(false);
+        }else{
+            this.location.replace(url);
+        }
+    },
+    get location(){
+        return this.ownerWindow.location;
+    },
+    set location(url){
+        //very important or you will go into an infinite
+        //loop when creating a xml document
+        this.ownerWindow.location = url;
+    }
+});
+
+}(/*Document/Location Mixin*/));
+/**
+ * Location
+ *
+ * Mozilla MDC:
+ * https://developer.mozilla.org/En/DOM/Window.location
+ * https://developer.mozilla.org/en/DOM/document.location
+ *
+ * HTML5: 6.10.4 The Location interface
+ * http://dev.w3.org/html5/spec/Overview.html#location
+ *
+ * HTML5: 2.5.3 Interfaces for URL manipulation
+ * http://dev.w3.org/html5/spec/Overview.html#url-decomposition-idl-attributes
+ * All of section 2.5 is worth reading, but 2.5.3 contains very
+ * detailed information on how getters/setter should work
+ *
+ * NOT IMPLEMENTED:
+ *  HTML5: Section 6.10.4.1 Security -- prevents scripts from another domain
+ *   from accessing most of the 'Location'
+ *  Not sure if anyone implements this in HTML4
+ */
+(function(){
+    
+var log = Envjs.logger();
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.Location').
+        debug('location logger available');
+});
+    
+exports.Location = Location = function(url, doc, history) {
+    log = log||Envjs.logger('Envjs.Location');
+    log.debug('Location url %s', url);
+    var $url = url,
+        $document = doc ? doc : null,
+        $history = history ? history : null;
+
+    var parts = Envjs.urlsplit($url);
+
+    return {
+        get hash() {
+            return parts.fragment ? '#' + parts.fragment : parts.fragment;
+        },
+        set hash(s) {
+            if (s[0] === '#') {
+                parts.fragment = s.substr(1);
+            } else {
+                parts.fragment = s;
+            }
+            $url = Envjs.urlunsplit(parts);
+            if ($history) {
+                $history.add($url, 'hash');
+            }
+        },
+
+        get host() {
+            return parts.netloc;
+        },
+        set host(s) {
+            if (!s || s === '') {
+                return;
+            }
+
+            parts.netloc = s;
+            $url = Envjs.urlunsplit(parts);
+
+            // this regenerates hostname & port
+            parts = Envjs.urlsplit($url);
+
+            if ($history) {
+                $history.add( $url, 'host');
+            }
+            this.assign($url);
+        },
+
+        get hostname() {
+            return parts.hostname;
+        },
+        set hostname(s) {
+            if (!s || s === '') {
+                return;
+            }
+
+            parts.netloc = s;
+            if (parts.port != '') {
+                parts.netloc += ':' + parts.port;
+            }
+            parts.hostname = s;
+            $url = Envjs.urlunsplit(parts);
+            if ($history) {
+                $history.add( $url, 'hostname');
+            }
+            this.assign($url);
+        },
+
+        get href() {
+            return $url;
+        },
+        set href(url) {
+            $url = url;
+            if ($history) {
+                $history.add($url, 'href');
+            }
+            this.assign($url);
+        },
+
+        get pathname() {
+            return parts.path;
+        },
+        set pathname(s) {
+            if (s[0] === '/') {
+                parts.path = s;
+            } else {
+                parts.path = '/' + s;
+            }
+            $url = Envjs.urlunsplit(parts);
+
+            if ($history) {
+                $history.add($url, 'pathname');
+            }
+            this.assign($url);
+        },
+
+        get port() {
+            // make sure it's a string
+            return '' + parts.port;
+        },
+        set port(p) {
+            // make a string
+            var s = '' + p;
+            parts.port = s;
+            parts.netloc = parts.hostname + ':' + parts.port;
+            $url = Envjs.urlunsplit(parts);
+            if ($history) {
+                $history.add( $url, 'port');
+            }
+            this.assign($url);
+        },
+
+        get protocol() {
+            return parts.scheme + ':';
+        },
+        set protocol(s) {
+            var i = s.indexOf(':');
+            if (i != -1) {
+                s = s.substr(0,i);
+            }
+            parts.scheme = s;
+            $url = Envjs.urlunsplit(parts);
+            if ($history) {
+                $history.add($url, 'protocol');
+            }
+            this.assign($url);
+        },
+
+        get search() {
+            return (parts.query) ? '?' + parts.query : parts.query;
+        },
+        set search(s) {
+            if (s[0] == '?') {
+                s = s.substr(1);
+            }
+            parts.query = s;
+            $url = Envjs.urlunsplit(parts);
+            if ($history) {
+                $history.add($url, 'search');
+            }
+            this.assign($url);
+        },
+
+        toString: function() {
+            return $url;
+        },
+
+        assign: function(url, /*non-standard*/ method, data) {
+            var _this = this,
+                xhr,
+                event;
+            method = method||"GET";
+            data = data||null;
+            log.debug('assigning %s',url);
+
+            //we can only assign if this Location is associated with a document
+            if ($document) {
+                log.debug('fetching %s (async? %s)', url, $document.async);
+                xhr = new XMLHttpRequest();
+                
+                xhr.setRequestHeader('Referer', $document.location);
+                log.debug("REFERER: %s", $document.location);
+                // TODO: make async flag a Envjs paramter
+                xhr.open(method, url, false);//$document.async);
+
+                // TODO: is there a better way to test if a node is an HTMLDocument?
+                if ($document.toString() === '[object HTMLDocument]') {
+                    //tell the xhr to not parse the document as XML
+                    log.debug('loading html document');
+                    xhr.onreadystatechange = function() {
+                        log.debug('readyState %s', xhr.readyState);
+                        if (xhr.readyState === 4) {
+                            switch(xhr.status){
+                            case 301:
+                            case 302:
+                            case 303:
+                            case 305:
+                            case 307:
+                                log.debug('status is not good for assignment %s', xhr.status);
+                                break;
+                            default:
+                                log.debug('status is good for assignment %s', xhr.status);
+                                $url = xhr.url;
+                                parts = Envjs.urlsplit($url);
+                                log.debug('new document location %s', xhr.url);
+                                Envjs.exchangeHTMLDocument($document, xhr.responseText, xhr.url);
+                            }
+                        }
+                    };
+                    try{
+                        xhr.send(data, false);//dont parse html
+                    }catch(e){
+                        log.debug('failed to load content %s', e);
+                        Envjs.exchangeHTMLDocument(
+                            $document, 
+                            "<html><head><title>Error Loading</title></head><body>"+e+"</body></html>",
+                            xhr.url
+                        );
+                    }
+                } else {
+                    //Treat as an XMLDocument
+                    xhr.onreadystatechange = function() {
+                        if (xhr.readyState === 4) {
+                            log.debug('exchanging xml content %s', e);
+                            $document = xhr.responseXML;
+                            $document.baseURI = xhr.url;
+                            if ($document.createEvent) {
+                                event = $document.createEvent('Event');
+                                event.initEvent('DOMContentLoaded');
+                                $document.dispatchEvent( event, false );
+                            }
+                        }
+                    };
+                    xhr.send();
+                }
+            }//end if($document)
+        },
+        reload: function(forceget) {
+            //for now we have no caching so just proxy to assign
+            log.debug('reloading %s',$url);
+            this.assign($url);
+        },
+        replace: function(url, /*non-standard*/ method, data) {
+            this.assign(url, method, data);
+        }
+    };
+};
+
+}(/*Location*/));
+/**
+ *
+ * @class XMLHttpRequest
+ * @author Originally implemented by Yehuda Katz
+ *
+ */
+    
+(function(){
+    
+// this implementation can be used without requiring a DOMParser
+// assuming you dont try to use it to get xml/html documents
+var domparser,
+    log = Envjs.logger();
+    
+Envjs.once('tick', function(){
+    log = Envjs.logger('Envjs.XMLHttpRequest').
+        debug('xhr logger available');
+});
+
+exports.XMLHttpRequest = XMLHttpRequest = function(){
+    this.headers = {};
+    this.responseHeaders = {};
+    this.aborted = false;//non-standard
+};
+
+// defined by the standard: http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest
+// but not provided by Firefox.  Safari and others do define it.
+XMLHttpRequest.UNSENT = 0;
+XMLHttpRequest.OPEN = 1;
+XMLHttpRequest.HEADERS_RECEIVED = 2;
+XMLHttpRequest.LOADING = 3;
+XMLHttpRequest.DONE = 4;
+
+XMLHttpRequest.prototype = {
+    open: function(method, url, async, user, password){
+        log.debug('opening xhr %s %s %s', method, url, async);
+        this.readyState = 1;
+        this.async = (async === false)?false:true;
+        this.method = method || "GET";
+        this.url = Envjs.uri(url);
+        this.onreadystatechange();
+    },
+    setRequestHeader: function(header, value){
+        this.headers[header] = value;
+    },
+    send: function(data, parsedoc/*non-standard*/, redirect_count){
+        var _this = this;
+        log.debug('sending request for url %s', this.url);
+        parsedoc = (parsedoc === undefined)?true:!!parsedoc;
+        redirect_count = (redirect_count === undefined) ? 0 : redirect_count;
+        function makeRequest(){
+            var cookie = Envjs.getCookies(_this.url),
+                redirecting = false;
+            if(cookie){
+                _this.setRequestHeader('COOKIE', cookie);
+            }
+            if(window&&window.navigator&&window.navigator.userAgent){
+                _this.setRequestHeader('User-Agent', window.navigator.userAgent);
+            }
+            
+            log.debug('establishing platform native connection %s', _this.url);
+            Envjs.connection(_this, function(){
+                log.debug('callback remove xhr from network queue');
+                Envjs.connections.removeConnection(_this);
+                if (!_this.aborted){
+                    var doc = null,
+                        domparser,
+                        cookie,
+                        contentType,
+                        location;
+                    
+                    try{
+                        cookie = _this.getResponseHeader('SET-COOKIE');
+                        if(cookie){
+                            Envjs.setCookie(_this.url, cookie);
+                        }
+                    }catch(e){
+                        log.warn("Failed to set cookie");
+                    }
+                    //console.log('status : %s', _this.status);
+                    switch(_this.status){
+                        case 301:
+                        case 302:
+                        case 303:
+                        case 305:
+                        case 307:
+                        if(_this.getResponseHeader('Location') && redirect_count < 20){
+                            //follow redirect and copy headers
+                            redirecting = true;
+                            location = _this.getResponseHeader('Location');
+                            log.debug('following %s redirect %s from %s url %s', 
+                                redirect_count, 
+                                _this.status, 
+                                _this.url, 
+                                location);
+                            _this.url = Envjs.uri(location);
+                            //remove current cookie headers to allow the redirect to determine
+                            //the currect cookie based on the new location
+                            if('Cookie' in _this.headers ){
+                                delete _this.headers.Cookie;
+                            }
+                            if('Cookie2' in _this.headers ){
+                                delete _this.headers.Cookie2;
+                            }
+                            redirect_count++;
+                            if (_this.async){
+                                //TODO: see TODO notes below
+                                Envjs.runAsync(makeRequest);
+                            }else{
+                                makeRequest();
+                            }
+                            return;
+                        }break;
+                        default:
+                        // try to parse the document if we havent explicitly set a
+                        // flag saying not to and if we can assure the text at least
+                        // starts with valid xml
+                        contentType = _this.getResponseHeader('Content-Type');
+                        log.debug("response content-type : %s", contentType);
+                        if ( parsedoc && 
+                             contentType && 
+                             contentType.indexOf('xml') > -1 &&
+                            _this.responseText.match(/^\s*</) ) {
+    
+                            domparser = domparser||new DOMParser();
+                            try {
+                                log.debug("parsing response text into xml document");
+                                doc = domparser.parseFromString(_this.responseText+"", 'text/xml');
+                            } catch(ee) {
+                                //Envjs.error('response XML does not appear to be well formed xml', e);
+                                log.error('parseerror \n%s', ee);
+                                doc = document.implementation.createDocument('','error',null);
+                                doc.appendChild(doc.createTextNode(ee+''));
+                            }
+
+                        }else{
+                            log.debug('response XML does not appear to be xml');
+                        }
+
+                        _this.__defineGetter__("responseXML", function(){
+                            return doc;
+                        });
+                            
+                    }
+                }
+            }, data);
+
+            if (!_this.aborted  && !redirecting){
+                log.debug('did not abort and not redirecting so calling onreadystatechange');
+                _this.onreadystatechange();
+            }
+
+        }//end makeRequest
+        
+        log.debug('requesting async: %s', this.url);
+        Envjs.connections.addConnection(this);
+        if (this.async){
+            //DONE: what we really need to do here is rejoin the
+            //      current thread and call onreadystatechange via
+            //      setTimeout so the callback is essentially applied
+            //      at the end of the current callstack
+            Envjs.runAsync(makeRequest);
+        }else{
+            log.debug('requesting sync: %s', this.url);
+            makeRequest();
+        }
+    },
+    abort: function(){
+        this.aborted = true;
+    },
+    onreadystatechange: function(){
+        //Instance specific
+    },
+    getResponseHeader: function(header){
+        log.debug('getting response header %s', header);
+        var rHeader, returnedHeaders;
+        if (this.readyState < 3){
+            throw new Error("INVALID_STATE_ERR");
+        } else {
+            returnedHeaders = [];
+            log.debug('searching response headers for %s ', header);
+            for (rHeader in this.responseHeaders) {
+                if ((rHeader+'').match(new RegExp(header, "i"))) {
+                    log.debug('found response header, %s is %s', rHeader, header);
+                    returnedHeaders.push(this.responseHeaders[rHeader]);
+                }
+            }
+
+            if (returnedHeaders.length){
+                returnedHeaders = returnedHeaders.join(", ");
+                log.debug('got response header %s', returnedHeaders);
+                return returnedHeaders;
+            }
+        }   
+        return null;
+    },
+    getAllResponseHeaders: function(){
+        var header, returnedHeaders = [];
+        if (this.readyState < 3){
+            throw new Error("INVALID_STATE_ERR");
+        } else {
+            for (header in this.responseHeaders) {
+                if(this.responseHeader.hasOwnProperty(header)){
+                    returnedHeaders.push( header + ": " + this.responseHeaders[header] );
+                }
+            }
+        }
+        return returnedHeaders.join("\r\n");
+    },
+    async: true,
+    readyState: 0,
+    responseText: "",
+    status: 0,
+    statusText: ""
+};
+
+}(/*XMLHttpREquest*/));
+/**
+ * @author john resig & the envjs team
+ * @uri http://www.envjs.com/
+ * @copyright 2008-2010
+ * @license MIT
+ */
+//CLOSURE_END
+}());
Index: /Dev/trunk/d3/lib/env-js/local_settings.js
===================================================================
--- /Dev/trunk/d3/lib/env-js/local_settings.js	(revision 76)
+++ /Dev/trunk/d3/lib/env-js/local_settings.js	(revision 76)
@@ -0,0 +1,39 @@
+
+/**
+ *  This file provides local settings you'll need to modify to make sure
+ *  envjs platform tests can function properly.  Dont modify this
+ *  file directly, copy it to local_settings.js and then modify it so
+ *  as not to commit your local settings back to the repo.
+ */
+
+var SETTINGS = { 
+    BASE_URI : 'file:///mnt/repos/thatcher/env-js/',
+    AJAX_BASE: 'http://github.com/thatcher/env-js/raw/master/',
+    LOCAL_PORT: '8080',
+    APP_CONTEXT: '/env-js/'
+}; 
+
+
+Envjs.config('logging',[
+	{category:'Envjs.Core',  				level:'WARN'},
+	{category:'Envjs.Core.REPL',        	level:'WARN'},
+	{category:'Envjs.DOM',  				level:'WARN'},
+	{category:'Envjs.DOM.Node',  			level:'WARN'},
+	{category:'Envjs.DOM.NodeList',  		level:'WARN'},
+	{category:'Envjs.DOM.NamedNodeMap', 	level:'WARN'},
+	{category:'Envjs.DOM.NamespacedNodeMap',level:'WARN'},
+	{category:'Envjs.DOM.Element',  		level:'WARN'},
+	{category:'Envjs.DOM.Document',  		level:'WARN'},
+	{category:'Envjs.DOM.EventTarget',  	level:'WARN'},
+	{category:'Envjs.Timer',            	level:'WARN'},
+	{category:'Envjs.Location',  			level:'WARN'},
+	{category:'Envjs.XMLHttpRequest',  		level:'INFO'},
+	{category:'Envjs.Parser',  	        	level:'WARN'},
+	{category:'Envjs.Parser.HTMLParser',	level:'WARN'},
+	{category:'Envjs.Parser.XMLParser', 	level:'WARN'},
+	{category:'Envjs.HTML.Frame',			level:'WARN'},
+	{category:'Envjs.Window',  				level:'WARN'},
+	{category:'Envjs.Platform',  			level:'WARN'},
+	{category:'Envjs.Platform.Johnson',   	level:'WARN'},
+	{category:'root', 		 				level:'WARN'}
+]);
Index: /Dev/trunk/d3/lib/jit/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/jit/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/jit/LICENSE	(revision 76)
@@ -0,0 +1,27 @@
+Copyright (c) 2010, Nicolas Garcia Belmonte
+All rights reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the organization nor the names of its contributors may
+  be used to endorse or promote products derived from this software without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY NICOLAS GARCIA BELMONTE ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+EVENT SHALL NICOLAS GARCIA BELMONTE BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: /Dev/trunk/d3/lib/jquery-ui/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/jquery-ui/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/jquery-ui/LICENSE	(revision 76)
@@ -0,0 +1,25 @@
+Copyright (c) 2010 Paul Bakaus, http://jqueryui.com/
+
+This software consists of voluntary contributions made by many
+individuals (AUTHORS.txt, http://jqueryui.com/about) For exact
+contribution history, see the revision history and logs, available
+at http://jquery-ui.googlecode.com/svn/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: /Dev/trunk/d3/lib/jquery-ui/jquery-ui.css
===================================================================
--- /Dev/trunk/d3/lib/jquery-ui/jquery-ui.css	(revision 76)
+++ /Dev/trunk/d3/lib/jquery-ui/jquery-ui.css	(revision 76)
@@ -0,0 +1,318 @@
+/*
+ * jQuery UI CSS Framework 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
+.ui-widget-content a { color: #333333; }
+.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
+.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
+ * jQuery UI Slider 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }
Index: /Dev/trunk/d3/lib/jquery-ui/jquery-ui.min.js
===================================================================
--- /Dev/trunk/d3/lib/jquery-ui/jquery-ui.min.js	(revision 76)
+++ /Dev/trunk/d3/lib/jquery-ui/jquery-ui.min.js	(revision 76)
@@ -0,0 +1,83 @@
+/*!
+ * jQuery UI 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.6",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
+NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
+"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
+if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
+"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
+d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
+c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
+b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
+a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
+e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
+this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
+widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
+enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*!
+ * jQuery UI Mouse 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&
+this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();
+return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&
+this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-
+a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+;/*
+ * jQuery UI Slider 1.8.6
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");b.disabled&&this.element.addClass("ui-slider-disabled ui-disabled");
+this.range=d([]);if(b.range){if(b.range===true){this.range=d("<div></div>");if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}else this.range=d("<div></div>");this.range.appendTo(this.element).addClass("ui-slider-range");if(b.range==="min"||b.range==="max")this.range.addClass("ui-slider-range-"+b.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
+if(b.values&&b.values.length)for(;d(".ui-slider-handle",this.element).length<b.values.length;)d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();
+else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!a.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
+false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");h=a._start(c,f);if(h===false)return}break}i=a.options.step;h=a.options.values&&a.options.values.length?(g=a.values(f)):(g=a.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=a._valueMin();break;case d.ui.keyCode.END:g=a._valueMax();break;case d.ui.keyCode.PAGE_UP:g=a._trimAlignValue(h+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=a._trimAlignValue(h-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h===
+a._valueMax())return;g=a._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===a._valueMin())return;g=a._trimAlignValue(h-i);break}a._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(c,e);a._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
+this._mouseDestroy();return this},_mouseCapture:function(a){var b=this.options,c,e,f,h,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(b.range===true&&this.values(1)===b.min){g+=1;f=d(this.handles[g])}if(this._start(a,
+g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();b=f.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-f.width()/2,top:a.pageY-b.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
+this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
+this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
+c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var e;if(this.options.values&&this.options.values.length){e=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>e||b===1&&c<e))c=e;if(c!==this.values(b)){e=this.values();e[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
+a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
+this._trimAlignValue(a);this._refreshValue();this._change(null,0)}return this._value()},values:function(a,b){var c,e,f;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):this.value();
+else return this._values()},_setOption:function(a,b){var c,e=0;if(d.isArray(this.options.values))e=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
+return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<this._valueMin())return this._valueMin();if(a>this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=a%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
+this.options.range,b=this.options,c=this,e=!this._animateOff?b.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({width:f-
+g+"%"},{queue:false,duration:b.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:b.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},
+b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.6"})})(jQuery);
+;
Index: /Dev/trunk/d3/lib/jquery/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/jquery/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/jquery/LICENSE	(revision 76)
@@ -0,0 +1,20 @@
+Copyright (c) 2010 John Resig, http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: /Dev/trunk/d3/lib/jquery/jquery.js
===================================================================
--- /Dev/trunk/d3/lib/jquery/jquery.js	(revision 76)
+++ /Dev/trunk/d3/lib/jquery/jquery.js	(revision 76)
@@ -0,0 +1,6883 @@
+/*!
+ * jQuery JavaScript Library v1.4.3
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Oct 14 23:10:06 2010 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// A simple way to check for HTML strings or ID strings
+	// (both of which we optimize for)
+	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
+
+	// Is it a simple selector
+	isSimple = /^.[^:#\[\.,]*$/,
+
+	// Check if a string has a non-whitespace character in it
+	rnotwhite = /\S/,
+	rwhite = /\s/,
+
+	// Used for trimming whitespace
+	trimLeft = /^\s+/,
+	trimRight = /\s+$/,
+
+	// Check for non-word characters
+	rnonword = /\W/,
+
+	// Check for digits
+	rdigit = /\d/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+	// Useragent RegExp
+	rwebkit = /(webkit)[ \/]([\w.]+)/,
+	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+	rmsie = /(msie) ([\w.]+)/,
+	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+	// Keep a UserAgent string for use with jQuery.browser
+	userAgent = navigator.userAgent,
+
+	// For matching the engine and version of the browser
+	browserMatch,
+	
+	// Has the ready events already been bound?
+	readyBound = false,
+	
+	// The functions to execute on DOM ready
+	readyList = [],
+
+	// The ready event handler
+	DOMContentLoaded,
+
+	// Save a reference to some core methods
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	push = Array.prototype.push,
+	slice = Array.prototype.slice,
+	trim = String.prototype.trim,
+	indexOf = Array.prototype.indexOf,
+	
+	// [[Class]] -> type pairs
+	class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+	init: function( selector, context ) {
+		var match, elem, ret, doc;
+
+		// Handle $(""), $(null), or $(undefined)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle $(DOMElement)
+		if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+		}
+		
+		// The body element only exists once, optimize finding it
+		if ( selector === "body" && !context && document.body ) {
+			this.context = document;
+			this[0] = document.body;
+			this.selector = "body";
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			// Are we dealing with HTML string or an ID?
+			match = quickExpr.exec( selector );
+
+			// Verify a match, and that no context was specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					doc = (context ? context.ownerDocument || context : document);
+
+					// If a single string is passed in and it's a single tag
+					// just do a createElement and skip the rest
+					ret = rsingleTag.exec( selector );
+
+					if ( ret ) {
+						if ( jQuery.isPlainObject( context ) ) {
+							selector = [ document.createElement( ret[1] ) ];
+							jQuery.fn.attr.call( selector, context, true );
+
+						} else {
+							selector = [ doc.createElement( ret[1] ) ];
+						}
+
+					} else {
+						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+						selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
+					}
+					
+					return jQuery.merge( this, selector );
+					
+				// HANDLE: $("#id")
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $("TAG")
+			} else if ( !context && !rnonword.test( selector ) ) {
+				this.selector = selector;
+				this.context = document;
+				selector = document.getElementsByTagName( selector );
+				return jQuery.merge( this, selector );
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return (context || rootjQuery).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return jQuery( context ).find( selector );
+			}
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if (selector.selector !== undefined) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The current version of jQuery being used
+	jquery: "1.4.3",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return slice.call( this, 0 );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems, name, selector ) {
+		// Build a new jQuery matched element set
+		var ret = jQuery();
+
+		if ( jQuery.isArray( elems ) ) {
+			push.apply( ret, elems );
+		
+		} else {
+			jQuery.merge( ret, elems );
+		}
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		ret.context = this.context;
+
+		if ( name === "find" ) {
+			ret.selector = this.selector + (this.selector ? " " : "") + selector;
+		} else if ( name ) {
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
+		}
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+	
+	ready: function( fn ) {
+		// Attach the listeners
+		jQuery.bindReady();
+
+		// If the DOM is already ready
+		if ( jQuery.isReady ) {
+			// Execute the function immediately
+			fn.call( document, jQuery );
+
+		// Otherwise, remember the function for later
+		} else if ( readyList ) {
+			// Add the function to the wait list
+			readyList.push( fn );
+		}
+
+		return this;
+	},
+	
+	eq: function( i ) {
+		return i === -1 ?
+			this.slice( i ) :
+			this.slice( i, +i + 1 );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ),
+			"slice", slice.call(arguments).join(",") );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+	
+	end: function() {
+		return this.prevObject || jQuery(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	// copy reference to target object
+	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy, copyIsArray;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		window.$ = _$;
+
+		if ( deep ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+	
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+	
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+		// A third-party is pushing the ready event forwards
+		if ( wait === true ) {
+			jQuery.readyWait--;
+		}
+
+		// Make sure that the DOM is not already loaded
+		if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+			if ( !document.body ) {
+				return setTimeout( jQuery.ready, 1 );
+			}
+
+			// Remember that the DOM is ready
+			jQuery.isReady = true;
+
+			// If a normal DOM Ready event fired, decrement, and wait if need be
+			if ( wait !== true && --jQuery.readyWait > 0 ) {
+				return;
+			}
+
+			// If there are functions bound, to execute
+			if ( readyList ) {
+				// Execute all of them
+				var fn, i = 0;
+				while ( (fn = readyList[ i++ ]) ) {
+					fn.call( document, jQuery );
+				}
+
+				// Reset the list of functions
+				readyList = null;
+			}
+
+			// Trigger any bound ready events
+			if ( jQuery.fn.triggerHandler ) {
+				jQuery( document ).triggerHandler( "ready" );
+			}
+		}
+	},
+	
+	bindReady: function() {
+		if ( readyBound ) {
+			return;
+		}
+
+		readyBound = true;
+
+		// Catch cases where $(document).ready() is called after the
+		// browser event has already occurred.
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			return setTimeout( jQuery.ready, 1 );
+		}
+
+		// Mozilla, Opera and webkit nightlies currently support this event
+		if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+			
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else if ( document.attachEvent ) {
+			// ensure firing before onload,
+			// maybe late but safe also for iframes
+			document.attachEvent("onreadystatechange", DOMContentLoaded);
+			
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var toplevel = false;
+
+			try {
+				toplevel = window.frameElement == null;
+			} catch(e) {}
+
+			if ( document.documentElement.doScroll && toplevel ) {
+				doScrollCheck();
+			}
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	// A crude way of determining if an object is a window
+	isWindow: function( obj ) {
+		return obj && typeof obj === "object" && "setInterval" in obj;
+	},
+
+	isNaN: function( obj ) {
+		return obj == null || !rdigit.test( obj ) || isNaN( obj );
+	},
+
+	type: function( obj ) {
+		return obj == null ?
+			String( obj ) :
+			class2type[ toString.call(obj) ] || "object";
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+		
+		// Not own constructor property must be Object
+		if ( obj.constructor &&
+			!hasOwn.call(obj, "constructor") &&
+			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+			return false;
+		}
+		
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+	
+		var key;
+		for ( key in obj ) {}
+		
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		for ( var name in obj ) {
+			return false;
+		}
+		return true;
+	},
+	
+	error: function( msg ) {
+		throw msg;
+	},
+	
+	parseJSON: function( data ) {
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+		
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( rvalidchars.test(data.replace(rvalidescape, "@")
+			.replace(rvalidtokens, "]")
+			.replace(rvalidbraces, "")) ) {
+
+			// Try to use the native JSON parser first
+			return window.JSON && window.JSON.parse ?
+				window.JSON.parse( data ) :
+				(new Function("return " + data))();
+
+		} else {
+			jQuery.error( "Invalid JSON: " + data );
+		}
+	},
+
+	noop: function() {},
+
+	// Evalulates a script in a global context
+	globalEval: function( data ) {
+		if ( data && rnotwhite.test(data) ) {
+			// Inspired by code by Andrea Giammarchi
+			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+			var head = document.getElementsByTagName("head")[0] || document.documentElement,
+				script = document.createElement("script");
+
+			script.type = "text/javascript";
+
+			if ( jQuery.support.scriptEval ) {
+				script.appendChild( document.createTextNode( data ) );
+			} else {
+				script.text = data;
+			}
+
+			// Use insertBefore instead of appendChild to circumvent an IE6 bug.
+			// This arises when a base node is used (#2709).
+			head.insertBefore( script, head.firstChild );
+			head.removeChild( script );
+		}
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+	},
+
+	// args is for internal usage only
+	each: function( object, callback, args ) {
+		var name, i = 0,
+			length = object.length,
+			isObj = length === undefined || jQuery.isFunction(object);
+
+		if ( args ) {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.apply( object[ name ], args ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.apply( object[ i++ ], args ) === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( var value = object[0];
+					i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
+			}
+		}
+
+		return object;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: trim ?
+		function( text ) {
+			return text == null ?
+				"" :
+				trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( array, results ) {
+		var ret = results || [];
+
+		if ( array != null ) {
+			// The window, strings (and functions) also have 'length'
+			// The extra typeof function check is to prevent crashes
+			// in Safari 2 (See: #3039)
+			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+			var type = jQuery.type(array);
+
+			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+				push.call( ret, array );
+			} else {
+				jQuery.merge( ret, array );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, array ) {
+		if ( array.indexOf ) {
+			return array.indexOf( elem );
+		}
+
+		for ( var i = 0, length = array.length; i < length; i++ ) {
+			if ( array[ i ] === elem ) {
+				return i;
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var i = first.length, j = 0;
+
+		if ( typeof second.length === "number" ) {
+			for ( var l = second.length; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+		
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var ret = [], retVal;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var ret = [], value;
+
+		// Go through the array, translating each of the items to their
+		// new value (or values).
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			value = callback( elems[ i ], i, arg );
+
+			if ( value != null ) {
+				ret[ ret.length ] = value;
+			}
+		}
+
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	proxy: function( fn, proxy, thisObject ) {
+		if ( arguments.length === 2 ) {
+			if ( typeof proxy === "string" ) {
+				thisObject = fn;
+				fn = thisObject[ proxy ];
+				proxy = undefined;
+
+			} else if ( proxy && !jQuery.isFunction( proxy ) ) {
+				thisObject = proxy;
+				proxy = undefined;
+			}
+		}
+
+		if ( !proxy && fn ) {
+			proxy = function() {
+				return fn.apply( thisObject || this, arguments );
+			};
+		}
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		if ( fn ) {
+			proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+		}
+
+		// So proxy can be declared as an argument
+		return proxy;
+	},
+
+	// Mutifunctional method to get and set values to a collection
+	// The value/s can be optionally by executed if its a function
+	access: function( elems, key, value, exec, fn, pass ) {
+		var length = elems.length;
+	
+		// Setting many attributes
+		if ( typeof key === "object" ) {
+			for ( var k in key ) {
+				jQuery.access( elems, k, key[k], exec, fn, value );
+			}
+			return elems;
+		}
+	
+		// Setting one attribute
+		if ( value !== undefined ) {
+			// Optionally, function values get executed if exec is true
+			exec = !pass && exec && jQuery.isFunction(value);
+		
+			for ( var i = 0; i < length; i++ ) {
+				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+			}
+		
+			return elems;
+		}
+	
+		// Getting an attribute
+		return length ? fn( elems[0], key ) : undefined;
+	},
+
+	now: function() {
+		return (new Date()).getTime();
+	},
+
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	uaMatch: function( ua ) {
+		ua = ua.toLowerCase();
+
+		var match = rwebkit.exec( ua ) ||
+			ropera.exec( ua ) ||
+			rmsie.exec( ua ) ||
+			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+			[];
+
+		return { browser: match[1] || "", version: match[2] || "0" };
+	},
+
+	browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+	jQuery.browser[ browserMatch.browser ] = true;
+	jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+	jQuery.browser.safari = true;
+}
+
+if ( indexOf ) {
+	jQuery.inArray = function( elem, array ) {
+		return indexOf.call( array, elem );
+	};
+}
+
+// Verify that \s matches non-breaking spaces
+// (IE fails on this test)
+if ( !rwhite.test( "\xA0" ) ) {
+	trimLeft = /^[\s\xA0]+/;
+	trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+	DOMContentLoaded = function() {
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+		jQuery.ready();
+	};
+
+} else if ( document.attachEvent ) {
+	DOMContentLoaded = function() {
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( document.readyState === "complete" ) {
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+	if ( jQuery.isReady ) {
+		return;
+	}
+
+	try {
+		// If IE is used, use the trick by Diego Perini
+		// http://javascript.nwbox.com/IEContentLoaded/
+		document.documentElement.doScroll("left");
+	} catch(e) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+// Expose jQuery to the global object
+return (window.jQuery = window.$ = jQuery);
+
+})();
+
+
+(function() {
+
+	jQuery.support = {};
+
+	var root = document.documentElement,
+		script = document.createElement("script"),
+		div = document.createElement("div"),
+		id = "script" + jQuery.now();
+
+	div.style.display = "none";
+	div.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+	var all = div.getElementsByTagName("*"),
+		a = div.getElementsByTagName("a")[0],
+		select = document.createElement("select"),
+		opt = select.appendChild( document.createElement("option") );
+
+	// Can't get basic test support
+	if ( !all || !all.length || !a ) {
+		return;
+	}
+
+	jQuery.support = {
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: div.firstChild.nodeType === 3,
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText insted)
+		style: /red/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: a.getAttribute("href") === "/a",
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.55$/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Make sure that if no value is specified for a checkbox
+		// that it defaults to "on".
+		// (WebKit defaults to "" instead)
+		checkOn: div.getElementsByTagName("input")[0].value === "on",
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Will be defined later
+		optDisabled: false,
+		checkClone: false,
+		scriptEval: false,
+		noCloneEvent: true,
+		boxModel: null,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableHiddenOffsets: true
+	};
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as diabled)
+	select.disabled = true;
+	jQuery.support.optDisabled = !opt.disabled;
+
+	script.type = "text/javascript";
+	try {
+		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
+	} catch(e) {}
+
+	root.insertBefore( script, root.firstChild );
+
+	// Make sure that the execution of code works by injecting a script
+	// tag with appendChild/createTextNode
+	// (IE doesn't support this, fails, and uses .text instead)
+	if ( window[ id ] ) {
+		jQuery.support.scriptEval = true;
+		delete window[ id ];
+	}
+
+	root.removeChild( script );
+
+	if ( div.attachEvent && div.fireEvent ) {
+		div.attachEvent("onclick", function click() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			jQuery.support.noCloneEvent = false;
+			div.detachEvent("onclick", click);
+		});
+		div.cloneNode(true).fireEvent("onclick");
+	}
+
+	div = document.createElement("div");
+	div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
+
+	var fragment = document.createDocumentFragment();
+	fragment.appendChild( div.firstChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
+
+	// Figure out if the W3C box model works as expected
+	// document.body must exist before we can do this
+	jQuery(function() {
+		var div = document.createElement("div");
+		div.style.width = div.style.paddingLeft = "1px";
+
+		document.body.appendChild( div );
+		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
+
+		if ( "zoom" in div.style ) {
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			// (IE < 8 does this)
+			div.style.display = "inline";
+			div.style.zoom = 1;
+			jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2;
+
+			// Check if elements with layout shrink-wrap their children
+			// (IE 6 does this)
+			div.style.display = "";
+			div.innerHTML = "<div style='width:4px;'></div>";
+			jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2;
+		}
+
+		div.innerHTML = "<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";
+		var tds = div.getElementsByTagName("td");
+
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		// (only IE 8 fails this test)
+		jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0;
+
+		tds[0].style.display = "";
+		tds[1].style.display = "none";
+
+		// Check if empty table cells still have offsetWidth/Height
+		// (IE < 8 fail this test)
+		jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0;
+		div.innerHTML = "";
+
+		document.body.removeChild( div ).style.display = "none";
+		div = tds = null;
+	});
+
+	// Technique from Juriy Zaytsev
+	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+	var eventSupported = function( eventName ) {
+		var el = document.createElement("div");
+		eventName = "on" + eventName;
+
+		var isSupported = (eventName in el);
+		if ( !isSupported ) {
+			el.setAttribute(eventName, "return;");
+			isSupported = typeof el[eventName] === "function";
+		}
+		el = null;
+
+		return isSupported;
+	};
+
+	jQuery.support.submitBubbles = eventSupported("submit");
+	jQuery.support.changeBubbles = eventSupported("change");
+
+	// release memory in IE
+	root = script = div = all = a = null;
+})();
+
+jQuery.props = {
+	"for": "htmlFor",
+	"class": "className",
+	readonly: "readOnly",
+	maxlength: "maxLength",
+	cellspacing: "cellSpacing",
+	rowspan: "rowSpan",
+	colspan: "colSpan",
+	tabindex: "tabIndex",
+	usemap: "useMap",
+	frameborder: "frameBorder"
+};
+
+
+
+
+var windowData = {},
+	rbrace = /^(?:\{.*\}|\[.*\])$/;
+
+jQuery.extend({
+	cache: {},
+
+	// Please use with caution
+	uuid: 0,
+
+	// Unique for each copy of jQuery on the page	
+	expando: "jQuery" + jQuery.now(),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	data: function( elem, name, data ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		elem = elem == window ?
+			windowData :
+			elem;
+
+		var isNode = elem.nodeType,
+			id = isNode ? elem[ jQuery.expando ] : null,
+			cache = jQuery.cache, thisCache;
+
+		if ( isNode && !id && typeof name === "string" && data === undefined ) {
+			return;
+		}
+
+		// Get the data from the object directly
+		if ( !isNode ) {
+			cache = elem;
+
+		// Compute a unique ID for the element
+		} else if ( !id ) {
+			elem[ jQuery.expando ] = id = ++jQuery.uuid;
+		}
+
+		// Avoid generating a new cache unless none exists and we
+		// want to manipulate it.
+		if ( typeof name === "object" ) {
+			if ( isNode ) {
+				cache[ id ] = jQuery.extend(cache[ id ], name);
+
+			} else {
+				jQuery.extend( cache, name );
+			}
+
+		} else if ( isNode && !cache[ id ] ) {
+			cache[ id ] = {};
+		}
+
+		thisCache = isNode ? cache[ id ] : cache;
+
+		// Prevent overriding the named cache with undefined values
+		if ( data !== undefined ) {
+			thisCache[ name ] = data;
+		}
+
+		return typeof name === "string" ? thisCache[ name ] : thisCache;
+	},
+
+	removeData: function( elem, name ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		elem = elem == window ?
+			windowData :
+			elem;
+
+		var isNode = elem.nodeType,
+			id = isNode ? elem[ jQuery.expando ] : elem,
+			cache = jQuery.cache,
+			thisCache = isNode ? cache[ id ] : id;
+
+		// If we want to remove a specific section of the element's data
+		if ( name ) {
+			if ( thisCache ) {
+				// Remove the section of cache data
+				delete thisCache[ name ];
+
+				// If we've removed all the data, remove the element's cache
+				if ( isNode && jQuery.isEmptyObject(thisCache) ) {
+					jQuery.removeData( elem );
+				}
+			}
+
+		// Otherwise, we want to remove all of the element's data
+		} else {
+			if ( isNode && jQuery.support.deleteExpando ) {
+				delete elem[ jQuery.expando ];
+
+			} else if ( elem.removeAttribute ) {
+				elem.removeAttribute( jQuery.expando );
+
+			// Completely remove the data cache
+			} else if ( isNode ) {
+				delete cache[ id ];
+
+			// Remove all fields from the object
+			} else {
+				for ( var n in elem ) {
+					delete elem[ n ];
+				}
+			}
+		}
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		if ( elem.nodeName ) {
+			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+			if ( match ) {
+				return !(match === true || elem.getAttribute("classid") !== match);
+			}
+		}
+
+		return true;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		if ( typeof key === "undefined" ) {
+			return this.length ? jQuery.data( this[0] ) : null;
+
+		} else if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		var parts = key.split(".");
+		parts[1] = parts[1] ? "." + parts[1] : "";
+
+		if ( value === undefined ) {
+			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+			// Try to fetch any internally stored data first
+			if ( data === undefined && this.length ) {
+				data = jQuery.data( this[0], key );
+
+				// If nothing was found internally, try to fetch any
+				// data from the HTML5 data-* attribute
+				if ( data === undefined && this[0].nodeType === 1 ) {
+					data = this[0].getAttribute( "data-" + key );
+
+					if ( typeof data === "string" ) {
+						try {
+							data = data === "true" ? true :
+								data === "false" ? false :
+								data === "null" ? null :
+								!jQuery.isNaN( data ) ? parseFloat( data ) :
+								rbrace.test( data ) ? jQuery.parseJSON( data ) :
+								data;
+						} catch( e ) {}
+
+					} else {
+						data = undefined;
+					}
+				}
+			}
+
+			return data === undefined && parts[1] ?
+				this.data( parts[0] ) :
+				data;
+
+		} else {
+			return this.each(function() {
+				var $this = jQuery( this ), args = [ parts[0], value ];
+
+				$this.triggerHandler( "setData" + parts[1] + "!", args );
+				jQuery.data( this, key, value );
+				$this.triggerHandler( "changeData" + parts[1] + "!", args );
+			});
+		}
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+
+
+
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		if ( !elem ) {
+			return;
+		}
+
+		type = (type || "fx") + "queue";
+		var q = jQuery.data( elem, type );
+
+		// Speed up dequeue by getting out quickly if this is just a lookup
+		if ( !data ) {
+			return q || [];
+		}
+
+		if ( !q || jQuery.isArray(data) ) {
+			q = jQuery.data( elem, type, jQuery.makeArray(data) );
+
+		} else {
+			q.push( data );
+		}
+
+		return q;
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ), fn = queue.shift();
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+		}
+
+		if ( fn ) {
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift("inprogress");
+			}
+
+			fn.call(elem, function() {
+				jQuery.dequeue(elem, type);
+			});
+		}
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+		}
+
+		if ( data === undefined ) {
+			return jQuery.queue( this[0], type );
+		}
+		return this.each(function( i ) {
+			var queue = jQuery.queue( this, type, data );
+
+			if ( type === "fx" && queue[0] !== "inprogress" ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function() {
+			var elem = this;
+			setTimeout(function() {
+				jQuery.dequeue( elem, type );
+			}, time );
+		});
+	},
+
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	}
+});
+
+
+
+
+var rclass = /[\n\t]/g,
+	rspaces = /\s+/,
+	rreturn = /\r/g,
+	rspecialurl = /^(?:href|src|style)$/,
+	rtype = /^(?:button|input)$/i,
+	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+	rclickable = /^a(?:rea)?$/i,
+	rradiocheck = /^(?:radio|checkbox)$/i;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.attr );
+	},
+
+	removeAttr: function( name, fn ) {
+		return this.each(function(){
+			jQuery.attr( this, name, "" );
+			if ( this.nodeType === 1 ) {
+				this.removeAttribute( name );
+			}
+		});
+	},
+
+	addClass: function( value ) {
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.addClass( value.call(this, i, self.attr("class")) );
+			});
+		}
+
+		if ( value && typeof value === "string" ) {
+			var classNames = (value || "").split( rspaces );
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 ) {
+					if ( !elem.className ) {
+						elem.className = value;
+
+					} else {
+						var className = " " + elem.className + " ", setClass = elem.className;
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+								setClass += " " + classNames[c];
+							}
+						}
+						elem.className = jQuery.trim( setClass );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.removeClass( value.call(this, i, self.attr("class")) );
+			});
+		}
+
+		if ( (value && typeof value === "string") || value === undefined ) {
+			var classNames = (value || "").split( rspaces );
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 && elem.className ) {
+					if ( value ) {
+						var className = (" " + elem.className + " ").replace(rclass, " ");
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							className = className.replace(" " + classNames[c] + " ", " ");
+						}
+						elem.className = jQuery.trim( className );
+
+					} else {
+						elem.className = "";
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value, isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className, i = 0, self = jQuery(this),
+					state = stateVal,
+					classNames = value.split( rspaces );
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space seperated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery.data( this, "__className__", this.className );
+				}
+
+				// toggle whole className
+				this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ";
+		for ( var i = 0, l = this.length; i < l; i++ ) {
+			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		if ( !arguments.length ) {
+			var elem = this[0];
+
+			if ( elem ) {
+				if ( jQuery.nodeName( elem, "option" ) ) {
+					// attributes.value is undefined in Blackberry 4.7 but
+					// uses .value. See #6932
+					var val = elem.attributes.value;
+					return !val || val.specified ? elem.value : elem.text;
+				}
+
+				// We need to handle select boxes special
+				if ( jQuery.nodeName( elem, "select" ) ) {
+					var index = elem.selectedIndex,
+						values = [],
+						options = elem.options,
+						one = elem.type === "select-one";
+
+					// Nothing was selected
+					if ( index < 0 ) {
+						return null;
+					}
+
+					// Loop through all the selected options
+					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+						var option = options[ i ];
+
+						// Don't return options that are disabled or in a disabled optgroup
+						if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && 
+								(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+							// Get the specific value for the option
+							value = jQuery(option).val();
+
+							// We don't need an array for one selects
+							if ( one ) {
+								return value;
+							}
+
+							// Multi-Selects return an array
+							values.push( value );
+						}
+					}
+
+					return values;
+				}
+
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
+					return elem.getAttribute("value") === null ? "on" : elem.value;
+				}
+				
+
+				// Everything else, we just grab the value
+				return (elem.value || "").replace(rreturn, "");
+
+			}
+
+			return undefined;
+		}
+
+		var isFunction = jQuery.isFunction(value);
+
+		return this.each(function(i) {
+			var self = jQuery(this), val = value;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call(this, i, self.val());
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray(val) ) {
+				val = jQuery.map(val, function (value) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
+				this.checked = jQuery.inArray( self.val(), val ) >= 0;
+
+			} else if ( jQuery.nodeName( this, "select" ) ) {
+				var values = jQuery.makeArray(val);
+
+				jQuery( "option", this ).each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					this.selectedIndex = -1;
+				}
+
+			} else {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	attrFn: {
+		val: true,
+		css: true,
+		html: true,
+		text: true,
+		data: true,
+		width: true,
+		height: true,
+		offset: true
+	},
+		
+	attr: function( elem, name, value, pass ) {
+		// don't set attributes on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return undefined;
+		}
+
+		if ( pass && name in jQuery.attrFn ) {
+			return jQuery(elem)[name](value);
+		}
+
+		var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
+			// Whether we are setting (or getting)
+			set = value !== undefined;
+
+		// Try to normalize/fix the name
+		name = notxml && jQuery.props[ name ] || name;
+
+		// Only do all the following if this is a node (faster for style)
+		if ( elem.nodeType === 1 ) {
+			// These attributes require special treatment
+			var special = rspecialurl.test( name );
+
+			// Safari mis-reports the default selected property of an option
+			// Accessing the parent's selectedIndex property fixes it
+			if ( name === "selected" && !jQuery.support.optSelected ) {
+				var parent = elem.parentNode;
+				if ( parent ) {
+					parent.selectedIndex;
+	
+					// Make sure that it also works with optgroups, see #5701
+					if ( parent.parentNode ) {
+						parent.parentNode.selectedIndex;
+					}
+				}
+			}
+
+			// If applicable, access the attribute via the DOM 0 way
+			// 'in' checks fail in Blackberry 4.7 #6931
+			if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
+				if ( set ) {
+					// We can't allow the type property to be changed (since it causes problems in IE)
+					if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
+						jQuery.error( "type property can't be changed" );
+					}
+
+					if ( value === null ) {
+						if ( elem.nodeType === 1 ) {
+							elem.removeAttribute( name );
+						}
+
+					} else {
+						elem[ name ] = value;
+					}
+				}
+
+				// browsers index elements by id/name on forms, give priority to attributes.
+				if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
+					return elem.getAttributeNode( name ).nodeValue;
+				}
+
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				if ( name === "tabIndex" ) {
+					var attributeNode = elem.getAttributeNode( "tabIndex" );
+
+					return attributeNode && attributeNode.specified ?
+						attributeNode.value :
+						rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+							0 :
+							undefined;
+				}
+
+				return elem[ name ];
+			}
+
+			if ( !jQuery.support.style && notxml && name === "style" ) {
+				if ( set ) {
+					elem.style.cssText = "" + value;
+				}
+
+				return elem.style.cssText;
+			}
+
+			if ( set ) {
+				// convert the value to a string (all browsers do this but IE) see #1070
+				elem.setAttribute( name, "" + value );
+			}
+
+			// Ensure that missing attributes return undefined
+			// Blackberry 4.7 returns "" from getAttribute #6938
+			if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
+				return undefined;
+			}
+
+			var attr = !jQuery.support.hrefNormalized && notxml && special ?
+					// Some attributes require a special call on IE
+					elem.getAttribute( name, 2 ) :
+					elem.getAttribute( name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return attr === null ? undefined : attr;
+		}
+	}
+});
+
+
+
+
+var rnamespaces = /\.(.*)$/,
+	rformElems = /^(?:textarea|input|select)$/i,
+	rperiod = /\./g,
+	rspace = / /g,
+	rescape = /[^\w\s.|`]/g,
+	fcleanup = function( nm ) {
+		return nm.replace(rescape, "\\$&");
+	},
+	focusCounts = { focusin: 0, focusout: 0 };
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+	// Bind an event to an element
+	// Original by Dean Edwards
+	add: function( elem, types, handler, data ) {
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// For whatever reason, IE has trouble passing the window object
+		// around, causing it to be cloned in the process
+		if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) {
+			elem = window;
+		}
+
+		if ( handler === false ) {
+			handler = returnFalse;
+		}
+
+		var handleObjIn, handleObj;
+
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+		}
+
+		// Make sure that the function being executed has a unique ID
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure
+		var elemData = jQuery.data( elem );
+
+		// If no elemData is found then we must be trying to bind to one of the
+		// banned noData elements
+		if ( !elemData ) {
+			return;
+		}
+
+		// Use a key less likely to result in collisions for plain JS objects.
+		// Fixes bug #7150.
+		var eventKey = elem.nodeType ? "events" : "__events__",
+			events = elemData[ eventKey ],
+			eventHandle = elemData.handle;
+			
+		if ( typeof events === "function" ) {
+			// On plain objects events is a fn that holds the the data
+			// which prevents this data from being JSON serialized
+			// the function does not need to be called, it just contains the data
+			eventHandle = events.handle;
+			events = events.events;
+
+		} else if ( !events ) {
+			if ( !elem.nodeType ) {
+				// On plain objects, create a fn that acts as the holder
+				// of the values to avoid JSON serialization of event data
+				elemData[ eventKey ] = elemData = function(){};
+			}
+
+			elemData.events = events = {};
+		}
+
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function() {
+				// Handle the second event of a trigger and when
+				// an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
+					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+		}
+
+		// Add elem as a property of the handle function
+		// This is to prevent a memory leak with non-native events in IE.
+		eventHandle.elem = elem;
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		var type, i = 0, namespaces;
+
+		while ( (type = types[ i++ ]) ) {
+			handleObj = handleObjIn ?
+				jQuery.extend({}, handleObjIn) :
+				{ handler: handler, data: data };
+
+			// Namespaced event handlers
+			if ( type.indexOf(".") > -1 ) {
+				namespaces = type.split(".");
+				type = namespaces.shift();
+				handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+			} else {
+				namespaces = [];
+				handleObj.namespace = "";
+			}
+
+			handleObj.type = type;
+			if ( !handleObj.guid ) {
+				handleObj.guid = handler.guid;
+			}
+
+			// Get the current list of functions bound to this event
+			var handlers = events[ type ],
+				special = jQuery.event.special[ type ] || {};
+
+			// Init the event handler queue
+			if ( !handlers ) {
+				handlers = events[ type ] = [];
+
+				// Check for a special event handler
+				// Only use addEventListener/attachEvent if the special
+				// events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+			
+			if ( special.add ) { 
+				special.add.call( elem, handleObj ); 
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add the function to the element's handler list
+			handlers.push( handleObj );
+
+			// Keep track of which events have been used, for global triggering
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	global: {},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, pos ) {
+		// don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		if ( handler === false ) {
+			handler = returnFalse;
+		}
+
+		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+			eventKey = elem.nodeType ? "events" : "__events__",
+			elemData = jQuery.data( elem ),
+			events = elemData && elemData[ eventKey ];
+
+		if ( !elemData || !events ) {
+			return;
+		}
+		
+		if ( typeof events === "function" ) {
+			elemData = events;
+			events = events.events;
+		}
+
+		// types is actually an event object here
+		if ( types && types.type ) {
+			handler = types.handler;
+			types = types.type;
+		}
+
+		// Unbind all events for the element
+		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+			types = types || "";
+
+			for ( type in events ) {
+				jQuery.event.remove( elem, type + types );
+			}
+
+			return;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).unbind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		while ( (type = types[ i++ ]) ) {
+			origType = type;
+			handleObj = null;
+			all = type.indexOf(".") < 0;
+			namespaces = [];
+
+			if ( !all ) {
+				// Namespaced event handlers
+				namespaces = type.split(".");
+				type = namespaces.shift();
+
+				namespace = new RegExp("(^|\\.)" + 
+					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
+			}
+
+			eventType = events[ type ];
+
+			if ( !eventType ) {
+				continue;
+			}
+
+			if ( !handler ) {
+				for ( j = 0; j < eventType.length; j++ ) {
+					handleObj = eventType[ j ];
+
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						jQuery.event.remove( elem, origType, handleObj.handler, j );
+						eventType.splice( j--, 1 );
+					}
+				}
+
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+
+			for ( j = pos || 0; j < eventType.length; j++ ) {
+				handleObj = eventType[ j ];
+
+				if ( handler.guid === handleObj.guid ) {
+					// remove the given handler for the given type
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						if ( pos == null ) {
+							eventType.splice( j--, 1 );
+						}
+
+						if ( special.remove ) {
+							special.remove.call( elem, handleObj );
+						}
+					}
+
+					if ( pos != null ) {
+						break;
+					}
+				}
+			}
+
+			// remove generic event handler if no more handlers exist
+			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				ret = null;
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			var handle = elemData.handle;
+			if ( handle ) {
+				handle.elem = null;
+			}
+
+			delete elemData.events;
+			delete elemData.handle;
+
+			if ( typeof elemData === "function" ) {
+				jQuery.removeData( elem, eventKey );
+
+			} else if ( jQuery.isEmptyObject( elemData ) ) {
+				jQuery.removeData( elem );
+			}
+		}
+	},
+
+	// bubbling is internal
+	trigger: function( event, data, elem /*, bubbling */ ) {
+		// Event object or event type
+		var type = event.type || event,
+			bubbling = arguments[3];
+
+		if ( !bubbling ) {
+			event = typeof event === "object" ?
+				// jQuery.Event object
+				event[ jQuery.expando ] ? event :
+				// Object literal
+				jQuery.extend( jQuery.Event(type), event ) :
+				// Just the event type (string)
+				jQuery.Event(type);
+
+			if ( type.indexOf("!") >= 0 ) {
+				event.type = type = type.slice(0, -1);
+				event.exclusive = true;
+			}
+
+			// Handle a global trigger
+			if ( !elem ) {
+				// Don't bubble custom events when global (to avoid too much overhead)
+				event.stopPropagation();
+
+				// Only trigger if we've ever bound an event for it
+				if ( jQuery.event.global[ type ] ) {
+					jQuery.each( jQuery.cache, function() {
+						if ( this.events && this.events[type] ) {
+							jQuery.event.trigger( event, data, this.handle.elem );
+						}
+					});
+				}
+			}
+
+			// Handle triggering a single element
+
+			// don't do events on text and comment nodes
+			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+				return undefined;
+			}
+
+			// Clean up in case it is reused
+			event.result = undefined;
+			event.target = elem;
+
+			// Clone the incoming data, if any
+			data = jQuery.makeArray( data );
+			data.unshift( event );
+		}
+
+		event.currentTarget = elem;
+
+		// Trigger the event, it is assumed that "handle" is a function
+		var handle = elem.nodeType ?
+			jQuery.data( elem, "handle" ) :
+			(jQuery.data( elem, "__events__" ) || {}).handle;
+
+		if ( handle ) {
+			handle.apply( elem, data );
+		}
+
+		var parent = elem.parentNode || elem.ownerDocument;
+
+		// Trigger an inline bound script
+		try {
+			if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
+				if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
+					event.result = false;
+					event.preventDefault();
+				}
+			}
+
+		// prevent IE from throwing an error for some elements with some event types, see #3533
+		} catch (inlineError) {}
+
+		if ( !event.isPropagationStopped() && parent ) {
+			jQuery.event.trigger( event, data, parent, true );
+
+		} else if ( !event.isDefaultPrevented() ) {
+			var target = event.target, old, targetType = type.replace(rnamespaces, ""),
+				isClick = jQuery.nodeName(target, "a") && targetType === "click",
+				special = jQuery.event.special[ targetType ] || {};
+
+			if ( (!special._default || special._default.call( elem, event ) === false) && 
+				!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
+
+				try {
+					if ( target[ targetType ] ) {
+						// Make sure that we don't accidentally re-trigger the onFOO events
+						old = target[ "on" + targetType ];
+
+						if ( old ) {
+							target[ "on" + targetType ] = null;
+						}
+
+						jQuery.event.triggered = true;
+						target[ targetType ]();
+					}
+
+				// prevent IE from throwing an error for some elements with some event types, see #3533
+				} catch (triggerError) {}
+
+				if ( old ) {
+					target[ "on" + targetType ] = old;
+				}
+
+				jQuery.event.triggered = false;
+			}
+		}
+	},
+
+	handle: function( event ) {
+		var all, handlers, namespaces, namespace_sort = [], namespace_re, events, args = jQuery.makeArray( arguments );
+
+		event = args[0] = jQuery.event.fix( event || window.event );
+		event.currentTarget = this;
+
+		// Namespaced event handlers
+		all = event.type.indexOf(".") < 0 && !event.exclusive;
+
+		if ( !all ) {
+			namespaces = event.type.split(".");
+			event.type = namespaces.shift();
+			namespace_sort = namespaces.slice(0).sort();
+			namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)");
+		}
+
+		event.namespace = event.namespace || namespace_sort.join(".");
+
+		events = jQuery.data(this, this.nodeType ? "events" : "__events__");
+
+		if ( typeof events === "function" ) {
+			events = events.events;
+		}
+
+		handlers = (events || {})[ event.type ];
+
+		if ( events && handlers ) {
+			// Clone the handlers to prevent manipulation
+			handlers = handlers.slice(0);
+
+			for ( var j = 0, l = handlers.length; j < l; j++ ) {
+				var handleObj = handlers[ j ];
+
+				// Filter the functions by class
+				if ( all || namespace_re.test( handleObj.namespace ) ) {
+					// Pass in a reference to the handler function itself
+					// So that we can later remove it
+					event.handler = handleObj.handler;
+					event.data = handleObj.data;
+					event.handleObj = handleObj;
+	
+					var ret = handleObj.handler.apply( this, args );
+
+					if ( ret !== undefined ) {
+						event.result = ret;
+						if ( ret === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+
+					if ( event.isImmediatePropagationStopped() ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// store a copy of the original event object
+		// and "clone" to set read-only properties
+		var originalEvent = event;
+		event = jQuery.Event( originalEvent );
+
+		for ( var i = this.props.length, prop; i; ) {
+			prop = this.props[ --i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Fix target property, if necessary
+		if ( !event.target ) {
+			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+		}
+
+		// check if target is a textnode (safari)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Add relatedTarget, if necessary
+		if ( !event.relatedTarget && event.fromElement ) {
+			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+		}
+
+		// Calculate pageX/Y if missing and clientX/Y available
+		if ( event.pageX == null && event.clientX != null ) {
+			var doc = document.documentElement, body = document.body;
+			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
+		}
+
+		// Add which for key events
+		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
+			event.which = event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+		if ( !event.metaKey && event.ctrlKey ) {
+			event.metaKey = event.ctrlKey;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		// Note: button is not normalized, so don't use it
+		if ( !event.which && event.button !== undefined ) {
+			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+		}
+
+		return event;
+	},
+
+	// Deprecated, use jQuery.guid instead
+	guid: 1E8,
+
+	// Deprecated, use jQuery.proxy instead
+	proxy: jQuery.proxy,
+
+	special: {
+		ready: {
+			// Make sure the ready event is setup
+			setup: jQuery.bindReady,
+			teardown: jQuery.noop
+		},
+
+		live: {
+			add: function( handleObj ) {
+				jQuery.event.add( this,
+					liveConvert( handleObj.origType, handleObj.selector ),
+					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); 
+			},
+
+			remove: function( handleObj ) {
+				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+			}
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( jQuery.isWindow( this ) ) {
+					this.onbeforeunload = eventHandle;
+				}
+			},
+
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} : 
+	function( elem, type, handle ) {
+		if ( elem.detachEvent ) {
+			elem.detachEvent( "on" + type, handle );
+		}
+	};
+
+jQuery.Event = function( src ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !this.preventDefault ) {
+		return new jQuery.Event( src );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// timeStamp is buggy for some events on Firefox(#3843)
+	// So we won't rely on the native value
+	this.timeStamp = jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+	return false;
+}
+function returnTrue() {
+	return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	preventDefault: function() {
+		this.isDefaultPrevented = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		
+		// if preventDefault exists run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// otherwise set the returnValue property of the original event to false (IE)
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		this.isPropagationStopped = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		// if stopPropagation exists run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+		// otherwise set the cancelBubble property of the original event to true (IE)
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	},
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+	// Check if mouse(over|out) are still within the same parent element
+	var parent = event.relatedTarget;
+
+	// Firefox sometimes assigns relatedTarget a XUL element
+	// which we cannot access the parentNode property of
+	try {
+		// Traverse up the tree
+		while ( parent && parent !== this ) {
+			parent = parent.parentNode;
+		}
+
+		if ( parent !== this ) {
+			// set the correct event type
+			event.type = event.data;
+
+			// handle event if we actually just moused on to a non sub-element
+			jQuery.event.handle.apply( this, arguments );
+		}
+
+	// assuming we've left the element since we most likely mousedover a xul element
+	} catch(e) { }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+	event.type = event.data;
+	jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		setup: function( data ) {
+			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+		},
+		teardown: function( data ) {
+			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+		}
+	};
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function( data, namespaces ) {
+			if ( this.nodeName.toLowerCase() !== "form" ) {
+				jQuery.event.add(this, "click.specialSubmit", function( e ) {
+					var elem = e.target, type = elem.type;
+
+					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+						e.liveFired = undefined;
+						return trigger( "submit", this, arguments );
+					}
+				});
+	 
+				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+					var elem = e.target, type = elem.type;
+
+					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+						e.liveFired = undefined;
+						return trigger( "submit", this, arguments );
+					}
+				});
+
+			} else {
+				return false;
+			}
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialSubmit" );
+		}
+	};
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+	var changeFilters,
+
+	getVal = function( elem ) {
+		var type = elem.type, val = elem.value;
+
+		if ( type === "radio" || type === "checkbox" ) {
+			val = elem.checked;
+
+		} else if ( type === "select-multiple" ) {
+			val = elem.selectedIndex > -1 ?
+				jQuery.map( elem.options, function( elem ) {
+					return elem.selected;
+				}).join("-") :
+				"";
+
+		} else if ( elem.nodeName.toLowerCase() === "select" ) {
+			val = elem.selectedIndex;
+		}
+
+		return val;
+	},
+
+	testChange = function testChange( e ) {
+		var elem = e.target, data, val;
+
+		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
+			return;
+		}
+
+		data = jQuery.data( elem, "_change_data" );
+		val = getVal(elem);
+
+		// the current data will be also retrieved by beforeactivate
+		if ( e.type !== "focusout" || elem.type !== "radio" ) {
+			jQuery.data( elem, "_change_data", val );
+		}
+		
+		if ( data === undefined || val === data ) {
+			return;
+		}
+
+		if ( data != null || val ) {
+			e.type = "change";
+			e.liveFired = undefined;
+			return jQuery.event.trigger( e, arguments[1], elem );
+		}
+	};
+
+	jQuery.event.special.change = {
+		filters: {
+			focusout: testChange, 
+
+			beforedeactivate: testChange,
+
+			click: function( e ) {
+				var elem = e.target, type = elem.type;
+
+				if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
+					return testChange.call( this, e );
+				}
+			},
+
+			// Change has to be called before submit
+			// Keydown will be called before keypress, which is used in submit-event delegation
+			keydown: function( e ) {
+				var elem = e.target, type = elem.type;
+
+				if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
+					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+					type === "select-multiple" ) {
+					return testChange.call( this, e );
+				}
+			},
+
+			// Beforeactivate happens also before the previous element is blurred
+			// with this event you can't trigger a change event, but you can store
+			// information
+			beforeactivate: function( e ) {
+				var elem = e.target;
+				jQuery.data( elem, "_change_data", getVal(elem) );
+			}
+		},
+
+		setup: function( data, namespaces ) {
+			if ( this.type === "file" ) {
+				return false;
+			}
+
+			for ( var type in changeFilters ) {
+				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+			}
+
+			return rformElems.test( this.nodeName );
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialChange" );
+
+			return rformElems.test( this.nodeName );
+		}
+	};
+
+	changeFilters = jQuery.event.special.change.filters;
+
+	// Handle when the input is .focus()'d
+	changeFilters.focus = changeFilters.beforeactivate;
+}
+
+function trigger( type, elem, args ) {
+	args[0].type = type;
+	return jQuery.event.handle.apply( elem, args );
+}
+
+// Create "bubbling" focus and blur events
+if ( document.addEventListener ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( focusCounts[fix]++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			}, 
+			teardown: function() { 
+				if ( --focusCounts[fix] === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+
+		function handler( e ) { 
+			e = jQuery.event.fix( e );
+			e.type = fix;
+			return jQuery.event.trigger( e, null, e.target );
+		}
+	});
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+	jQuery.fn[ name ] = function( type, data, fn ) {
+		// Handle object literals
+		if ( typeof type === "object" ) {
+			for ( var key in type ) {
+				this[ name ](key, data, type[key], fn);
+			}
+			return this;
+		}
+		
+		if ( jQuery.isFunction( data ) || data === false ) {
+			fn = data;
+			data = undefined;
+		}
+
+		var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
+			jQuery( this ).unbind( event, handler );
+			return fn.apply( this, arguments );
+		}) : fn;
+
+		if ( type === "unload" && name !== "one" ) {
+			this.one( type, data, fn );
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.add( this[i], type, handler, data );
+			}
+		}
+
+		return this;
+	};
+});
+
+jQuery.fn.extend({
+	unbind: function( type, fn ) {
+		// Handle object literals
+		if ( typeof type === "object" && !type.preventDefault ) {
+			for ( var key in type ) {
+				this.unbind(key, type[key]);
+			}
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.remove( this[i], type, fn );
+			}
+		}
+
+		return this;
+	},
+	
+	delegate: function( selector, types, data, fn ) {
+		return this.live( types, data, fn, selector );
+	},
+	
+	undelegate: function( selector, types, fn ) {
+		if ( arguments.length === 0 ) {
+				return this.unbind( "live" );
+		
+		} else {
+			return this.die( types, null, fn, selector );
+		}
+	},
+	
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+
+	triggerHandler: function( type, data ) {
+		if ( this[0] ) {
+			var event = jQuery.Event( type );
+			event.preventDefault();
+			event.stopPropagation();
+			jQuery.event.trigger( event, data, this[0] );
+			return event.result;
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments, i = 1;
+
+		// link all the functions, so any of them can unbind this click handler
+		while ( i < args.length ) {
+			jQuery.proxy( fn, args[ i++ ] );
+		}
+
+		return this.click( jQuery.proxy( fn, function( event ) {
+			// Figure out which function to execute
+			var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+			jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+			// Make sure that clicks stop
+			event.preventDefault();
+
+			// and execute the function
+			return args[ lastToggle ].apply( this, arguments ) || false;
+		}));
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+var liveMap = {
+	focus: "focusin",
+	blur: "focusout",
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+		var type, i = 0, match, namespaces, preType,
+			selector = origSelector || this.selector,
+			context = origSelector ? this : jQuery( this.context );
+		
+		if ( typeof types === "object" && !types.preventDefault ) {
+			for ( var key in types ) {
+				context[ name ]( key, data, types[key], selector );
+			}
+			
+			return this;
+		}
+
+		if ( jQuery.isFunction( data ) ) {
+			fn = data;
+			data = undefined;
+		}
+
+		types = (types || "").split(" ");
+
+		while ( (type = types[ i++ ]) != null ) {
+			match = rnamespaces.exec( type );
+			namespaces = "";
+
+			if ( match )  {
+				namespaces = match[0];
+				type = type.replace( rnamespaces, "" );
+			}
+
+			if ( type === "hover" ) {
+				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+				continue;
+			}
+
+			preType = type;
+
+			if ( type === "focus" || type === "blur" ) {
+				types.push( liveMap[ type ] + namespaces );
+				type = type + namespaces;
+
+			} else {
+				type = (liveMap[ type ] || type) + namespaces;
+			}
+
+			if ( name === "live" ) {
+				// bind live handler
+				for ( var j = 0, l = context.length; j < l; j++ ) {
+					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+				}
+
+			} else {
+				// unbind live handler
+				context.unbind( "live." + liveConvert( type, selector ), fn );
+			}
+		}
+		
+		return this;
+	};
+});
+
+function liveHandler( event ) {
+	var stop, maxLevel, elems = [], selectors = [],
+		related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+		events = jQuery.data( this, this.nodeType ? "events" : "__events__" );
+
+	if ( typeof events === "function" ) {
+		events = events.events;
+	}
+
+	// Make sure we avoid non-left-click bubbling in Firefox (#3861)
+	if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
+		return;
+	}
+
+	if ( event.namespace ) {
+		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+	}
+
+	event.liveFired = this;
+
+	var live = events.live.slice(0);
+
+	for ( j = 0; j < live.length; j++ ) {
+		handleObj = live[j];
+
+		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+			selectors.push( handleObj.selector );
+
+		} else {
+			live.splice( j--, 1 );
+		}
+	}
+
+	match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+	for ( i = 0, l = match.length; i < l; i++ ) {
+		close = match[i];
+
+		for ( j = 0; j < live.length; j++ ) {
+			handleObj = live[j];
+
+			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) {
+				elem = close.elem;
+				related = null;
+
+				// Those two events require additional checking
+				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+					event.type = handleObj.preType;
+					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+				}
+
+				if ( !related || related !== elem ) {
+					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+				}
+			}
+		}
+	}
+
+	for ( i = 0, l = elems.length; i < l; i++ ) {
+		match = elems[i];
+
+		if ( maxLevel && match.level > maxLevel ) {
+			break;
+		}
+
+		event.currentTarget = match.elem;
+		event.data = match.handleObj.data;
+		event.handleObj = match.handleObj;
+
+		ret = match.handleObj.origHandler.apply( match.elem, arguments );
+
+		if ( ret === false || event.isPropagationStopped() ) {
+			maxLevel = match.level;
+
+			if ( ret === false ) {
+				stop = false;
+			}
+		}
+	}
+
+	return stop;
+}
+
+function liveConvert( type, selector ) {
+	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		if ( fn == null ) {
+			fn = data;
+			data = null;
+		}
+
+		return arguments.length > 0 ?
+			this.bind( name, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( jQuery.attrFn ) {
+		jQuery.attrFn[ name ] = true;
+	}
+});
+
+// Prevent memory leaks in IE
+// Window isn't included so as not to unbind existing unload events
+// More info:
+//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/
+if ( window.attachEvent && !window.addEventListener ) {
+	jQuery(window).bind("unload", function() {
+		for ( var id in jQuery.cache ) {
+			if ( jQuery.cache[ id ].handle ) {
+				// Try/Catch is to handle iframes being unloaded, see #4280
+				try {
+					jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+				} catch(e) {}
+			}
+		}
+	});
+}
+
+
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+	done = 0,
+	toString = Object.prototype.toString,
+	hasDuplicate = false,
+	baseHasDuplicate = true;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function(){
+	baseHasDuplicate = false;
+	return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+	results = results || [];
+	context = context || document;
+
+	var origContext = context;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+	
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),
+		soFar = selector, ret, cur, pop, i;
+	
+	// Reset the position of the chunker regexp (start from head)
+	do {
+		chunker.exec("");
+		m = chunker.exec(soFar);
+
+		if ( m ) {
+			soFar = m[3];
+		
+			parts.push( m[1] );
+		
+			if ( m[2] ) {
+				extra = m[3];
+				break;
+			}
+		}
+	} while ( m );
+
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+			set = posProcess( parts[0] + parts[1], context );
+		} else {
+			set = Expr.relative[ parts[0] ] ?
+				[ context ] :
+				Sizzle( parts.shift(), context );
+
+			while ( parts.length ) {
+				selector = parts.shift();
+
+				if ( Expr.relative[ selector ] ) {
+					selector += parts.shift();
+				}
+				
+				set = posProcess( selector, set );
+			}
+		}
+	} else {
+		// Take a shortcut and set the context if the root selector is an ID
+		// (but not if it'll be faster if the inner selector is an ID)
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+			ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+		}
+
+		if ( context ) {
+			ret = seed ?
+				{ expr: parts.pop(), set: makeArray(seed) } :
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+			if ( parts.length > 0 ) {
+				checkSet = makeArray(set);
+			} else {
+				prune = false;
+			}
+
+			while ( parts.length ) {
+				cur = parts.pop();
+				pop = cur;
+
+				if ( !Expr.relative[ cur ] ) {
+					cur = "";
+				} else {
+					pop = parts.pop();
+				}
+
+				if ( pop == null ) {
+					pop = context;
+				}
+
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
+			}
+		} else {
+			checkSet = parts = [];
+		}
+	}
+
+	if ( !checkSet ) {
+		checkSet = set;
+	}
+
+	if ( !checkSet ) {
+		Sizzle.error( cur || selector );
+	}
+
+	if ( toString.call(checkSet) === "[object Array]" ) {
+		if ( !prune ) {
+			results.push.apply( results, checkSet );
+		} else if ( context && context.nodeType === 1 ) {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+		} else {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+					results.push( set[i] );
+				}
+			}
+		}
+	} else {
+		makeArray( checkSet, results );
+	}
+
+	if ( extra ) {
+		Sizzle( extra, origContext, results, seed );
+		Sizzle.uniqueSort( results );
+	}
+
+	return results;
+};
+
+Sizzle.uniqueSort = function(results){
+	if ( sortOrder ) {
+		hasDuplicate = baseHasDuplicate;
+		results.sort(sortOrder);
+
+		if ( hasDuplicate ) {
+			for ( var i = 1; i < results.length; i++ ) {
+				if ( results[i] === results[i-1] ) {
+					results.splice(i--, 1);
+				}
+			}
+		}
+	}
+
+	return results;
+};
+
+Sizzle.matches = function(expr, set){
+	return Sizzle(expr, null, null, set);
+};
+
+Sizzle.matchesSelector = function(node, expr){
+	return Sizzle(expr, null, null, [node]).length > 0;
+};
+
+Sizzle.find = function(expr, context, isXML){
+	var set;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+		var type = Expr.order[i], match;
+		
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+			var left = match[1];
+			match.splice(1,1);
+
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
+				match[1] = (match[1] || "").replace(/\\/g, "");
+				set = Expr.find[ type ]( match, context, isXML );
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = context.getElementsByTagName("*");
+	}
+
+	return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+	var old = expr, result = [], curLoop = set, match, anyFound,
+		isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);
+
+	while ( expr && set.length ) {
+		for ( var type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				var filter = Expr.filter[ type ], found, item, left = match[1];
+				anyFound = false;
+
+				match.splice(1,1);
+
+				if ( left.substr( left.length - 1 ) === "\\" ) {
+					continue;
+				}
+
+				if ( curLoop === result ) {
+					result = [];
+				}
+
+				if ( Expr.preFilter[ type ] ) {
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+					if ( !match ) {
+						anyFound = found = true;
+					} else if ( match === true ) {
+						continue;
+					}
+				}
+
+				if ( match ) {
+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+						if ( item ) {
+							found = filter( item, match, i, curLoop );
+							var pass = not ^ !!found;
+
+							if ( inplace && found != null ) {
+								if ( pass ) {
+									anyFound = true;
+								} else {
+									curLoop[i] = false;
+								}
+							} else if ( pass ) {
+								result.push( item );
+								anyFound = true;
+							}
+						}
+					}
+				}
+
+				if ( found !== undefined ) {
+					if ( !inplace ) {
+						curLoop = result;
+					}
+
+					expr = expr.replace( Expr.match[ type ], "" );
+
+					if ( !anyFound ) {
+						return [];
+					}
+
+					break;
+				}
+			}
+		}
+
+		// Improper expression
+		if ( expr === old ) {
+			if ( anyFound == null ) {
+				Sizzle.error( expr );
+			} else {
+				break;
+			}
+		}
+
+		old = expr;
+	}
+
+	return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+	throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+	order: [ "ID", "NAME", "TAG" ],
+	match: {
+		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+	},
+	leftMatch: {},
+	attrMap: {
+		"class": "className",
+		"for": "htmlFor"
+	},
+	attrHandle: {
+		href: function(elem){
+			return elem.getAttribute("href");
+		}
+	},
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !/\W/.test(part),
+				isPartStrNotTag = isPartStr && !isTag;
+
+			if ( isTag ) {
+				part = part.toLowerCase();
+			}
+
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+				if ( (elem = checkSet[i]) ) {
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+						elem || false :
+						elem === part;
+				}
+			}
+
+			if ( isPartStrNotTag ) {
+				Sizzle.filter( part, checkSet, true );
+			}
+		},
+		">": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				elem, i = 0, l = checkSet.length;
+
+			if ( isPartStr && !/\W/.test(part) ) {
+				part = part.toLowerCase();
+
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+			} else {
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+					if ( elem ) {
+						checkSet[i] = isPartStr ?
+							elem.parentNode :
+							elem.parentNode === part;
+					}
+				}
+
+				if ( isPartStr ) {
+					Sizzle.filter( part, checkSet, true );
+				}
+			}
+		},
+		"": function(checkSet, part, isXML){
+			var doneName = done++, checkFn = dirCheck, nodeCheck;
+
+			if ( typeof part === "string" && !/\W/.test(part) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+		},
+		"~": function(checkSet, part, isXML){
+			var doneName = done++, checkFn = dirCheck, nodeCheck;
+
+			if ( typeof part === "string" && !/\W/.test(part) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+		}
+	},
+	find: {
+		ID: function(match, context, isXML){
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		},
+		NAME: function(match, context){
+			if ( typeof context.getElementsByName !== "undefined" ) {
+				var ret = [], results = context.getElementsByName(match[1]);
+
+				for ( var i = 0, l = results.length; i < l; i++ ) {
+					if ( results[i].getAttribute("name") === match[1] ) {
+						ret.push( results[i] );
+					}
+				}
+
+				return ret.length === 0 ? null : ret;
+			}
+		},
+		TAG: function(match, context){
+			return context.getElementsByTagName(match[1]);
+		}
+	},
+	preFilter: {
+		CLASS: function(match, curLoop, inplace, result, not, isXML){
+			match = " " + match[1].replace(/\\/g, "") + " ";
+
+			if ( isXML ) {
+				return match;
+			}
+
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+				if ( elem ) {
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+		ID: function(match){
+			return match[1].replace(/\\/g, "");
+		},
+		TAG: function(match, curLoop){
+			return match[1].toLowerCase();
+		},
+		CHILD: function(match){
+			if ( match[1] === "nth" ) {
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+				// calculate the numbers (first)n+(last) including if they are negative
+				match[2] = (test[1] + (test[2] || 1)) - 0;
+				match[3] = test[3] - 0;
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+		ATTR: function(match, curLoop, inplace, result, not, isXML){
+			var name = match[1].replace(/\\/g, "");
+			
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			if ( match[2] === "~=" ) {
+				match[4] = " " + match[4] + " ";
+			}
+
+			return match;
+		},
+		PSEUDO: function(match, curLoop, inplace, result, not){
+			if ( match[1] === "not" ) {
+				// If we're dealing with a complex expression, or a simple one
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+					match[3] = Sizzle(match[3], null, null, curLoop);
+				} else {
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+					if ( !inplace ) {
+						result.push.apply( result, ret );
+					}
+					return false;
+				}
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+				return true;
+			}
+			
+			return match;
+		},
+		POS: function(match){
+			match.unshift( true );
+			return match;
+		}
+	},
+	filters: {
+		enabled: function(elem){
+			return elem.disabled === false && elem.type !== "hidden";
+		},
+		disabled: function(elem){
+			return elem.disabled === true;
+		},
+		checked: function(elem){
+			return elem.checked === true;
+		},
+		selected: function(elem){
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			elem.parentNode.selectedIndex;
+			return elem.selected === true;
+		},
+		parent: function(elem){
+			return !!elem.firstChild;
+		},
+		empty: function(elem){
+			return !elem.firstChild;
+		},
+		has: function(elem, i, match){
+			return !!Sizzle( match[3], elem ).length;
+		},
+		header: function(elem){
+			return (/h\d/i).test( elem.nodeName );
+		},
+		text: function(elem){
+			return "text" === elem.type;
+		},
+		radio: function(elem){
+			return "radio" === elem.type;
+		},
+		checkbox: function(elem){
+			return "checkbox" === elem.type;
+		},
+		file: function(elem){
+			return "file" === elem.type;
+		},
+		password: function(elem){
+			return "password" === elem.type;
+		},
+		submit: function(elem){
+			return "submit" === elem.type;
+		},
+		image: function(elem){
+			return "image" === elem.type;
+		},
+		reset: function(elem){
+			return "reset" === elem.type;
+		},
+		button: function(elem){
+			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+		},
+		input: function(elem){
+			return (/input|select|textarea|button/i).test(elem.nodeName);
+		}
+	},
+	setFilters: {
+		first: function(elem, i){
+			return i === 0;
+		},
+		last: function(elem, i, match, array){
+			return i === array.length - 1;
+		},
+		even: function(elem, i){
+			return i % 2 === 0;
+		},
+		odd: function(elem, i){
+			return i % 2 === 1;
+		},
+		lt: function(elem, i, match){
+			return i < match[3] - 0;
+		},
+		gt: function(elem, i, match){
+			return i > match[3] - 0;
+		},
+		nth: function(elem, i, match){
+			return match[3] - 0 === i;
+		},
+		eq: function(elem, i, match){
+			return match[3] - 0 === i;
+		}
+	},
+	filter: {
+		PSEUDO: function(elem, match, i, array){
+			var name = match[1], filter = Expr.filters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			} else if ( name === "contains" ) {
+				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var j = 0, l = not.length; j < l; j++ ) {
+					if ( not[j] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+			} else {
+				Sizzle.error( "Syntax error, unrecognized expression: " + name );
+			}
+		},
+		CHILD: function(elem, match){
+			var type = match[1], node = elem;
+			switch (type) {
+				case 'only':
+				case 'first':
+					while ( (node = node.previousSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+					if ( type === "first" ) { 
+						return true; 
+					}
+					node = elem;
+				case 'last':
+					while ( (node = node.nextSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+					return true;
+				case 'nth':
+					var first = match[2], last = match[3];
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+					
+					var doneName = match[0],
+						parent = elem.parentNode;
+	
+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+						var count = 0;
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								node.nodeIndex = ++count;
+							}
+						} 
+						parent.sizcache = doneName;
+					}
+					
+					var diff = elem.nodeIndex - last;
+					if ( first === 0 ) {
+						return diff === 0;
+					} else {
+						return ( diff % first === 0 && diff / first >= 0 );
+					}
+			}
+		},
+		ID: function(elem, match){
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+		},
+		TAG: function(elem, match){
+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+		},
+		CLASS: function(elem, match){
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+				.indexOf( match ) > -1;
+		},
+		ATTR: function(elem, match){
+			var name = match[1],
+				result = Expr.attrHandle[ name ] ?
+					Expr.attrHandle[ name ]( elem ) :
+					elem[ name ] != null ?
+						elem[ name ] :
+						elem.getAttribute( name ),
+				value = result + "",
+				type = match[2],
+				check = match[4];
+
+			return result == null ?
+				type === "!=" :
+				type === "=" ?
+				value === check :
+				type === "*=" ?
+				value.indexOf(check) >= 0 :
+				type === "~=" ?
+				(" " + value + " ").indexOf(check) >= 0 :
+				!check ?
+				value && result !== false :
+				type === "!=" ?
+				value !== check :
+				type === "^=" ?
+				value.indexOf(check) === 0 :
+				type === "$=" ?
+				value.substr(value.length - check.length) === check :
+				type === "|=" ?
+				value === check || value.substr(0, check.length + 1) === check + "-" :
+				false;
+		},
+		POS: function(elem, match, i, array){
+			var name = match[2], filter = Expr.setFilters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			}
+		}
+	}
+};
+
+var origPOS = Expr.match.POS,
+	fescape = function(all, num){
+		return "\\" + (num - 0 + 1);
+	};
+
+for ( var type in Expr.match ) {
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function(array, results) {
+	array = Array.prototype.slice.call( array, 0 );
+
+	if ( results ) {
+		results.push.apply( results, array );
+		return results;
+	}
+	
+	return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch(e){
+	makeArray = function(array, results) {
+		var ret = results || [], i = 0;
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+			} else {
+				for ( ; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+	};
+} else {
+	sortOrder = function( a, b ) {
+		var ap = [], bp = [], aup = a.parentNode, bup = b.parentNode,
+			cur = aup, al, bl;
+
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// If the nodes are siblings (or identical) we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+
+		// If no parents were found then the nodes are disconnected
+		} else if ( !aup ) {
+			return -1;
+
+		} else if ( !bup ) {
+			return 1;
+		}
+
+		// Otherwise they're somewhere else in the tree so we need
+		// to build up a full list of the parentNodes for comparison
+		while ( cur ) {
+			ap.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		cur = bup;
+
+		while ( cur ) {
+			bp.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		al = ap.length;
+		bl = bp.length;
+
+		// Start walking down the tree looking for a discrepancy
+		for ( var i = 0; i < al && i < bl; i++ ) {
+			if ( ap[i] !== bp[i] ) {
+				return siblingCheck( ap[i], bp[i] );
+			}
+		}
+
+		// We ended someplace up the tree so do a sibling check
+		return i === al ?
+			siblingCheck( a, bp[i], -1 ) :
+			siblingCheck( ap[i], b, 1 );
+	};
+
+	siblingCheck = function( a, b, ret ) {
+		if ( a === b ) {
+			return ret;
+		}
+
+		var cur = a.nextSibling;
+
+		while ( cur ) {
+			if ( cur === b ) {
+				return -1;
+			}
+
+			cur = cur.nextSibling;
+		}
+
+		return 1;
+	};
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( elems ) {
+	var ret = "", elem;
+
+	for ( var i = 0; elems[i]; i++ ) {
+		elem = elems[i];
+
+		// Get the text from text nodes and CDATA nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+			ret += elem.nodeValue;
+
+		// Traverse everything else, except comment nodes
+		} else if ( elem.nodeType !== 8 ) {
+			ret += Sizzle.getText( elem.childNodes );
+		}
+	}
+
+	return ret;
+};
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+	// We're going to inject a fake input element with a specified name
+	var form = document.createElement("div"),
+		id = "script" + (new Date()).getTime();
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	var root = document.documentElement;
+	root.insertBefore( form, root.firstChild );
+
+	// The workaround has to do additional checks after a getElementById
+	// Which slows things down for other browsers (hence the branching)
+	if ( document.getElementById( id ) ) {
+		Expr.find.ID = function(match, context, isXML){
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+			}
+		};
+
+		Expr.filter.ID = function(elem, match){
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+			return elem.nodeType === 1 && node && node.nodeValue === match;
+		};
+	}
+
+	root.removeChild( form );
+	root = form = null; // release memory in IE
+})();
+
+(function(){
+	// Check to see if the browser returns only elements
+	// when doing getElementsByTagName("*")
+
+	// Create a fake element
+	var div = document.createElement("div");
+	div.appendChild( document.createComment("") );
+
+	// Make sure no comments are found
+	if ( div.getElementsByTagName("*").length > 0 ) {
+		Expr.find.TAG = function(match, context){
+			var results = context.getElementsByTagName(match[1]);
+
+			// Filter out possible comments
+			if ( match[1] === "*" ) {
+				var tmp = [];
+
+				for ( var i = 0; results[i]; i++ ) {
+					if ( results[i].nodeType === 1 ) {
+						tmp.push( results[i] );
+					}
+				}
+
+				results = tmp;
+			}
+
+			return results;
+		};
+	}
+
+	// Check to see if an attribute returns normalized href attributes
+	div.innerHTML = "<a href='#'></a>";
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+			div.firstChild.getAttribute("href") !== "#" ) {
+		Expr.attrHandle.href = function(elem){
+			return elem.getAttribute("href", 2);
+		};
+	}
+
+	div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle, div = document.createElement("div");
+		div.innerHTML = "<p class='TEST'></p>";
+
+		// Safari can't handle uppercase or unicode characters when
+		// in quirks mode.
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+			return;
+		}
+	
+		Sizzle = function(query, context, extra, seed){
+			context = context || document;
+
+			// Only use querySelectorAll on non-XML documents
+			// (ID selectors don't work in non-HTML documents)
+			if ( !seed && !Sizzle.isXML(context) ) {
+				if ( context.nodeType === 9 ) {
+					try {
+						return makeArray( context.querySelectorAll(query), extra );
+					} catch(qsaError) {}
+
+				// qSA works strangely on Element-rooted queries
+				// We can work around this by specifying an extra ID on the root
+				// and working up from there (Thanks to Andrew Dupont for the technique)
+				// IE 8 doesn't work on object elements
+				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+					var old = context.id, id = context.id = "__sizzle__";
+
+					try {
+						return makeArray( context.querySelectorAll( "#" + id + " " + query ), extra );
+
+					} catch(pseudoError) {
+					} finally {
+						if ( old ) {
+							context.id = old;
+
+						} else {
+							context.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		div = null; // release memory in IE
+	})();
+}
+
+(function(){
+	var html = document.documentElement,
+		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
+		pseudoWorks = false;
+
+	try {
+		// This should fail with an exception
+		// Gecko does not error, returns false instead
+		matches.call( document.documentElement, ":sizzle" );
+	
+	} catch( pseudoError ) {
+		pseudoWorks = true;
+	}
+
+	if ( matches ) {
+		Sizzle.matchesSelector = function( node, expr ) {
+				try { 
+					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) ) {
+						return matches.call( node, expr );
+					}
+				} catch(e) {}
+
+				return Sizzle(expr, null, null, [node]).length > 0;
+		};
+	}
+})();
+
+(function(){
+	var div = document.createElement("div");
+
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+	// Opera can't find a second classname (in 9.6)
+	// Also, make sure that getElementsByClassName actually exists
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+		return;
+	}
+
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
+	div.lastChild.className = "e";
+
+	if ( div.getElementsByClassName("e").length === 1 ) {
+		return;
+	}
+	
+	Expr.order.splice(1, 0, "CLASS");
+	Expr.find.CLASS = function(match, context, isXML) {
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+			return context.getElementsByClassName(match[1]);
+		}
+	};
+
+	div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+		if ( elem ) {
+			elem = elem[dir];
+			var match = false;
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 && !isXML ){
+					elem.sizcache = doneName;
+					elem.sizset = i;
+				}
+
+				if ( elem.nodeName.toLowerCase() === cur ) {
+					match = elem;
+					break;
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+		if ( elem ) {
+			elem = elem[dir];
+			var match = false;
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 ) {
+					if ( !isXML ) {
+						elem.sizcache = doneName;
+						elem.sizset = i;
+					}
+					if ( typeof cur !== "string" ) {
+						if ( elem === cur ) {
+							match = true;
+							break;
+						}
+
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+						match = elem;
+						break;
+					}
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+Sizzle.contains = document.documentElement.contains ? function(a, b){
+	return a !== b && (a.contains ? a.contains(b) : true);
+} : function(a, b){
+	return !!(a.compareDocumentPosition(b) & 16);
+};
+
+Sizzle.isXML = function(elem){
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833) 
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function(selector, context){
+	var tmpSet = [], later = "", match,
+		root = context.nodeType ? [context] : context;
+
+	// Position selectors must be done after the filter
+	// And so must :not(positional) so we move all PSEUDOs to the end
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+		later += match[0];
+		selector = selector.replace( Expr.match.PSEUDO, "" );
+	}
+
+	selector = Expr.relative[selector] ? selector + "*" : selector;
+
+	for ( var i = 0, l = root.length; i < l; i++ ) {
+		Sizzle( selector, root[i], tmpSet );
+	}
+
+	return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
+	rmultiselector = /,/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	slice = Array.prototype.slice,
+	POS = jQuery.expr.match.POS;
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var ret = this.pushStack( "", "find", selector ), length = 0;
+
+		for ( var i = 0, l = this.length; i < l; i++ ) {
+			length = ret.length;
+			jQuery.find( selector, this[i], ret );
+
+			if ( i > 0 ) {
+				// Make sure that the results are unique
+				for ( var n = length; n < ret.length; n++ ) {
+					for ( var r = 0; r < length; r++ ) {
+						if ( ret[r] === ret[n] ) {
+							ret.splice(n--, 1);
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	has: function( target ) {
+		var targets = jQuery( target );
+		return this.filter(function() {
+			for ( var i = 0, l = targets.length; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false), "not", selector);
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
+	},
+	
+	is: function( selector ) {
+		return !!selector && jQuery.filter( selector, this ).length > 0;
+	},
+
+	closest: function( selectors, context ) {
+		var ret = [], i, l, cur = this[0];
+
+		if ( jQuery.isArray( selectors ) ) {
+			var match, matches = {}, selector, level = 1;
+
+			if ( cur && selectors.length ) {
+				for ( i = 0, l = selectors.length; i < l; i++ ) {
+					selector = selectors[i];
+
+					if ( !matches[selector] ) {
+						matches[selector] = jQuery.expr.match.POS.test( selector ) ? 
+							jQuery( selector, context || this.context ) :
+							selector;
+					}
+				}
+
+				while ( cur && cur.ownerDocument && cur !== context ) {
+					for ( selector in matches ) {
+						match = matches[selector];
+
+						if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
+							ret.push({ selector: selector, elem: cur, level: level });
+						}
+					}
+
+					cur = cur.parentNode;
+					level++;
+				}
+			}
+
+			return ret;
+		}
+
+		var pos = POS.test( selectors ) ? 
+			jQuery( selectors, context || this.context ) : null;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+
+				} else {
+					cur = cur.parentNode;
+					if ( !cur || !cur.ownerDocument || cur === context ) {
+						break;
+					}
+				}
+			}
+		}
+
+		ret = ret.length > 1 ? jQuery.unique(ret) : ret;
+		
+		return this.pushStack( ret, "closest", selectors );
+	},
+	
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+		if ( !elem || typeof elem === "string" ) {
+			return jQuery.inArray( this[0],
+				// If it receives a string, the selector is used
+				// If it receives nothing, the siblings are used
+				elem ? jQuery( elem ) : this.parent().children() );
+		}
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context || this.context ) :
+				jQuery.makeArray( selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+			all :
+			jQuery.unique( all ) );
+	},
+
+	andSelf: function() {
+		return this.add( this.prevObject );
+	}
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return jQuery.nth( elem, 2, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return jQuery.nth( elem, 2, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( elem.parentNode.firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.makeArray( elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+		
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 ? jQuery.unique( ret ) : ret;
+
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, slice.call(arguments).join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+	
+	dir: function( elem, dir, until ) {
+		var matched = [], cur = elem[dir];
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	nth: function( cur, result, dir, elem ) {
+		result = result || 1;
+		var num = 0;
+
+		for ( ; cur; cur = cur[dir] ) {
+			if ( cur.nodeType === 1 && ++num === result ) {
+				break;
+			}
+		}
+
+		return cur;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return (elem === qualifier) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem, i ) {
+		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+	});
+}
+
+
+
+
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnocache = /<(?:script|object|embed|option|style)/i,
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,  // checked="checked" or checked (html5)
+	raction = /\=([^="'>\s]+\/)>/g,
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		area: [ 1, "<map>", "</map>" ],
+		_default: [ 0, "", "" ]
+	};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+	wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+	text: function( text ) {
+		if ( jQuery.isFunction(text) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.text( text.call(this, i, self.text()) );
+			});
+		}
+
+		if ( typeof text !== "object" && text !== undefined ) {
+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+		}
+
+		return jQuery.text( this );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append(this);
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ), contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		return this.each(function() {
+			jQuery( this ).wrapAll( html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this );
+			});
+		} else if ( arguments.length ) {
+			var set = jQuery(arguments[0]);
+			set.push.apply( set, this.toArray() );
+			return this.pushStack( set, "before", arguments );
+		}
+	},
+
+	after: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			});
+		} else if ( arguments.length ) {
+			var set = this.pushStack( this, "after", arguments );
+			set.push.apply( set, jQuery(arguments[0]).toArray() );
+			return set;
+		}
+	},
+	
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( elem.getElementsByTagName("*") );
+					jQuery.cleanData( [ elem ] );
+				}
+
+				if ( elem.parentNode ) {
+					 elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+		
+		return this;
+	},
+
+	empty: function() {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( elem.getElementsByTagName("*") );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+		}
+		
+		return this;
+	},
+
+	clone: function( events ) {
+		// Do the clone
+		var ret = this.map(function() {
+			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
+				// IE copies events bound via attachEvent when
+				// using cloneNode. Calling detachEvent on the
+				// clone will also remove the events from the orignal
+				// In order to get around this, we use innerHTML.
+				// Unfortunately, this means some modifications to
+				// attributes in IE that are actually only stored
+				// as properties will not be copied (such as the
+				// the name attribute on an input).
+				var html = this.outerHTML, ownerDocument = this.ownerDocument;
+				if ( !html ) {
+					var div = ownerDocument.createElement("div");
+					div.appendChild( this.cloneNode(true) );
+					html = div.innerHTML;
+				}
+
+				return jQuery.clean([html.replace(rinlinejQuery, "")
+					// Handle the case in IE 8 where action=/test/> self-closes a tag
+					.replace(raction, '="$1">')
+					.replace(rleadingWhitespace, "")], ownerDocument)[0];
+			} else {
+				return this.cloneNode(true);
+			}
+		});
+
+		// Copy the events from the original to the clone
+		if ( events === true ) {
+			cloneCopyEvent( this, ret );
+			cloneCopyEvent( this.find("*"), ret.find("*") );
+		}
+
+		// Return the cloned set
+		return ret;
+	},
+
+	html: function( value ) {
+		if ( value === undefined ) {
+			return this[0] && this[0].nodeType === 1 ?
+				this[0].innerHTML.replace(rinlinejQuery, "") :
+				null;
+
+		// See if we can take a shortcut and just use innerHTML
+		} else if ( typeof value === "string" && !rnocache.test( value ) &&
+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+			value = value.replace(rxhtmlTag, "<$1></$2>");
+
+			try {
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					// Remove element nodes and prevent memory leaks
+					if ( this[i].nodeType === 1 ) {
+						jQuery.cleanData( this[i].getElementsByTagName("*") );
+						this[i].innerHTML = value;
+					}
+				}
+
+			// If using innerHTML throws an exception, use the fallback method
+			} catch(e) {
+				this.empty().append( value );
+			}
+
+		} else if ( jQuery.isFunction( value ) ) {
+			this.each(function(i){
+				var self = jQuery(this);
+				self.html( value.call(this, i, self.html()) );
+			});
+
+		} else {
+			this.empty().append( value );
+		}
+
+		return this;
+	},
+
+	replaceWith: function( value ) {
+		if ( this[0] && this[0].parentNode ) {
+			// Make sure that the elements are removed from the DOM before they are inserted
+			// this can help fix replacing a parent with child elements
+			if ( jQuery.isFunction( value ) ) {
+				return this.each(function(i) {
+					var self = jQuery(this), old = self.html();
+					self.replaceWith( value.call( this, i, old ) );
+				});
+			}
+
+			if ( typeof value !== "string" ) {
+				value = jQuery(value).detach();
+			}
+
+			return this.each(function() {
+				var next = this.nextSibling, parent = this.parentNode;
+
+				jQuery(this).remove();
+
+				if ( next ) {
+					jQuery(next).before( value );
+				} else {
+					jQuery(parent).append( value );
+				}
+			});
+		} else {
+			return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
+		}
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+		var results, first, value = args[0], scripts = [], fragment, parent;
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+			return this.each(function() {
+				jQuery(this).domManip( args, table, callback, true );
+			});
+		}
+
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				args[0] = value.call(this, i, table ? self.html() : undefined);
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( this[0] ) {
+			parent = value && value.parentNode;
+
+			// If we're in a fragment, just use that instead of building a new one
+			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+				results = { fragment: parent };
+
+			} else {
+				results = jQuery.buildFragment( args, this, scripts );
+			}
+			
+			fragment = results.fragment;
+			
+			if ( fragment.childNodes.length === 1 ) {
+				first = fragment = fragment.firstChild;
+			} else {
+				first = fragment.firstChild;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					callback.call(
+						table ?
+							root(this[i], first) :
+							this[i],
+						i > 0 || results.cacheable || this.length > 1  ?
+							fragment.cloneNode(true) :
+							fragment
+					);
+				}
+			}
+
+			if ( scripts.length ) {
+				jQuery.each( scripts, evalScript );
+			}
+		}
+
+		return this;
+	}
+});
+
+function root( elem, cur ) {
+	return jQuery.nodeName(elem, "table") ?
+		(elem.getElementsByTagName("tbody")[0] ||
+		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+		elem;
+}
+
+function cloneCopyEvent(orig, ret) {
+	var i = 0;
+
+	ret.each(function() {
+		if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
+			return;
+		}
+
+		var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
+
+		if ( events ) {
+			delete curData.handle;
+			curData.events = {};
+
+			for ( var type in events ) {
+				for ( var handler in events[ type ] ) {
+					jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+				}
+			}
+		}
+	});
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+	var fragment, cacheable, cacheresults,
+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+	// Only cache "small" (1/2 KB) strings that are associated with the main document
+	// Cloning options loses the selected state, so don't cache them
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+		!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+		cacheable = true;
+		cacheresults = jQuery.fragments[ args[0] ];
+		if ( cacheresults ) {
+			if ( cacheresults !== 1 ) {
+				fragment = cacheresults;
+			}
+		}
+	}
+
+	if ( !fragment ) {
+		fragment = doc.createDocumentFragment();
+		jQuery.clean( args, doc, fragment, scripts );
+	}
+
+	if ( cacheable ) {
+		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+	}
+
+	return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var ret = [], insert = jQuery( selector ),
+			parent = this.length === 1 && this[0].parentNode;
+		
+		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+			insert[ original ]( this[0] );
+			return this;
+			
+		} else {
+			for ( var i = 0, l = insert.length; i < l; i++ ) {
+				var elems = (i > 0 ? this.clone(true) : this).get();
+				jQuery( insert[i] )[ original ]( elems );
+				ret = ret.concat( elems );
+			}
+		
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+jQuery.extend({
+	clean: function( elems, context, fragment, scripts ) {
+		context = context || document;
+
+		// !context.createElement fails in IE with an error but returns typeof 'object'
+		if ( typeof context.createElement === "undefined" ) {
+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+		}
+
+		var ret = [];
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( typeof elem === "number" ) {
+				elem += "";
+			}
+
+			if ( !elem ) {
+				continue;
+			}
+
+			// Convert html string into DOM nodes
+			if ( typeof elem === "string" && !rhtml.test( elem ) ) {
+				elem = context.createTextNode( elem );
+
+			} else if ( typeof elem === "string" ) {
+				// Fix "XHTML"-style tags in all browsers
+				elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+				// Trim whitespace, otherwise indexOf won't work as expected
+				var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+					wrap = wrapMap[ tag ] || wrapMap._default,
+					depth = wrap[0],
+					div = context.createElement("div");
+
+				// Go to html and back, then peel off extra wrappers
+				div.innerHTML = wrap[1] + elem + wrap[2];
+
+				// Move to the right depth
+				while ( depth-- ) {
+					div = div.lastChild;
+				}
+
+				// Remove IE's autoinserted <tbody> from table fragments
+				if ( !jQuery.support.tbody ) {
+
+					// String was a <table>, *may* have spurious <tbody>
+					var hasBody = rtbody.test(elem),
+						tbody = tag === "table" && !hasBody ?
+							div.firstChild && div.firstChild.childNodes :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !hasBody ?
+								div.childNodes :
+								[];
+
+					for ( var j = tbody.length - 1; j >= 0 ; --j ) {
+						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+							tbody[ j ].parentNode.removeChild( tbody[ j ] );
+						}
+					}
+
+				}
+
+				// IE completely kills leading whitespace when innerHTML is used
+				if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+					div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+				}
+
+				elem = div.childNodes;
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				ret = jQuery.merge( ret, elem );
+			}
+		}
+
+		if ( fragment ) {
+			for ( i = 0; ret[i]; i++ ) {
+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+				
+				} else {
+					if ( ret[i].nodeType === 1 ) {
+						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
+					}
+					fragment.appendChild( ret[i] );
+				}
+			}
+		}
+
+		return ret;
+	},
+	
+	cleanData: function( elems ) {
+		var data, id, cache = jQuery.cache,
+			special = jQuery.event.special,
+			deleteExpando = jQuery.support.deleteExpando;
+		
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+				continue;
+			}
+
+			id = elem[ jQuery.expando ];
+			
+			if ( id ) {
+				data = cache[ id ];
+				
+				if ( data && data.events ) {
+					for ( var type in data.events ) {
+						if ( special[ type ] ) {
+							jQuery.event.remove( elem, type );
+
+						} else {
+							jQuery.removeEvent( elem, type, data.handle );
+						}
+					}
+				}
+				
+				if ( deleteExpando ) {
+					delete elem[ jQuery.expando ];
+
+				} else if ( elem.removeAttribute ) {
+					elem.removeAttribute( jQuery.expando );
+				}
+				
+				delete cache[ id ];
+			}
+		}
+	}
+});
+
+function evalScript( i, elem ) {
+	if ( elem.src ) {
+		jQuery.ajax({
+			url: elem.src,
+			async: false,
+			dataType: "script"
+		});
+	} else {
+		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+	}
+
+	if ( elem.parentNode ) {
+		elem.parentNode.removeChild( elem );
+	}
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity=([^)]*)/,
+	rdashAlpha = /-([a-z])/ig,
+	rupper = /([A-Z])/g,
+	rnumpx = /^-?\d+(?:px)?$/i,
+	rnum = /^-?\d/,
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssWidth = [ "Left", "Right" ],
+	cssHeight = [ "Top", "Bottom" ],
+	curCSS,
+
+	// cache check for defaultView.getComputedStyle
+	getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,
+
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn.css = function( name, value ) {
+	// Setting 'undefined' is a no-op
+	if ( arguments.length === 2 && value === undefined ) {
+		return this;
+	}
+
+	return jQuery.access( this, name, value, true, function( elem, name, value ) {
+		return value !== undefined ?
+			jQuery.style( elem, name, value ) :
+			jQuery.css( elem, name );
+	});
+};
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity", "opacity" );
+					return ret === "" ? "1" : ret;
+
+				} else {
+					return elem.style.opacity;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"zIndex": true,
+		"fontWeight": true,
+		"opacity": true,
+		"zoom": true,
+		"lineHeight": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, origName = jQuery.camelCase( name ),
+			style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+		name = jQuery.cssProps[ origName ] || origName;
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( typeof value === "number" && isNaN( value ) || value == null ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra ) {
+		// Make sure that we're working with the right name
+		var ret, origName = jQuery.camelCase( name ),
+			hooks = jQuery.cssHooks[ origName ];
+
+		name = jQuery.cssProps[ origName ] || origName;
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+			return ret;
+
+		// Otherwise, if a way to get the computed value exists, use that
+		} else if ( curCSS ) {
+			return curCSS( elem, name, origName );
+		}
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback ) {
+		var old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( var name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		callback.call( elem );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+	},
+
+	camelCase: function( string ) {
+		return string.replace( rdashAlpha, fcamelCase );
+	}
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			var val;
+
+			if ( computed ) {
+				if ( elem.offsetWidth !== 0 ) {
+					val = getWH( elem, name, extra );
+
+				} else {
+					jQuery.swap( elem, cssShow, function() {
+						val = getWH( elem, name, extra );
+					});
+				}
+
+				return val + "px";
+			}
+		},
+
+		set: function( elem, value ) {
+			if ( rnumpx.test( value ) ) {
+				// ignore negative width and height values #1599
+				value = parseFloat(value);
+
+				if ( value >= 0 ) {
+					return value + "px";
+				}
+
+			} else {
+				return value;
+			}
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ?
+				(parseFloat(RegExp.$1) / 100) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style;
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// Set the alpha filter to set the opacity
+			var opacity = jQuery.isNaN(value) ?
+				"" :
+				"alpha(opacity=" + value * 100 + ")",
+				filter = style.filter || "";
+
+			style.filter = ralpha.test(filter) ?
+				filter.replace(ralpha, opacity) :
+				style.filter + ' ' + opacity;
+		}
+	};
+}
+
+if ( getComputedStyle ) {
+	curCSS = function( elem, newName, name ) {
+		var ret, defaultView, computedStyle;
+
+		name = name.replace( rupper, "-$1" ).toLowerCase();
+
+		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+			return undefined;
+		}
+
+		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+			ret = computedStyle.getPropertyValue( name );
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+		}
+
+		return ret;
+	};
+
+} else if ( document.documentElement.currentStyle ) {
+	curCSS = function( elem, name ) {
+		var left, rsLeft, ret = elem.currentStyle && elem.currentStyle[ name ], style = elem.style;
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+			// Remember the original values
+			left = style.left;
+			rsLeft = elem.runtimeStyle.left;
+
+			// Put in the new values to get a computed value out
+			elem.runtimeStyle.left = elem.currentStyle.left;
+			style.left = name === "fontSize" ? "1em" : (ret || 0);
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			elem.runtimeStyle.left = rsLeft;
+		}
+
+		return ret;
+	};
+}
+
+function getWH( elem, name, extra ) {
+	var which = name === "width" ? cssWidth : cssHeight,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+	if ( extra === "border" ) {
+		return val;
+	}
+
+	jQuery.each( which, function() {
+		if ( !extra ) {
+			val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
+		}
+
+		if ( extra === "margin" ) {
+			val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
+
+		} else {
+			val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
+		}
+	});
+
+	return val;
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		var width = elem.offsetWidth, height = elem.offsetHeight;
+
+		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+
+
+
+var jsc = jQuery.now(),
+	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+	rselectTextarea = /^(?:select|textarea)/i,
+	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+	rnoContent = /^(?:GET|HEAD|DELETE)$/,
+	rbracket = /\[\]$/,
+	jsre = /\=\?(&|$)/,
+	rquery = /\?/,
+	rts = /([?&])_=[^&]*/,
+	rurl = /^(\w+:)?\/\/([^\/?#]+)/,
+	r20 = /%20/g,
+	rhash = /#.*$/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load;
+
+jQuery.fn.extend({
+	load: function( url, params, callback ) {
+		if ( typeof url !== "string" && _load ) {
+			return _load.apply( this, arguments );
+
+		// Don't do a request if no elements are being requested
+		} else if ( !this.length ) {
+			return this;
+		}
+
+		var off = url.indexOf(" ");
+		if ( off >= 0 ) {
+			var selector = url.slice(off, url.length);
+			url = url.slice(0, off);
+		}
+
+		// Default to a GET request
+		var type = "GET";
+
+		// If the second parameter was provided
+		if ( params ) {
+			// If it's a function
+			if ( jQuery.isFunction( params ) ) {
+				// We assume that it's the callback
+				callback = params;
+				params = null;
+
+			// Otherwise, build a param string
+			} else if ( typeof params === "object" ) {
+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+				type = "POST";
+			}
+		}
+
+		var self = this;
+
+		// Request the remote document
+		jQuery.ajax({
+			url: url,
+			type: type,
+			dataType: "html",
+			data: params,
+			complete: function( res, status ) {
+				// If successful, inject the HTML into all the matched elements
+				if ( status === "success" || status === "notmodified" ) {
+					// See if a selector was specified
+					self.html( selector ?
+						// Create a dummy div to hold the results
+						jQuery("<div>")
+							// inject the contents of the document in, removing the scripts
+							// to avoid any 'Permission Denied' errors in IE
+							.append(res.responseText.replace(rscript, ""))
+
+							// Locate the specified elements
+							.find(selector) :
+
+						// If not, just inject the full result
+						res.responseText );
+				}
+
+				if ( callback ) {
+					self.each( callback, [res.responseText, status, res] );
+				}
+			}
+		});
+
+		return this;
+	},
+
+	serialize: function() {
+		return jQuery.param(this.serializeArray());
+	},
+
+	serializeArray: function() {
+		return this.map(function() {
+			return this.elements ? jQuery.makeArray(this.elements) : this;
+		})
+		.filter(function() {
+			return this.name && !this.disabled &&
+				(this.checked || rselectTextarea.test(this.nodeName) ||
+					rinput.test(this.type));
+		})
+		.map(function( i, elem ) {
+			var val = jQuery(this).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray(val) ?
+					jQuery.map( val, function( val, i ) {
+						return { name: elem.name, value: val };
+					}) :
+					{ name: elem.name, value: val };
+		}).get();
+	}
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
+	jQuery.fn[o] = function( f ) {
+		return this.bind(o, f);
+	};
+});
+
+jQuery.extend({
+	get: function( url, data, callback, type ) {
+		// shift arguments if data argument was omited
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = null;
+		}
+
+		return jQuery.ajax({
+			type: "GET",
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get(url, null, callback, "script");
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get(url, data, callback, "json");
+	},
+
+	post: function( url, data, callback, type ) {
+		// shift arguments if data argument was omited
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = {};
+		}
+
+		return jQuery.ajax({
+			type: "POST",
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	},
+
+	ajaxSetup: function( settings ) {
+		jQuery.extend( jQuery.ajaxSettings, settings );
+	},
+
+	ajaxSettings: {
+		url: location.href,
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		username: null,
+		password: null,
+		traditional: false,
+		*/
+		// This function can be overriden by calling jQuery.ajaxSetup
+		xhr: function() {
+			return new window.XMLHttpRequest();
+		},
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			script: "text/javascript, application/javascript",
+			json: "application/json, text/javascript",
+			text: "text/plain",
+			_default: "*/*"
+		}
+	},
+
+	ajax: function( origSettings ) {
+		var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
+			jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
+
+		s.url = s.url.replace( rhash, "" );
+
+		// Use original (not extended) context object if it was provided
+		s.context = origSettings && origSettings.context != null ? origSettings.context : s;
+
+		// convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Handle JSONP Parameter Callbacks
+		if ( s.dataType === "jsonp" ) {
+			if ( type === "GET" ) {
+				if ( !jsre.test( s.url ) ) {
+					s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
+				}
+			} else if ( !s.data || !jsre.test(s.data) ) {
+				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
+			}
+			s.dataType = "json";
+		}
+
+		// Build temporary JSONP function
+		if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
+			jsonp = s.jsonpCallback || ("jsonp" + jsc++);
+
+			// Replace the =? sequence both in the query string and the data
+			if ( s.data ) {
+				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
+			}
+
+			s.url = s.url.replace(jsre, "=" + jsonp + "$1");
+
+			// We need to make sure
+			// that a JSONP style response is executed properly
+			s.dataType = "script";
+
+			// Handle JSONP-style loading
+			var customJsonp = window[ jsonp ];
+
+			window[ jsonp ] = function( tmp ) {
+				data = tmp;
+				jQuery.handleSuccess( s, xhr, status, data );
+				jQuery.handleComplete( s, xhr, status, data );
+
+				if ( jQuery.isFunction( customJsonp ) ) {
+					customJsonp( tmp );
+
+				} else {
+					// Garbage collect
+					window[ jsonp ] = undefined;
+
+					try {
+						delete window[ jsonp ];
+					} catch( jsonpError ) {}
+				}
+				
+				if ( head ) {
+					head.removeChild( script );
+				}
+			};
+		}
+
+		if ( s.dataType === "script" && s.cache === null ) {
+			s.cache = false;
+		}
+
+		if ( s.cache === false && type === "GET" ) {
+			var ts = jQuery.now();
+
+			// try replacing _= if it is there
+			var ret = s.url.replace(rts, "$1_=" + ts);
+
+			// if nothing was replaced, add timestamp to the end
+			s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
+		}
+
+		// If data is available, append data to url for get requests
+		if ( s.data && type === "GET" ) {
+			s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
+		}
+
+		// Watch for a new set of requests
+		if ( s.global && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Matches an absolute URL, and saves the domain
+		var parts = rurl.exec( s.url ),
+			remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
+
+		// If we're requesting a remote document
+		// and trying to load JSON or Script with a GET
+		if ( s.dataType === "script" && type === "GET" && remote ) {
+			var head = document.getElementsByTagName("head")[0] || document.documentElement;
+			var script = document.createElement("script");
+			if ( s.scriptCharset ) {
+				script.charset = s.scriptCharset;
+			}
+			script.src = s.url;
+
+			// Handle Script loading
+			if ( !jsonp ) {
+				var done = false;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function() {
+					if ( !done && (!this.readyState ||
+							this.readyState === "loaded" || this.readyState === "complete") ) {
+						done = true;
+						jQuery.handleSuccess( s, xhr, status, data );
+						jQuery.handleComplete( s, xhr, status, data );
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+					}
+				};
+			}
+
+			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+			// This arises when a base node is used (#2709 and #4378).
+			head.insertBefore( script, head.firstChild );
+
+			// We handle everything using the script element injection
+			return undefined;
+		}
+
+		var requestDone = false;
+
+		// Create the request object
+		var xhr = s.xhr();
+
+		if ( !xhr ) {
+			return;
+		}
+
+		// Open the socket
+		// Passing null username, generates a login popup on Opera (#2865)
+		if ( s.username ) {
+			xhr.open(type, s.url, s.async, s.username, s.password);
+		} else {
+			xhr.open(type, s.url, s.async);
+		}
+
+		// Need an extra try/catch for cross domain requests in Firefox 3
+		try {
+			// Set content-type if data specified and content-body is valid for this type
+			if ( (s.data != null && !noContent) || (origSettings && origSettings.contentType) ) {
+				xhr.setRequestHeader("Content-Type", s.contentType);
+			}
+
+			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+			if ( s.ifModified ) {
+				if ( jQuery.lastModified[s.url] ) {
+					xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
+				}
+
+				if ( jQuery.etag[s.url] ) {
+					xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
+				}
+			}
+
+			// Set header so the called script knows that it's an XMLHttpRequest
+			// Only send the header if it's not a remote XHR
+			if ( !remote ) {
+				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+			}
+
+			// Set the Accepts header for the server, depending on the dataType
+			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
+				s.accepts[ s.dataType ] + ", */*; q=0.01" :
+				s.accepts._default );
+		} catch( headerError ) {}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) {
+			// Handle the global AJAX counter
+			if ( s.global && jQuery.active-- === 1 ) {
+				jQuery.event.trigger( "ajaxStop" );
+			}
+
+			// close opended socket
+			xhr.abort();
+			return false;
+		}
+
+		if ( s.global ) {
+			jQuery.triggerGlobal( s, "ajaxSend", [xhr, s] );
+		}
+
+		// Wait for a response to come back
+		var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
+			// The request was aborted
+			if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
+				// Opera doesn't call onreadystatechange before this point
+				// so we simulate the call
+				if ( !requestDone ) {
+					jQuery.handleComplete( s, xhr, status, data );
+				}
+
+				requestDone = true;
+				if ( xhr ) {
+					xhr.onreadystatechange = jQuery.noop;
+				}
+
+			// The transfer is complete and the data is available, or the request timed out
+			} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
+				requestDone = true;
+				xhr.onreadystatechange = jQuery.noop;
+
+				status = isTimeout === "timeout" ?
+					"timeout" :
+					!jQuery.httpSuccess( xhr ) ?
+						"error" :
+						s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
+							"notmodified" :
+							"success";
+
+				var errMsg;
+
+				if ( status === "success" ) {
+					// Watch for, and catch, XML document parse errors
+					try {
+						// process the data (runs the xml through httpData regardless of callback)
+						data = jQuery.httpData( xhr, s.dataType, s );
+					} catch( parserError ) {
+						status = "parsererror";
+						errMsg = parserError;
+					}
+				}
+
+				// Make sure that the request was successful or notmodified
+				if ( status === "success" || status === "notmodified" ) {
+					// JSONP handles its own success callback
+					if ( !jsonp ) {
+						jQuery.handleSuccess( s, xhr, status, data );
+					}
+				} else {
+					jQuery.handleError( s, xhr, status, errMsg );
+				}
+
+				// Fire the complete handlers
+				if ( !jsonp ) {
+					jQuery.handleComplete( s, xhr, status, data );
+				}
+
+				if ( isTimeout === "timeout" ) {
+					xhr.abort();
+				}
+
+				// Stop memory leaks
+				if ( s.async ) {
+					xhr = null;
+				}
+			}
+		};
+
+		// Override the abort handler, if we can (IE 6 doesn't allow it, but that's OK)
+		// Opera doesn't fire onreadystatechange at all on abort
+		try {
+			var oldAbort = xhr.abort;
+			xhr.abort = function() {
+				// xhr.abort in IE7 is not a native JS function
+				// and does not have a call property
+				if ( xhr && oldAbort.call ) {
+					oldAbort.call( xhr );
+				}
+
+				onreadystatechange( "abort" );
+			};
+		} catch( abortError ) {}
+
+		// Timeout checker
+		if ( s.async && s.timeout > 0 ) {
+			setTimeout(function() {
+				// Check to see if the request is still happening
+				if ( xhr && !requestDone ) {
+					onreadystatechange( "timeout" );
+				}
+			}, s.timeout);
+		}
+
+		// Send the data
+		try {
+			xhr.send( noContent || s.data == null ? null : s.data );
+
+		} catch( sendError ) {
+			jQuery.handleError( s, xhr, null, sendError );
+
+			// Fire the complete handlers
+			jQuery.handleComplete( s, xhr, status, data );
+		}
+
+		// firefox 1.5 doesn't fire statechange for sync requests
+		if ( !s.async ) {
+			onreadystatechange();
+		}
+
+		// return XMLHttpRequest to allow aborting the request etc.
+		return xhr;
+	},
+
+	// Serialize an array of form elements or a set of
+	// key/values into a query string
+	param: function( a, traditional ) {
+		var s = [], add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction(value) ? value() : value;
+			s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+		};
+		
+		// Set traditional to true for jQuery <= 1.3.2 behavior.
+		if ( traditional === undefined ) {
+			traditional = jQuery.ajaxSettings.traditional;
+		}
+		
+		// If an array was passed in, assume that it is an array of form elements.
+		if ( jQuery.isArray(a) || a.jquery ) {
+			// Serialize the form elements
+			jQuery.each( a, function() {
+				add( this.name, this.value );
+			});
+			
+		} else {
+			// If traditional, encode the "old" way (the way 1.3.2 or older
+			// did it), otherwise encode params recursively.
+			for ( var prefix in a ) {
+				buildParams( prefix, a[prefix], traditional, add );
+			}
+		}
+
+		// Return the resulting serialization
+		return s.join("&").replace(r20, "+");
+	}
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+	if ( jQuery.isArray(obj) && obj.length ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// If array item is non-scalar (array or object), encode its
+				// numeric index to resolve deserialization ambiguity issues.
+				// Note that rack (as of 1.0.0) can't currently deserialize
+				// nested arrays properly, and attempting to do so may cause
+				// a server error. Possible fixes are to modify rack's
+				// deserialization algorithm or to provide an option or flag
+				// to force array serialization to be shallow.
+				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+			
+	} else if ( !traditional && obj != null && typeof obj === "object" ) {
+		if ( jQuery.isEmptyObject( obj ) ) {
+			add( prefix, "" );
+
+		// Serialize object item.
+		} else {
+			jQuery.each( obj, function( k, v ) {
+				buildParams( prefix + "[" + k + "]", v, traditional, add );
+			});
+		}
+					
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	handleError: function( s, xhr, status, e ) {
+		// If a local callback was specified, fire it
+		if ( s.error ) {
+			s.error.call( s.context, xhr, status, e );
+		}
+
+		// Fire the global callback
+		if ( s.global ) {
+			jQuery.triggerGlobal( s, "ajaxError", [xhr, s, e] );
+		}
+	},
+
+	handleSuccess: function( s, xhr, status, data ) {
+		// If a local callback was specified, fire it and pass it the data
+		if ( s.success ) {
+			s.success.call( s.context, data, status, xhr );
+		}
+
+		// Fire the global callback
+		if ( s.global ) {
+			jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] );
+		}
+	},
+
+	handleComplete: function( s, xhr, status ) {
+		// Process result
+		if ( s.complete ) {
+			s.complete.call( s.context, xhr, status );
+		}
+
+		// The request was completed
+		if ( s.global ) {
+			jQuery.triggerGlobal( s, "ajaxComplete", [xhr, s] );
+		}
+
+		// Handle the global AJAX counter
+		if ( s.global && jQuery.active-- === 1 ) {
+			jQuery.event.trigger( "ajaxStop" );
+		}
+	},
+		
+	triggerGlobal: function( s, type, args ) {
+		(s.context && s.context.url == null ? jQuery(s.context) : jQuery.event).trigger(type, args);
+	},
+
+	// Determines if an XMLHttpRequest was successful or not
+	httpSuccess: function( xhr ) {
+		try {
+			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
+			return !xhr.status && location.protocol === "file:" ||
+				xhr.status >= 200 && xhr.status < 300 ||
+				xhr.status === 304 || xhr.status === 1223;
+		} catch(e) {}
+
+		return false;
+	},
+
+	// Determines if an XMLHttpRequest returns NotModified
+	httpNotModified: function( xhr, url ) {
+		var lastModified = xhr.getResponseHeader("Last-Modified"),
+			etag = xhr.getResponseHeader("Etag");
+
+		if ( lastModified ) {
+			jQuery.lastModified[url] = lastModified;
+		}
+
+		if ( etag ) {
+			jQuery.etag[url] = etag;
+		}
+
+		return xhr.status === 304;
+	},
+
+	httpData: function( xhr, type, s ) {
+		var ct = xhr.getResponseHeader("content-type") || "",
+			xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
+			data = xml ? xhr.responseXML : xhr.responseText;
+
+		if ( xml && data.documentElement.nodeName === "parsererror" ) {
+			jQuery.error( "parsererror" );
+		}
+
+		// Allow a pre-filtering function to sanitize the response
+		// s is checked to keep backwards compatibility
+		if ( s && s.dataFilter ) {
+			data = s.dataFilter( data, type );
+		}
+
+		// The filter can actually parse the response
+		if ( typeof data === "string" ) {
+			// Get the JavaScript object, if JSON is used.
+			if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
+				data = jQuery.parseJSON( data );
+
+			// If the type is "script", eval it in global context
+			} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
+				jQuery.globalEval( data );
+			}
+		}
+
+		return data;
+	}
+
+});
+
+/*
+ * Create the request object; Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+if ( window.ActiveXObject ) {
+	jQuery.ajaxSettings.xhr = function() {
+		if ( window.location.protocol !== "file:" ) {
+			try {
+				return new window.XMLHttpRequest();
+			} catch(xhrError) {}
+		}
+
+		try {
+			return new window.ActiveXObject("Microsoft.XMLHTTP");
+		} catch(activeError) {}
+	};
+}
+
+// Does this browser support XHR requests?
+jQuery.support.ajax = !!jQuery.ajaxSettings.xhr();
+
+
+
+
+var elemdisplay = {},
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = /^([+\-]=)?([\d+.\-]+)(.*)$/,
+	timerId,
+	fxAttrs = [
+		// height animations
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+		// width animations
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+		// opacity animations
+		[ "opacity" ]
+	];
+
+jQuery.fn.extend({
+	show: function( speed, easing, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("show", 3), speed, easing, callback);
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				// Reset the inline display of this element to learn if it is
+				// being hidden by cascaded rules or not
+				if ( !jQuery.data(this[i], "olddisplay") && this[i].style.display === "none" ) {
+					this[i].style.display = "";
+				}
+
+				// Set elements which have been overridden with display: none
+				// in a stylesheet to whatever the default browser style is
+				// for such an element
+				if ( this[i].style.display === "" && jQuery.css( this[i], "display" ) === "none" ) {
+					jQuery.data(this[i], "olddisplay", defaultDisplay(this[i].nodeName));
+				}
+			}
+
+			// Set the display of most of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
+			}
+
+			return this;
+		}
+	},
+
+	hide: function( speed, easing, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("hide", 3), speed, easing, callback);
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				var display = jQuery.css( this[i], "display" );
+
+				if ( display !== "none" ) {
+					jQuery.data( this[i], "olddisplay", display );
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				this[i].style.display = "none";
+			}
+
+			return this;
+		}
+	},
+
+	// Save the old toggle function
+	_toggle: jQuery.fn.toggle,
+
+	toggle: function( fn, fn2, callback ) {
+		var bool = typeof fn === "boolean";
+
+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+			this._toggle.apply( this, arguments );
+
+		} else if ( fn == null || bool ) {
+			this.each(function() {
+				var state = bool ? fn : jQuery(this).is(":hidden");
+				jQuery(this)[ state ? "show" : "hide" ]();
+			});
+
+		} else {
+			this.animate(genFx("toggle", 3), fn, fn2, callback);
+		}
+
+		return this;
+	},
+
+	fadeTo: function( speed, to, easing, callback ) {
+		return this.filter(":hidden").css("opacity", 0).show().end()
+					.animate({opacity: to}, speed, easing, callback);
+	},
+
+	animate: function( prop, speed, easing, callback ) {
+		var optall = jQuery.speed(speed, easing, callback);
+
+		if ( jQuery.isEmptyObject( prop ) ) {
+			return this.each( optall.complete );
+		}
+
+		return this[ optall.queue === false ? "each" : "queue" ](function() {
+			// XXX âthisâ does not always have a nodeName when running the
+			// test suite
+
+			var opt = jQuery.extend({}, optall), p,
+				isElement = this.nodeType === 1,
+				hidden = isElement && jQuery(this).is(":hidden"),
+				self = this;
+
+			for ( p in prop ) {
+				var name = jQuery.camelCase( p );
+
+				if ( p !== name ) {
+					prop[ name ] = prop[ p ];
+					delete prop[ p ];
+					p = name;
+				}
+
+				if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
+					return opt.complete.call(this);
+				}
+
+				if ( isElement && ( p === "height" || p === "width" ) ) {
+					// Make sure that nothing sneaks out
+					// Record all 3 overflow attributes because IE does not
+					// change the overflow attribute when overflowX and
+					// overflowY are set to the same value
+					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+					// Set display property to inline-block for height/width
+					// animations on inline elements that are having width/height
+					// animated
+					if ( jQuery.css( this, "display" ) === "inline" &&
+							jQuery.css( this, "float" ) === "none" ) {
+						if ( !jQuery.support.inlineBlockNeedsLayout ) {
+							this.style.display = "inline-block";
+
+						} else {
+							var display = defaultDisplay(this.nodeName);
+
+							// inline-level elements accept inline-block;
+							// block-level elements need to be inline with layout
+							if ( display === "inline" ) {
+								this.style.display = "inline-block";
+
+							} else {
+								this.style.display = "inline";
+								this.style.zoom = 1;
+							}
+						}
+					}
+				}
+
+				if ( jQuery.isArray( prop[p] ) ) {
+					// Create (if needed) and add to specialEasing
+					(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
+					prop[p] = prop[p][0];
+				}
+			}
+
+			if ( opt.overflow != null ) {
+				this.style.overflow = "hidden";
+			}
+
+			opt.curAnim = jQuery.extend({}, prop);
+
+			jQuery.each( prop, function( name, val ) {
+				var e = new jQuery.fx( self, opt, name );
+
+				if ( rfxtypes.test(val) ) {
+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
+
+				} else {
+					var parts = rfxnum.exec(val),
+						start = e.cur(true) || 0;
+
+					if ( parts ) {
+						var end = parseFloat( parts[2] ),
+							unit = parts[3] || "px";
+
+						// We need to compute starting value
+						if ( unit !== "px" ) {
+							jQuery.style( self, name, (end || 1) + unit);
+							start = ((end || 1) / e.cur(true)) * start;
+							jQuery.style( self, name, start + unit);
+						}
+
+						// If a +=/-= token was provided, we're doing a relative animation
+						if ( parts[1] ) {
+							end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
+						}
+
+						e.custom( start, end, unit );
+
+					} else {
+						e.custom( start, val, "" );
+					}
+				}
+			});
+
+			// For JS strict compliance
+			return true;
+		});
+	},
+
+	stop: function( clearQueue, gotoEnd ) {
+		var timers = jQuery.timers;
+
+		if ( clearQueue ) {
+			this.queue([]);
+		}
+
+		this.each(function() {
+			// go in reverse order so anything added to the queue during the loop is ignored
+			for ( var i = timers.length - 1; i >= 0; i-- ) {
+				if ( timers[i].elem === this ) {
+					if (gotoEnd) {
+						// force the next step to be the last
+						timers[i](true);
+					}
+
+					timers.splice(i, 1);
+				}
+			}
+		});
+
+		// start the next in the queue if the last step wasn't forced
+		if ( !gotoEnd ) {
+			this.dequeue();
+		}
+
+		return this;
+	}
+
+});
+
+function genFx( type, num ) {
+	var obj = {};
+
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+		obj[ this ] = type;
+	});
+
+	return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show", 1),
+	slideUp: genFx("hide", 1),
+	slideToggle: genFx("toggle", 1),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.extend({
+	speed: function( speed, easing, fn ) {
+		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+			complete: fn || !fn && easing ||
+				jQuery.isFunction( speed ) && speed,
+			duration: speed,
+			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+		};
+
+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+		// Queueing
+		opt.old = opt.complete;
+		opt.complete = function() {
+			if ( opt.queue !== false ) {
+				jQuery(this).dequeue();
+			}
+			if ( jQuery.isFunction( opt.old ) ) {
+				opt.old.call( this );
+			}
+		};
+
+		return opt;
+	},
+
+	easing: {
+		linear: function( p, n, firstNum, diff ) {
+			return firstNum + diff * p;
+		},
+		swing: function( p, n, firstNum, diff ) {
+			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+		}
+	},
+
+	timers: [],
+
+	fx: function( elem, options, prop ) {
+		this.options = options;
+		this.elem = elem;
+		this.prop = prop;
+
+		if ( !options.orig ) {
+			options.orig = {};
+		}
+	}
+
+});
+
+jQuery.fx.prototype = {
+	// Simple function for setting a style value
+	update: function() {
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+	},
+
+	// Get the current size
+	cur: function() {
+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+			return this.elem[ this.prop ];
+		}
+
+		var r = parseFloat( jQuery.css( this.elem, this.prop ) );
+		return r && r > -10000 ? r : 0;
+	},
+
+	// Start an animation from one number to another
+	custom: function( from, to, unit ) {
+		this.startTime = jQuery.now();
+		this.start = from;
+		this.end = to;
+		this.unit = unit || this.unit || "px";
+		this.now = this.start;
+		this.pos = this.state = 0;
+
+		var self = this, fx = jQuery.fx;
+		function t( gotoEnd ) {
+			return self.step(gotoEnd);
+		}
+
+		t.elem = this.elem;
+
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
+			timerId = setInterval(fx.tick, fx.interval);
+		}
+	},
+
+	// Simple 'show' function
+	show: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.show = true;
+
+		// Begin the animation
+		// Make sure that we start at a small width/height to avoid any
+		// flash of content
+		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+
+		// Start by showing the element
+		jQuery( this.elem ).show();
+	},
+
+	// Simple 'hide' function
+	hide: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.hide = true;
+
+		// Begin the animation
+		this.custom(this.cur(), 0);
+	},
+
+	// Each step of an animation
+	step: function( gotoEnd ) {
+		var t = jQuery.now(), done = true;
+
+		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
+			this.now = this.end;
+			this.pos = this.state = 1;
+			this.update();
+
+			this.options.curAnim[ this.prop ] = true;
+
+			for ( var i in this.options.curAnim ) {
+				if ( this.options.curAnim[i] !== true ) {
+					done = false;
+				}
+			}
+
+			if ( done ) {
+				// Reset the overflow
+				if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+					var elem = this.elem, options = this.options;
+					jQuery.each( [ "", "X", "Y" ], function (index, value) {
+						elem.style[ "overflow" + value ] = options.overflow[index];
+					} );
+				}
+
+				// Hide the element if the "hide" operation was done
+				if ( this.options.hide ) {
+					jQuery(this.elem).hide();
+				}
+
+				// Reset the properties, if the item has been hidden or shown
+				if ( this.options.hide || this.options.show ) {
+					for ( var p in this.options.curAnim ) {
+						jQuery.style( this.elem, p, this.options.orig[p] );
+					}
+				}
+
+				// Execute the complete function
+				this.options.complete.call( this.elem );
+			}
+
+			return false;
+
+		} else {
+			var n = t - this.startTime;
+			this.state = n / this.options.duration;
+
+			// Perform the easing function, defaults to swing
+			var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
+			var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
+			this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
+			this.now = this.start + ((this.end - this.start) * this.pos);
+
+			// Perform the next step of the animation
+			this.update();
+		}
+
+		return true;
+	}
+};
+
+jQuery.extend( jQuery.fx, {
+	tick: function() {
+		var timers = jQuery.timers;
+
+		for ( var i = 0; i < timers.length; i++ ) {
+			if ( !timers[i]() ) {
+				timers.splice(i--, 1);
+			}
+		}
+
+		if ( !timers.length ) {
+			jQuery.fx.stop();
+		}
+	},
+
+	interval: 13,
+
+	stop: function() {
+		clearInterval( timerId );
+		timerId = null;
+	},
+
+	speeds: {
+		slow: 600,
+		fast: 200,
+		// Default speed
+		_default: 400
+	},
+
+	step: {
+		opacity: function( fx ) {
+			jQuery.style( fx.elem, "opacity", fx.now );
+		},
+
+		_default: function( fx ) {
+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+			} else {
+				fx.elem[ fx.prop ] = fx.now;
+			}
+		}
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+
+function defaultDisplay( nodeName ) {
+	if ( !elemdisplay[ nodeName ] ) {
+		var elem = jQuery("<" + nodeName + ">").appendTo("body"),
+			display = elem.css("display");
+
+		elem.remove();
+
+		if ( display === "none" || display === "" ) {
+			display = "block";
+		}
+
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+	rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0], box;
+
+		if ( options ) { 
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		try {
+			box = elem.getBoundingClientRect();
+		} catch(e) {}
+
+		var doc = elem.ownerDocument,
+			docElem = doc.documentElement;
+
+		// Make sure we're not dealing with a disconnected DOM node
+		if ( !box || !jQuery.contains( docElem, elem ) ) {
+			return box || { top: 0, left: 0 };
+		}
+
+		var body = doc.body,
+			win = getWindow(doc),
+			clientTop  = docElem.clientTop  || body.clientTop  || 0,
+			clientLeft = docElem.clientLeft || body.clientLeft || 0,
+			scrollTop  = (win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop ),
+			scrollLeft = (win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft),
+			top  = box.top  + scrollTop  - clientTop,
+			left = box.left + scrollLeft - clientLeft;
+
+		return { top: top, left: left };
+	};
+
+} else {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0];
+
+		if ( options ) { 
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		jQuery.offset.initialize();
+
+		var offsetParent = elem.offsetParent, prevOffsetParent = elem,
+			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
+			body = doc.body, defaultView = doc.defaultView,
+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+			top = elem.offsetTop, left = elem.offsetLeft;
+
+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+				break;
+			}
+
+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+			top  -= elem.scrollTop;
+			left -= elem.scrollLeft;
+
+			if ( elem === offsetParent ) {
+				top  += elem.offsetTop;
+				left += elem.offsetLeft;
+
+				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+				}
+
+				prevOffsetParent = offsetParent;
+				offsetParent = elem.offsetParent;
+			}
+
+			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+			}
+
+			prevComputedStyle = computedStyle;
+		}
+
+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+			top  += body.offsetTop;
+			left += body.offsetLeft;
+		}
+
+		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+			top  += Math.max( docElem.scrollTop, body.scrollTop );
+			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+		}
+
+		return { top: top, left: left };
+	};
+}
+
+jQuery.offset = {
+	initialize: function() {
+		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
+			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+
+		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+
+		container.innerHTML = html;
+		body.insertBefore( container, body.firstChild );
+		innerDiv = container.firstChild;
+		checkDiv = innerDiv.firstChild;
+		td = innerDiv.nextSibling.firstChild.firstChild;
+
+		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+
+		checkDiv.style.position = "fixed";
+		checkDiv.style.top = "20px";
+
+		// safari subtracts parent border width here which is 5px
+		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+		checkDiv.style.position = checkDiv.style.top = "";
+
+		innerDiv.style.overflow = "hidden";
+		innerDiv.style.position = "relative";
+
+		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+
+		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+		body.removeChild( container );
+		body = container = innerDiv = checkDiv = table = td = null;
+		jQuery.offset.initialize = jQuery.noop;
+	},
+
+	bodyOffset: function( body ) {
+		var top = body.offsetTop, left = body.offsetLeft;
+
+		jQuery.offset.initialize();
+
+		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+	
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = (position === "absolute" && jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1),
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is absolute
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+		}
+
+		curTop  = calculatePosition ? curPosition.top  : parseInt( curCSSTop,  10 ) || 0;
+		curLeft = calculatePosition ? curPosition.left : parseInt( curCSSLeft, 10 ) || 0;
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if (options.top != null) {
+			props.top = (options.top - curOffset.top) + curTop;
+		}
+		if (options.left != null) {
+			props.left = (options.left - curOffset.left) + curLeft;
+		}
+		
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+	position: function() {
+		if ( !this[0] ) {
+			return null;
+		}
+
+		var elem = this[0],
+
+		// Get *real* offsetParent
+		offsetParent = this.offsetParent(),
+
+		// Get correct offsets
+		offset       = this.offset(),
+		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+		// Subtract element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+		// Subtract the two offsets
+		return {
+			top:  offset.top  - parentOffset.top,
+			left: offset.left - parentOffset.left
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.body;
+			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+	var method = "scroll" + name;
+
+	jQuery.fn[ method ] = function(val) {
+		var elem = this[0], win;
+		
+		if ( !elem ) {
+			return null;
+		}
+
+		if ( val !== undefined ) {
+			// Set the scroll offset
+			return this.each(function() {
+				win = getWindow( this );
+
+				if ( win ) {
+					win.scrollTo(
+						!i ? val : jQuery(win).scrollLeft(),
+						 i ? val : jQuery(win).scrollTop()
+					);
+
+				} else {
+					this[ method ] = val;
+				}
+			});
+		} else {
+			win = getWindow( elem );
+
+			// Return the scroll offset
+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+				jQuery.support.boxModel && win.document.documentElement[ method ] ||
+					win.document.body[ method ] :
+				elem[ method ];
+		}
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+
+
+
+
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+	var type = name.toLowerCase();
+
+	// innerHeight and innerWidth
+	jQuery.fn["inner" + name] = function() {
+		return this[0] ?
+			parseFloat( jQuery.css( this[0], type, "padding" ) ) :
+			null;
+	};
+
+	// outerHeight and outerWidth
+	jQuery.fn["outer" + name] = function( margin ) {
+		return this[0] ?
+			parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
+			null;
+	};
+
+	jQuery.fn[ type ] = function( size ) {
+		// Get window width or height
+		var elem = this[0];
+		if ( !elem ) {
+			return size == null ? null : this;
+		}
+		
+		if ( jQuery.isFunction( size ) ) {
+			return this.each(function( i ) {
+				var self = jQuery( this );
+				self[ type ]( size.call( this, i, self[ type ]() ) );
+			});
+		}
+
+		return jQuery.isWindow( elem ) ?
+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+			elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
+			elem.document.body[ "client" + name ] :
+
+			// Get document width or height
+			(elem.nodeType === 9) ? // is it a document
+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+				Math.max(
+					elem.documentElement["client" + name],
+					elem.body["scroll" + name], elem.documentElement["scroll" + name],
+					elem.body["offset" + name], elem.documentElement["offset" + name]
+				) :
+
+				// Get or set width or height on the element
+				size === undefined ?
+					// Get width or height on the element
+					parseFloat( jQuery.css( elem, type ) ) :
+
+					// Set the width or height on the element (default to pixels if value is unitless)
+					this.css( type, typeof size === "string" ? size : size + "px" );
+	};
+
+});
+
+
+})(window);
Index: /Dev/trunk/d3/lib/jquery/jquery.min.js
===================================================================
--- /Dev/trunk/d3/lib/jquery/jquery.min.js	(revision 76)
+++ /Dev/trunk/d3/lib/jquery/jquery.min.js	(revision 76)
@@ -0,0 +1,166 @@
+/*!
+ * jQuery JavaScript Library v1.4.3
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Oct 14 23:10:06 2010 -0400
+ */
+(function(E,A){function U(){return false}function ba(){return true}function ja(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ga(a){var b,d,e=[],f=[],h,k,l,n,s,v,B,D;k=c.data(this,this.nodeType?"events":"__events__");if(typeof k==="function")k=k.events;if(!(a.liveFired===this||!k||!k.live||a.button&&a.type==="click")){if(a.namespace)D=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var H=k.live.slice(0);for(n=0;n<H.length;n++){k=H[n];k.origType.replace(X,
+"")===a.type?f.push(k.selector):H.splice(n--,1)}f=c(a.target).closest(f,a.currentTarget);s=0;for(v=f.length;s<v;s++){B=f[s];for(n=0;n<H.length;n++){k=H[n];if(B.selector===k.selector&&(!D||D.test(k.namespace))){l=B.elem;h=null;if(k.preType==="mouseenter"||k.preType==="mouseleave"){a.type=k.preType;h=c(a.relatedTarget).closest(k.selector)[0]}if(!h||h!==l)e.push({elem:l,handleObj:k,level:B.level})}}}s=0;for(v=e.length;s<v;s++){f=e[s];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;
+a.handleObj=f.handleObj;D=f.handleObj.origHandler.apply(f.elem,arguments);if(D===false||a.isPropagationStopped()){d=f.level;if(D===false)b=false}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(Ha,"`").replace(Ia,"&")}function ka(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Ja.test(b))return c.filter(b,
+e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function la(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var k in e[h])c.event.add(this,h,e[h][k],e[h][k].data)}}})}function Ka(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}
+function ma(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?La:Ma,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function ca(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Na.test(a)?e(a,h):ca(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?
+e(a,""):c.each(b,function(f,h){ca(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(na.concat.apply([],na.slice(0,b)),function(){d[this]=a});return d}function oa(a){if(!da[a]){var b=c("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";da[a]=d}return da[a]}function ea(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var u=E.document,c=function(){function a(){if(!b.isReady){try{u.documentElement.doScroll("left")}catch(i){setTimeout(a,
+1);return}b.ready()}}var b=function(i,r){return new b.fn.init(i,r)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,k=/\S/,l=/^\s+/,n=/\s+$/,s=/\W/,v=/\d/,B=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,D=/^[\],:{}\s]*$/,H=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,G=/(?:^|:|,)(?:\s*\[)+/g,M=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,j=/(msie) ([\w.]+)/,o=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,
+q=[],t,x=Object.prototype.toString,C=Object.prototype.hasOwnProperty,P=Array.prototype.push,N=Array.prototype.slice,R=String.prototype.trim,Q=Array.prototype.indexOf,L={};b.fn=b.prototype={init:function(i,r){var y,z,F;if(!i)return this;if(i.nodeType){this.context=this[0]=i;this.length=1;return this}if(i==="body"&&!r&&u.body){this.context=u;this[0]=u.body;this.selector="body";this.length=1;return this}if(typeof i==="string")if((y=h.exec(i))&&(y[1]||!r))if(y[1]){F=r?r.ownerDocument||r:u;if(z=B.exec(i))if(b.isPlainObject(r)){i=
+[u.createElement(z[1])];b.fn.attr.call(i,r,true)}else i=[F.createElement(z[1])];else{z=b.buildFragment([y[1]],[F]);i=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,i)}else{if((z=u.getElementById(y[2]))&&z.parentNode){if(z.id!==y[2])return f.find(i);this.length=1;this[0]=z}this.context=u;this.selector=i;return this}else if(!r&&!s.test(i)){this.selector=i;this.context=u;i=u.getElementsByTagName(i);return b.merge(this,i)}else return!r||r.jquery?(r||f).find(i):b(r).find(i);
+else if(b.isFunction(i))return f.ready(i);if(i.selector!==A){this.selector=i.selector;this.context=i.context}return b.makeArray(i,this)},selector:"",jquery:"1.4.3",length:0,size:function(){return this.length},toArray:function(){return N.call(this,0)},get:function(i){return i==null?this.toArray():i<0?this.slice(i)[0]:this[i]},pushStack:function(i,r,y){var z=b();b.isArray(i)?P.apply(z,i):b.merge(z,i);z.prevObject=this;z.context=this.context;if(r==="find")z.selector=this.selector+(this.selector?" ":
+"")+y;else if(r)z.selector=this.selector+"."+r+"("+y+")";return z},each:function(i,r){return b.each(this,i,r)},ready:function(i){b.bindReady();if(b.isReady)i.call(u,b);else q&&q.push(i);return this},eq:function(i){return i===-1?this.slice(i):this.slice(i,+i+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(i){return this.pushStack(b.map(this,function(r,y){return i.call(r,
+y,r)}))},end:function(){return this.prevObject||b(null)},push:P,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var i=arguments[0]||{},r=1,y=arguments.length,z=false,F,I,K,J,fa;if(typeof i==="boolean"){z=i;i=arguments[1]||{};r=2}if(typeof i!=="object"&&!b.isFunction(i))i={};if(y===r){i=this;--r}for(;r<y;r++)if((F=arguments[r])!=null)for(I in F){K=i[I];J=F[I];if(i!==J)if(z&&J&&(b.isPlainObject(J)||(fa=b.isArray(J)))){if(fa){fa=false;clone=K&&b.isArray(K)?K:[]}else clone=
+K&&b.isPlainObject(K)?K:{};i[I]=b.extend(z,clone,J)}else if(J!==A)i[I]=J}return i};b.extend({noConflict:function(i){E.$=e;if(i)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(i){i===true&&b.readyWait--;if(!b.readyWait||i!==true&&!b.isReady){if(!u.body)return setTimeout(b.ready,1);b.isReady=true;if(!(i!==true&&--b.readyWait>0)){if(q){for(var r=0;i=q[r++];)i.call(u,b);q=null}b.fn.triggerHandler&&b(u).triggerHandler("ready")}}},bindReady:function(){if(!p){p=true;if(u.readyState==="complete")return setTimeout(b.ready,
+1);if(u.addEventListener){u.addEventListener("DOMContentLoaded",t,false);E.addEventListener("load",b.ready,false)}else if(u.attachEvent){u.attachEvent("onreadystatechange",t);E.attachEvent("onload",b.ready);var i=false;try{i=E.frameElement==null}catch(r){}u.documentElement.doScroll&&i&&a()}}},isFunction:function(i){return b.type(i)==="function"},isArray:Array.isArray||function(i){return b.type(i)==="array"},isWindow:function(i){return i&&typeof i==="object"&&"setInterval"in i},isNaN:function(i){return i==
+null||!v.test(i)||isNaN(i)},type:function(i){return i==null?String(i):L[x.call(i)]||"object"},isPlainObject:function(i){if(!i||b.type(i)!=="object"||i.nodeType||b.isWindow(i))return false;if(i.constructor&&!C.call(i,"constructor")&&!C.call(i.constructor.prototype,"isPrototypeOf"))return false;for(var r in i);return r===A||C.call(i,r)},isEmptyObject:function(i){for(var r in i)return false;return true},error:function(i){throw i;},parseJSON:function(i){if(typeof i!=="string"||!i)return null;i=b.trim(i);
+if(D.test(i.replace(H,"@").replace(w,"]").replace(G,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(i):(new Function("return "+i))();else b.error("Invalid JSON: "+i)},noop:function(){},globalEval:function(i){if(i&&k.test(i)){var r=u.getElementsByTagName("head")[0]||u.documentElement,y=u.createElement("script");y.type="text/javascript";if(b.support.scriptEval)y.appendChild(u.createTextNode(i));else y.text=i;r.insertBefore(y,r.firstChild);r.removeChild(y)}},nodeName:function(i,r){return i.nodeName&&i.nodeName.toUpperCase()===
+r.toUpperCase()},each:function(i,r,y){var z,F=0,I=i.length,K=I===A||b.isFunction(i);if(y)if(K)for(z in i){if(r.apply(i[z],y)===false)break}else for(;F<I;){if(r.apply(i[F++],y)===false)break}else if(K)for(z in i){if(r.call(i[z],z,i[z])===false)break}else for(y=i[0];F<I&&r.call(y,F,y)!==false;y=i[++F]);return i},trim:R?function(i){return i==null?"":R.call(i)}:function(i){return i==null?"":i.toString().replace(l,"").replace(n,"")},makeArray:function(i,r){var y=r||[];if(i!=null){var z=b.type(i);i.length==
+null||z==="string"||z==="function"||z==="regexp"||b.isWindow(i)?P.call(y,i):b.merge(y,i)}return y},inArray:function(i,r){if(r.indexOf)return r.indexOf(i);for(var y=0,z=r.length;y<z;y++)if(r[y]===i)return y;return-1},merge:function(i,r){var y=i.length,z=0;if(typeof r.length==="number")for(var F=r.length;z<F;z++)i[y++]=r[z];else for(;r[z]!==A;)i[y++]=r[z++];i.length=y;return i},grep:function(i,r,y){var z=[],F;y=!!y;for(var I=0,K=i.length;I<K;I++){F=!!r(i[I],I);y!==F&&z.push(i[I])}return z},map:function(i,
+r,y){for(var z=[],F,I=0,K=i.length;I<K;I++){F=r(i[I],I,y);if(F!=null)z[z.length]=F}return z.concat.apply([],z)},guid:1,proxy:function(i,r,y){if(arguments.length===2)if(typeof r==="string"){y=i;i=y[r];r=A}else if(r&&!b.isFunction(r)){y=r;r=A}if(!r&&i)r=function(){return i.apply(y||this,arguments)};if(i)r.guid=i.guid=i.guid||r.guid||b.guid++;return r},access:function(i,r,y,z,F,I){var K=i.length;if(typeof r==="object"){for(var J in r)b.access(i,J,r[J],z,F,y);return i}if(y!==A){z=!I&&z&&b.isFunction(y);
+for(J=0;J<K;J++)F(i[J],r,z?y.call(i[J],J,F(i[J],r)):y,I);return i}return K?F(i[0],r):A},now:function(){return(new Date).getTime()},uaMatch:function(i){i=i.toLowerCase();i=M.exec(i)||g.exec(i)||j.exec(i)||i.indexOf("compatible")<0&&o.exec(i)||[];return{browser:i[1]||"",version:i[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(i,r){L["[object "+r+"]"]=r.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=
+m.version}if(b.browser.webkit)b.browser.safari=true;if(Q)b.inArray=function(i,r){return Q.call(r,i)};if(!/\s/.test("\u00a0")){l=/^[\s\xA0]+/;n=/[\s\xA0]+$/}f=b(u);if(u.addEventListener)t=function(){u.removeEventListener("DOMContentLoaded",t,false);b.ready()};else if(u.attachEvent)t=function(){if(u.readyState==="complete"){u.detachEvent("onreadystatechange",t);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=u.documentElement,b=u.createElement("script"),d=u.createElement("div"),
+e="script"+c.now();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],k=u.createElement("select"),l=k.appendChild(u.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),
+hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:l.selected,optDisabled:false,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};k.disabled=true;c.support.optDisabled=!l.disabled;b.type="text/javascript";try{b.appendChild(u.createTextNode("window."+e+"=1;"))}catch(n){}a.insertBefore(b,
+a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function s(){c.support.noCloneEvent=false;d.detachEvent("onclick",s)});d.cloneNode(true).fireEvent("onclick")}d=u.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=u.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var s=u.createElement("div");
+s.style.width=s.style.paddingLeft="1px";u.body.appendChild(s);c.boxModel=c.support.boxModel=s.offsetWidth===2;if("zoom"in s.style){s.style.display="inline";s.style.zoom=1;c.support.inlineBlockNeedsLayout=s.offsetWidth===2;s.style.display="";s.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=s.offsetWidth!==2}s.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var v=s.getElementsByTagName("td");c.support.reliableHiddenOffsets=v[0].offsetHeight===
+0;v[0].style.display="";v[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&v[0].offsetHeight===0;s.innerHTML="";u.body.removeChild(s).style.display="none"});a=function(s){var v=u.createElement("div");s="on"+s;var B=s in v;if(!B){v.setAttribute(s,"return;");B=typeof v[s]==="function"}return B};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",
+cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var pa={},Oa=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?pa:a;var e=a.nodeType,f=e?a[c.expando]:null,h=c.cache;if(!(e&&!f&&typeof b==="string"&&d===A)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=
+c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==A)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?pa:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);else if(d)delete f[e];else for(var k in a)delete a[k]}},acceptData:function(a){if(a.nodeName){var b=
+c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){if(typeof a==="undefined")return this.length?c.data(this[0]):null;else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===A){var e=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(e===A&&this.length){e=c.data(this[0],a);if(e===A&&this[0].nodeType===1){e=this[0].getAttribute("data-"+a);if(typeof e===
+"string")try{e=e==="true"?true:e==="false"?false:e==="null"?null:!c.isNaN(e)?parseFloat(e):Oa.test(e)?c.parseJSON(e):e}catch(f){}else e=A}}return e===A&&d[1]?this.data(d[0]):e}else return this.each(function(){var h=c(this),k=[d[0],b];h.triggerHandler("setData"+d[1]+"!",k);c.data(this,a,b);h.triggerHandler("changeData"+d[1]+"!",k)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=c.data(a,b);if(!d)return e||
+[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===A)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
+a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var qa=/[\n\t]/g,ga=/\s+/,Pa=/\r/g,Qa=/^(?:href|src|style)$/,Ra=/^(?:button|input)$/i,Sa=/^(?:button|input|object|select|textarea)$/i,Ta=/^a(?:rea)?$/i,ra=/^(?:radio|checkbox)$/i;c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,
+a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(s){var v=c(this);v.addClass(a.call(this,s,v.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ga),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1)if(f.className){for(var h=" "+f.className+" ",k=f.className,l=0,n=b.length;l<n;l++)if(h.indexOf(" "+b[l]+" ")<0)k+=" "+b[l];f.className=c.trim(k)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(n){var s=
+c(this);s.removeClass(a.call(this,n,s.attr("class")))});if(a&&typeof a==="string"||a===A)for(var b=(a||"").split(ga),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(qa," "),k=0,l=b.length;k<l;k++)h=h.replace(" "+b[k]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,
+f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,k=c(this),l=b,n=a.split(ga);f=n[h++];){l=e?l:!k.hasClass(f);k[l?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(qa," ").indexOf(a)>-1)return true;return false},
+val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var k=f[h];if(k.selected&&(c.support.optDisabled?!k.disabled:k.getAttribute("disabled")===null)&&(!k.parentNode.disabled||!c.nodeName(k.parentNode,"optgroup"))){a=c(k).val();if(b)return a;d.push(a)}}return d}if(ra.test(b.type)&&
+!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Pa,"")}return A}var l=c.isFunction(a);return this.each(function(n){var s=c(this),v=a;if(this.nodeType===1){if(l)v=a.call(this,n,s.val());if(v==null)v="";else if(typeof v==="number")v+="";else if(c.isArray(v))v=c.map(v,function(D){return D==null?"":D+""});if(c.isArray(v)&&ra.test(this.type))this.checked=c.inArray(s.val(),v)>=0;else if(c.nodeName(this,"select")){var B=c.makeArray(v);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),B)>=0});if(!B.length)this.selectedIndex=-1}else this.value=v}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return A;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==A;b=e&&c.props[b]||b;if(a.nodeType===1){var h=Qa.test(b);if((b in a||a[b]!==A)&&e&&!h){if(f){b==="type"&&Ra.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Sa.test(a.nodeName)||Ta.test(a.nodeName)&&a.href?0:A;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return A;a=!c.support.hrefNormalized&&e&&
+h?a.getAttribute(b,2):a.getAttribute(b);return a===null?A:a}}});var X=/\.(.*)$/,ha=/^(?:textarea|input|select)$/i,Ha=/\./g,Ia=/ /g,Ua=/[^\w\s.|`]/g,Va=function(a){return a.replace(Ua,"\\$&")},sa={focusin:0,focusout:0};c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var k=a.nodeType?"events":"__events__",l=h[k],n=h.handle;if(typeof l===
+"function"){n=l.handle;l=l.events}else if(!l){a.nodeType||(h[k]=h=function(){});h.events=l={}}if(!n)h.handle=n=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(n.elem,arguments):A};n.elem=a;b=b.split(" ");for(var s=0,v;k=b[s++];){h=f?c.extend({},f):{handler:d,data:e};if(k.indexOf(".")>-1){v=k.split(".");k=v.shift();h.namespace=v.slice(0).sort().join(".")}else{v=[];h.namespace=""}h.type=k;if(!h.guid)h.guid=d.guid;var B=l[k],D=c.event.special[k]||{};if(!B){B=l[k]=[];
+if(!D.setup||D.setup.call(a,e,v,n)===false)if(a.addEventListener)a.addEventListener(k,n,false);else a.attachEvent&&a.attachEvent("on"+k,n)}if(D.add){D.add.call(a,h);if(!h.handler.guid)h.handler.guid=d.guid}B.push(h);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,k=0,l,n,s,v,B,D,H=a.nodeType?"events":"__events__",w=c.data(a),G=w&&w[H];if(w&&G){if(typeof G==="function"){w=G;G=G.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||
+typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in G)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[k++];){v=f;l=f.indexOf(".")<0;n=[];if(!l){n=f.split(".");f=n.shift();s=RegExp("(^|\\.)"+c.map(n.slice(0).sort(),Va).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(B=G[f])if(d){v=c.event.special[f]||{};for(h=e||0;h<B.length;h++){D=B[h];if(d.guid===D.guid){if(l||s.test(D.namespace)){e==null&&B.splice(h--,1);v.remove&&v.remove.call(a,D)}if(e!=null)break}}if(B.length===0||e!=null&&B.length===1){if(!v.teardown||
+v.teardown.call(a,n)===false)c.removeEvent(a,f,w.handle);delete G[f]}}else for(h=0;h<B.length;h++){D=B[h];if(l||s.test(D.namespace)){c.event.remove(a,v,D.handler,h);B.splice(h--,1)}}}if(c.isEmptyObject(G)){if(b=w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,H);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=
+f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return A;a.result=A;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===
+false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){e=a.target;var k,l=f.replace(X,""),n=c.nodeName(e,"a")&&l==="click",s=c.event.special[l]||{};if((!s._default||s._default.call(d,a)===false)&&!n&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[l]){if(k=e["on"+l])e["on"+l]=null;c.event.triggered=true;e[l]()}}catch(v){}if(k)e["on"+l]=k;c.event.triggered=false}}},handle:function(a){var b,d,e;
+d=[];var f,h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var k=d.length;f<k;f++){var l=d[f];if(b||e.test(l.namespace)){a.handler=l.handler;a.data=
+l.data;a.handleObj=l;l=l.handler.apply(this,h);if(l!==A){a.result=l;if(l===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||u;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=u.documentElement;d=u.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==A)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ga,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
+Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=u.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
+c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ba;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ba;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ba;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
+var ta=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},ua=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?ua:ta,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?ua:ta)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
+"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=A;return ja("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=A;return ja("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
+va=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ha.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=va(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===A||f===e))if(e!=null||f){a.type="change";a.liveFired=
+A;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",va(a))}},setup:function(){if(this.type===
+"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ha.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ha.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}u.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){sa[b]++===0&&u.addEventListener(a,d,true)},teardown:function(){--sa[b]===
+0&&u.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=A}var k=b==="one"?c.proxy(f,function(n){c(this).unbind(n,k);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var l=this.length;h<l;h++)c.event.add(this[h],d,k,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
+a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
+1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var wa={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var k,l=0,n,s,v=h||this.selector;h=h?this:c(this.context);if(typeof d===
+"object"&&!d.preventDefault){for(k in d)h[b](k,e,d[k],v);return this}if(c.isFunction(e)){f=e;e=A}for(d=(d||"").split(" ");(k=d[l++])!=null;){n=X.exec(k);s="";if(n){s=n[0];k=k.replace(X,"")}if(k==="hover")d.push("mouseenter"+s,"mouseleave"+s);else{n=k;if(k==="focus"||k==="blur"){d.push(wa[k]+s);k+=s}else k=(wa[k]||k)+s;if(b==="live"){s=0;for(var B=h.length;s<B;s++)c.event.add(h[s],"live."+Y(k,v),{data:e,selector:v,handler:f,origType:k,origHandler:f,preType:n})}else h.unbind("live."+Y(k,v),f)}}return this}});
+c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
+(function(){function a(g,j,o,m,p,q){p=0;for(var t=m.length;p<t;p++){var x=m[p];if(x){x=x[g];for(var C=false;x;){if(x.sizcache===o){C=m[x.sizset];break}if(x.nodeType===1&&!q){x.sizcache=o;x.sizset=p}if(x.nodeName.toLowerCase()===j){C=x;break}x=x[g]}m[p]=C}}}function b(g,j,o,m,p,q){p=0;for(var t=m.length;p<t;p++){var x=m[p];if(x){x=x[g];for(var C=false;x;){if(x.sizcache===o){C=m[x.sizset];break}if(x.nodeType===1){if(!q){x.sizcache=o;x.sizset=p}if(typeof j!=="string"){if(x===j){C=true;break}}else if(l.filter(j,
+[x]).length>0){C=x;break}}x=x[g]}m[p]=C}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,k=true;[0,0].sort(function(){k=false;return 0});var l=function(g,j,o,m){o=o||[];var p=j=j||u;if(j.nodeType!==1&&j.nodeType!==9)return[];if(!g||typeof g!=="string")return o;var q=[],t,x,C,P,N=true,R=l.isXML(j),Q=g,L;do{d.exec("");if(t=d.exec(Q)){Q=t[3];q.push(t[1]);if(t[2]){P=t[3];
+break}}}while(t);if(q.length>1&&s.exec(g))if(q.length===2&&n.relative[q[0]])x=M(q[0]+q[1],j);else for(x=n.relative[q[0]]?[j]:l(q.shift(),j);q.length;){g=q.shift();if(n.relative[g])g+=q.shift();x=M(g,x)}else{if(!m&&q.length>1&&j.nodeType===9&&!R&&n.match.ID.test(q[0])&&!n.match.ID.test(q[q.length-1])){t=l.find(q.shift(),j,R);j=t.expr?l.filter(t.expr,t.set)[0]:t.set[0]}if(j){t=m?{expr:q.pop(),set:D(m)}:l.find(q.pop(),q.length===1&&(q[0]==="~"||q[0]==="+")&&j.parentNode?j.parentNode:j,R);x=t.expr?l.filter(t.expr,
+t.set):t.set;if(q.length>0)C=D(x);else N=false;for(;q.length;){t=L=q.pop();if(n.relative[L])t=q.pop();else L="";if(t==null)t=j;n.relative[L](C,t,R)}}else C=[]}C||(C=x);C||l.error(L||g);if(f.call(C)==="[object Array]")if(N)if(j&&j.nodeType===1)for(g=0;C[g]!=null;g++){if(C[g]&&(C[g]===true||C[g].nodeType===1&&l.contains(j,C[g])))o.push(x[g])}else for(g=0;C[g]!=null;g++)C[g]&&C[g].nodeType===1&&o.push(x[g]);else o.push.apply(o,C);else D(C,o);if(P){l(P,p,o,m);l.uniqueSort(o)}return o};l.uniqueSort=function(g){if(w){h=
+k;g.sort(w);if(h)for(var j=1;j<g.length;j++)g[j]===g[j-1]&&g.splice(j--,1)}return g};l.matches=function(g,j){return l(g,null,null,j)};l.matchesSelector=function(g,j){return l(j,null,null,[g]).length>0};l.find=function(g,j,o){var m;if(!g)return[];for(var p=0,q=n.order.length;p<q;p++){var t=n.order[p],x;if(x=n.leftMatch[t].exec(g)){var C=x[1];x.splice(1,1);if(C.substr(C.length-1)!=="\\"){x[1]=(x[1]||"").replace(/\\/g,"");m=n.find[t](x,j,o);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=j.getElementsByTagName("*"));
+return{set:m,expr:g}};l.filter=function(g,j,o,m){for(var p=g,q=[],t=j,x,C,P=j&&j[0]&&l.isXML(j[0]);g&&j.length;){for(var N in n.filter)if((x=n.leftMatch[N].exec(g))!=null&&x[2]){var R=n.filter[N],Q,L;L=x[1];C=false;x.splice(1,1);if(L.substr(L.length-1)!=="\\"){if(t===q)q=[];if(n.preFilter[N])if(x=n.preFilter[N](x,t,o,q,m,P)){if(x===true)continue}else C=Q=true;if(x)for(var i=0;(L=t[i])!=null;i++)if(L){Q=R(L,x,i,t);var r=m^!!Q;if(o&&Q!=null)if(r)C=true;else t[i]=false;else if(r){q.push(L);C=true}}if(Q!==
+A){o||(t=q);g=g.replace(n.match[N],"");if(!C)return[];break}}}if(g===p)if(C==null)l.error(g);else break;p=g}return t};l.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=l.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,j){var o=typeof j==="string",m=o&&!/\W/.test(j);o=o&&!m;if(m)j=j.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=o||q&&q.nodeName.toLowerCase()===
+j?q||false:q===j}o&&l.filter(j,g,true)},">":function(g,j){var o=typeof j==="string",m,p=0,q=g.length;if(o&&!/\W/.test(j))for(j=j.toLowerCase();p<q;p++){if(m=g[p]){o=m.parentNode;g[p]=o.nodeName.toLowerCase()===j?o:false}}else{for(;p<q;p++)if(m=g[p])g[p]=o?m.parentNode:m.parentNode===j;o&&l.filter(j,g,true)}},"":function(g,j,o){var m=e++,p=b,q;if(typeof j==="string"&&!/\W/.test(j)){q=j=j.toLowerCase();p=a}p("parentNode",j,m,g,q,o)},"~":function(g,j,o){var m=e++,p=b,q;if(typeof j==="string"&&!/\W/.test(j)){q=
+j=j.toLowerCase();p=a}p("previousSibling",j,m,g,q,o)}},find:{ID:function(g,j,o){if(typeof j.getElementById!=="undefined"&&!o)return(g=j.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,j){if(typeof j.getElementsByName!=="undefined"){for(var o=[],m=j.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&o.push(m[p]);return o.length===0?null:o}},TAG:function(g,j){return j.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,j,o,m,p,q){g=" "+g[1].replace(/\\/g,
+"")+" ";if(q)return g;q=0;for(var t;(t=j[q])!=null;q++)if(t)if(p^(t.className&&(" "+t.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))o||m.push(t);else if(o)j[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var j=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=j[1]+(j[2]||1)-0;g[3]=j[3]-0}g[0]=e++;return g},ATTR:function(g,j,o,
+m,p,q){j=g[1].replace(/\\/g,"");if(!q&&n.attrMap[j])g[1]=n.attrMap[j];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,j,o,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=l(g[3],null,null,j);else{g=l.filter(g[3],j,o,true^p);o||m.push.apply(m,g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
+true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,j,o){return!!l(o[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
+g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,j){return j===0},last:function(g,j,o,m){return j===m.length-1},even:function(g,j){return j%2===0},odd:function(g,j){return j%2===1},lt:function(g,j,o){return j<o[3]-0},gt:function(g,j,o){return j>o[3]-0},nth:function(g,j,o){return o[3]-
+0===j},eq:function(g,j,o){return o[3]-0===j}},filter:{PSEUDO:function(g,j,o,m){var p=j[1],q=n.filters[p];if(q)return q(g,o,j,m);else if(p==="contains")return(g.textContent||g.innerText||l.getText([g])||"").indexOf(j[3])>=0;else if(p==="not"){j=j[3];o=0;for(m=j.length;o<m;o++)if(j[o]===g)return false;return true}else l.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,j){var o=j[1],m=g;switch(o){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(o===
+"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":o=j[2];var p=j[3];if(o===1&&p===0)return true;var q=j[0],t=g.parentNode;if(t&&(t.sizcache!==q||!g.nodeIndex)){var x=0;for(m=t.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++x;t.sizcache=q}m=g.nodeIndex-p;return o===0?m===0:m%o===0&&m/o>=0}},ID:function(g,j){return g.nodeType===1&&g.getAttribute("id")===j},TAG:function(g,j){return j==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
+j},CLASS:function(g,j){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(j)>-1},ATTR:function(g,j){var o=j[1];o=n.attrHandle[o]?n.attrHandle[o](g):g[o]!=null?g[o]:g.getAttribute(o);var m=o+"",p=j[2],q=j[4];return o==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&o!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,j,o,m){var p=n.setFilters[j[2]];
+if(p)return p(g,o,j,m)}}},s=n.match.POS,v=function(g,j){return"\\"+(j-0+1)},B;for(B in n.match){n.match[B]=RegExp(n.match[B].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[B]=RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[B].source.replace(/\\(\d+)/g,v))}var D=function(g,j){g=Array.prototype.slice.call(g,0);if(j){j.push.apply(j,g);return j}return g};try{Array.prototype.slice.call(u.documentElement.childNodes,0)}catch(H){D=function(g,j){var o=j||[],m=0;if(f.call(g)==="[object Array]")Array.prototype.push.apply(o,
+g);else if(typeof g.length==="number")for(var p=g.length;m<p;m++)o.push(g[m]);else for(;g[m];m++)o.push(g[m]);return o}}var w,G;if(u.documentElement.compareDocumentPosition)w=function(g,j){if(g===j){h=true;return 0}if(!g.compareDocumentPosition||!j.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(j)&4?-1:1};else{w=function(g,j){var o=[],m=[],p=g.parentNode,q=j.parentNode,t=p;if(g===j){h=true;return 0}else if(p===q)return G(g,j);else if(p){if(!q)return 1}else return-1;
+for(;t;){o.unshift(t);t=t.parentNode}for(t=q;t;){m.unshift(t);t=t.parentNode}p=o.length;q=m.length;for(t=0;t<p&&t<q;t++)if(o[t]!==m[t])return G(o[t],m[t]);return t===p?G(g,m[t],-1):G(o[t],j,1)};G=function(g,j,o){if(g===j)return o;for(g=g.nextSibling;g;){if(g===j)return-1;g=g.nextSibling}return 1}}l.getText=function(g){for(var j="",o,m=0;g[m];m++){o=g[m];if(o.nodeType===3||o.nodeType===4)j+=o.nodeValue;else if(o.nodeType!==8)j+=l.getText(o.childNodes)}return j};(function(){var g=u.createElement("div"),
+j="script"+(new Date).getTime();g.innerHTML="<a name='"+j+"'/>";var o=u.documentElement;o.insertBefore(g,o.firstChild);if(u.getElementById(j)){n.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:A:[]};n.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}o.removeChild(g);
+o=g=null})();(function(){var g=u.createElement("div");g.appendChild(u.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(j,o){var m=o.getElementsByTagName(j[1]);if(j[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(j){return j.getAttribute("href",2)};g=null})();u.querySelectorAll&&
+function(){var g=l,j=u.createElement("div");j.innerHTML="<p class='TEST'></p>";if(!(j.querySelectorAll&&j.querySelectorAll(".TEST").length===0)){l=function(m,p,q,t){p=p||u;if(!t&&!l.isXML(p))if(p.nodeType===9)try{return D(p.querySelectorAll(m),q)}catch(x){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var C=p.id,P=p.id="__sizzle__";try{return D(p.querySelectorAll("#"+P+" "+m),q)}catch(N){}finally{if(C)p.id=C;else p.removeAttribute("id")}}return g(m,p,q,t)};for(var o in g)l[o]=g[o];
+j=null}}();(function(){var g=u.documentElement,j=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,o=false;try{j.call(u.documentElement,":sizzle")}catch(m){o=true}if(j)l.matchesSelector=function(p,q){try{if(o||!n.match.PSEUDO.test(q))return j.call(p,q)}catch(t){}return l(q,null,null,[p]).length>0}})();(function(){var g=u.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===
+0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(j,o,m){if(typeof o.getElementsByClassName!=="undefined"&&!m)return o.getElementsByClassName(j[1])};g=null}}})();l.contains=u.documentElement.contains?function(g,j){return g!==j&&(g.contains?g.contains(j):true)}:function(g,j){return!!(g.compareDocumentPosition(j)&16)};l.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var M=function(g,
+j){for(var o=[],m="",p,q=j.nodeType?[j]:j;p=n.match.PSEUDO.exec(g);){m+=p[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;p=0;for(var t=q.length;p<t;p++)l(g,q[p],o);return l.filter(m,o)};c.find=l;c.expr=l.selectors;c.expr[":"]=c.expr.filters;c.unique=l.uniqueSort;c.text=l.getText;c.isXMLDoc=l.isXML;c.contains=l.contains})();var Wa=/Until$/,Xa=/^(?:parents|prevUntil|prevAll)/,Ya=/,/,Ja=/^.[^:#\[\.,]*$/,Za=Array.prototype.slice,$a=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("",
+"find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var k=0;k<d;k++)if(b[k]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(ka(this,a,false),"not",a)},filter:function(a){return this.pushStack(ka(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,
+b){var d=[],e,f,h=this[0];if(c.isArray(a)){var k={},l,n=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:n})}h=h.parentNode;n++}}return d}k=$a.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(k?k.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||
+!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});
+c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",
+d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Wa.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||Ya.test(e))&&Xa.test(a))f=f.reverse();return this.pushStack(f,a,Za.call(arguments).join(","))}});
+c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===A||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var xa=/ jQuery\d+="(?:\d+|null)"/g,
+$=/^\s+/,ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,za=/<([\w:]+)/,ab=/<tbody/i,bb=/<|&#?\w+;/,Aa=/<(?:script|object|embed|option|style)/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,cb=/\=([^="'>\s]+\/)>/g,O={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],
+area:[1,"<map>","</map>"],_default:[0,"",""]};O.optgroup=O.option;O.tbody=O.tfoot=O.colgroup=O.caption=O.thead;O.th=O.td;if(!c.support.htmlSerialize)O._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==A)return this.empty().append((this[0]&&this[0].ownerDocument||u).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,
+d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},
+unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=
+c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));
+c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(xa,"").replace(cb,'="$1">').replace($,
+"")],e)[0]}else return this.cloneNode(true)});if(a===true){la(this,b);la(this.find("*"),b.find("*"))}return b},html:function(a){if(a===A)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(xa,""):null;else if(typeof a==="string"&&!Aa.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!O[(za.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ya,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?
+this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,
+true)},domManip:function(a,b,d){var e,f,h=a[0],k=[],l;if(!c.support.checkClone&&arguments.length===3&&typeof h==="string"&&Ba.test(h))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(h))return this.each(function(s){var v=c(this);a[0]=h.call(this,s,b?v.html():A);v.domManip(a,b,d)});if(this[0]){e=h&&h.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);l=e.fragment;if(f=l.childNodes.length===1?l=l.firstChild:
+l.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var n=this.length;f<n;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):this[f]:this[f],f>0||e.cacheable||this.length>1?l.cloneNode(true):l)}k.length&&c.each(k,Ka)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:u;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===u&&!Aa.test(a[0])&&(c.support.checkClone||
+!Ba.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=
+d.length;f<h;f++){var k=(f>0?this.clone(true):this).get();c(d[f])[b](k);e=e.concat(k)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||u;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||u;for(var f=[],h=0,k;(k=a[h])!=null;h++){if(typeof k==="number")k+="";if(k){if(typeof k==="string"&&!bb.test(k))k=b.createTextNode(k);else if(typeof k==="string"){k=k.replace(ya,"<$1></$2>");var l=(za.exec(k)||["",""])[1].toLowerCase(),n=O[l]||O._default,
+s=n[0],v=b.createElement("div");for(v.innerHTML=n[1]+k+n[2];s--;)v=v.lastChild;if(!c.support.tbody){s=ab.test(k);l=l==="table"&&!s?v.firstChild&&v.firstChild.childNodes:n[1]==="<table>"&&!s?v.childNodes:[];for(n=l.length-1;n>=0;--n)c.nodeName(l[n],"tbody")&&!l[n].childNodes.length&&l[n].parentNode.removeChild(l[n])}!c.support.leadingWhitespace&&$.test(k)&&v.insertBefore(b.createTextNode($.exec(k)[0]),v.firstChild);k=v.childNodes}if(k.nodeType)f.push(k);else f=c.merge(f,k)}}if(d)for(h=0;f[h];h++)if(e&&
+c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,k=0,l;(l=a[k])!=null;k++)if(!(l.nodeName&&c.noData[l.nodeName.toLowerCase()]))if(d=l[c.expando]){if((b=e[d])&&b.events)for(var n in b.events)f[n]?
+c.event.remove(l,n):c.removeEvent(l,n,b.handle);if(h)delete l[c.expando];else l.removeAttribute&&l.removeAttribute(c.expando);delete e[d]}}});var Ca=/alpha\([^)]*\)/i,db=/opacity=([^)]*)/,eb=/-([a-z])/ig,fb=/([A-Z])/g,Da=/^-?\d+(?:px)?$/i,gb=/^-?\d/,hb={position:"absolute",visibility:"hidden",display:"block"},La=["Left","Right"],Ma=["Top","Bottom"],W,ib=u.defaultView&&u.defaultView.getComputedStyle,jb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===A)return this;
+return c.access(this,a,b,true,function(d,e,f){return f!==A?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),k=a.style,l=c.cssHooks[h];b=c.cssProps[h]||
+h;if(d!==A){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!l||!("set"in l)||(d=l.set(a,d))!==A)try{k[b]=d}catch(n){}}}else{if(l&&"get"in l&&(f=l.get(a,false,e))!==A)return f;return k[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==A)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=
+e[f]},camelCase:function(a){return a.replace(eb,jb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=ma(d,b,f);else c.swap(d,hb,function(){h=ma(d,b,f)});return h+"px"}},set:function(d,e){if(Da.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return db.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":
+b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=d.filter||"";d.filter=Ca.test(f)?f.replace(Ca,e):d.filter+" "+e}};if(ib)W=function(a,b,d){var e;d=d.replace(fb,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return A;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};else if(u.documentElement.currentStyle)W=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],
+h=a.style;if(!Da.test(f)&&gb.test(f)){d=h.left;e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f};if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var kb=c.now(),lb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+mb=/^(?:select|textarea)/i,nb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ob=/^(?:GET|HEAD|DELETE)$/,Na=/\[\]$/,T=/\=\?(&|$)/,ia=/\?/,pb=/([?&])_=[^&]*/,qb=/^(\w+:)?\/\/([^\/?#]+)/,rb=/%20/g,sb=/#.*$/,Ea=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ea)return Ea.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=
+b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(k,l){if(l==="success"||l==="notmodified")h.html(f?c("<div>").append(k.responseText.replace(lb,"")).find(f):k.responseText);d&&h.each(d,[k.responseText,l,k])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
+!this.disabled&&(this.checked||mb.test(this.nodeName)||nb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
+getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
+script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),k=ob.test(h);b.url=b.url.replace(sb,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ia.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
+!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+kb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var l=E[d];E[d]=function(m){f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);if(c.isFunction(l))l(m);else{E[d]=A;try{delete E[d]}catch(p){}}v&&v.removeChild(B)}}if(b.dataType==="script"&&b.cache===null)b.cache=
+false;if(b.cache===false&&h==="GET"){var n=c.now(),s=b.url.replace(pb,"$1_="+n);b.url=s+(s===b.url?(ia.test(b.url)?"&":"?")+"_="+n:"")}if(b.data&&h==="GET")b.url+=(ia.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");n=(n=qb.exec(b.url))&&(n[1]&&n[1]!==location.protocol||n[2]!==location.host);if(b.dataType==="script"&&h==="GET"&&n){var v=u.getElementsByTagName("head")[0]||u.documentElement,B=u.createElement("script");if(b.scriptCharset)B.charset=b.scriptCharset;B.src=
+b.url;if(!d){var D=false;B.onload=B.onreadystatechange=function(){if(!D&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){D=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);B.onload=B.onreadystatechange=null;v&&B.parentNode&&v.removeChild(B)}}}v.insertBefore(B,v.firstChild);return A}var H=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!k||a&&a.contentType)w.setRequestHeader("Content-Type",
+b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}n||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(G){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
+c.triggerGlobal(b,"ajaxSend",[w,b]);var M=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){H||c.handleComplete(b,w,e,f);H=true;if(w)w.onreadystatechange=c.noop}else if(!H&&w&&(w.readyState===4||m==="timeout")){H=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
+c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&g.call&&g.call(w);M("abort")}}catch(j){}b.async&&b.timeout>0&&setTimeout(function(){w&&!H&&M("timeout")},b.timeout);try{w.send(k||b.data==null?null:b.data)}catch(o){c.handleError(b,w,null,o);c.handleComplete(b,w,e,f)}b.async||M();return w}},param:function(a,b){var d=[],e=function(h,k){k=c.isFunction(k)?k():k;d[d.length]=encodeURIComponent(h)+
+"="+encodeURIComponent(k)};if(b===A)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)ca(f,a[f],b,e);return d.join("&").replace(rb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",[b,a])},handleComplete:function(a,
+b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),e=a.getResponseHeader("Etag");
+if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});if(E.ActiveXObject)c.ajaxSettings.xhr=
+function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var da={},tb=/^(?:toggle|show|hide)$/,ub=/^([+\-]=)?([\d+.\-]+)(.*)$/,aa,na=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",3),a,b,d);else{a=
+0;for(b=this.length;a<b;a++){if(!c.data(this[a],"olddisplay")&&this[a].style.display==="none")this[a].style.display="";this[a].style.display===""&&c.css(this[a],"display")==="none"&&c.data(this[a],"olddisplay",oa(this[a].nodeName))}for(a=0;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",d)}for(a=
+0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,d,e);if(c.isEmptyObject(a))return this.each(f.complete);
+return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),k,l=this.nodeType===1,n=l&&c(this).is(":hidden"),s=this;for(k in a){var v=c.camelCase(k);if(k!==v){a[v]=a[k];delete a[k];k=v}if(a[k]==="hide"&&n||a[k]==="show"&&!n)return h.complete.call(this);if(l&&(k==="height"||k==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(oa(this.nodeName)===
+"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[k])){(h.specialEasing=h.specialEasing||{})[k]=a[k][1];a[k]=a[k][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(B,D){var H=new c.fx(s,h,B);if(tb.test(D))H[D==="toggle"?n?"show":"hide":D](a);else{var w=ub.exec(D),G=H.cur(true)||0;if(w){var M=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(s,B,(M||1)+g);
+G=(M||1)/H.cur(true)*G;c.style(s,B,G+g)}if(w[1])M=(w[1]==="-="?-1:1)*M+G;H.custom(G,M,g)}else H.custom(G,D,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
+d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
+Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(h){return f.step(h)}
+this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var f=this;a=c.fx;e.elem=this.elem;if(e()&&c.timers.push(e)&&!aa)aa=setInterval(a.tick,a.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
+this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(l,n){f.style["overflow"+n]=h.overflow[l]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
+this.options.show)for(var k in this.options.curAnim)c.style(this.elem,k,this.options.orig[k]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
+c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(aa);aa=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
+b.elem}).length};var vb=/^t(?:able|d|h)$/i,Fa=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in u.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(k){c.offset.setOffset(this,a,k)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=ea(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
+h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,e=b.ownerDocument,f,h=e.documentElement,k=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;
+for(var l=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==k&&b!==h;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;f=e?e.getComputedStyle(b,null):b.currentStyle;l-=b.scrollTop;n-=b.scrollLeft;if(b===d){l+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&vb.test(b.nodeName))){l+=parseFloat(f.borderTopWidth)||0;n+=parseFloat(f.borderLeftWidth)||0}d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&f.overflow!=="visible"){l+=
+parseFloat(f.borderTopWidth)||0;n+=parseFloat(f.borderLeftWidth)||0}f=f}if(f.position==="relative"||f.position==="static"){l+=k.offsetTop;n+=k.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){l+=Math.max(h.scrollTop,k.scrollTop);n+=Math.max(h.scrollLeft,k.scrollLeft)}return{top:l,left:n}};c.offset={initialize:function(){var a=u.body,b=u.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
+height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
+f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
+"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),k=c.css(a,"top"),l=c.css(a,"left"),n=e==="absolute"&&c.inArray("auto",[k,l])>-1;e={};var s={};if(n)s=f.position();k=n?s.top:parseInt(k,10)||0;l=n?s.left:parseInt(l,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+k;if(b.left!=null)e.left=b.left-h.left+l;"using"in b?b.using.call(a,
+e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Fa.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||u.body;a&&!Fa.test(a.nodeName)&&
+c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==A)return this.each(function(){if(h=ea(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=ea(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
+c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(h){var k=c(this);k[d](e.call(this,h,k[d]()))});return c.isWindow(f)?f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b]:f.nodeType===9?Math.max(f.documentElement["client"+
+b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]):e===A?parseFloat(c.css(f,d)):this.css(d,typeof e==="string"?e:e+"px")}})})(window);
Index: /Dev/trunk/d3/lib/polymaps/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/polymaps/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/polymaps/LICENSE	(revision 76)
@@ -0,0 +1,28 @@
+Copyright (c) 2010, SimpleGeo and Stamen Design
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of SimpleGeo nor the names of its contributors may be used
+  to endorse or promote products derived from this software without specific
+  prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL SIMPLEGEO BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
Index: /Dev/trunk/d3/lib/protovis/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/protovis/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/protovis/LICENSE	(revision 76)
@@ -0,0 +1,27 @@
+Copyright (c) 2010, Stanford Visualization Group
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of Stanford University nor the names of its contributors
+  may be used to endorse or promote products derived from this software
+  without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: /Dev/trunk/d3/lib/science/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/science/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/science/LICENSE	(revision 76)
@@ -0,0 +1,26 @@
+Copyright (c) 2011, Jason Davies
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+  * The name Jason Davies may not be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: /Dev/trunk/d3/lib/science/science.js
===================================================================
--- /Dev/trunk/d3/lib/science/science.js	(revision 76)
+++ /Dev/trunk/d3/lib/science/science.js	(revision 76)
@@ -0,0 +1,5 @@
+(function(){science = {version: "0.0.1"}; // semver
+science.functor = function(v) {
+  return typeof v === "function" ? v : function() { return v; };
+};
+})()
Index: /Dev/trunk/d3/lib/science/science.min.js
===================================================================
--- /Dev/trunk/d3/lib/science/science.min.js	(revision 76)
+++ /Dev/trunk/d3/lib/science/science.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){science={version:"0.0.1"},science.functor=function(a){return typeof a=="function"?a:function(){return a}}})()
Index: /Dev/trunk/d3/lib/science/science.stats.js
===================================================================
--- /Dev/trunk/d3/lib/science/science.stats.js	(revision 76)
+++ /Dev/trunk/d3/lib/science/science.stats.js	(revision 76)
@@ -0,0 +1,166 @@
+(function(){science.stats = {};
+// Bandwidth selectors for Gaussian kernels.
+// Based on R's implementations in `stats.bw`.
+science.stats.bandwidth = {
+
+  // Silverman, B. W. (1986) Density Estimation. London: Chapman and Hall.
+  nrd0: function(x) {
+    var hi = Math.sqrt(science.stats.variance(x));
+    if (!(lo = Math.min(hi, science.stats.iqr(x) / 1.34)))
+      (lo = hi) || (lo = Math.abs(x[1])) || (lo = 1);
+    return .9 * lo * Math.pow(x.length, -.2);
+  },
+
+  // Scott, D. W. (1992) Multivariate Density Estimation: Theory, Practice, and
+  // Visualization. Wiley.
+  nrd: function(x) {
+    var h = science.stats.iqr(x) / 1.34;
+    return 1.06 * Math.min(Math.sqrt(science.stats.variance(x)), h)
+      * Math.pow(x.length, -1/5);
+  }
+};
+// See <http://en.wikipedia.org/wiki/Kernel_(statistics)>.
+science.stats.kernel = {
+  uniform: function(u) {
+    if (u <= 1 && u >= -1) return .5;
+    return 0;
+  },
+  triangular: function(u) {
+    if (u <= 1 && u >= -1) return 1 - Math.abs(u);
+    return 0;
+  },
+  epanechnikov: function(u) {
+    if (u <= 1 && u >= -1) return .75 * (1 - u * u);
+    return 0;
+  },
+  quartic: function(u) {
+    if (u <= 1 && u >= -1) {
+      var tmp = 1 - u * u;
+      return (15 / 16) * tmp * tmp;
+    }
+    return 0;
+  },
+  triweight: function(u) {
+    if (u <= 1 && u >= -1) {
+      var tmp = 1 - u * u;
+      return (35 / 32) * tmp * tmp * tmp;
+    }
+    return 0;
+  },
+  gaussian: function(u) {
+    return 1 / Math.sqrt(2 * Math.PI) * Math.exp(-.5 * u * u);
+  },
+  cosine: function(u) {
+    if (u <= 1 && u >= -1) return Math.PI / 4 * Math.cos(Math.PI / 2 * u);
+    return 0;
+  }
+};
+// http://exploringdata.net/den_trac.htm
+science.stats.kde = function() {
+  var kernel = science.stats.kernel.gaussian,
+      sample = [],
+      bandwidth = science.stats.bandwidth.nrd;
+
+  function kde(points, i) {
+    var bw = bandwidth.call(this, sample);
+    return points.map(function(x) {
+      var i = -1,
+          y = 0,
+          n = sample.length;
+      while (++i < n) {
+        y += kernel((x - sample[i]) / bw);
+      }
+      return [x, y / bw / n];
+    });
+  }
+
+  kde.kernel = function(x) {
+    if (!arguments.length) return kernel;
+    kernel = x;
+    return kde;
+  };
+
+  kde.sample = function(x) {
+    if (!arguments.length) return sample;
+    sample = x;
+    return kde;
+  };
+
+  kde.bandwidth = function(x) {
+    if (!arguments.length) return bandwidth;
+    bandwidth = science.functor(x);
+    return kde;
+  };
+
+  return kde;
+};
+science.stats.iqr = function(x) {
+  var quartiles = science.stats.quantiles(x, [.25, .75]);
+  return quartiles[1] - quartiles[0];
+};
+// Welford's algorithm.
+science.stats.mean = function(x) {
+  var n = x.length;
+  if (n === 0) return NaN;
+  var m = 0,
+      i = -1;
+  while (++i < n) m += (x[i] - m) / (i + 1);
+  return m;
+};
+science.stats.median = function(x) {
+  return science.stats.quantiles(x, [.5])[0];
+};
+science.stats.mode = function(x) {
+  x = x.slice().sort(science.ascending);
+  var mode,
+      n = x.length,
+      i = -1,
+      l = i,
+      last = null,
+      max = 0,
+      tmp,
+      v;
+  while (++i < n) {
+    if ((v = x[i]) !== last) {
+      if ((tmp = i - l) > max) {
+        max = tmp;
+        mode = last;
+      }
+      last = v;
+      l = i;
+    }
+  }
+  return mode;
+};
+// Uses R's quantile algorithm type=7.
+science.stats.quantiles = function(d, quantiles) {
+  d = d.slice().sort(science.ascending);
+  var n_1 = d.length - 1;
+  return quantiles.map(function(q) {
+    if (q === 0) return d[0];
+    else if (q === 1) return d[n_1];
+
+    var index = 1 + q * n_1,
+        lo = Math.floor(index),
+        h = index - lo,
+        a = d[lo - 1];
+
+    return h === 0 ? a : a + h * (d[lo] - a);
+  });
+};
+// Unbiased estimate of a sample's variance.
+// Also known as the sample variance, where the denominator is n - 1.
+science.stats.variance = function(x) {
+  var n = x.length;
+  if (n < 1) return NaN;
+  if (n === 1) return 0;
+  var mean = science.stats.mean(x),
+      i = -1,
+      s = 0;
+  while (++i < n) {
+    var v = x[i] - mean;
+    s += v * v;
+  }
+  return s / (n - 1);
+};
+})()
Index: /Dev/trunk/d3/lib/science/science.stats.min.js
===================================================================
--- /Dev/trunk/d3/lib/science/science.stats.min.js	(revision 76)
+++ /Dev/trunk/d3/lib/science/science.stats.min.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){science.stats={},science.stats.bandwidth={nrd0:function(a){var b=Math.sqrt(science.stats.variance(a));(lo=Math.min(b,science.stats.iqr(a)/1.34))||(lo=b)||(lo=Math.abs(a[1]))||(lo=1);return.9*lo*Math.pow(a.length,-0.2)},nrd:function(a){var b=science.stats.iqr(a)/1.34;return 1.06*Math.min(Math.sqrt(science.stats.variance(a)),b)*Math.pow(a.length,-0.2)}},science.stats.kernel={uniform:function(a){if(a<=1&&a>=-1)return.5;return 0},triangular:function(a){if(a<=1&&a>=-1)return 1-Math.abs(a);return 0},epanechnikov:function(a){if(a<=1&&a>=-1)return.75*(1-a*a);return 0},quartic:function(a){if(a<=1&&a>=-1){var b=1-a*a;return.9375*b*b}return 0},triweight:function(a){if(a<=1&&a>=-1){var b=1-a*a;return 35/32*b*b*b}return 0},gaussian:function(a){return 1/Math.sqrt(2*Math.PI)*Math.exp(-0.5*a*a)},cosine:function(a){if(a<=1&&a>=-1)return Math.PI/4*Math.cos(Math.PI/2*a);return 0}},science.stats.kde=function(){function d(d,e){var f=c.call(this,b);return d.map(function(c){var d=-1,e=0,g=b.length;while(++d<g)e+=a((c-b[d])/f);return[c,e/f/g]})}var a=science.stats.kernel.gaussian,b=[],c=science.stats.bandwidth.nrd;d.kernel=function(b){if(!arguments.length)return a;a=b;return d},d.sample=function(a){if(!arguments.length)return b;b=a;return d},d.bandwidth=function(a){if(!arguments.length)return c;c=science.functor(a);return d};return d},science.stats.iqr=function(a){var b=science.stats.quantiles(a,[.25,.75]);return b[1]-b[0]},science.stats.mean=function(a){var b=a.length;if(b===0)return NaN;var c=0,d=-1;while(++d<b)c+=(a[d]-c)/(d+1);return c},science.stats.median=function(a){return science.stats.quantiles(a,[.5])[0]},science.stats.mode=function(a){a=a.slice().sort(science.ascending);var b,c=a.length,d=-1,e=d,f=null,g=0,h,i;while(++d<c)(i=a[d])!==f&&((h=d-e)>g&&(g=h,b=f),f=i,e=d);return b},science.stats.quantiles=function(a,b){a=a.slice().sort(science.ascending);var c=a.length-1;return b.map(function(b){if(b===0)return a[0];if(b===1)return a[c];var e=1+b*c,f=Math.floor(e),g=e-f,h=a[f-1];return g===0?h:h+g*(a[f]-h)})},science.stats.variance=function(a){var b=a.length;if(b<1)return NaN;if(b===1)return 0;var c=science.stats.mean(a),d=-1,e=0;while(++d<b){var f=a[d]-c;e+=f*f}return e/(b-1)}})()
Index: /Dev/trunk/d3/lib/sizzle/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/sizzle/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/sizzle/LICENSE	(revision 76)
@@ -0,0 +1,24 @@
+Copyright (c) 2009, John Resig
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the <organization> nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY John Resig ''AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: /Dev/trunk/d3/lib/sizzle/sizzle.js
===================================================================
--- /Dev/trunk/d3/lib/sizzle/sizzle.js	(revision 76)
+++ /Dev/trunk/d3/lib/sizzle/sizzle.js	(revision 76)
@@ -0,0 +1,1376 @@
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+	done = 0,
+	toString = Object.prototype.toString,
+	hasDuplicate = false,
+	baseHasDuplicate = true;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+	baseHasDuplicate = false;
+	return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+	results = results || [];
+	context = context || document;
+
+	var origContext = context;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+	
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var m, set, checkSet, extra, ret, cur, pop, i,
+		prune = true,
+		contextXML = Sizzle.isXML( context ),
+		parts = [],
+		soFar = selector;
+	
+	// Reset the position of the chunker regexp (start from head)
+	do {
+		chunker.exec( "" );
+		m = chunker.exec( soFar );
+
+		if ( m ) {
+			soFar = m[3];
+		
+			parts.push( m[1] );
+		
+			if ( m[2] ) {
+				extra = m[3];
+				break;
+			}
+		}
+	} while ( m );
+
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+			set = posProcess( parts[0] + parts[1], context );
+
+		} else {
+			set = Expr.relative[ parts[0] ] ?
+				[ context ] :
+				Sizzle( parts.shift(), context );
+
+			while ( parts.length ) {
+				selector = parts.shift();
+
+				if ( Expr.relative[ selector ] ) {
+					selector += parts.shift();
+				}
+				
+				set = posProcess( selector, set );
+			}
+		}
+
+	} else {
+		// Take a shortcut and set the context if the root selector is an ID
+		// (but not if it'll be faster if the inner selector is an ID)
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+			ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set )[0] :
+				ret.set[0];
+		}
+
+		if ( context ) {
+			ret = seed ?
+				{ expr: parts.pop(), set: makeArray(seed) } :
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+			set = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set ) :
+				ret.set;
+
+			if ( parts.length > 0 ) {
+				checkSet = makeArray( set );
+
+			} else {
+				prune = false;
+			}
+
+			while ( parts.length ) {
+				cur = parts.pop();
+				pop = cur;
+
+				if ( !Expr.relative[ cur ] ) {
+					cur = "";
+				} else {
+					pop = parts.pop();
+				}
+
+				if ( pop == null ) {
+					pop = context;
+				}
+
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
+			}
+
+		} else {
+			checkSet = parts = [];
+		}
+	}
+
+	if ( !checkSet ) {
+		checkSet = set;
+	}
+
+	if ( !checkSet ) {
+		Sizzle.error( cur || selector );
+	}
+
+	if ( toString.call(checkSet) === "[object Array]" ) {
+		if ( !prune ) {
+			results.push.apply( results, checkSet );
+
+		} else if ( context && context.nodeType === 1 ) {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+
+		} else {
+			for ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+					results.push( set[i] );
+				}
+			}
+		}
+
+	} else {
+		makeArray( checkSet, results );
+	}
+
+	if ( extra ) {
+		Sizzle( extra, origContext, results, seed );
+		Sizzle.uniqueSort( results );
+	}
+
+	return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+	if ( sortOrder ) {
+		hasDuplicate = baseHasDuplicate;
+		results.sort( sortOrder );
+
+		if ( hasDuplicate ) {
+			for ( var i = 1; i < results.length; i++ ) {
+				if ( results[i] === results[ i - 1 ] ) {
+					results.splice( i--, 1 );
+				}
+			}
+		}
+	}
+
+	return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+	return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+	return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+	var set;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+		var match,
+			type = Expr.order[i];
+		
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+			var left = match[1];
+			match.splice( 1, 1 );
+
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
+				match[1] = (match[1] || "").replace(/\\/g, "");
+				set = Expr.find[ type ]( match, context, isXML );
+
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( "*" ) :
+			[];
+	}
+
+	return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+	var match, anyFound,
+		old = expr,
+		result = [],
+		curLoop = set,
+		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+	while ( expr && set.length ) {
+		for ( var type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				var found, item,
+					filter = Expr.filter[ type ],
+					left = match[1];
+
+				anyFound = false;
+
+				match.splice(1,1);
+
+				if ( left.substr( left.length - 1 ) === "\\" ) {
+					continue;
+				}
+
+				if ( curLoop === result ) {
+					result = [];
+				}
+
+				if ( Expr.preFilter[ type ] ) {
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+					if ( !match ) {
+						anyFound = found = true;
+
+					} else if ( match === true ) {
+						continue;
+					}
+				}
+
+				if ( match ) {
+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+						if ( item ) {
+							found = filter( item, match, i, curLoop );
+							var pass = not ^ !!found;
+
+							if ( inplace && found != null ) {
+								if ( pass ) {
+									anyFound = true;
+
+								} else {
+									curLoop[i] = false;
+								}
+
+							} else if ( pass ) {
+								result.push( item );
+								anyFound = true;
+							}
+						}
+					}
+				}
+
+				if ( found !== undefined ) {
+					if ( !inplace ) {
+						curLoop = result;
+					}
+
+					expr = expr.replace( Expr.match[ type ], "" );
+
+					if ( !anyFound ) {
+						return [];
+					}
+
+					break;
+				}
+			}
+		}
+
+		// Improper expression
+		if ( expr === old ) {
+			if ( anyFound == null ) {
+				Sizzle.error( expr );
+
+			} else {
+				break;
+			}
+		}
+
+		old = expr;
+	}
+
+	return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+	throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+	order: [ "ID", "NAME", "TAG" ],
+
+	match: {
+		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+	},
+
+	leftMatch: {},
+
+	attrMap: {
+		"class": "className",
+		"for": "htmlFor"
+	},
+
+	attrHandle: {
+		href: function( elem ) {
+			return elem.getAttribute( "href" );
+		}
+	},
+
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !/\W/.test( part ),
+				isPartStrNotTag = isPartStr && !isTag;
+
+			if ( isTag ) {
+				part = part.toLowerCase();
+			}
+
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+				if ( (elem = checkSet[i]) ) {
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+						elem || false :
+						elem === part;
+				}
+			}
+
+			if ( isPartStrNotTag ) {
+				Sizzle.filter( part, checkSet, true );
+			}
+		},
+
+		">": function( checkSet, part ) {
+			var elem,
+				isPartStr = typeof part === "string",
+				i = 0,
+				l = checkSet.length;
+
+			if ( isPartStr && !/\W/.test( part ) ) {
+				part = part.toLowerCase();
+
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+
+			} else {
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						checkSet[i] = isPartStr ?
+							elem.parentNode :
+							elem.parentNode === part;
+					}
+				}
+
+				if ( isPartStr ) {
+					Sizzle.filter( part, checkSet, true );
+				}
+			}
+		},
+
+		"": function(checkSet, part, isXML){
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !/\W/.test(part) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+		},
+
+		"~": function( checkSet, part, isXML ) {
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !/\W/.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+		}
+	},
+
+	find: {
+		ID: function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		},
+
+		NAME: function( match, context ) {
+			if ( typeof context.getElementsByName !== "undefined" ) {
+				var ret = [],
+					results = context.getElementsByName( match[1] );
+
+				for ( var i = 0, l = results.length; i < l; i++ ) {
+					if ( results[i].getAttribute("name") === match[1] ) {
+						ret.push( results[i] );
+					}
+				}
+
+				return ret.length === 0 ? null : ret;
+			}
+		},
+
+		TAG: function( match, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( match[1] );
+			}
+		}
+	},
+	preFilter: {
+		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+			match = " " + match[1].replace(/\\/g, "") + " ";
+
+			if ( isXML ) {
+				return match;
+			}
+
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+				if ( elem ) {
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+
+		ID: function( match ) {
+			return match[1].replace(/\\/g, "");
+		},
+
+		TAG: function( match, curLoop ) {
+			return match[1].toLowerCase();
+		},
+
+		CHILD: function( match ) {
+			if ( match[1] === "nth" ) {
+				if ( !match[2] ) {
+					Sizzle.error( match[0] );
+				}
+
+				match[2] = match[2].replace(/^\+|\s*/g, '');
+
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+				// calculate the numbers (first)n+(last) including if they are negative
+				match[2] = (test[1] + (test[2] || 1)) - 0;
+				match[3] = test[3] - 0;
+			}
+			else if ( match[2] ) {
+				Sizzle.error( match[0] );
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+
+		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+			var name = match[1] = match[1].replace(/\\/g, "");
+			
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			// Handle if an un-quoted value was used
+			match[4] = ( match[4] || match[5] || "" ).replace(/\\/g, "");
+
+			if ( match[2] === "~=" ) {
+				match[4] = " " + match[4] + " ";
+			}
+
+			return match;
+		},
+
+		PSEUDO: function( match, curLoop, inplace, result, not ) {
+			if ( match[1] === "not" ) {
+				// If we're dealing with a complex expression, or a simple one
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+					match[3] = Sizzle(match[3], null, null, curLoop);
+
+				} else {
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+					if ( !inplace ) {
+						result.push.apply( result, ret );
+					}
+
+					return false;
+				}
+
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+				return true;
+			}
+			
+			return match;
+		},
+
+		POS: function( match ) {
+			match.unshift( true );
+
+			return match;
+		}
+	},
+	
+	filters: {
+		enabled: function( elem ) {
+			return elem.disabled === false && elem.type !== "hidden";
+		},
+
+		disabled: function( elem ) {
+			return elem.disabled === true;
+		},
+
+		checked: function( elem ) {
+			return elem.checked === true;
+		},
+		
+		selected: function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			elem.parentNode.selectedIndex;
+			
+			return elem.selected === true;
+		},
+
+		parent: function( elem ) {
+			return !!elem.firstChild;
+		},
+
+		empty: function( elem ) {
+			return !elem.firstChild;
+		},
+
+		has: function( elem, i, match ) {
+			return !!Sizzle( match[3], elem ).length;
+		},
+
+		header: function( elem ) {
+			return (/h\d/i).test( elem.nodeName );
+		},
+
+		text: function( elem ) {
+			return "text" === elem.type;
+		},
+		radio: function( elem ) {
+			return "radio" === elem.type;
+		},
+
+		checkbox: function( elem ) {
+			return "checkbox" === elem.type;
+		},
+
+		file: function( elem ) {
+			return "file" === elem.type;
+		},
+		password: function( elem ) {
+			return "password" === elem.type;
+		},
+
+		submit: function( elem ) {
+			return "submit" === elem.type;
+		},
+
+		image: function( elem ) {
+			return "image" === elem.type;
+		},
+
+		reset: function( elem ) {
+			return "reset" === elem.type;
+		},
+
+		button: function( elem ) {
+			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+		},
+
+		input: function( elem ) {
+			return (/input|select|textarea|button/i).test( elem.nodeName );
+		}
+	},
+	setFilters: {
+		first: function( elem, i ) {
+			return i === 0;
+		},
+
+		last: function( elem, i, match, array ) {
+			return i === array.length - 1;
+		},
+
+		even: function( elem, i ) {
+			return i % 2 === 0;
+		},
+
+		odd: function( elem, i ) {
+			return i % 2 === 1;
+		},
+
+		lt: function( elem, i, match ) {
+			return i < match[3] - 0;
+		},
+
+		gt: function( elem, i, match ) {
+			return i > match[3] - 0;
+		},
+
+		nth: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		},
+
+		eq: function( elem, i, match ) {
+			return match[3] - 0 === i;
+		}
+	},
+	filter: {
+		PSEUDO: function( elem, match, i, array ) {
+			var name = match[1],
+				filter = Expr.filters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+
+			} else if ( name === "contains" ) {
+				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var j = 0, l = not.length; j < l; j++ ) {
+					if ( not[j] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+
+			} else {
+				Sizzle.error( name );
+			}
+		},
+
+		CHILD: function( elem, match ) {
+			var type = match[1],
+				node = elem;
+
+			switch ( type ) {
+				case "only":
+				case "first":
+					while ( (node = node.previousSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+
+					if ( type === "first" ) { 
+						return true; 
+					}
+
+					node = elem;
+
+				case "last":
+					while ( (node = node.nextSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+
+					return true;
+
+				case "nth":
+					var first = match[2],
+						last = match[3];
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+					
+					var doneName = match[0],
+						parent = elem.parentNode;
+	
+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+						var count = 0;
+						
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								node.nodeIndex = ++count;
+							}
+						} 
+
+						parent.sizcache = doneName;
+					}
+					
+					var diff = elem.nodeIndex - last;
+
+					if ( first === 0 ) {
+						return diff === 0;
+
+					} else {
+						return ( diff % first === 0 && diff / first >= 0 );
+					}
+			}
+		},
+
+		ID: function( elem, match ) {
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+		},
+
+		TAG: function( elem, match ) {
+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+		},
+		
+		CLASS: function( elem, match ) {
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+				.indexOf( match ) > -1;
+		},
+
+		ATTR: function( elem, match ) {
+			var name = match[1],
+				result = Expr.attrHandle[ name ] ?
+					Expr.attrHandle[ name ]( elem ) :
+					elem[ name ] != null ?
+						elem[ name ] :
+						elem.getAttribute( name ),
+				value = result + "",
+				type = match[2],
+				check = match[4];
+
+			return result == null ?
+				type === "!=" :
+				type === "=" ?
+				value === check :
+				type === "*=" ?
+				value.indexOf(check) >= 0 :
+				type === "~=" ?
+				(" " + value + " ").indexOf(check) >= 0 :
+				!check ?
+				value && result !== false :
+				type === "!=" ?
+				value !== check :
+				type === "^=" ?
+				value.indexOf(check) === 0 :
+				type === "$=" ?
+				value.substr(value.length - check.length) === check :
+				type === "|=" ?
+				value === check || value.substr(0, check.length + 1) === check + "-" :
+				false;
+		},
+
+		POS: function( elem, match, i, array ) {
+			var name = match[2],
+				filter = Expr.setFilters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			}
+		}
+	}
+};
+
+var origPOS = Expr.match.POS,
+	fescape = function(all, num){
+		return "\\" + (num - 0 + 1);
+	};
+
+for ( var type in Expr.match ) {
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+	array = Array.prototype.slice.call( array, 0 );
+
+	if ( results ) {
+		results.push.apply( results, array );
+		return results;
+	}
+	
+	return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+	makeArray = function( array, results ) {
+		var i = 0,
+			ret = results || [];
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+
+			} else {
+				for ( ; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+	};
+
+} else {
+	sortOrder = function( a, b ) {
+		var al, bl,
+			ap = [],
+			bp = [],
+			aup = a.parentNode,
+			bup = b.parentNode,
+			cur = aup;
+
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// If the nodes are siblings (or identical) we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+
+		// If no parents were found then the nodes are disconnected
+		} else if ( !aup ) {
+			return -1;
+
+		} else if ( !bup ) {
+			return 1;
+		}
+
+		// Otherwise they're somewhere else in the tree so we need
+		// to build up a full list of the parentNodes for comparison
+		while ( cur ) {
+			ap.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		cur = bup;
+
+		while ( cur ) {
+			bp.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		al = ap.length;
+		bl = bp.length;
+
+		// Start walking down the tree looking for a discrepancy
+		for ( var i = 0; i < al && i < bl; i++ ) {
+			if ( ap[i] !== bp[i] ) {
+				return siblingCheck( ap[i], bp[i] );
+			}
+		}
+
+		// We ended someplace up the tree so do a sibling check
+		return i === al ?
+			siblingCheck( a, bp[i], -1 ) :
+			siblingCheck( ap[i], b, 1 );
+	};
+
+	siblingCheck = function( a, b, ret ) {
+		if ( a === b ) {
+			return ret;
+		}
+
+		var cur = a.nextSibling;
+
+		while ( cur ) {
+			if ( cur === b ) {
+				return -1;
+			}
+
+			cur = cur.nextSibling;
+		}
+
+		return 1;
+	};
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( elems ) {
+	var ret = "", elem;
+
+	for ( var i = 0; elems[i]; i++ ) {
+		elem = elems[i];
+
+		// Get the text from text nodes and CDATA nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+			ret += elem.nodeValue;
+
+		// Traverse everything else, except comment nodes
+		} else if ( elem.nodeType !== 8 ) {
+			ret += Sizzle.getText( elem.childNodes );
+		}
+	}
+
+	return ret;
+};
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+	// We're going to inject a fake input element with a specified name
+	var form = document.createElement("div"),
+		id = "script" + (new Date()).getTime(),
+		root = document.documentElement;
+
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	root.insertBefore( form, root.firstChild );
+
+	// The workaround has to do additional checks after a getElementById
+	// Which slows things down for other browsers (hence the branching)
+	if ( document.getElementById( id ) ) {
+		Expr.find.ID = function( match, context, isXML ) {
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+
+				return m ?
+					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+
+		Expr.filter.ID = function( elem, match ) {
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+			return elem.nodeType === 1 && node && node.nodeValue === match;
+		};
+	}
+
+	root.removeChild( form );
+
+	// release memory in IE
+	root = form = null;
+})();
+
+(function(){
+	// Check to see if the browser returns only elements
+	// when doing getElementsByTagName("*")
+
+	// Create a fake element
+	var div = document.createElement("div");
+	div.appendChild( document.createComment("") );
+
+	// Make sure no comments are found
+	if ( div.getElementsByTagName("*").length > 0 ) {
+		Expr.find.TAG = function( match, context ) {
+			var results = context.getElementsByTagName( match[1] );
+
+			// Filter out possible comments
+			if ( match[1] === "*" ) {
+				var tmp = [];
+
+				for ( var i = 0; results[i]; i++ ) {
+					if ( results[i].nodeType === 1 ) {
+						tmp.push( results[i] );
+					}
+				}
+
+				results = tmp;
+			}
+
+			return results;
+		};
+	}
+
+	// Check to see if an attribute returns normalized href attributes
+	div.innerHTML = "<a href='#'></a>";
+
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+			div.firstChild.getAttribute("href") !== "#" ) {
+
+		Expr.attrHandle.href = function( elem ) {
+			return elem.getAttribute( "href", 2 );
+		};
+	}
+
+	// release memory in IE
+	div = null;
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle,
+			div = document.createElement("div"),
+			id = "__sizzle__";
+
+		div.innerHTML = "<p class='TEST'></p>";
+
+		// Safari can't handle uppercase or unicode characters when
+		// in quirks mode.
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+			return;
+		}
+	
+		Sizzle = function( query, context, extra, seed ) {
+			context = context || document;
+
+			// Only use querySelectorAll on non-XML documents
+			// (ID selectors don't work in non-HTML documents)
+			if ( !seed && !Sizzle.isXML(context) ) {
+				// See if we find a selector to speed up
+				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+				
+				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+					// Speed-up: Sizzle("TAG")
+					if ( match[1] ) {
+						return makeArray( context.getElementsByTagName( query ), extra );
+					
+					// Speed-up: Sizzle(".CLASS")
+					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+						return makeArray( context.getElementsByClassName( match[2] ), extra );
+					}
+				}
+				
+				if ( context.nodeType === 9 ) {
+					// Speed-up: Sizzle("body")
+					// The body element only exists once, optimize finding it
+					if ( query === "body" && context.body ) {
+						return makeArray( [ context.body ], extra );
+						
+					// Speed-up: Sizzle("#ID")
+					} else if ( match && match[3] ) {
+						var elem = context.getElementById( match[3] );
+
+						// Check parentNode to catch when Blackberry 4.6 returns
+						// nodes that are no longer in the document #6963
+						if ( elem && elem.parentNode ) {
+							// Handle the case where IE and Opera return items
+							// by name instead of ID
+							if ( elem.id === match[3] ) {
+								return makeArray( [ elem ], extra );
+							}
+							
+						} else {
+							return makeArray( [], extra );
+						}
+					}
+					
+					try {
+						return makeArray( context.querySelectorAll(query), extra );
+					} catch(qsaError) {}
+
+				// qSA works strangely on Element-rooted queries
+				// We can work around this by specifying an extra ID on the root
+				// and working up from there (Thanks to Andrew Dupont for the technique)
+				// IE 8 doesn't work on object elements
+				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+					var old = context.getAttribute( "id" ),
+						nid = old || id,
+						hasParent = context.parentNode,
+						relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+					if ( !old ) {
+						context.setAttribute( "id", nid );
+					} else {
+						nid = nid.replace( /'/g, "\\$&" );
+					}
+					if ( relativeHierarchySelector && hasParent ) {
+						context = context.parentNode;
+					}
+
+					try {
+						if ( !relativeHierarchySelector || hasParent ) {
+							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+						}
+
+					} catch(pseudoError) {
+					} finally {
+						if ( !old ) {
+							context.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		// release memory in IE
+		div = null;
+	})();
+}
+
+(function(){
+	var html = document.documentElement,
+		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
+		pseudoWorks = false;
+
+	try {
+		// This should fail with an exception
+		// Gecko does not error, returns false instead
+		matches.call( document.documentElement, "[test!='']:sizzle" );
+	
+	} catch( pseudoError ) {
+		pseudoWorks = true;
+	}
+
+	if ( matches ) {
+		Sizzle.matchesSelector = function( node, expr ) {
+			// Make sure that attribute selectors are quoted
+			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+			if ( !Sizzle.isXML( node ) ) {
+				try { 
+					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+						return matches.call( node, expr );
+					}
+				} catch(e) {}
+			}
+
+			return Sizzle(expr, null, null, [node]).length > 0;
+		};
+	}
+})();
+
+(function(){
+	var div = document.createElement("div");
+
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+	// Opera can't find a second classname (in 9.6)
+	// Also, make sure that getElementsByClassName actually exists
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+		return;
+	}
+
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
+	div.lastChild.className = "e";
+
+	if ( div.getElementsByClassName("e").length === 1 ) {
+		return;
+	}
+	
+	Expr.order.splice(1, 0, "CLASS");
+	Expr.find.CLASS = function( match, context, isXML ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+			return context.getElementsByClassName(match[1]);
+		}
+	};
+
+	// release memory in IE
+	div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 && !isXML ){
+					elem.sizcache = doneName;
+					elem.sizset = i;
+				}
+
+				if ( elem.nodeName.toLowerCase() === cur ) {
+					match = elem;
+					break;
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+			
+			elem = elem[dir];
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 ) {
+					if ( !isXML ) {
+						elem.sizcache = doneName;
+						elem.sizset = i;
+					}
+
+					if ( typeof cur !== "string" ) {
+						if ( elem === cur ) {
+							match = true;
+							break;
+						}
+
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+						match = elem;
+						break;
+					}
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+if ( document.documentElement.contains ) {
+	Sizzle.contains = function( a, b ) {
+		return a !== b && (a.contains ? a.contains(b) : true);
+	};
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+	Sizzle.contains = function( a, b ) {
+		return !!(a.compareDocumentPosition(b) & 16);
+	};
+
+} else {
+	Sizzle.contains = function() {
+		return false;
+	};
+}
+
+Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833) 
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context ) {
+	var match,
+		tmpSet = [],
+		later = "",
+		root = context.nodeType ? [context] : context;
+
+	// Position selectors must be done after the filter
+	// And so must :not(positional) so we move all PSEUDOs to the end
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+		later += match[0];
+		selector = selector.replace( Expr.match.PSEUDO, "" );
+	}
+
+	selector = Expr.relative[selector] ? selector + "*" : selector;
+
+	for ( var i = 0, l = root.length; i < l; i++ ) {
+		Sizzle( selector, root[i], tmpSet );
+	}
+
+	return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+
+window.Sizzle = Sizzle;
+
+})();
Index: /Dev/trunk/d3/lib/sizzle/sizzle.min.js
===================================================================
--- /Dev/trunk/d3/lib/sizzle/sizzle.min.js	(revision 76)
+++ /Dev/trunk/d3/lib/sizzle/sizzle.min.js	(revision 76)
@@ -0,0 +1,28 @@
+(function(){function y(a,b,c,d,e,f){e=0;for(var h=d.length;e<h;e++){var g=d[e];if(g){var l=false;for(g=g[a];g;){if(g.sizcache===c){l=d[g.sizset];break}if(g.nodeType===1&&!f){g.sizcache=c;g.sizset=e}if(g.nodeName.toLowerCase()===b){l=g;break}g=g[a]}d[e]=l}}}function z(a,b,c,d,e,f){e=0;for(var h=d.length;e<h;e++){var g=d[e];if(g){var l=false;for(g=g[a];g;){if(g.sizcache===c){l=d[g.sizset];break}if(g.nodeType===1){if(!f){g.sizcache=c;g.sizset=e}if(typeof b!=="string"){if(g===b){l=true;break}}else if(i.filter(b,
+[g]).length>0){l=g;break}}g=g[a]}d[e]=l}}}var w=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,x=0,A=Object.prototype.toString,s=false,B=true;[0,0].sort(function(){B=false;return 0});var i=function(a,b,c,d){c=c||[];var e=b=b||document;if(b.nodeType!==1&&b.nodeType!==9)return[];if(!a||typeof a!=="string")return c;var f,h,g,l,p,n=true,m=i.isXML(b),k=[],t=a;do{w.exec("");if(f=w.exec(t)){t=f[3];k.push(f[1]);if(f[2]){l=
+f[3];break}}}while(f);if(k.length>1&&E.exec(a))if(k.length===2&&j.relative[k[0]])h=C(k[0]+k[1],b);else for(h=j.relative[k[0]]?[b]:i(k.shift(),b);k.length;){a=k.shift();if(j.relative[a])a+=k.shift();h=C(a,h)}else{if(!d&&k.length>1&&b.nodeType===9&&!m&&j.match.ID.test(k[0])&&!j.match.ID.test(k[k.length-1])){f=i.find(k.shift(),b,m);b=f.expr?i.filter(f.expr,f.set)[0]:f.set[0]}if(b){f=d?{expr:k.pop(),set:o(d)}:i.find(k.pop(),k.length===1&&(k[0]==="~"||k[0]==="+")&&b.parentNode?b.parentNode:b,m);h=f.expr?
+i.filter(f.expr,f.set):f.set;if(k.length>0)g=o(h);else n=false;for(;k.length;){f=p=k.pop();if(j.relative[p])f=k.pop();else p="";if(f==null)f=b;j.relative[p](g,f,m)}}else g=[]}g||(g=h);g||i.error(p||a);if(A.call(g)==="[object Array]")if(n)if(b&&b.nodeType===1)for(a=0;g[a]!=null;a++){if(g[a]&&(g[a]===true||g[a].nodeType===1&&i.contains(b,g[a])))c.push(h[a])}else for(a=0;g[a]!=null;a++)g[a]&&g[a].nodeType===1&&c.push(h[a]);else c.push.apply(c,g);else o(g,c);if(l){i(l,e,c,d);i.uniqueSort(c)}return c};
+i.uniqueSort=function(a){if(u){s=B;a.sort(u);if(s)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a};i.matches=function(a,b){return i(a,null,null,b)};i.matchesSelector=function(a,b){return i(b,null,null,[a]).length>0};i.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=j.order.length;e<f;e++){var h,g=j.order[e];if(h=j.leftMatch[g].exec(a)){var l=h[1];h.splice(1,1);if(l.substr(l.length-1)!=="\\"){h[1]=(h[1]||"").replace(/\\/g,"");d=j.find[g](h,b,c);if(d!=null){a=a.replace(j.match[g],
+"");break}}}}d||(d=typeof b.getElementsByTagName!=="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}};i.filter=function(a,b,c,d){for(var e,f,h=a,g=[],l=b,p=b&&b[0]&&i.isXML(b[0]);a&&b.length;){for(var n in j.filter)if((e=j.leftMatch[n].exec(a))!=null&&e[2]){var m,k,t=j.filter[n];k=e[1];f=false;e.splice(1,1);if(k.substr(k.length-1)!=="\\"){if(l===g)g=[];if(j.preFilter[n])if(e=j.preFilter[n](e,l,c,g,d,p)){if(e===true)continue}else f=m=true;if(e)for(var v=0;(k=l[v])!=null;v++)if(k){m=
+t(k,e,v,l);var D=d^!!m;if(c&&m!=null)if(D)f=true;else l[v]=false;else if(D){g.push(k);f=true}}if(m!==undefined){c||(l=g);a=a.replace(j.match[n],"");if(!f)return[];break}}}if(a===h)if(f==null)i.error(a);else break;h=a}return l};i.error=function(a){throw"Syntax error, unrecognized expression: "+a;};var j=i.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")}},relative:{"+":function(a,b){var c=typeof b==="string",d=c&&!/\W/.test(b);c=c&&
+!d;if(d)b=b.toLowerCase();d=0;for(var e=a.length,f;d<e;d++)if(f=a[d]){for(;(f=f.previousSibling)&&f.nodeType!==1;);a[d]=c||f&&f.nodeName.toLowerCase()===b?f||false:f===b}c&&i.filter(b,a,true)},">":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!/\W/.test(b))for(b=b.toLowerCase();e<f;e++){if(c=a[e]){c=c.parentNode;a[e]=c.nodeName.toLowerCase()===b?c:false}}else{for(;e<f;e++)if(c=a[e])a[e]=d?c.parentNode:c.parentNode===b;d&&i.filter(b,a,true)}},"":function(a,b,c){var d,e=x++,f=z;if(typeof b===
+"string"&&!/\W/.test(b)){d=b=b.toLowerCase();f=y}f("parentNode",b,e,a,d,c)},"~":function(a,b,c){var d,e=x++,f=z;if(typeof b==="string"&&!/\W/.test(b)){d=b=b.toLowerCase();f=y}f("previousSibling",b,e,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=="undefined"&&!c)return(a=b.getElementById(a[1]))&&a.parentNode?[a]:[]},NAME:function(a,b){if(typeof b.getElementsByName!=="undefined"){for(var c=[],d=b.getElementsByName(a[1]),e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);
+return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(/\\/g,"")+" ";if(f)return a;f=0;for(var h;(h=b[f])!=null;f++)if(h)if(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0))c||d.push(h);else if(c)b[f]=false;return false},ID:function(a){return a[1].replace(/\\/g,"")},TAG:function(a){return a[1].toLowerCase()},CHILD:function(a){if(a[1]===
+"nth"){a[2]||i.error(a[0]);a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0;a[3]=b[3]-0}else a[2]&&i.error(a[0]);a[0]=x++;return a},ATTR:function(a,b,c,d,e,f){b=a[1]=a[1].replace(/\\/g,"");if(!f&&j.attrMap[b])a[1]=j.attrMap[b];a[4]=(a[4]||a[5]||"").replace(/\\/g,"");if(a[2]==="~=")a[4]=" "+a[4]+" ";return a},PSEUDO:function(a,b,c,d,e){if(a[1]==="not")if((w.exec(a[3])||"").length>
+1||/^\w/.test(a[3]))a[3]=i(a[3],null,null,b);else{a=i.filter(a[3],b,c,true^e);c||d.push.apply(d,a);return false}else if(j.match.POS.test(a[0])||j.match.CHILD.test(a[0]))return true;return a},POS:function(a){a.unshift(true);return a}},filters:{enabled:function(a){return a.disabled===false&&a.type!=="hidden"},disabled:function(a){return a.disabled===true},checked:function(a){return a.checked===true},selected:function(a){return a.selected===true},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},
+has:function(a,b,c){return!!i(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.type},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()===
+"button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=j.filters[e];if(f)return f(a,c,b,d);else if(e==="contains")return(a.textContent||
+a.innerText||i.getText([a])||"").indexOf(b[3])>=0;else if(e==="not"){b=b[3];c=0;for(d=b.length;c<d;c++)if(b[c]===a)return false;return true}else i.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case "only":case "first":for(;d=d.previousSibling;)if(d.nodeType===1)return false;if(c==="first")return true;d=a;case "last":for(;d=d.nextSibling;)if(d.nodeType===1)return false;return true;case "nth":c=b[2];var e=b[3];if(c===1&&e===0)return true;var f=b[0],h=a.parentNode;if(h&&(h.sizcache!==f||!a.nodeIndex)){var g=
+0;for(d=h.firstChild;d;d=d.nextSibling)if(d.nodeType===1)d.nodeIndex=++g;h.sizcache=f}d=a.nodeIndex-e;return c===0?d===0:d%c===0&&d/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1];c=j.attrHandle[c]?j.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c);var d=c+"",e=b[2],f=b[4];
+return c==null?e==="!=":e==="="?d===f:e==="*="?d.indexOf(f)>=0:e==="~="?(" "+d+" ").indexOf(f)>=0:!f?d&&c!==false:e==="!="?d!==f:e==="^="?d.indexOf(f)===0:e==="$="?d.substr(d.length-f.length)===f:e==="|="?d===f||d.substr(0,f.length+1)===f+"-":false},POS:function(a,b,c,d){var e=j.setFilters[b[2]];if(e)return e(a,c,b,d)}}},E=j.match.POS,F=function(a,b){return"\\"+(b-0+1)},q;for(q in j.match){j.match[q]=RegExp(j.match[q].source+/(?![^\[]*\])(?![^\(]*\))/.source);j.leftMatch[q]=RegExp(/(^(?:.|\r|\n)*?)/.source+
+j.match[q].source.replace(/\\(\d+)/g,F))}var o=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(document.documentElement.childNodes,0)}catch(G){o=function(a,b){var c=0,d=b||[];if(A.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,r;if(document.documentElement.compareDocumentPosition)u=function(a,
+b){if(a===b){s=true;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1};else{u=function(a,b){var c,d,e=[],f=[];c=a.parentNode;d=b.parentNode;var h=c;if(a===b){s=true;return 0}else if(c===d)return r(a,b);else if(c){if(!d)return 1}else return-1;for(;h;){e.unshift(h);h=h.parentNode}for(h=d;h;){f.unshift(h);h=h.parentNode}c=e.length;d=f.length;for(h=0;h<c&&h<d;h++)if(e[h]!==f[h])return r(e[h],f[h]);return h===
+c?r(a,f[h],-1):r(e[h],b,1)};r=function(a,b,c){if(a===b)return c;for(a=a.nextSibling;a;){if(a===b)return-1;a=a.nextSibling}return 1}}i.getText=function(a){for(var b="",c,d=0;a[d];d++){c=a[d];if(c.nodeType===3||c.nodeType===4)b+=c.nodeValue;else if(c.nodeType!==8)b+=i.getText(c.childNodes)}return b};(function(){var a=document.createElement("div"),b="script"+(new Date).getTime(),c=document.documentElement;a.innerHTML="<a name='"+b+"'/>";c.insertBefore(a,c.firstChild);if(document.getElementById(b)){j.find.ID=
+function(d,e,f){if(typeof e.getElementById!=="undefined"&&!f)return(e=e.getElementById(d[1]))?e.id===d[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===d[1]?[e]:undefined:[]};j.filter.ID=function(d,e){var f=typeof d.getAttributeNode!=="undefined"&&d.getAttributeNode("id");return d.nodeType===1&&f&&f.nodeValue===e}}c.removeChild(a);c=a=null})();(function(){var a=document.createElement("div");a.appendChild(document.createComment(""));if(a.getElementsByTagName("*").length>
+0)j.find.TAG=function(b,c){var d=c.getElementsByTagName(b[1]);if(b[1]==="*"){for(var e=[],f=0;d[f];f++)d[f].nodeType===1&&e.push(d[f]);d=e}return d};a.innerHTML="<a href='#'></a>";if(a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#")j.attrHandle.href=function(b){return b.getAttribute("href",2)};a=null})();document.querySelectorAll&&function(){var a=i,b=document.createElement("div");b.innerHTML="<p class='TEST'></p>";if(!(b.querySelectorAll&&b.querySelectorAll(".TEST").length===
+0)){i=function(d,e,f,h){e=e||document;if(!h&&!i.isXML(e)){var g=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(d);if(g&&(e.nodeType===1||e.nodeType===9))if(g[1])return o(e.getElementsByTagName(d),f);else if(g[2]&&j.find.CLASS&&e.getElementsByClassName)return o(e.getElementsByClassName(g[2]),f);if(e.nodeType===9){if(d==="body"&&e.body)return o([e.body],f);else if(g&&g[3]){var l=e.getElementById(g[3]);if(l&&l.parentNode){if(l.id===g[3])return o([l],f)}else return o([],f)}try{return o(e.querySelectorAll(d),
+f)}catch(p){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){l=(g=e.getAttribute("id"))||"__sizzle__";var n=e.parentNode,m=/^\s*[+~]/.test(d);if(g)l=l.replace(/'/g,"\\$&");else e.setAttribute("id",l);if(m&&n)e=e.parentNode;try{if(!m||n)return o(e.querySelectorAll("[id='"+l+"'] "+d),f)}catch(k){}finally{g||e.removeAttribute("id")}}}return a(d,e,f,h)};for(var c in a)i[c]=a[c];b=null}}();(function(){var a=document.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||
+a.msMatchesSelector,c=false;try{b.call(document.documentElement,"[test!='']:sizzle")}catch(d){c=true}if(b)i.matchesSelector=function(e,f){f=f.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!i.isXML(e))try{if(c||!j.match.PSEUDO.test(f)&&!/!=/.test(f))return b.call(e,f)}catch(h){}return i(f,null,null,[e]).length>0}})();(function(){var a=document.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!a.getElementsByClassName||a.getElementsByClassName("e").length===
+0)){a.lastChild.className="e";if(a.getElementsByClassName("e").length!==1){j.order.splice(1,0,"CLASS");j.find.CLASS=function(b,c,d){if(typeof c.getElementsByClassName!=="undefined"&&!d)return c.getElementsByClassName(b[1])};a=null}}})();i.contains=document.documentElement.contains?function(a,b){return a!==b&&(a.contains?a.contains(b):true)}:document.documentElement.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16)}:function(){return false};i.isXML=function(a){return(a=
+(a?a.ownerDocument||a:0).documentElement)?a.nodeName!=="HTML":false};var C=function(a,b){for(var c,d=[],e="",f=b.nodeType?[b]:b;c=j.match.PSEUDO.exec(a);){e+=c[0];a=a.replace(j.match.PSEUDO,"")}a=j.relative[a]?a+"*":a;c=0;for(var h=f.length;c<h;c++)i(a,f[c],d);return i.filter(e,d)};window.Sizzle=i})();
Index: /Dev/trunk/d3/lib/uglifyjs/LICENSE
===================================================================
--- /Dev/trunk/d3/lib/uglifyjs/LICENSE	(revision 76)
+++ /Dev/trunk/d3/lib/uglifyjs/LICENSE	(revision 76)
@@ -0,0 +1,28 @@
+Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
+Based on parse-js (http://marijn.haverbeke.nl/parse-js/).
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+    * Redistributions of source code must retain the above
+      copyright notice, this list of conditions and the following
+      disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials
+      provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER âAS ISâ AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
Index: /Dev/trunk/d3/lib/uglifyjs/README.md
===================================================================
--- /Dev/trunk/d3/lib/uglifyjs/README.md	(revision 76)
+++ /Dev/trunk/d3/lib/uglifyjs/README.md	(revision 76)
@@ -0,0 +1,1 @@
+See <https://github.com/mishoo/UglifyJS>.
Index: /Dev/trunk/d3/lib/uglifyjs/bin/uglifyjs
===================================================================
--- /Dev/trunk/d3/lib/uglifyjs/bin/uglifyjs	(revision 76)
+++ /Dev/trunk/d3/lib/uglifyjs/bin/uglifyjs	(revision 76)
@@ -0,0 +1,212 @@
+#! /usr/bin/env node
+// -*- js2 -*-
+
+global.sys = require(/^v0\.[012]/.test(process.version) ? "sys" : "util");
+var fs = require("fs");
+var uglify = require("../index.js"),
+    jsp = uglify.parser,
+    pro = uglify.uglify;
+
+var options = {
+        ast: false,
+        mangle: true,
+        mangle_toplevel: false,
+        squeeze: true,
+        make_seqs: true,
+        dead_code: true,
+        verbose: false,
+        show_copyright: true,
+        out_same_file: false,
+        max_line_length: 32 * 1024,
+        unsafe: false,
+        reserved_names: null,
+        codegen_options: {
+                ascii_only: false,
+                beautify: false,
+                indent_level: 4,
+                indent_start: 0,
+                quote_keys: false,
+                space_colon: false
+        },
+        output: true            // stdout
+};
+
+var args = jsp.slice(process.argv, 2);
+var filename;
+
+out: while (args.length > 0) {
+        var v = args.shift();
+        switch (v) {
+            case "-b":
+            case "--beautify":
+                options.codegen_options.beautify = true;
+                break;
+            case "-i":
+            case "--indent":
+                options.codegen_options.indent_level = args.shift();
+                break;
+            case "-q":
+            case "--quote-keys":
+                options.codegen_options.quote_keys = true;
+                break;
+            case "-mt":
+            case "--mangle-toplevel":
+                options.mangle_toplevel = true;
+                break;
+            case "--no-mangle":
+            case "-nm":
+                options.mangle = false;
+                break;
+            case "--no-squeeze":
+            case "-ns":
+                options.squeeze = false;
+                break;
+            case "--no-seqs":
+                options.make_seqs = false;
+                break;
+            case "--no-dead-code":
+                options.dead_code = false;
+                break;
+            case "--no-copyright":
+            case "-nc":
+                options.show_copyright = false;
+                break;
+            case "-o":
+            case "--output":
+                options.output = args.shift();
+                break;
+            case "--overwrite":
+                options.out_same_file = true;
+                break;
+            case "-v":
+            case "--verbose":
+                options.verbose = true;
+                break;
+            case "--ast":
+                options.ast = true;
+                break;
+            case "--unsafe":
+                options.unsafe = true;
+                break;
+            case "--max-line-len":
+                options.max_line_length = parseInt(args.shift(), 10);
+                break;
+            case "--reserved-names":
+                options.reserved_names = args.shift().split(",");
+                break;
+            case "--ascii":
+                options.codegen_options.ascii_only = true;
+                break;
+            default:
+                filename = v;
+                break out;
+        }
+}
+
+if (options.verbose) {
+        pro.set_logger(function(msg){
+                sys.debug(msg);
+        });
+}
+
+jsp.set_logger(function(msg){
+        sys.debug(msg);
+});
+
+if (filename) {
+        fs.readFile(filename, "utf8", function(err, text){
+                if (err) throw err;
+                output(squeeze_it(text));
+        });
+} else {
+        var stdin = process.openStdin();
+        stdin.setEncoding("utf8");
+        var text = "";
+        stdin.on("data", function(chunk){
+                text += chunk;
+        });
+        stdin.on("end", function() {
+                output(squeeze_it(text));
+        });
+}
+
+function output(text) {
+        var out;
+        if (options.out_same_file && filename)
+                options.output = filename;
+        if (options.output === true) {
+                out = process.stdout;
+        } else {
+                out = fs.createWriteStream(options.output, {
+                        flags: "w",
+                        encoding: "utf8",
+                        mode: 0644
+                });
+        }
+        out.write(text);
+        if (options.output !== true) {
+                out.end();
+        }
+};
+
+// --------- main ends here.
+
+function show_copyright(comments) {
+        var ret = "";
+        for (var i = 0; i < comments.length; ++i) {
+                var c = comments[i];
+                if (c.type == "comment1") {
+                        ret += "//" + c.value + "\n";
+                } else {
+                        ret += "/*" + c.value + "*/";
+                }
+        }
+        return ret;
+};
+
+function squeeze_it(code) {
+        var result = "";
+        if (options.show_copyright) {
+                var tok = jsp.tokenizer(code), c;
+                c = tok();
+                result += show_copyright(c.comments_before);
+        }
+        try {
+                var ast = time_it("parse", function(){ return jsp.parse(code); });
+                if (options.mangle) ast = time_it("mangle", function(){
+                        return pro.ast_mangle(ast, {
+                                toplevel: options.mangle_toplevel,
+                                except: options.reserved_names
+                        });
+                });
+                if (options.squeeze) ast = time_it("squeeze", function(){
+                        ast = pro.ast_squeeze(ast, {
+                                make_seqs  : options.make_seqs,
+                                dead_code  : options.dead_code,
+                                keep_comps : !options.unsafe
+                        });
+                        if (options.unsafe)
+                                ast = pro.ast_squeeze_more(ast);
+                        return ast;
+                });
+                if (options.ast)
+                        return sys.inspect(ast, null, null);
+                result += time_it("generate", function(){ return pro.gen_code(ast, options.codegen_options) });
+                if (!options.codegen_options.beautify && options.max_line_length) {
+                        result = time_it("split", function(){ return pro.split_lines(result, options.max_line_length) });
+                }
+                return result;
+        } catch(ex) {
+                sys.debug(ex.stack);
+                sys.debug(sys.inspect(ex));
+                sys.debug(JSON.stringify(ex));
+        }
+};
+
+function time_it(name, cont) {
+        if (!options.verbose)
+                return cont();
+        var t1 = new Date().getTime();
+        try { return cont(); }
+        finally { sys.debug("// " + name + ": " + ((new Date().getTime() - t1) / 1000).toFixed(3) + " sec."); }
+};
Index: /Dev/trunk/d3/lib/uglifyjs/index.js
===================================================================
--- /Dev/trunk/d3/lib/uglifyjs/index.js	(revision 76)
+++ /Dev/trunk/d3/lib/uglifyjs/index.js	(revision 76)
@@ -0,0 +1,2 @@
+exports.parser = require("./lib/parse-js");
+exports.uglify = require("./lib/process");
Index: /Dev/trunk/d3/lib/uglifyjs/lib/parse-js.js
===================================================================
--- /Dev/trunk/d3/lib/uglifyjs/lib/parse-js.js	(revision 76)
+++ /Dev/trunk/d3/lib/uglifyjs/lib/parse-js.js	(revision 76)
@@ -0,0 +1,1319 @@
+/***********************************************************************
+
+  A JavaScript tokenizer / parser / beautifier / compressor.
+
+  This version is suitable for Node.js.  With minimal changes (the
+  exports stuff) it should work on any JS platform.
+
+  This file contains the tokenizer/parser.  It is a port to JavaScript
+  of parse-js [1], a JavaScript parser library written in Common Lisp
+  by Marijn Haverbeke.  Thank you Marijn!
+
+  [1] http://marijn.haverbeke.nl/parse-js/
+
+  Exported functions:
+
+    - tokenizer(code) -- returns a function.  Call the returned
+      function to fetch the next token.
+
+    - parse(code) -- returns an AST of the given JavaScript code.
+
+  -------------------------------- (C) ---------------------------------
+
+                           Author: Mihai Bazon
+                         <mihai.bazon@gmail.com>
+                       http://mihai.bazon.net/blog
+
+  Distributed under the BSD license:
+
+    Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
+    Based on parse-js (http://marijn.haverbeke.nl/parse-js/).
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+        * Redistributions of source code must retain the above
+          copyright notice, this list of conditions and the following
+          disclaimer.
+
+        * Redistributions in binary form must reproduce the above
+          copyright notice, this list of conditions and the following
+          disclaimer in the documentation and/or other materials
+          provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER âAS ISâ AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+
+ ***********************************************************************/
+
+/* -----[ Tokenizer (constants) ]----- */
+
+var KEYWORDS = array_to_hash([
+        "break",
+        "case",
+        "catch",
+        "const",
+        "continue",
+        "default",
+        "delete",
+        "do",
+        "else",
+        "finally",
+        "for",
+        "function",
+        "if",
+        "in",
+        "instanceof",
+        "new",
+        "return",
+        "switch",
+        "throw",
+        "try",
+        "typeof",
+        "var",
+        "void",
+        "while",
+        "with"
+]);
+
+var RESERVED_WORDS = array_to_hash([
+        "abstract",
+        "boolean",
+        "byte",
+        "char",
+        "class",
+        "debugger",
+        "double",
+        "enum",
+        "export",
+        "extends",
+        "final",
+        "float",
+        "goto",
+        "implements",
+        "import",
+        "int",
+        "interface",
+        "long",
+        "native",
+        "package",
+        "private",
+        "protected",
+        "public",
+        "short",
+        "static",
+        "super",
+        "synchronized",
+        "throws",
+        "transient",
+        "volatile"
+]);
+
+var KEYWORDS_BEFORE_EXPRESSION = array_to_hash([
+        "return",
+        "new",
+        "delete",
+        "throw",
+        "else",
+        "case"
+]);
+
+var KEYWORDS_ATOM = array_to_hash([
+        "false",
+        "null",
+        "true",
+        "undefined"
+]);
+
+var OPERATOR_CHARS = array_to_hash(characters("+-*&%=<>!?|~^"));
+
+var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;
+var RE_OCT_NUMBER = /^0[0-7]+$/;
+var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i;
+
+var OPERATORS = array_to_hash([
+        "in",
+        "instanceof",
+        "typeof",
+        "new",
+        "void",
+        "delete",
+        "++",
+        "--",
+        "+",
+        "-",
+        "!",
+        "~",
+        "&",
+        "|",
+        "^",
+        "*",
+        "/",
+        "%",
+        ">>",
+        "<<",
+        ">>>",
+        "<",
+        ">",
+        "<=",
+        ">=",
+        "==",
+        "===",
+        "!=",
+        "!==",
+        "?",
+        "=",
+        "+=",
+        "-=",
+        "/=",
+        "*=",
+        "%=",
+        ">>=",
+        "<<=",
+        ">>>=",
+        "|=",
+        "^=",
+        "&=",
+        "&&",
+        "||"
+]);
+
+var WHITESPACE_CHARS = array_to_hash(characters(" \n\r\t\u200b"));
+
+var PUNC_BEFORE_EXPRESSION = array_to_hash(characters("[{}(,.;:"));
+
+var PUNC_CHARS = array_to_hash(characters("[]{}(),;:"));
+
+var REGEXP_MODIFIERS = array_to_hash(characters("gmsiy"));
+
+/* -----[ Tokenizer ]----- */
+
+// regexps adapted from http://xregexp.com/plugins/#unicode
+var UNICODE = {
+        letter: new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),
+        non_spacing_mark: new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),
+        space_combining_mark: new RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),
+        connector_punctuation: new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")
+};
+
+function is_letter(ch) {
+        return UNICODE.letter.test(ch);
+};
+
+function is_digit(ch) {
+        ch = ch.charCodeAt(0);
+        return ch >= 48 && ch <= 57; //XXX: find out if "UnicodeDigit" means something else than 0..9
+};
+
+function is_alphanumeric_char(ch) {
+        return is_digit(ch) || is_letter(ch);
+};
+
+function is_unicode_combining_mark(ch) {
+        return UNICODE.non_spacing_mark.test(ch) || UNICODE.space_combining_mark.test(ch);
+};
+
+function is_unicode_connector_punctuation(ch) {
+        return UNICODE.connector_punctuation.test(ch);
+};
+
+function is_identifier_start(ch) {
+        return ch == "$" || ch == "_" || is_letter(ch);
+};
+
+function is_identifier_char(ch) {
+        return is_identifier_start(ch)
+                || is_unicode_combining_mark(ch)
+                || is_digit(ch)
+                || is_unicode_connector_punctuation(ch)
+                || ch == "\u200c" // zero-width non-joiner <ZWNJ>
+                || ch == "\u200d" // zero-width joiner <ZWJ> (in my ECMA-262 PDF, this is also 200c)
+        ;
+};
+
+function parse_js_number(num) {
+        if (RE_HEX_NUMBER.test(num)) {
+                return parseInt(num.substr(2), 16);
+        } else if (RE_OCT_NUMBER.test(num)) {
+                return parseInt(num.substr(1), 8);
+        } else if (RE_DEC_NUMBER.test(num)) {
+                return parseFloat(num);
+        }
+};
+
+function JS_Parse_Error(message, line, col, pos) {
+        this.message = message;
+        this.line = line;
+        this.col = col;
+        this.pos = pos;
+        try {
+                ({})();
+        } catch(ex) {
+                this.stack = ex.stack;
+        };
+};
+
+JS_Parse_Error.prototype.toString = function() {
+        return this.message + " (line: " + this.line + ", col: " + this.col + ", pos: " + this.pos + ")" + "\n\n" + this.stack;
+};
+
+function js_error(message, line, col, pos) {
+        throw new JS_Parse_Error(message, line, col, pos);
+};
+
+function is_token(token, type, val) {
+        return token.type == type && (val == null || token.value == val);
+};
+
+var EX_EOF = {};
+
+function tokenizer($TEXT) {
+
+        var S = {
+                text            : $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ''),
+                pos             : 0,
+                tokpos          : 0,
+                line            : 0,
+                tokline         : 0,
+                col             : 0,
+                tokcol          : 0,
+                newline_before  : false,
+                regex_allowed   : false,
+                comments_before : []
+        };
+
+        function peek() { return S.text.charAt(S.pos); };
+
+        function next(signal_eof) {
+                var ch = S.text.charAt(S.pos++);
+                if (signal_eof && !ch)
+                        throw EX_EOF;
+                if (ch == "\n") {
+                        S.newline_before = true;
+                        ++S.line;
+                        S.col = 0;
+                } else {
+                        ++S.col;
+                }
+                return ch;
+        };
+
+        function eof() {
+                return !S.peek();
+        };
+
+        function find(what, signal_eof) {
+                var pos = S.text.indexOf(what, S.pos);
+                if (signal_eof && pos == -1) throw EX_EOF;
+                return pos;
+        };
+
+        function start_token() {
+                S.tokline = S.line;
+                S.tokcol = S.col;
+                S.tokpos = S.pos;
+        };
+
+        function token(type, value, is_comment) {
+                S.regex_allowed = ((type == "operator" && !HOP(UNARY_POSTFIX, value)) ||
+                                   (type == "keyword" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) ||
+                                   (type == "punc" && HOP(PUNC_BEFORE_EXPRESSION, value)));
+                var ret = {
+                        type  : type,
+                        value : value,
+                        line  : S.tokline,
+                        col   : S.tokcol,
+                        pos   : S.tokpos,
+                        nlb   : S.newline_before
+                };
+                if (!is_comment) {
+                        ret.comments_before = S.comments_before;
+                        S.comments_before = [];
+                }
+                S.newline_before = false;
+                return ret;
+        };
+
+        function skip_whitespace() {
+                while (HOP(WHITESPACE_CHARS, peek()))
+                        next();
+        };
+
+        function read_while(pred) {
+                var ret = "", ch = peek(), i = 0;
+                while (ch && pred(ch, i++)) {
+                        ret += next();
+                        ch = peek();
+                }
+                return ret;
+        };
+
+        function parse_error(err) {
+                js_error(err, S.tokline, S.tokcol, S.tokpos);
+        };
+
+        function read_num(prefix) {
+                var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".";
+                var num = read_while(function(ch, i){
+                        if (ch == "x" || ch == "X") {
+                                if (has_x) return false;
+                                return has_x = true;
+                        }
+                        if (!has_x && (ch == "E" || ch == "e")) {
+                                if (has_e) return false;
+                                return has_e = after_e = true;
+                        }
+                        if (ch == "-") {
+                                if (after_e || (i == 0 && !prefix)) return true;
+                                return false;
+                        }
+                        if (ch == "+") return after_e;
+                        after_e = false;
+                        if (ch == ".") {
+                                if (!has_dot && !has_x)
+                                        return has_dot = true;
+                                return false;
+                        }
+                        return is_alphanumeric_char(ch);
+                });
+                if (prefix)
+                        num = prefix + num;
+                var valid = parse_js_number(num);
+                if (!isNaN(valid)) {
+                        return token("num", valid);
+                } else {
+                        parse_error("Invalid syntax: " + num);
+                }
+        };
+
+        function read_escaped_char() {
+                var ch = next(true);
+                switch (ch) {
+                    case "n" : return "\n";
+                    case "r" : return "\r";
+                    case "t" : return "\t";
+                    case "b" : return "\b";
+                    case "v" : return "\v";
+                    case "f" : return "\f";
+                    case "0" : return "\0";
+                    case "x" : return String.fromCharCode(hex_bytes(2));
+                    case "u" : return String.fromCharCode(hex_bytes(4));
+                    default  : return ch;
+                }
+        };
+
+        function hex_bytes(n) {
+                var num = 0;
+                for (; n > 0; --n) {
+                        var digit = parseInt(next(true), 16);
+                        if (isNaN(digit))
+                                parse_error("Invalid hex-character pattern in string");
+                        num = (num << 4) | digit;
+                }
+                return num;
+        };
+
+        function read_string() {
+                return with_eof_error("Unterminated string constant", function(){
+                        var quote = next(), ret = "";
+                        for (;;) {
+                                var ch = next(true);
+                                if (ch == "\\") ch = read_escaped_char();
+                                else if (ch == quote) break;
+                                ret += ch;
+                        }
+                        return token("string", ret);
+                });
+        };
+
+        function read_line_comment() {
+                next();
+                var i = find("\n"), ret;
+                if (i == -1) {
+                        ret = S.text.substr(S.pos);
+                        S.pos = S.text.length;
+                } else {
+                        ret = S.text.substring(S.pos, i);
+                        S.pos = i;
+                }
+                return token("comment1", ret, true);
+        };
+
+        function read_multiline_comment() {
+                next();
+                return with_eof_error("Unterminated multiline comment", function(){
+                        var i = find("*/", true),
+                            text = S.text.substring(S.pos, i),
+                            tok = token("comment2", text, true);
+                        S.pos = i + 2;
+                        S.line += text.split("\n").length - 1;
+                        S.newline_before = text.indexOf("\n") >= 0;
+
+                        // https://github.com/mishoo/UglifyJS/issues/#issue/100
+                        if (/^@cc_on/i.test(text)) {
+                                warn("WARNING: at line " + S.line);
+                                warn("*** Found \"conditional comment\": " + text);
+                                warn("*** UglifyJS DISCARDS ALL COMMENTS.  This means your code might no longer work properly in Internet Explorer.");
+                        }
+
+                        return tok;
+                });
+        };
+
+        function read_name() {
+                var backslash = false, name = "", ch;
+                while ((ch = peek()) != null) {
+                        if (!backslash) {
+                                if (ch == "\\") backslash = true, next();
+                                else if (is_identifier_char(ch)) name += next();
+                                else break;
+                        }
+                        else {
+                                if (ch != "u") parse_error("Expecting UnicodeEscapeSequence -- uXXXX");
+                                ch = read_escaped_char();
+                                if (!is_identifier_char(ch)) parse_error("Unicode char: " + ch.charCodeAt(0) + " is not valid in identifier");
+                                name += ch;
+                                backslash = false;
+                        }
+                }
+                return name;
+        };
+
+        function read_regexp() {
+                return with_eof_error("Unterminated regular expression", function(){
+                        var prev_backslash = false, regexp = "", ch, in_class = false;
+                        while ((ch = next(true))) if (prev_backslash) {
+                                regexp += "\\" + ch;
+                                prev_backslash = false;
+                        } else if (ch == "[") {
+                                in_class = true;
+                                regexp += ch;
+                        } else if (ch == "]" && in_class) {
+                                in_class = false;
+                                regexp += ch;
+                        } else if (ch == "/" && !in_class) {
+                                break;
+                        } else if (ch == "\\") {
+                                prev_backslash = true;
+                        } else {
+                                regexp += ch;
+                        }
+                        var mods = read_name();
+                        return token("regexp", [ regexp, mods ]);
+                });
+        };
+
+        function read_operator(prefix) {
+                function grow(op) {
+                        if (!peek()) return op;
+                        var bigger = op + peek();
+                        if (HOP(OPERATORS, bigger)) {
+                                next();
+                                return grow(bigger);
+                        } else {
+                                return op;
+                        }
+                };
+                return token("operator", grow(prefix || next()));
+        };
+
+        function handle_slash() {
+                next();
+                var regex_allowed = S.regex_allowed;
+                switch (peek()) {
+                    case "/":
+                        S.comments_before.push(read_line_comment());
+                        S.regex_allowed = regex_allowed;
+                        return next_token();
+                    case "*":
+                        S.comments_before.push(read_multiline_comment());
+                        S.regex_allowed = regex_allowed;
+                        return next_token();
+                }
+                return S.regex_allowed ? read_regexp() : read_operator("/");
+        };
+
+        function handle_dot() {
+                next();
+                return is_digit(peek())
+                        ? read_num(".")
+                        : token("punc", ".");
+        };
+
+        function read_word() {
+                var word = read_name();
+                return !HOP(KEYWORDS, word)
+                        ? token("name", word)
+                        : HOP(OPERATORS, word)
+                        ? token("operator", word)
+                        : HOP(KEYWORDS_ATOM, word)
+                        ? token("atom", word)
+                        : token("keyword", word);
+        };
+
+        function with_eof_error(eof_error, cont) {
+                try {
+                        return cont();
+                } catch(ex) {
+                        if (ex === EX_EOF) parse_error(eof_error);
+                        else throw ex;
+                }
+        };
+
+        function next_token(force_regexp) {
+                if (force_regexp)
+                        return read_regexp();
+                skip_whitespace();
+                start_token();
+                var ch = peek();
+                if (!ch) return token("eof");
+                if (is_digit(ch)) return read_num();
+                if (ch == '"' || ch == "'") return read_string();
+                if (HOP(PUNC_CHARS, ch)) return token("punc", next());
+                if (ch == ".") return handle_dot();
+                if (ch == "/") return handle_slash();
+                if (HOP(OPERATOR_CHARS, ch)) return read_operator();
+                if (ch == "\\" || is_identifier_start(ch)) return read_word();
+                parse_error("Unexpected character '" + ch + "'");
+        };
+
+        next_token.context = function(nc) {
+                if (nc) S = nc;
+                return S;
+        };
+
+        return next_token;
+
+};
+
+/* -----[ Parser (constants) ]----- */
+
+var UNARY_PREFIX = array_to_hash([
+        "typeof",
+        "void",
+        "delete",
+        "--",
+        "++",
+        "!",
+        "~",
+        "-",
+        "+"
+]);
+
+var UNARY_POSTFIX = array_to_hash([ "--", "++" ]);
+
+var ASSIGNMENT = (function(a, ret, i){
+        while (i < a.length) {
+                ret[a[i]] = a[i].substr(0, a[i].length - 1);
+                i++;
+        }
+        return ret;
+})(
+        ["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="],
+        { "=": true },
+        0
+);
+
+var PRECEDENCE = (function(a, ret){
+        for (var i = 0, n = 1; i < a.length; ++i, ++n) {
+                var b = a[i];
+                for (var j = 0; j < b.length; ++j) {
+                        ret[b[j]] = n;
+                }
+        }
+        return ret;
+})(
+        [
+                ["||"],
+                ["&&"],
+                ["|"],
+                ["^"],
+                ["&"],
+                ["==", "===", "!=", "!=="],
+                ["<", ">", "<=", ">=", "in", "instanceof"],
+                [">>", "<<", ">>>"],
+                ["+", "-"],
+                ["*", "/", "%"]
+        ],
+        {}
+);
+
+var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]);
+
+var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]);
+
+/* -----[ Parser ]----- */
+
+function NodeWithToken(str, start, end) {
+        this.name = str;
+        this.start = start;
+        this.end = end;
+};
+
+NodeWithToken.prototype.toString = function() { return this.name; };
+
+function parse($TEXT, exigent_mode, embed_tokens) {
+
+        var S = {
+                input       : typeof $TEXT == "string" ? tokenizer($TEXT, true) : $TEXT,
+                token       : null,
+                prev        : null,
+                peeked      : null,
+                in_function : 0,
+                in_loop     : 0,
+                labels      : []
+        };
+
+        S.token = next();
+
+        function is(type, value) {
+                return is_token(S.token, type, value);
+        };
+
+        function peek() { return S.peeked || (S.peeked = S.input()); };
+
+        function next() {
+                S.prev = S.token;
+                if (S.peeked) {
+                        S.token = S.peeked;
+                        S.peeked = null;
+                } else {
+                        S.token = S.input();
+                }
+                return S.token;
+        };
+
+        function prev() {
+                return S.prev;
+        };
+
+        function croak(msg, line, col, pos) {
+                var ctx = S.input.context();
+                js_error(msg,
+                         line != null ? line : ctx.tokline,
+                         col != null ? col : ctx.tokcol,
+                         pos != null ? pos : ctx.tokpos);
+        };
+
+        function token_error(token, msg) {
+                croak(msg, token.line, token.col);
+        };
+
+        function unexpected(token) {
+                if (token == null)
+                        token = S.token;
+                token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")");
+        };
+
+        function expect_token(type, val) {
+                if (is(type, val)) {
+                        return next();
+                }
+                token_error(S.token, "Unexpected token " + S.token.type + ", expected " + type);
+        };
+
+        function expect(punc) { return expect_token("punc", punc); };
+
+        function can_insert_semicolon() {
+                return !exigent_mode && (
+                        S.token.nlb || is("eof") || is("punc", "}")
+                );
+        };
+
+        function semicolon() {
+                if (is("punc", ";")) next();
+                else if (!can_insert_semicolon()) unexpected();
+        };
+
+        function as() {
+                return slice(arguments);
+        };
+
+        function parenthesised() {
+                expect("(");
+                var ex = expression();
+                expect(")");
+                return ex;
+        };
+
+        function add_tokens(str, start, end) {
+                return str instanceof NodeWithToken ? str : new NodeWithToken(str, start, end);
+        };
+
+        var statement = embed_tokens ? function() {
+                var start = S.token;
+                var ast = $statement.apply(this, arguments);
+                ast[0] = add_tokens(ast[0], start, prev());
+                return ast;
+        } : $statement;
+
+        function $statement() {
+                if (is("operator", "/")) {
+                        S.peeked = null;
+                        S.token = S.input(true); // force regexp
+                }
+                switch (S.token.type) {
+                    case "num":
+                    case "string":
+                    case "regexp":
+                    case "operator":
+                    case "atom":
+                        return simple_statement();
+
+                    case "name":
+                        return is_token(peek(), "punc", ":")
+                                ? labeled_statement(prog1(S.token.value, next, next))
+                                : simple_statement();
+
+                    case "punc":
+                        switch (S.token.value) {
+                            case "{":
+                                return as("block", block_());
+                            case "[":
+                            case "(":
+                                return simple_statement();
+                            case ";":
+                                next();
+                                return as("block");
+                            default:
+                                unexpected();
+                        }
+
+                    case "keyword":
+                        switch (prog1(S.token.value, next)) {
+                            case "break":
+                                return break_cont("break");
+
+                            case "continue":
+                                return break_cont("continue");
+
+                            case "debugger":
+                                semicolon();
+                                return as("debugger");
+
+                            case "do":
+                                return (function(body){
+                                        expect_token("keyword", "while");
+                                        return as("do", prog1(parenthesised, semicolon), body);
+                                })(in_loop(statement));
+
+                            case "for":
+                                return for_();
+
+                            case "function":
+                                return function_(true);
+
+                            case "if":
+                                return if_();
+
+                            case "return":
+                                if (S.in_function == 0)
+                                        croak("'return' outside of function");
+                                return as("return",
+                                          is("punc", ";")
+                                          ? (next(), null)
+                                          : can_insert_semicolon()
+                                          ? null
+                                          : prog1(expression, semicolon));
+
+                            case "switch":
+                                return as("switch", parenthesised(), switch_block_());
+
+                            case "throw":
+                                return as("throw", prog1(expression, semicolon));
+
+                            case "try":
+                                return try_();
+
+                            case "var":
+                                return prog1(var_, semicolon);
+
+                            case "const":
+                                return prog1(const_, semicolon);
+
+                            case "while":
+                                return as("while", parenthesised(), in_loop(statement));
+
+                            case "with":
+                                return as("with", parenthesised(), statement());
+
+                            default:
+                                unexpected();
+                        }
+                }
+        };
+
+        function labeled_statement(label) {
+                S.labels.push(label);
+                var start = S.token, stat = statement();
+                if (exigent_mode && !HOP(STATEMENTS_WITH_LABELS, stat[0]))
+                        unexpected(start);
+                S.labels.pop();
+                return as("label", label, stat);
+        };
+
+        function simple_statement() {
+                return as("stat", prog1(expression, semicolon));
+        };
+
+        function break_cont(type) {
+                var name = is("name") ? S.token.value : null;
+                if (name != null) {
+                        next();
+                        if (!member(name, S.labels))
+                                croak("Label " + name + " without matching loop or statement");
+                }
+                else if (S.in_loop == 0)
+                        croak(type + " not inside a loop or switch");
+                semicolon();
+                return as(type, name);
+        };
+
+        function for_() {
+                expect("(");
+                var init = null;
+                if (!is("punc", ";")) {
+                        init = is("keyword", "var")
+                                ? (next(), var_(true))
+                                : expression(true, true);
+                        if (is("operator", "in"))
+                                return for_in(init);
+                }
+                return regular_for(init);
+        };
+
+        function regular_for(init) {
+                expect(";");
+                var test = is("punc", ";") ? null : expression();
+                expect(";");
+                var step = is("punc", ")") ? null : expression();
+                expect(")");
+                return as("for", init, test, step, in_loop(statement));
+        };
+
+        function for_in(init) {
+                var lhs = init[0] == "var" ? as("name", init[1][0]) : init;
+                next();
+                var obj = expression();
+                expect(")");
+                return as("for-in", init, lhs, obj, in_loop(statement));
+        };
+
+        var function_ = embed_tokens ? function() {
+                var start = prev();
+                var ast = $function_.apply(this, arguments);
+                ast[0] = add_tokens(ast[0], start, prev());
+                return ast;
+        } : $function_;
+
+        function $function_(in_statement) {
+                var name = is("name") ? prog1(S.token.value, next) : null;
+                if (in_statement && !name)
+                        unexpected();
+                expect("(");
+                return as(in_statement ? "defun" : "function",
+                          name,
+                          // arguments
+                          (function(first, a){
+                                  while (!is("punc", ")")) {
+                                          if (first) first = false; else expect(",");
+                                          if (!is("name")) unexpected();
+                                          a.push(S.token.value);
+                                          next();
+                                  }
+                                  next();
+                                  return a;
+                          })(true, []),
+                          // body
+                          (function(){
+                                  ++S.in_function;
+                                  var loop = S.in_loop;
+                                  S.in_loop = 0;
+                                  var a = block_();
+                                  --S.in_function;
+                                  S.in_loop = loop;
+                                  return a;
+                          })());
+        };
+
+        function if_() {
+                var cond = parenthesised(), body = statement(), belse;
+                if (is("keyword", "else")) {
+                        next();
+                        belse = statement();
+                }
+                return as("if", cond, body, belse);
+        };
+
+        function block_() {
+                expect("{");
+                var a = [];
+                while (!is("punc", "}")) {
+                        if (is("eof")) unexpected();
+                        a.push(statement());
+                }
+                next();
+                return a;
+        };
+
+        var switch_block_ = curry(in_loop, function(){
+                expect("{");
+                var a = [], cur = null;
+                while (!is("punc", "}")) {
+                        if (is("eof")) unexpected();
+                        if (is("keyword", "case")) {
+                                next();
+                                cur = [];
+                                a.push([ expression(), cur ]);
+                                expect(":");
+                        }
+                        else if (is("keyword", "default")) {
+                                next();
+                                expect(":");
+                                cur = [];
+                                a.push([ null, cur ]);
+                        }
+                        else {
+                                if (!cur) unexpected();
+                                cur.push(statement());
+                        }
+                }
+                next();
+                return a;
+        });
+
+        function try_() {
+                var body = block_(), bcatch, bfinally;
+                if (is("keyword", "catch")) {
+                        next();
+                        expect("(");
+                        if (!is("name"))
+                                croak("Name expected");
+                        var name = S.token.value;
+                        next();
+                        expect(")");
+                        bcatch = [ name, block_() ];
+                }
+                if (is("keyword", "finally")) {
+                        next();
+                        bfinally = block_();
+                }
+                if (!bcatch && !bfinally)
+                        croak("Missing catch/finally blocks");
+                return as("try", body, bcatch, bfinally);
+        };
+
+        function vardefs(no_in) {
+                var a = [];
+                for (;;) {
+                        if (!is("name"))
+                                unexpected();
+                        var name = S.token.value;
+                        next();
+                        if (is("operator", "=")) {
+                                next();
+                                a.push([ name, expression(false, no_in) ]);
+                        } else {
+                                a.push([ name ]);
+                        }
+                        if (!is("punc", ","))
+                                break;
+                        next();
+                }
+                return a;
+        };
+
+        function var_(no_in) {
+                return as("var", vardefs(no_in));
+        };
+
+        function const_() {
+                return as("const", vardefs());
+        };
+
+        function new_() {
+                var newexp = expr_atom(false), args;
+                if (is("punc", "(")) {
+                        next();
+                        args = expr_list(")");
+                } else {
+                        args = [];
+                }
+                return subscripts(as("new", newexp, args), true);
+        };
+
+        function expr_atom(allow_calls) {
+                if (is("operator", "new")) {
+                        next();
+                        return new_();
+                }
+                if (is("operator") && HOP(UNARY_PREFIX, S.token.value)) {
+                        return make_unary("unary-prefix",
+                                          prog1(S.token.value, next),
+                                          expr_atom(allow_calls));
+                }
+                if (is("punc")) {
+                        switch (S.token.value) {
+                            case "(":
+                                next();
+                                return subscripts(prog1(expression, curry(expect, ")")), allow_calls);
+                            case "[":
+                                next();
+                                return subscripts(array_(), allow_calls);
+                            case "{":
+                                next();
+                                return subscripts(object_(), allow_calls);
+                        }
+                        unexpected();
+                }
+                if (is("keyword", "function")) {
+                        next();
+                        return subscripts(function_(false), allow_calls);
+                }
+                if (HOP(ATOMIC_START_TOKEN, S.token.type)) {
+                        var atom = S.token.type == "regexp"
+                                ? as("regexp", S.token.value[0], S.token.value[1])
+                                : as(S.token.type, S.token.value);
+                        return subscripts(prog1(atom, next), allow_calls);
+                }
+                unexpected();
+        };
+
+        function expr_list(closing, allow_trailing_comma, allow_empty) {
+                var first = true, a = [];
+                while (!is("punc", closing)) {
+                        if (first) first = false; else expect(",");
+                        if (allow_trailing_comma && is("punc", closing)) break;
+                        if (is("punc", ",") && allow_empty) {
+                                a.push([ "atom", "undefined" ]);
+                        } else {
+                                a.push(expression(false));
+                        }
+                }
+                next();
+                return a;
+        };
+
+        function array_() {
+                return as("array", expr_list("]", !exigent_mode, true));
+        };
+
+        function object_() {
+                var first = true, a = [];
+                while (!is("punc", "}")) {
+                        if (first) first = false; else expect(",");
+                        if (!exigent_mode && is("punc", "}"))
+                                // allow trailing comma
+                                break;
+                        var type = S.token.type;
+                        var name = as_property_name();
+                        if (type == "name" && (name == "get" || name == "set") && !is("punc", ":")) {
+                                a.push([ as_name(), function_(false), name ]);
+                        } else {
+                                expect(":");
+                                a.push([ name, expression(false) ]);
+                        }
+                }
+                next();
+                return as("object", a);
+        };
+
+        function as_property_name() {
+                switch (S.token.type) {
+                    case "num":
+                    case "string":
+                        return prog1(S.token.value, next);
+                }
+                return as_name();
+        };
+
+        function as_name() {
+                switch (S.token.type) {
+                    case "name":
+                    case "operator":
+                    case "keyword":
+                    case "atom":
+                        return prog1(S.token.value, next);
+                    default:
+                        unexpected();
+                }
+        };
+
+        function subscripts(expr, allow_calls) {
+                if (is("punc", ".")) {
+                        next();
+                        return subscripts(as("dot", expr, as_name()), allow_calls);
+                }
+                if (is("punc", "[")) {
+                        next();
+                        return subscripts(as("sub", expr, prog1(expression, curry(expect, "]"))), allow_calls);
+                }
+                if (allow_calls && is("punc", "(")) {
+                        next();
+                        return subscripts(as("call", expr, expr_list(")")), true);
+                }
+                if (allow_calls && is("operator") && HOP(UNARY_POSTFIX, S.token.value)) {
+                        return prog1(curry(make_unary, "unary-postfix", S.token.value, expr),
+                                     next);
+                }
+                return expr;
+        };
+
+        function make_unary(tag, op, expr) {
+                if ((op == "++" || op == "--") && !is_assignable(expr))
+                        croak("Invalid use of " + op + " operator");
+                return as(tag, op, expr);
+        };
+
+        function expr_op(left, min_prec, no_in) {
+                var op = is("operator") ? S.token.value : null;
+                if (op && op == "in" && no_in) op = null;
+                var prec = op != null ? PRECEDENCE[op] : null;
+                if (prec != null && prec > min_prec) {
+                        next();
+                        var right = expr_op(expr_atom(true), prec, no_in);
+                        return expr_op(as("binary", op, left, right), min_prec, no_in);
+                }
+                return left;
+        };
+
+        function expr_ops(no_in) {
+                return expr_op(expr_atom(true), 0, no_in);
+        };
+
+        function maybe_conditional(no_in) {
+                var expr = expr_ops(no_in);
+                if (is("operator", "?")) {
+                        next();
+                        var yes = expression(false);
+                        expect(":");
+                        return as("conditional", expr, yes, expression(false, no_in));
+                }
+                return expr;
+        };
+
+        function is_assignable(expr) {
+                if (!exigent_mode) return true;
+                switch (expr[0]) {
+                    case "dot":
+                    case "sub":
+                    case "new":
+                    case "call":
+                        return true;
+                    case "name":
+                        return expr[1] != "this";
+                }
+        };
+
+        function maybe_assign(no_in) {
+                var left = maybe_conditional(no_in), val = S.token.value;
+                if (is("operator") && HOP(ASSIGNMENT, val)) {
+                        if (is_assignable(left)) {
+                                next();
+                                return as("assign", ASSIGNMENT[val], left, maybe_assign(no_in));
+                        }
+                        croak("Invalid assignment");
+                }
+                return left;
+        };
+
+        function expression(commas, no_in) {
+                if (arguments.length == 0)
+                        commas = true;
+                var expr = maybe_assign(no_in);
+                if (commas && is("punc", ",")) {
+                        next();
+                        return as("seq", expr, expression(true, no_in));
+                }
+                return expr;
+        };
+
+        function in_loop(cont) {
+                try {
+                        ++S.in_loop;
+                        return cont();
+                } finally {
+                        --S.in_loop;
+                }
+        };
+
+        return as("toplevel", (function(a){
+                while (!is("eof"))
+                        a.push(statement());
+                return a;
+        })([]));
+
+};
+
+/* -----[ Utilities ]----- */
+
+function curry(f) {
+        var args = slice(arguments, 1);
+        return function() { return f.apply(this, args.concat(slice(arguments))); };
+};
+
+function prog1(ret) {
+        if (ret instanceof Function)
+                ret = ret();
+        for (var i = 1, n = arguments.length; --n > 0; ++i)
+                arguments[i]();
+        return ret;
+};
+
+function array_to_hash(a) {
+        var ret = {};
+        for (var i = 0; i < a.length; ++i)
+                ret[a[i]] = true;
+        return ret;
+};
+
+function slice(a, start) {
+        return Array.prototype.slice.call(a, start == null ? 0 : start);
+};
+
+function characters(str) {
+        return str.split("");
+};
+
+function member(name, array) {
+        for (var i = array.length; --i >= 0;)
+                if (array[i] === name)
+                        return true;
+        return false;
+};
+
+function HOP(obj, prop) {
+        return Object.prototype.hasOwnProperty.call(obj, prop);
+};
+
+var warn = function() {};
+
+/* -----[ Exports ]----- */
+
+exports.tokenizer = tokenizer;
+exports.parse = parse;
+exports.slice = slice;
+exports.curry = curry;
+exports.member = member;
+exports.array_to_hash = array_to_hash;
+exports.PRECEDENCE = PRECEDENCE;
+exports.KEYWORDS_ATOM = KEYWORDS_ATOM;
+exports.RESERVED_WORDS = RESERVED_WORDS;
+exports.KEYWORDS = KEYWORDS;
+exports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN;
+exports.OPERATORS = OPERATORS;
+exports.is_alphanumeric_char = is_alphanumeric_char;
+exports.set_logger = function(logger) {
+        warn = logger;
+};
Index: /Dev/trunk/d3/lib/uglifyjs/lib/process.js
===================================================================
--- /Dev/trunk/d3/lib/uglifyjs/lib/process.js	(revision 76)
+++ /Dev/trunk/d3/lib/uglifyjs/lib/process.js	(revision 76)
@@ -0,0 +1,1614 @@
+/***********************************************************************
+
+  A JavaScript tokenizer / parser / beautifier / compressor.
+
+  This version is suitable for Node.js.  With minimal changes (the
+  exports stuff) it should work on any JS platform.
+
+  This file implements some AST processors.  They work on data built
+  by parse-js.
+
+  Exported functions:
+
+    - ast_mangle(ast, options) -- mangles the variable/function names
+      in the AST.  Returns an AST.
+
+    - ast_squeeze(ast) -- employs various optimizations to make the
+      final generated code even smaller.  Returns an AST.
+
+    - gen_code(ast, options) -- generates JS code from the AST.  Pass
+      true (or an object, see the code for some options) as second
+      argument to get "pretty" (indented) code.
+
+  -------------------------------- (C) ---------------------------------
+
+                           Author: Mihai Bazon
+                         <mihai.bazon@gmail.com>
+                       http://mihai.bazon.net/blog
+
+  Distributed under the BSD license:
+
+    Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+        * Redistributions of source code must retain the above
+          copyright notice, this list of conditions and the following
+          disclaimer.
+
+        * Redistributions in binary form must reproduce the above
+          copyright notice, this list of conditions and the following
+          disclaimer in the documentation and/or other materials
+          provided with the distribution.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER âAS ISâ AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+
+ ***********************************************************************/
+
+var jsp = require("./parse-js"),
+    slice = jsp.slice,
+    member = jsp.member,
+    PRECEDENCE = jsp.PRECEDENCE,
+    OPERATORS = jsp.OPERATORS;
+
+/* -----[ helper for AST traversal ]----- */
+
+function ast_walker(ast) {
+        function _vardefs(defs) {
+                return [ this[0], MAP(defs, function(def){
+                        var a = [ def[0] ];
+                        if (def.length > 1)
+                                a[1] = walk(def[1]);
+                        return a;
+                }) ];
+        };
+        var walkers = {
+                "string": function(str) {
+                        return [ this[0], str ];
+                },
+                "num": function(num) {
+                        return [ this[0], num ];
+                },
+                "name": function(name) {
+                        return [ this[0], name ];
+                },
+                "toplevel": function(statements) {
+                        return [ this[0], MAP(statements, walk) ];
+                },
+                "block": function(statements) {
+                        var out = [ this[0] ];
+                        if (statements != null)
+                                out.push(MAP(statements, walk));
+                        return out;
+                },
+                "var": _vardefs,
+                "const": _vardefs,
+                "try": function(t, c, f) {
+                        return [
+                                this[0],
+                                MAP(t, walk),
+                                c != null ? [ c[0], MAP(c[1], walk) ] : null,
+                                f != null ? MAP(f, walk) : null
+                        ];
+                },
+                "throw": function(expr) {
+                        return [ this[0], walk(expr) ];
+                },
+                "new": function(ctor, args) {
+                        return [ this[0], walk(ctor), MAP(args, walk) ];
+                },
+                "switch": function(expr, body) {
+                        return [ this[0], walk(expr), MAP(body, function(branch){
+                                return [ branch[0] ? walk(branch[0]) : null,
+                                         MAP(branch[1], walk) ];
+                        }) ];
+                },
+                "break": function(label) {
+                        return [ this[0], label ];
+                },
+                "continue": function(label) {
+                        return [ this[0], label ];
+                },
+                "conditional": function(cond, t, e) {
+                        return [ this[0], walk(cond), walk(t), walk(e) ];
+                },
+                "assign": function(op, lvalue, rvalue) {
+                        return [ this[0], op, walk(lvalue), walk(rvalue) ];
+                },
+                "dot": function(expr) {
+                        return [ this[0], walk(expr) ].concat(slice(arguments, 1));
+                },
+                "call": function(expr, args) {
+                        return [ this[0], walk(expr), MAP(args, walk) ];
+                },
+                "function": function(name, args, body) {
+                        return [ this[0], name, args.slice(), MAP(body, walk) ];
+                },
+                "defun": function(name, args, body) {
+                        return [ this[0], name, args.slice(), MAP(body, walk) ];
+                },
+                "if": function(conditional, t, e) {
+                        return [ this[0], walk(conditional), walk(t), walk(e) ];
+                },
+                "for": function(init, cond, step, block) {
+                        return [ this[0], walk(init), walk(cond), walk(step), walk(block) ];
+                },
+                "for-in": function(vvar, key, hash, block) {
+                        return [ this[0], walk(vvar), walk(key), walk(hash), walk(block) ];
+                },
+                "while": function(cond, block) {
+                        return [ this[0], walk(cond), walk(block) ];
+                },
+                "do": function(cond, block) {
+                        return [ this[0], walk(cond), walk(block) ];
+                },
+                "return": function(expr) {
+                        return [ this[0], walk(expr) ];
+                },
+                "binary": function(op, left, right) {
+                        return [ this[0], op, walk(left), walk(right) ];
+                },
+                "unary-prefix": function(op, expr) {
+                        return [ this[0], op, walk(expr) ];
+                },
+                "unary-postfix": function(op, expr) {
+                        return [ this[0], op, walk(expr) ];
+                },
+                "sub": function(expr, subscript) {
+                        return [ this[0], walk(expr), walk(subscript) ];
+                },
+                "object": function(props) {
+                        return [ this[0], MAP(props, function(p){
+                                return p.length == 2
+                                        ? [ p[0], walk(p[1]) ]
+                                        : [ p[0], walk(p[1]), p[2] ]; // get/set-ter
+                        }) ];
+                },
+                "regexp": function(rx, mods) {
+                        return [ this[0], rx, mods ];
+                },
+                "array": function(elements) {
+                        return [ this[0], MAP(elements, walk) ];
+                },
+                "stat": function(stat) {
+                        return [ this[0], walk(stat) ];
+                },
+                "seq": function() {
+                        return [ this[0] ].concat(MAP(slice(arguments), walk));
+                },
+                "label": function(name, block) {
+                        return [ this[0], name, walk(block) ];
+                },
+                "with": function(expr, block) {
+                        return [ this[0], walk(expr), walk(block) ];
+                },
+                "atom": function(name) {
+                        return [ this[0], name ];
+                }
+        };
+
+        var user = {};
+        var stack = [];
+        function walk(ast) {
+                if (ast == null)
+                        return null;
+                try {
+                        stack.push(ast);
+                        var type = ast[0];
+                        var gen = user[type];
+                        if (gen) {
+                                var ret = gen.apply(ast, ast.slice(1));
+                                if (ret != null)
+                                        return ret;
+                        }
+                        gen = walkers[type];
+                        return gen.apply(ast, ast.slice(1));
+                } finally {
+                        stack.pop();
+                }
+        };
+
+        function with_walkers(walkers, cont){
+                var save = {}, i;
+                for (i in walkers) if (HOP(walkers, i)) {
+                        save[i] = user[i];
+                        user[i] = walkers[i];
+                }
+                var ret = cont();
+                for (i in save) if (HOP(save, i)) {
+                        if (!save[i]) delete user[i];
+                        else user[i] = save[i];
+                }
+                return ret;
+        };
+
+        return {
+                walk: walk,
+                with_walkers: with_walkers,
+                parent: function() {
+                        return stack[stack.length - 2]; // last one is current node
+                },
+                stack: function() {
+                        return stack;
+                }
+        };
+};
+
+/* -----[ Scope and mangling ]----- */
+
+function Scope(parent) {
+        this.names = {};        // names defined in this scope
+        this.mangled = {};      // mangled names (orig.name => mangled)
+        this.rev_mangled = {};  // reverse lookup (mangled => orig.name)
+        this.cname = -1;        // current mangled name
+        this.refs = {};         // names referenced from this scope
+        this.uses_with = false; // will become TRUE if eval() is detected in this or any subscopes
+        this.uses_eval = false; // will become TRUE if with() is detected in this or any subscopes
+        this.parent = parent;   // parent scope
+        this.children = [];     // sub-scopes
+        if (parent) {
+                this.level = parent.level + 1;
+                parent.children.push(this);
+        } else {
+                this.level = 0;
+        }
+};
+
+var base54 = (function(){
+        var DIGITS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_";
+        return function(num) {
+                var ret = "";
+                do {
+                        ret = DIGITS.charAt(num % 54) + ret;
+                        num = Math.floor(num / 54);
+                } while (num > 0);
+                return ret;
+        };
+})();
+
+Scope.prototype = {
+        has: function(name) {
+                for (var s = this; s; s = s.parent)
+                        if (HOP(s.names, name))
+                                return s;
+        },
+        has_mangled: function(mname) {
+                for (var s = this; s; s = s.parent)
+                        if (HOP(s.rev_mangled, mname))
+                                return s;
+        },
+        toJSON: function() {
+                return {
+                        names: this.names,
+                        uses_eval: this.uses_eval,
+                        uses_with: this.uses_with
+                };
+        },
+
+        next_mangled: function() {
+                // we must be careful that the new mangled name:
+                //
+                // 1. doesn't shadow a mangled name from a parent
+                //    scope, unless we don't reference the original
+                //    name from this scope OR from any sub-scopes!
+                //    This will get slow.
+                //
+                // 2. doesn't shadow an original name from a parent
+                //    scope, in the event that the name is not mangled
+                //    in the parent scope and we reference that name
+                //    here OR IN ANY SUBSCOPES!
+                //
+                // 3. doesn't shadow a name that is referenced but not
+                //    defined (possibly global defined elsewhere).
+                for (;;) {
+                        var m = base54(++this.cname), prior;
+
+                        // case 1.
+                        prior = this.has_mangled(m);
+                        if (prior && this.refs[prior.rev_mangled[m]] === prior)
+                                continue;
+
+                        // case 2.
+                        prior = this.has(m);
+                        if (prior && prior !== this && this.refs[m] === prior && !prior.has_mangled(m))
+                                continue;
+
+                        // case 3.
+                        if (HOP(this.refs, m) && this.refs[m] == null)
+                                continue;
+
+                        // I got "do" once. :-/
+                        if (!is_identifier(m))
+                                continue;
+
+                        return m;
+                }
+        },
+        get_mangled: function(name, newMangle) {
+                if (this.uses_eval || this.uses_with) return name; // no mangle if eval or with is in use
+                var s = this.has(name);
+                if (!s) return name; // not in visible scope, no mangle
+                if (HOP(s.mangled, name)) return s.mangled[name]; // already mangled in this scope
+                if (!newMangle) return name;                      // not found and no mangling requested
+
+                var m = s.next_mangled();
+                s.rev_mangled[m] = name;
+                return s.mangled[name] = m;
+        },
+        define: function(name) {
+                if (name != null)
+                        return this.names[name] = name;
+        }
+};
+
+function ast_add_scope(ast) {
+
+        var current_scope = null;
+        var w = ast_walker(), walk = w.walk;
+        var having_eval = [];
+
+        function with_new_scope(cont) {
+                current_scope = new Scope(current_scope);
+                var ret = current_scope.body = cont();
+                ret.scope = current_scope;
+                current_scope = current_scope.parent;
+                return ret;
+        };
+
+        function define(name) {
+                return current_scope.define(name);
+        };
+
+        function reference(name) {
+                current_scope.refs[name] = true;
+        };
+
+        function _lambda(name, args, body) {
+                return [ this[0], define(name), args, with_new_scope(function(){
+                        MAP(args, define);
+                        return MAP(body, walk);
+                })];
+        };
+
+        return with_new_scope(function(){
+                // process AST
+                var ret = w.with_walkers({
+                        "function": _lambda,
+                        "defun": _lambda,
+                        "with": function(expr, block) {
+                                for (var s = current_scope; s; s = s.parent)
+                                        s.uses_with = true;
+                        },
+                        "var": function(defs) {
+                                MAP(defs, function(d){ define(d[0]) });
+                        },
+                        "const": function(defs) {
+                                MAP(defs, function(d){ define(d[0]) });
+                        },
+                        "try": function(t, c, f) {
+                                if (c != null) return [
+                                        this[0],
+                                        MAP(t, walk),
+                                        [ define(c[0]), MAP(c[1], walk) ],
+                                        f != null ? MAP(f, walk) : null
+                                ];
+                        },
+                        "name": function(name) {
+                                if (name == "eval")
+                                        having_eval.push(current_scope);
+                                reference(name);
+                        }
+                }, function(){
+                        return walk(ast);
+                });
+
+                // the reason why we need an additional pass here is
+                // that names can be used prior to their definition.
+
+                // scopes where eval was detected and their parents
+                // are marked with uses_eval, unless they define the
+                // "eval" name.
+                MAP(having_eval, function(scope){
+                        if (!scope.has("eval")) while (scope) {
+                                scope.uses_eval = true;
+                                scope = scope.parent;
+                        }
+                });
+
+                // for referenced names it might be useful to know
+                // their origin scope.  current_scope here is the
+                // toplevel one.
+                function fixrefs(scope, i) {
+                        // do children first; order shouldn't matter
+                        for (i = scope.children.length; --i >= 0;)
+                                fixrefs(scope.children[i]);
+                        for (i in scope.refs) if (HOP(scope.refs, i)) {
+                                // find origin scope and propagate the reference to origin
+                                for (var origin = scope.has(i), s = scope; s; s = s.parent) {
+                                        s.refs[i] = origin;
+                                        if (s === origin) break;
+                                }
+                        }
+                };
+                fixrefs(current_scope);
+
+                return ret;
+        });
+
+};
+
+/* -----[ mangle names ]----- */
+
+function ast_mangle(ast, options) {
+        var w = ast_walker(), walk = w.walk, scope;
+        options = options || {};
+
+        function get_mangled(name, newMangle) {
+                if (!options.toplevel && !scope.parent) return name; // don't mangle toplevel
+                if (options.except && member(name, options.except))
+                        return name;
+                return scope.get_mangled(name, newMangle);
+        };
+
+        function _lambda(name, args, body) {
+                if (name) name = get_mangled(name);
+                body = with_scope(body.scope, function(){
+                        args = MAP(args, function(name){ return get_mangled(name) });
+                        return MAP(body, walk);
+                });
+                return [ this[0], name, args, body ];
+        };
+
+        function with_scope(s, cont) {
+                var _scope = scope;
+                scope = s;
+                for (var i in s.names) if (HOP(s.names, i)) {
+                        get_mangled(i, true);
+                }
+                var ret = cont();
+                ret.scope = s;
+                scope = _scope;
+                return ret;
+        };
+
+        function _vardefs(defs) {
+                return [ this[0], MAP(defs, function(d){
+                        return [ get_mangled(d[0]), walk(d[1]) ];
+                }) ];
+        };
+
+        return w.with_walkers({
+                "function": _lambda,
+                "defun": function() {
+                        // move function declarations to the top when
+                        // they are not in some block.
+                        var ast = _lambda.apply(this, arguments);
+                        switch (w.parent()[0]) {
+                            case "toplevel":
+                            case "function":
+                            case "defun":
+                                return MAP.at_top(ast);
+                        }
+                        return ast;
+                },
+                "var": _vardefs,
+                "const": _vardefs,
+                "name": function(name) {
+                        return [ this[0], get_mangled(name) ];
+                },
+                "try": function(t, c, f) {
+                        return [ this[0],
+                                 MAP(t, walk),
+                                 c != null ? [ get_mangled(c[0]), MAP(c[1], walk) ] : null,
+                                 f != null ? MAP(f, walk) : null ];
+                },
+                "toplevel": function(body) {
+                        var self = this;
+                        return with_scope(self.scope, function(){
+                                return [ self[0], MAP(body, walk) ];
+                        });
+                }
+        }, function() {
+                return walk(ast_add_scope(ast));
+        });
+};
+
+/* -----[
+   - compress foo["bar"] into foo.bar,
+   - remove block brackets {} where possible
+   - join consecutive var declarations
+   - various optimizations for IFs:
+     - if (cond) foo(); else bar();  ==>  cond?foo():bar();
+     - if (cond) foo();  ==>  cond&&foo();
+     - if (foo) return bar(); else return baz();  ==> return foo?bar():baz(); // also for throw
+     - if (foo) return bar(); else something();  ==> {if(foo)return bar();something()}
+   ]----- */
+
+var warn = function(){};
+
+function best_of(ast1, ast2) {
+        return gen_code(ast1).length > gen_code(ast2[0] == "stat" ? ast2[1] : ast2).length ? ast2 : ast1;
+};
+
+function last_stat(b) {
+        if (b[0] == "block" && b[1] && b[1].length > 0)
+                return b[1][b[1].length - 1];
+        return b;
+}
+
+function aborts(t) {
+        if (t) {
+                t = last_stat(t);
+                if (t[0] == "return" || t[0] == "break" || t[0] == "continue" || t[0] == "throw")
+                        return true;
+        }
+};
+
+function boolean_expr(expr) {
+        return ( (expr[0] == "unary-prefix"
+                  && member(expr[1], [ "!", "delete" ])) ||
+
+                 (expr[0] == "binary"
+                  && member(expr[1], [ "in", "instanceof", "==", "!=", "===", "!==", "<", "<=", ">=", ">" ])) ||
+
+                 (expr[0] == "binary"
+                  && member(expr[1], [ "&&", "||" ])
+                  && boolean_expr(expr[2])
+                  && boolean_expr(expr[3])) ||
+
+                 (expr[0] == "conditional"
+                  && boolean_expr(expr[2])
+                  && boolean_expr(expr[3])) ||
+
+                 (expr[0] == "assign"
+                  && expr[1] === true
+                  && boolean_expr(expr[3])) ||
+
+                 (expr[0] == "seq"
+                  && boolean_expr(expr[expr.length - 1]))
+               );
+};
+
+function make_conditional(c, t, e) {
+        if (c[0] == "unary-prefix" && c[1] == "!") {
+                return e ? [ "conditional", c[2], e, t ] : [ "binary", "||", c[2], t ];
+        } else {
+                return e ? [ "conditional", c, t, e ] : [ "binary", "&&", c, t ];
+        }
+};
+
+function empty(b) {
+        return !b || (b[0] == "block" && (!b[1] || b[1].length == 0));
+};
+
+function is_string(node) {
+        return (node[0] == "string" ||
+                node[0] == "unary-prefix" && node[1] == "typeof" ||
+                node[0] == "binary" && node[1] == "+" &&
+                (is_string(node[2]) || is_string(node[3])));
+};
+
+var when_constant = (function(){
+
+        var $NOT_CONSTANT = {};
+
+        // this can only evaluate constant expressions.  If it finds anything
+        // not constant, it throws $NOT_CONSTANT.
+        function evaluate(expr) {
+                switch (expr[0]) {
+                    case "string":
+                    case "num":
+                        return expr[1];
+                    case "name":
+                    case "atom":
+                        switch (expr[1]) {
+                            case "true": return true;
+                            case "false": return false;
+                        }
+                        break;
+                    case "unary-prefix":
+                        switch (expr[1]) {
+                            case "!": return !evaluate(expr[2]);
+                            case "typeof": return typeof evaluate(expr[2]);
+                            case "~": return ~evaluate(expr[2]);
+                            case "-": return -evaluate(expr[2]);
+                            case "+": return +evaluate(expr[2]);
+                        }
+                        break;
+                    case "binary":
+                        var left = expr[2], right = expr[3];
+                        switch (expr[1]) {
+                            case "&&"         : return evaluate(left) &&         evaluate(right);
+                            case "||"         : return evaluate(left) ||         evaluate(right);
+                            case "|"          : return evaluate(left) |          evaluate(right);
+                            case "&"          : return evaluate(left) &          evaluate(right);
+                            case "^"          : return evaluate(left) ^          evaluate(right);
+                            case "+"          : return evaluate(left) +          evaluate(right);
+                            case "*"          : return evaluate(left) *          evaluate(right);
+                            case "/"          : return evaluate(left) /          evaluate(right);
+                            case "-"          : return evaluate(left) -          evaluate(right);
+                            case "<<"         : return evaluate(left) <<         evaluate(right);
+                            case ">>"         : return evaluate(left) >>         evaluate(right);
+                            case ">>>"        : return evaluate(left) >>>        evaluate(right);
+                            case "=="         : return evaluate(left) ==         evaluate(right);
+                            case "==="        : return evaluate(left) ===        evaluate(right);
+                            case "!="         : return evaluate(left) !=         evaluate(right);
+                            case "!=="        : return evaluate(left) !==        evaluate(right);
+                            case "<"          : return evaluate(left) <          evaluate(right);
+                            case "<="         : return evaluate(left) <=         evaluate(right);
+                            case ">"          : return evaluate(left) >          evaluate(right);
+                            case ">="         : return evaluate(left) >=         evaluate(right);
+                            case "in"         : return evaluate(left) in         evaluate(right);
+                            case "instanceof" : return evaluate(left) instanceof evaluate(right);
+                        }
+                }
+                throw $NOT_CONSTANT;
+        };
+
+        return function(expr, yes, no) {
+                try {
+                        var val = evaluate(expr), ast;
+                        switch (typeof val) {
+                            case "string": ast =  [ "string", val ]; break;
+                            case "number": ast =  [ "num", val ]; break;
+                            case "boolean": ast =  [ "name", String(val) ]; break;
+                            default: throw new Error("Can't handle constant of type: " + (typeof val));
+                        }
+                        return yes.call(expr, ast, val);
+                } catch(ex) {
+                        if (ex === $NOT_CONSTANT) {
+                                if (expr[0] == "binary"
+                                    && (expr[1] == "===" || expr[1] == "!==")
+                                    && ((is_string(expr[2]) && is_string(expr[3]))
+                                        || (boolean_expr(expr[2]) && boolean_expr(expr[3])))) {
+                                        expr[1] = expr[1].substr(0, 2);
+                                }
+                                return no ? no.call(expr, expr) : null;
+                        }
+                        else throw ex;
+                }
+        };
+
+})();
+
+function warn_unreachable(ast) {
+        if (!empty(ast))
+                warn("Dropping unreachable code: " + gen_code(ast, true));
+};
+
+function ast_squeeze(ast, options) {
+        options = defaults(options, {
+                make_seqs   : true,
+                dead_code   : true,
+                keep_comps  : true,
+                no_warnings : false
+        });
+
+        var w = ast_walker(), walk = w.walk, scope;
+
+        function negate(c) {
+                var not_c = [ "unary-prefix", "!", c ];
+                switch (c[0]) {
+                    case "unary-prefix":
+                        return c[1] == "!" && boolean_expr(c[2]) ? c[2] : not_c;
+                    case "seq":
+                        c = slice(c);
+                        c[c.length - 1] = negate(c[c.length - 1]);
+                        return c;
+                    case "conditional":
+                        return best_of(not_c, [ "conditional", c[1], negate(c[2]), negate(c[3]) ]);
+                    case "binary":
+                        var op = c[1], left = c[2], right = c[3];
+                        if (!options.keep_comps) switch (op) {
+                            case "<="  : return [ "binary", ">", left, right ];
+                            case "<"   : return [ "binary", ">=", left, right ];
+                            case ">="  : return [ "binary", "<", left, right ];
+                            case ">"   : return [ "binary", "<=", left, right ];
+                        }
+                        switch (op) {
+                            case "=="  : return [ "binary", "!=", left, right ];
+                            case "!="  : return [ "binary", "==", left, right ];
+                            case "===" : return [ "binary", "!==", left, right ];
+                            case "!==" : return [ "binary", "===", left, right ];
+                            case "&&"  : return best_of(not_c, [ "binary", "||", negate(left), negate(right) ]);
+                            case "||"  : return best_of(not_c, [ "binary", "&&", negate(left), negate(right) ]);
+                        }
+                        break;
+                }
+                return not_c;
+        };
+
+        function with_scope(s, cont) {
+                var _scope = scope;
+                scope = s;
+                var ret = cont();
+                ret.scope = s;
+                scope = _scope;
+                return ret;
+        };
+
+        function rmblock(block) {
+                if (block != null && block[0] == "block" && block[1]) {
+                        if (block[1].length == 1)
+                                block = block[1][0];
+                        else if (block[1].length == 0)
+                                block = [ "block" ];
+                }
+                return block;
+        };
+
+        function _lambda(name, args, body) {
+                return [ this[0], name, args, with_scope(body.scope, function(){
+                        return tighten(MAP(body, walk), "lambda");
+                }) ];
+        };
+
+        // we get here for blocks that have been already transformed.
+        // this function does a few things:
+        // 1. discard useless blocks
+        // 2. join consecutive var declarations
+        // 3. remove obviously dead code
+        // 4. transform consecutive statements using the comma operator
+        // 5. if block_type == "lambda" and it detects constructs like if(foo) return ... - rewrite like if (!foo) { ... }
+        function tighten(statements, block_type) {
+                statements = statements.reduce(function(a, stat){
+                        if (stat[0] == "block") {
+                                if (stat[1]) {
+                                        a.push.apply(a, stat[1]);
+                                }
+                        } else {
+                                a.push(stat);
+                        }
+                        return a;
+                }, []);
+
+                statements = (function(a, prev){
+                        statements.forEach(function(cur){
+                                if (prev && ((cur[0] == "var" && prev[0] == "var") ||
+                                             (cur[0] == "const" && prev[0] == "const"))) {
+                                        prev[1] = prev[1].concat(cur[1]);
+                                } else {
+                                        a.push(cur);
+                                        prev = cur;
+                                }
+                        });
+                        return a;
+                })([]);
+
+                if (options.dead_code) statements = (function(a, has_quit){
+                        statements.forEach(function(st){
+                                if (has_quit) {
+                                        if (member(st[0], [ "function", "defun" , "var", "const" ])) {
+                                                a.push(st);
+                                        }
+                                        else if (!options.no_warnings)
+                                                warn_unreachable(st);
+                                }
+                                else {
+                                        a.push(st);
+                                        if (member(st[0], [ "return", "throw", "break", "continue" ]))
+                                                has_quit = true;
+                                }
+                        });
+                        return a;
+                })([]);
+
+                if (options.make_seqs) statements = (function(a, prev) {
+                        statements.forEach(function(cur){
+                                if (prev && prev[0] == "stat" && cur[0] == "stat") {
+                                        prev[1] = [ "seq", prev[1], cur[1] ];
+                                } else {
+                                        a.push(cur);
+                                        prev = cur;
+                                }
+                        });
+                        return a;
+                })([]);
+
+                if (block_type == "lambda") statements = (function(i, a, stat){
+                        while (i < statements.length) {
+                                stat = statements[i++];
+                                if (stat[0] == "if" && !stat[3]) {
+                                        if (stat[2][0] == "return" && stat[2][1] == null) {
+                                                a.push(make_if(negate(stat[1]), [ "block", statements.slice(i) ]));
+                                                break;
+                                        }
+                                        var last = last_stat(stat[2]);
+                                        if (last[0] == "return" && last[1] == null) {
+                                                a.push(make_if(stat[1], [ "block", stat[2][1].slice(0, -1) ], [ "block", statements.slice(i) ]));
+                                                break;
+                                        }
+                                }
+                                a.push(stat);
+                        }
+                        return a;
+                })(0, []);
+
+                return statements;
+        };
+
+        function make_if(c, t, e) {
+                return when_constant(c, function(ast, val){
+                        if (val) {
+                                warn_unreachable(e);
+                                return t;
+                        } else {
+                                warn_unreachable(t);
+                                return e;
+                        }
+                }, function() {
+                        return make_real_if(c, t, e);
+                });
+        };
+
+        function make_real_if(c, t, e) {
+                c = walk(c);
+                t = walk(t);
+                e = walk(e);
+
+                if (empty(t)) {
+                        c = negate(c);
+                        t = e;
+                        e = null;
+                } else if (empty(e)) {
+                        e = null;
+                } else {
+                        // if we have both else and then, maybe it makes sense to switch them?
+                        (function(){
+                                var a = gen_code(c);
+                                var n = negate(c);
+                                var b = gen_code(n);
+                                if (b.length < a.length) {
+                                        var tmp = t;
+                                        t = e;
+                                        e = tmp;
+                                        c = n;
+                                }
+                        })();
+                }
+                if (empty(e) && empty(t))
+                        return [ "stat", c ];
+                var ret = [ "if", c, t, e ];
+                if (t[0] == "if" && empty(t[3]) && empty(e)) {
+                        ret = best_of(ret, walk([ "if", [ "binary", "&&", c, t[1] ], t[2] ]));
+                }
+                else if (t[0] == "stat") {
+                        if (e) {
+                                if (e[0] == "stat") {
+                                        ret = best_of(ret, [ "stat", make_conditional(c, t[1], e[1]) ]);
+                                }
+                        }
+                        else {
+                                ret = best_of(ret, [ "stat", make_conditional(c, t[1]) ]);
+                        }
+                }
+                else if (e && t[0] == e[0] && (t[0] == "return" || t[0] == "throw") && t[1] && e[1]) {
+                        ret = best_of(ret, [ t[0], make_conditional(c, t[1], e[1] ) ]);
+                }
+                else if (e && aborts(t)) {
+                        ret = [ [ "if", c, t ] ];
+                        if (e[0] == "block") {
+                                if (e[1]) ret = ret.concat(e[1]);
+                        }
+                        else {
+                                ret.push(e);
+                        }
+                        ret = walk([ "block", ret ]);
+                }
+                else if (t && aborts(e)) {
+                        ret = [ [ "if", negate(c), e ] ];
+                        if (t[0] == "block") {
+                                if (t[1]) ret = ret.concat(t[1]);
+                        } else {
+                                ret.push(t);
+                        }
+                        ret = walk([ "block", ret ]);
+                }
+                return ret;
+        };
+
+        function _do_while(cond, body) {
+                return when_constant(cond, function(cond, val){
+                        if (!val) {
+                                warn_unreachable(body);
+                                return [ "block" ];
+                        } else {
+                                return [ "for", null, null, null, walk(body) ];
+                        }
+                });
+        };
+
+        return w.with_walkers({
+                "sub": function(expr, subscript) {
+                        if (subscript[0] == "string") {
+                                var name = subscript[1];
+                                if (is_identifier(name))
+                                        return [ "dot", walk(expr), name ];
+                                else if (/^[1-9][0-9]*$/.test(name) || name === "0")
+                                        return [ "sub", walk(expr), [ "num", parseInt(name, 10) ] ];
+                        }
+                },
+                "if": make_if,
+                "toplevel": function(body) {
+                        return [ "toplevel", with_scope(this.scope, function(){
+                                return tighten(MAP(body, walk));
+                        }) ];
+                },
+                "switch": function(expr, body) {
+                        var last = body.length - 1;
+                        return [ "switch", walk(expr), MAP(body, function(branch, i){
+                                var block = tighten(MAP(branch[1], walk));
+                                if (i == last && block.length > 0) {
+                                        var node = block[block.length - 1];
+                                        if (node[0] == "break" && !node[1])
+                                                block.pop();
+                                }
+                                return [ branch[0] ? walk(branch[0]) : null, block ];
+                        }) ];
+                },
+                "function": function() {
+                        var ret = _lambda.apply(this, arguments);
+                        if (ret[1] && !HOP(scope.refs, ret[1])) {
+                                ret[1] = null;
+                        }
+                        return ret;
+                },
+                "defun": _lambda,
+                "block": function(body) {
+                        if (body) return rmblock([ "block", tighten(MAP(body, walk)) ]);
+                },
+                "binary": function(op, left, right) {
+                        return when_constant([ "binary", op, walk(left), walk(right) ], function yes(c){
+                                return best_of(walk(c), this);
+                        }, function no() {
+                                return this;
+                        });
+                },
+                "conditional": function(c, t, e) {
+                        return make_conditional(walk(c), walk(t), walk(e));
+                },
+                "try": function(t, c, f) {
+                        return [
+                                "try",
+                                tighten(MAP(t, walk)),
+                                c != null ? [ c[0], tighten(MAP(c[1], walk)) ] : null,
+                                f != null ? tighten(MAP(f, walk)) : null
+                        ];
+                },
+                "unary-prefix": function(op, expr) {
+                        expr = walk(expr);
+                        var ret = [ "unary-prefix", op, expr ];
+                        if (op == "!")
+                                ret = best_of(ret, negate(expr));
+                        return when_constant(ret, function(ast, val){
+                                return walk(ast); // it's either true or false, so minifies to !0 or !1
+                        }, function() { return ret });
+                },
+                "name": function(name) {
+                        switch (name) {
+                            case "true": return [ "unary-prefix", "!", [ "num", 0 ]];
+                            case "false": return [ "unary-prefix", "!", [ "num", 1 ]];
+                        }
+                },
+                "new": function(ctor, args) {
+                        if (ctor[0] == "name" && ctor[1] == "Array" && !scope.has("Array")) {
+                                if (args.length != 1) {
+                                        return [ "array", args ];
+                                } else {
+                                        return [ "call", [ "name", "Array" ], args ];
+                                }
+                        }
+                },
+                "call": function(expr, args) {
+                        if (expr[0] == "name" && expr[1] == "Array" && args.length != 1 && !scope.has("Array")) {
+                                return [ "array", args ];
+                        }
+                },
+                "while": _do_while,
+                "do": _do_while
+        }, function() {
+                return walk(ast_add_scope(ast));
+        });
+};
+
+/* -----[ re-generate code from the AST ]----- */
+
+var DOT_CALL_NO_PARENS = jsp.array_to_hash([
+        "name",
+        "array",
+        "object",
+        "string",
+        "dot",
+        "sub",
+        "call",
+        "regexp"
+]);
+
+function make_string(str, ascii_only) {
+        var dq = 0, sq = 0;
+        str = str.replace(/[\\\b\f\n\r\t\x22\x27]/g, function(s){
+                switch (s) {
+                    case "\\": return "\\\\";
+                    case "\b": return "\\b";
+                    case "\f": return "\\f";
+                    case "\n": return "\\n";
+                    case "\r": return "\\r";
+                    case "\t": return "\\t";
+                    case '"': ++dq; return '"';
+                    case "'": ++sq; return "'";
+                }
+                return s;
+        });
+        if (ascii_only) str = to_ascii(str);
+        if (dq > sq) return "'" + str.replace(/\x27/g, "\\'") + "'";
+        else return '"' + str.replace(/\x22/g, '\\"') + '"';
+};
+
+function to_ascii(str) {
+        return str.replace(/[\u0080-\uffff]/g, function(ch) {
+                var code = ch.charCodeAt(0).toString(16);
+                while (code.length < 4) code = "0" + code;
+                return "\\u" + code;
+        });
+};
+
+function gen_code(ast, options) {
+        options = defaults(options, {
+                indent_start : 0,
+                indent_level : 4,
+                quote_keys   : false,
+                space_colon  : false,
+                beautify     : false,
+                ascii_only   : false
+        });
+        var beautify = !!options.beautify;
+        var indentation = 0,
+            newline = beautify ? "\n" : "",
+            space = beautify ? " " : "";
+
+        function encode_string(str) {
+                return make_string(str, options.ascii_only);
+        };
+
+        function make_name(name) {
+                name = name.toString();
+                if (options.ascii_only)
+                        name = to_ascii(name);
+                return name;
+        };
+
+        function indent(line) {
+                if (line == null)
+                        line = "";
+                if (beautify)
+                        line = repeat_string(" ", options.indent_start + indentation * options.indent_level) + line;
+                return line;
+        };
+
+        function with_indent(cont, incr) {
+                if (incr == null) incr = 1;
+                indentation += incr;
+                try { return cont.apply(null, slice(arguments, 1)); }
+                finally { indentation -= incr; }
+        };
+
+        function add_spaces(a) {
+                if (beautify)
+                        return a.join(" ");
+                var b = [];
+                for (var i = 0; i < a.length; ++i) {
+                        var next = a[i + 1];
+                        b.push(a[i]);
+                        if (next &&
+                            ((/[a-z0-9_\x24]$/i.test(a[i].toString()) && /^[a-z0-9_\x24]/i.test(next.toString())) ||
+                             (/[\+\-]$/.test(a[i].toString()) && /^[\+\-]/.test(next.toString())))) {
+                                b.push(" ");
+                        }
+                }
+                return b.join("");
+        };
+
+        function add_commas(a) {
+                return a.join("," + space);
+        };
+
+        function parenthesize(expr) {
+                var gen = make(expr);
+                for (var i = 1; i < arguments.length; ++i) {
+                        var el = arguments[i];
+                        if ((el instanceof Function && el(expr)) || expr[0] == el)
+                                return "(" + gen + ")";
+                }
+                return gen;
+        };
+
+        function best_of(a) {
+                if (a.length == 1) {
+                        return a[0];
+                }
+                if (a.length == 2) {
+                        var b = a[1];
+                        a = a[0];
+                        return a.length <= b.length ? a : b;
+                }
+                return best_of([ a[0], best_of(a.slice(1)) ]);
+        };
+
+        function needs_parens(expr) {
+                if (expr[0] == "function" || expr[0] == "object") {
+                        // dot/call on a literal function requires the
+                        // function literal itself to be parenthesized
+                        // only if it's the first "thing" in a
+                        // statement.  This means that the parent is
+                        // "stat", but it could also be a "seq" and
+                        // we're the first in this "seq" and the
+                        // parent is "stat", and so on.  Messy stuff,
+                        // but it worths the trouble.
+                        var a = slice($stack), self = a.pop(), p = a.pop();
+                        while (p) {
+                                if (p[0] == "stat") return true;
+                                if (((p[0] == "seq" || p[0] == "call" || p[0] == "dot" || p[0] == "sub" || p[0] == "conditional") && p[1] === self) ||
+                                    ((p[0] == "binary" || p[0] == "assign" || p[0] == "unary-postfix") && p[2] === self)) {
+                                        self = p;
+                                        p = a.pop();
+                                } else {
+                                        return false;
+                                }
+                        }
+                }
+                return !HOP(DOT_CALL_NO_PARENS, expr[0]);
+        };
+
+        function make_num(num) {
+                var str = num.toString(10), a = [ str.replace(/^0\./, ".") ], m;
+                if (Math.floor(num) === num) {
+                        a.push("0x" + num.toString(16).toLowerCase(), // probably pointless
+                               "0" + num.toString(8)); // same.
+                        if ((m = /^(.*?)(0+)$/.exec(num))) {
+                                a.push(m[1] + "e" + m[2].length);
+                        }
+                } else if ((m = /^0?\.(0+)(.*)$/.exec(num))) {
+                        a.push(m[2] + "e-" + (m[1].length + m[2].length),
+                               str.substr(str.indexOf(".")));
+                }
+                return best_of(a);
+        };
+
+        var generators = {
+                "string": encode_string,
+                "num": make_num,
+                "name": make_name,
+                "toplevel": function(statements) {
+                        return make_block_statements(statements)
+                                .join(newline + newline);
+                },
+                "block": make_block,
+                "var": function(defs) {
+                        return "var " + add_commas(MAP(defs, make_1vardef)) + ";";
+                },
+                "const": function(defs) {
+                        return "const " + add_commas(MAP(defs, make_1vardef)) + ";";
+                },
+                "try": function(tr, ca, fi) {
+                        var out = [ "try", make_block(tr) ];
+                        if (ca) out.push("catch", "(" + ca[0] + ")", make_block(ca[1]));
+                        if (fi) out.push("finally", make_block(fi));
+                        return add_spaces(out);
+                },
+                "throw": function(expr) {
+                        return add_spaces([ "throw", make(expr) ]) + ";";
+                },
+                "new": function(ctor, args) {
+                        args = args.length > 0 ? "(" + add_commas(MAP(args, make)) + ")" : "";
+                        return add_spaces([ "new", parenthesize(ctor, "seq", "binary", "conditional", "assign", function(expr){
+                                var w = ast_walker(), has_call = {};
+                                try {
+                                        w.with_walkers({
+                                                "call": function() { throw has_call },
+                                                "function": function() { return this }
+                                        }, function(){
+                                                w.walk(expr);
+                                        });
+                                } catch(ex) {
+                                        if (ex === has_call)
+                                                return true;
+                                        throw ex;
+                                }
+                        }) + args ]);
+                },
+                "switch": function(expr, body) {
+                        return add_spaces([ "switch", "(" + make(expr) + ")", make_switch_block(body) ]);
+                },
+                "break": function(label) {
+                        var out = "break";
+                        if (label != null)
+                                out += " " + make_name(label);
+                        return out + ";";
+                },
+                "continue": function(label) {
+                        var out = "continue";
+                        if (label != null)
+                                out += " " + make_name(label);
+                        return out + ";";
+                },
+                "conditional": function(co, th, el) {
+                        return add_spaces([ parenthesize(co, "assign", "seq", "conditional"), "?",
+                                            parenthesize(th, "seq"), ":",
+                                            parenthesize(el, "seq") ]);
+                },
+                "assign": function(op, lvalue, rvalue) {
+                        if (op && op !== true) op += "=";
+                        else op = "=";
+                        return add_spaces([ make(lvalue), op, parenthesize(rvalue, "seq") ]);
+                },
+                "dot": function(expr) {
+                        var out = make(expr), i = 1;
+                        if (expr[0] == "num") {
+                                if (!/\./.test(expr[1]))
+                                        out += ".";
+                        } else if (needs_parens(expr))
+                                out = "(" + out + ")";
+                        while (i < arguments.length)
+                                out += "." + make_name(arguments[i++]);
+                        return out;
+                },
+                "call": function(func, args) {
+                        var f = make(func);
+                        if (needs_parens(func))
+                                f = "(" + f + ")";
+                        return f + "(" + add_commas(MAP(args, function(expr){
+                                return parenthesize(expr, "seq");
+                        })) + ")";
+                },
+                "function": make_function,
+                "defun": make_function,
+                "if": function(co, th, el) {
+                        var out = [ "if", "(" + make(co) + ")", el ? make_then(th) : make(th) ];
+                        if (el) {
+                                out.push("else", make(el));
+                        }
+                        return add_spaces(out);
+                },
+                "for": function(init, cond, step, block) {
+                        var out = [ "for" ];
+                        init = (init != null ? make(init) : "").replace(/;*\s*$/, ";" + space);
+                        cond = (cond != null ? make(cond) : "").replace(/;*\s*$/, ";" + space);
+                        step = (step != null ? make(step) : "").replace(/;*\s*$/, "");
+                        var args = init + cond + step;
+                        if (args == "; ; ") args = ";;";
+                        out.push("(" + args + ")", make(block));
+                        return add_spaces(out);
+                },
+                "for-in": function(vvar, key, hash, block) {
+                        return add_spaces([ "for", "(" +
+                                            (vvar ? make(vvar).replace(/;+$/, "") : make(key)),
+                                            "in",
+                                            make(hash) + ")", make(block) ]);
+                },
+                "while": function(condition, block) {
+                        return add_spaces([ "while", "(" + make(condition) + ")", make(block) ]);
+                },
+                "do": function(condition, block) {
+                        return add_spaces([ "do", make(block), "while", "(" + make(condition) + ")" ]) + ";";
+                },
+                "return": function(expr) {
+                        var out = [ "return" ];
+                        if (expr != null) out.push(make(expr));
+                        return add_spaces(out) + ";";
+                },
+                "binary": function(operator, lvalue, rvalue) {
+                        var left = make(lvalue), right = make(rvalue);
+                        // XXX: I'm pretty sure other cases will bite here.
+                        //      we need to be smarter.
+                        //      adding parens all the time is the safest bet.
+                        if (member(lvalue[0], [ "assign", "conditional", "seq" ]) ||
+                            lvalue[0] == "binary" && PRECEDENCE[operator] > PRECEDENCE[lvalue[1]]) {
+                                left = "(" + left + ")";
+                        }
+                        if (member(rvalue[0], [ "assign", "conditional", "seq" ]) ||
+                            rvalue[0] == "binary" && PRECEDENCE[operator] >= PRECEDENCE[rvalue[1]] &&
+                            !(rvalue[1] == operator && member(operator, [ "&&", "||", "*" ]))) {
+                                right = "(" + right + ")";
+                        }
+                        return add_spaces([ left, operator, right ]);
+                },
+                "unary-prefix": function(operator, expr) {
+                        var val = make(expr);
+                        if (!(expr[0] == "num" || (expr[0] == "unary-prefix" && !HOP(OPERATORS, operator + expr[1])) || !needs_parens(expr)))
+                                val = "(" + val + ")";
+                        return operator + (jsp.is_alphanumeric_char(operator.charAt(0)) ? " " : "") + val;
+                },
+                "unary-postfix": function(operator, expr) {
+                        var val = make(expr);
+                        if (!(expr[0] == "num" || (expr[0] == "unary-postfix" && !HOP(OPERATORS, operator + expr[1])) || !needs_parens(expr)))
+                                val = "(" + val + ")";
+                        return val + operator;
+                },
+                "sub": function(expr, subscript) {
+                        var hash = make(expr);
+                        if (needs_parens(expr))
+                                hash = "(" + hash + ")";
+                        return hash + "[" + make(subscript) + "]";
+                },
+                "object": function(props) {
+                        if (props.length == 0)
+                                return "{}";
+                        return "{" + newline + with_indent(function(){
+                                return MAP(props, function(p){
+                                        if (p.length == 3) {
+                                                // getter/setter.  The name is in p[0], the arg.list in p[1][2], the
+                                                // body in p[1][3] and type ("get" / "set") in p[2].
+                                                return indent(make_function(p[0], p[1][2], p[1][3], p[2]));
+                                        }
+                                        var key = p[0], val = make(p[1]);
+                                        if (options.quote_keys) {
+                                                key = encode_string(key);
+                                        } else if ((typeof key == "number" || !beautify && +key + "" == key)
+                                                   && parseFloat(key) >= 0) {
+                                                key = make_num(+key);
+                                        } else if (!is_identifier(key)) {
+                                                key = encode_string(key);
+                                        }
+                                        return indent(add_spaces(beautify && options.space_colon
+                                                                 ? [ key, ":", val ]
+                                                                 : [ key + ":", val ]));
+                                }).join("," + newline);
+                        }) + newline + indent("}");
+                },
+                "regexp": function(rx, mods) {
+                        return "/" + rx + "/" + mods;
+                },
+                "array": function(elements) {
+                        if (elements.length == 0) return "[]";
+                        return add_spaces([ "[", add_commas(MAP(elements, function(el){
+                                if (!beautify && el[0] == "atom" && el[1] == "undefined") return "";
+                                return parenthesize(el, "seq");
+                        })), "]" ]);
+                },
+                "stat": function(stmt) {
+                        return make(stmt).replace(/;*\s*$/, ";");
+                },
+                "seq": function() {
+                        return add_commas(MAP(slice(arguments), make));
+                },
+                "label": function(name, block) {
+                        return add_spaces([ make_name(name), ":", make(block) ]);
+                },
+                "with": function(expr, block) {
+                        return add_spaces([ "with", "(" + make(expr) + ")", make(block) ]);
+                },
+                "atom": function(name) {
+                        return make_name(name);
+                }
+        };
+
+        // The squeezer replaces "block"-s that contain only a single
+        // statement with the statement itself; technically, the AST
+        // is correct, but this can create problems when we output an
+        // IF having an ELSE clause where the THEN clause ends in an
+        // IF *without* an ELSE block (then the outer ELSE would refer
+        // to the inner IF).  This function checks for this case and
+        // adds the block brackets if needed.
+        function make_then(th) {
+                if (th[0] == "do") {
+                        // https://github.com/mishoo/UglifyJS/issues/#issue/57
+                        // IE croaks with "syntax error" on code like this:
+                        //     if (foo) do ... while(cond); else ...
+                        // we need block brackets around do/while
+                        return make([ "block", [ th ]]);
+                }
+                var b = th;
+                while (true) {
+                        var type = b[0];
+                        if (type == "if") {
+                                if (!b[3])
+                                        // no else, we must add the block
+                                        return make([ "block", [ th ]]);
+                                b = b[3];
+                        }
+                        else if (type == "while" || type == "do") b = b[2];
+                        else if (type == "for" || type == "for-in") b = b[4];
+                        else break;
+                }
+                return make(th);
+        };
+
+        function make_function(name, args, body, keyword) {
+                var out = keyword || "function";
+                if (name) {
+                        out += " " + make_name(name);
+                }
+                out += "(" + add_commas(MAP(args, make_name)) + ")";
+                return add_spaces([ out, make_block(body) ]);
+        };
+
+        function make_block_statements(statements) {
+                for (var a = [], last = statements.length - 1, i = 0; i <= last; ++i) {
+                        var stat = statements[i];
+                        var code = make(stat);
+                        if (code != ";") {
+                                if (!beautify && i == last) {
+                                        if ((stat[0] == "while" && empty(stat[2])) ||
+                                            (member(stat[0], [ "for", "for-in"] ) && empty(stat[4])) ||
+                                            (stat[0] == "if" && empty(stat[2]) && !stat[3]) ||
+                                            (stat[0] == "if" && stat[3] && empty(stat[3]))) {
+                                                code = code.replace(/;*\s*$/, ";");
+                                        } else {
+                                                code = code.replace(/;+\s*$/, "");
+                                        }
+                                }
+                                a.push(code);
+                        }
+                }
+                return MAP(a, indent);
+        };
+
+        function make_switch_block(body) {
+                var n = body.length;
+                if (n == 0) return "{}";
+                return "{" + newline + MAP(body, function(branch, i){
+                        var has_body = branch[1].length > 0, code = with_indent(function(){
+                                return indent(branch[0]
+                                              ? add_spaces([ "case", make(branch[0]) + ":" ])
+                                              : "default:");
+                        }, 0.5) + (has_body ? newline + with_indent(function(){
+                                return make_block_statements(branch[1]).join(newline);
+                        }) : "");
+                        if (!beautify && has_body && i < n - 1)
+                                code += ";";
+                        return code;
+                }).join(newline) + newline + indent("}");
+        };
+
+        function make_block(statements) {
+                if (!statements) return ";";
+                if (statements.length == 0) return "{}";
+                return "{" + newline + with_indent(function(){
+                        return make_block_statements(statements).join(newline);
+                }) + newline + indent("}");
+        };
+
+        function make_1vardef(def) {
+                var name = def[0], val = def[1];
+                if (val != null)
+                        name = add_spaces([ make_name(name), "=", make(val) ]);
+                return name;
+        };
+
+        var $stack = [];
+
+        function make(node) {
+                var type = node[0];
+                var gen = generators[type];
+                if (!gen)
+                        throw new Error("Can't find generator for \"" + type + "\"");
+                $stack.push(node);
+                var ret = gen.apply(type, node.slice(1));
+                $stack.pop();
+                return ret;
+        };
+
+        return make(ast);
+};
+
+function split_lines(code, max_line_length) {
+        var splits = [ 0 ];
+        jsp.parse(function(){
+                var next_token = jsp.tokenizer(code);
+                var last_split = 0;
+                var prev_token;
+                function current_length(tok) {
+                        return tok.pos - last_split;
+                };
+                function split_here(tok) {
+                        last_split = tok.pos;
+                        splits.push(last_split);
+                };
+                function custom(){
+                        var tok = next_token.apply(this, arguments);
+                        out: {
+                                if (prev_token) {
+                                        if (prev_token.type == "keyword") break out;
+                                }
+                                if (current_length(tok) > max_line_length) {
+                                        switch (tok.type) {
+                                            case "keyword":
+                                            case "atom":
+                                            case "name":
+                                            case "punc":
+                                                split_here(tok);
+                                                break out;
+                                        }
+                                }
+                        }
+                        prev_token = tok;
+                        return tok;
+                };
+                custom.context = function() {
+                        return next_token.context.apply(this, arguments);
+                };
+                return custom;
+        }());
+        return splits.map(function(pos, i){
+                return code.substring(pos, splits[i + 1] || code.length);
+        }).join("\n");
+};
+
+/* -----[ Utilities ]----- */
+
+function repeat_string(str, i) {
+        if (i <= 0) return "";
+        if (i == 1) return str;
+        var d = repeat_string(str, i >> 1);
+        d += d;
+        if (i & 1) d += str;
+        return d;
+};
+
+function defaults(args, defs) {
+        var ret = {};
+        if (args === true)
+                args = {};
+        for (var i in defs) if (HOP(defs, i)) {
+                ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];
+        }
+        return ret;
+};
+
+function is_identifier(name) {
+        return /^[a-z_$][a-z0-9_$]*$/i.test(name)
+                && name != "this"
+                && !HOP(jsp.KEYWORDS_ATOM, name)
+                && !HOP(jsp.RESERVED_WORDS, name)
+                && !HOP(jsp.KEYWORDS, name);
+};
+
+function HOP(obj, prop) {
+        return Object.prototype.hasOwnProperty.call(obj, prop);
+};
+
+// some utilities
+
+var MAP;
+
+(function(){
+        MAP = function(a, f, o) {
+                var ret = [];
+                for (var i = 0; i < a.length; ++i) {
+                        var val = f.call(o, a[i], i);
+                        if (val instanceof AtTop) ret.unshift(val.v);
+                        else ret.push(val);
+                }
+                return ret;
+        };
+        MAP.at_top = function(val) { return new AtTop(val) };
+        function AtTop(val) { this.v = val };
+})();
+
+/* -----[ Exports ]----- */
+
+exports.ast_walker = ast_walker;
+exports.ast_mangle = ast_mangle;
+exports.ast_squeeze = ast_squeeze;
+exports.gen_code = gen_code;
+exports.ast_add_scope = ast_add_scope;
+exports.set_logger = function(logger) { warn = logger };
+exports.make_string = make_string;
+exports.split_lines = split_lines;
+exports.MAP = MAP;
+
+// keep this last!
+exports.ast_squeeze_more = require("./squeeze-more").ast_squeeze_more;
Index: /Dev/trunk/d3/lib/uglifyjs/lib/squeeze-more.js
===================================================================
--- /Dev/trunk/d3/lib/uglifyjs/lib/squeeze-more.js	(revision 76)
+++ /Dev/trunk/d3/lib/uglifyjs/lib/squeeze-more.js	(revision 76)
@@ -0,0 +1,22 @@
+var jsp = require("./parse-js"),
+    pro = require("./process"),
+    slice = jsp.slice,
+    member = jsp.member,
+    PRECEDENCE = jsp.PRECEDENCE,
+    OPERATORS = jsp.OPERATORS;
+
+function ast_squeeze_more(ast) {
+        var w = pro.ast_walker(), walk = w.walk;
+        return w.with_walkers({
+                "call": function(expr, args) {
+                        if (expr[0] == "dot" && expr[2] == "toString" && args.length == 0) {
+                                // foo.toString()  ==>  foo+""
+                                return [ "binary", "+", expr[1], [ "string", "" ]];
+                        }
+                }
+        }, function() {
+                return walk(ast);
+        });
+};
+
+exports.ast_squeeze_more = ast_squeeze_more;
Index: /Dev/trunk/d3/lib/uglifyjs/package.json
===================================================================
--- /Dev/trunk/d3/lib/uglifyjs/package.json	(revision 76)
+++ /Dev/trunk/d3/lib/uglifyjs/package.json	(revision 76)
@@ -0,0 +1,6 @@
+{"name"    : "uglify-js",
+ "author"  : "Mihai Bazon - http://github.com/mishoo",
+ "version" : "0.0.1",
+ "main"    : "index.js",
+ "bin"     : { "uglifyjs" : "./bin/uglifyjs" },
+}
Index: /Dev/trunk/d3/src/behavior/behavior.js
===================================================================
--- /Dev/trunk/d3/src/behavior/behavior.js	(revision 76)
+++ /Dev/trunk/d3/src/behavior/behavior.js	(revision 76)
@@ -0,0 +1,1 @@
+d3.behavior = {};
Index: /Dev/trunk/d3/src/behavior/zoom.js
===================================================================
--- /Dev/trunk/d3/src/behavior/zoom.js	(revision 76)
+++ /Dev/trunk/d3/src/behavior/zoom.js	(revision 76)
@@ -0,0 +1,196 @@
+// TODO unbind zoom behavior?
+// TODO unbind listener?
+d3.behavior.zoom = function() {
+  var xyz = [0, 0, 0],
+      event = d3.dispatch("zoom");
+
+  function zoom() {
+    this
+        .on("mousedown.zoom", mousedown)
+        .on("mousewheel.zoom", mousewheel)
+        .on("DOMMouseScroll.zoom", dblclick)
+        .on("dblclick.zoom", dblclick)
+        .on("touchstart.zoom", touchstart);
+
+    d3.select(window)
+        .on("mousemove.zoom", d3_behavior_zoomMousemove)
+        .on("mouseup.zoom", d3_behavior_zoomMouseup)
+        .on("touchmove.zoom", d3_behavior_zoomTouchmove)
+        .on("touchend.zoom", d3_behavior_zoomTouchup);
+  }
+
+  // snapshot the local context for subsequent dispatch
+  function start() {
+    d3_behavior_zoomXyz = xyz;
+    d3_behavior_zoomDispatch = event.zoom.dispatch;
+    d3_behavior_zoomTarget = this;
+    d3_behavior_zoomArguments = arguments;
+  }
+
+  function mousedown() {
+    start.apply(this, arguments);
+    d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
+    d3.event.preventDefault();
+    window.focus();
+  }
+
+  // store starting mouse location
+  function mousewheel() {
+    start.apply(this, arguments);
+    if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
+    d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming);
+  }
+
+  function dblclick() {
+    start.apply(this, arguments);
+    var mouse = d3.svg.mouse(d3_behavior_zoomTarget);
+    d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse));
+  }
+
+  // doubletap detection
+  function touchstart() {
+    start.apply(this, arguments);
+    var touches = d3_behavior_zoomTouchup(),
+        touch,
+        now = Date.now();
+    if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) {
+      d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]);
+    }
+    d3_behavior_zoomLast = now;
+  }
+
+  zoom.on = function(type, listener) {
+    event[type].add(listener);
+    return zoom;
+  };
+
+  return zoom;
+};
+
+var d3_behavior_zoomDiv,
+    d3_behavior_zoomPanning,
+    d3_behavior_zoomZooming,
+    d3_behavior_zoomLocations = {}, // identifier -> location
+    d3_behavior_zoomLast = 0,
+    d3_behavior_zoomXyz,
+    d3_behavior_zoomDispatch,
+    d3_behavior_zoomTarget,
+    d3_behavior_zoomArguments;
+
+function d3_behavior_zoomLocation(point) {
+  return [
+    point[0] - d3_behavior_zoomXyz[0],
+    point[1] - d3_behavior_zoomXyz[1],
+    d3_behavior_zoomXyz[2]
+  ];
+}
+
+// detect the pixels that would be scrolled by this wheel event
+function d3_behavior_zoomDelta() {
+
+  // mousewheel events are totally broken!
+  // https://bugs.webkit.org/show_bug.cgi?id=40441
+  // not only that, but Chrome and Safari differ in re. to acceleration!
+  if (!d3_behavior_zoomDiv) {
+    d3_behavior_zoomDiv = d3.select("body").append("div")
+        .style("visibility", "hidden")
+        .style("top", 0)
+        .style("height", 0)
+        .style("width", 0)
+        .style("overflow-y", "scroll")
+      .append("div")
+        .style("height", "2000px")
+      .node().parentNode;
+  }
+
+  var e = d3.event, delta;
+  try {
+    d3_behavior_zoomDiv.scrollTop = 1000;
+    d3_behavior_zoomDiv.dispatchEvent(e);
+    delta = 1000 - d3_behavior_zoomDiv.scrollTop;
+  } catch (error) {
+    delta = e.wheelDelta || -e.detail;
+  }
+
+  return delta * .005;
+}
+
+// Note: Since we don't rotate, it's possible for the touches to become
+// slightly detached from their original positions. Thus, we recompute the
+// touch points on touchend as well as touchstart!
+function d3_behavior_zoomTouchup() {
+  var touches = d3.svg.touches(d3_behavior_zoomTarget),
+      i = -1,
+      n = touches.length,
+      touch;
+  while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch);
+  return touches;
+}
+
+function d3_behavior_zoomTouchmove() {
+  var touches = d3.svg.touches(d3_behavior_zoomTarget);
+  switch (touches.length) {
+
+    // single-touch pan
+    case 1: {
+      var touch = touches[0];
+      d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]);
+      break;
+    }
+
+    // double-touch pan + zoom
+    case 2: {
+      var p0 = touches[0],
+          p1 = touches[1],
+          p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2],
+          l0 = d3_behavior_zoomLocations[p0.identifier],
+          l1 = d3_behavior_zoomLocations[p1.identifier],
+          l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]];
+      d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2);
+      break;
+    }
+  }
+}
+
+function d3_behavior_zoomMousemove() {
+  d3_behavior_zoomZooming = null;
+  if (d3_behavior_zoomPanning) d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning);
+}
+
+function d3_behavior_zoomMouseup() {
+  if (d3_behavior_zoomPanning) {
+    d3_behavior_zoomMousemove();
+    d3_behavior_zoomPanning = null;
+  }
+}
+
+function d3_behavior_zoomTo(z, x0, x1) {
+  var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]),
+      x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0],
+      y = d3_behavior_zoomXyz[1] = x0[1] - K * x1[1],
+      o = d3.event, // Events can be reentrant (e.g., focus).
+      k = Math.pow(2, z);
+
+  d3.event = {
+    scale: k,
+    translate: [x, y],
+    transform: function(sx, sy) {
+      if (sx) transform(sx, x);
+      if (sy) transform(sy, y);
+    }
+  };
+
+  function transform(scale, o) {
+    var domain = scale.__domain || (scale.__domain = scale.domain()),
+        range = scale.range().map(function(v) { return (v - o) / k; });
+    scale.domain(domain).domain(range.map(scale.invert));
+  }
+
+  try {
+    d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments);
+  } finally {
+    d3.event = o;
+  }
+
+  o.preventDefault();
+}
Index: /Dev/trunk/d3/src/chart/box.js
===================================================================
--- /Dev/trunk/d3/src/chart/box.js	(revision 76)
+++ /Dev/trunk/d3/src/chart/box.js	(revision 76)
@@ -0,0 +1,297 @@
+// Inspired by http://informationandvisualization.de/blog/box-plot
+d3.chart.box = function() {
+  var width = 1,
+      height = 1,
+      duration = 0,
+      domain = null,
+      value = Number,
+      whiskers = d3_chart_boxWhiskers,
+      quartiles = d3_chart_boxQuartiles,
+      tickFormat = null;
+
+  // For each small multipleâŠ
+  function box(g) {
+    g.each(function(d, i) {
+      d = d.map(value).sort(d3.ascending);
+      var g = d3.select(this),
+          n = d.length,
+          min = d[0],
+          max = d[n - 1];
+
+      // Compute quartiles. Must return exactly 3 elements.
+      var quartileData = d.quartiles = quartiles(d);
+
+      // Compute whiskers. Must return exactly 2 elements, or null.
+      var whiskerIndices = whiskers && whiskers.call(this, d, i),
+          whiskerData = whiskerIndices && whiskerIndices.map(function(i) { return d[i]; });
+
+      // Compute outliers. If no whiskers are specified, all data are "outliers".
+      // We compute the outliers as indices, so that we can join across transitions!
+      var outlierIndices = whiskerIndices
+          ? d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n))
+          : d3.range(n);
+
+      // Compute the new x-scale.
+      var x1 = d3.scale.linear()
+          .domain(domain && domain.call(this, d, i) || [min, max])
+          .range([height, 0]);
+
+      // Retrieve the old x-scale, if this is an update.
+      var x0 = this.__chart__ || d3.scale.linear()
+          .domain([0, Infinity])
+          .range(x1.range());
+
+      // Stash the new scale.
+      this.__chart__ = x1;
+
+      // Note: the box, median, and box tick elements are fixed in number,
+      // so we only have to handle enter and update. In contrast, the outliers
+      // and other elements are variable, so we need to exit them! Variable
+      // elements also fade in and out.
+
+      // Update center line: the vertical line spanning the whiskers.
+      var center = g.selectAll("line.center")
+          .data(whiskerData ? [whiskerData] : []);
+
+      center.enter().insert("svg:line", "rect")
+          .attr("class", "center")
+          .attr("x1", width / 2)
+          .attr("y1", function(d) { return x0(d[0]); })
+          .attr("x2", width / 2)
+          .attr("y2", function(d) { return x0(d[1]); })
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .style("opacity", 1)
+          .attr("y1", function(d) { return x1(d[0]); })
+          .attr("y2", function(d) { return x1(d[1]); });
+
+      center.transition()
+          .duration(duration)
+          .style("opacity", 1)
+          .attr("y1", function(d) { return x1(d[0]); })
+          .attr("y2", function(d) { return x1(d[1]); });
+
+      center.exit().transition()
+          .duration(duration)
+          .style("opacity", 1e-6)
+          .attr("y1", function(d) { return x1(d[0]); })
+          .attr("y2", function(d) { return x1(d[1]); })
+          .remove();
+
+      // Update innerquartile box.
+      var box = g.selectAll("rect.box")
+          .data([quartileData]);
+
+      box.enter().append("svg:rect")
+          .attr("class", "box")
+          .attr("x", 0)
+          .attr("y", function(d) { return x0(d[2]); })
+          .attr("width", width)
+          .attr("height", function(d) { return x0(d[0]) - x0(d[2]); })
+        .transition()
+          .duration(duration)
+          .attr("y", function(d) { return x1(d[2]); })
+          .attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
+
+      box.transition()
+          .duration(duration)
+          .attr("y", function(d) { return x1(d[2]); })
+          .attr("height", function(d) { return x1(d[0]) - x1(d[2]); });
+
+      // Update median line.
+      var medianLine = g.selectAll("line.median")
+          .data([quartileData[1]]);
+
+      medianLine.enter().append("svg:line")
+          .attr("class", "median")
+          .attr("x1", 0)
+          .attr("y1", x0)
+          .attr("x2", width)
+          .attr("y2", x0)
+        .transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1);
+
+      medianLine.transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1);
+
+      // Update whiskers.
+      var whisker = g.selectAll("line.whisker")
+          .data(whiskerData || []);
+
+      whisker.enter().insert("svg:line", "circle, text")
+          .attr("class", "whisker")
+          .attr("x1", 0)
+          .attr("y1", x0)
+          .attr("x2", width)
+          .attr("y2", x0)
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1)
+          .style("opacity", 1);
+
+      whisker.transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1)
+          .style("opacity", 1);
+
+      whisker.exit().transition()
+          .duration(duration)
+          .attr("y1", x1)
+          .attr("y2", x1)
+          .style("opacity", 1e-6)
+          .remove();
+
+      // Update outliers.
+      var outlier = g.selectAll("circle.outlier")
+          .data(outlierIndices, Number);
+
+      outlier.enter().insert("svg:circle", "text")
+          .attr("class", "outlier")
+          .attr("r", 5)
+          .attr("cx", width / 2)
+          .attr("cy", function(i) { return x0(d[i]); })
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .attr("cy", function(i) { return x1(d[i]); })
+          .style("opacity", 1);
+
+      outlier.transition()
+          .duration(duration)
+          .attr("cy", function(i) { return x1(d[i]); })
+          .style("opacity", 1);
+
+      outlier.exit().transition()
+          .duration(duration)
+          .attr("cy", function(i) { return x1(d[i]); })
+          .style("opacity", 1e-6)
+          .remove();
+
+      // Compute the tick format.
+      var format = tickFormat || x1.tickFormat(8);
+
+      // Update box ticks.
+      var boxTick = g.selectAll("text.box")
+          .data(quartileData);
+
+      boxTick.enter().append("svg:text")
+          .attr("class", "box")
+          .attr("dy", ".3em")
+          .attr("dx", function(d, i) { return i & 1 ? 6 : -6 })
+          .attr("x", function(d, i) { return i & 1 ? width : 0 })
+          .attr("y", x0)
+          .attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; })
+          .text(format)
+        .transition()
+          .duration(duration)
+          .attr("y", x1);
+
+      boxTick.transition()
+          .duration(duration)
+          .text(format)
+          .attr("y", x1);
+
+      // Update whisker ticks. These are handled separately from the box
+      // ticks because they may or may not exist, and we want don't want
+      // to join box ticks pre-transition with whisker ticks post-.
+      var whiskerTick = g.selectAll("text.whisker")
+          .data(whiskerData || []);
+
+      whiskerTick.enter().append("svg:text")
+          .attr("class", "whisker")
+          .attr("dy", ".3em")
+          .attr("dx", 6)
+          .attr("x", width)
+          .attr("y", x0)
+          .text(format)
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .attr("y", x1)
+          .style("opacity", 1);
+
+      whiskerTick.transition()
+          .duration(duration)
+          .text(format)
+          .attr("y", x1)
+          .style("opacity", 1);
+
+      whiskerTick.exit().transition()
+          .duration(duration)
+          .attr("y", x1)
+          .style("opacity", 1e-6)
+          .remove();
+    });
+    d3.timer.flush();
+  }
+
+  box.width = function(x) {
+    if (!arguments.length) return width;
+    width = x;
+    return box;
+  };
+
+  box.height = function(x) {
+    if (!arguments.length) return height;
+    height = x;
+    return box;
+  };
+
+  box.tickFormat = function(x) {
+    if (!arguments.length) return tickFormat;
+    tickFormat = x;
+    return box;
+  };
+
+  box.duration = function(x) {
+    if (!arguments.length) return duration;
+    duration = x;
+    return box;
+  };
+
+  box.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x == null ? x : d3.functor(x);
+    return box;
+  };
+
+  box.value = function(x) {
+    if (!arguments.length) return value;
+    value = x;
+    return box;
+  };
+
+  box.whiskers = function(x) {
+    if (!arguments.length) return whiskers;
+    whiskers = x;
+    return box;
+  };
+
+  box.quartiles = function(x) {
+    if (!arguments.length) return quartiles;
+    quartiles = x;
+    return box;
+  };
+
+  return box;
+};
+
+function d3_chart_boxWhiskers(d) {
+  return [0, d.length - 1];
+}
+
+function d3_chart_boxQuartiles(d) {
+  return [
+    d3.quantile(d, .25),
+    d3.quantile(d, .5),
+    d3.quantile(d, .75)
+  ];
+}
Index: /Dev/trunk/d3/src/chart/bullet.js
===================================================================
--- /Dev/trunk/d3/src/chart/bullet.js	(revision 76)
+++ /Dev/trunk/d3/src/chart/bullet.js	(revision 76)
@@ -0,0 +1,237 @@
+// Chart design based on the recommendations of Stephen Few. Implementation
+// based on the work of Clint Ivy, Jamie Love, and Jason Davies.
+// http://projects.instantcognition.com/protovis/bulletchart/
+d3.chart.bullet = function() {
+  var orient = "left", // TODO top & bottom
+      reverse = false,
+      duration = 0,
+      ranges = d3_chart_bulletRanges,
+      markers = d3_chart_bulletMarkers,
+      measures = d3_chart_bulletMeasures,
+      width = 380,
+      height = 30,
+      tickFormat = null;
+
+  // For each small multipleâŠ
+  function bullet(g) {
+    g.each(function(d, i) {
+      var rangez = ranges.call(this, d, i).slice().sort(d3.descending),
+          markerz = markers.call(this, d, i).slice().sort(d3.descending),
+          measurez = measures.call(this, d, i).slice().sort(d3.descending),
+          g = d3.select(this);
+
+      // Compute the new x-scale.
+      var x1 = d3.scale.linear()
+          .domain([0, Math.max(rangez[0], markerz[0], measurez[0])])
+          .range(reverse ? [width, 0] : [0, width]);
+
+      // Retrieve the old x-scale, if this is an update.
+      var x0 = this.__chart__ || d3.scale.linear()
+          .domain([0, Infinity])
+          .range(x1.range());
+
+      // Stash the new scale.
+      this.__chart__ = x1;
+
+      // Derive width-scales from the x-scales.
+      var w0 = d3_chart_bulletWidth(x0),
+          w1 = d3_chart_bulletWidth(x1);
+
+      // Update the range rects.
+      var range = g.selectAll("rect.range")
+          .data(rangez);
+
+      range.enter().append("svg:rect")
+          .attr("class", function(d, i) { return "range s" + i; })
+          .attr("width", w0)
+          .attr("height", height)
+          .attr("x", reverse ? x0 : 0)
+        .transition()
+          .duration(duration)
+          .attr("width", w1)
+          .attr("x", reverse ? x1 : 0);
+
+      range.transition()
+          .duration(duration)
+          .attr("x", reverse ? x1 : 0)
+          .attr("width", w1)
+          .attr("height", height);
+
+      // Update the measure rects.
+      var measure = g.selectAll("rect.measure")
+          .data(measurez);
+
+      measure.enter().append("svg:rect")
+          .attr("class", function(d, i) { return "measure s" + i; })
+          .attr("width", w0)
+          .attr("height", height / 3)
+          .attr("x", reverse ? x0 : 0)
+          .attr("y", height / 3)
+        .transition()
+          .duration(duration)
+          .attr("width", w1)
+          .attr("x", reverse ? x1 : 0);
+
+      measure.transition()
+          .duration(duration)
+          .attr("width", w1)
+          .attr("height", height / 3)
+          .attr("x", reverse ? x1 : 0)
+          .attr("y", height / 3);
+
+      // Update the marker lines.
+      var marker = g.selectAll("line.marker")
+          .data(markerz);
+
+      marker.enter().append("svg:line")
+          .attr("class", "marker")
+          .attr("x1", x0)
+          .attr("x2", x0)
+          .attr("y1", height / 6)
+          .attr("y2", height * 5 / 6)
+        .transition()
+          .duration(duration)
+          .attr("x1", x1)
+          .attr("x2", x1);
+
+      marker.transition()
+          .duration(duration)
+          .attr("x1", x1)
+          .attr("x2", x1)
+          .attr("y1", height / 6)
+          .attr("y2", height * 5 / 6);
+
+      // Compute the tick format.
+      var format = tickFormat || x1.tickFormat(8);
+
+      // Update the tick groups.
+      var tick = g.selectAll("g.tick")
+          .data(x1.ticks(8), function(d) {
+            return this.textContent || format(d);
+          });
+
+      // Initialize the ticks with the old scale, x0.
+      var tickEnter = tick.enter().append("svg:g")
+          .attr("class", "tick")
+          .attr("transform", d3_chart_bulletTranslate(x0))
+          .style("opacity", 1e-6);
+
+      tickEnter.append("svg:line")
+          .attr("y1", height)
+          .attr("y2", height * 7 / 6);
+
+      tickEnter.append("svg:text")
+          .attr("text-anchor", "middle")
+          .attr("dy", "1em")
+          .attr("y", height * 7 / 6)
+          .text(format);
+
+      // Transition the entering ticks to the new scale, x1.
+      tickEnter.transition()
+          .duration(duration)
+          .attr("transform", d3_chart_bulletTranslate(x1))
+          .style("opacity", 1);
+
+      // Transition the updating ticks to the new scale, x1.
+      var tickUpdate = tick.transition()
+          .duration(duration)
+          .attr("transform", d3_chart_bulletTranslate(x1))
+          .style("opacity", 1);
+
+      tickUpdate.select("line")
+          .attr("y1", height)
+          .attr("y2", height * 7 / 6);
+
+      tickUpdate.select("text")
+          .attr("y", height * 7 / 6);
+
+      // Transition the exiting ticks to the new scale, x1.
+      tick.exit().transition()
+          .duration(duration)
+          .attr("transform", d3_chart_bulletTranslate(x1))
+          .style("opacity", 1e-6)
+          .remove();
+    });
+    d3.timer.flush();
+  }
+
+  // left, right, top, bottom
+  bullet.orient = function(x) {
+    if (!arguments.length) return orient;
+    orient = x;
+    reverse = orient == "right" || orient == "bottom";
+    return bullet;
+  };
+
+  // ranges (bad, satisfactory, good)
+  bullet.ranges = function(x) {
+    if (!arguments.length) return ranges;
+    ranges = x;
+    return bullet;
+  };
+
+  // markers (previous, goal)
+  bullet.markers = function(x) {
+    if (!arguments.length) return markers;
+    markers = x;
+    return bullet;
+  };
+
+  // measures (actual, forecast)
+  bullet.measures = function(x) {
+    if (!arguments.length) return measures;
+    measures = x;
+    return bullet;
+  };
+
+  bullet.width = function(x) {
+    if (!arguments.length) return width;
+    width = x;
+    return bullet;
+  };
+
+  bullet.height = function(x) {
+    if (!arguments.length) return height;
+    height = x;
+    return bullet;
+  };
+
+  bullet.tickFormat = function(x) {
+    if (!arguments.length) return tickFormat;
+    tickFormat = x;
+    return bullet;
+  };
+
+  bullet.duration = function(x) {
+    if (!arguments.length) return duration;
+    duration = x;
+    return bullet;
+  };
+
+  return bullet;
+};
+
+function d3_chart_bulletRanges(d) {
+  return d.ranges;
+}
+
+function d3_chart_bulletMarkers(d) {
+  return d.markers;
+}
+
+function d3_chart_bulletMeasures(d) {
+  return d.measures;
+}
+
+function d3_chart_bulletTranslate(x) {
+  return function(d) {
+    return "translate(" + x(d) + ",0)";
+  };
+}
+
+function d3_chart_bulletWidth(x) {
+  var x0 = x(0);
+  return function(d) {
+    return Math.abs(x(d) - x0);
+  };
+}
Index: /Dev/trunk/d3/src/chart/chart.js
===================================================================
--- /Dev/trunk/d3/src/chart/chart.js	(revision 76)
+++ /Dev/trunk/d3/src/chart/chart.js	(revision 76)
@@ -0,0 +1,1 @@
+d3.chart = {};
Index: /Dev/trunk/d3/src/chart/horizon.js
===================================================================
--- /Dev/trunk/d3/src/chart/horizon.js	(revision 76)
+++ /Dev/trunk/d3/src/chart/horizon.js	(revision 76)
@@ -0,0 +1,203 @@
+// Implements a horizon layout, which is a variation of a single-series
+// area chart where the area is folded into multiple bands. Color is used to
+// encode band, allowing the size of the chart to be reduced significantly
+// without impeding readability. This layout algorithm is based on the work of
+// J. Heer, N. Kong and M. Agrawala in "Sizing the Horizon: The Effects of Chart
+// Size and Layering on the Graphical Perception of Time Series Visualizations",
+// CHI 2009. http://hci.stanford.edu/publications/2009/heer-horizon-chi09.pdf
+d3.chart.horizon = function() {
+  var bands = 1, // between 1 and 5, typically
+      mode = "offset", // or mirror
+      interpolate = "linear", // or basis, monotone, step-before, etc.
+      x = d3_chart_horizonX,
+      y = d3_chart_horizonY,
+      w = 960,
+      h = 40,
+      duration = 0;
+
+  var color = d3.scale.linear()
+      .domain([-1, 0, 1])
+      .range(["#d62728", "#fff", "#1f77b4"]);
+
+  // For each small multipleâŠ
+  function horizon(g) {
+    g.each(function(d, i) {
+      var g = d3.select(this),
+          n = 2 * bands + 1,
+          xMin = Infinity,
+          xMax = -Infinity,
+          yMax = -Infinity,
+          x0, // old x-scale
+          y0, // old y-scale
+          id; // unique id for paths
+
+      // Compute x- and y-values along with extents.
+      var data = d.map(function(d, i) {
+        var xv = x.call(this, d, i),
+            yv = y.call(this, d, i);
+        if (xv < xMin) xMin = xv;
+        if (xv > xMax) xMax = xv;
+        if (-yv > yMax) yMax = -yv;
+        if (yv > yMax) yMax = yv;
+        return [xv, yv];
+      });
+
+      // Compute the new x- and y-scales.
+      var x1 = d3.scale.linear().domain([xMin, xMax]).range([0, w]),
+          y1 = d3.scale.linear().domain([0, yMax]).range([0, h * bands]);
+
+      // Retrieve the old scales, if this is an update.
+      if (this.__chart__) {
+        x0 = this.__chart__.x;
+        y0 = this.__chart__.y;
+        id = this.__chart__.id;
+      } else {
+        x0 = d3.scale.linear().domain([0, Infinity]).range(x1.range());
+        y0 = d3.scale.linear().domain([0, Infinity]).range(y1.range());
+        id = ++d3_chart_horizonId;
+      }
+
+      // We'll use a defs to store the area path and the clip path.
+      var defs = g.selectAll("defs")
+          .data([data]);
+
+      var defsEnter = defs.enter().append("svg:defs");
+
+      // The clip path is a simple rect.
+      defsEnter.append("svg:clipPath")
+          .attr("id", "d3_chart_horizon_clip" + id)
+        .append("svg:rect")
+          .attr("width", w)
+          .attr("height", h);
+
+      defs.select("rect").transition()
+          .duration(duration)
+          .attr("width", w)
+          .attr("height", h);
+
+      // The area path is rendered with our resuable d3.svg.area.
+      defsEnter.append("svg:path")
+          .attr("id", "d3_chart_horizon_path" + id)
+          .attr("d", d3_chart_horizonArea
+          .interpolate(interpolate)
+          .x(function(d) { return x0(d[0]); })
+          .y0(h * bands)
+          .y1(function(d) { return h * bands - y0(d[1]); }))
+        .transition()
+          .duration(duration)
+          .attr("d", d3_chart_horizonArea
+          .x(function(d) { return x1(d[0]); })
+          .y1(function(d) { return h * bands - y1(d[1]); }));
+
+      defs.select("path").transition()
+          .duration(duration)
+          .attr("d", d3_chart_horizonArea);
+
+      // We'll use a container to clip all horizon layers at once.
+      g.selectAll("g")
+          .data([null])
+        .enter().append("svg:g")
+          .attr("clip-path", "url(#d3_chart_horizon_clip" + id + ")");
+
+      // Define the transform function based on the mode.
+      var transform = mode == "offset"
+          ? function(d) { return "translate(0," + (d + (d < 0) - bands) * h + ")"; }
+          : function(d) { return (d < 0 ? "scale(1,-1)" : "") + "translate(0," + (d - bands) * h + ")"; };
+
+      // Instantiate each copy of the path with different transforms.
+      var u = g.select("g").selectAll("use")
+          .data(d3.range(-1, -bands - 1, -1).concat(d3.range(1, bands + 1)), Number);
+
+      // TODO don't fudge the enter transition
+      u.enter().append("svg:use")
+          .attr("xlink:href", "#d3_chart_horizon_path" + id)
+          .attr("transform", function(d) { return transform(d + (d > 0 ? 1 : -1)); })
+          .style("fill", color)
+        .transition()
+          .duration(duration)
+          .attr("transform", transform);
+
+      u.transition()
+          .duration(duration)
+          .attr("transform", transform)
+          .style("fill", color);
+
+      u.exit().transition()
+          .duration(duration)
+          .attr("transform", transform)
+          .remove();
+
+      // Stash the new scales.
+      this.__chart__ = {x: x1, y: y1, id: id};
+    });
+    d3.timer.flush();
+  }
+
+  horizon.duration = function(x) {
+    if (!arguments.length) return duration;
+    duration = +x;
+    return horizon;
+  };
+
+  horizon.bands = function(x) {
+    if (!arguments.length) return bands;
+    bands = +x;
+    color.domain([-bands, 0, bands]);
+    return horizon;
+  };
+
+  horizon.mode = function(x) {
+    if (!arguments.length) return mode;
+    mode = x + "";
+    return horizon;
+  };
+
+  horizon.colors = function(x) {
+    if (!arguments.length) return color.range();
+    color.range(x);
+    return horizon;
+  };
+
+  horizon.interpolate = function(x) {
+    if (!arguments.length) return interpolate;
+    interpolate = x + "";
+    return horizon;
+  };
+
+  horizon.x = function(z) {
+    if (!arguments.length) return x;
+    x = z;
+    return horizon;
+  };
+
+  horizon.y = function(z) {
+    if (!arguments.length) return y;
+    y = z;
+    return horizon;
+  };
+
+  horizon.width = function(x) {
+    if (!arguments.length) return w;
+    w = +x;
+    return horizon;
+  };
+
+  horizon.height = function(x) {
+    if (!arguments.length) return h;
+    h = +x;
+    return horizon;
+  };
+
+  return horizon;
+};
+
+var d3_chart_horizonArea = d3.svg.area(),
+    d3_chart_horizonId = 0;
+
+function d3_chart_horizonX(d) {
+  return d[0];
+}
+
+function d3_chart_horizonY(d) {
+  return d[1];
+}
Index: /Dev/trunk/d3/src/chart/qq.js
===================================================================
--- /Dev/trunk/d3/src/chart/qq.js	(revision 76)
+++ /Dev/trunk/d3/src/chart/qq.js	(revision 76)
@@ -0,0 +1,245 @@
+// Based on http://vis.stanford.edu/protovis/ex/qqplot.html
+d3.chart.qq = function() {
+  var width = 1,
+      height = 1,
+      duration = 0,
+      domain = null,
+      tickFormat = null,
+      n = 100,
+      x = d3_chart_qqX,
+      y = d3_chart_qqY;
+
+  // For each small multipleâŠ
+  function qq(g) {
+    g.each(function(d, i) {
+      var g = d3.select(this),
+          qx = d3_chart_qqQuantiles(n, x.call(this, d, i)),
+          qy = d3_chart_qqQuantiles(n, y.call(this, d, i)),
+          xd = domain && domain.call(this, d, i) || [d3.min(qx), d3.max(qx)], // new x-domain
+          yd = domain && domain.call(this, d, i) || [d3.min(qy), d3.max(qy)], // new y-domain
+          x0, // old x-scale
+          y0; // old y-scale
+
+      // Compute the new x-scale.
+      var x1 = d3.scale.linear()
+          .domain(xd)
+          .range([0, width]);
+
+      // Compute the new y-scale.
+      var y1 = d3.scale.linear()
+          .domain(yd)
+          .range([height, 0]);
+
+      // Retrieve the old scales, if this is an update.
+      if (this.__chart__) {
+        x0 = this.__chart__.x;
+        y0 = this.__chart__.y;
+      } else {
+        x0 = d3.scale.linear().domain([0, Infinity]).range(x1.range());
+        y0 = d3.scale.linear().domain([0, Infinity]).range(y1.range());
+      }
+
+      // Stash the new scales.
+      this.__chart__ = {x: x1, y: y1};
+
+      // Update diagonal line.
+      var diagonal = g.selectAll("line.diagonal")
+          .data([null]);
+
+      diagonal.enter().append("svg:line")
+          .attr("class", "diagonal")
+          .attr("x1", x1(yd[0]))
+          .attr("y1", y1(xd[0]))
+          .attr("x2", x1(yd[1]))
+          .attr("y2", y1(xd[1]));
+
+      diagonal.transition()
+          .duration(duration)
+          .attr("x1", x1(yd[0]))
+          .attr("y1", y1(xd[0]))
+          .attr("x2", x1(yd[1]))
+          .attr("y2", y1(xd[1]));
+
+      // Update quantile plots.
+      var circle = g.selectAll("circle")
+          .data(d3.range(n).map(function(i) {
+            return {x: qx[i], y: qy[i]};
+          }));
+
+      circle.enter().append("svg:circle")
+          .attr("class", "quantile")
+          .attr("r", 4.5)
+          .attr("cx", function(d) { return x0(d.x); })
+          .attr("cy", function(d) { return y0(d.y); })
+          .style("opacity", 1e-6)
+        .transition()
+          .duration(duration)
+          .attr("cx", function(d) { return x1(d.x); })
+          .attr("cy", function(d) { return y1(d.y); })
+          .style("opacity", 1);
+
+      circle.transition()
+          .duration(duration)
+          .attr("cx", function(d) { return x1(d.x); })
+          .attr("cy", function(d) { return y1(d.y); })
+          .style("opacity", 1);
+
+      circle.exit().transition()
+          .duration(duration)
+          .attr("cx", function(d) { return x1(d.x); })
+          .attr("cy", function(d) { return y1(d.y); })
+          .style("opacity", 1e-6)
+          .remove();
+
+      var xformat = tickFormat || x1.tickFormat(4),
+          yformat = tickFormat || y1.tickFormat(4),
+          tx = function(d) { return "translate(" + x1(d) + "," + height + ")"; },
+          ty = function(d) { return "translate(0," + y1(d) + ")"; };
+
+      // Update x-ticks.
+      var xtick = g.selectAll("g.x.tick")
+          .data(x1.ticks(4), function(d) {
+            return this.textContent || xformat(d);
+          });
+
+      var xtickEnter = xtick.enter().append("svg:g")
+          .attr("class", "x tick")
+          .attr("transform", function(d) { return "translate(" + x0(d) + "," + height + ")"; })
+          .style("opacity", 1e-6);
+
+      xtickEnter.append("svg:line")
+          .attr("y1", 0)
+          .attr("y2", -6);
+
+      xtickEnter.append("svg:text")
+          .attr("text-anchor", "middle")
+          .attr("dy", "1em")
+          .text(xformat);
+
+      // Transition the entering ticks to the new scale, x1.
+      xtickEnter.transition()
+          .duration(duration)
+          .attr("transform", tx)
+          .style("opacity", 1);
+
+      // Transition the updating ticks to the new scale, x1.
+      xtick.transition()
+          .duration(duration)
+          .attr("transform", tx)
+          .style("opacity", 1);
+
+      // Transition the exiting ticks to the new scale, x1.
+      xtick.exit().transition()
+          .duration(duration)
+          .attr("transform", tx)
+          .style("opacity", 1e-6)
+          .remove();
+
+      // Update ticks.
+      var ytick = g.selectAll("g.y.tick")
+          .data(y1.ticks(4), function(d) {
+            return this.textContent || yformat(d);
+          });
+
+      var ytickEnter = ytick.enter().append("svg:g")
+          .attr("class", "y tick")
+          .attr("transform", function(d) { return "translate(0," + y0(d) + ")"; })
+          .style("opacity", 1e-6);
+
+      ytickEnter.append("svg:line")
+          .attr("x1", 0)
+          .attr("x2", 6);
+
+      ytickEnter.append("svg:text")
+          .attr("text-anchor", "end")
+          .attr("dx", "-.5em")
+          .attr("dy", ".3em")
+          .text(yformat);
+
+      // Transition the entering ticks to the new scale, y1.
+      ytickEnter.transition()
+          .duration(duration)
+          .attr("transform", ty)
+          .style("opacity", 1);
+
+      // Transition the updating ticks to the new scale, y1.
+      ytick.transition()
+          .duration(duration)
+          .attr("transform", ty)
+          .style("opacity", 1);
+
+      // Transition the exiting ticks to the new scale, y1.
+      ytick.exit().transition()
+          .duration(duration)
+          .attr("transform", ty)
+          .style("opacity", 1e-6)
+          .remove();
+    });
+  }
+
+  qq.width = function(x) {
+    if (!arguments.length) return width;
+    width = x;
+    return qq;
+  };
+
+  qq.height = function(x) {
+    if (!arguments.length) return height;
+    height = x;
+    return qq;
+  };
+
+  qq.duration = function(x) {
+    if (!arguments.length) return duration;
+    duration = x;
+    return qq;
+  };
+
+  qq.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x == null ? x : d3.functor(x);
+    return qq;
+  };
+
+  qq.count = function(z) {
+    if (!arguments.length) return n;
+    n = z;
+    return qq;
+  };
+
+  qq.x = function(z) {
+    if (!arguments.length) return x;
+    x = z;
+    return qq;
+  };
+
+  qq.y = function(z) {
+    if (!arguments.length) return y;
+    y = z;
+    return qq;
+  };
+
+  qq.tickFormat = function(x) {
+    if (!arguments.length) return tickFormat;
+    tickFormat = x;
+    return qq;
+  };
+
+  return qq;
+};
+
+function d3_chart_qqQuantiles(n, values) {
+  var m = values.length - 1;
+  values = values.slice().sort(d3.ascending);
+  return d3.range(n).map(function(i) {
+    return values[~~(i * m / n)];
+  });
+}
+
+function d3_chart_qqX(d) {
+  return d.x;
+}
+
+function d3_chart_qqY(d) {
+  return d.y;
+}
Index: /Dev/trunk/d3/src/core/array.js
===================================================================
--- /Dev/trunk/d3/src/core/array.js	(revision 76)
+++ /Dev/trunk/d3/src/core/array.js	(revision 76)
@@ -0,0 +1,17 @@
+var d3_array = d3_arraySlice; // conversion for NodeLists
+
+function d3_arrayCopy(psuedoarray) {
+  var i = -1, n = psuedoarray.length, array = [];
+  while (++i < n) array.push(psuedoarray[i]);
+  return array;
+}
+
+function d3_arraySlice(psuedoarray) {
+  return Array.prototype.slice.call(psuedoarray);
+}
+
+try {
+  d3_array(document.documentElement.childNodes)[0].nodeType;
+} catch(e) {
+  d3_array = d3_arrayCopy;
+}
Index: /Dev/trunk/d3/src/core/ascending.js
===================================================================
--- /Dev/trunk/d3/src/core/ascending.js	(revision 76)
+++ /Dev/trunk/d3/src/core/ascending.js	(revision 76)
@@ -0,0 +1,3 @@
+d3.ascending = function(a, b) {
+  return a < b ? -1 : a > b ? 1 : 0;
+};
Index: /Dev/trunk/d3/src/core/bisect.js
===================================================================
--- /Dev/trunk/d3/src/core/bisect.js	(revision 76)
+++ /Dev/trunk/d3/src/core/bisect.js	(revision 76)
@@ -0,0 +1,38 @@
+// Locate the insertion point for x in a to maintain sorted order. The
+// arguments lo and hi may be used to specify a subset of the array which should
+// be considered; by default the entire array is used. If x is already present
+// in a, the insertion point will be before (to the left of) any existing
+// entries. The return value is suitable for use as the first argument to
+// `array.splice` assuming that a is already sorted.
+//
+// The returned insertion point i partitions the array a into two halves so that
+// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi]
+// for the right side.
+d3.bisectLeft = function(a, x, lo, hi) {
+  if (arguments.length < 3) lo = 0;
+  if (arguments.length < 4) hi = a.length;
+  while (lo < hi) {
+    var mid = (lo + hi) >> 1;
+    if (a[mid] < x) lo = mid + 1;
+    else hi = mid;
+  }
+  return lo;
+};
+
+// Similar to bisectLeft, but returns an insertion point which comes after (to
+// the right of) any existing entries of x in a.
+//
+// The returned insertion point i partitions the array into two halves so that
+// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi]
+// for the right side.
+d3.bisect =
+d3.bisectRight = function(a, x, lo, hi) {
+  if (arguments.length < 3) lo = 0;
+  if (arguments.length < 4) hi = a.length;
+  while (lo < hi) {
+    var mid = (lo + hi) >> 1;
+    if (x < a[mid]) hi = mid;
+    else lo = mid + 1;
+  }
+  return lo;
+};
Index: /Dev/trunk/d3/src/core/call.js
===================================================================
--- /Dev/trunk/d3/src/core/call.js	(revision 76)
+++ /Dev/trunk/d3/src/core/call.js	(revision 76)
@@ -0,0 +1,13 @@
+//
+// Note: assigning to the arguments array simultaneously changes the value of
+// the corresponding argument!
+//
+// TODO The `this` argument probably shouldn't be the first argument to the
+// callback, anyway, since it's redundant. However, that will require a major
+// version bump due to backwards compatibility, so I'm not changing it right
+// away.
+//
+function d3_call(callback) {
+  callback.apply(this, (arguments[0] = this, arguments));
+  return this;
+}
Index: /Dev/trunk/d3/src/core/collapse.js
===================================================================
--- /Dev/trunk/d3/src/core/collapse.js	(revision 76)
+++ /Dev/trunk/d3/src/core/collapse.js	(revision 76)
@@ -0,0 +1,3 @@
+function d3_collapse(s) {
+  return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " ");
+}
Index: /Dev/trunk/d3/src/core/core.js
===================================================================
--- /Dev/trunk/d3/src/core/core.js	(revision 76)
+++ /Dev/trunk/d3/src/core/core.js	(revision 76)
@@ -0,0 +1,1 @@
+d3 = {version: "1.29.1"}; // semver
Index: /Dev/trunk/d3/src/core/date.js
===================================================================
--- /Dev/trunk/d3/src/core/date.js	(revision 76)
+++ /Dev/trunk/d3/src/core/date.js	(revision 76)
@@ -0,0 +1,3 @@
+if (!Date.now) Date.now = function() {
+  return +new Date;
+};
Index: /Dev/trunk/d3/src/core/descending.js
===================================================================
--- /Dev/trunk/d3/src/core/descending.js	(revision 76)
+++ /Dev/trunk/d3/src/core/descending.js	(revision 76)
@@ -0,0 +1,3 @@
+d3.descending = function(a, b) {
+  return b < a ? -1 : b > a ? 1 : 0;
+};
Index: /Dev/trunk/d3/src/core/dispatch.js
===================================================================
--- /Dev/trunk/d3/src/core/dispatch.js	(revision 76)
+++ /Dev/trunk/d3/src/core/dispatch.js	(revision 76)
@@ -0,0 +1,45 @@
+/** @param {...string} types */
+d3.dispatch = function(types) {
+  var dispatch = {},
+      type;
+  for (var i = 0, n = arguments.length; i < n; i++) {
+    type = arguments[i];
+    dispatch[type] = d3_dispatch(type);
+  }
+  return dispatch;
+};
+
+function d3_dispatch(type) {
+  var dispatch = {},
+      listeners = [];
+
+  dispatch.add = function(listener) {
+    for (var i = 0; i < listeners.length; i++) {
+      if (listeners[i].listener == listener) return dispatch; // already registered
+    }
+    listeners.push({listener: listener, on: true});
+    return dispatch;
+  };
+
+  dispatch.remove = function(listener) {
+    for (var i = 0; i < listeners.length; i++) {
+      var l = listeners[i];
+      if (l.listener == listener) {
+        l.on = false;
+        listeners = listeners.slice(0, i).concat(listeners.slice(i + 1));
+        break;
+      }
+    }
+    return dispatch;
+  };
+
+  dispatch.dispatch = function() {
+    var ls = listeners; // defensive reference
+    for (var i = 0, n = ls.length; i < n; i++) {
+      var l = ls[i];
+      if (l.on) l.listener.apply(this, arguments);
+    }
+  };
+
+  return dispatch;
+};
Index: /Dev/trunk/d3/src/core/ease.js
===================================================================
--- /Dev/trunk/d3/src/core/ease.js	(revision 76)
+++ /Dev/trunk/d3/src/core/ease.js	(revision 76)
@@ -0,0 +1,122 @@
+/*
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice, this
+ *   list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the author nor the names of contributors may be used to
+ *   endorse or promote products derived from this software without specific
+ *   prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var d3_ease_quad = d3_ease_poly(2),
+    d3_ease_cubic = d3_ease_poly(3);
+
+var d3_ease = {
+  linear: function() { return d3_ease_linear; },
+  poly: d3_ease_poly,
+  quad: function() { return d3_ease_quad; },
+  cubic: function() { return d3_ease_cubic; },
+  sin: function() { return d3_ease_sin; },
+  exp: function() { return d3_ease_exp; },
+  circle: function() { return d3_ease_circle; },
+  elastic: d3_ease_elastic,
+  back: d3_ease_back,
+  bounce: function() { return d3_ease_bounce; }
+};
+
+var d3_ease_mode = {
+  "in": function(f) { return f; },
+  "out": d3_ease_reverse,
+  "in-out": d3_ease_reflect,
+  "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); }
+};
+
+d3.ease = function(name) {
+  var i = name.indexOf("-"),
+      t = i >= 0 ? name.substring(0, i) : name,
+      m = i >= 0 ? name.substring(i + 1) : "in";
+  return d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1)));
+};
+
+function d3_ease_reverse(f) {
+  return function(t) {
+    return 1 - f(1 - t);
+  };
+}
+
+function d3_ease_reflect(f) {
+  return function(t) {
+    return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t)));
+  };
+}
+
+function d3_ease_linear(t) {
+  return t;
+}
+
+function d3_ease_poly(e) {
+  return function(t) {
+    return Math.pow(t, e);
+  }
+}
+
+function d3_ease_sin(t) {
+  return 1 - Math.cos(t * Math.PI / 2);
+}
+
+function d3_ease_exp(t) {
+  return t ? Math.pow(2, 10 * (t - 1)) - 1e-3 : 0;
+}
+
+function d3_ease_circle(t) {
+  return 1 - Math.sqrt(1 - t * t);
+}
+
+function d3_ease_elastic(a, p) {
+  var s;
+  if (arguments.length < 2) p = 0.45;
+  if (arguments.length < 1) { a = 1; s = p / 4; }
+  else s = p / (2 * Math.PI) * Math.asin(1 / a);
+  return function(t) {
+    return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p);
+  };
+}
+
+function d3_ease_back(s) {
+  if (!s) s = 1.70158;
+  return function(t) {
+    return t * t * ((s + 1) * t - s);
+  };
+}
+
+function d3_ease_bounce(t) {
+  return t < 1 / 2.75 ? 7.5625 * t * t
+      : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75
+      : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375
+      : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
+}
Index: /Dev/trunk/d3/src/core/entries.js
===================================================================
--- /Dev/trunk/d3/src/core/entries.js	(revision 76)
+++ /Dev/trunk/d3/src/core/entries.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.entries = function(map) {
+  var entries = [];
+  for (var key in map) entries.push({key: key, value: map[key]});
+  return entries;
+};
Index: /Dev/trunk/d3/src/core/event.js
===================================================================
--- /Dev/trunk/d3/src/core/event.js	(revision 76)
+++ /Dev/trunk/d3/src/core/event.js	(revision 76)
@@ -0,0 +1,1 @@
+d3.event = null;
Index: /Dev/trunk/d3/src/core/first.js
===================================================================
--- /Dev/trunk/d3/src/core/first.js	(revision 76)
+++ /Dev/trunk/d3/src/core/first.js	(revision 76)
@@ -0,0 +1,13 @@
+d3.first = function(array, f) {
+  var i = 0,
+      n = array.length,
+      a = array[0],
+      b;
+  if (arguments.length === 1) f = d3.ascending;
+  while (++i < n) {
+    if (f.call(array, a, b = array[i]) > 0) {
+      a = b;
+    }
+  }
+  return a;
+};
Index: /Dev/trunk/d3/src/core/format.js
===================================================================
--- /Dev/trunk/d3/src/core/format.js	(revision 76)
+++ /Dev/trunk/d3/src/core/format.js	(revision 76)
@@ -0,0 +1,85 @@
+// TODO align
+d3.format = function(specifier) {
+  var match = d3_format_re.exec(specifier),
+      fill = match[1] || " ",
+      sign = match[3] || "",
+      zfill = match[5],
+      width = +match[6],
+      comma = match[7],
+      precision = match[8],
+      type = match[9],
+      percentage = false,
+      integer = false;
+
+  if (precision) precision = precision.substring(1);
+
+  if (zfill) {
+    fill = "0"; // TODO align = "=";
+    if (comma) width -= Math.floor((width - 1) / 4);
+  }
+
+  switch (type) {
+    case "n": comma = true; type = "g"; break;
+    case "%": percentage = true; type = "f"; break;
+    case "p": percentage = true; type = "r"; break;
+    case "d": integer = true; precision = "0"; break;
+  }
+
+  type = d3_format_types[type] || d3_format_typeDefault;
+
+  return function(value) {
+    var number = percentage ? value * 100 : +value,
+        negative = (number < 0) && (number = -number) ? "\u2212" : sign;
+
+    // Return the empty string for floats formatted as ints.
+    if (integer && (number % 1)) return "";
+
+    // Convert the input value to the desired precision.
+    value = type(number, precision);
+
+    // If the fill character is 0, the sign and group is applied after the fill.
+    if (zfill) {
+      var length = value.length + negative.length;
+      if (length < width) value = new Array(width - length + 1).join(fill) + value;
+      if (comma) value = d3_format_group(value);
+      value = negative + value;
+    }
+
+    // Otherwise (e.g., space-filling), the sign and group is applied before.
+    else {
+      if (comma) value = d3_format_group(value);
+      value = negative + value;
+      var length = value.length;
+      if (length < width) value = new Array(width - length + 1).join(fill) + value;
+    }
+    if (percentage) value += "%";
+
+    return value;
+  };
+};
+
+// [[fill]align][sign][#][0][width][,][.precision][type]
+var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
+
+var d3_format_types = {
+  g: function(x, p) { return x.toPrecision(p); },
+  e: function(x, p) { return x.toExponential(p); },
+  f: function(x, p) { return x.toFixed(p); },
+  r: function(x, p) {
+    var n = 1 + Math.floor(1e-15 + Math.log(x) / Math.LN10);
+    return d3.round(x, p - n).toFixed(Math.max(0, p - n));
+  }
+};
+
+function d3_format_typeDefault(x) {
+  return x + "";
+}
+
+// Apply comma grouping for thousands.
+function d3_format_group(value) {
+  var i = value.lastIndexOf("."),
+      f = i >= 0 ? value.substring(i) : (i = value.length, ""),
+      t = [];
+  while (i > 0) t.push(value.substring(i -= 3, i + 3));
+  return t.reverse().join(",") + f;
+}
Index: /Dev/trunk/d3/src/core/functor.js
===================================================================
--- /Dev/trunk/d3/src/core/functor.js	(revision 76)
+++ /Dev/trunk/d3/src/core/functor.js	(revision 76)
@@ -0,0 +1,3 @@
+d3.functor = function(v) {
+  return typeof v === "function" ? v : function() { return v; };
+};
Index: /Dev/trunk/d3/src/core/hsl.js
===================================================================
--- /Dev/trunk/d3/src/core/hsl.js	(revision 76)
+++ /Dev/trunk/d3/src/core/hsl.js	(revision 76)
@@ -0,0 +1,62 @@
+d3.hsl = function(h, s, l) {
+  return arguments.length === 1
+      ? d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)
+      : d3_hsl(+h, +s, +l);
+};
+
+function d3_hsl(h, s, l) {
+  return new d3_Hsl(h, s, l);
+}
+
+function d3_Hsl(h, s, l) {
+  this.h = h;
+  this.s = s;
+  this.l = l;
+}
+
+d3_Hsl.prototype.brighter = function(k) {
+  k = Math.pow(0.7, arguments.length ? k : 1);
+  return d3_hsl(this.h, this.s, this.l / k);
+};
+
+d3_Hsl.prototype.darker = function(k) {
+  k = Math.pow(0.7, arguments.length ? k : 1);
+  return d3_hsl(this.h, this.s, k * this.l);
+};
+
+d3_Hsl.prototype.rgb = function() {
+  return d3_hsl_rgb(this.h, this.s, this.l);
+};
+
+d3_Hsl.prototype.toString = function() {
+  return "hsl(" + this.h + "," + this.s * 100 + "%," + this.l * 100 + "%)";
+};
+
+function d3_hsl_rgb(h, s, l) {
+  var m1,
+      m2;
+
+  /* Some simple corrections for h, s and l. */
+  h = h % 360; if (h < 0) h += 360;
+  s = s < 0 ? 0 : s > 1 ? 1 : s;
+  l = l < 0 ? 0 : l > 1 ? 1 : l;
+
+  /* From FvD 13.37, CSS Color Module Level 3 */
+  m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
+  m1 = 2 * l - m2;
+
+  function v(h) {
+    if (h > 360) h -= 360;
+    else if (h < 0) h += 360;
+    if (h < 60) return m1 + (m2 - m1) * h / 60;
+    if (h < 180) return m2;
+    if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
+    return m1;
+  }
+
+  function vv(h) {
+    return Math.round(v(h) * 255);
+  }
+
+  return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
+}
Index: /Dev/trunk/d3/src/core/html.js
===================================================================
--- /Dev/trunk/d3/src/core/html.js	(revision 76)
+++ /Dev/trunk/d3/src/core/html.js	(revision 76)
@@ -0,0 +1,10 @@
+d3.html = function(url, callback) {
+  d3.text(url, "text/html", function(text) {
+    if (text != null) { // Treat empty string as valid HTML.
+      var range = document.createRange();
+      range.selectNode(document.body);
+      text = range.createContextualFragment(text);
+    }
+    callback(text);
+  });
+};
Index: /Dev/trunk/d3/src/core/interpolate.js
===================================================================
--- /Dev/trunk/d3/src/core/interpolate.js	(revision 76)
+++ /Dev/trunk/d3/src/core/interpolate.js	(revision 76)
@@ -0,0 +1,180 @@
+d3.interpolate = function(a, b) {
+  var i = d3.interpolators.length, f;
+  while (--i >= 0 && !(f = d3.interpolators[i](a, b)));
+  return f;
+};
+
+d3.interpolateNumber = function(a, b) {
+  b -= a;
+  return function(t) { return a + b * t; };
+};
+
+d3.interpolateRound = function(a, b) {
+  b -= a;
+  return function(t) { return Math.round(a + b * t); };
+};
+
+d3.interpolateString = function(a, b) {
+  var m, // current match
+      i, // current index
+      j, // current index (for coallescing)
+      s0 = 0, // start index of current string prefix
+      s1 = 0, // end index of current string prefix
+      s = [], // string constants and placeholders
+      q = [], // number interpolators
+      n, // q.length
+      o;
+
+  // Reset our regular expression!
+  d3_interpolate_number.lastIndex = 0;
+
+  // Find all numbers in b.
+  for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
+    if (m.index) s.push(b.substring(s0, s1 = m.index));
+    q.push({i: s.length, x: m[0]});
+    s.push(null);
+    s0 = d3_interpolate_number.lastIndex;
+  }
+  if (s0 < b.length) s.push(b.substring(s0));
+
+  // Find all numbers in a.
+  for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
+    o = q[i];
+    if (o.x == m[0]) { // The numbers match, so coallesce.
+      if (o.i) {
+        if (s[o.i + 1] == null) { // This match is followed by another number.
+          s[o.i - 1] += o.x;
+          s.splice(o.i, 1);
+          for (j = i + 1; j < n; ++j) q[j].i--;
+        } else { // This match is followed by a string, so coallesce twice.
+          s[o.i - 1] += o.x + s[o.i + 1];
+          s.splice(o.i, 2);
+          for (j = i + 1; j < n; ++j) q[j].i -= 2;
+        }
+      } else {
+          if (s[o.i + 1] == null) { // This match is followed by another number.
+          s[o.i] = o.x;
+        } else { // This match is followed by a string, so coallesce twice.
+          s[o.i] = o.x + s[o.i + 1];
+          s.splice(o.i + 1, 1);
+          for (j = i + 1; j < n; ++j) q[j].i--;
+        }
+      }
+      q.splice(i, 1);
+      n--;
+      i--;
+    } else {
+      o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
+    }
+  }
+
+  // Remove any numbers in b not found in a.
+  while (i < n) {
+    o = q.pop();
+    if (s[o.i + 1] == null) { // This match is followed by another number.
+      s[o.i] = o.x;
+    } else { // This match is followed by a string, so coallesce twice.
+      s[o.i] = o.x + s[o.i + 1];
+      s.splice(o.i + 1, 1);
+    }
+    n--;
+  }
+
+  // Special optimization for only a single match.
+  if (s.length === 1) {
+    return s[0] == null ? q[0].x : function() { return b; };
+  }
+
+  // Otherwise, interpolate each of the numbers and rejoin the string.
+  return function(t) {
+    for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
+    return s.join("");
+  };
+};
+
+d3.interpolateRgb = function(a, b) {
+  a = d3.rgb(a);
+  b = d3.rgb(b);
+  var ar = a.r,
+      ag = a.g,
+      ab = a.b,
+      br = b.r - ar,
+      bg = b.g - ag,
+      bb = b.b - ab;
+  return function(t) {
+    return "rgb(" + Math.round(ar + br * t)
+        + "," + Math.round(ag + bg * t)
+        + "," + Math.round(ab + bb * t)
+        + ")";
+  };
+};
+
+// interpolates HSL space, but outputs RGB string (for compatibility)
+d3.interpolateHsl = function(a, b) {
+  a = d3.hsl(a);
+  b = d3.hsl(b);
+  var h0 = a.h,
+      s0 = a.s,
+      l0 = a.l,
+      h1 = b.h - h0,
+      s1 = b.s - s0,
+      l1 = b.l - l0;
+  return function(t) {
+    return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString();
+  };
+};
+
+d3.interpolateArray = function(a, b) {
+  var x = [],
+      c = [],
+      na = a.length,
+      nb = b.length,
+      n0 = Math.min(a.length, b.length),
+      i;
+  for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i]));
+  for (; i < na; ++i) c[i] = a[i];
+  for (; i < nb; ++i) c[i] = b[i];
+  return function(t) {
+    for (i = 0; i < n0; ++i) c[i] = x[i](t);
+    return c;
+  };
+};
+
+d3.interpolateObject = function(a, b) {
+  var i = {},
+      c = {},
+      k;
+  for (k in a) {
+    if (k in b) {
+      i[k] = d3_interpolateByName(k)(a[k], b[k]);
+    } else {
+      c[k] = a[k];
+    }
+  }
+  for (k in b) {
+    if (!(k in a)) {
+      c[k] = b[k];
+    }
+  }
+  return function(t) {
+    for (k in i) c[k] = i[k](t);
+    return c;
+  };
+}
+
+var d3_interpolate_number = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
+    d3_interpolate_rgb = {background: 1, fill: 1, stroke: 1};
+
+function d3_interpolateByName(n) {
+  return n in d3_interpolate_rgb || /\bcolor\b/.test(n)
+      ? d3.interpolateRgb
+      : d3.interpolate;
+}
+
+d3.interpolators = [
+  d3.interpolateObject,
+  function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
+  function(a, b) { return (typeof b === "string") && d3.interpolateString(String(a), b); },
+  function(a, b) { return (b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b)) && d3.interpolateRgb(String(a), b); },
+  function(a, b) { return (typeof b === "number") && d3.interpolateNumber(+a, b); }
+];
Index: /Dev/trunk/d3/src/core/json.js
===================================================================
--- /Dev/trunk/d3/src/core/json.js	(revision 76)
+++ /Dev/trunk/d3/src/core/json.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.json = function(url, callback) {
+  d3.text(url, "application/json", function(text) {
+    callback(text ? JSON.parse(text) : null);
+  });
+};
Index: /Dev/trunk/d3/src/core/keys.js
===================================================================
--- /Dev/trunk/d3/src/core/keys.js	(revision 76)
+++ /Dev/trunk/d3/src/core/keys.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.keys = function(map) {
+  var keys = [];
+  for (var key in map) keys.push(key);
+  return keys;
+};
Index: /Dev/trunk/d3/src/core/last.js
===================================================================
--- /Dev/trunk/d3/src/core/last.js	(revision 76)
+++ /Dev/trunk/d3/src/core/last.js	(revision 76)
@@ -0,0 +1,13 @@
+d3.last = function(array, f) {
+  var i = 0,
+      n = array.length,
+      a = array[0],
+      b;
+  if (arguments.length === 1) f = d3.ascending;
+  while (++i < n) {
+    if (f.call(array, a, b = array[i]) <= 0) {
+      a = b;
+    }
+  }
+  return a;
+};
Index: /Dev/trunk/d3/src/core/max.js
===================================================================
--- /Dev/trunk/d3/src/core/max.js	(revision 76)
+++ /Dev/trunk/d3/src/core/max.js	(revision 76)
@@ -0,0 +1,14 @@
+d3.max = function(array, f) {
+  var i = -1,
+      n = array.length,
+      a,
+      b;
+  if (arguments.length === 1) {
+    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
+    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+  } else {
+    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+    while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
+  }
+  return a;
+};
Index: /Dev/trunk/d3/src/core/merge.js
===================================================================
--- /Dev/trunk/d3/src/core/merge.js	(revision 76)
+++ /Dev/trunk/d3/src/core/merge.js	(revision 76)
@@ -0,0 +1,3 @@
+d3.merge = function(arrays) {
+  return Array.prototype.concat.apply([], arrays);
+};
Index: /Dev/trunk/d3/src/core/min.js
===================================================================
--- /Dev/trunk/d3/src/core/min.js	(revision 76)
+++ /Dev/trunk/d3/src/core/min.js	(revision 76)
@@ -0,0 +1,14 @@
+d3.min = function(array, f) {
+  var i = -1,
+      n = array.length,
+      a,
+      b;
+  if (arguments.length === 1) {
+    while (++i < n && ((a = array[i]) == null || a != a)) a = undefined;
+    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+  } else {
+    while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined;
+    while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
+  }
+  return a;
+};
Index: /Dev/trunk/d3/src/core/nest.js
===================================================================
--- /Dev/trunk/d3/src/core/nest.js	(revision 76)
+++ /Dev/trunk/d3/src/core/nest.js	(revision 76)
@@ -0,0 +1,87 @@
+d3.nest = function() {
+  var nest = {},
+      keys = [],
+      sortKeys = [],
+      sortValues,
+      rollup;
+
+  function map(array, depth) {
+    if (depth >= keys.length) return rollup
+        ? rollup.call(nest, array) : (sortValues
+        ? array.sort(sortValues)
+        : array);
+
+    var i = -1,
+        n = array.length,
+        key = keys[depth++],
+        keyValue,
+        object,
+        o = {};
+
+    while (++i < n) {
+      if ((keyValue = key(object = array[i])) in o) {
+        o[keyValue].push(object);
+      } else {
+        o[keyValue] = [object];
+      }
+    }
+
+    for (keyValue in o) {
+      o[keyValue] = map(o[keyValue], depth);
+    }
+
+    return o;
+  }
+
+  function entries(map, depth) {
+    if (depth >= keys.length) return map;
+
+    var a = [],
+        sortKey = sortKeys[depth++],
+        key;
+
+    for (key in map) {
+      a.push({key: key, values: entries(map[key], depth)});
+    }
+
+    if (sortKey) a.sort(function(a, b) {
+      return sortKey(a.key, b.key);
+    });
+
+    return a;
+  }
+
+  nest.map = function(array) {
+    return map(array, 0);
+  };
+
+  nest.entries = function(array) {
+    return entries(map(array, 0), 0);
+  };
+
+  nest.key = function(d) {
+    keys.push(d);
+    return nest;
+  };
+
+  // Specifies the order for the most-recently specified key.
+  // Note: only applies to entries. Map keys are unordered!
+  nest.sortKeys = function(order) {
+    sortKeys[keys.length - 1] = order;
+    return nest;
+  };
+
+  // Specifies the order for leaf values.
+  // Applies to both maps and entries array.
+  nest.sortValues = function(order) {
+    sortValues = order;
+    return nest;
+  };
+
+  nest.rollup = function(f) {
+    rollup = f;
+    return nest;
+  };
+
+  return nest;
+};
Index: /Dev/trunk/d3/src/core/noop.js
===================================================================
--- /Dev/trunk/d3/src/core/noop.js	(revision 76)
+++ /Dev/trunk/d3/src/core/noop.js	(revision 76)
@@ -0,0 +1,1 @@
+function d3_noop() {}
Index: /Dev/trunk/d3/src/core/ns.js
===================================================================
--- /Dev/trunk/d3/src/core/ns.js	(revision 76)
+++ /Dev/trunk/d3/src/core/ns.js	(revision 76)
@@ -0,0 +1,19 @@
+d3.ns = {
+
+  prefix: {
+    svg: "http://www.w3.org/2000/svg",
+    xhtml: "http://www.w3.org/1999/xhtml",
+    xlink: "http://www.w3.org/1999/xlink",
+    xml: "http://www.w3.org/XML/1998/namespace",
+    xmlns: "http://www.w3.org/2000/xmlns/"
+  },
+
+  qualify: function(name) {
+    var i = name.indexOf(":");
+    return i < 0 ? name : {
+      space: d3.ns.prefix[name.substring(0, i)],
+      local: name.substring(i + 1)
+    };
+  }
+
+};
Index: /Dev/trunk/d3/src/core/object.js
===================================================================
--- /Dev/trunk/d3/src/core/object.js	(revision 76)
+++ /Dev/trunk/d3/src/core/object.js	(revision 76)
@@ -0,0 +1,5 @@
+if (!Object.create) Object.create = function(o) {
+  /** @constructor */ function f() {}
+  f.prototype = o;
+  return new f;
+};
Index: /Dev/trunk/d3/src/core/permute.js
===================================================================
--- /Dev/trunk/d3/src/core/permute.js	(revision 76)
+++ /Dev/trunk/d3/src/core/permute.js	(revision 76)
@@ -0,0 +1,7 @@
+d3.permute = function(array, indexes) {
+  var permutes = [],
+      i = -1,
+      n = indexes.length;
+  while (++i < n) permutes[i] = array[indexes[i]];
+  return permutes;
+};
Index: /Dev/trunk/d3/src/core/quantile.js
===================================================================
--- /Dev/trunk/d3/src/core/quantile.js	(revision 76)
+++ /Dev/trunk/d3/src/core/quantile.js	(revision 76)
@@ -0,0 +1,8 @@
+// R-7 per <http://en.wikipedia.org/wiki/Quantile>
+d3.quantile = function(values, p) {
+  var H = (values.length - 1) * p + 1,
+      h = Math.floor(H),
+      v = values[h - 1],
+      e = H - h;
+  return e ? v + e * (values[h] - v) : v;
+};
Index: /Dev/trunk/d3/src/core/range.js
===================================================================
--- /Dev/trunk/d3/src/core/range.js	(revision 76)
+++ /Dev/trunk/d3/src/core/range.js	(revision 76)
@@ -0,0 +1,16 @@
+/**
+ * @param {number} start
+ * @param {number=} stop
+ * @param {number=} step
+ */
+d3.range = function(start, stop, step) {
+  if (arguments.length === 1) { stop = start; start = 0; }
+  if (step == null) step = 1;
+  if ((stop - start) / step == Infinity) throw new Error("infinite range");
+  var range = [],
+       i = -1,
+       j;
+  if (step < 0) while ((j = start + step * ++i) > stop) range.push(j);
+  else while ((j = start + step * ++i) < stop) range.push(j);
+  return range;
+};
Index: /Dev/trunk/d3/src/core/rebind.js
===================================================================
--- /Dev/trunk/d3/src/core/rebind.js	(revision 76)
+++ /Dev/trunk/d3/src/core/rebind.js	(revision 76)
@@ -0,0 +1,7 @@
+// A getter-setter method that preserves the appropriate `this` context.
+d3.rebind = function(object, method) {
+  return function() {
+    var x = method.apply(object, arguments);
+    return arguments.length ? object : x;
+  };
+};
Index: /Dev/trunk/d3/src/core/requote.js
===================================================================
--- /Dev/trunk/d3/src/core/requote.js	(revision 76)
+++ /Dev/trunk/d3/src/core/requote.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.requote = function(s) {
+  return s.replace(d3_requote_re, "\\$&");
+};
+
+var d3_requote_re = /[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;
Index: /Dev/trunk/d3/src/core/rgb.js
===================================================================
--- /Dev/trunk/d3/src/core/rgb.js	(revision 76)
+++ /Dev/trunk/d3/src/core/rgb.js	(revision 76)
@@ -0,0 +1,284 @@
+d3.rgb = function(r, g, b) {
+  return arguments.length === 1
+      ? d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)
+      : d3_rgb(~~r, ~~g, ~~b);
+};
+
+function d3_rgb(r, g, b) {
+  return new d3_Rgb(r, g, b);
+}
+
+function d3_Rgb(r, g, b) {
+  this.r = r;
+  this.g = g;
+  this.b = b;
+}
+
+d3_Rgb.prototype.brighter = function(k) {
+  k = Math.pow(0.7, arguments.length ? k : 1);
+  var r = this.r,
+      g = this.g,
+      b = this.b,
+      i = 30;
+  if (!r && !g && !b) return d3_rgb(i, i, i);
+  if (r && r < i) r = i;
+  if (g && g < i) g = i;
+  if (b && b < i) b = i;
+  return d3_rgb(
+    Math.min(255, Math.floor(r / k)),
+    Math.min(255, Math.floor(g / k)),
+    Math.min(255, Math.floor(b / k)));
+};
+
+d3_Rgb.prototype.darker = function(k) {
+  k = Math.pow(0.7, arguments.length ? k : 1);
+  return d3_rgb(
+    Math.max(0, Math.floor(k * this.r)),
+    Math.max(0, Math.floor(k * this.g)),
+    Math.max(0, Math.floor(k * this.b)));
+};
+
+d3_Rgb.prototype.hsl = function() {
+  return d3_rgb_hsl(this.r, this.g, this.b);
+};
+
+d3_Rgb.prototype.toString = function() {
+  return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
+};
+
+function d3_rgb_hex(v) {
+  return v < 0x10 ? "0" + v.toString(16) : v.toString(16);
+}
+
+function d3_rgb_parse(format, rgb, hsl) {
+  var r = 0, // red channel; int in [0, 255]
+      g = 0, // green channel; int in [0, 255]
+      b = 0, // blue channel; int in [0, 255]
+      m1, // CSS color specification match
+      m2, // CSS color specification type (e.g., rgb)
+      name;
+
+  /* Handle hsl, rgb. */
+  m1 = /([a-z]+)\((.*)\)/i.exec(format);
+  if (m1) {
+    m2 = m1[2].split(",");
+    switch (m1[1]) {
+      case "hsl": {
+        return hsl(
+          parseFloat(m2[0]), // degrees
+          parseFloat(m2[1]) / 100, // percentage
+          parseFloat(m2[2]) / 100 // percentage
+        );
+      }
+      case "rgb": {
+        return rgb(
+          d3_rgb_parseNumber(m2[0]),
+          d3_rgb_parseNumber(m2[1]),
+          d3_rgb_parseNumber(m2[2])
+        );
+      }
+    }
+  }
+
+  /* Named colors. */
+  if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b);
+
+  /* Hexadecimal colors: #rgb and #rrggbb. */
+  if (format != null && format.charAt(0) === "#") {
+    if (format.length === 4) {
+      r = format.charAt(1); r += r;
+      g = format.charAt(2); g += g;
+      b = format.charAt(3); b += b;
+    } else if (format.length === 7) {
+      r = format.substring(1, 3);
+      g = format.substring(3, 5);
+      b = format.substring(5, 7);
+    }
+    r = parseInt(r, 16);
+    g = parseInt(g, 16);
+    b = parseInt(b, 16);
+  }
+
+  return rgb(r, g, b);
+}
+
+function d3_rgb_hsl(r, g, b) {
+  var min = Math.min(r /= 255, g /= 255, b /= 255),
+      max = Math.max(r, g, b),
+      d = max - min,
+      h,
+      s,
+      l = (max + min) / 2;
+  if (d) {
+    s = l < .5 ? d / (max + min) : d / (2 - max - min);
+    if (r == max) h = (g - b) / d + (g < b ? 6 : 0);
+    else if (g == max) h = (b - r) / d + 2;
+    else h = (r - g) / d + 4;
+    h *= 60;
+  } else {
+    s = h = 0;
+  }
+  return d3_hsl(h, s, l);
+}
+
+function d3_rgb_parseNumber(c) { // either integer or percentage
+  var f = parseFloat(c);
+  return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
+}
+
+var d3_rgb_names = {
+  aliceblue: "#f0f8ff",
+  antiquewhite: "#faebd7",
+  aqua: "#00ffff",
+  aquamarine: "#7fffd4",
+  azure: "#f0ffff",
+  beige: "#f5f5dc",
+  bisque: "#ffe4c4",
+  black: "#000000",
+  blanchedalmond: "#ffebcd",
+  blue: "#0000ff",
+  blueviolet: "#8a2be2",
+  brown: "#a52a2a",
+  burlywood: "#deb887",
+  cadetblue: "#5f9ea0",
+  chartreuse: "#7fff00",
+  chocolate: "#d2691e",
+  coral: "#ff7f50",
+  cornflowerblue: "#6495ed",
+  cornsilk: "#fff8dc",
+  crimson: "#dc143c",
+  cyan: "#00ffff",
+  darkblue: "#00008b",
+  darkcyan: "#008b8b",
+  darkgoldenrod: "#b8860b",
+  darkgray: "#a9a9a9",
+  darkgreen: "#006400",
+  darkgrey: "#a9a9a9",
+  darkkhaki: "#bdb76b",
+  darkmagenta: "#8b008b",
+  darkolivegreen: "#556b2f",
+  darkorange: "#ff8c00",
+  darkorchid: "#9932cc",
+  darkred: "#8b0000",
+  darksalmon: "#e9967a",
+  darkseagreen: "#8fbc8f",
+  darkslateblue: "#483d8b",
+  darkslategray: "#2f4f4f",
+  darkslategrey: "#2f4f4f",
+  darkturquoise: "#00ced1",
+  darkviolet: "#9400d3",
+  deeppink: "#ff1493",
+  deepskyblue: "#00bfff",
+  dimgray: "#696969",
+  dimgrey: "#696969",
+  dodgerblue: "#1e90ff",
+  firebrick: "#b22222",
+  floralwhite: "#fffaf0",
+  forestgreen: "#228b22",
+  fuchsia: "#ff00ff",
+  gainsboro: "#dcdcdc",
+  ghostwhite: "#f8f8ff",
+  gold: "#ffd700",
+  goldenrod: "#daa520",
+  gray: "#808080",
+  green: "#008000",
+  greenyellow: "#adff2f",
+  grey: "#808080",
+  honeydew: "#f0fff0",
+  hotpink: "#ff69b4",
+  indianred: "#cd5c5c",
+  indigo: "#4b0082",
+  ivory: "#fffff0",
+  khaki: "#f0e68c",
+  lavender: "#e6e6fa",
+  lavenderblush: "#fff0f5",
+  lawngreen: "#7cfc00",
+  lemonchiffon: "#fffacd",
+  lightblue: "#add8e6",
+  lightcoral: "#f08080",
+  lightcyan: "#e0ffff",
+  lightgoldenrodyellow: "#fafad2",
+  lightgray: "#d3d3d3",
+  lightgreen: "#90ee90",
+  lightgrey: "#d3d3d3",
+  lightpink: "#ffb6c1",
+  lightsalmon: "#ffa07a",
+  lightseagreen: "#20b2aa",
+  lightskyblue: "#87cefa",
+  lightslategray: "#778899",
+  lightslategrey: "#778899",
+  lightsteelblue: "#b0c4de",
+  lightyellow: "#ffffe0",
+  lime: "#00ff00",
+  limegreen: "#32cd32",
+  linen: "#faf0e6",
+  magenta: "#ff00ff",
+  maroon: "#800000",
+  mediumaquamarine: "#66cdaa",
+  mediumblue: "#0000cd",
+  mediumorchid: "#ba55d3",
+  mediumpurple: "#9370db",
+  mediumseagreen: "#3cb371",
+  mediumslateblue: "#7b68ee",
+  mediumspringgreen: "#00fa9a",
+  mediumturquoise: "#48d1cc",
+  mediumvioletred: "#c71585",
+  midnightblue: "#191970",
+  mintcream: "#f5fffa",
+  mistyrose: "#ffe4e1",
+  moccasin: "#ffe4b5",
+  navajowhite: "#ffdead",
+  navy: "#000080",
+  oldlace: "#fdf5e6",
+  olive: "#808000",
+  olivedrab: "#6b8e23",
+  orange: "#ffa500",
+  orangered: "#ff4500",
+  orchid: "#da70d6",
+  palegoldenrod: "#eee8aa",
+  palegreen: "#98fb98",
+  paleturquoise: "#afeeee",
+  palevioletred: "#db7093",
+  papayawhip: "#ffefd5",
+  peachpuff: "#ffdab9",
+  peru: "#cd853f",
+  pink: "#ffc0cb",
+  plum: "#dda0dd",
+  powderblue: "#b0e0e6",
+  purple: "#800080",
+  red: "#ff0000",
+  rosybrown: "#bc8f8f",
+  royalblue: "#4169e1",
+  saddlebrown: "#8b4513",
+  salmon: "#fa8072",
+  sandybrown: "#f4a460",
+  seagreen: "#2e8b57",
+  seashell: "#fff5ee",
+  sienna: "#a0522d",
+  silver: "#c0c0c0",
+  skyblue: "#87ceeb",
+  slateblue: "#6a5acd",
+  slategray: "#708090",
+  slategrey: "#708090",
+  snow: "#fffafa",
+  springgreen: "#00ff7f",
+  steelblue: "#4682b4",
+  tan: "#d2b48c",
+  teal: "#008080",
+  thistle: "#d8bfd8",
+  tomato: "#ff6347",
+  turquoise: "#40e0d0",
+  violet: "#ee82ee",
+  wheat: "#f5deb3",
+  white: "#ffffff",
+  whitesmoke: "#f5f5f5",
+  yellow: "#ffff00",
+  yellowgreen: "#9acd32"
+};
+
+for (var d3_rgb_name in d3_rgb_names) {
+  d3_rgb_names[d3_rgb_name] = d3_rgb_parse(
+      d3_rgb_names[d3_rgb_name],
+      d3_rgb,
+      d3_hsl_rgb);
+}
Index: /Dev/trunk/d3/src/core/round.js
===================================================================
--- /Dev/trunk/d3/src/core/round.js	(revision 76)
+++ /Dev/trunk/d3/src/core/round.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.round = function(x, n) {
+  return n
+      ? Math.round(x * Math.pow(10, n)) * Math.pow(10, -n)
+      : Math.round(x);
+};
Index: /Dev/trunk/d3/src/core/selection.js
===================================================================
--- /Dev/trunk/d3/src/core/selection.js	(revision 76)
+++ /Dev/trunk/d3/src/core/selection.js	(revision 76)
@@ -0,0 +1,639 @@
+var d3_select = function(s, n) { return n.querySelector(s); },
+    d3_selectAll = function(s, n) { return d3_array(n.querySelectorAll(s)); };
+
+// Use Sizzle, if available.
+if (typeof Sizzle === "function") {
+  d3_select = function(s, n) { return Sizzle(s, n)[0]; };
+  d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); };
+}
+
+var d3_root = d3_selection([[document]]);
+d3_root[0].parentNode = document.documentElement;
+
+// TODO fast singleton implementation!
+d3.select = function(selector) {
+  return typeof selector === "string"
+      ? d3_root.select(selector)
+      : d3_selection([[selector]]); // assume node
+};
+
+d3.selectAll = function(selector) {
+  return typeof selector === "string"
+      ? d3_root.selectAll(selector)
+      : d3_selection([d3_array(selector)]); // assume node[]
+};
+
+function d3_selection(groups) {
+
+  function select(select) {
+    var subgroups = [],
+        subgroup,
+        subnode,
+        group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = group.parentNode;
+      for (var i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) {
+          subgroup.push(subnode = select(node));
+          if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
+        } else {
+          subgroup.push(null);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  }
+
+  function selectAll(selectAll) {
+    var subgroups = [],
+        subgroup,
+        group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      for (var i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) {
+          subgroups.push(subgroup = selectAll(node));
+          subgroup.parentNode = node;
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  }
+
+  // TODO select(function)?
+  groups.select = function(selector) {
+    return select(function(node) {
+      return d3_select(selector, node);
+    });
+  };
+
+  // TODO selectAll(function)?
+  groups.selectAll = function(selector) {
+    return selectAll(function(node) {
+      return d3_selectAll(selector, node);
+    });
+  };
+
+  // TODO preserve null elements to maintain index?
+  groups.filter = function(filter) {
+    var subgroups = [],
+        subgroup,
+        group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = group.parentNode;
+      for (var i = 0, n = group.length; i < n; i++) {
+        if ((node = group[i]) && filter.call(node, node.__data__, i)) {
+          subgroup.push(node);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  };
+
+  groups.map = function(map) {
+    var group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      for (var i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) node.__data__ = map.call(node, node.__data__, i);
+      }
+    }
+    return groups;
+  };
+
+  // TODO data(null) for clearing data?
+  groups.data = function(data, join) {
+    var enter = [],
+        update = [],
+        exit = [];
+
+    function bind(group, groupData) {
+      var i = 0,
+          n = group.length,
+          m = groupData.length,
+          n0 = Math.min(n, m),
+          n1 = Math.max(n, m),
+          updateNodes = [],
+          enterNodes = [],
+          exitNodes = [],
+          node,
+          nodeData;
+
+      if (join) {
+        var nodeByKey = {},
+            keys = [],
+            key,
+            j = groupData.length;
+
+        for (i = 0; i < n; i++) {
+          key = join.call(node = group[i], node.__data__, i);
+          if (key in nodeByKey) {
+            exitNodes[j++] = node; // duplicate key
+          } else {
+            nodeByKey[key] = node;
+          }
+          keys.push(key);
+        }
+
+        for (i = 0; i < m; i++) {
+          node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)];
+          if (node) {
+            node.__data__ = nodeData;
+            updateNodes[i] = node;
+            enterNodes[i] = exitNodes[i] = null;
+          } else {
+            enterNodes[i] = d3_selection_enterNode(nodeData);
+            updateNodes[i] = exitNodes[i] = null;
+          }
+          delete nodeByKey[key];
+        }
+
+        for (i = 0; i < n; i++) {
+          if (keys[i] in nodeByKey) {
+            exitNodes[i] = group[i];
+          }
+        }
+      } else {
+        for (; i < n0; i++) {
+          node = group[i];
+          nodeData = groupData[i];
+          if (node) {
+            node.__data__ = nodeData;
+            updateNodes[i] = node;
+            enterNodes[i] = exitNodes[i] = null;
+          } else {
+            enterNodes[i] = d3_selection_enterNode(nodeData);
+            updateNodes[i] = exitNodes[i] = null;
+          }
+        }
+        for (; i < m; i++) {
+          enterNodes[i] = d3_selection_enterNode(groupData[i]);
+          updateNodes[i] = exitNodes[i] = null;
+        }
+        for (; i < n1; i++) {
+          exitNodes[i] = group[i];
+          enterNodes[i] = updateNodes[i] = null;
+        }
+      }
+
+      enterNodes.parentNode
+          = updateNodes.parentNode
+          = exitNodes.parentNode
+          = group.parentNode;
+
+      enter.push(enterNodes);
+      update.push(updateNodes);
+      exit.push(exitNodes);
+    }
+
+    var i = -1,
+        n = groups.length,
+        group;
+    if (typeof data === "function") {
+      while (++i < n) {
+        bind(group = groups[i], data.call(group, group.parentNode.__data__, i));
+      }
+    } else {
+      while (++i < n) {
+        bind(group = groups[i], data);
+      }
+    }
+
+    var selection = d3_selection(update);
+    selection.enter = function() {
+      return d3_selectionEnter(enter);
+    };
+    selection.exit = function() {
+      return d3_selection(exit);
+    };
+    return selection;
+  };
+
+  // TODO mask forEach? or rename for eachData?
+  // TODO offer the same semantics for map, reduce, etc.?
+  groups.each = function(callback) {
+    for (var j = 0, m = groups.length; j < m; j++) {
+      var group = groups[j];
+      for (var i = 0, n = group.length; i < n; i++) {
+        var node = group[i];
+        if (node) callback.call(node, node.__data__, i);
+      }
+    }
+    return groups;
+  };
+
+  function first(callback) {
+    for (var j = 0, m = groups.length; j < m; j++) {
+      var group = groups[j];
+      for (var i = 0, n = group.length; i < n; i++) {
+        var node = group[i];
+        if (node) return callback.call(node, node.__data__, i);
+      }
+    }
+    return null;
+  }
+
+  groups.empty = function() {
+    return !first(function() { return true; });
+  };
+
+  groups.node = function() {
+    return first(function() { return this; });
+  };
+
+  groups.attr = function(name, value) {
+    name = d3.ns.qualify(name);
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 2) {
+      return first(name.local
+          ? function() { return this.getAttributeNS(name.space, name.local); }
+          : function() { return this.getAttribute(name); });
+    }
+
+    /** @this {Element} */
+    function attrNull() {
+      this.removeAttribute(name);
+    }
+
+    /** @this {Element} */
+    function attrNullNS() {
+      this.removeAttributeNS(name.space, name.local);
+    }
+
+    /** @this {Element} */
+    function attrConstant() {
+      this.setAttribute(name, value);
+    }
+
+    /** @this {Element} */
+    function attrConstantNS() {
+      this.setAttributeNS(name.space, name.local, value);
+    }
+
+    /** @this {Element} */
+    function attrFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.removeAttribute(name);
+      else this.setAttribute(name, x);
+    }
+
+    /** @this {Element} */
+    function attrFunctionNS() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.removeAttributeNS(name.space, name.local);
+      else this.setAttributeNS(name.space, name.local, x);
+    }
+
+    return groups.each(value == null
+        ? (name.local ? attrNullNS : attrNull) : (typeof value === "function"
+        ? (name.local ? attrFunctionNS : attrFunction)
+        : (name.local ? attrConstantNS : attrConstant)));
+  };
+
+  groups.classed = function(name, value) {
+    var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g");
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 2) {
+      return first(function() {
+        if (c = this.classList) return c.contains(name);
+        var c = this.className;
+        re.lastIndex = 0;
+        return re.test(c.baseVal != null ? c.baseVal : c);
+      });
+    }
+
+    /** @this {Element} */
+    function classedAdd() {
+      if (c = this.classList) return c.add(name);
+      var c = this.className,
+          cb = c.baseVal != null,
+          cv = cb ? c.baseVal : c;
+      re.lastIndex = 0;
+      if (!re.test(cv)) {
+        cv = d3_collapse(cv + " " + name);
+        if (cb) c.baseVal = cv;
+        else this.className = cv;
+      }
+    }
+
+    /** @this {Element} */
+    function classedRemove() {
+      if (c = this.classList) return c.remove(name);
+      var c = this.className,
+          cb = c.baseVal != null,
+          cv = cb ? c.baseVal : c;
+      cv = d3_collapse(cv.replace(re, " "));
+      if (cb) c.baseVal = cv;
+      else this.className = cv;
+    }
+
+    /** @this {Element} */
+    function classedFunction() {
+      (value.apply(this, arguments)
+          ? classedAdd
+          : classedRemove).call(this);
+    }
+
+    return groups.each(typeof value === "function"
+        ? classedFunction : value
+        ? classedAdd
+        : classedRemove);
+  };
+
+  groups.style = function(name, value, priority) {
+    if (arguments.length < 3) priority = "";
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 2) {
+      return first(function() {
+        return window.getComputedStyle(this, null).getPropertyValue(name);
+      });
+    }
+
+    /** @this {Element} */
+    function styleNull() {
+      this.style.removeProperty(name);
+    }
+
+    /** @this {Element} */
+    function styleConstant() {
+      this.style.setProperty(name, value, priority);
+    }
+
+    /** @this {Element} */
+    function styleFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) this.style.removeProperty(name);
+      else this.style.setProperty(name, x, priority);
+    }
+
+    return groups.each(value == null
+        ? styleNull : (typeof value === "function"
+        ? styleFunction : styleConstant));
+  };
+
+  groups.property = function(name, value) {
+    name = d3.ns.qualify(name);
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 2) {
+      return first(function() {
+        return this[name];
+      });
+    }
+
+    /** @this {Element} */
+    function propertyNull() {
+      delete this[name];
+    }
+
+    /** @this {Element} */
+    function propertyConstant() {
+      this[name] = value;
+    }
+
+    /** @this {Element} */
+    function propertyFunction() {
+      var x = value.apply(this, arguments);
+      if (x == null) delete this[name];
+      else this[name] = x;
+    }
+
+    return groups.each(value == null
+        ? propertyNull : (typeof value === "function"
+        ? propertyFunction : propertyConstant));
+  };
+
+  groups.text = function(value) {
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 1) {
+      return first(function() {
+        return this.textContent;
+      });
+    }
+
+    /** @this {Element} */
+    function textConstant() {
+      this.textContent = value;
+    }
+
+    /** @this {Element} */
+    function textFunction() {
+      this.textContent = value.apply(this, arguments);
+    }
+
+    return groups.each(typeof value === "function"
+        ? textFunction : textConstant);
+  };
+
+  groups.html = function(value) {
+
+    // If no value is specified, return the first value.
+    if (arguments.length < 1) {
+      return first(function() {
+        return this.innerHTML;
+      });
+    }
+
+    /** @this {Element} */
+    function htmlConstant() {
+      this.innerHTML = value;
+    }
+
+    /** @this {Element} */
+    function htmlFunction() {
+      this.innerHTML = value.apply(this, arguments);
+    }
+
+    return groups.each(typeof value === "function"
+        ? htmlFunction : htmlConstant);
+  };
+
+  // TODO append(node)?
+  // TODO append(function)?
+  groups.append = function(name) {
+    name = d3.ns.qualify(name);
+
+    function append(node) {
+      return node.appendChild(document.createElement(name));
+    }
+
+    function appendNS(node) {
+      return node.appendChild(document.createElementNS(name.space, name.local));
+    }
+
+    return select(name.local ? appendNS : append);
+  };
+
+  // TODO insert(node, function)?
+  // TODO insert(function, string)?
+  // TODO insert(function, function)?
+  groups.insert = function(name, before) {
+    name = d3.ns.qualify(name);
+
+    function insert(node) {
+      return node.insertBefore(
+          document.createElement(name),
+          d3_select(before, node));
+    }
+
+    function insertNS(node) {
+      return node.insertBefore(
+          document.createElementNS(name.space, name.local),
+          d3_select(before, node));
+    }
+
+    return select(name.local ? insertNS : insert);
+  };
+
+  // TODO remove(selector)?
+  // TODO remove(node)?
+  // TODO remove(function)?
+  groups.remove = function() {
+    return groups.each(function() {
+      var parent = this.parentNode;
+      if (parent) parent.removeChild(this);
+    });
+  };
+
+  groups.sort = function(comparator) {
+    comparator = d3_selection_comparator.apply(this, arguments);
+    for (var j = 0, m = groups.length; j < m; j++) {
+      var group = groups[j];
+      group.sort(comparator);
+      for (var i = 1, n = group.length, prev = group[0]; i < n; i++) {
+        var node = group[i];
+        if (node) {
+          if (prev) prev.parentNode.insertBefore(node, prev.nextSibling);
+          prev = node;
+        }
+      }
+    }
+    return groups;
+  };
+
+  // type can be namespaced, e.g., "click.foo"
+  // listener can be null for removal
+  groups.on = function(type, listener, capture) {
+    if (arguments.length < 3) capture = false;
+
+    // parse the type specifier
+    var i = type.indexOf("."),
+        typo = i === -1 ? type : type.substring(0, i),
+        name = "__on" + type;
+
+    // remove the old event listener, and add the new event listener
+    return groups.each(function(d, i) {
+      if (this[name]) this.removeEventListener(typo, this[name], capture);
+      if (listener) this.addEventListener(typo, this[name] = l, capture);
+
+      // wrapped event listener that preserves i
+      var node = this;
+      function l(e) {
+        var o = d3.event; // Events can be reentrant (e.g., focus).
+        d3.event = e;
+        try {
+          listener.call(this, node.__data__, i);
+        } finally {
+          d3.event = o;
+        }
+      }
+    });
+  };
+
+  // TODO slice?
+
+  groups.transition = function() {
+    return d3_transition(groups);
+  };
+
+  groups.call = d3_call;
+
+  return groups;
+}
+
+function d3_selectionEnter(groups) {
+
+  function select(select) {
+    var subgroups = [],
+        subgroup,
+        subnode,
+        group,
+        node;
+    for (var j = 0, m = groups.length; j < m; j++) {
+      group = groups[j];
+      subgroups.push(subgroup = []);
+      subgroup.parentNode = group.parentNode;
+      for (var i = 0, n = group.length; i < n; i++) {
+        if (node = group[i]) {
+          subgroup.push(subnode = select(group.parentNode));
+          subnode.__data__ = node.__data__;
+        } else {
+          subgroup.push(null);
+        }
+      }
+    }
+    return d3_selection(subgroups);
+  }
+
+  // TODO append(node)?
+  // TODO append(function)?
+  groups.append = function(name) {
+    name = d3.ns.qualify(name);
+
+    function append(node) {
+      return node.appendChild(document.createElement(name));
+    }
+
+    function appendNS(node) {
+      return node.appendChild(document.createElementNS(name.space, name.local));
+    }
+
+    return select(name.local ? appendNS : append);
+  };
+
+  // TODO insert(node, function)?
+  // TODO insert(function, string)?
+  // TODO insert(function, function)?
+  groups.insert = function(name, before) {
+    name = d3.ns.qualify(name);
+
+    function insert(node) {
+      return node.insertBefore(
+          document.createElement(name),
+          d3_select(before, node));
+    }
+
+    function insertNS(node) {
+      return node.insertBefore(
+          document.createElementNS(name.space, name.local),
+          d3_select(before, node));
+    }
+
+    return select(name.local ? insertNS : insert);
+  };
+
+  return groups;
+}
+
+function d3_selection_comparator(comparator) {
+  if (!arguments.length) comparator = d3.ascending;
+  return function(a, b) {
+    return comparator(a && a.__data__, b && b.__data__);
+  };
+}
+
+function d3_selection_enterNode(data) {
+  return {__data__: data};
+}
Index: /Dev/trunk/d3/src/core/split.js
===================================================================
--- /Dev/trunk/d3/src/core/split.js	(revision 76)
+++ /Dev/trunk/d3/src/core/split.js	(revision 76)
@@ -0,0 +1,21 @@
+d3.split = function(array, f) {
+  var arrays = [],
+      values = [],
+      value,
+      i = -1,
+      n = array.length;
+  if (arguments.length < 2) f = d3_splitter;
+  while (++i < n) {
+    if (f.call(values, value = array[i], i)) {
+      values = [];
+    } else {
+      if (!values.length) arrays.push(values);
+      values.push(value);
+    }
+  }
+  return arrays;
+};
+
+function d3_splitter(d) {
+  return d == null;
+}
Index: /Dev/trunk/d3/src/core/sum.js
===================================================================
--- /Dev/trunk/d3/src/core/sum.js	(revision 76)
+++ /Dev/trunk/d3/src/core/sum.js	(revision 76)
@@ -0,0 +1,14 @@
+d3.sum = function(array, f) {
+  var s = 0,
+      n = array.length,
+      a,
+      i = -1;
+
+  if (arguments.length === 1) {
+    while (++i < n) if (!isNaN(a = +array[i])) s += a;
+  } else {
+    while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
+  }
+
+  return s;
+};
Index: /Dev/trunk/d3/src/core/text.js
===================================================================
--- /Dev/trunk/d3/src/core/text.js	(revision 76)
+++ /Dev/trunk/d3/src/core/text.js	(revision 76)
@@ -0,0 +1,10 @@
+d3.text = function(url, mime, callback) {
+  function ready(req) {
+    callback(req && req.responseText);
+  }
+  if (arguments.length < 3) {
+    callback = mime;
+    mime = null;
+  }
+  d3.xhr(url, mime, ready);
+};
Index: /Dev/trunk/d3/src/core/timer.js
===================================================================
--- /Dev/trunk/d3/src/core/timer.js	(revision 76)
+++ /Dev/trunk/d3/src/core/timer.js	(revision 76)
@@ -0,0 +1,105 @@
+var d3_timer_queue = null,
+    d3_timer_interval, // is an interval (or frame) active?
+    d3_timer_timeout; // is a timeout active?
+
+// The timer will continue to fire until callback returns true.
+d3.timer = function(callback) {
+  d3_timer(callback, 0);
+};
+
+function d3_timer(callback, delay) {
+  var now = Date.now(),
+      found = false,
+      t0,
+      t1 = d3_timer_queue;
+
+  if (!isFinite(delay)) return;
+
+  // See if the callback's already in the queue.
+  while (t1) {
+    if (t1.callback === callback) {
+      t1.then = now;
+      t1.delay = delay;
+      found = true;
+      break;
+    }
+    t0 = t1;
+    t1 = t1.next;
+  }
+
+  // Otherwise, add the callback to the queue.
+  if (!found) d3_timer_queue = {
+    callback: callback,
+    then: now,
+    delay: delay,
+    next: d3_timer_queue
+  };
+
+  // Start animatin'!
+  if (!d3_timer_interval) {
+    d3_timer_timeout = clearTimeout(d3_timer_timeout);
+    d3_timer_interval = 1;
+    d3_timer_frame(d3_timer_step);
+  }
+}
+
+function d3_timer_step() {
+  var elapsed,
+      now = Date.now(),
+      t1 = d3_timer_queue;
+
+  while (t1) {
+    elapsed = now - t1.then;
+    if (elapsed > t1.delay) t1.flush = t1.callback(elapsed);
+    t1 = t1.next;
+  }
+
+  var delay = d3_timer_flush() - now;
+  if (delay > 24) {
+    if (isFinite(delay)) {
+      clearTimeout(d3_timer_timeout);
+      d3_timer_timeout = setTimeout(d3_timer_step, delay);
+    }
+    d3_timer_interval = 0;
+  } else {
+    d3_timer_interval = 1;
+    d3_timer_frame(d3_timer_step);
+  }
+}
+
+d3.timer.flush = function() {
+  var elapsed,
+      now = Date.now(),
+      t1 = d3_timer_queue;
+
+  while (t1) {
+    elapsed = now - t1.then;
+    if (!t1.delay) t1.flush = t1.callback(elapsed);
+    t1 = t1.next;
+  }
+
+  d3_timer_flush();
+};
+
+// Flush after callbacks, to avoid concurrent queue modification.
+function d3_timer_flush() {
+  var t0 = null,
+      t1 = d3_timer_queue,
+      then = Infinity;
+  while (t1) {
+    if (t1.flush) {
+      t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
+    } else {
+      then = Math.min(then, t1.then + t1.delay);
+      t1 = (t0 = t1).next;
+    }
+  }
+  return then;
+}
+
+var d3_timer_frame = window.requestAnimationFrame
+    || window.webkitRequestAnimationFrame
+    || window.mozRequestAnimationFrame
+    || window.oRequestAnimationFrame
+    || window.msRequestAnimationFrame
+    || function(callback) { setTimeout(callback, 17); };
Index: /Dev/trunk/d3/src/core/transition.js
===================================================================
--- /Dev/trunk/d3/src/core/transition.js	(revision 76)
+++ /Dev/trunk/d3/src/core/transition.js	(revision 76)
@@ -0,0 +1,240 @@
+d3.transition = d3_root.transition;
+
+var d3_transitionId = 0,
+    d3_transitionInheritId = 0;
+
+function d3_transition(groups) {
+  var transition = {},
+      transitionId = d3_transitionInheritId || ++d3_transitionId,
+      tweens = {},
+      interpolators = [],
+      remove = false,
+      event = d3.dispatch("start", "end"),
+      stage = [],
+      delay = [],
+      duration = [],
+      durationMax,
+      ease = d3.ease("cubic-in-out");
+
+  //
+  // Be careful with concurrent transitions!
+  //
+  // Say transition A causes an exit. Before A finishes, a transition B is
+  // created, and believes it only needs to do an update, because the elements
+  // haven't been removed yet (which happens at the very end of the exit
+  // transition).
+  //
+  // Even worse, what if either transition A or B has a staggered delay? Then,
+  // some elements may be removed, while others remain. Transition B does not
+  // know to enter the elements because they were still present at the time
+  // the transition B was created (but not yet started).
+  //
+  // To prevent such confusion, we only trigger end events for transitions if
+  // the transition ending is the only one scheduled for the given element.
+  // Similarly, we only allow one transition to be active for any given
+  // element, so that concurrent transitions do not overwrite each other's
+  // properties.
+  //
+  // TODO Support transition namespaces, so that transitions can proceed
+  // concurrently on the same element if needed. Hopefully, this is rare!
+  //
+
+  groups.each(function() {
+    (this.__transition__ || (this.__transition__ = {})).owner = transitionId;
+  });
+
+  function step(elapsed) {
+    var clear = true,
+        k = -1;
+    groups.each(function() {
+      if (stage[++k] === 2) return; // ended
+      var t = (elapsed - delay[k]) / duration[k],
+          tx = this.__transition__,
+          te, // ease(t)
+          tk, // tween key
+          ik = interpolators[k];
+
+      // Check if the (un-eased) time is outside the range [0,1].
+      if (t < 1) {
+        clear = false;
+        if (t < 0) return;
+      } else {
+        t = 1;
+      }
+
+      // Determine the stage of this transition.
+      // 0 - Not yet started.
+      // 1 - In progress.
+      // 2 - Ended.
+      if (stage[k]) {
+        if (!tx || tx.active !== transitionId) {
+          stage[k] = 2;
+          return;
+        }
+      } else if (!tx || tx.active > transitionId) {
+        stage[k] = 2;
+        return;
+      } else {
+        stage[k] = 1;
+        event.start.dispatch.apply(this, arguments);
+        ik = interpolators[k] = {};
+        tx.active = transitionId;
+        for (tk in tweens) {
+          if (te = tweens[tk].apply(this, arguments)) {
+            ik[tk] = te;
+          }
+        }
+      }
+
+      // Apply the interpolators!
+      te = ease(t);
+      for (tk in ik) ik[tk].call(this, te);
+
+      // Handle ending transitions.
+      if (t === 1) {
+        stage[k] = 2;
+        if (tx.active === transitionId) {
+          var owner = tx.owner;
+          if (owner === transitionId) {
+            delete this.__transition__;
+            if (remove && this.parentNode) this.parentNode.removeChild(this);
+          }
+          d3_transitionInheritId = transitionId;
+          event.end.dispatch.apply(this, arguments);
+          d3_transitionInheritId = 0;
+          tx.owner = owner;
+        }
+      }
+    });
+    return clear;
+  }
+
+  transition.delay = function(value) {
+    var delayMin = Infinity,
+        k = -1;
+    if (typeof value === "function") {
+      groups.each(function(d, i) {
+        var x = delay[++k] = +value.apply(this, arguments);
+        if (x < delayMin) delayMin = x;
+      });
+    } else {
+      delayMin = +value;
+      groups.each(function(d, i) {
+        delay[++k] = delayMin;
+      });
+    }
+    d3_timer(step, delayMin);
+    return transition;
+  };
+
+  transition.duration = function(value) {
+    var k = -1;
+    if (typeof value === "function") {
+      durationMax = 0;
+      groups.each(function(d, i) {
+        var x = duration[++k] = +value.apply(this, arguments);
+        if (x > durationMax) durationMax = x;
+      });
+    } else {
+      durationMax = +value;
+      groups.each(function(d, i) {
+        duration[++k] = durationMax;
+      });
+    }
+    return transition;
+  };
+
+  transition.ease = function(value) {
+    ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
+    return transition;
+  };
+
+  transition.attrTween = function(name, tween) {
+
+    /** @this {Element} */
+    function attrTween(d, i) {
+      var f = tween.call(this, d, i, this.getAttribute(name));
+      return f && function(t) {
+        this.setAttribute(name, f(t));
+      };
+    }
+
+    /** @this {Element} */
+    function attrTweenNS(d, i) {
+      var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
+      return f && function(t) {
+        this.setAttributeNS(name.space, name.local, f(t));
+      };
+    }
+
+    tweens["attr." + name] = name.local ? attrTweenNS : attrTween;
+    return transition;
+  };
+
+  transition.attr = function(name, value) {
+    return transition.attrTween(name, d3_transitionTween(value));
+  };
+
+  transition.styleTween = function(name, tween, priority) {
+    if (arguments.length < 3) priority = null;
+
+    /** @this {Element} */
+    function styleTween(d, i) {
+      var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name));
+      return f && function(t) {
+        this.style.setProperty(name, f(t), priority);
+      };
+    }
+
+    tweens["style." + name] = styleTween;
+    return transition;
+  };
+
+  transition.style = function(name, value, priority) {
+    if (arguments.length < 3) priority = null;
+    return transition.styleTween(name, d3_transitionTween(value), priority);
+  };
+
+  transition.text = function(value) {
+    tweens.text = function(d, i) {
+      this.textContent = typeof value === "function"
+          ? value.call(this, d, i)
+          : value;
+    };
+    return transition;
+  };
+
+  transition.select = function(query) {
+    var k, t = d3_transition(groups.select(query)).ease(ease);
+    k = -1; t.delay(function(d, i) { return delay[++k]; });
+    k = -1; t.duration(function(d, i) { return duration[++k]; });
+    return t;
+  };
+
+  transition.selectAll = function(query) {
+    var k, t = d3_transition(groups.selectAll(query)).ease(ease);
+    k = -1; t.delay(function(d, i) { return delay[i ? k : ++k]; })
+    k = -1; t.duration(function(d, i) { return duration[i ? k : ++k]; });
+    return t;
+  };
+
+  transition.remove = function() {
+    remove = true;
+    return transition;
+  };
+
+  transition.each = function(type, listener) {
+    event[type].add(listener);
+    return transition;
+  };
+
+  transition.call = d3_call;
+
+  return transition.delay(0).duration(250);
+}
+
+function d3_transitionTween(b) {
+  return typeof b === "function"
+      ? function(d, i, a) { var v = b.call(this, d, i) + ""; return a != v && d3.interpolate(a, v); }
+      : (b = b + "", function(d, i, a) { return a != b && d3.interpolate(a, b); });
+}
Index: /Dev/trunk/d3/src/core/uninterpolate.js
===================================================================
--- /Dev/trunk/d3/src/core/uninterpolate.js	(revision 76)
+++ /Dev/trunk/d3/src/core/uninterpolate.js	(revision 76)
@@ -0,0 +1,9 @@
+function d3_uninterpolateNumber(a, b) {
+  b = 1 / (b - (a = +a));
+  return function(x) { return (x - a) * b; };
+}
+
+function d3_uninterpolateClamp(a, b) {
+  b = 1 / (b - (a = +a));
+  return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); };
+}
Index: /Dev/trunk/d3/src/core/values.js
===================================================================
--- /Dev/trunk/d3/src/core/values.js	(revision 76)
+++ /Dev/trunk/d3/src/core/values.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.values = function(map) {
+  var values = [];
+  for (var key in map) values.push(map[key]);
+  return values;
+};
Index: /Dev/trunk/d3/src/core/xhr.js
===================================================================
--- /Dev/trunk/d3/src/core/xhr.js	(revision 76)
+++ /Dev/trunk/d3/src/core/xhr.js	(revision 76)
@@ -0,0 +1,10 @@
+d3.xhr = function(url, mime, callback) {
+  var req = new XMLHttpRequest;
+  if (arguments.length < 3) callback = mime;
+  else if (mime && req.overrideMimeType) req.overrideMimeType(mime);
+  req.open("GET", url, true);
+  req.onreadystatechange = function() {
+    if (req.readyState === 4) callback(req.status < 300 ? req : null);
+  };
+  req.send(null);
+};
Index: /Dev/trunk/d3/src/core/xml.js
===================================================================
--- /Dev/trunk/d3/src/core/xml.js	(revision 76)
+++ /Dev/trunk/d3/src/core/xml.js	(revision 76)
@@ -0,0 +1,10 @@
+d3.xml = function(url, mime, callback) {
+  function ready(req) {
+    callback(req && req.responseXML);
+  }
+  if (arguments.length < 3) {
+    callback = mime;
+    mime = null;
+  }
+  d3.xhr(url, mime, ready);
+};
Index: /Dev/trunk/d3/src/core/zip.js
===================================================================
--- /Dev/trunk/d3/src/core/zip.js	(revision 76)
+++ /Dev/trunk/d3/src/core/zip.js	(revision 76)
@@ -0,0 +1,13 @@
+d3.zip = function() {
+  if (!(n = arguments.length)) return [];
+  for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
+    for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
+      zip[j] = arguments[j][i];
+    }
+  }
+  return zips;
+};
+
+function d3_zipLength(d) {
+  return d.length;
+}
Index: /Dev/trunk/d3/src/csv/csv.js
===================================================================
--- /Dev/trunk/d3/src/csv/csv.js	(revision 76)
+++ /Dev/trunk/d3/src/csv/csv.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.csv = function(url, callback) {
+  d3.text(url, "text/csv", function(text) {
+    callback(text && d3.csv.parse(text));
+  });
+};
Index: /Dev/trunk/d3/src/csv/format.js
===================================================================
--- /Dev/trunk/d3/src/csv/format.js	(revision 76)
+++ /Dev/trunk/d3/src/csv/format.js	(revision 76)
@@ -0,0 +1,13 @@
+d3.csv.format = function(rows) {
+  return rows.map(d3_csv_formatRow).join("\n");
+};
+
+function d3_csv_formatRow(row) {
+  return row.map(d3_csv_formatValue).join(",");
+}
+
+function d3_csv_formatValue(text) {
+  return /[",\n]/.test(text)
+      ? "\"" + text.replace(/\"/g, "\"\"") + "\""
+      : text;
+}
Index: /Dev/trunk/d3/src/csv/parse.js
===================================================================
--- /Dev/trunk/d3/src/csv/parse.js	(revision 76)
+++ /Dev/trunk/d3/src/csv/parse.js	(revision 76)
@@ -0,0 +1,73 @@
+d3.csv.parse = function(text) {
+  var header;
+  return d3.csv.parseRows(text, function(row, i) {
+    if (i) {
+      var o = {}, j = -1, m = header.length;
+      while (++j < m) o[header[j]] = row[j];
+      return o;
+    } else {
+      header = row;
+      return null;
+    }
+  });
+};
+
+d3.csv.parseRows = function(text, f) {
+  var EOL = {}, // sentinel value for end-of-line
+      EOF = {}, // sentinel value for end-of-file
+      rows = [], // output rows
+      re = /\r\n|[,\r\n]/g, // field separator regex
+      n = 0, // the current line number
+      t, // the current token
+      eol; // is the current token followed by EOL?
+
+  re.lastIndex = 0; // work-around bug in FF 3.6
+
+  /** @private Returns the next token. */
+  function token() {
+    if (re.lastIndex === text.length) return EOF; // special case: end of file
+    if (eol) { eol = false; return EOL; } // special case: end of line
+
+    // special case: quotes
+    var j = re.lastIndex;
+    if (text.charCodeAt(j) === 34) {
+      var i = j;
+      while (i++ < text.length) {
+        if (text.charCodeAt(i) === 34) {
+          if (text.charCodeAt(i + 1) !== 34) break;
+          i++;
+        }
+      }
+      re.lastIndex = i + 2;
+      var c = text.charCodeAt(i + 1);
+      if (c === 13) {
+        eol = true;
+        if (text.charCodeAt(i + 2) === 10) re.lastIndex++;
+      } else if (c === 10) {
+        eol = true;
+      }
+      return text.substring(j + 1, i).replace(/""/g, "\"");
+    }
+
+    // common case
+    var m = re.exec(text);
+    if (m) {
+      eol = m[0].charCodeAt(0) !== 44;
+      return text.substring(j, m.index);
+    }
+    re.lastIndex = text.length;
+    return text.substring(j);
+  }
+
+  while ((t = token()) !== EOF) {
+    var a = [];
+    while ((t !== EOL) && (t !== EOF)) {
+      a.push(t);
+      t = token();
+    }
+    if (f && !(a = f(a, n++))) continue;
+    rows.push(a);
+  }
+
+  return rows;
+};
Index: /Dev/trunk/d3/src/end.js
===================================================================
--- /Dev/trunk/d3/src/end.js	(revision 76)
+++ /Dev/trunk/d3/src/end.js	(revision 76)
@@ -0,0 +1,1 @@
+})();
Index: /Dev/trunk/d3/src/externs.js
===================================================================
--- /Dev/trunk/d3/src/externs.js	(revision 76)
+++ /Dev/trunk/d3/src/externs.js	(revision 76)
@@ -0,0 +1,6 @@
+// JavaScript built-ins.
+var console,
+    JSON;
+
+// d3
+var d3;
Index: /Dev/trunk/d3/src/geo/albers.js
===================================================================
--- /Dev/trunk/d3/src/geo/albers.js	(revision 76)
+++ /Dev/trunk/d3/src/geo/albers.js	(revision 76)
@@ -0,0 +1,115 @@
+// Derived from Tom Carden's Albers implementation for Protovis.
+// http://gist.github.com/476238
+// http://mathworld.wolfram.com/AlbersEqual-AreaConicProjection.html
+
+d3.geo.albers = function() {
+  var origin = [-98, 38],
+      parallels = [29.5, 45.5],
+      scale = 1000,
+      translate = [480, 250],
+      lng0, // d3_radians * origin[0]
+      n,
+      C,
+      p0;
+
+  function albers(coordinates) {
+    var t = n * (d3_radians * coordinates[0] - lng0),
+        p = Math.sqrt(C - 2 * n * Math.sin(d3_radians * coordinates[1])) / n;
+    return [
+      scale * p * Math.sin(t) + translate[0],
+      scale * (p * Math.cos(t) - p0) + translate[1]
+    ];
+  }
+
+  function reload() {
+    var phi1 = d3_radians * parallels[0],
+        phi2 = d3_radians * parallels[1],
+        lat0 = d3_radians * origin[1],
+        s = Math.sin(phi1),
+        c = Math.cos(phi1);
+    lng0 = d3_radians * origin[0];
+    n = .5 * (s + Math.sin(phi2));
+    C = c * c + 2 * n * s;
+    p0 = Math.sqrt(C - 2 * n * Math.sin(lat0)) / n;
+    return albers;
+  }
+
+  albers.origin = function(x) {
+    if (!arguments.length) return origin;
+    origin = [+x[0], +x[1]];
+    return reload();
+  };
+
+  albers.parallels = function(x) {
+    if (!arguments.length) return parallels;
+    parallels = [+x[0], +x[1]];
+    return reload();
+  };
+
+  albers.scale = function(x) {
+    if (!arguments.length) return scale;
+    scale = +x;
+    return albers;
+  };
+
+  albers.translate = function(x) {
+    if (!arguments.length) return translate;
+    translate = [+x[0], +x[1]];
+    return albers;
+  };
+
+  return reload();
+};
+
+// A composite projection for the United States, 960x500. 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
+// TODO allow the composite projection to be rescaled?
+d3.geo.albersUsa = function() {
+  var lower48 = d3.geo.albers();
+
+  var alaska = d3.geo.albers()
+      .origin([-160, 60])
+      .parallels([55, 65]);
+
+  var hawaii = d3.geo.albers()
+      .origin([-160, 20])
+      .parallels([8, 18]);
+
+  var puertoRico = d3.geo.albers()
+      .origin([-60, 10])
+      .parallels([8, 18]);
+
+  function albersUsa(coordinates) {
+    var lon = coordinates[0],
+        lat = coordinates[1];
+    return (lat < 25
+        ? (lon < -100 ? hawaii : puertoRico)
+        : (lat > 50 ? alaska : lower48))(coordinates);
+  }
+
+  albersUsa.scale = function(x) {
+    if (!arguments.length) return lower48.scale();
+    lower48.scale(x);
+    alaska.scale(x * .6);
+    hawaii.scale(x);
+    puertoRico.scale(x * 1.5);
+    return albersUsa.translate(lower48.translate());
+  };
+
+  albersUsa.translate = function(x) {
+    if (!arguments.length) return lower48.translate();
+    var dz = lower48.scale() / 1000,
+        dx = x[0],
+        dy = x[1];
+    lower48.translate(x);
+    alaska.translate([dx - 400 * dz, dy + 170 * dz]);
+    hawaii.translate([dx - 190 * dz, dy + 200 * dz]);
+    puertoRico.translate([dx + 580 * dz, dy + 430 * dz]);
+    return albersUsa;
+  };
+
+  return albersUsa.scale(lower48.scale());
+};
+
+var d3_radians = Math.PI / 180;
Index: /Dev/trunk/d3/src/geo/azimuthal.js
===================================================================
--- /Dev/trunk/d3/src/geo/azimuthal.js	(revision 76)
+++ /Dev/trunk/d3/src/geo/azimuthal.js	(revision 76)
@@ -0,0 +1,57 @@
+// TODO clip input coordinates on opposite hemisphere
+d3.geo.azimuthal = function() {
+  var mode = "orthographic", // or stereographic
+      origin,
+      scale = 200,
+      translate = [480, 250],
+      x0,
+      y0,
+      cy0,
+      sy0;
+
+  function azimuthal(coordinates) {
+    var x1 = coordinates[0] * d3_radians - x0,
+        y1 = coordinates[1] * d3_radians,
+        cx1 = Math.cos(x1),
+        sx1 = Math.sin(x1),
+        cy1 = Math.cos(y1),
+        sy1 = Math.sin(y1),
+        k = mode == "stereographic" ? 1 / (1 + sy0 * sy1 + cy0 * cy1 * cx1) : 1,
+        x = k * cy1 * sx1,
+        y = k * (sy0 * cy1 * cx1 - cy0 * sy1);
+    return [
+      scale * x + translate[0],
+      scale * y + translate[1]
+    ];
+  }
+
+  azimuthal.mode = function(x) {
+    if (!arguments.length) return mode;
+    mode = x;
+    return azimuthal;
+  };
+
+  azimuthal.origin = function(x) {
+    if (!arguments.length) return origin;
+    origin = x;
+    x0 = origin[0] * d3_radians;
+    y0 = origin[1] * d3_radians;
+    cy0 = Math.cos(y0);
+    sy0 = Math.sin(y0);
+    return azimuthal;
+  };
+
+  azimuthal.scale = function(x) {
+    if (!arguments.length) return scale;
+    scale = +x;
+    return azimuthal;
+  };
+
+  azimuthal.translate = function(x) {
+    if (!arguments.length) return translate;
+    translate = [+x[0], +x[1]];
+    return azimuthal;
+  };
+
+  return azimuthal.origin([0, 0]);
+};
Index: /Dev/trunk/d3/src/geo/bounds.js
===================================================================
--- /Dev/trunk/d3/src/geo/bounds.js	(revision 76)
+++ /Dev/trunk/d3/src/geo/bounds.js	(revision 76)
@@ -0,0 +1,76 @@
+/**
+ * Given a GeoJSON object, returns the corresponding bounding box. The bounding
+ * box is represented by a two-dimensional array: [[left, bottom], [right,
+ * top]], where left is the minimum longitude, bottom is the minimum latitude,
+ * right is maximum longitude, and top is the maximum latitude.
+ */
+d3.geo.bounds = function(feature) {
+  var left = Infinity,
+      bottom = Infinity,
+      right = -Infinity,
+      top = -Infinity;
+  d3_geo_bounds(feature, function(x, y) {
+    if (x < left) left = x;
+    if (x > right) right = x;
+    if (y < bottom) bottom = y;
+    if (y > top) top = y;
+  });
+  return [[left, bottom], [right, top]];
+};
+
+function d3_geo_bounds(o, f) {
+  if (o.type in d3_geo_boundsTypes) d3_geo_boundsTypes[o.type](o, f);
+}
+
+var d3_geo_boundsTypes = {
+  Feature: d3_geo_boundsFeature,
+  FeatureCollection: d3_geo_boundsFeatureCollection,
+  LineString: d3_geo_boundsLineString,
+  MultiLineString: d3_geo_boundsMultiLineString,
+  MultiPoint: d3_geo_boundsLineString,
+  MultiPolygon: d3_geo_boundsMultiPolygon,
+  Point: d3_geo_boundsPoint,
+  Polygon: d3_geo_boundsPolygon
+};
+
+function d3_geo_boundsFeature(o, f) {
+  d3_geo_bounds(o.geometry, f);
+}
+
+function d3_geo_boundsFeatureCollection(o, f) {
+  for (var a = o.features, i = 0, n = a.length; i < n; i++) {
+    d3_geo_bounds(a[i].geometry, f);
+  }
+}
+
+function d3_geo_boundsLineString(o, f) {
+  for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+    f.apply(null, a[i]);
+  }
+}
+
+function d3_geo_boundsMultiLineString(o, f) {
+  for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+    for (var b = a[i], j = 0, m = b.length; j < m; j++) {
+      f.apply(null, b[j]);
+    }
+  }
+}
+
+function d3_geo_boundsMultiPolygon(o, f) {
+  for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) {
+    for (var b = a[i][0], j = 0, m = b.length; j < m; j++) {
+      f.apply(null, b[j]);
+    }
+  }
+}
+
+function d3_geo_boundsPoint(o, f) {
+  f.apply(null, o.coordinates);
+}
+
+function d3_geo_boundsPolygon(o, f) {
+  for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) {
+    f.apply(null, a[i]);
+  }
+}
Index: /Dev/trunk/d3/src/geo/geo.js
===================================================================
--- /Dev/trunk/d3/src/geo/geo.js	(revision 76)
+++ /Dev/trunk/d3/src/geo/geo.js	(revision 76)
@@ -0,0 +1,1 @@
+d3.geo = {};
Index: /Dev/trunk/d3/src/geo/mercator.js
===================================================================
--- /Dev/trunk/d3/src/geo/mercator.js	(revision 76)
+++ /Dev/trunk/d3/src/geo/mercator.js	(revision 76)
@@ -0,0 +1,27 @@
+d3.geo.mercator = function() {
+  var scale = 500,
+      translate = [480, 250];
+
+  function mercator(coordinates) {
+    var x = (coordinates[0]) / 360,
+        y = (-180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + coordinates[1] * Math.PI / 360))) / 360;
+    return [
+      scale * x + translate[0],
+      scale * Math.max(-.5, Math.min(.5, y)) + translate[1]
+    ];
+  }
+
+  mercator.scale = function(x) {
+    if (!arguments.length) return scale;
+    scale = +x;
+    return mercator;
+  };
+
+  mercator.translate = function(x) {
+    if (!arguments.length) return translate;
+    translate = [+x[0], +x[1]];
+    return mercator;
+  };
+
+  return mercator;
+};
Index: /Dev/trunk/d3/src/geo/path.js
===================================================================
--- /Dev/trunk/d3/src/geo/path.js	(revision 76)
+++ /Dev/trunk/d3/src/geo/path.js	(revision 76)
@@ -0,0 +1,289 @@
+/**
+ * Returns a function that, given a GeoJSON object (e.g., a feature), returns
+ * the corresponding SVG path. The function can be customized by overriding the
+ * projection. Point features are mapped to circles with a default radius of
+ * 4.5px; the radius can be specified either as a constant or a function that
+ * is evaluated per object.
+ */
+d3.geo.path = function() {
+  var pointRadius = 4.5,
+      pointCircle = d3_path_circle(pointRadius),
+      projection = d3.geo.albersUsa();
+
+  function path(d, i) {
+    if (typeof pointRadius === "function") {
+      pointCircle = d3_path_circle(pointRadius.apply(this, arguments));
+    }
+    return d3_geo_pathType(pathTypes, d);
+  }
+
+  function project(coordinates) {
+    return projection(coordinates).join(",");
+  }
+
+  var pathTypes = {
+
+    FeatureCollection: function(f) {
+      var path = [],
+          features = f.features,
+          i = -1, // features.index
+          n = features.length;
+      while (++i < n) path.push(d3_geo_pathType(pathTypes, features[i].geometry));
+      return path.join("");
+    },
+
+    Feature: function(f) {
+      return d3_geo_pathType(pathTypes, f.geometry);
+    },
+
+    Point: function(o) {
+      return "M" + project(o.coordinates) + pointCircle;
+    },
+
+    MultiPoint: function(o) {
+      var path = [],
+          coordinates = o.coordinates,
+          i = -1, // coordinates.index
+          n = coordinates.length;
+      while (++i < n) path.push("M", project(coordinates[i]), pointCircle);
+      return path.join("");
+    },
+
+    LineString: function(o) {
+      var path = ["M"],
+          coordinates = o.coordinates,
+          i = -1, // coordinates.index
+          n = coordinates.length;
+      while (++i < n) path.push(project(coordinates[i]), "L");
+      path.pop();
+      return path.join("");
+    },
+
+    MultiLineString: function(o) {
+      var path = [],
+          coordinates = o.coordinates,
+          i = -1, // coordinates.index
+          n = coordinates.length,
+          subcoordinates, // coordinates[i]
+          j, // subcoordinates.index
+          m; // subcoordinates.length
+      while (++i < n) {
+        subcoordinates = coordinates[i];
+        j = -1;
+        m = subcoordinates.length;
+        path.push("M");
+        while (++j < m) path.push(project(subcoordinates[j]), "L");
+        path.pop();
+      }
+      return path.join("");
+    },
+
+    Polygon: function(o) {
+      var path = [],
+          coordinates = o.coordinates,
+          i = -1, // coordinates.index
+          n = coordinates.length,
+          subcoordinates, // coordinates[i]
+          j, // subcoordinates.index
+          m; // subcoordinates.length
+      while (++i < n) {
+        subcoordinates = coordinates[i];
+        j = -1;
+        m = subcoordinates.length;
+        path.push("M");
+        while (++j < m) path.push(project(subcoordinates[j]), "L");
+        path[path.length - 1] = "Z";
+      }
+      return path.join("");
+    },
+
+    MultiPolygon: function(o) {
+      var path = [],
+          coordinates = o.coordinates,
+          i = -1, // coordinates index
+          n = coordinates.length,
+          subcoordinates, // coordinates[i]
+          j, // subcoordinates index
+          m, // subcoordinates.length
+          subsubcoordinates, // subcoordinates[j]
+          k, // subsubcoordinates index
+          p; // subsubcoordinates.length
+      while (++i < n) {
+        subcoordinates = coordinates[i];
+        j = -1;
+        m = subcoordinates.length;
+        while (++j < m) {
+          subsubcoordinates = subcoordinates[j];
+          k = -1;
+          p = subsubcoordinates.length - 1;
+          path.push("M");
+          while (++k < p) path.push(project(subsubcoordinates[k]), "L");
+          path[path.length - 1] = "Z";
+        }
+      }
+      return path.join("");
+    },
+
+    GeometryCollection: function(o) {
+      var path = [],
+          geometries = o.geometries,
+          i = -1, // geometries index
+          n = geometries.length;
+      while (++i < n) path.push(d3_geo_pathType(pathTypes, geometries[i]));
+      return path.join("");
+    }
+
+  };
+
+  var areaTypes = {
+
+    FeatureCollection: function(f) {
+      var area = 0,
+          features = f.features,
+          i = -1, // features.index
+          n = features.length;
+      while (++i < n) area += d3_geo_pathType(areaTypes, features[i]);
+      return area;
+    },
+
+    Feature: function(f) {
+      return d3_geo_pathType(areaTypes, f.geometry);
+    },
+
+    Point: d3_geo_pathZero,
+    MultiPoint: d3_geo_pathZero,
+    LineString: d3_geo_pathZero,
+    MultiLineString: d3_geo_pathZero,
+
+    Polygon: function(o) {
+      return polygonArea(o.coordinates);
+    },
+
+    MultiPolygon: function(o) {
+      var sum = 0,
+          coordinates = o.coordinates,
+          i = -1, // coordinates index
+          n = coordinates.length;
+      while (++i < n) sum += polygonArea(coordinates[i]);
+      return sum;
+    },
+
+    GeometryCollection: function(o) {
+      var sum = 0,
+          geometries = o.geometries,
+          i = -1, // geometries index
+          n = geometries.length;
+      while (++i < n) sum += d3_geo_pathType(areaTypes, geometries[i]);
+      return sum;
+    }
+
+  };
+
+  function polygonArea(coordinates) {
+    var sum = area(coordinates[0]), // exterior ring
+        i = 0, // coordinates.index
+        n = coordinates.length;
+    while (++i < n) sum -= area(coordinates[i]); // holes
+    return sum;
+  }
+
+  function polygonCentroid(coordinates) {
+    var polygon = d3.geom.polygon(coordinates[0].map(projection)), // exterior ring
+        centroid = polygon.centroid(1),
+        x = centroid[0],
+        y = centroid[1],
+        z = Math.abs(polygon.area()),
+        i = 0, // coordinates index
+        n = coordinates.length;
+    while (++i < n) {
+      polygon = d3.geom.polygon(coordinates[i].map(projection)); // holes
+      centroid = polygon.centroid(1);
+      x -= centroid[0];
+      y -= centroid[1];
+      z -= Math.abs(polygon.area());
+    }
+    return [x, y, 6 * z]; // weighted centroid
+  }
+
+  var centroidTypes = {
+
+    // TODO FeatureCollection
+    // TODO Point
+    // TODO MultiPoint
+    // TODO LineString
+    // TODO MultiLineString
+    // TODO GeometryCollection
+
+    Feature: function(f) {
+      return d3_geo_pathType(centroidTypes, f.geometry);
+    },
+
+    Polygon: function(o) {
+      var centroid = polygonCentroid(o.coordinates);
+      return [centroid[0] / centroid[2], centroid[1] / centroid[2]];
+    },
+
+    MultiPolygon: function(o) {
+      var area = 0,
+          coordinates = o.coordinates,
+          centroid,
+          x = 0,
+          y = 0,
+          z = 0,
+          i = -1, // coordinates index
+          n = coordinates.length;
+      while (++i < n) {
+        centroid = polygonCentroid(coordinates[i]);
+        x += centroid[0];
+        y += centroid[1];
+        z += centroid[2];
+      }
+      return [x / z, y / z];
+    }
+
+  };
+
+
+  function area(coordinates) {
+    return Math.abs(d3.geom.polygon(coordinates.map(projection)).area());
+  }
+
+  path.projection = function(x) {
+    projection = x;
+    return path;
+  };
+
+  path.area = function(d) {
+    return d3_geo_pathType(areaTypes, d);
+  };
+
+  path.centroid = function(d) {
+    return d3_geo_pathType(centroidTypes, d);
+  };
+
+  path.pointRadius = function(x) {
+    if (typeof x === "function") pointRadius = x;
+    else {
+      pointRadius = +x;
+      pointCircle = d3_path_circle(pointRadius);
+    }
+    return path;
+  };
+
+  return path;
+};
+
+function d3_path_circle(radius) {
+  return "m0," + radius
+      + "a" + radius + "," + radius + " 0 1,1 0," + (-2 * radius)
+      + "a" + radius + "," + radius + " 0 1,1 0," + (+2 * radius)
+      + "z";
+}
+
+function d3_geo_pathZero() {
+  return 0;
+}
+
+function d3_geo_pathType(types, o) {
+  return o && o.type in types ? types[o.type](o) : "";
+}
Index: /Dev/trunk/d3/src/geom/contour.js
===================================================================
--- /Dev/trunk/d3/src/geom/contour.js	(revision 76)
+++ /Dev/trunk/d3/src/geom/contour.js	(revision 76)
@@ -0,0 +1,78 @@
+/**
+ * Computes a contour for a given input grid function using the <a
+ * href="http://en.wikipedia.org/wiki/Marching_squares">marching
+ * squares</a> algorithm. Returns the contour polygon as an array of points.
+ *
+ * @param grid a two-input function(x, y) that returns true for values
+ * inside the contour and false for values outside the contour.
+ * @param start an optional starting point [x, y] on the grid.
+ * @returns polygon [[x1, y1], [x2, y2], âŠ]
+ */
+d3.geom.contour = function(grid, start) {
+  var s = start || d3_geom_contourStart(grid), // starting point
+      c = [],    // contour polygon
+      x = s[0],  // current x position
+      y = s[1],  // current y position
+      dx = 0,    // next x direction
+      dy = 0,    // next y direction
+      pdx = NaN, // previous x direction
+      pdy = NaN, // previous y direction
+      i = 0;
+
+  do {
+    // determine marching squares index
+    i = 0;
+    if (grid(x-1, y-1)) i += 1;
+    if (grid(x,   y-1)) i += 2;
+    if (grid(x-1, y  )) i += 4;
+    if (grid(x,   y  )) i += 8;
+
+    // determine next direction
+    if (i === 6) {
+      dx = pdy === -1 ? -1 : 1;
+      dy = 0;
+    } else if (i === 9) {
+      dx = 0;
+      dy = pdx === 1 ? -1 : 1;
+    } else {
+      dx = d3_geom_contourDx[i];
+      dy = d3_geom_contourDy[i];
+    }
+
+    // update contour polygon
+    if (dx != pdx && dy != pdy) {
+      c.push([x, y]);
+      pdx = dx;
+      pdy = dy;
+    }
+
+    x += dx;
+    y += dy;
+  } while (s[0] != x || s[1] != y);
+
+  return c;
+};
+
+// lookup tables for marching directions
+var d3_geom_contourDx = [1, 0, 1, 1,-1, 0,-1, 1,0, 0,0,0,-1, 0,-1,NaN],
+    d3_geom_contourDy = [0,-1, 0, 0, 0,-1, 0, 0,1,-1,1,1, 0,-1, 0,NaN];
+
+function d3_geom_contourStart(grid) {
+  var x = 0,
+      y = 0;
+
+  // search for a starting point; begin at origin
+  // and proceed along outward-expanding diagonals
+  while (true) {
+    if (grid(x,y)) {
+      return [x,y];
+    }
+    if (x === 0) {
+      x = y + 1;
+      y = 0;
+    } else {
+      x = x - 1;
+      y = y + 1;
+    }
+  }
+}
Index: /Dev/trunk/d3/src/geom/delaunay.js
===================================================================
--- /Dev/trunk/d3/src/geom/delaunay.js	(revision 76)
+++ /Dev/trunk/d3/src/geom/delaunay.js	(revision 76)
@@ -0,0 +1,31 @@
+/**
+* @param vertices [[x1, y1], [x2, y2], âŠ]
+* @returns triangles [[[x1, y1], [x2, y2], [x3, y3]], âŠ]
+ */
+d3.geom.delaunay = function(vertices) {
+  var edges = vertices.map(function() { return []; }),
+      triangles = [];
+
+  // Use the Voronoi tessellation to determine Delaunay edges.
+  d3_voronoi_tessellate(vertices, function(e) {
+    edges[e.region.l.index].push(vertices[e.region.r.index]);
+  });
+
+  // Reconnect the edges into counterclockwise triangles.
+  edges.forEach(function(edge, i) {
+    var v = vertices[i],
+        cx = v[0],
+        cy = v[1];
+    edge.forEach(function(v) {
+      v.angle = Math.atan2(v[0] - cx, v[1] - cy);
+    });
+    edge.sort(function(a, b) {
+      return a.angle - b.angle;
+    });
+    for (var j = 0, m = edge.length - 1; j < m; j++) {
+      triangles.push([v, edge[j], edge[j + 1]]);
+    }
+  });
+
+  return triangles;
+};
Index: /Dev/trunk/d3/src/geom/geom.js
===================================================================
--- /Dev/trunk/d3/src/geom/geom.js	(revision 76)
+++ /Dev/trunk/d3/src/geom/geom.js	(revision 76)
@@ -0,0 +1,1 @@
+d3.geom = {};
Index: /Dev/trunk/d3/src/geom/hull.js
===================================================================
--- /Dev/trunk/d3/src/geom/hull.js	(revision 76)
+++ /Dev/trunk/d3/src/geom/hull.js	(revision 76)
@@ -0,0 +1,98 @@
+/**
+ * Computes the 2D convex hull of a set of points using Graham's scanning
+ * algorithm. The algorithm has been implemented as described in Cormen,
+ * Leiserson, and Rivest's Introduction to Algorithms. The running time of
+ * this algorithm is O(n log n), where n is the number of input points.
+ *
+ * @param vertices [[x1, y1], [x2, y2], âŠ]
+ * @returns polygon [[x1, y1], [x2, y2], âŠ]
+ */
+d3.geom.hull = function(vertices) {
+  if (vertices.length < 3) return [];
+
+  var len = vertices.length,
+      plen = len - 1,
+      points = [],
+      stack = [],
+      i, j, h = 0, x1, y1, x2, y2, u, v, a, sp;
+
+  // find the starting ref point: leftmost point with the minimum y coord
+  for (i=1; i<len; ++i) {
+    if (vertices[i][1] < vertices[h][1]) {
+      h = i;
+    } else if (vertices[i][1] == vertices[h][1]) {
+      h = (vertices[i][0] < vertices[h][0] ? i : h);
+    }
+  }
+
+  // calculate polar angles from ref point and sort
+  for (i=0; i<len; ++i) {
+    if (i === h) continue;
+    y1 = vertices[i][1] - vertices[h][1];
+    x1 = vertices[i][0] - vertices[h][0];
+    points.push({angle: Math.atan2(y1, x1), index: i});
+  }
+  points.sort(function(a, b) { return a.angle - b.angle; });
+
+  // toss out duplicate angles
+  a = points[0].angle;
+  v = points[0].index;
+  u = 0;
+  for (i=1; i<plen; ++i) {
+    j = points[i].index;
+    if (a == points[i].angle) {
+      // keep angle for point most distant from the reference
+      x1 = vertices[v][0] - vertices[h][0];
+      y1 = vertices[v][1] - vertices[h][1];
+      x2 = vertices[j][0] - vertices[h][0];
+      y2 = vertices[j][1] - vertices[h][1];
+      if ((x1*x1 + y1*y1) >= (x2*x2 + y2*y2)) {
+        points[i].index = -1;
+      } else {
+        points[u].index = -1;
+        a = points[i].angle;
+        u = i;
+        v = j;
+      }
+    } else {
+      a = points[i].angle;
+      u = i;
+      v = j;
+    }
+  }
+
+  // initialize the stack
+  stack.push(h);
+  for (i=0, j=0; i<2; ++j) {
+    if (points[j].index !== -1) {
+      stack.push(points[j].index);
+      i++;
+    }
+  }
+  sp = stack.length;
+
+  // do graham's scan
+  for (; j<plen; ++j) {
+    if (points[j].index === -1) continue; // skip tossed out points
+    while (!d3_geom_hullCCW(stack[sp-2], stack[sp-1], points[j].index, vertices)) {
+      --sp;
+    }
+    stack[sp++] = points[j].index;
+  }
+
+  // construct the hull
+  var poly = [];
+  for (i=0; i<sp; ++i) {
+    poly.push(vertices[stack[i]]);
+  }
+  return poly;
+}
+
+// are three points in counter-clockwise order?
+function d3_geom_hullCCW(i1, i2, i3, v) {
+  var t, a, b, c, d, e, f;
+  t = v[i1]; a = t[0]; b = t[1];
+  t = v[i2]; c = t[0]; d = t[1];
+  t = v[i3]; e = t[0]; f = t[1];
+  return ((f-b)*(c-a) - (d-b)*(e-a)) > 0;
+}
Index: /Dev/trunk/d3/src/geom/polygon.js
===================================================================
--- /Dev/trunk/d3/src/geom/polygon.js	(revision 76)
+++ /Dev/trunk/d3/src/geom/polygon.js	(revision 76)
@@ -0,0 +1,88 @@
+// Note: requires coordinates to be counterclockwise and convex!
+d3.geom.polygon = function(coordinates) {
+
+  coordinates.area = function() {
+    var i = 0,
+        n = coordinates.length,
+        a = coordinates[n - 1][0] * coordinates[0][1],
+        b = coordinates[n - 1][1] * coordinates[0][0];
+    while (++i < n) {
+      a += coordinates[i - 1][0] * coordinates[i][1];
+      b += coordinates[i - 1][1] * coordinates[i][0];
+    }
+    return (b - a) * .5;
+  };
+
+  coordinates.centroid = function(k) {
+    var i = -1,
+        n = coordinates.length - 1,
+        x = 0,
+        y = 0,
+        a,
+        b,
+        c;
+    if (!arguments.length) k = 1 / (6 * coordinates.area());
+    while (++i < n) {
+      a = coordinates[i];
+      b = coordinates[i + 1];
+      c = a[0] * b[1] - b[0] * a[1];
+      x += (a[0] + b[0]) * c;
+      y += (a[1] + b[1]) * c;
+    }
+    return [x * k, y * k];
+  };
+
+  // The Sutherland-Hodgman clipping algorithm.
+  coordinates.clip = function(subject) {
+    var input,
+        i = -1,
+        n = coordinates.length,
+        j,
+        m,
+        a = coordinates[n - 1],
+        b,
+        c,
+        d;
+    while (++i < n) {
+      input = subject.slice();
+      subject.length = 0;
+      b = coordinates[i];
+      c = input[(m = input.length) - 1];
+      j = -1;
+      while (++j < m) {
+        d = input[j];
+        if (d3_geom_polygonInside(d, a, b)) {
+          if (!d3_geom_polygonInside(c, a, b)) {
+            subject.push(d3_geom_polygonIntersect(c, d, a, b));
+          }
+          subject.push(d);
+        } else if (d3_geom_polygonInside(c, a, b)) {
+          subject.push(d3_geom_polygonIntersect(c, d, a, b));
+        }
+        c = d;
+      }
+      a = b;
+    }
+    return subject;
+  };
+
+  return coordinates;
+};
+
+function d3_geom_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 d3_geom_polygonIntersect(c, d, a, b) {
+  var x1 = c[0], x2 = d[0], x3 = a[0], x4 = b[0],
+      y1 = c[1], y2 = d[1], y3 = a[1], y4 = b[1],
+      x13 = x1 - x3,
+      x21 = x2 - x1,
+      x43 = x4 - x3,
+      y13 = y1 - y3,
+      y21 = y2 - y1,
+      y43 = y4 - y3,
+      ua = (x43 * y13 - y43 * x13) / (y43 * x21 - x43 * y21);
+  return [x1 + ua * x21, y1 + ua * y21];
+}
Index: /Dev/trunk/d3/src/geom/quadtree.js
===================================================================
--- /Dev/trunk/d3/src/geom/quadtree.js	(revision 76)
+++ /Dev/trunk/d3/src/geom/quadtree.js	(revision 76)
@@ -0,0 +1,129 @@
+// Constructs a new quadtree for the specified array of points. A quadtree is a
+// two-dimensional recursive spatial subdivision. This implementation uses
+// square partitions, dividing each square into four equally-sized squares. Each
+// point exists in a unique node; if multiple points are in the same position,
+// some points may be stored on internal nodes rather than leaf nodes. Quadtrees
+// can be used to accelerate various spatial operations, such as the Barnes-Hut
+// approximation for computing n-body forces, or collision detection.
+d3.geom.quadtree = function(points, x1, y1, x2, y2) {
+  var p,
+      i = -1,
+      n = points.length;
+
+  // Type conversion for deprecated API.
+  if (n && isNaN(points[0].x)) points = points.map(d3_geom_quadtreePoint);
+
+  // Allow bounds to be specified explicitly.
+  if (arguments.length < 5) {
+    if (arguments.length === 3) {
+      y2 = x2 = y1;
+      y1 = x1;
+    } else {
+      x1 = y1 = Infinity;
+      x2 = y2 = -Infinity;
+
+      // Compute bounds.
+      while (++i < n) {
+        p = points[i];
+        if (p.x < x1) x1 = p.x;
+        if (p.y < y1) y1 = p.y;
+        if (p.x > x2) x2 = p.x;
+        if (p.y > y2) y2 = p.y;
+      }
+
+      // Squarify the bounds.
+      var dx = x2 - x1,
+          dy = y2 - y1;
+      if (dx > dy) y2 = y1 + dx;
+      else x2 = x1 + dy;
+    }
+  }
+
+  // Recursively inserts the specified point p at the node n or one of its
+  // descendants. The bounds are defined by [x1, x2] and [y1, y2].
+  function insert(n, p, x1, y1, x2, y2) {
+    if (isNaN(p.x) || isNaN(p.y)) return; // ignore invalid points
+    if (n.leaf) {
+      var v = n.point;
+      if (v) {
+        // If the point at this leaf node is at the same position as the new
+        // point we are adding, we leave the point associated with the
+        // internal node while adding the new point to a child node. This
+        // avoids infinite recursion.
+        if ((Math.abs(v.x - p.x) + Math.abs(v.y - p.y)) < .01) {
+          insertChild(n, p, x1, y1, x2, y2);
+        } else {
+          n.point = null;
+          insertChild(n, v, x1, y1, x2, y2);
+          insertChild(n, p, x1, y1, x2, y2);
+        }
+      } else {
+        n.point = p;
+      }
+    } else {
+      insertChild(n, p, x1, y1, x2, y2);
+    }
+  }
+
+  // Recursively inserts the specified point p into a descendant of node n. The
+  // bounds are defined by [x1, x2] and [y1, y2].
+  function insertChild(n, p, x1, y1, x2, y2) {
+    // Compute the split point, and the quadrant in which to insert p.
+    var sx = (x1 + x2) * .5,
+        sy = (y1 + y2) * .5,
+        right = p.x >= sx,
+        bottom = p.y >= sy,
+        i = (bottom << 1) + right;
+
+    // Recursively insert into the child node.
+    n.leaf = false;
+    n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
+
+    // Update the bounds as we recurse.
+    if (right) x1 = sx; else x2 = sx;
+    if (bottom) y1 = sy; else y2 = sy;
+    insert(n, p, x1, y1, x2, y2);
+  }
+
+  // Create the root node.
+  var root = d3_geom_quadtreeNode();
+
+  root.add = function(p) {
+    insert(root, p, x1, y1, x2, y2);
+  };
+
+  root.visit = function(f) {
+    d3_geom_quadtreeVisit(f, root, x1, y1, x2, y2);
+  };
+
+  // Insert all points.
+  points.forEach(root.add);
+  return root;
+};
+
+function d3_geom_quadtreeNode() {
+  return {
+    leaf: true,
+    nodes: [],
+    point: null
+  };
+}
+
+function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
+  if (!f(node, x1, y1, x2, y2)) {
+    var sx = (x1 + x2) * .5,
+        sy = (y1 + y2) * .5,
+        children = node.nodes;
+    if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
+    if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
+    if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
+    if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
+  }
+}
+
+function d3_geom_quadtreePoint(p) {
+  return {
+    x: p[0],
+    y: p[1]
+  };
+}
Index: /Dev/trunk/d3/src/geom/voronoi.js
===================================================================
--- /Dev/trunk/d3/src/geom/voronoi.js	(revision 76)
+++ /Dev/trunk/d3/src/geom/voronoi.js	(revision 76)
@@ -0,0 +1,399 @@
+// Adapted from Nicolas Garcia Belmonte's JIT implementation:
+// http://blog.thejit.org/2010/02/12/voronoi-tessellation/
+// http://blog.thejit.org/assets/voronoijs/voronoi.js
+// See lib/jit/LICENSE for details.
+
+/**
+ * @param vertices [[x1, y1], [x2, y2], âŠ]
+ * @returns polygons [[[x1, y1], [x2, y2], âŠ], âŠ]
+ */
+d3.geom.voronoi = function(vertices) {
+  var polygons = vertices.map(function() { return []; });
+
+  // Note: we expect the caller to clip the polygons, if needed.
+  d3_voronoi_tessellate(vertices, function(e) {
+    var s1,
+        s2,
+        x1,
+        x2,
+        y1,
+        y2;
+    if (e.a === 1 && e.b >= 0) {
+      s1 = e.ep.r;
+      s2 = e.ep.l;
+    } else {
+      s1 = e.ep.l;
+      s2 = e.ep.r;
+    }
+    if (e.a === 1) {
+      y1 = s1 ? s1.y : -1e6;
+      x1 = e.c - e.b * y1;
+      y2 = s2 ? s2.y : 1e6;
+      x2 = e.c - e.b * y2;
+    } else {
+      x1 = s1 ? s1.x : -1e6;
+      y1 = e.c - e.a * x1;
+      x2 = s2 ? s2.x : 1e6;
+      y2 = e.c - e.a * x2;
+    }
+    var v1 = [x1, y1],
+        v2 = [x2, y2];
+    polygons[e.region.l.index].push(v1, v2);
+    polygons[e.region.r.index].push(v1, v2);
+  });
+
+  // Reconnect the polygon segments into counterclockwise loops.
+  return polygons.map(function(polygon, i) {
+    var cx = vertices[i][0],
+        cy = vertices[i][1];
+    polygon.forEach(function(v) {
+      v.angle = Math.atan2(v[0] - cx, v[1] - cy);
+    });
+    return polygon.sort(function(a, b) {
+      return a.angle - b.angle;
+    }).filter(function(d, i) {
+      return !i || (d.angle - polygon[i - 1].angle > 1e-10);
+    });
+  });
+};
+
+var d3_voronoi_opposite = {"l": "r", "r": "l"};
+
+function d3_voronoi_tessellate(vertices, callback) {
+
+  var Sites = {
+    list: vertices
+      .map(function(v, i) {
+        return {
+          index: i,
+          x: v[0],
+          y: v[1]
+        };
+      })
+      .sort(function(a, b) {
+        return a.y < b.y ? -1
+          : a.y > b.y ? 1
+          : a.x < b.x ? -1
+          : a.x > b.x ? 1
+          : 0;
+      }),
+    bottomSite: null
+  };
+
+  var EdgeList = {
+    list: [],
+    leftEnd: null,
+    rightEnd: null,
+
+    init: function() {
+      EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l");
+      EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l");
+      EdgeList.leftEnd.r = EdgeList.rightEnd;
+      EdgeList.rightEnd.l = EdgeList.leftEnd;
+      EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd);
+    },
+
+    createHalfEdge: function(edge, side) {
+      return {
+        edge: edge,
+        side: side,
+        vertex: null,
+        "l": null,
+        "r": null
+      };
+    },
+
+    insert: function(lb, he) {
+      he.l = lb;
+      he.r = lb.r;
+      lb.r.l = he;
+      lb.r = he;
+    },
+
+    leftBound: function(p) {
+      var he = EdgeList.leftEnd;
+      do {
+        he = he.r;
+      } while (he != EdgeList.rightEnd && Geom.rightOf(he, p));
+      he = he.l;
+      return he;
+    },
+
+    del: function(he) {
+      he.l.r = he.r;
+      he.r.l = he.l;
+      he.edge = null;
+    },
+
+    right: function(he) {
+      return he.r;
+    },
+
+    left: function(he) {
+      return he.l;
+    },
+
+    leftRegion: function(he) {
+      return he.edge == null
+          ? Sites.bottomSite
+          : he.edge.region[he.side];
+    },
+
+    rightRegion: function(he) {
+      return he.edge == null
+          ? Sites.bottomSite
+          : he.edge.region[d3_voronoi_opposite[he.side]];
+    }
+  };
+
+  var Geom = {
+
+    bisect: function(s1, s2) {
+      var newEdge = {
+        region: {"l": s1, "r": s2},
+        ep: {"l": null, "r": null}
+      };
+
+      var dx = s2.x - s1.x,
+          dy = s2.y - s1.y,
+          adx = dx > 0 ? dx : -dx,
+          ady = dy > 0 ? dy : -dy;
+
+      newEdge.c = s1.x * dx + s1.y * dy
+          + (dx * dx + dy * dy) * .5;
+
+      if (adx > ady) {
+        newEdge.a = 1;
+        newEdge.b = dy / dx;
+        newEdge.c /= dx;
+      } else {
+        newEdge.b = 1;
+        newEdge.a = dx / dy;
+        newEdge.c /= dy;
+      }
+
+      return newEdge;
+    },
+
+    intersect: function(el1, el2) {
+      var e1 = el1.edge,
+          e2 = el2.edge;
+      if (!e1 || !e2 || (e1.region.r == e2.region.r)) {
+        return null;
+      }
+      var d = (e1.a * e2.b) - (e1.b * e2.a);
+      if (Math.abs(d) < 1e-10) {
+        return null;
+      }
+      var xint = (e1.c * e2.b - e2.c * e1.b) / d,
+          yint = (e2.c * e1.a - e1.c * e2.a) / d,
+          e1r = e1.region.r,
+          e2r = e2.region.r,
+          el,
+          e;
+      if ((e1r.y < e2r.y) ||
+         (e1r.y == e2r.y && e1r.x < e2r.x)) {
+        el = el1;
+        e = e1;
+      } else {
+        el = el2;
+        e = e2;
+      }
+      var rightOfSite = (xint >= e.region.r.x);
+      if ((rightOfSite && (el.side === "l")) ||
+        (!rightOfSite && (el.side === "r"))) {
+        return null;
+      }
+      return {
+        x: xint,
+        y: yint
+      };
+    },
+
+    rightOf: function(he, p) {
+      var e = he.edge,
+          topsite = e.region.r,
+          rightOfSite = (p.x > topsite.x);
+
+      if (rightOfSite && (he.side === "l")) {
+        return 1;
+      }
+      if (!rightOfSite && (he.side === "r")) {
+        return 0;
+      }
+      if (e.a === 1) {
+        var dyp = p.y - topsite.y,
+            dxp = p.x - topsite.x,
+            fast = 0,
+            above = 0;
+
+        if ((!rightOfSite && (e.b < 0)) ||
+          (rightOfSite && (e.b >= 0))) {
+          above = fast = (dyp >= e.b * dxp);
+        } else {
+          above = ((p.x + p.y * e.b) > e.c);
+          if (e.b < 0) {
+            above = !above;
+          }
+          if (!above) {
+            fast = 1;
+          }
+        }
+        if (!fast) {
+          var dxs = topsite.x - e.region.l.x;
+          above = (e.b * (dxp * dxp - dyp * dyp)) <
+            (dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b));
+
+          if (e.b < 0) {
+            above = !above;
+          }
+        }
+      } else /* e.b == 1 */ {
+        var yl = e.c - e.a * p.x,
+            t1 = p.y - yl,
+            t2 = p.x - topsite.x,
+            t3 = yl - topsite.y;
+
+        above = (t1 * t1) > (t2 * t2 + t3 * t3);
+      }
+      return he.side === "l" ? above : !above;
+    },
+
+    endPoint: function(edge, side, site) {
+      edge.ep[side] = site;
+      if (!edge.ep[d3_voronoi_opposite[side]]) return;
+      callback(edge);
+    },
+
+    distance: function(s, t) {
+      var dx = s.x - t.x,
+          dy = s.y - t.y;
+      return Math.sqrt(dx * dx + dy * dy);
+    }
+  };
+
+  var EventQueue = {
+    list: [],
+
+    insert: function(he, site, offset) {
+      he.vertex = site;
+      he.ystar = site.y + offset;
+      for (var i=0, list=EventQueue.list, l=list.length; i<l; i++) {
+        var next = list[i];
+        if (he.ystar > next.ystar ||
+          (he.ystar == next.ystar &&
+          site.x > next.vertex.x)) {
+          continue;
+        } else {
+          break;
+        }
+      }
+      list.splice(i, 0, he);
+    },
+
+    del: function(he) {
+      for (var i=0, ls=EventQueue.list, l=ls.length; i<l && (ls[i] != he); ++i) {}
+      ls.splice(i, 1);
+    },
+
+    empty: function() { return EventQueue.list.length === 0; },
+
+    nextEvent: function(he) {
+      for (var i=0, ls=EventQueue.list, l=ls.length; i<l; ++i) {
+        if (ls[i] == he) return ls[i+1];
+      }
+      return null;
+    },
+
+    min: function() {
+      var elem = EventQueue.list[0];
+      return {
+        x: elem.vertex.x,
+        y: elem.ystar
+      };
+    },
+
+    extractMin: function() {
+      return EventQueue.list.shift();
+    }
+  };
+
+  EdgeList.init();
+  Sites.bottomSite = Sites.list.shift();
+
+  var newSite = Sites.list.shift(), newIntStar;
+  var lbnd, rbnd, llbnd, rrbnd, bisector;
+  var bot, top, temp, p, v;
+  var e, pm;
+
+  while (true) {
+    if (!EventQueue.empty()) {
+      newIntStar = EventQueue.min();
+    }
+    if (newSite && (EventQueue.empty()
+      || newSite.y < newIntStar.y
+      || (newSite.y == newIntStar.y
+      && newSite.x < newIntStar.x))) { //new site is smallest
+      lbnd = EdgeList.leftBound(newSite);
+      rbnd = EdgeList.right(lbnd);
+      bot = EdgeList.rightRegion(lbnd);
+      e = Geom.bisect(bot, newSite);
+      bisector = EdgeList.createHalfEdge(e, "l");
+      EdgeList.insert(lbnd, bisector);
+      p = Geom.intersect(lbnd, bisector);
+      if (p) {
+        EventQueue.del(lbnd);
+        EventQueue.insert(lbnd, p, Geom.distance(p, newSite));
+      }
+      lbnd = bisector;
+      bisector = EdgeList.createHalfEdge(e, "r");
+      EdgeList.insert(lbnd, bisector);
+      p = Geom.intersect(bisector, rbnd);
+      if (p) {
+        EventQueue.insert(bisector, p, Geom.distance(p, newSite));
+      }
+      newSite = Sites.list.shift();
+    } else if (!EventQueue.empty()) { //intersection is smallest
+      lbnd = EventQueue.extractMin();
+      llbnd = EdgeList.left(lbnd);
+      rbnd = EdgeList.right(lbnd);
+      rrbnd = EdgeList.right(rbnd);
+      bot = EdgeList.leftRegion(lbnd);
+      top = EdgeList.rightRegion(rbnd);
+      v = lbnd.vertex;
+      Geom.endPoint(lbnd.edge, lbnd.side, v);
+      Geom.endPoint(rbnd.edge, rbnd.side, v);
+      EdgeList.del(lbnd);
+      EventQueue.del(rbnd);
+      EdgeList.del(rbnd);
+      pm = "l";
+      if (bot.y > top.y) {
+        temp = bot;
+        bot = top;
+        top = temp;
+        pm = "r";
+      }
+      e = Geom.bisect(bot, top);
+      bisector = EdgeList.createHalfEdge(e, pm);
+      EdgeList.insert(llbnd, bisector);
+      Geom.endPoint(e, d3_voronoi_opposite[pm], v);
+      p = Geom.intersect(llbnd, bisector);
+      if (p) {
+        EventQueue.del(llbnd);
+        EventQueue.insert(llbnd, p, Geom.distance(p, bot));
+      }
+      p = Geom.intersect(bisector, rrbnd);
+      if (p) {
+        EventQueue.insert(bisector, p, Geom.distance(p, bot));
+      }
+    } else {
+      break;
+    }
+  }//end while
+
+  for (lbnd = EdgeList.right(EdgeList.leftEnd);
+      lbnd != EdgeList.rightEnd;
+      lbnd = EdgeList.right(lbnd)) {
+    callback(lbnd.edge);
+  }
+}
Index: /Dev/trunk/d3/src/layout/bundle.js
===================================================================
--- /Dev/trunk/d3/src/layout/bundle.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/bundle.js	(revision 76)
@@ -0,0 +1,57 @@
+// Implements hierarchical edge bundling using Holten's algorithm. For each
+// input link, a path is computed that travels through the tree, up the parent
+// hierarchy to the least common ancestor, and then back down to the destination
+// node. Each path is simply an array of nodes.
+d3.layout.bundle = function() {
+  return function(links) {
+    var paths = [],
+        i = -1,
+        n = links.length;
+    while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
+    return paths;
+  };
+};
+
+function d3_layout_bundlePath(link) {
+  var start = link.source,
+      end = link.target,
+      lca = d3_layout_bundleLeastCommonAncestor(start, end),
+      points = [start];
+  while (start !== lca) {
+    start = start.parent;
+    points.push(start);
+  }
+  var k = points.length;
+  while (end !== lca) {
+    points.splice(k, 0, end);
+    end = end.parent;
+  }
+  return points;
+}
+
+function d3_layout_bundleAncestors(node) {
+  var ancestors = [],
+      parent = node.parent;
+  while (parent != null) {
+    ancestors.push(node);
+    node = parent;
+    parent = parent.parent;
+  }
+  ancestors.push(node);
+  return ancestors;
+}
+
+function d3_layout_bundleLeastCommonAncestor(a, b) {
+  if (a === b) return a;
+  var aNodes = d3_layout_bundleAncestors(a),
+      bNodes = d3_layout_bundleAncestors(b),
+      aNode = aNodes.pop(),
+      bNode = bNodes.pop(),
+      sharedNode = null;
+  while (aNode === bNode) {
+    sharedNode = aNode;
+    aNode = aNodes.pop();
+    bNode = bNodes.pop();
+  }
+  return sharedNode;
+}
Index: /Dev/trunk/d3/src/layout/chord.js
===================================================================
--- /Dev/trunk/d3/src/layout/chord.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/chord.js	(revision 76)
@@ -0,0 +1,148 @@
+d3.layout.chord = function() {
+  var chord = {},
+      chords,
+      groups,
+      matrix,
+      n,
+      padding = 0,
+      sortGroups,
+      sortSubgroups,
+      sortChords;
+
+  function relayout() {
+    var subgroups = {},
+        groupSums = [],
+        groupIndex = d3.range(n),
+        subgroupIndex = [],
+        k,
+        x,
+        x0,
+        i,
+        j;
+
+    chords = [];
+    groups = [];
+
+    // 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(d3.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 = (2 * Math.PI - padding * n) / k;
+
+    // Compute the start and end angle for each group and subgroup.
+    x = 0, i = -1; while (++i < n) {
+      x0 = x, j = -1; while (++j < n) {
+        var di = groupIndex[i],
+            dj = subgroupIndex[i][j],
+            v = matrix[di][dj];
+        subgroups[di + "-" + dj] = {
+          index: di,
+          subindex: dj,
+          startAngle: x,
+          endAngle: x += v * k,
+          value: v
+        };
+      }
+      groups.push({
+        index: di,
+        startAngle: x0,
+        endAngle: x,
+        value: (x - x0) / k
+      });
+      x += padding;
+    }
+
+    // Generate chords for each (non-empty) subgroup-subgroup link.
+    i = -1; while (++i < n) {
+      j = i - 1; while (++j < n) {
+        var source = subgroups[i + "-" + j],
+            target = subgroups[j + "-" + i];
+        if (source.value || target.value) {
+          chords.push(source.value < target.value
+              ? {source: target, target: source}
+              : {source: source, target: target})
+        }
+      }
+    }
+
+    if (sortChords) resort();
+  }
+
+  function resort() {
+    chords.sort(function(a, b) {
+      return sortChords(a.target.value, b.target.value);
+    });
+  }
+
+  chord.matrix = function(x) {
+    if (!arguments.length) return matrix;
+    n = (matrix = x) && matrix.length;
+    chords = groups = null;
+    return chord;
+  };
+
+  chord.padding = function(x) {
+    if (!arguments.length) return padding;
+    padding = x;
+    chords = groups = null;
+    return chord;
+  };
+
+  chord.sortGroups = function(x) {
+    if (!arguments.length) return sortGroups;
+    sortGroups = x;
+    chords = groups = null;
+    return chord;
+  };
+
+  chord.sortSubgroups = function(x) {
+    if (!arguments.length) return sortSubgroups;
+    sortSubgroups = x;
+    chords = null;
+    return chord;
+  };
+
+  chord.sortChords = function(x) {
+    if (!arguments.length) return sortChords;
+    sortChords = x;
+    if (chords) resort();
+    return chord;
+  };
+
+  chord.chords = function() {
+    if (!chords) relayout();
+    return chords;
+  };
+
+  chord.groups = function() {
+    if (!groups) relayout();
+    return groups;
+  };
+
+  return chord;
+};
Index: /Dev/trunk/d3/src/layout/cluster.js
===================================================================
--- /Dev/trunk/d3/src/layout/cluster.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/cluster.js	(revision 76)
@@ -0,0 +1,77 @@
+// Implements a hierarchical layout using the cluster (or dendogram) algorithm.
+d3.layout.cluster = function() {
+  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
+      separation = d3_layout_treeSeparation,
+      size = [1, 1]; // width, height
+
+  function cluster(d, i) {
+    var nodes = hierarchy.call(this, d, i),
+        root = nodes[0],
+        previousNode,
+        x = 0,
+        kx,
+        ky;
+
+    // First walk, computing the initial x & y values.
+    d3_layout_treeVisitAfter(root, function(node) {
+      if (node.children) {
+        node.x = d3_layout_clusterX(node.children);
+        node.y = d3_layout_clusterY(node.children);
+      } else {
+        node.x = previousNode ? x += separation(node, previousNode) : 0;
+        node.y = 0;
+        previousNode = node;
+      }
+    });
+
+    // Compute the left-most, right-most, and depth-most nodes for extents.
+    var left = d3_layout_clusterLeft(root),
+        right = d3_layout_clusterRight(root),
+        x0 = left.x - separation(left, right) / 2,
+        x1 = right.x + separation(right, left) / 2;
+
+    // Second walk, normalizing x & y to the desired size.
+    d3_layout_treeVisitAfter(root, function(node) {
+      node.x = (node.x - x0) / (x1 - x0) * size[0];
+      node.y = (1 - node.y / root.y) * size[1];
+    });
+
+    return nodes;
+  }
+
+  cluster.separation = function(x) {
+    if (!arguments.length) return separation;
+    separation = x;
+    return cluster;
+  };
+
+  cluster.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return cluster;
+  };
+
+  return d3_layout_hierarchyRebind(cluster, hierarchy);
+};
+
+function d3_layout_clusterY(children) {
+  return 1 + d3.max(children, function(child) {
+    return child.y;
+  });
+}
+
+function d3_layout_clusterX(children) {
+  return children.reduce(function(x, child) {
+    return x + child.x;
+  }, 0) / children.length;
+}
+
+function d3_layout_clusterLeft(node) {
+  var children = node.children;
+  return children ? d3_layout_clusterLeft(children[0]) : node;
+}
+
+function d3_layout_clusterRight(node) {
+  var children = node.children;
+  return children ? d3_layout_clusterRight(children[children.length - 1]) : node;
+}
Index: /Dev/trunk/d3/src/layout/force.js
===================================================================
--- /Dev/trunk/d3/src/layout/force.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/force.js	(revision 76)
@@ -0,0 +1,390 @@
+// A rudimentary force layout using Gauss-Seidel.
+d3.layout.force = function() {
+  var force = {},
+      event = d3.dispatch("tick"),
+      size = [1, 1],
+      alpha,
+      friction = .9,
+      linkDistance = d3_layout_forceLinkDistance,
+      linkStrength = d3_layout_forceLinkStrength,
+      charge = -30,
+      gravity = .1,
+      theta = .8,
+      interval,
+      nodes = [],
+      links = [],
+      distances,
+      strengths;
+
+  function repulse(node, kc) {
+    return function(quad, x1, y1, x2, y2) {
+      if (quad.point !== node) {
+        var dx = quad.cx - node.x,
+            dy = quad.cy - node.y,
+            dn = 1 / Math.sqrt(dx * dx + dy * dy);
+
+        /* Barnes-Hut criterion. */
+        if ((x2 - x1) * dn < theta) {
+          var k = kc * quad.count * dn * dn;
+          node.x += dx * k;
+          node.y += dy * k;
+          return true;
+        }
+
+        if (quad.point && isFinite(dn)) {
+          var k = kc * dn * dn;
+          node.x += dx * k;
+          node.y += dy * k;
+        }
+      }
+    };
+  }
+
+  function tick() {
+    var n = nodes.length,
+        m = links.length,
+        q = d3.geom.quadtree(nodes),
+        i, // current index
+        o, // current object
+        s, // current source
+        t, // current target
+        l, // current distance
+        x, // x-distance
+        y; // y-distance
+
+    // gauss-seidel relaxation for links
+    for (i = 0; i < m; ++i) {
+      o = links[i];
+      s = o.source;
+      t = o.target;
+      x = t.x - s.x;
+      y = t.y - s.y;
+      if (l = (x * x + y * y)) {
+        l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
+        x *= l;
+        y *= l;
+        t.x -= x;
+        t.y -= y;
+        s.x += x;
+        s.y += y;
+      }
+    }
+
+    // apply gravity forces
+    var kg = alpha * gravity;
+    x = size[0] / 2;
+    y = size[1] / 2;
+    i = -1; while (++i < n) {
+      o = nodes[i];
+      o.x += (x - o.x) * kg;
+      o.y += (y - o.y) * kg;
+    }
+
+    // compute quadtree center of mass
+    d3_layout_forceAccumulate(q);
+
+    // apply charge forces
+    var kc = alpha * charge;
+    i = -1; while (++i < n) {
+      q.visit(repulse(nodes[i], kc));
+    }
+
+    // position verlet integration
+    i = -1; while (++i < n) {
+      o = nodes[i];
+      if (o.fixed) {
+        o.x = o.px;
+        o.y = o.py;
+      } else {
+        o.x -= (o.px - (o.px = o.x)) * friction;
+        o.y -= (o.py - (o.py = o.y)) * friction;
+      }
+    }
+
+    event.tick.dispatch({type: "tick", alpha: alpha});
+
+    // simulated annealing, basically
+    return (alpha *= .99) < .005;
+  }
+
+  force.on = function(type, listener) {
+    event[type].add(listener);
+    return force;
+  };
+
+  force.nodes = function(x) {
+    if (!arguments.length) return nodes;
+    nodes = x;
+    return force;
+  };
+
+  force.links = function(x) {
+    if (!arguments.length) return links;
+    links = x;
+    return force;
+  };
+
+  force.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return force;
+  };
+
+  force.linkDistance = function(x) {
+    if (!arguments.length) return linkDistance;
+    linkDistance = d3.functor(x);
+    return force;
+  };
+
+  // For backwards-compatibility.
+  force.distance = force.linkDistance;
+
+  force.linkStrength = function(x) {
+    if (!arguments.length) return linkStrength;
+    linkStrength = d3.functor(x);
+    return force;
+  };
+
+  force.friction = function(x) {
+    if (!arguments.length) return friction;
+    friction = x;
+    return force;
+  };
+
+  force.charge = function(x) {
+    if (!arguments.length) return charge;
+    charge = x;
+    return force;
+  };
+
+  force.gravity = function(x) {
+    if (!arguments.length) return gravity;
+    gravity = x;
+    return force;
+  };
+
+  force.theta = function(x) {
+    if (!arguments.length) return theta;
+    theta = x;
+    return force;
+  };
+
+  force.start = function() {
+    var i,
+        j,
+        n = nodes.length,
+        m = links.length,
+        w = size[0],
+        h = size[1],
+        neighbors,
+        o;
+
+    for (i = 0; i < n; ++i) {
+      (o = nodes[i]).index = i;
+    }
+
+    distances = [];
+    strengths = [];
+    for (i = 0; i < m; ++i) {
+      o = links[i];
+      if (typeof o.source == "number") o.source = nodes[o.source];
+      if (typeof o.target == "number") o.target = nodes[o.target];
+      distances[i] = linkDistance.call(this, o, i);
+      strengths[i] = linkStrength.call(this, o, i);
+    }
+
+    for (i = 0; i < n; ++i) {
+      o = nodes[i];
+      if (isNaN(o.x)) o.x = position("x", w);
+      if (isNaN(o.y)) o.y = position("y", h);
+      if (isNaN(o.px)) o.px = o.x;
+      if (isNaN(o.py)) o.py = o.y;
+    }
+
+    // initialize node position based on first neighbor
+    function position(dimension, size) {
+      var neighbors = neighbor(i),
+          j = -1,
+          m = neighbors.length,
+          x;
+      while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x;
+      return Math.random() * size;
+    }
+
+    // initialize neighbors lazily
+    function neighbor() {
+      if (!neighbors) {
+        neighbors = [];
+        for (j = 0; j < n; ++j) {
+          neighbors[j] = [];
+        }
+        for (j = 0; j < m; ++j) {
+          var o = links[j];
+          neighbors[o.source.index].push(o.target);
+          neighbors[o.target.index].push(o.source);
+        }
+      }
+      return neighbors[i];
+    }
+
+    return force.resume();
+  };
+
+  force.resume = function() {
+    alpha = .1;
+    d3.timer(tick);
+    return force;
+  };
+
+  force.stop = function() {
+    alpha = 0;
+    return force;
+  };
+
+  // use `node.call(force.drag)` to make nodes draggable
+  force.drag = function() {
+
+    this
+      .on("mouseover.force", d3_layout_forceDragOver)
+      .on("mouseout.force", d3_layout_forceDragOut)
+      .on("mousedown.force", dragdown)
+      .on("touchstart.force", dragdown);
+
+    d3.select(window)
+      .on("mousemove.force", d3_layout_forceDragMove)
+      .on("touchmove.force", d3_layout_forceDragMove)
+      .on("mouseup.force", d3_layout_forceDragUp, true)
+      .on("touchend.force", d3_layout_forceDragUp, true)
+      .on("click.force", d3_layout_forceDragClick, true);
+
+    return force;
+  };
+
+  function dragdown(d, i) {
+    var m = d3_layout_forcePoint(this.parentNode);
+    (d3_layout_forceDragNode = d).fixed = true;
+    d3_layout_forceDragMoved = false;
+    d3_layout_forceDragElement = this;
+    d3_layout_forceDragForce = force;
+    d3_layout_forceDragOffset = [m[0] - d.x, m[1] - d.y];
+    d3_layout_forceCancel();
+  }
+
+  return force;
+};
+
+var d3_layout_forceDragForce,
+    d3_layout_forceDragNode,
+    d3_layout_forceDragMoved,
+    d3_layout_forceDragOffset,
+    d3_layout_forceStopClick,
+    d3_layout_forceDragElement;
+
+function d3_layout_forceDragOver(d) {
+  d.fixed = true;
+}
+
+function d3_layout_forceDragOut(d) {
+  if (d !== d3_layout_forceDragNode) {
+    d.fixed = false;
+  }
+}
+
+function d3_layout_forcePoint(container) {
+  return d3.event.touches
+      ? d3.svg.touches(container)[0]
+      : d3.svg.mouse(container);
+}
+
+function d3_layout_forceDragMove() {
+  if (!d3_layout_forceDragNode) return;
+  var parent = d3_layout_forceDragElement.parentNode;
+
+  // O NOES! The drag element was removed from the DOM.
+  if (!parent) {
+    d3_layout_forceDragNode.fixed = false;
+    d3_layout_forceDragOffset = d3_layout_forceDragNode = d3_layout_forceDragElement = null;
+    return;
+  }
+
+  var m = d3_layout_forcePoint(parent);
+  d3_layout_forceDragMoved = true;
+  d3_layout_forceDragNode.px = m[0] - d3_layout_forceDragOffset[0];
+  d3_layout_forceDragNode.py = m[1] - d3_layout_forceDragOffset[1];
+  d3_layout_forceCancel();
+  d3_layout_forceDragForce.resume(); // restart annealing
+}
+
+function d3_layout_forceDragUp() {
+  if (!d3_layout_forceDragNode) return;
+
+  // If the node was moved, prevent the mouseup from propagating.
+  // Also prevent the subsequent click from propagating (e.g., for anchors).
+  if (d3_layout_forceDragMoved) {
+    d3_layout_forceStopClick = true;
+    d3_layout_forceCancel();
+  }
+
+  // Don't trigger this for touchend.
+  if (d3.event.type === "mouseup") {
+    d3_layout_forceDragMove();
+  }
+
+  d3_layout_forceDragNode.fixed = false;
+  d3_layout_forceDragForce =
+  d3_layout_forceDragOffset =
+  d3_layout_forceDragNode =
+  d3_layout_forceDragElement = null;
+}
+
+function d3_layout_forceDragClick() {
+  if (d3_layout_forceStopClick) {
+    d3_layout_forceCancel();
+    d3_layout_forceStopClick = false;
+  }
+}
+
+function d3_layout_forceCancel() {
+  d3.event.stopPropagation();
+  d3.event.preventDefault();
+}
+
+function d3_layout_forceAccumulate(quad) {
+  var cx = 0,
+      cy = 0;
+  quad.count = 0;
+  if (!quad.leaf) {
+    var nodes = quad.nodes,
+        n = nodes.length,
+        i = -1,
+        c;
+    while (++i < n) {
+      c = nodes[i];
+      if (c == null) continue;
+      d3_layout_forceAccumulate(c);
+      quad.count += c.count;
+      cx += c.count * c.cx;
+      cy += c.count * c.cy;
+    }
+  }
+  if (quad.point) {
+    // jitter internal nodes that are coincident
+    if (!quad.leaf) {
+      quad.point.x += Math.random() - .5;
+      quad.point.y += Math.random() - .5;
+    }
+    quad.count++;
+    cx += quad.point.x;
+    cy += quad.point.y;
+  }
+  quad.cx = cx / quad.count;
+  quad.cy = cy / quad.count;
+}
+
+function d3_layout_forceLinkDistance(link) {
+  return 20;
+}
+
+function d3_layout_forceLinkStrength(link) {
+  return 1;
+}
Index: /Dev/trunk/d3/src/layout/hierarchy.js
===================================================================
--- /Dev/trunk/d3/src/layout/hierarchy.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/hierarchy.js	(revision 76)
@@ -0,0 +1,120 @@
+d3.layout.hierarchy = function() {
+  var sort = d3_layout_hierarchySort,
+      children = d3_layout_hierarchyChildren,
+      value = d3_layout_hierarchyValue;
+
+  // Recursively compute the node depth and value.
+  // Also converts the data representation into a standard hierarchy structure.
+  function recurse(data, depth, nodes) {
+    var childs = children.call(hierarchy, data, depth),
+        node = d3_layout_hierarchyInline ? data : {data: data};
+    node.depth = depth;
+    nodes.push(node);
+    if (childs) {
+      var i = -1,
+          n = childs.length,
+          c = node.children = [],
+          v = 0,
+          j = depth + 1;
+      while (++i < n) {
+        d = recurse(childs[i], j, nodes);
+        d.parent = node;
+        c.push(d);
+        v += d.value;
+      }
+      if (sort) c.sort(sort);
+      if (value) node.value = v;
+    } else if (value) {
+      node.value = value.call(hierarchy, data, depth);
+    }
+    return node;
+  }
+
+  // Recursively re-evaluates the node value.
+  function revalue(node, depth) {
+    var children = node.children,
+        v = 0;
+    if (children) {
+      var i = -1,
+          n = children.length,
+          j = depth + 1;
+      while (++i < n) v += revalue(children[i], j);
+    } else if (value) {
+      v = value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth);
+    }
+    if (value) node.value = v;
+    return v;
+  }
+
+  function hierarchy(d) {
+    var nodes = [];
+    recurse(d, 0, nodes);
+    return nodes;
+  }
+
+  hierarchy.sort = function(x) {
+    if (!arguments.length) return sort;
+    sort = x;
+    return hierarchy;
+  };
+
+  hierarchy.children = function(x) {
+    if (!arguments.length) return children;
+    children = x;
+    return hierarchy;
+  };
+
+  hierarchy.value = function(x) {
+    if (!arguments.length) return value;
+    value = x;
+    return hierarchy;
+  };
+
+  // Re-evaluates the `value` property for the specified hierarchy.
+  hierarchy.revalue = function(root) {
+    revalue(root, 0);
+    return root;
+  };
+
+  return hierarchy;
+};
+
+// A method assignment helper for hierarchy subclasses.
+function d3_layout_hierarchyRebind(object, hierarchy) {
+  object.sort = d3.rebind(object, hierarchy.sort);
+  object.children = d3.rebind(object, hierarchy.children);
+  object.links = d3_layout_hierarchyLinks;
+  object.value = d3.rebind(object, hierarchy.value);
+
+  // If the new API is used, enabling inlining.
+  object.nodes = function(d) {
+    d3_layout_hierarchyInline = true;
+    return (object.nodes = object)(d);
+  };
+
+  return object;
+}
+
+function d3_layout_hierarchyChildren(d) {
+  return d.children;
+}
+
+function d3_layout_hierarchyValue(d) {
+  return d.value;
+}
+
+function d3_layout_hierarchySort(a, b) {
+  return b.value - a.value;
+}
+
+// Returns an array source+target objects for the specified nodes.
+function d3_layout_hierarchyLinks(nodes) {
+  return d3.merge(nodes.map(function(parent) {
+    return (parent.children || []).map(function(child) {
+      return {source: parent, target: child};
+    });
+  }));
+}
+
+// For backwards-compatibility, don't enable inlining by default.
+var d3_layout_hierarchyInline = false;
Index: /Dev/trunk/d3/src/layout/histogram.js
===================================================================
--- /Dev/trunk/d3/src/layout/histogram.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/histogram.js	(revision 76)
@@ -0,0 +1,102 @@
+d3.layout.histogram = function() {
+  var frequency = true,
+      valuer = Number,
+      ranger = d3_layout_histogramRange,
+      binner = d3_layout_histogramBinSturges;
+
+  function histogram(data, i) {
+    var bins = [],
+        values = data.map(valuer, this),
+        range = ranger.call(this, values, i),
+        thresholds = binner.call(this, range, values, i),
+        bin,
+        i = -1,
+        n = values.length,
+        m = thresholds.length - 1,
+        k = frequency ? 1 : 1 / n,
+        x;
+
+    // Initialize the bins.
+    while (++i < m) {
+      bin = bins[i] = [];
+      bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
+      bin.y = 0;
+    }
+
+    // Fill the bins, ignoring values outside the range.
+    i = -1; while(++i < n) {
+      x = values[i];
+      if ((x >= range[0]) && (x <= range[1])) {
+        bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
+        bin.y += k;
+        bin.push(data[i]);
+      }
+    }
+
+    return bins;
+  }
+
+  // Specifies how to extract a value from the associated data. The default
+  // value function is `Number`, which is equivalent to the identity function.
+  histogram.value = function(x) {
+    if (!arguments.length) return valuer;
+    valuer = x;
+    return histogram;
+  };
+
+  // Specifies the range of the histogram. Values outside the specified range
+  // will be ignored. The argument `x` may be specified either as a two-element
+  // array representing the minimum and maximum value of the range, or as a
+  // function that returns the range given the array of values and the current
+  // index `i`. The default range is the extent (minimum and maximum) of the
+  // values.
+  histogram.range = function(x) {
+    if (!arguments.length) return ranger;
+    ranger = d3.functor(x);
+    return histogram;
+  };
+
+  // Specifies how to bin values in the histogram. The argument `x` may be
+  // specified as a number, in which case the range of values will be split
+  // uniformly into the given number of bins. Or, `x` may be an array of
+  // threshold values, defining the bins; the specified array must contain the
+  // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x`
+  // may be a function which is evaluated, being passed the range, the array of
+  // values, and the current index `i`, returning an array of thresholds. The
+  // default bin function will divide the values into uniform bins using
+  // Sturges' formula.
+  histogram.bins = function(x) {
+    if (!arguments.length) return binner;
+    binner = typeof x === "number"
+        ? function(range) { return d3_layout_histogramBinFixed(range, x); }
+        : d3.functor(x);
+    return histogram;
+  };
+
+  // Specifies whether the histogram's `y` value is a count (frequency) or a
+  // probability (density). The default value is true.
+  histogram.frequency = function(x) {
+    if (!arguments.length) return frequency;
+    frequency = !!x;
+    return histogram;
+  };
+
+  return histogram;
+};
+
+function d3_layout_histogramBinSturges(range, values) {
+  return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
+}
+
+function d3_layout_histogramBinFixed(range, n) {
+  var x = -1,
+      b = +range[0],
+      m = (range[1] - b) / n,
+      f = [];
+  while (++x <= n) f[x] = m * x + b;
+  return f;
+}
+
+function d3_layout_histogramRange(values) {
+  return [d3.min(values), d3.max(values)];
+}
Index: /Dev/trunk/d3/src/layout/layout.js
===================================================================
--- /Dev/trunk/d3/src/layout/layout.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/layout.js	(revision 76)
@@ -0,0 +1,1 @@
+d3.layout = {};
Index: /Dev/trunk/d3/src/layout/pack.js
===================================================================
--- /Dev/trunk/d3/src/layout/pack.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/pack.js	(revision 76)
@@ -0,0 +1,200 @@
+d3.layout.pack = function() {
+  var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort),
+      size = [1, 1];
+
+  function pack(d, i) {
+    var nodes = hierarchy.call(this, d, i),
+        root = nodes[0];
+
+    // Recursively compute the layout.
+    root.x = 0;
+    root.y = 0;
+    d3_layout_packTree(root);
+
+    // Scale the layout to fit the requested size.
+    var w = size[0],
+        h = size[1],
+        k = 1 / Math.max(2 * root.r / w, 2 * root.r / h);
+    d3_layout_packTransform(root, w / 2, h / 2, k);
+
+    return nodes;
+  }
+
+  pack.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return pack;
+  };
+
+  return d3_layout_hierarchyRebind(pack, hierarchy);
+};
+
+function d3_layout_packSort(a, b) {
+  return a.value - b.value;
+}
+
+function d3_layout_packInsert(a, b) {
+  var c = a._pack_next;
+  a._pack_next = b;
+  b._pack_prev = a;
+  b._pack_next = c;
+  c._pack_prev = b;
+}
+
+function d3_layout_packSplice(a, b) {
+  a._pack_next = b;
+  b._pack_prev = a;
+}
+
+function d3_layout_packIntersects(a, b) {
+  var dx = b.x - a.x,
+      dy = b.y - a.y,
+      dr = a.r + b.r;
+  return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
+}
+
+function d3_layout_packCircle(nodes) {
+  var xMin = Infinity,
+      xMax = -Infinity,
+      yMin = Infinity,
+      yMax = -Infinity,
+      n = nodes.length,
+      a, b, c, j, k;
+
+  function bound(node) {
+    xMin = Math.min(node.x - node.r, xMin);
+    xMax = Math.max(node.x + node.r, xMax);
+    yMin = Math.min(node.y - node.r, yMin);
+    yMax = Math.max(node.y + node.r, yMax);
+  }
+
+  // Create node links.
+  nodes.forEach(d3_layout_packLink);
+
+  // Create first node.
+  a = nodes[0];
+  a.x = -a.r;
+  a.y = 0;
+  bound(a);
+
+  // Create second node.
+  if (n > 1) {
+    b = nodes[1];
+    b.x = b.r;
+    b.y = 0;
+    bound(b);
+
+    // Create third node and build chain.
+    if (n > 2) {
+      c = nodes[2];
+      d3_layout_packPlace(a, b, c);
+      bound(c);
+      d3_layout_packInsert(a, c);
+      a._pack_prev = c;
+      d3_layout_packInsert(c, b);
+      b = a._pack_next;
+
+      // Now iterate through the rest.
+      for (var i = 3; i < n; i++) {
+        d3_layout_packPlace(a, b, c = nodes[i]);
+
+        // Search for the closest intersection.
+        var isect = 0, s1 = 1, s2 = 1;
+        for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
+          if (d3_layout_packIntersects(j, c)) {
+            isect = 1;
+            break;
+          }
+        }
+        if (isect == 1) {
+          for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
+            if (d3_layout_packIntersects(k, c)) {
+              if (s2 < s1) {
+                isect = -1;
+                j = k;
+              }
+              break;
+            }
+          }
+        }
+
+        // Update node chain.
+        if (isect == 0) {
+          d3_layout_packInsert(a, c);
+          b = c;
+          bound(c);
+        } else if (isect > 0) {
+          d3_layout_packSplice(a, j);
+          b = j;
+          i--;
+        } else { // isect < 0
+          d3_layout_packSplice(j, b);
+          a = j;
+          i--;
+        }
+      }
+    }
+  }
+
+  // Re-center the circles and return the encompassing radius.
+  var cx = (xMin + xMax) / 2,
+      cy = (yMin + yMax) / 2,
+      cr = 0;
+  for (var i = 0; i < n; i++) {
+    var node = nodes[i];
+    node.x -= cx;
+    node.y -= cy;
+    cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y));
+  }
+
+  // Remove node links.
+  nodes.forEach(d3_layout_packUnlink);
+
+  return cr;
+}
+
+function d3_layout_packLink(node) {
+  node._pack_next = node._pack_prev = node;
+}
+
+function d3_layout_packUnlink(node) {
+  delete node._pack_next;
+  delete node._pack_prev;
+}
+
+function d3_layout_packTree(node) {
+  var children = node.children;
+  if (children) {
+    children.forEach(d3_layout_packTree);
+    node.r = d3_layout_packCircle(children);
+  } else {
+    node.r = Math.sqrt(node.value);
+  }
+}
+
+function d3_layout_packTransform(node, x, y, k) {
+  var children = node.children;
+  node.x = (x += k * node.x);
+  node.y = (y += k * node.y);
+  node.r *= k;
+  if (children) {
+    var i = -1, n = children.length;
+    while (++i < n) d3_layout_packTransform(children[i], x, y, k);
+  }
+}
+
+function d3_layout_packPlace(a, b, c) {
+  var da = b.r + c.r,
+      db = a.r + c.r,
+      dx = b.x - a.x,
+      dy = b.y - a.y,
+      dc = Math.sqrt(dx * dx + dy * dy),
+      cos = (db * db + dc * dc - da * da) / (2 * db * dc),
+      theta = Math.acos(cos),
+      x = cos * db,
+      h = Math.sin(theta) * db;
+  dx /= dc;
+  dy /= dc;
+  c.x = a.x + x * dx + h * dy;
+  c.y = a.y + x * dy - h * dx;
+}
Index: /Dev/trunk/d3/src/layout/partition.js
===================================================================
--- /Dev/trunk/d3/src/layout/partition.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/partition.js	(revision 76)
@@ -0,0 +1,48 @@
+d3.layout.partition = function() {
+  var hierarchy = d3.layout.hierarchy(),
+      size = [1, 1]; // width, height
+
+  function position(node, x, dx, dy) {
+    var children = node.children;
+    node.x = x;
+    node.y = node.depth * dy;
+    node.dx = dx;
+    node.dy = dy;
+    if (children) {
+      var i = -1,
+          n = children.length,
+          c,
+          d;
+      dx /= node.value;
+      while (++i < n) {
+        position(c = children[i], x, d = c.value * dx, dy);
+        x += d;
+      }
+    }
+  }
+
+  function depth(node) {
+    var children = node.children,
+        d = 0;
+    if (children) {
+      var i = -1,
+          n = children.length;
+      while (++i < n) d = Math.max(d, depth(children[i]));
+    }
+    return 1 + d;
+  }
+
+  function partition(d, i) {
+    var nodes = hierarchy.call(this, d, i);
+    position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
+    return nodes;
+  }
+
+  partition.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return partition;
+  };
+
+  return d3_layout_hierarchyRebind(partition, hierarchy);
+};
Index: /Dev/trunk/d3/src/layout/pie.js
===================================================================
--- /Dev/trunk/d3/src/layout/pie.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/pie.js	(revision 76)
@@ -0,0 +1,95 @@
+d3.layout.pie = function() {
+  var value = Number,
+      sort = null,
+      startAngle = 0,
+      endAngle = 2 * Math.PI;
+
+  function pie(data, i) {
+
+    // Compute the start angle.
+    var a = +(typeof startAngle === "function"
+        ? startAngle.apply(this, arguments)
+        : startAngle);
+
+    // Compute the angular range (end - start).
+    var k = (typeof endAngle === "function"
+        ? endAngle.apply(this, arguments)
+        : endAngle) - startAngle;
+
+    // Optionally sort the data.
+    var index = d3.range(data.length);
+    if (sort != null) index.sort(function(i, j) {
+      return sort(data[i], data[j]);
+    });
+
+    // Compute the numeric values for each data element.
+    var values = data.map(value);
+
+    // Convert k into a scale factor from value to angle, using the sum.
+    k /= values.reduce(function(p, d) { return p + d; }, 0);
+
+    // Compute the arcs!
+    var arcs = index.map(function(i) {
+      return {
+        data: data[i],
+        value: d = values[i],
+        startAngle: a,
+        endAngle: a += d * k
+      };
+    });
+
+    // Return the arcs in the original data's order.
+    return data.map(function(d, i) {
+      return arcs[index[i]];
+    });
+  }
+
+  /**
+   * Specifies the value function *x*, which returns a nonnegative numeric value
+   * for each datum. The default value function is `Number`. The value function
+   * is passed two arguments: the current datum and the current index.
+   */
+  pie.value = function(x) {
+    if (!arguments.length) return value;
+    value = x;
+    return pie;
+  };
+
+  /**
+   * Specifies a sort comparison operator *x*. The comparator is passed two data
+   * elements from the data array, a and b; it returns a negative value if a is
+   * less than b, a positive value if a is greater than b, and zero if a equals
+   * b.
+   */
+  pie.sort = function(x) {
+    if (!arguments.length) return sort;
+    sort = x;
+    return pie;
+  };
+
+  /**
+   * Specifies the overall start angle of the pie chart. Defaults to 0. The
+   * start angle can be specified either as a constant or as a function; in the
+   * case of a function, it is evaluated once per array (as opposed to per
+   * element).
+   */
+  pie.startAngle = function(x) {
+    if (!arguments.length) return startAngle;
+    startAngle = x;
+    return pie;
+  };
+
+  /**
+   * Specifies the overall end angle of the pie chart. Defaults to 2Ï. The
+   * end angle can be specified either as a constant or as a function; in the
+   * case of a function, it is evaluated once per array (as opposed to per
+   * element).
+   */
+  pie.endAngle = function(x) {
+    if (!arguments.length) return endAngle;
+    endAngle = x;
+    return pie;
+  };
+
+  return pie;
+};
Index: /Dev/trunk/d3/src/layout/stack.js
===================================================================
--- /Dev/trunk/d3/src/layout/stack.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/stack.js	(revision 76)
@@ -0,0 +1,237 @@
+// data is two-dimensional array of x,y; we populate y0
+d3.layout.stack = function() {
+  var values = Object,
+      order = d3_layout_stackOrders["default"],
+      offset = d3_layout_stackOffsets["zero"],
+      out = d3_layout_stackOut,
+      x = d3_layout_stackX,
+      y = d3_layout_stackY;
+
+  function stack(data, index) {
+
+    // Convert series to canonical two-dimensional representation.
+    var series = data.map(function(d, i) {
+      return values.call(stack, d, i);
+    });
+
+    // Convert each series to canonical [[x,y]] representation.
+    var points = series.map(function(d, i) {
+      return d.map(function(v, i) {
+        return [x.call(stack, v, i), y.call(stack, v, i)];
+      });
+    });
+
+    // Compute the order of series, and permute them.
+    var orders = order.call(stack, points, index);
+    series = d3.permute(series, orders);
+    points = d3.permute(points, orders);
+
+    // Compute the baselineâŠ
+    var offsets = offset.call(stack, points, index);
+
+    // And propagate it to other series.
+    var n = series.length,
+        m = series[0].length,
+        i,
+        j,
+        o;
+    for (j = 0; j < m; ++j) {
+      out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
+      for (i = 1; i < n; ++i) {
+        out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
+      }
+    }
+
+    return data;
+  }
+
+  stack.values = function(x) {
+    if (!arguments.length) return values;
+    values = x;
+    return stack;
+  };
+
+  stack.order = function(x) {
+    if (!arguments.length) return order;
+    order = typeof x === "function" ? x : d3_layout_stackOrders[x];
+    return stack;
+  };
+
+  stack.offset = function(x) {
+    if (!arguments.length) return offset;
+    offset = typeof x === "function" ? x : d3_layout_stackOffsets[x];
+    return stack;
+  };
+
+  stack.x = function(z) {
+    if (!arguments.length) return x;
+    x = z;
+    return stack;
+  };
+
+  stack.y = function(z) {
+    if (!arguments.length) return y;
+    y = z;
+    return stack;
+  };
+
+  stack.out = function(z) {
+    if (!arguments.length) return out;
+    out = z;
+    return stack;
+  };
+
+  return stack;
+}
+
+function d3_layout_stackX(d) {
+  return d.x;
+}
+
+function d3_layout_stackY(d) {
+  return d.y;
+}
+
+function d3_layout_stackOut(d, y0, y) {
+  d.y0 = y0;
+  d.y = y;
+}
+
+var d3_layout_stackOrders = {
+
+  "inside-out": function(data) {
+    var n = data.length,
+        i,
+        j,
+        max = data.map(d3_layout_stackMaxIndex),
+        sums = data.map(d3_layout_stackReduceSum),
+        index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }),
+        top = 0,
+        bottom = 0,
+        tops = [],
+        bottoms = [];
+    for (i = 0; i < n; ++i) {
+      j = index[i];
+      if (top < bottom) {
+        top += sums[j];
+        tops.push(j);
+      } else {
+        bottom += sums[j];
+        bottoms.push(j);
+      }
+    }
+    return bottoms.reverse().concat(tops);
+  },
+
+  "reverse": function(data) {
+    return d3.range(data.length).reverse();
+  },
+
+  "default": function(data) {
+    return d3.range(data.length);
+  }
+
+};
+
+var d3_layout_stackOffsets = {
+
+  "silhouette": function(data) {
+    var n = data.length,
+        m = data[0].length,
+        sums = [],
+        max = 0,
+        i,
+        j,
+        o,
+        y0 = [];
+    for (j = 0; j < m; ++j) {
+      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+      if (o > max) max = o;
+      sums.push(o);
+    }
+    for (j = 0; j < m; ++j) {
+      y0[j] = (max - sums[j]) / 2;
+    }
+    return y0;
+  },
+
+  "wiggle": function(data) {
+    var n = data.length,
+        x = data[0],
+        m = x.length,
+        max = 0,
+        i,
+        j,
+        k,
+        s1,
+        s2,
+        s3,
+        dx,
+        o,
+        o0,
+        y0 = [];
+    y0[0] = o = o0 = 0;
+    for (j = 1; j < m; ++j) {
+      for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
+      for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
+        for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
+          s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
+        }
+        s2 += s3 * data[i][j][1];
+      }
+      y0[j] = o -= s1 ? s2 / s1 * dx : 0;
+      if (o < o0) o0 = o;
+    }
+    for (j = 0; j < m; ++j) y0[j] -= o0;
+    return y0;
+  },
+
+  "expand": function(data) {
+    var n = data.length,
+        m = data[0].length,
+        k = 1 / n,
+        i,
+        j,
+        o,
+        y0 = [];
+    for (j = 0; j < m; ++j) {
+      for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+      if (o) for (i = 0; i < n; i++) data[i][j][1] /= o;
+      else for (i = 0; i < n; i++) data[i][j][1] = k;
+    }
+    for (j = 0; j < m; ++j) y0[j] = 0;
+    return y0;
+  },
+
+  "zero": function(data) {
+    var j = -1,
+        m = data[0].length,
+        y0 = [];
+    while (++j < m) y0[j] = 0;
+    return y0;
+  }
+
+};
+
+function d3_layout_stackMaxIndex(array) {
+  var i = 1,
+      j = 0,
+      v = array[0][1],
+      k,
+      n = array.length;
+  for (; i < n; ++i) {
+    if ((k = array[i][1]) > v) {
+      j = i;
+      v = k;
+    }
+  }
+  return j;
+}
+
+function d3_layout_stackReduceSum(d) {
+  return d.reduce(d3_layout_stackSum, 0);
+}
+
+function d3_layout_stackSum(p, d) {
+  return p + d[1];
+}
Index: /Dev/trunk/d3/src/layout/tree.js
===================================================================
--- /Dev/trunk/d3/src/layout/tree.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/tree.js	(revision 76)
@@ -0,0 +1,234 @@
+// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
+d3.layout.tree = function() {
+  var hierarchy = d3.layout.hierarchy().sort(null).value(null),
+      separation = d3_layout_treeSeparation,
+      size = [1, 1]; // width, height
+
+  function tree(d, i) {
+    var nodes = hierarchy.call(this, d, i),
+        root = nodes[0];
+
+    function firstWalk(node, previousSibling) {
+      var children = node.children,
+          layout = node._tree;
+      if (children) {
+        var n = children.length,
+            firstChild = children[0],
+            previousChild,
+            ancestor = firstChild,
+            child,
+            i = -1;
+        while (++i < n) {
+          child = children[i];
+          firstWalk(child, previousChild);
+          ancestor = apportion(child, previousChild, ancestor);
+          previousChild = child;
+        }
+        d3_layout_treeShift(node);
+        var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
+        if (previousSibling) {
+          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
+          layout.mod = layout.prelim - midpoint;
+        } else {
+          layout.prelim = midpoint;
+        }
+      } else {
+        if (previousSibling) {
+          layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
+        }
+      }
+    }
+
+    function secondWalk(node, x) {
+      node.x = node._tree.prelim + x;
+      var children = node.children;
+      if (children) {
+        var i = -1,
+            n = children.length;
+        x += node._tree.mod;
+        while (++i < n) {
+          secondWalk(children[i], x);
+        }
+      }
+    }
+
+    function apportion(node, previousSibling, ancestor) {
+      if (previousSibling) {
+        var vip = node,
+            vop = node,
+            vim = previousSibling,
+            vom = node.parent.children[0],
+            sip = vip._tree.mod,
+            sop = vop._tree.mod,
+            sim = vim._tree.mod,
+            som = vom._tree.mod,
+            shift;
+        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
+          vom = d3_layout_treeLeft(vom);
+          vop = d3_layout_treeRight(vop);
+          vop._tree.ancestor = node;
+          shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
+          if (shift > 0) {
+            d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
+            sip += shift;
+            sop += shift;
+          }
+          sim += vim._tree.mod;
+          sip += vip._tree.mod;
+          som += vom._tree.mod;
+          sop += vop._tree.mod;
+        }
+        if (vim && !d3_layout_treeRight(vop)) {
+          vop._tree.thread = vim;
+          vop._tree.mod += sim - sop;
+        }
+        if (vip && !d3_layout_treeLeft(vom)) {
+          vom._tree.thread = vip;
+          vom._tree.mod += sip - som;
+          ancestor = node;
+        }
+      }
+      return ancestor;
+    }
+
+    // Initialize temporary layout variables.
+    d3_layout_treeVisitAfter(root, function(node, previousSibling) {
+      node._tree = {
+        ancestor: node,
+        prelim: 0,
+        mod: 0,
+        change: 0,
+        shift: 0,
+        number: previousSibling ? previousSibling._tree.number + 1 : 0
+      };
+    });
+
+    // Compute the layout using Buchheim et al.'s algorithm.
+    firstWalk(root);
+    secondWalk(root, -root._tree.prelim);
+
+    // Compute the left-most, right-most, and depth-most nodes for extents.
+    var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost),
+        right = d3_layout_treeSearch(root, d3_layout_treeRightmost),
+        deep = d3_layout_treeSearch(root, d3_layout_treeDeepest),
+        x0 = left.x - separation(left, right) / 2,
+        x1 = right.x + separation(right, left) / 2,
+        y1 = deep.depth || 1;
+
+    // Clear temporary layout variables; transform x and y.
+    d3_layout_treeVisitAfter(root, function(node) {
+      node.x = (node.x - x0) / (x1 - x0) * size[0];
+      node.y = node.depth / y1 * size[1];
+      delete node._tree;
+    });
+
+    return nodes;
+  }
+
+  tree.separation = function(x) {
+    if (!arguments.length) return separation;
+    separation = x;
+    return tree;
+  };
+
+  tree.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return tree;
+  };
+
+  return d3_layout_hierarchyRebind(tree, hierarchy);
+};
+
+function d3_layout_treeSeparation(a, b) {
+  return a.parent == b.parent ? 1 : 2;
+}
+
+// function d3_layout_treeSeparationRadial(a, b) {
+//   return (a.parent == b.parent ? 1 : 2) / a.depth;
+// }
+
+function d3_layout_treeLeft(node) {
+  return node.children ? node.children[0] : node._tree.thread;
+}
+
+function d3_layout_treeRight(node) {
+  return node.children ? node.children[node.children.length - 1] : node._tree.thread;
+}
+
+function d3_layout_treeSearch(node, compare) {
+  var children = node.children;
+  if (children) {
+    var child,
+        n = children.length,
+        i = -1;
+    while (++i < n) {
+      if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
+        node = child;
+      }
+    }
+  }
+  return node;
+}
+
+function d3_layout_treeRightmost(a, b) {
+  return a.x - b.x;
+}
+
+function d3_layout_treeLeftmost(a, b) {
+  return b.x - a.x;
+}
+
+function d3_layout_treeDeepest(a, b) {
+  return a.depth - b.depth;
+}
+
+function d3_layout_treeVisitAfter(node, callback) {
+  function visit(node, previousSibling) {
+    var children = node.children;
+    if (children) {
+      var child,
+          previousChild = null,
+          i = -1,
+          n = children.length;
+      while (++i < n) {
+        child = children[i];
+        visit(child, previousChild);
+        previousChild = child;
+      }
+    }
+    callback(node, previousSibling);
+  }
+  visit(node, null);
+}
+
+function d3_layout_treeShift(node) {
+  var shift = 0,
+      change = 0,
+      children = node.children,
+      i = children.length,
+      child;
+  while (--i >= 0) {
+    child = children[i]._tree;
+    child.prelim += shift;
+    child.mod += shift;
+    shift += child.shift + (change += child.change);
+  }
+}
+
+function d3_layout_treeMove(ancestor, node, shift) {
+  ancestor = ancestor._tree;
+  node = node._tree;
+  var change = shift / (node.number - ancestor.number);
+  ancestor.change += change;
+  node.change -= change;
+  node.shift += shift;
+  node.prelim += shift;
+  node.mod += shift;
+}
+
+function d3_layout_treeAncestor(vim, node, ancestor) {
+  return vim._tree.ancestor.parent == node.parent
+      ? vim._tree.ancestor
+      : ancestor;
+}
Index: /Dev/trunk/d3/src/layout/treemap.js
===================================================================
--- /Dev/trunk/d3/src/layout/treemap.js	(revision 76)
+++ /Dev/trunk/d3/src/layout/treemap.js	(revision 76)
@@ -0,0 +1,213 @@
+// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
+// Modified to support a target aspect ratio by Jeff Heer
+d3.layout.treemap = function() {
+  var hierarchy = d3.layout.hierarchy(),
+      round = Math.round,
+      size = [1, 1], // width, height
+      padding = null,
+      pad = d3_layout_treemapPadNull,
+      sticky = false,
+      stickies,
+      ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio
+
+  // Compute the area for each child based on value & scale.
+  function scale(children, k) {
+    var i = -1,
+        n = children.length,
+        child,
+        area;
+    while (++i < n) {
+      area = (child = children[i]).value * (k < 0 ? 0 : k);
+      child.area = isNaN(area) || area <= 0 ? 0 : area;
+    }
+  }
+
+  // Recursively arranges the specified node's children into squarified rows.
+  function squarify(node) {
+    if (!node.children) return;
+    var rect = pad(node),
+        row = [],
+        children = node.children.slice(), // copy-on-write
+        child,
+        best = Infinity, // the best row score so far
+        score, // the current row score
+        u = Math.min(rect.dx, rect.dy), // initial orientation
+        n;
+    scale(children, rect.dx * rect.dy / node.value);
+    row.area = 0;
+    while ((n = children.length) > 0) {
+      row.push(child = children[n - 1]);
+      row.area += child.area;
+      if ((score = worst(row, u)) <= best) { // continue with this orientation
+        children.pop();
+        best = score;
+      } else { // abort, and try a different orientation
+        row.area -= row.pop().area;
+        position(row, u, rect, false);
+        u = Math.min(rect.dx, rect.dy);
+        row.length = row.area = 0;
+        best = Infinity;
+      }
+    }
+    if (row.length) {
+      position(row, u, rect, true);
+      row.length = row.area = 0;
+    }
+    node.children.forEach(squarify);
+  }
+
+  // Recursively resizes the specified node's children into existing rows.
+  // Preserves the existing layout!
+  function stickify(node) {
+    if (!node.children) return;
+    var rect = pad(node),
+        children = node.children.slice(), // copy-on-write
+        child,
+        row = [];
+    scale(children, rect.dx * rect.dy / node.value);
+    row.area = 0;
+    while (child = children.pop()) {
+      row.push(child);
+      row.area += child.area;
+      if (child.z != null) {
+        position(row, child.z ? rect.dx : rect.dy, rect, !children.length);
+        row.length = row.area = 0;
+      }
+    }
+    node.children.forEach(stickify);
+  }
+
+  // Computes the score for the specified row, as the worst aspect ratio.
+  function worst(row, u) {
+    var s = row.area,
+        r,
+        rmax = 0,
+        rmin = Infinity,
+        i = -1,
+        n = row.length;
+    while (++i < n) {
+      if (!(r = row[i].area)) continue;
+      if (r < rmin) rmin = r;
+      if (r > rmax) rmax = r;
+    }
+    s *= s;
+    u *= u;
+    return s
+        ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio))
+        : Infinity;
+  }
+
+  // Positions the specified row of nodes. Modifies `rect`.
+  function position(row, u, rect, flush) {
+    var i = -1,
+        n = row.length,
+        x = rect.x,
+        y = rect.y,
+        v = u ? round(row.area / u) : 0,
+        o;
+    if (u == rect.dx) { // horizontal subdivision
+      if (flush || v > rect.dy) v = rect.dy; // over+underflow
+      while (++i < n) {
+        o = row[i];
+        o.x = x;
+        o.y = y;
+        o.dy = v;
+        x += o.dx = v ? round(o.area / v) : 0;
+      }
+      o.z = true;
+      o.dx += rect.x + rect.dx - x; // rounding error
+      rect.y += v;
+      rect.dy -= v;
+    } else { // vertical subdivision
+      if (flush || v > rect.dx) v = rect.dx; // over+underflow
+      while (++i < n) {
+        o = row[i];
+        o.x = x;
+        o.y = y;
+        o.dx = v;
+        y += o.dy = v ? round(o.area / v) : 0;
+      }
+      o.z = false;
+      o.dy += rect.y + rect.dy - y; // rounding error
+      rect.x += v;
+      rect.dx -= v;
+    }
+  }
+
+  function treemap(d) {
+    var nodes = stickies || hierarchy(d),
+        root = nodes[0];
+    root.x = 0;
+    root.y = 0;
+    root.dx = size[0];
+    root.dy = size[1];
+    if (stickies) hierarchy.revalue(root);
+    scale([root], root.dx * root.dy / root.value);
+    (stickies ? stickify : squarify)(root);
+    if (sticky) stickies = nodes;
+    return nodes;
+  }
+
+  treemap.size = function(x) {
+    if (!arguments.length) return size;
+    size = x;
+    return treemap;
+  };
+
+  treemap.padding = function(x) {
+    if (!arguments.length) return padding;
+
+    function padFunction(node) {
+      var p = x.call(treemap, node, node.depth);
+      return p == null
+          ? d3_layout_treemapPadNull(node)
+          : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
+    }
+
+    function padConstant(node) {
+      return d3_layout_treemapPad(node, x);
+    }
+
+    var type;
+    pad = (padding = x) == null ? d3_layout_treemapPadNull
+        : (type = typeof x) === "function" ? padFunction
+        : type === "number" ? (x = [x, x, x, x], padConstant)
+        : padConstant;
+    return treemap;
+  };
+
+  treemap.round = function(x) {
+    if (!arguments.length) return round != Number;
+    round = x ? Math.round : Number;
+    return treemap;
+  };
+
+  treemap.sticky = function(x) {
+    if (!arguments.length) return sticky;
+    sticky = x;
+    stickies = null;
+    return treemap;
+  };
+
+  treemap.ratio = function(x) {
+    if (!arguments.length) return ratio;
+    ratio = x;
+    return treemap;
+  };
+
+  return d3_layout_hierarchyRebind(treemap, hierarchy);
+};
+
+function d3_layout_treemapPadNull(node) {
+  return {x: node.x, y: node.y, dx: node.dx, dy: node.dy};
+}
+
+function d3_layout_treemapPad(node, padding) {
+  var x = node.x + padding[3],
+      y = node.y + padding[0],
+      dx = node.dx - padding[1] - padding[3],
+      dy = node.dy - padding[0] - padding[2];
+  if (dx < 0) { x += dx / 2; dx = 0; }
+  if (dy < 0) { y += dy / 2; dy = 0; }
+  return {x: x, y: y, dx: dx, dy: dy};
+}
Index: /Dev/trunk/d3/src/scale/bilinear.js
===================================================================
--- /Dev/trunk/d3/src/scale/bilinear.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/bilinear.js	(revision 76)
@@ -0,0 +1,7 @@
+function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
+  var u = uninterpolate(domain[0], domain[1]),
+      i = interpolate(range[0], range[1]);
+  return function(x) {
+    return i(u(x));
+  };
+}
Index: /Dev/trunk/d3/src/scale/category.js
===================================================================
--- /Dev/trunk/d3/src/scale/category.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/category.js	(revision 76)
@@ -0,0 +1,54 @@
+/*
+ * This product includes color specifications and designs developed by Cynthia
+ * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information.
+ */
+
+d3.scale.category10 = function() {
+  return d3.scale.ordinal().range(d3_category10);
+};
+
+d3.scale.category20 = function() {
+  return d3.scale.ordinal().range(d3_category20);
+};
+
+d3.scale.category20b = function() {
+  return d3.scale.ordinal().range(d3_category20b);
+};
+
+d3.scale.category20c = function() {
+  return d3.scale.ordinal().range(d3_category20c);
+};
+
+var d3_category10 = [
+  "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
+  "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
+];
+
+var d3_category20 = [
+  "#1f77b4", "#aec7e8",
+  "#ff7f0e", "#ffbb78",
+  "#2ca02c", "#98df8a",
+  "#d62728", "#ff9896",
+  "#9467bd", "#c5b0d5",
+  "#8c564b", "#c49c94",
+  "#e377c2", "#f7b6d2",
+  "#7f7f7f", "#c7c7c7",
+  "#bcbd22", "#dbdb8d",
+  "#17becf", "#9edae5"
+];
+
+var d3_category20b = [
+  "#393b79", "#5254a3", "#6b6ecf", "#9c9ede",
+  "#637939", "#8ca252", "#b5cf6b", "#cedb9c",
+  "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94",
+  "#843c39", "#ad494a", "#d6616b", "#e7969c",
+  "#7b4173", "#a55194", "#ce6dbd", "#de9ed6"
+];
+
+var d3_category20c = [
+  "#3182bd", "#6baed6", "#9ecae1", "#c6dbef",
+  "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2",
+  "#31a354", "#74c476", "#a1d99b", "#c7e9c0",
+  "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb",
+  "#636363", "#969696", "#bdbdbd", "#d9d9d9"
+];
Index: /Dev/trunk/d3/src/scale/linear.js
===================================================================
--- /Dev/trunk/d3/src/scale/linear.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/linear.js	(revision 76)
@@ -0,0 +1,111 @@
+d3.scale.linear = function() {
+  var domain = [0, 1],
+      range = [0, 1],
+      interpolate = d3.interpolate,
+      clamp = false,
+      output,
+      input;
+
+  function rescale() {
+    var linear = domain.length == 2 ? d3_scale_bilinear : d3_scale_polylinear,
+        uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
+    output = linear(domain, range, uninterpolate, interpolate);
+    input = linear(range, domain, uninterpolate, d3.interpolate);
+    return scale;
+  }
+
+  function scale(x) {
+    return output(x);
+  }
+
+  // Note: requires range is coercible to number!
+  scale.invert = function(y) {
+    return input(y);
+  };
+
+  scale.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x.map(Number);
+    return rescale();
+  };
+
+  scale.range = function(x) {
+    if (!arguments.length) return range;
+    range = x;
+    return rescale();
+  };
+
+  scale.rangeRound = function(x) {
+    return scale.range(x).interpolate(d3.interpolateRound);
+  };
+
+  scale.clamp = function(x) {
+    if (!arguments.length) return clamp;
+    clamp = x;
+    return rescale();
+  };
+
+  scale.interpolate = function(x) {
+    if (!arguments.length) return interpolate;
+    interpolate = x;
+    return rescale();
+  };
+
+  scale.ticks = function(m) {
+    return d3_scale_linearTicks(domain, m);
+  };
+
+  scale.tickFormat = function(m) {
+    return d3_scale_linearTickFormat(domain, m);
+  };
+
+  scale.nice = function() {
+    d3_scale_nice(domain, d3_scale_linearNice);
+    return rescale();
+  };
+
+  return rescale();
+};
+
+function d3_scale_linearRebind(scale, linear) {
+  scale.range = d3.rebind(scale, linear.range);
+  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
+  scale.interpolate = d3.rebind(scale, linear.interpolate);
+  scale.clamp = d3.rebind(scale, linear.clamp);
+  return scale;
+}
+
+function d3_scale_linearNice(dx) {
+  dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
+  return {
+    floor: function(x) { return Math.floor(x / dx) * dx; },
+    ceil: function(x) { return Math.ceil(x / dx) * dx; }
+  };
+}
+
+// TODO Dates? Ugh.
+function d3_scale_linearTickRange(domain, m) {
+  var extent = d3_scaleExtent(domain),
+      span = extent[1] - extent[0],
+      step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
+      err = m / span * step;
+
+  // Filter ticks to get closer to the desired count.
+  if (err <= .15) step *= 10;
+  else if (err <= .35) step *= 5;
+  else if (err <= .75) step *= 2;
+
+  // Round start and stop values to step interval.
+  extent[0] = Math.ceil(extent[0] / step) * step;
+  extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
+  extent[2] = step;
+  return extent;
+}
+
+function d3_scale_linearTicks(domain, m) {
+  return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
+}
+
+function d3_scale_linearTickFormat(domain, m) {
+  return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
+}
Index: /Dev/trunk/d3/src/scale/log.js
===================================================================
--- /Dev/trunk/d3/src/scale/log.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/log.js	(revision 76)
@@ -0,0 +1,74 @@
+d3.scale.log = function() {
+  var linear = d3.scale.linear(),
+      log = d3_scale_log,
+      pow = log.pow;
+
+  function scale(x) {
+    return linear(log(x));
+  }
+
+  scale.invert = function(x) {
+    return pow(linear.invert(x));
+  };
+
+  scale.domain = function(x) {
+    if (!arguments.length) return linear.domain().map(pow);
+    log = x[0] < 0 ? d3_scale_logn : d3_scale_log;
+    pow = log.pow;
+    linear.domain(x.map(log));
+    return scale;
+  };
+
+  scale.nice = function() {
+    linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
+    return scale;
+  };
+
+  scale.ticks = function() {
+    var extent = d3_scaleExtent(linear.domain()),
+        ticks = [];
+    if (extent.every(isFinite)) {
+      var i = Math.floor(extent[0]),
+          j = Math.ceil(extent[1]),
+          u = pow(extent[0]),
+          v = pow(extent[1]);
+      if (log === d3_scale_logn) {
+        ticks.push(pow(i));
+        for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
+      } else {
+        for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
+        ticks.push(pow(i));
+      }
+      for (i = 0; ticks[i] < u; i++) {} // strip small values
+      for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
+      ticks = ticks.slice(i, j);
+    }
+    return ticks;
+  };
+
+  scale.tickFormat = function() {
+    return d3_scale_logTickFormat;
+  };
+
+  return d3_scale_linearRebind(scale, linear);
+};
+
+function d3_scale_log(x) {
+  return Math.log(x) / Math.LN10;
+}
+
+function d3_scale_logn(x) {
+  return -Math.log(-x) / Math.LN10;
+}
+
+d3_scale_log.pow = function(x) {
+  return Math.pow(10, x);
+};
+
+d3_scale_logn.pow = function(x) {
+  return -Math.pow(10, -x);
+};
+
+function d3_scale_logTickFormat(d) {
+  return d.toPrecision(1);
+}
Index: /Dev/trunk/d3/src/scale/nice.js
===================================================================
--- /Dev/trunk/d3/src/scale/nice.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/nice.js	(revision 76)
@@ -0,0 +1,21 @@
+function d3_scale_nice(domain, nice) {
+  var i0 = 0,
+      i1 = domain.length - 1,
+      x0 = domain[i0],
+      x1 = domain[i1],
+      dx;
+
+  if (x1 < x0) {
+    dx = i0; i0 = i1; i1 = dx;
+    dx = x0; x0 = x1; x1 = dx;
+  }
+
+  nice = nice(x1 - x0);
+  domain[i0] = nice.floor(x0);
+  domain[i1] = nice.ceil(x1);
+  return domain;
+}
+
+function d3_scale_niceDefault() {
+  return Math;
+}
Index: /Dev/trunk/d3/src/scale/ordinal.js
===================================================================
--- /Dev/trunk/d3/src/scale/ordinal.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/ordinal.js	(revision 76)
@@ -0,0 +1,77 @@
+d3.scale.ordinal = function() {
+  var domain = [],
+      index = {},
+      range = [],
+      rangeBand = 0,
+      rerange = d3_noop;
+
+  function scale(x) {
+    var i = x in index ? index[x] : (index[x] = domain.push(x) - 1);
+    return range[i % range.length];
+  }
+
+  scale.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x;
+    index = {};
+    var i = -1, j = -1, n = domain.length; while (++i < n) {
+      x = domain[i];
+      if (!(x in index)) index[x] = ++j;
+    }
+    rerange();
+    return scale;
+  };
+
+  scale.range = function(x) {
+    if (!arguments.length) return range;
+    range = x;
+    rerange = d3_noop;
+    return scale;
+  };
+
+  scale.rangePoints = function(x, padding) {
+    if (arguments.length < 2) padding = 0;
+    (rerange = function() {
+      var start = x[0],
+          stop = x[1],
+          step = (stop - start) / (domain.length - 1 + padding);
+      range = domain.length == 1
+          ? [(start + stop) / 2]
+          : d3.range(start + step * padding / 2, stop + step / 2, step);
+      rangeBand = 0;
+    })();
+    return scale;
+  };
+
+  scale.rangeBands = function(x, padding) {
+    if (arguments.length < 2) padding = 0;
+    (rerange = function() {
+      var start = x[0],
+          stop = x[1],
+          step = (stop - start) / (domain.length + padding);
+      range = d3.range(start + step * padding, stop, step);
+      rangeBand = step * (1 - padding);
+    })();
+    return scale;
+  };
+
+  scale.rangeRoundBands = function(x, padding) {
+    if (arguments.length < 2) padding = 0;
+    (rerange = function() {
+      var start = x[0],
+          stop = x[1],
+          diff = stop - start,
+          step = Math.floor(diff / (domain.length + padding)),
+          err = diff - (domain.length - padding) * step;
+      range = d3.range(start + Math.round(err / 2), stop, step);
+      rangeBand = Math.round(step * (1 - padding));
+    })();
+    return scale;
+  };
+
+  scale.rangeBand = function() {
+    return rangeBand;
+  };
+
+  return scale;
+};
Index: /Dev/trunk/d3/src/scale/polylinear.js
===================================================================
--- /Dev/trunk/d3/src/scale/polylinear.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/polylinear.js	(revision 76)
@@ -0,0 +1,16 @@
+function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
+  var u = [],
+      i = [],
+      j = 0,
+      n = domain.length;
+
+  while (++j < n) {
+    u.push(uninterpolate(domain[j - 1], domain[j]));
+    i.push(interpolate(range[j - 1], range[j]));
+  }
+
+  return function(x) {
+    var j = d3.bisect(domain, x, 1, domain.length - 1) - 1;
+    return i[j](u[j](x));
+  };
+}
Index: /Dev/trunk/d3/src/scale/pow.js
===================================================================
--- /Dev/trunk/d3/src/scale/pow.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/pow.js	(revision 76)
@@ -0,0 +1,49 @@
+d3.scale.pow = function() {
+  var linear = d3.scale.linear(),
+      exponent = 1,
+      powp = Number,
+      powb = powp;
+
+  function scale(x) {
+    return linear(powp(x));
+  }
+
+  scale.invert = function(x) {
+    return powb(linear.invert(x));
+  };
+
+  scale.domain = function(x) {
+    if (!arguments.length) return linear.domain().map(powb);
+    powp = d3_scale_powPow(exponent);
+    powb = d3_scale_powPow(1 / exponent);
+    linear.domain(x.map(powp));
+    return scale;
+  };
+
+  scale.ticks = function(m) {
+    return d3_scale_linearTicks(scale.domain(), m);
+  };
+
+  scale.tickFormat = function(m) {
+    return d3_scale_linearTickFormat(scale.domain(), m);
+  };
+
+  scale.nice = function() {
+    return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
+  };
+
+  scale.exponent = function(x) {
+    if (!arguments.length) return exponent;
+    var domain = scale.domain();
+    exponent = x;
+    return scale.domain(domain);
+  };
+
+  return d3_scale_linearRebind(scale, linear);
+};
+
+function d3_scale_powPow(e) {
+  return function(x) {
+    return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
+  };
+}
Index: /Dev/trunk/d3/src/scale/quantile.js
===================================================================
--- /Dev/trunk/d3/src/scale/quantile.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/quantile.js	(revision 76)
@@ -0,0 +1,38 @@
+d3.scale.quantile = function() {
+  var domain = [],
+      range = [],
+      thresholds = [];
+
+  function rescale() {
+    var k = 0,
+        n = domain.length,
+        q = range.length;
+    thresholds.length = Math.max(0, q - 1);
+    while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
+  }
+
+  function scale(x) {
+    if (isNaN(x = +x)) return NaN;
+    return range[d3.bisect(thresholds, x)];
+  }
+
+  scale.domain = function(x) {
+    if (!arguments.length) return domain;
+    domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending);
+    rescale();
+    return scale;
+  };
+
+  scale.range = function(x) {
+    if (!arguments.length) return range;
+    range = x;
+    rescale();
+    return scale;
+  };
+
+  scale.quantiles = function() {
+    return thresholds;
+  };
+
+  return scale;
+};
Index: /Dev/trunk/d3/src/scale/quantize.js
===================================================================
--- /Dev/trunk/d3/src/scale/quantize.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/quantize.js	(revision 76)
@@ -0,0 +1,29 @@
+d3.scale.quantize = function() {
+  var x0 = 0,
+      x1 = 1,
+      kx = 2,
+      i = 1,
+      range = [0, 1];
+
+  function scale(x) {
+    return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
+  }
+
+  scale.domain = function(x) {
+    if (!arguments.length) return [x0, x1];
+    x0 = x[0];
+    x1 = x[1];
+    kx = range.length / (x1 - x0);
+    return scale;
+  };
+
+  scale.range = function(x) {
+    if (!arguments.length) return range;
+    range = x;
+    kx = range.length / (x1 - x0);
+    i = range.length - 1;
+    return scale;
+  };
+
+  return scale;
+};
Index: /Dev/trunk/d3/src/scale/scale.js
===================================================================
--- /Dev/trunk/d3/src/scale/scale.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/scale.js	(revision 76)
@@ -0,0 +1,6 @@
+d3.scale = {};
+
+function d3_scaleExtent(domain) {
+  var start = domain[0], stop = domain[domain.length - 1];
+  return start < stop ? [start, stop] : [stop, start];
+}
Index: /Dev/trunk/d3/src/scale/sqrt.js
===================================================================
--- /Dev/trunk/d3/src/scale/sqrt.js	(revision 76)
+++ /Dev/trunk/d3/src/scale/sqrt.js	(revision 76)
@@ -0,0 +1,3 @@
+d3.scale.sqrt = function() {
+  return d3.scale.pow().exponent(.5);
+};
Index: /Dev/trunk/d3/src/start.js
===================================================================
--- /Dev/trunk/d3/src/start.js	(revision 76)
+++ /Dev/trunk/d3/src/start.js	(revision 76)
@@ -0,0 +1,1 @@
+(function(){
Index: /Dev/trunk/d3/src/svg/arc.js
===================================================================
--- /Dev/trunk/d3/src/svg/arc.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/arc.js	(revision 76)
@@ -0,0 +1,95 @@
+d3.svg.arc = function() {
+  var innerRadius = d3_svg_arcInnerRadius,
+      outerRadius = d3_svg_arcOuterRadius,
+      startAngle = d3_svg_arcStartAngle,
+      endAngle = d3_svg_arcEndAngle;
+
+  function arc() {
+    var r0 = innerRadius.apply(this, arguments),
+        r1 = outerRadius.apply(this, arguments),
+        a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
+        a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
+        da = a1 - a0,
+        df = da < Math.PI ? "0" : "1",
+        c0 = Math.cos(a0),
+        s0 = Math.sin(a0),
+        c1 = Math.cos(a1),
+        s1 = Math.sin(a1);
+    return da >= d3_svg_arcMax
+      ? (r0
+      ? "M0," + r1
+      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
+      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
+      + "M0," + r0
+      + "A" + r0 + "," + r0 + " 0 1,1 0," + (-r0)
+      + "A" + r0 + "," + r0 + " 0 1,1 0," + r0
+      + "Z"
+      : "M0," + r1
+      + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1)
+      + "A" + r1 + "," + r1 + " 0 1,1 0," + r1
+      + "Z")
+      : (r0
+      ? "M" + r1 * c0 + "," + r1 * s0
+      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
+      + "L" + r0 * c1 + "," + r0 * s1
+      + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0
+      + "Z"
+      : "M" + r1 * c0 + "," + r1 * s0
+      + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1
+      + "L0,0"
+      + "Z");
+  }
+
+  arc.innerRadius = function(v) {
+    if (!arguments.length) return innerRadius;
+    innerRadius = d3.functor(v);
+    return arc;
+  };
+
+  arc.outerRadius = function(v) {
+    if (!arguments.length) return outerRadius;
+    outerRadius = d3.functor(v);
+    return arc;
+  };
+
+  arc.startAngle = function(v) {
+    if (!arguments.length) return startAngle;
+    startAngle = d3.functor(v);
+    return arc;
+  };
+
+  arc.endAngle = function(v) {
+    if (!arguments.length) return endAngle;
+    endAngle = d3.functor(v);
+    return arc;
+  };
+
+  arc.centroid = function() {
+    var r = (innerRadius.apply(this, arguments)
+        + outerRadius.apply(this, arguments)) / 2,
+        a = (startAngle.apply(this, arguments)
+        + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
+    return [Math.cos(a) * r, Math.sin(a) * r];
+  };
+
+  return arc;
+};
+
+var d3_svg_arcOffset = -Math.PI / 2,
+    d3_svg_arcMax = 2 * Math.PI - 1e-6;
+
+function d3_svg_arcInnerRadius(d) {
+  return d.innerRadius;
+}
+
+function d3_svg_arcOuterRadius(d) {
+  return d.outerRadius;
+}
+
+function d3_svg_arcStartAngle(d) {
+  return d.startAngle;
+}
+
+function d3_svg_arcEndAngle(d) {
+  return d.endAngle;
+}
Index: /Dev/trunk/d3/src/svg/area-radial.js
===================================================================
--- /Dev/trunk/d3/src/svg/area-radial.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/area-radial.js	(revision 76)
@@ -0,0 +1,10 @@
+d3.svg.area.radial = function() {
+  var area = d3_svg_area(d3_svg_lineRadial);
+  area.radius = area.x, delete area.x;
+  area.innerRadius = area.x0, delete area.x0;
+  area.outerRadius = area.x1, delete area.x1;
+  area.angle = area.y, delete area.y;
+  area.startAngle = area.y0, delete area.y0;
+  area.endAngle = area.y1, delete area.y1;
+  return area;
+};
Index: /Dev/trunk/d3/src/svg/area.js
===================================================================
--- /Dev/trunk/d3/src/svg/area.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/area.js	(revision 76)
@@ -0,0 +1,84 @@
+function d3_svg_area(projection) {
+  var x0 = d3_svg_lineX,
+      x1 = d3_svg_lineX,
+      y0 = 0,
+      y1 = d3_svg_lineY,
+      interpolate = "linear",
+      interpolator = d3_svg_lineInterpolators[interpolate],
+      tension = .7;
+
+  function area(d) {
+    if (d.length < 1) return null;
+    var points0 = d3_svg_linePoints(this, d, x0, y0),
+        points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
+    return "M" + interpolator(projection(points1), tension)
+         + "L" + interpolator(projection(points0.reverse()), tension)
+         + "Z";
+  }
+
+  area.x = function(x) {
+    if (!arguments.length) return x1;
+    x0 = x1 = x;
+    return area;
+  };
+
+  area.x0 = function(x) {
+    if (!arguments.length) return x0;
+    x0 = x;
+    return area;
+  };
+
+  area.x1 = function(x) {
+    if (!arguments.length) return x1;
+    x1 = x;
+    return area;
+  };
+
+  area.y = function(y) {
+    if (!arguments.length) return y1;
+    y0 = y1 = y;
+    return area;
+  };
+
+  area.y0 = function(y) {
+    if (!arguments.length) return y0;
+    y0 = y;
+    return area;
+  };
+
+  area.y1 = function(y) {
+    if (!arguments.length) return y1;
+    y1 = y;
+    return area;
+  };
+
+  area.interpolate = function(x) {
+    if (!arguments.length) return interpolate;
+    interpolator = d3_svg_lineInterpolators[interpolate = x];
+    return area;
+  };
+
+  area.tension = function(x) {
+    if (!arguments.length) return tension;
+    tension = x;
+    return area;
+  };
+
+  return area;
+}
+
+d3.svg.area = function() {
+  return d3_svg_area(Object);
+};
+
+function d3_svg_areaX(points) {
+  return function(d, i) {
+    return points[i][0];
+  };
+}
+
+function d3_svg_areaY(points) {
+  return function(d, i) {
+    return points[i][1];
+  };
+}
Index: /Dev/trunk/d3/src/svg/chord.js
===================================================================
--- /Dev/trunk/d3/src/svg/chord.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/chord.js	(revision 76)
@@ -0,0 +1,99 @@
+d3.svg.chord = function() {
+  var source = d3_svg_chordSource,
+      target = d3_svg_chordTarget,
+      radius = d3_svg_chordRadius,
+      startAngle = d3_svg_arcStartAngle,
+      endAngle = d3_svg_arcEndAngle;
+
+  // TODO Allow control point to be customized.
+
+  function chord(d, i) {
+    var s = subgroup(this, source, d, i),
+        t = subgroup(this, target, d, i);
+    return "M" + s.p0
+      + arc(s.r, s.p1) + (equals(s, t)
+      ? curve(s.r, s.p1, s.r, s.p0)
+      : curve(s.r, s.p1, t.r, t.p0)
+      + arc(t.r, t.p1)
+      + curve(t.r, t.p1, s.r, s.p0))
+      + "Z";
+  }
+
+  function subgroup(self, f, d, i) {
+    var subgroup = f.call(self, d, i),
+        r = radius.call(self, subgroup, i),
+        a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset,
+        a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
+    return {
+      r: r,
+      a0: a0,
+      a1: a1,
+      p0: [r * Math.cos(a0), r * Math.sin(a0)],
+      p1: [r * Math.cos(a1), r * Math.sin(a1)]
+    };
+  }
+
+  function equals(a, b) {
+    return a.a0 == b.a0 && a.a1 == b.a1;
+  }
+
+  function arc(r, p) {
+    return "A" + r + "," + r + " 0 0,1 " + p;
+  }
+
+  function curve(r0, p0, r1, p1) {
+    return "Q 0,0 " + p1;
+  }
+
+  chord.radius = function(v) {
+    if (!arguments.length) return radius;
+    radius = d3.functor(v);
+    return chord;
+  };
+
+  chord.source = function(v) {
+    if (!arguments.length) return source;
+    source = d3.functor(v);
+    return chord;
+  };
+
+  chord.target = function(v) {
+    if (!arguments.length) return target;
+    target = d3.functor(v);
+    return chord;
+  };
+
+  chord.startAngle = function(v) {
+    if (!arguments.length) return startAngle;
+    startAngle = d3.functor(v);
+    return chord;
+  };
+
+  chord.endAngle = function(v) {
+    if (!arguments.length) return endAngle;
+    endAngle = d3.functor(v);
+    return chord;
+  };
+
+  return chord;
+};
+
+function d3_svg_chordSource(d) {
+  return d.source;
+}
+
+function d3_svg_chordTarget(d) {
+  return d.target;
+}
+
+function d3_svg_chordRadius(d) {
+  return d.radius;
+}
+
+function d3_svg_chordStartAngle(d) {
+  return d.startAngle;
+}
+
+function d3_svg_chordEndAngle(d) {
+  return d.endAngle;
+}
Index: /Dev/trunk/d3/src/svg/diagonal-radial.js
===================================================================
--- /Dev/trunk/d3/src/svg/diagonal-radial.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/diagonal-radial.js	(revision 76)
@@ -0,0 +1,22 @@
+d3.svg.diagonal.radial = function() {
+  var diagonal = d3.svg.diagonal(),
+      projection = d3_svg_diagonalProjection,
+      projection_ = diagonal.projection;
+
+  diagonal.projection = function(x) {
+    return arguments.length
+        ? projection_(d3_svg_diagonalRadialProjection(projection = x))
+        : projection;
+  };
+
+  return diagonal;
+};
+
+function d3_svg_diagonalRadialProjection(projection) {
+  return function() {
+    var d = projection.apply(this, arguments),
+        r = d[0],
+        a = d[1] + d3_svg_arcOffset;
+    return [r * Math.cos(a), r * Math.sin(a)];
+  };
+}
Index: /Dev/trunk/d3/src/svg/diagonal.js
===================================================================
--- /Dev/trunk/d3/src/svg/diagonal.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/diagonal.js	(revision 76)
@@ -0,0 +1,38 @@
+d3.svg.diagonal = function() {
+  var source = d3_svg_chordSource,
+      target = d3_svg_chordTarget,
+      projection = d3_svg_diagonalProjection;
+
+  function diagonal(d, i) {
+    var p0 = source.call(this, d, i),
+        p3 = target.call(this, d, i),
+        m = (p0.y + p3.y) / 2,
+        p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3];
+    p = p.map(projection);
+    return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
+  }
+
+  diagonal.source = function(x) {
+    if (!arguments.length) return source;
+    source = d3.functor(x);
+    return diagonal;
+  };
+
+  diagonal.target = function(x) {
+    if (!arguments.length) return target;
+    target = d3.functor(x);
+    return diagonal;
+  };
+
+  diagonal.projection = function(x) {
+    if (!arguments.length) return projection;
+    projection = x;
+    return diagonal;
+  };
+
+  return diagonal;
+};
+
+function d3_svg_diagonalProjection(d) {
+  return [d.x, d.y];
+}
Index: /Dev/trunk/d3/src/svg/line-radial.js
===================================================================
--- /Dev/trunk/d3/src/svg/line-radial.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/line-radial.js	(revision 76)
@@ -0,0 +1,22 @@
+d3.svg.line.radial = function() {
+  var line = d3_svg_line(d3_svg_lineRadial);
+  line.radius = line.x, delete line.x;
+  line.angle = line.y, delete line.y;
+  return line;
+};
+
+function d3_svg_lineRadial(points) {
+  var point,
+      i = -1,
+      n = points.length,
+      r,
+      a;
+  while (++i < n) {
+    point = points[i];
+    r = point[0];
+    a = point[1] + d3_svg_arcOffset;
+    point[0] = r * Math.cos(a);
+    point[1] = r * Math.sin(a);
+  }
+  return points;
+}
Index: /Dev/trunk/d3/src/svg/line.js
===================================================================
--- /Dev/trunk/d3/src/svg/line.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/line.js	(revision 76)
@@ -0,0 +1,419 @@
+function d3_svg_line(projection) {
+  var x = d3_svg_lineX,
+      y = d3_svg_lineY,
+      interpolate = "linear",
+      interpolator = d3_svg_lineInterpolators[interpolate],
+      tension = .7;
+
+  function line(d) {
+    return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
+  }
+
+  line.x = function(v) {
+    if (!arguments.length) return x;
+    x = v;
+    return line;
+  };
+
+  line.y = function(v) {
+    if (!arguments.length) return y;
+    y = v;
+    return line;
+  };
+
+  line.interpolate = function(v) {
+    if (!arguments.length) return interpolate;
+    interpolator = d3_svg_lineInterpolators[interpolate = v];
+    return line;
+  };
+
+  line.tension = function(v) {
+    if (!arguments.length) return tension;
+    tension = v;
+    return line;
+  };
+
+  return line;
+}
+
+d3.svg.line = function() {
+  return d3_svg_line(Object);
+};
+
+// Converts the specified array of data into an array of points
+// (x-y tuples), by evaluating the specified `x` and `y` functions on each
+// data point. The `this` context of the evaluated functions is the specified
+// "self" object; each function is passed the current datum and index.
+function d3_svg_linePoints(self, d, x, y) {
+  var points = [],
+      i = -1,
+      n = d.length,
+      fx = typeof x === "function",
+      fy = typeof y === "function",
+      value;
+  if (fx && fy) {
+    while (++i < n) points.push([
+      x.call(self, value = d[i], i),
+      y.call(self, value, i)
+    ]);
+  } else if (fx) {
+    while (++i < n) points.push([x.call(self, d[i], i), y]);
+  } else if (fy) {
+    while (++i < n) points.push([x, y.call(self, d[i], i)]);
+  } else {
+    while (++i < n) points.push([x, y]);
+  }
+  return points;
+}
+
+// The default `x` property, which references d[0].
+function d3_svg_lineX(d) {
+  return d[0];
+}
+
+// The default `y` property, which references d[1].
+function d3_svg_lineY(d) {
+  return d[1];
+}
+
+// The various interpolators supported by the `line` class.
+var d3_svg_lineInterpolators = {
+  "linear": d3_svg_lineLinear,
+  "step-before": d3_svg_lineStepBefore,
+  "step-after": d3_svg_lineStepAfter,
+  "basis": d3_svg_lineBasis,
+  "basis-open": d3_svg_lineBasisOpen,
+  "basis-closed": d3_svg_lineBasisClosed,
+  "bundle": d3_svg_lineBundle,
+  "cardinal": d3_svg_lineCardinal,
+  "cardinal-open": d3_svg_lineCardinalOpen,
+  "cardinal-closed": d3_svg_lineCardinalClosed,
+  "monotone": d3_svg_lineMonotone
+};
+
+// Linear interpolation; generates "L" commands.
+function d3_svg_lineLinear(points) {
+  var path = [],
+      i = 0,
+      n = points.length,
+      p = points[0];
+  path.push(p[0], ",", p[1]);
+  while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]);
+  return path.join("");
+}
+
+// Step interpolation; generates "H" and "V" commands.
+function d3_svg_lineStepBefore(points) {
+  var path = [],
+      i = 0,
+      n = points.length,
+      p = points[0];
+  path.push(p[0], ",", p[1]);
+  while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
+  return path.join("");
+}
+
+// Step interpolation; generates "H" and "V" commands.
+function d3_svg_lineStepAfter(points) {
+  var path = [],
+      i = 0,
+      n = points.length,
+      p = points[0];
+  path.push(p[0], ",", p[1]);
+  while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
+  return path.join("");
+}
+
+// Open cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinalOpen(points, tension) {
+  return points.length < 4
+      ? d3_svg_lineLinear(points)
+      : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1),
+        d3_svg_lineCardinalTangents(points, tension));
+}
+
+// Closed cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinalClosed(points, tension) {
+  return points.length < 3
+      ? d3_svg_lineLinear(points)
+      : points[0] + d3_svg_lineHermite((points.push(points[0]), points),
+        d3_svg_lineCardinalTangents([points[points.length - 2]]
+        .concat(points, [points[1]]), tension));
+}
+
+// Cardinal spline interpolation; generates "C" commands.
+function d3_svg_lineCardinal(points, tension, closed) {
+  return points.length < 3
+      ? d3_svg_lineLinear(points)
+      : points[0] + d3_svg_lineHermite(points,
+        d3_svg_lineCardinalTangents(points, tension));
+}
+
+// Hermite spline construction; generates "C" commands.
+function d3_svg_lineHermite(points, tangents) {
+  if (tangents.length < 1
+      || (points.length != tangents.length
+      && points.length != tangents.length + 2)) {
+    return d3_svg_lineLinear(points);
+  }
+
+  var quad = points.length != tangents.length,
+      path = "",
+      p0 = points[0],
+      p = points[1],
+      t0 = tangents[0],
+      t = t0,
+      pi = 1;
+
+  if (quad) {
+    path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3)
+        + "," + p[0] + "," + p[1];
+    p0 = points[1];
+    pi = 2;
+  }
+
+  if (tangents.length > 1) {
+    t = tangents[1];
+    p = points[pi];
+    pi++;
+    path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1])
+        + "," + (p[0] - t[0]) + "," + (p[1] - t[1])
+        + "," + p[0] + "," + p[1];
+    for (var i = 2; i < tangents.length; i++, pi++) {
+      p = points[pi];
+      t = tangents[i];
+      path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1])
+          + "," + p[0] + "," + p[1];
+    }
+  }
+
+  if (quad) {
+    var lp = points[pi];
+    path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3)
+        + "," + lp[0] + "," + lp[1];
+  }
+
+  return path;
+}
+
+// Generates tangents for a cardinal spline.
+function d3_svg_lineCardinalTangents(points, tension) {
+  var tangents = [],
+      a = (1 - tension) / 2,
+      p0,
+      p1 = points[0],
+      p2 = points[1],
+      i = 1,
+      n = points.length;
+  while (++i < n) {
+    p0 = p1;
+    p1 = p2;
+    p2 = points[i];
+    tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
+  }
+  return tangents;
+}
+
+// B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasis(points) {
+  if (points.length < 3) return d3_svg_lineLinear(points);
+  var path = [],
+      i = 1,
+      n = points.length,
+      pi = points[0],
+      x0 = pi[0],
+      y0 = pi[1],
+      px = [x0, x0, x0, (pi = points[1])[0]],
+      py = [y0, y0, y0, pi[1]];
+  path.push(x0, ",", y0);
+  d3_svg_lineBasisBezier(path, px, py);
+  while (++i < n) {
+    pi = points[i];
+    px.shift(); px.push(pi[0]);
+    py.shift(); py.push(pi[1]);
+    d3_svg_lineBasisBezier(path, px, py);
+  }
+  i = -1;
+  while (++i < 2) {
+    px.shift(); px.push(pi[0]);
+    py.shift(); py.push(pi[1]);
+    d3_svg_lineBasisBezier(path, px, py);
+  }
+  return path.join("");
+}
+
+// Open B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasisOpen(points) {
+  if (points.length < 4) return d3_svg_lineLinear(points);
+  var path = [],
+      i = -1,
+      n = points.length,
+      pi,
+      px = [0],
+      py = [0];
+  while (++i < 3) {
+    pi = points[i];
+    px.push(pi[0]);
+    py.push(pi[1]);
+  }
+  path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px)
+    + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
+  --i; while (++i < n) {
+    pi = points[i];
+    px.shift(); px.push(pi[0]);
+    py.shift(); py.push(pi[1]);
+    d3_svg_lineBasisBezier(path, px, py);
+  }
+  return path.join("");
+}
+
+// Closed B-spline interpolation; generates "C" commands.
+function d3_svg_lineBasisClosed(points) {
+  var path,
+      i = -1,
+      n = points.length,
+      m = n + 4,
+      pi,
+      px = [],
+      py = [];
+  while (++i < 4) {
+    pi = points[i % n];
+    px.push(pi[0]);
+    py.push(pi[1]);
+  }
+  path = [
+    d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",",
+    d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)
+  ];
+  --i; while (++i < m) {
+    pi = points[i % n];
+    px.shift(); px.push(pi[0]);
+    py.shift(); py.push(pi[1]);
+    d3_svg_lineBasisBezier(path, px, py);
+  }
+  return path.join("");
+}
+
+function d3_svg_lineBundle(points, tension) {
+  var n = points.length - 1,
+      x0 = points[0][0],
+      y0 = points[0][1],
+      dx = points[n][0] - x0,
+      dy = points[n][1] - y0,
+      i = -1,
+      p,
+      t;
+  while (++i <= n) {
+    p = points[i];
+    t = i / n;
+    p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
+    p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
+  }
+  return d3_svg_lineBasis(points);
+}
+
+// Returns the dot product of the given four-element vectors.
+function d3_svg_lineDot4(a, b) {
+  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
+}
+
+// Matrix to transform basis (b-spline) control points to bezier
+// control points. Derived from FvD 11.2.8.
+var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
+    d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
+    d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
+
+// Pushes a "C" BÃ©zier curve onto the specified path array, given the
+// two specified four-element arrays which define the control points.
+function d3_svg_lineBasisBezier(path, x, y) {
+  path.push(
+      "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x),
+      ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
+}
+
+// Computes the slope from points p0 to p1.
+function d3_svg_lineSlope(p0, p1) {
+  return (p1[1] - p0[1]) / (p1[0] - p0[0]);
+}
+
+// Compute three-point differences for the given points.
+// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference
+function d3_svg_lineFiniteDifferences(points) {
+  var i = 0,
+      j = points.length - 1,
+      m = [],
+      p0 = points[0],
+      p1 = points[1],
+      d = m[0] = d3_svg_lineSlope(p0, p1);
+  while (++i < j) {
+    m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]));
+  }
+  m[i] = d;
+  return m;
+}
+
+// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite
+// interpolation. Returns an array of tangent vectors. For details, see
+// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation
+function d3_svg_lineMonotoneTangents(points) {
+  var tangents = [],
+      d,
+      a,
+      b,
+      s,
+      m = d3_svg_lineFiniteDifferences(points),
+      i = -1,
+      j = points.length - 1;
+
+  // The first two steps are done by computing finite-differences:
+  // 1. Compute the slopes of the secant lines between successive points.
+  // 2. Initialize the tangents at every point as the average of the secants.
+
+  // Then, for each segmentâŠ
+  while (++i < j) {
+    d = d3_svg_lineSlope(points[i], points[i + 1]);
+
+    // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set
+    // mk = m{k + 1} = 0 as the spline connecting these points must be flat to
+    // preserve monotonicity. Ignore step 4 and 5 for those k.
+
+    if (Math.abs(d) < 1e-6) {
+      m[i] = m[i + 1] = 0;
+    } else {
+      // 4. Let ak = mk / dk and bk = m{k + 1} / dk.
+      a = m[i] / d;
+      b = m[i + 1] / d;
+
+      // 5. Prevent overshoot and ensure monotonicity by restricting the
+      // magnitude of vector <ak, bk> to a circle of radius 3.
+      s = a * a + b * b;
+      if (s > 9) {
+        s = d * 3 / Math.sqrt(s);
+        m[i] = s * a;
+        m[i + 1] = s * b;
+      }
+    }
+  }
+
+  // Compute the normalized tangent vector from the slopes. Note that if x is
+  // not monotonic, it's possible that the slope will be infinite, so we protect
+  // against NaN by setting the coordinate to zero.
+  i = -1; while (++i <= j) {
+    s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0])
+      / (6 * (1 + m[i] * m[i]));
+    tangents.push([s || 0, m[i] * s || 0]);
+  }
+
+  return tangents;
+}
+
+function d3_svg_lineMonotone(points) {
+  return points.length < 3
+      ? d3_svg_lineLinear(points)
+      : points[0] +
+        d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
+}
Index: /Dev/trunk/d3/src/svg/mouse.js
===================================================================
--- /Dev/trunk/d3/src/svg/mouse.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/mouse.js	(revision 76)
@@ -0,0 +1,29 @@
+d3.svg.mouse = function(container) {
+  return d3_svg_mousePoint(container, d3.event);
+};
+
+// https://bugs.webkit.org/show_bug.cgi?id=44083
+var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0;
+
+function d3_svg_mousePoint(container, e) {
+  var point = (container.ownerSVGElement || container).createSVGPoint();
+  if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
+    var svg = d3.select(document.body)
+      .append("svg:svg")
+        .style("position", "absolute")
+        .style("top", 0)
+        .style("left", 0);
+    var ctm = svg[0][0].getScreenCTM();
+    d3_mouse_bug44083 = !(ctm.f || ctm.e);
+    svg.remove();
+  }
+  if (d3_mouse_bug44083) {
+    point.x = e.pageX;
+    point.y = e.pageY;
+  } else {
+    point.x = e.clientX;
+    point.y = e.clientY;
+  }
+  point = point.matrixTransform(container.getScreenCTM().inverse());
+  return [point.x, point.y];
+};
Index: /Dev/trunk/d3/src/svg/svg.js
===================================================================
--- /Dev/trunk/d3/src/svg/svg.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/svg.js	(revision 76)
@@ -0,0 +1,1 @@
+d3.svg = {};
Index: /Dev/trunk/d3/src/svg/symbol.js
===================================================================
--- /Dev/trunk/d3/src/svg/symbol.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/symbol.js	(revision 76)
@@ -0,0 +1,98 @@
+d3.svg.symbol = function() {
+  var type = d3_svg_symbolType,
+      size = d3_svg_symbolSize;
+
+  function symbol(d, i) {
+    return (d3_svg_symbols[type.call(this, d, i)]
+        || d3_svg_symbols.circle)
+        (size.call(this, d, i));
+  }
+
+  symbol.type = function(x) {
+    if (!arguments.length) return type;
+    type = d3.functor(x);
+    return symbol;
+  };
+
+  // size of symbol in square pixels
+  symbol.size = function(x) {
+    if (!arguments.length) return size;
+    size = d3.functor(x);
+    return symbol;
+  };
+
+  return symbol;
+};
+
+function d3_svg_symbolSize() {
+  return 64;
+}
+
+function d3_svg_symbolType() {
+  return "circle";
+}
+
+// TODO cross-diagonal?
+var d3_svg_symbols = {
+  "circle": function(size) {
+    var r = Math.sqrt(size / Math.PI);
+    return "M0," + r
+        + "A" + r + "," + r + " 0 1,1 0," + (-r)
+        + "A" + r + "," + r + " 0 1,1 0," + r
+        + "Z";
+  },
+  "cross": function(size) {
+    var r = Math.sqrt(size / 5) / 2;
+    return "M" + -3 * r + "," + -r
+        + "H" + -r
+        + "V" + -3 * r
+        + "H" + r
+        + "V" + -r
+        + "H" + 3 * r
+        + "V" + r
+        + "H" + r
+        + "V" + 3 * r
+        + "H" + -r
+        + "V" + r
+        + "H" + -3 * r
+        + "Z";
+  },
+  "diamond": function(size) {
+    var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)),
+        rx = ry * d3_svg_symbolTan30;
+    return "M0," + -ry
+        + "L" + rx + ",0"
+        + " 0," + ry
+        + " " + -rx + ",0"
+        + "Z";
+  },
+  "square": function(size) {
+    var r = Math.sqrt(size) / 2;
+    return "M" + -r + "," + -r
+        + "L" + r + "," + -r
+        + " " + r + "," + r
+        + " " + -r + "," + r
+        + "Z";
+  },
+  "triangle-down": function(size) {
+    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
+        ry = rx * d3_svg_symbolSqrt3 / 2;
+    return "M0," + ry
+        + "L" + rx +"," + -ry
+        + " " + -rx + "," + -ry
+        + "Z";
+  },
+  "triangle-up": function(size) {
+    var rx = Math.sqrt(size / d3_svg_symbolSqrt3),
+        ry = rx * d3_svg_symbolSqrt3 / 2;
+    return "M0," + -ry
+        + "L" + rx +"," + ry
+        + " " + -rx + "," + ry
+        + "Z";
+  }
+};
+
+d3.svg.symbolTypes = d3.keys(d3_svg_symbols);
+
+var d3_svg_symbolSqrt3 = Math.sqrt(3),
+    d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180);
Index: /Dev/trunk/d3/src/svg/touches.js
===================================================================
--- /Dev/trunk/d3/src/svg/touches.js	(revision 76)
+++ /Dev/trunk/d3/src/svg/touches.js	(revision 76)
@@ -0,0 +1,8 @@
+d3.svg.touches = function(container) {
+  var touches = d3.event.touches;
+  return touches ? d3_array(touches).map(function(touch) {
+    var point = d3_svg_mousePoint(container, touch);
+    point.identifier = touch.identifier;
+    return point;
+  }) : [];
+};
Index: /Dev/trunk/d3/src/time/day.js
===================================================================
--- /Dev/trunk/d3/src/time/day.js	(revision 76)
+++ /Dev/trunk/d3/src/time/day.js	(revision 76)
@@ -0,0 +1,7 @@
+d3.time.day = function(date) {
+  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
+};
+
+d3.time.day.utc = function(date) {
+  return new Date(~~(date / 864e5) * 864e5);
+};
Index: /Dev/trunk/d3/src/time/days.js
===================================================================
--- /Dev/trunk/d3/src/time/days.js	(revision 76)
+++ /Dev/trunk/d3/src/time/days.js	(revision 76)
@@ -0,0 +1,11 @@
+d3.time.days = d3_time_range(d3.time.day, function(date) {
+  date.setDate(date.getDate() + 1);
+}, function(date) {
+  return date.getDate() - 1;
+});
+
+d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
+  date.setUTCDate(date.getUTCDate() + 1);
+}, function(date) {
+  return date.getUTCDate() - 1;
+});
Index: /Dev/trunk/d3/src/time/format-iso.js
===================================================================
--- /Dev/trunk/d3/src/time/format-iso.js	(revision 76)
+++ /Dev/trunk/d3/src/time/format-iso.js	(revision 76)
@@ -0,0 +1,1 @@
+d3.time.format.iso = d3.time.format.utc("%Y-%m-%dT%H:%M:%SZ");
Index: /Dev/trunk/d3/src/time/format-utc.js
===================================================================
--- /Dev/trunk/d3/src/time/format-utc.js	(revision 76)
+++ /Dev/trunk/d3/src/time/format-utc.js	(revision 76)
@@ -0,0 +1,48 @@
+d3.time.format.utc = function(template) {
+  var local = d3.time.format(template);
+
+  function format(date) {
+    var utc = new d3_time_format_utc();
+    utc._ = date;
+    return local(utc);
+  }
+
+  format.parse = function(string) {
+    try {
+      d3_time = d3_time_format_utc;
+      var date = local.parse(string);
+      return date && date._;
+    } finally {
+      d3_time = Date;
+    }
+  };
+
+  format.toString = local.toString;
+
+  return format;
+};
+
+function d3_time_format_utc() {
+  this._ = new Date(Date.UTC.apply(this, arguments));
+}
+
+d3_time_format_utc.prototype = {
+  getDate: function() { return this._.getUTCDate(); },
+  getDay: function() { return this._.getUTCDay(); },
+  getFullYear: function() { return this._.getUTCFullYear(); },
+  getHours: function() { return this._.getUTCHours(); },
+  getMilliseconds: function() { return this._.getUTCMilliseconds(); },
+  getMinutes: function() { return this._.getUTCMinutes(); },
+  getMonth: function() { return this._.getUTCMonth(); },
+  getSeconds: function() { return this._.getUTCSeconds(); },
+  getTimezoneOffset: function() { return 0; },
+  valueOf: function() { return this._.getTime(); },
+  setDate: function(x) { this._.setUTCDate(x); },
+  setDay: function(x) { this._.setUTCDay(x); },
+  setFullYear: function(x) { this._.setUTCFullYear(x); },
+  setHours: function(x) { this._.setUTCHours(x); },
+  setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
+  setMinutes: function(x) { this._.setUTCMinutes(x); },
+  setMonth: function(x) { this._.setUTCMonth(x); },
+  setSeconds: function(x) { this._.setUTCSeconds(x); }
+};
Index: /Dev/trunk/d3/src/time/format.js
===================================================================
--- /Dev/trunk/d3/src/time/format.js	(revision 76)
+++ /Dev/trunk/d3/src/time/format.js	(revision 76)
@@ -0,0 +1,315 @@
+d3.time.format = function(template) {
+  var n = template.length;
+
+  function format(date) {
+    var string = [],
+        i = -1,
+        j = 0,
+        c,
+        f;
+    while (++i < n) {
+      if (template.charCodeAt(i) == 37) {
+        string.push(
+            template.substring(j, i),
+            (f = d3_time_formats[c = template.charAt(++i)])
+            ? f(date) : c);
+        j = i + 1;
+      }
+    }
+    string.push(template.substring(j, i));
+    return string.join("");
+  }
+
+  format.parse = function(string) {
+    var date = new d3_time(1900, 0, 1),
+        i = d3_time_parse(date, template, string, 0);
+    if (i != string.length) return null;
+    if (date.hour12) {
+      var hours = date.getHours() % 12;
+      date.setHours(date.hour12pm ? hours + 12 : hours);
+    }
+    delete date.hour12;
+    delete date.hour12pm;
+    return date;
+  };
+
+  format.toString = function() {
+    return template;
+  };
+
+  return format;
+};
+
+function d3_time_parse(date, template, string, j) {
+  var c,
+      p,
+      i = 0,
+      n = template.length,
+      m = string.length;
+  while (i < n) {
+    if (j >= m) return -1;
+    c = template.charCodeAt(i++);
+    if (c == 37) {
+      p = d3_time_parsers[template.charAt(i++)];
+      if (!p || ((j = p(date, string, j)) < 0)) return -1;
+    } else if (c != string.charCodeAt(j++)) {
+      return -1;
+    }
+  }
+  return j;
+}
+
+var d3_time_zfill2 = d3.format("02d"),
+    d3_time_zfill3 = d3.format("03d"),
+    d3_time_zfill4 = d3.format("04d"),
+    d3_time_sfill2 = d3.format("2d");
+
+var d3_time_formats = {
+  a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
+  A: function(d) { return d3_time_weekdays[d.getDay()]; },
+  b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); },
+  B: function(d) { return d3_time_months[d.getMonth()]; },
+  c: d3.time.format("%a %b %e %H:%M:%S %Y"),
+  d: function(d) { return d3_time_zfill2(d.getDate()); },
+  e: function(d) { return d3_time_sfill2(d.getDate()); },
+  H: function(d) { return d3_time_zfill2(d.getHours()); },
+  I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); },
+  j: d3_time_dayOfYear,
+  m: function(d) { return d3_time_zfill2(d.getMonth() + 1); },
+  M: function(d) { return d3_time_zfill2(d.getMinutes()); },
+  p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; },
+  S: function(d) { return d3_time_zfill2(d.getSeconds()); },
+  U: d3_time_weekNumberSunday,
+  w: function(d) { return d.getDay(); },
+  W: d3_time_weekNumberMonday,
+  x: d3.time.format("%m/%d/%y"),
+  X: d3.time.format("%H:%M:%S"),
+  y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); },
+  Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); },
+  Z: d3_time_zone,
+  "%": function(d) { return "%"; }
+};
+
+var d3_time_parsers = {
+  a: d3_time_parseWeekdayAbbrev,
+  A: d3_time_parseWeekday,
+  b: d3_time_parseMonthAbbrev,
+  B: d3_time_parseMonth,
+  c: d3_time_parseLocaleFull,
+  d: d3_time_parseDay,
+  e: d3_time_parseDay,
+  H: d3_time_parseHour24,
+  I: d3_time_parseHour12,
+  // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; },
+  m: d3_time_parseMonthNumber,
+  M: d3_time_parseMinutes,
+  p: d3_time_parseAmPm,
+  S: d3_time_parseSeconds,
+  // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; },
+  // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; },
+  // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; },
+  x: d3_time_parseLocaleDate,
+  X: d3_time_parseLocaleTime,
+  y: d3_time_parseYear,
+  Y: d3_time_parseFullYear
+  // ,
+  // Z: function(d, s, i) { /*TODO time zone */ return i; },
+  // "%": function(d, s, i) { /*TODO literal % */ return i; }
+};
+
+// Note: weekday is validated, but does not set the date.
+function d3_time_parseWeekdayAbbrev(date, string, i) {
+  return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1;
+}
+
+var d3_time_weekdayAbbrevLookup = {
+  sun: 3,
+  mon: 3,
+  tue: 3,
+  wed: 3,
+  thu: 3,
+  fri: 3,
+  sat: 3
+};
+
+// Note: weekday is validated, but does not set the date.
+function d3_time_parseWeekday(date, string, i) {
+  d3_time_weekdayRe.lastIndex = 0;
+  var n = d3_time_weekdayRe.exec(string.substring(i, i + 10));
+  return n ? i += n[0].length : -1;
+}
+
+var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig;
+
+var d3_time_weekdays = [
+  "Sunday",
+  "Monday",
+  "Tuesday",
+  "Wednesday",
+  "Thursday",
+  "Friday",
+  "Saturday"
+];
+
+function d3_time_parseMonthAbbrev(date, string, i) {
+  var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()];
+  return n == null ? -1 : (date.setMonth(n), i);
+}
+
+var d3_time_monthAbbrevLookup = {
+  jan: 0,
+  feb: 1,
+  mar: 2,
+  apr: 3,
+  may: 4,
+  jun: 5,
+  jul: 6,
+  aug: 7,
+  sep: 8,
+  oct: 9,
+  nov: 10,
+  dec: 11
+};
+
+function d3_time_parseMonth(date, string, i) {
+  d3_time_monthRe.lastIndex = 0;
+  var n = d3_time_monthRe.exec(string.substring(i, i + 12));
+  return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1;
+}
+
+var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig;
+
+var d3_time_monthLookup = {
+  january: 0,
+  february: 1,
+  march: 2,
+  april: 3,
+  may: 4,
+  june: 5,
+  july: 6,
+  august: 7,
+  september: 8,
+  october: 9,
+  november: 10,
+  december: 11
+};
+
+var d3_time_months = [
+  "January",
+  "February",
+  "March",
+  "April",
+  "May",
+  "June",
+  "July",
+  "August",
+  "September",
+  "October",
+  "November",
+  "December"
+];
+
+function d3_time_parseLocaleFull(date, string, i) {
+  return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
+}
+
+function d3_time_parseLocaleDate(date, string, i) {
+  return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
+}
+
+function d3_time_parseLocaleTime(date, string, i) {
+  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
+}
+
+function d3_time_parseFullYear(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 4));
+  return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
+}
+
+function d3_time_parseYear(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
+}
+
+function d3_time_century() {
+  return ~~(new Date().getFullYear() / 1000) * 1000;
+}
+
+function d3_time_parseMonthNumber(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
+}
+
+function d3_time_parseDay(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
+}
+
+// Note: we don't validate that the hour is in the range [0,23].
+function d3_time_parseHour24(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
+}
+
+// Note: we don't validate that the hour is in the range [1,12].
+function d3_time_parseHour12(date, string, i) {
+  date.hour12 = true;
+  return d3_time_parseHour24(date, string, i);
+}
+
+function d3_time_parseMinutes(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
+}
+
+function d3_time_parseSeconds(date, string, i) {
+  d3_time_numberRe.lastIndex = 0;
+  var n = d3_time_numberRe.exec(string.substring(i, i + 2));
+  return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
+}
+
+// Note: we don't look at the next directive.
+var d3_time_numberRe = /\s*\d+/;
+
+function d3_time_parseAmPm(date, string, i) {
+  var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];
+  return n == null ? -1 : (date.hour12pm = n, i);
+}
+
+var d3_time_amPmLookup = {
+  am: 0,
+  pm: 1
+};
+
+function d3_time_year(d) {
+  return new d3_time(d.getFullYear(), 0, 1);
+}
+
+function d3_time_dayOfYear(d) {
+  return d3_time_zfill3(1 + ~~((d - d3_time_year(d)) / 864e5));
+}
+
+function d3_time_weekNumberSunday(d) {
+  var d0 = d3_time_year(d);
+  return d3_time_zfill2(~~(((d - d0) / 864e5 + d0.getDay()) / 7));
+}
+
+function d3_time_weekNumberMonday(d) {
+  var d0 = d3_time_year(d);
+  return d3_time_zfill2(~~(((d - d0) / 864e5 + (d0.getDay() + 6) % 7) / 7));
+}
+
+// TODO table of time zone offset names?
+function d3_time_zone(d) {
+  var z = d.getTimezoneOffset(),
+      zs = z > 0 ? "-" : "+",
+      zh = ~~(Math.abs(z) / 60),
+      zm = Math.abs(z) % 60;
+  return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm);
+}
Index: /Dev/trunk/d3/src/time/hour.js
===================================================================
--- /Dev/trunk/d3/src/time/hour.js	(revision 76)
+++ /Dev/trunk/d3/src/time/hour.js	(revision 76)
@@ -0,0 +1,8 @@
+d3.time.hour = function(date) {
+  var offset = date.getTimezoneOffset() / 60;
+  return new Date((~~(date / 36e5 - offset) + offset) * 36e5);
+};
+
+d3.time.hour.utc = function(date) {
+  return new Date(~~(date / 36e5) * 36e5);
+};
Index: /Dev/trunk/d3/src/time/hours.js
===================================================================
--- /Dev/trunk/d3/src/time/hours.js	(revision 76)
+++ /Dev/trunk/d3/src/time/hours.js	(revision 76)
@@ -0,0 +1,11 @@
+d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
+  return date.getHours();
+});
+
+d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) {
+  return date.getUTCHours();
+});
+
+function d3_time_hoursStep(date) {
+  date.setTime(date.getTime() + 36e5);
+}
Index: /Dev/trunk/d3/src/time/minute.js
===================================================================
--- /Dev/trunk/d3/src/time/minute.js	(revision 76)
+++ /Dev/trunk/d3/src/time/minute.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.time.minute = function(date) {
+  return new Date(~~(date / 6e4) * 6e4);
+};
+
+d3.time.minute.utc = d3.time.minute;
Index: /Dev/trunk/d3/src/time/minutes.js
===================================================================
--- /Dev/trunk/d3/src/time/minutes.js	(revision 76)
+++ /Dev/trunk/d3/src/time/minutes.js	(revision 76)
@@ -0,0 +1,11 @@
+d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
+  return date.getMinutes();
+});
+
+d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
+  return date.getUTCMinutes();
+});
+
+function d3_time_minutesStep(date) {
+  date.setTime(date.getTime() + 6e4); // assumes no leap seconds
+}
Index: /Dev/trunk/d3/src/time/month.js
===================================================================
--- /Dev/trunk/d3/src/time/month.js	(revision 76)
+++ /Dev/trunk/d3/src/time/month.js	(revision 76)
@@ -0,0 +1,7 @@
+d3.time.month = function(date) {
+  return new Date(date.getFullYear(), date.getMonth(), 1);
+};
+
+d3.time.month.utc = function(date) {
+  return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));
+};
Index: /Dev/trunk/d3/src/time/months.js
===================================================================
--- /Dev/trunk/d3/src/time/months.js	(revision 76)
+++ /Dev/trunk/d3/src/time/months.js	(revision 76)
@@ -0,0 +1,11 @@
+d3.time.months = d3_time_range(d3.time.month, function(date) {
+  date.setMonth(date.getMonth() + 1);
+}, function(date) {
+  return date.getMonth();
+});
+
+d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
+  date.setUTCMonth(date.getUTCMonth() + 1);
+}, function(date) {
+  return date.getUTCMonth();
+});
Index: /Dev/trunk/d3/src/time/range.js
===================================================================
--- /Dev/trunk/d3/src/time/range.js	(revision 76)
+++ /Dev/trunk/d3/src/time/range.js	(revision 76)
@@ -0,0 +1,16 @@
+function d3_time_range(floor, step, number) {
+  return function(t0, t1, dt) {
+    var time = floor(t0), times = [];
+    if (time < t0) step(time);
+    if (dt > 1) {
+      while (time < t1) {
+        var date = new Date(+time);
+        if (!(number(date) % dt)) times.push(date);
+        step(time);
+      }
+    } else {
+      while (time < t1) times.push(new Date(+time)), step(time);
+    }
+    return times;
+  };
+}
Index: /Dev/trunk/d3/src/time/scale-utc.js
===================================================================
--- /Dev/trunk/d3/src/time/scale-utc.js	(revision 76)
+++ /Dev/trunk/d3/src/time/scale-utc.js	(revision 76)
@@ -0,0 +1,36 @@
+var d3_time_scaleUTCMethods = [
+  [d3.time.seconds.utc, 1],
+  [d3.time.seconds.utc, 5],
+  [d3.time.seconds.utc, 15],
+  [d3.time.seconds.utc, 30],
+  [d3.time.minutes.utc, 1],
+  [d3.time.minutes.utc, 5],
+  [d3.time.minutes.utc, 15],
+  [d3.time.minutes.utc, 30],
+  [d3.time.hours.utc, 1],
+  [d3.time.hours.utc, 3],
+  [d3.time.hours.utc, 6],
+  [d3.time.hours.utc, 12],
+  [d3.time.days.utc, 1],
+  [d3.time.days.utc, 2],
+  [d3.time.weeks.utc, 1],
+  [d3.time.months.utc, 1],
+  [d3.time.months.utc, 3],
+  [d3.time.years.utc, 1]
+];
+
+var d3_time_scaleUTCFormats = [
+  [d3.time.format.utc("%Y"), function(d) { return true; }],
+  [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
+  [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
+  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
+  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
+  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
+  [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
+];
+
+var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
+
+d3.time.scale.utc = function() {
+  return d3_time_scale(d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
+};
Index: /Dev/trunk/d3/src/time/scale.js
===================================================================
--- /Dev/trunk/d3/src/time/scale.js	(revision 76)
+++ /Dev/trunk/d3/src/time/scale.js	(revision 76)
@@ -0,0 +1,120 @@
+// TODO nice
+function d3_time_scale(methods, format) {
+  var linear = d3.scale.linear();
+
+  function scale(x) {
+    return linear(x);
+  }
+
+  scale.invert = function(x) {
+    return d3_time_scaleDate(linear.invert(x));
+  };
+
+  scale.domain = function(x) {
+    if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
+    linear.domain(x);
+    return scale;
+  };
+
+  scale.ticks = function(m, k) {
+    var extent = d3_time_scaleExtent(scale.domain());
+    if (typeof m !== "function") {
+      var span = extent[1] - extent[0],
+          target = span / m,
+          i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
+      if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
+      m = methods[i];
+      k = m[1];
+      m = m[0];
+    }
+    return m(extent[0], extent[1], k);
+  };
+
+  scale.tickFormat = function() {
+    return format;
+  };
+
+  // TOOD expose d3_scale_linear_rebind?
+  scale.range = d3.rebind(scale, linear.range);
+  scale.rangeRound = d3.rebind(scale, linear.rangeRound);
+  scale.interpolate = d3.rebind(scale, linear.interpolate);
+  scale.clamp = d3.rebind(scale, linear.clamp);
+
+  return scale;
+}
+
+// TODO expose d3_scaleExtent?
+function d3_time_scaleExtent(domain) {
+  var start = domain[0], stop = domain[domain.length - 1];
+  return start < stop ? [start, stop] : [stop, start];
+}
+
+function d3_time_scaleDate(t) {
+  return new Date(t);
+}
+
+function d3_time_scaleFormat(formats) {
+  return function(date) {
+    var i = formats.length - 1, f = formats[i];
+    while (!f[1](date)) f = formats[--i];
+    return f[0](date);
+  };
+}
+
+var d3_time_scaleSteps = [
+  1e3,    // 1-second
+  5e3,    // 5-second
+  15e3,   // 15-second
+  3e4,    // 30-second
+  6e4,    // 1-minute
+  3e5,    // 5-minute
+  9e5,    // 15-minute
+  18e5,   // 30-minute
+  36e5,   // 1-hour
+  108e5,  // 3-hour
+  216e5,  // 6-hour
+  432e5,  // 12-hour
+  864e5,  // 1-day
+  1728e5, // 2-day
+  6048e5, // 1-week
+  1728e6, // 1-month
+  7776e6, // 3-month
+  31536e6 // 1-year
+];
+
+var d3_time_scaleLocalMethods = [
+  [d3.time.seconds, 1],
+  [d3.time.seconds, 5],
+  [d3.time.seconds, 15],
+  [d3.time.seconds, 30],
+  [d3.time.minutes, 1],
+  [d3.time.minutes, 5],
+  [d3.time.minutes, 15],
+  [d3.time.minutes, 30],
+  [d3.time.hours, 1],
+  [d3.time.hours, 3],
+  [d3.time.hours, 6],
+  [d3.time.hours, 12],
+  [d3.time.days, 1],
+  [d3.time.days, 2],
+  [d3.time.weeks, 1],
+  [d3.time.months, 1],
+  [d3.time.months, 3],
+  [d3.time.years, 1]
+];
+
+var d3_time_scaleLocalFormats = [
+  [d3.time.format("%Y"), function(d) { return true; }],
+  [d3.time.format("%B"), function(d) { return d.getMonth(); }],
+  [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }],
+  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
+  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
+  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
+  [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
+];
+
+var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
+
+d3.time.scale = function() {
+  return d3_time_scale(d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
+};
Index: /Dev/trunk/d3/src/time/second.js
===================================================================
--- /Dev/trunk/d3/src/time/second.js	(revision 76)
+++ /Dev/trunk/d3/src/time/second.js	(revision 76)
@@ -0,0 +1,5 @@
+d3.time.second = function(date) {
+  return new Date(~~(date / 1e3) * 1e3);
+};
+
+d3.time.second.utc = d3.time.second;
Index: /Dev/trunk/d3/src/time/seconds.js
===================================================================
--- /Dev/trunk/d3/src/time/seconds.js	(revision 76)
+++ /Dev/trunk/d3/src/time/seconds.js	(revision 76)
@@ -0,0 +1,7 @@
+d3.time.seconds = d3_time_range(d3.time.second, function(date) {
+  date.setTime(date.getTime() + 1e3);
+}, function(date) {
+  return date.getSeconds();
+});
+
+d3.time.seconds.utc = d3.time.seconds;
Index: /Dev/trunk/d3/src/time/time.js
===================================================================
--- /Dev/trunk/d3/src/time/time.js	(revision 76)
+++ /Dev/trunk/d3/src/time/time.js	(revision 76)
@@ -0,0 +1,3 @@
+d3.time = {};
+
+var d3_time = Date;
Index: /Dev/trunk/d3/src/time/week.js
===================================================================
--- /Dev/trunk/d3/src/time/week.js	(revision 76)
+++ /Dev/trunk/d3/src/time/week.js	(revision 76)
@@ -0,0 +1,9 @@
+d3.time.week = function(date) {
+  (date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
+  return date;
+};
+
+d3.time.week.utc = function(date) {
+  (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay());
+  return date;
+};
Index: /Dev/trunk/d3/src/time/weeks.js
===================================================================
--- /Dev/trunk/d3/src/time/weeks.js	(revision 76)
+++ /Dev/trunk/d3/src/time/weeks.js	(revision 76)
@@ -0,0 +1,11 @@
+d3.time.weeks = d3_time_range(d3.time.week, function(date) {
+  date.setDate(date.getDate() + 7);
+}, function(date) {
+  return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5);
+});
+
+d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
+  date.setUTCDate(date.getUTCDate() + 7);
+}, function(date) {
+  return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5);
+});
Index: /Dev/trunk/d3/src/time/year.js
===================================================================
--- /Dev/trunk/d3/src/time/year.js	(revision 76)
+++ /Dev/trunk/d3/src/time/year.js	(revision 76)
@@ -0,0 +1,7 @@
+d3.time.year = function(date) {
+  return new Date(date.getFullYear(), 0, 1);
+};
+
+d3.time.year.utc = function(date) {
+  return new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
+};
Index: /Dev/trunk/d3/src/time/years.js
===================================================================
--- /Dev/trunk/d3/src/time/years.js	(revision 76)
+++ /Dev/trunk/d3/src/time/years.js	(revision 76)
@@ -0,0 +1,11 @@
+d3.time.years = d3_time_range(d3.time.year, function(date) {
+  date.setFullYear(date.getFullYear() + 1);
+}, function(date) {
+  return date.getFullYear();
+});
+
+d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) {
+  date.setUTCFullYear(date.getUTCFullYear() + 1);
+}, function(date) {
+  return date.getUTCFullYear();
+});
Index: /Dev/trunk/d3/test/barley.json
===================================================================
--- /Dev/trunk/d3/test/barley.json	(revision 76)
+++ /Dev/trunk/d3/test/barley.json	(revision 76)
@@ -0,0 +1,122 @@
+[
+{"yield":27.00000,"variety":"Manchuria","year":1931,"site":"University Farm"},
+{"yield":48.86667,"variety":"Manchuria","year":1931,"site":"Waseca"},
+{"yield":27.43334,"variety":"Manchuria","year":1931,"site":"Morris"},
+{"yield":39.93333,"variety":"Manchuria","year":1931,"site":"Crookston"},
+{"yield":32.96667,"variety":"Manchuria","year":1931,"site":"Grand Rapids"},
+{"yield":28.96667,"variety":"Manchuria","year":1931,"site":"Duluth"},
+{"yield":43.06666,"variety":"Glabron","year":1931,"site":"University Farm"},
+{"yield":55.20000,"variety":"Glabron","year":1931,"site":"Waseca"},
+{"yield":28.76667,"variety":"Glabron","year":1931,"site":"Morris"},
+{"yield":38.13333,"variety":"Glabron","year":1931,"site":"Crookston"},
+{"yield":29.13333,"variety":"Glabron","year":1931,"site":"Grand Rapids"},
+{"yield":29.66667,"variety":"Glabron","year":1931,"site":"Duluth"},
+{"yield":35.13333,"variety":"Svansota","year":1931,"site":"University Farm"},
+{"yield":47.33333,"variety":"Svansota","year":1931,"site":"Waseca"},
+{"yield":25.76667,"variety":"Svansota","year":1931,"site":"Morris"},
+{"yield":40.46667,"variety":"Svansota","year":1931,"site":"Crookston"},
+{"yield":29.66667,"variety":"Svansota","year":1931,"site":"Grand Rapids"},
+{"yield":25.70000,"variety":"Svansota","year":1931,"site":"Duluth"},
+{"yield":39.90000,"variety":"Velvet","year":1931,"site":"University Farm"},
+{"yield":50.23333,"variety":"Velvet","year":1931,"site":"Waseca"},
+{"yield":26.13333,"variety":"Velvet","year":1931,"site":"Morris"},
+{"yield":41.33333,"variety":"Velvet","year":1931,"site":"Crookston"},
+{"yield":23.03333,"variety":"Velvet","year":1931,"site":"Grand Rapids"},
+{"yield":26.30000,"variety":"Velvet","year":1931,"site":"Duluth"},
+{"yield":36.56666,"variety":"Trebi","year":1931,"site":"University Farm"},
+{"yield":63.83330,"variety":"Trebi","year":1931,"site":"Waseca"},
+{"yield":43.76667,"variety":"Trebi","year":1931,"site":"Morris"},
+{"yield":46.93333,"variety":"Trebi","year":1931,"site":"Crookston"},
+{"yield":29.76667,"variety":"Trebi","year":1931,"site":"Grand Rapids"},
+{"yield":33.93333,"variety":"Trebi","year":1931,"site":"Duluth"},
+{"yield":43.26667,"variety":"No. 457","year":1931,"site":"University Farm"},
+{"yield":58.10000,"variety":"No. 457","year":1931,"site":"Waseca"},
+{"yield":28.70000,"variety":"No. 457","year":1931,"site":"Morris"},
+{"yield":45.66667,"variety":"No. 457","year":1931,"site":"Crookston"},
+{"yield":32.16667,"variety":"No. 457","year":1931,"site":"Grand Rapids"},
+{"yield":33.60000,"variety":"No. 457","year":1931,"site":"Duluth"},
+{"yield":36.60000,"variety":"No. 462","year":1931,"site":"University Farm"},
+{"yield":65.76670,"variety":"No. 462","year":1931,"site":"Waseca"},
+{"yield":30.36667,"variety":"No. 462","year":1931,"site":"Morris"},
+{"yield":48.56666,"variety":"No. 462","year":1931,"site":"Crookston"},
+{"yield":24.93334,"variety":"No. 462","year":1931,"site":"Grand Rapids"},
+{"yield":28.10000,"variety":"No. 462","year":1931,"site":"Duluth"},
+{"yield":32.76667,"variety":"Peatland","year":1931,"site":"University Farm"},
+{"yield":48.56666,"variety":"Peatland","year":1931,"site":"Waseca"},
+{"yield":29.86667,"variety":"Peatland","year":1931,"site":"Morris"},
+{"yield":41.60000,"variety":"Peatland","year":1931,"site":"Crookston"},
+{"yield":34.70000,"variety":"Peatland","year":1931,"site":"Grand Rapids"},
+{"yield":32.00000,"variety":"Peatland","year":1931,"site":"Duluth"},
+{"yield":24.66667,"variety":"No. 475","year":1931,"site":"University Farm"},
+{"yield":46.76667,"variety":"No. 475","year":1931,"site":"Waseca"},
+{"yield":22.60000,"variety":"No. 475","year":1931,"site":"Morris"},
+{"yield":44.10000,"variety":"No. 475","year":1931,"site":"Crookston"},
+{"yield":19.70000,"variety":"No. 475","year":1931,"site":"Grand Rapids"},
+{"yield":33.06666,"variety":"No. 475","year":1931,"site":"Duluth"},
+{"yield":39.30000,"variety":"Wisconsin No. 38","year":1931,"site":"University Farm"},
+{"yield":58.80000,"variety":"Wisconsin No. 38","year":1931,"site":"Waseca"},
+{"yield":29.46667,"variety":"Wisconsin No. 38","year":1931,"site":"Morris"},
+{"yield":49.86667,"variety":"Wisconsin No. 38","year":1931,"site":"Crookston"},
+{"yield":34.46667,"variety":"Wisconsin No. 38","year":1931,"site":"Grand Rapids"},
+{"yield":31.60000,"variety":"Wisconsin No. 38","year":1931,"site":"Duluth"},
+{"yield":26.90000,"variety":"Manchuria","year":1932,"site":"University Farm"},
+{"yield":33.46667,"variety":"Manchuria","year":1932,"site":"Waseca"},
+{"yield":34.36666,"variety":"Manchuria","year":1932,"site":"Morris"},
+{"yield":32.96667,"variety":"Manchuria","year":1932,"site":"Crookston"},
+{"yield":22.13333,"variety":"Manchuria","year":1932,"site":"Grand Rapids"},
+{"yield":22.56667,"variety":"Manchuria","year":1932,"site":"Duluth"},
+{"yield":36.80000,"variety":"Glabron","year":1932,"site":"University Farm"},
+{"yield":37.73333,"variety":"Glabron","year":1932,"site":"Waseca"},
+{"yield":35.13333,"variety":"Glabron","year":1932,"site":"Morris"},
+{"yield":26.16667,"variety":"Glabron","year":1932,"site":"Crookston"},
+{"yield":14.43333,"variety":"Glabron","year":1932,"site":"Grand Rapids"},
+{"yield":25.86667,"variety":"Glabron","year":1932,"site":"Duluth"},
+{"yield":27.43334,"variety":"Svansota","year":1932,"site":"University Farm"},
+{"yield":38.50000,"variety":"Svansota","year":1932,"site":"Waseca"},
+{"yield":35.03333,"variety":"Svansota","year":1932,"site":"Morris"},
+{"yield":20.63333,"variety":"Svansota","year":1932,"site":"Crookston"},
+{"yield":16.63333,"variety":"Svansota","year":1932,"site":"Grand Rapids"},
+{"yield":22.23333,"variety":"Svansota","year":1932,"site":"Duluth"},
+{"yield":26.80000,"variety":"Velvet","year":1932,"site":"University Farm"},
+{"yield":37.40000,"variety":"Velvet","year":1932,"site":"Waseca"},
+{"yield":38.83333,"variety":"Velvet","year":1932,"site":"Morris"},
+{"yield":32.06666,"variety":"Velvet","year":1932,"site":"Crookston"},
+{"yield":32.23333,"variety":"Velvet","year":1932,"site":"Grand Rapids"},
+{"yield":22.46667,"variety":"Velvet","year":1932,"site":"Duluth"},
+{"yield":29.06667,"variety":"Trebi","year":1932,"site":"University Farm"},
+{"yield":49.23330,"variety":"Trebi","year":1932,"site":"Waseca"},
+{"yield":46.63333,"variety":"Trebi","year":1932,"site":"Morris"},
+{"yield":41.83333,"variety":"Trebi","year":1932,"site":"Crookston"},
+{"yield":20.63333,"variety":"Trebi","year":1932,"site":"Grand Rapids"},
+{"yield":30.60000,"variety":"Trebi","year":1932,"site":"Duluth"},
+{"yield":26.43334,"variety":"No. 457","year":1932,"site":"University Farm"},
+{"yield":42.20000,"variety":"No. 457","year":1932,"site":"Waseca"},
+{"yield":43.53334,"variety":"No. 457","year":1932,"site":"Morris"},
+{"yield":34.33333,"variety":"No. 457","year":1932,"site":"Crookston"},
+{"yield":19.46667,"variety":"No. 457","year":1932,"site":"Grand Rapids"},
+{"yield":22.70000,"variety":"No. 457","year":1932,"site":"Duluth"},
+{"yield":25.56667,"variety":"No. 462","year":1932,"site":"University Farm"},
+{"yield":44.70000,"variety":"No. 462","year":1932,"site":"Waseca"},
+{"yield":47.00000,"variety":"No. 462","year":1932,"site":"Morris"},
+{"yield":30.53333,"variety":"No. 462","year":1932,"site":"Crookston"},
+{"yield":19.90000,"variety":"No. 462","year":1932,"site":"Grand Rapids"},
+{"yield":22.50000,"variety":"No. 462","year":1932,"site":"Duluth"},
+{"yield":28.06667,"variety":"Peatland","year":1932,"site":"University Farm"},
+{"yield":36.03333,"variety":"Peatland","year":1932,"site":"Waseca"},
+{"yield":43.20000,"variety":"Peatland","year":1932,"site":"Morris"},
+{"yield":25.23333,"variety":"Peatland","year":1932,"site":"Crookston"},
+{"yield":26.76667,"variety":"Peatland","year":1932,"site":"Grand Rapids"},
+{"yield":31.36667,"variety":"Peatland","year":1932,"site":"Duluth"},
+{"yield":30.00000,"variety":"No. 475","year":1932,"site":"University Farm"},
+{"yield":41.26667,"variety":"No. 475","year":1932,"site":"Waseca"},
+{"yield":44.23333,"variety":"No. 475","year":1932,"site":"Morris"},
+{"yield":32.13333,"variety":"No. 475","year":1932,"site":"Crookston"},
+{"yield":15.23333,"variety":"No. 475","year":1932,"site":"Grand Rapids"},
+{"yield":27.36667,"variety":"No. 475","year":1932,"site":"Duluth"},
+{"yield":38.00000,"variety":"Wisconsin No. 38","year":1932,"site":"University Farm"},
+{"yield":58.16667,"variety":"Wisconsin No. 38","year":1932,"site":"Waseca"},
+{"yield":47.16667,"variety":"Wisconsin No. 38","year":1932,"site":"Morris"},
+{"yield":35.90000,"variety":"Wisconsin No. 38","year":1932,"site":"Crookston"},
+{"yield":20.66667,"variety":"Wisconsin No. 38","year":1932,"site":"Grand Rapids"},
+{"yield":29.33333,"variety":"Wisconsin No. 38","year":1932,"site":"Duluth"}
+]
Index: /Dev/trunk/d3/test/core/test-append.js
===================================================================
--- /Dev/trunk/d3/test/core/test-append.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-append.js	(revision 76)
@@ -0,0 +1,15 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3");
+
+d3.select("body").append("svg:svg");
+
+console.log("append svg:svg:");
+console.log("  ", document.body.innerHTML);
+console.log("");
+
+d3.select("body").append("div");
+
+console.log("append div:");
+console.log("  ", document.body.innerHTML);
+console.log("");
Index: /Dev/trunk/d3/test/core/test-append.out
===================================================================
--- /Dev/trunk/d3/test/core/test-append.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-append.out	(revision 76)
@@ -0,0 +1,6 @@
+append svg:svg:
+   <svg/>
+
+append div:
+   <svg/><div/>
+
Index: /Dev/trunk/d3/test/core/test-attr.js
===================================================================
--- /Dev/trunk/d3/test/core/test-attr.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-attr.js	(revision 76)
@@ -0,0 +1,24 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3");
+
+d3.select("body").append("svg:svg")
+    .attr("width", "960")
+    .attr("height", "500");
+
+console.log("constant attr:");
+console.log("  ", document.body.innerHTML);
+console.log("");
+
+d3.select("body").selectAll("div")
+    .data("abcdefghijk".split(""))
+  .enter().append("div")
+    .attr("value", function(d, i) { return d; })
+    .attr("index", function(d, i) { return i; });
+
+console.log("function attr:");
+d3.selectAll("div").each(function() {
+  var d = d3.select(this);
+  console.log("  ", d.attr("value"), d.attr("index"));
+});
+console.log("");
Index: /Dev/trunk/d3/test/core/test-attr.out
===================================================================
--- /Dev/trunk/d3/test/core/test-attr.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-attr.out	(revision 76)
@@ -0,0 +1,16 @@
+constant attr:
+   <svg width="960" height="500"/>
+
+function attr:
+   a 0
+   b 1
+   c 2
+   d 3
+   e 4
+   f 5
+   g 6
+   h 7
+   i 8
+   j 9
+   k 10
+
Index: /Dev/trunk/d3/test/core/test-bisect.js
===================================================================
--- /Dev/trunk/d3/test/core/test-bisect.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-bisect.js	(revision 76)
@@ -0,0 +1,66 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var a = [1,2,3,4],
+    l = d3.bisectLeft,
+    r = d3.bisectRight;
+
+console.log("exact match:");
+console.log("    -1 ->", l(a, -1), r(a, -1));
+console.log("     0 ->", l(a, 0), r(a, 0));
+console.log("     1 ->", l(a, 1), r(a, 1));
+console.log("     2 ->", l(a, 2), r(a, 2));
+console.log("     3 ->", l(a, 3), r(a, 3));
+console.log("     4 ->", l(a, 4), r(a, 4));
+console.log("     5 ->", l(a, 5), r(a, 5));
+console.log("");
+
+console.log("non-exact match:");
+console.log("   -.1 ->", l(a, -.1), r(a, -.1));
+console.log("    .1 ->", l(a, .1), r(a, .1));
+console.log("   1.1 ->", l(a, 1.1), r(a, 1.1));
+console.log("   2.1 ->", l(a, 2.1), r(a, 2.1));
+console.log("   3.1 ->", l(a, 3.1), r(a, 3.1));
+console.log("   4.1 ->", l(a, 4.1), r(a, 4.1));
+console.log("   5.1 ->", l(a, 5.1), r(a, 5.1));
+console.log("");
+
+console.log("weird values:");
+console.log("        NaN ->", l(a, NaN), r(a, NaN));
+console.log("   Infinity ->", l(a, Infinity), r(a, Infinity));
+console.log("  -Infinity ->", l(a, -Infinity), r(a, -Infinity));
+console.log("");
+
+console.log("d3.bisect === d3.bisectRight:");
+console.log("  ", d3.bisect === r);
+console.log("");
+
+console.log("lo:");
+console.log("    -1 ->", l(a, -1, 2), r(a, -1, 2));
+console.log("     0 ->", l(a, 0, 2), r(a, 0, 2));
+console.log("     1 ->", l(a, 1, 2), r(a, 1, 2));
+console.log("     2 ->", l(a, 2, 2), r(a, 2, 2));
+console.log("     3 ->", l(a, 3, 2), r(a, 3, 2));
+console.log("     4 ->", l(a, 4, 2), r(a, 4, 2));
+console.log("     5 ->", l(a, 5, 2), r(a, 5, 2));
+console.log("");
+
+console.log("hi:");
+console.log("    -1 ->", l(a, -1, 0, 2), r(a, -1, 0, 2));
+console.log("     0 ->", l(a, 0, 0, 2), r(a, 0, 0, 2));
+console.log("     1 ->", l(a, 1, 0, 2), r(a, 1, 0, 2));
+console.log("     2 ->", l(a, 2, 0, 2), r(a, 2, 0, 2));
+console.log("     3 ->", l(a, 3, 0, 2), r(a, 3, 0, 2));
+console.log("     4 ->", l(a, 4, 0, 2), r(a, 4, 0, 2));
+console.log("     5 ->", l(a, 5, 0, 2), r(a, 5, 0, 2));
+console.log("");
+
+console.log("lo and hi:");
+console.log("    -1 ->", l(a, -1, 1, 3), r(a, -1, 1, 3));
+console.log("     0 ->", l(a, 0, 1, 3), r(a, 0, 1, 3));
+console.log("     1 ->", l(a, 1, 1, 3), r(a, 1, 1, 3));
+console.log("     2 ->", l(a, 2, 1, 3), r(a, 2, 1, 3));
+console.log("     3 ->", l(a, 3, 1, 3), r(a, 3, 1, 3));
+console.log("     4 ->", l(a, 4, 1, 3), r(a, 4, 1, 3));
+console.log("     5 ->", l(a, 5, 1, 3), r(a, 5, 1, 3));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-bisect.out
===================================================================
--- /Dev/trunk/d3/test/core/test-bisect.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-bisect.out	(revision 76)
@@ -0,0 +1,53 @@
+exact match:
+    -1 -> 0 0
+     0 -> 0 0
+     1 -> 0 1
+     2 -> 1 2
+     3 -> 2 3
+     4 -> 3 4
+     5 -> 4 4
+
+non-exact match:
+   -.1 -> 0 0
+    .1 -> 0 0
+   1.1 -> 1 1
+   2.1 -> 2 2
+   3.1 -> 3 3
+   4.1 -> 4 4
+   5.1 -> 4 4
+
+weird values:
+        NaN -> 0 4
+   Infinity -> 4 4
+  -Infinity -> 0 0
+
+d3.bisect === d3.bisectRight:
+   true
+
+lo:
+    -1 -> 2 2
+     0 -> 2 2
+     1 -> 2 2
+     2 -> 2 2
+     3 -> 2 3
+     4 -> 3 4
+     5 -> 4 4
+
+hi:
+    -1 -> 0 0
+     0 -> 0 0
+     1 -> 0 1
+     2 -> 1 2
+     3 -> 2 2
+     4 -> 2 2
+     5 -> 2 2
+
+lo and hi:
+    -1 -> 1 1
+     0 -> 1 1
+     1 -> 1 1
+     2 -> 1 2
+     3 -> 2 3
+     4 -> 3 3
+     5 -> 3 3
+
Index: /Dev/trunk/d3/test/core/test-call.js
===================================================================
--- /Dev/trunk/d3/test/core/test-call.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-call.js	(revision 76)
@@ -0,0 +1,21 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3.min");
+
+var vis = d3.select("body");
+
+console.log("zero arguments:");
+vis.call(function(a, b) {
+  console.log("  this:", vis === this ? "vis" : this);
+  console.log("  a:", vis === a ? "vis" : a);
+  console.log("  b:", b);
+});
+console.log("");
+
+console.log("one argument:");
+vis.call(function(a, b) {
+  console.log("  this:", vis === this ? "vis" : this);
+  console.log("  a:", vis === a ? "vis" : a);
+  console.log("  b:", b);
+}, "test");
+console.log("");
Index: /Dev/trunk/d3/test/core/test-call.out
===================================================================
--- /Dev/trunk/d3/test/core/test-call.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-call.out	(revision 76)
@@ -0,0 +1,10 @@
+zero arguments:
+  this: vis
+  a: vis
+  b: undefined
+
+one argument:
+  this: vis
+  a: vis
+  b: test
+
Index: /Dev/trunk/d3/test/core/test-classed.js
===================================================================
--- /Dev/trunk/d3/test/core/test-classed.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-classed.js	(revision 76)
@@ -0,0 +1,40 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3");
+
+var div = d3.select("body").append("div");
+
+div.classed("foo", true);
+console.log("constant classed:");
+console.log("  ", document.body.innerHTML);
+console.log("");
+
+div.classed("foo", true);
+console.log("add existing class:");
+console.log("  ", document.body.innerHTML);
+console.log("  ", div.classed("foo"));
+console.log("");
+
+div.classed("bar", function() { return true; });
+console.log("function classed:");
+console.log("  ", document.body.innerHTML);
+console.log("  ", div.classed("bar"));
+console.log("");
+
+div.classed("foo", false);
+console.log("remove constant class:");
+console.log("  ", document.body.innerHTML);
+console.log("  ", div.classed("foo"));
+console.log("");
+
+div.classed("foo", false);
+console.log("remove missing class:");
+console.log("  ", document.body.innerHTML);
+console.log("  ", div.classed("foo"));
+console.log("");
+
+div.classed("bar", function() { return false; });
+console.log("remove function class:");
+console.log("  ", document.body.innerHTML);
+console.log("  ", div.classed("bar"));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-classed.out
===================================================================
--- /Dev/trunk/d3/test/core/test-classed.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-classed.out	(revision 76)
@@ -0,0 +1,23 @@
+constant classed:
+   <div class="foo"/>
+
+add existing class:
+   <div class="foo"/>
+   true
+
+function classed:
+   <div class="foo bar"/>
+   true
+
+remove constant class:
+   <div class="bar"/>
+   false
+
+remove missing class:
+   <div class="bar"/>
+   false
+
+remove function class:
+   <div class=""/>
+   false
+
Index: /Dev/trunk/d3/test/core/test-format.js
===================================================================
--- /Dev/trunk/d3/test/core/test-format.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-format.js	(revision 76)
@@ -0,0 +1,194 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+console.log("zero fill:");
+console.log("  ", d3.format("08d")(0));
+console.log("  ", d3.format("08d")(42));
+console.log("  ", d3.format("08d")(42000000));
+console.log("  ", d3.format("08d")(420000000));
+console.log("  ", d3.format("08d")(-4));
+console.log("  ", d3.format("08d")(-42));
+console.log("  ", d3.format("08d")(-4200000));
+console.log("  ", d3.format("08d")(-42000000));
+console.log("");
+
+console.log("space fill:");
+console.log("  ", d3.format("8d")(0));
+console.log("  ", d3.format("8d")(42));
+console.log("  ", d3.format("8d")(42000000));
+console.log("  ", d3.format("8d")(420000000));
+console.log("  ", d3.format("8d")(-4));
+console.log("  ", d3.format("8d")(-42));
+console.log("  ", d3.format("8d")(-4200000));
+console.log("  ", d3.format("8d")(-42000000));
+console.log("");
+
+// TODO fill with other characters (requires align support)
+
+console.log("grouping:");
+console.log("  ", d3.format(",d")(0));
+console.log("  ", d3.format(",d")(42));
+console.log("  ", d3.format(",d")(42000000));
+console.log("  ", d3.format(",d")(420000000));
+console.log("  ", d3.format(",d")(-4));
+console.log("  ", d3.format(",d")(-42));
+console.log("  ", d3.format(",d")(-4200000));
+console.log("  ", d3.format(",d")(-42000000));
+console.log("");
+
+console.log("grouping with zero fill:");
+console.log("  ", d3.format("01,d")(0));
+console.log("  ", d3.format("01,d")(0));
+console.log("  ", d3.format("02,d")(0));
+console.log("  ", d3.format("03,d")(0));
+console.log("  ", d3.format("05,d")(0));
+console.log("  ", d3.format("08,d")(0));
+console.log("  ", d3.format("013,d")(0));
+console.log("  ", d3.format("021,d")(0));
+console.log("");
+
+console.log("grouping with zero fill (overflow):");
+console.log("  ", d3.format("01,d")(1));
+console.log("  ", d3.format("01,d")(1));
+console.log("  ", d3.format("02,d")(12));
+console.log("  ", d3.format("03,d")(123));
+console.log("  ", d3.format("05,d")(12345));
+console.log("  ", d3.format("08,d")(12345678));
+console.log("  ", d3.format("013,d")(1234567890123));
+console.log("");
+
+console.log("grouping with space fill:");
+console.log("  ", d3.format("1,d")(0));
+console.log("  ", d3.format("1,d")(0));
+console.log("  ", d3.format("2,d")(0));
+console.log("  ", d3.format("3,d")(0));
+console.log("  ", d3.format("5,d")(0));
+console.log("  ", d3.format("8,d")(0));
+console.log("  ", d3.format("13,d")(0));
+console.log("  ", d3.format("21,d")(0));
+console.log("");
+
+console.log("grouping with space fill (overflow):");
+console.log("  ", d3.format("1,d")(1));
+console.log("  ", d3.format("1,d")(1));
+console.log("  ", d3.format("2,d")(12));
+console.log("  ", d3.format("3,d")(123));
+console.log("  ", d3.format("5,d")(12345));
+console.log("  ", d3.format("8,d")(12345678));
+console.log("  ", d3.format("13,d")(1234567890123));
+console.log("");
+
+console.log("grouping with general notation:");
+console.log("  ", d3.format(",g")(0));
+console.log("  ", d3.format(",g")(42));
+console.log("  ", d3.format(",g")(42000000));
+console.log("  ", d3.format(",g")(420000000));
+console.log("  ", d3.format(",g")(-4));
+console.log("  ", d3.format(",g")(-42));
+console.log("  ", d3.format(",g")(-4200000));
+console.log("  ", d3.format(",g")(-42000000));
+console.log("");
+
+console.log("precision (fixed-point notation):");
+console.log("  ", d3.format(".1f")(0.49));
+console.log("  ", d3.format(".2f")(0.449));
+console.log("  ", d3.format(".3f")(0.4449));
+console.log("  ", d3.format(".5f")(0.444449));
+console.log("  ", d3.format(".1f")(100));
+console.log("  ", d3.format(".2f")(100));
+console.log("  ", d3.format(".3f")(100));
+console.log("  ", d3.format(".5f")(100));
+console.log("");
+
+console.log("precision (significant digits):");
+console.log("  ", d3.format(".1g")(0.049));
+console.log("  ", d3.format(".1g")(0.49));
+console.log("  ", d3.format(".2g")(0.449));
+console.log("  ", d3.format(".3g")(0.4449));
+console.log("  ", d3.format(".5g")(0.444449));
+console.log("  ", d3.format(".1g")(100));
+console.log("  ", d3.format(".2g")(100));
+console.log("  ", d3.format(".3g")(100));
+console.log("  ", d3.format(".5g")(100));
+console.log("  ", d3.format(".5g")(100.2));
+console.log("  ", d3.format(".2g")(0.002));
+console.log("");
+
+console.log("precision and rounding (significant digits):");
+console.log("  ", d3.format(".1r")(0.049));
+console.log("  ", d3.format(".1r")(0.49));
+console.log("  ", d3.format(".2r")(0.449));
+console.log("  ", d3.format(".3r")(0.4449));
+console.log("  ", d3.format(".5r")(0.444449));
+console.log("  ", d3.format("r")(123.45));
+console.log("  ", d3.format(".1r")(123.45));
+console.log("  ", d3.format(".2r")(123.45));
+console.log("  ", d3.format(".3r")(123.45));
+console.log("  ", d3.format(".4r")(123.45));
+console.log("  ", d3.format(".5r")(123.45));
+console.log("  ", d3.format(".6r")(123.45));
+console.log("");
+
+console.log("precision and grouping with space fill:");
+console.log("  ", d3.format("10,.1f")(123456.49));
+console.log("  ", d3.format("10,.2f")(1234567.449));
+console.log("  ", d3.format("10,.3f")(12345678.4449));
+console.log("  ", d3.format("10,.5f")(123456789.444449));
+console.log("  ", d3.format("10,.1f")(123456));
+console.log("  ", d3.format("10,.2f")(1234567));
+console.log("  ", d3.format("10,.3f")(12345678));
+console.log("  ", d3.format("10,.5f")(123456789));
+console.log("");
+
+console.log("float type passed int:");
+console.log("  ", d3.format("f")(42));
+console.log("");
+
+console.log("int type passed float:");
+console.log(d3.format("d")(4.2));
+console.log("");
+
+console.log("number:");
+console.log("  ", d3.format("n")(.0042));
+console.log("  ", d3.format("n")(.42));
+console.log("  ", d3.format("n")(0));
+console.log("  ", d3.format("n")(42));
+console.log("  ", d3.format("n")(42000000));
+console.log("  ", d3.format("n")(420000000));
+console.log("  ", d3.format("n")(-4));
+console.log("  ", d3.format("n")(-42));
+console.log("  ", d3.format("n")(-4200000));
+console.log("  ", d3.format("n")(-42000000));
+console.log("");
+
+console.log("percentage:");
+console.log("  ", d3.format("%")(0));
+console.log("  ", d3.format("%")(.042));
+console.log("  ", d3.format("%")(.42));
+console.log("  ", d3.format("%")(4.2));
+console.log("  ", d3.format("%")(-.042));
+console.log("  ", d3.format("%")(-.42));
+console.log("  ", d3.format("%")(-4.2));
+console.log("");
+
+console.log("percentage with rounding and sign:");
+console.log("  ", d3.format("+.2p")(.00123));
+console.log("  ", d3.format("+.2p")(.0123));
+console.log("  ", d3.format("+.2p")(.123));
+console.log("  ", d3.format("+.2p")(1.23));
+console.log("  ", d3.format("+.2p")(-.00123));
+console.log("  ", d3.format("+.2p")(-.0123));
+console.log("  ", d3.format("+.2p")(-.123));
+console.log("  ", d3.format("+.2p")(-1.23));
+console.log("");
+
+console.log("exponent:");
+console.log("  ", d3.format("e")(0));
+console.log("  ", d3.format("e")(42));
+console.log("  ", d3.format("e")(42000000));
+console.log("  ", d3.format("e")(420000000));
+console.log("  ", d3.format("e")(-4));
+console.log("  ", d3.format("e")(-42));
+console.log("  ", d3.format("e")(-4200000));
+console.log("  ", d3.format("e")(-42000000));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-format.out
===================================================================
--- /Dev/trunk/d3/test/core/test-format.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-format.out	(revision 76)
@@ -0,0 +1,172 @@
+zero fill:
+   00000000
+   00000042
+   42000000
+   420000000
+   â0000004
+   â0000042
+   â4200000
+   â42000000
+
+space fill:
+          0
+         42
+   42000000
+   420000000
+         â4
+        â42
+   â4200000
+   â42000000
+
+grouping:
+   0
+   42
+   42,000,000
+   420,000,000
+   â4
+   â42
+   â4,200,000
+   â42,000,000
+
+grouping with zero fill:
+   0
+   0
+   00
+   000
+   0,000
+   0,000,000
+   0,000,000,000
+   0,000,000,000,000,000
+
+grouping with zero fill (overflow):
+   1
+   1
+   12
+   123
+   12,345
+   12,345,678
+   1,234,567,890,123
+
+grouping with space fill:
+   0
+   0
+    0
+     0
+       0
+          0
+               0
+                       0
+
+grouping with space fill (overflow):
+   1
+   1
+   12
+   123
+   12,345
+   12,345,678
+   1,234,567,890,123
+
+grouping with general notation:
+   0
+   42
+   42,000,000
+   420,000,000
+   â4
+   â42
+   â4,200,000
+   â42,000,000
+
+precision (fixed-point notation):
+   0.5
+   0.45
+   0.445
+   0.44445
+   100.0
+   100.00
+   100.000
+   100.00000
+
+precision (significant digits):
+   0.05
+   0.5
+   0.45
+   0.445
+   0.44445
+   1e+2
+   1.0e+2
+   100
+   100.00
+   100.20
+   0.0020
+
+precision and rounding (significant digits):
+   0.05
+   0.5
+   0.45
+   0.445
+   0.44445
+   123
+   100
+   120
+   123
+   123.5
+   123.45
+   123.450
+
+precision and grouping with space fill:
+    123,456.5
+   1,234,567.45
+   12,345,678.445
+   123,456,789.44445
+    123,456.0
+   1,234,567.00
+   12,345,678.000
+   123,456,789.00000
+
+float type passed int:
+   42
+
+int type passed float:
+
+
+number:
+   0.0042
+   0.42
+   0
+   42
+   42,000,000
+   420,000,000
+   â4
+   â42
+   â4,200,000
+   â42,000,000
+
+percentage:
+   0%
+   4%
+   42%
+   420%
+   â4%
+   â42%
+   â420%
+
+percentage with rounding and sign:
+   +0.12%
+   +1.2%
+   +12%
+   +120%
+   â0.12%
+   â1.2%
+   â12%
+   â120%
+
+exponent:
+   0e+0
+   4.2e+1
+   4.2e+7
+   4.2e+8
+   â4e+0
+   â4.2e+1
+   â4.2e+6
+   â4.2e+7
+
Index: /Dev/trunk/d3/test/core/test-hsl.js
===================================================================
--- /Dev/trunk/d3/test/core/test-hsl.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-hsl.js	(revision 76)
@@ -0,0 +1,51 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+console.log("constructor:");
+console.log("  " + d3.hsl(60, 1, .2));
+console.log("  " + d3.hsl(60.4, .994, .204));
+console.log("  " + d3.hsl(60.6, .996, .216));
+console.log("  " + JSON.stringify(d3.hsl(60, 1, .2)));
+console.log("");
+
+console.log("parse rgb:");
+console.log("  " + d3.hsl("#660"));
+console.log("  " + d3.hsl("#666600"));
+console.log("  " + d3.hsl("rgb(102, 102, 0)"));
+console.log("  " + JSON.stringify(d3.hsl("#660")));
+console.log("");
+
+console.log("parse hsl:");
+console.log("  " + d3.hsl("hsl(60, 100%, 20%)"));
+console.log("  " + d3.hsl(d3.hsl(60, 1, .2)));
+console.log("  " + JSON.stringify(d3.hsl("hsl(60, 100%, 20%)")));
+console.log("");
+
+console.log("parse names:");
+console.log("  " + d3.hsl("red"));
+console.log("  " + d3.hsl("yellow"));
+console.log("  " + d3.hsl("blue"));
+console.log("");
+
+console.log("convert to rgb:");
+console.log("  " + d3.hsl("#660").rgb());
+console.log("  " + d3.hsl("hsl(60, 100%, 20%)").rgb());
+console.log("  " + d3.hsl(60, 1, .2).rgb());
+console.log("  " + JSON.stringify(d3.hsl("#660").rgb()));
+console.log("");
+
+console.log("brighter:");
+console.log("  " + d3.hsl(60, 1, .2).brighter());
+console.log("  " + d3.hsl("#660").brighter(1));
+console.log("  " + d3.hsl("hsl(60, 100%, 20%)").brighter(.5));
+console.log("  " + d3.hsl(d3.rgb(102, 102, 0)).brighter(2));
+console.log("  " + JSON.stringify(d3.hsl("hsl(60, 100%, 20%)").brighter()));
+console.log("");
+
+console.log("darker:");
+console.log("  " + d3.hsl(60, 1, .2).darker());
+console.log("  " + d3.hsl("#660").darker(1));
+console.log("  " + d3.hsl("hsl(60, 100%, 20%)").darker(.5));
+console.log("  " + d3.hsl(d3.rgb(102, 102, 0)).darker(2));
+console.log("  " + JSON.stringify(d3.hsl("hsl(60, 100%, 20%)").darker()));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-hsl.out
===================================================================
--- /Dev/trunk/d3/test/core/test-hsl.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-hsl.out	(revision 76)
@@ -0,0 +1,42 @@
+constructor:
+  hsl(60,100%,20%)
+  hsl(60.4,99.4%,20.4%)
+  hsl(60.6,99.6%,21.6%)
+  {"h":60,"s":1,"l":0.2}
+
+parse rgb:
+  hsl(60,100%,20%)
+  hsl(60,100%,20%)
+  hsl(60,100%,20%)
+  {"h":60,"s":1,"l":0.2}
+
+parse hsl:
+  hsl(60,100%,20%)
+  hsl(60,100%,20%)
+  {"h":60,"s":1,"l":0.2}
+
+parse names:
+  hsl(0,100%,50%)
+  hsl(60,100%,50%)
+  hsl(240,100%,50%)
+
+convert to rgb:
+  #666600
+  #666600
+  #666600
+  {"r":102,"g":102,"b":0}
+
+brighter:
+  hsl(60,100%,28.571428571428577%)
+  hsl(60,100%,28.571428571428577%)
+  hsl(60,100%,23.904572186687872%)
+  hsl(60,100%,40.81632653061225%)
+  {"h":60,"s":1,"l":0.28571428571428575}
+
+darker:
+  hsl(60,100%,13.999999999999998%)
+  hsl(60,100%,13.999999999999998%)
+  hsl(60,100%,16.733200530681515%)
+  hsl(60,100%,9.799999999999999%)
+  {"h":60,"s":1,"l":0.13999999999999999}
+
Index: /Dev/trunk/d3/test/core/test-insert.js
===================================================================
--- /Dev/trunk/d3/test/core/test-insert.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-insert.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3");
+
+d3.select("body").append("div");
+d3.select("body").insert("span", "div");
+
+console.log("insert span before div:");
+console.log("  ", document.body.innerHTML);
+console.log("");
+
+d3.select("body").insert("b", "div");
+
+console.log("insert b before div:");
+console.log("  ", document.body.innerHTML);
+console.log("");
+
+d3.select("body").insert("a", "span");
+
+console.log("insert a before span:");
+console.log("  ", document.body.innerHTML);
+console.log("");
Index: /Dev/trunk/d3/test/core/test-insert.out
===================================================================
--- /Dev/trunk/d3/test/core/test-insert.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-insert.out	(revision 76)
@@ -0,0 +1,9 @@
+insert span before div:
+   <span/><div/>
+
+insert b before div:
+   <span/><b/><div/>
+
+insert a before span:
+   <a/><span/><b/><div/>
+
Index: /Dev/trunk/d3/test/core/test-interpolate.js
===================================================================
--- /Dev/trunk/d3/test/core/test-interpolate.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-interpolate.js	(revision 76)
@@ -0,0 +1,87 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var x = d3.interpolate("200 0", "250");
+console.log("interpolate(200 0, 250):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.interpolateString("200", "250.00");
+console.log("interpolateString(200, 250.00):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.interpolateNumber(200, 250);
+console.log("interpolateNumber(200, 250):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.interpolateObject({key: 200}, {key: 250});
+console.log("interpolateObject({ key: 200 }, { key: 250 }):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.interpolateArray([200], [250]);
+console.log("interpolateArray([ 200 ], [ 250 ]):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.interpolateRgb("red", "blue");
+console.log("interpolateRgb(red, blue):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.interpolateHsl("red", "blue");
+console.log("interpolateHsl(red, blue):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+d3.interpolators.push(function(a, b) {
+  return a == "one" && b == "two" && d3.interpolateNumber(1, 2);
+});
+
+var x = d3.interpolate("one", "two");
+console.log("interpolateOneTwo(one, two):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.interpolate("one", "three");
+console.log("interpolate(one, three):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-interpolate.out
===================================================================
--- /Dev/trunk/d3/test/core/test-interpolate.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-interpolate.out	(revision 76)
@@ -0,0 +1,63 @@
+interpolate(200 0, 250):
+         -0.5  ->  175
+          0.0  ->  200
+          0.5  ->  225
+          1.0  ->  250
+          1.5  ->  275
+
+interpolateString(200, 250.00):
+         -0.5  ->  175
+          0.0  ->  200
+          0.5  ->  225
+          1.0  ->  250
+          1.5  ->  275
+
+interpolateNumber(200, 250):
+         -0.5  ->  175
+          0.0  ->  200
+          0.5  ->  225
+          1.0  ->  250
+          1.5  ->  275
+
+interpolateObject({ key: 200 }, { key: 250 }):
+         -0.5  ->  { key: 175 }
+          0.0  ->  { key: 200 }
+          0.5  ->  { key: 225 }
+          1.0  ->  { key: 250 }
+          1.5  ->  { key: 275 }
+
+interpolateArray([ 200 ], [ 250 ]):
+         -0.5  ->  [ 175 ]
+          0.0  ->  [ 200 ]
+          0.5  ->  [ 225 ]
+          1.0  ->  [ 250 ]
+          1.5  ->  [ 275 ]
+
+interpolateRgb(red, blue):
+         -0.5  ->  rgb(383,0,-127)
+          0.0  ->  rgb(255,0,0)
+          0.5  ->  rgb(128,0,128)
+          1.0  ->  rgb(0,0,255)
+          1.5  ->  rgb(-127,0,383)
+
+interpolateHsl(red, blue):
+         -0.5  ->  #0000ff
+          0.0  ->  #ff0000
+          0.5  ->  #00ff00
+          1.0  ->  #0000ff
+          1.5  ->  #ff0000
+
+interpolateOneTwo(one, two):
+         -0.5  ->  0.5
+          0.0  ->  1
+          0.5  ->  1.5
+          1.0  ->  2
+          1.5  ->  2.5
+
+interpolate(one, three):
+         -0.5  ->  three
+          0.0  ->  three
+          0.5  ->  three
+          1.0  ->  three
+          1.5  ->  three
+
Index: /Dev/trunk/d3/test/core/test-keys.js
===================================================================
--- /Dev/trunk/d3/test/core/test-keys.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-keys.js	(revision 76)
@@ -0,0 +1,17 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+function Abc() {
+  this.a = 1;
+  this.b = 2;
+}
+
+Abc.prototype.c = 1;
+
+console.log("keys:");
+console.log("  " + d3.keys({a: 1, b: 2}).sort());
+console.log("");
+
+console.log("inherited keys:");
+console.log("  " + d3.keys(new Abc).sort());
+console.log("");
Index: /Dev/trunk/d3/test/core/test-keys.out
===================================================================
--- /Dev/trunk/d3/test/core/test-keys.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-keys.out	(revision 76)
@@ -0,0 +1,6 @@
+keys:
+  a,b
+
+inherited keys:
+  a,b,c
+
Index: /Dev/trunk/d3/test/core/test-max.js
===================================================================
--- /Dev/trunk/d3/test/core/test-max.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-max.js	(revision 76)
@@ -0,0 +1,43 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+function max(array) {
+  var max = d3.max(array);
+  return typeof max === "string" ? "\"" + max + "\"" : max;
+}
+
+console.log("max:");
+console.log("                                [1] -> " + max([1]));
+console.log("                    [5, 1, 2, 3, 4] -> " + max([5, 1, 2, 3, 4]));
+console.log("                    [\"a\", \"b\", \"c\"] -> " + max(["c", "a", "b"]));
+console.log("                        [\"20\", \"3\"] -> " + max(["20", "3"]));
+console.log("                        [\"3\", \"20\"] -> " + max(["3", "20"]));
+console.log("                            [20, 3] -> " + max([20, 3]));
+console.log("                            [3, 20] -> " + max([3, 20]));
+console.log("");
+
+console.log("max of empty array is undefined:");
+console.log("                                 [] -> " + max([]));
+console.log("                             [null] -> " + max([null]));
+console.log("                        [undefined] -> " + max([undefined]));
+console.log("                              [NaN] -> " + max([NaN]));
+console.log("                         [NaN, NaN] -> " + max([NaN, NaN]));
+console.log("");
+
+console.log("max ignores null, undefined, and NaN:");
+console.log("               [NaN, 1, 2, 3, 4, 5] -> " + max([NaN, 1, 2, 3, 4, 5]));
+console.log("               [1, 2, 3, 4, 5, NaN] -> " + max([1, 2, 3, 4, 5, NaN]));
+console.log("   [10, null, 3, undefined, 5, NaN] -> " + max([10, null, 3, undefined, 5, NaN]));
+console.log("");
+
+console.log("max compares heterogenous types as numbers:");
+console.log("                          [20, \"3\"] -> " + max([20, "3"]));
+console.log("                          [\"20\", 3] -> " + max(["20", 3]));
+console.log("                          [3, \"20\"] -> " + max([3, "20"]));
+console.log("                          [\"3\", 20] -> " + max(["3", 20]));
+console.log("");
+
+console.log("max applies accessor function:");
+console.log("  [1, 2, 3, 4, 5], [2, 4, 6, 8, 10] -> " + d3.max([[1, 2, 3, 4, 5], [2, 4, 6, 8, 10]], function(d) { return d3.min(d); }));
+console.log("                    [1, 2, 3, 4, 5] -> " + d3.max([1, 2, 3, 4, 5], function(d, i) { return i; }));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-max.out
===================================================================
--- /Dev/trunk/d3/test/core/test-max.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-max.out	(revision 76)
@@ -0,0 +1,31 @@
+max:
+                                [1] -> 1
+                    [5, 1, 2, 3, 4] -> 5
+                    ["a", "b", "c"] -> "c"
+                        ["20", "3"] -> "3"
+                        ["3", "20"] -> "3"
+                            [20, 3] -> 20
+                            [3, 20] -> 20
+
+max of empty array is undefined:
+                                 [] -> undefined
+                             [null] -> undefined
+                        [undefined] -> undefined
+                              [NaN] -> undefined
+                         [NaN, NaN] -> undefined
+
+max ignores null, undefined, and NaN:
+               [NaN, 1, 2, 3, 4, 5] -> 5
+               [1, 2, 3, 4, 5, NaN] -> 5
+   [10, null, 3, undefined, 5, NaN] -> 10
+
+max compares heterogenous types as numbers:
+                          [20, "3"] -> 20
+                          ["20", 3] -> "20"
+                          [3, "20"] -> "20"
+                          ["3", 20] -> 20
+
+max applies accessor function:
+  [1, 2, 3, 4, 5], [2, 4, 6, 8, 10] -> 2
+                    [1, 2, 3, 4, 5] -> 4
+
Index: /Dev/trunk/d3/test/core/test-min.js
===================================================================
--- /Dev/trunk/d3/test/core/test-min.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-min.js	(revision 76)
@@ -0,0 +1,43 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+function min(array) {
+  var min = d3.min(array);
+  return typeof min === "string" ? "\"" + min + "\"" : min;
+}
+
+console.log("min:");
+console.log("                                [1] -> " + min([1]));
+console.log("                    [5, 1, 2, 3, 4] -> " + min([5, 1, 2, 3, 4]));
+console.log("                    [\"a\", \"b\", \"c\"] -> " + min(["c", "a", "b"]));
+console.log("                        [\"20\", \"3\"] -> " + min(["20", "3"]));
+console.log("                        [\"3\", \"20\"] -> " + min(["3", "20"]));
+console.log("                            [20, 3] -> " + min([20, 3]));
+console.log("                            [3, 20] -> " + min([3, 20]));
+console.log("");
+
+console.log("min of empty array is undefined:");
+console.log("                                 [] -> " + min([]));
+console.log("                             [null] -> " + min([null]));
+console.log("                        [undefined] -> " + min([undefined]));
+console.log("                              [NaN] -> " + min([NaN]));
+console.log("                         [NaN, NaN] -> " + min([NaN, NaN]));
+console.log("");
+
+console.log("min ignores null, undefined, and NaN:");
+console.log("               [NaN, 1, 2, 3, 4, 5] -> " + min([NaN, 1, 2, 3, 4, 5]));
+console.log("               [1, 2, 3, 4, 5, NaN] -> " + min([1, 2, 3, 4, 5, NaN]));
+console.log("   [10, null, 3, undefined, 5, NaN] -> " + min([10, null, 3, undefined, 5, NaN]));
+console.log("");
+
+console.log("min compares heterogenous types as numbers:");
+console.log("                          [20, \"3\"] -> " + min([20, "3"]));
+console.log("                          [\"20\", 3] -> " + min(["20", 3]));
+console.log("                          [3, \"20\"] -> " + min([3, "20"]));
+console.log("                          [\"3\", 20] -> " + min(["3", 20]));
+console.log("");
+
+console.log("min applies accessor function:");
+console.log("  [1, 2, 3, 4, 5], [2, 4, 6, 8, 10] -> " + d3.min([[1, 2, 3, 4, 5], [2, 4, 6, 8, 10]], function(d) { return d3.max(d); }));
+console.log("                    [1, 2, 3, 4, 5] -> " + d3.min([1, 2, 3, 4, 5], function(d, i) { return i; }));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-min.out
===================================================================
--- /Dev/trunk/d3/test/core/test-min.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-min.out	(revision 76)
@@ -0,0 +1,31 @@
+min:
+                                [1] -> 1
+                    [5, 1, 2, 3, 4] -> 1
+                    ["a", "b", "c"] -> "a"
+                        ["20", "3"] -> "20"
+                        ["3", "20"] -> "20"
+                            [20, 3] -> 3
+                            [3, 20] -> 3
+
+min of empty array is undefined:
+                                 [] -> undefined
+                             [null] -> undefined
+                        [undefined] -> undefined
+                              [NaN] -> undefined
+                         [NaN, NaN] -> undefined
+
+min ignores null, undefined, and NaN:
+               [NaN, 1, 2, 3, 4, 5] -> 1
+               [1, 2, 3, 4, 5, NaN] -> 1
+   [10, null, 3, undefined, 5, NaN] -> 3
+
+min compares heterogenous types as numbers:
+                          [20, "3"] -> "3"
+                          ["20", 3] -> 3
+                          [3, "20"] -> 3
+                          ["3", 20] -> "3"
+
+min applies accessor function:
+  [1, 2, 3, 4, 5], [2, 4, 6, 8, 10] -> 5
+                    [1, 2, 3, 4, 5] -> 0
+
Index: /Dev/trunk/d3/test/core/test-nest.js
===================================================================
--- /Dev/trunk/d3/test/core/test-nest.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-nest.js	(revision 76)
@@ -0,0 +1,60 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+d3.json("test/barley.json", function(barley) {
+
+  var nest = d3.nest()
+      .key(function(d) { return d.year; })
+      .key(function(d) { return d.variety; })
+      .key(function(d) { return d.site; });
+
+  console.log("entries(year/variety/site):");
+  console.log(stringify(nest.entries(barley.slice(5, 8))));
+  console.log("");
+
+  console.log("map(year/variety/site):");
+  console.log(stringify(nest.map(barley.slice(5, 8))));
+  console.log("");
+
+  var nest = d3.nest()
+      .key(function(d) { return d.year; })
+      .rollup(sum);
+
+  console.log("rollup(year):");
+  console.log(stringify(nest.map(barley)));
+  console.log("");
+
+  var nest = d3.nest()
+      .key(function(d) { return d.year; })
+      .key(function(d) { return d.variety; })
+      .rollup(sum);
+
+  console.log("rollup(year/variety):");
+  console.log(stringify(nest.map(barley)));
+  console.log("");
+
+  var nest = d3.nest()
+      .key(function(d) { return d.variety; })
+      .sortKeys(d3.ascending);
+
+  console.log("sortKeys(variety):");
+  console.log(stringify(nest.entries(barley.slice(5, 8))));
+  console.log("");
+
+  var nest = d3.nest()
+      .key(function(d) { return d.year; })
+      .sortValues(function(b, a) { return a.yield - b.yield; });
+
+  console.log("sortValues(year):");
+  console.log(stringify(nest.map(barley.slice(6, 12))));
+  console.log("");
+
+});
+
+function sum(v) {
+  return v.reduce(function(p, v) { return p + v.yield; }, 0);
+}
+
+function stringify(json) {
+  return JSON.stringify(json, null, " ");
+}
Index: /Dev/trunk/d3/test/core/test-nest.out
===================================================================
--- /Dev/trunk/d3/test/core/test-nest.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-nest.out	(revision 76)
@@ -0,0 +1,194 @@
+entries(year/variety/site):
+[
+ {
+  "key": "1931",
+  "values": [
+   {
+    "key": "Manchuria",
+    "values": [
+     {
+      "key": "Duluth",
+      "values": [
+       {
+        "yield": 28.96667,
+        "variety": "Manchuria",
+        "year": 1931,
+        "site": "Duluth"
+       }
+      ]
+     }
+    ]
+   },
+   {
+    "key": "Glabron",
+    "values": [
+     {
+      "key": "University Farm",
+      "values": [
+       {
+        "yield": 43.06666,
+        "variety": "Glabron",
+        "year": 1931,
+        "site": "University Farm"
+       }
+      ]
+     },
+     {
+      "key": "Waseca",
+      "values": [
+       {
+        "yield": 55.2,
+        "variety": "Glabron",
+        "year": 1931,
+        "site": "Waseca"
+       }
+      ]
+     }
+    ]
+   }
+  ]
+ }
+]
+
+map(year/variety/site):
+{
+ "1931": {
+  "Manchuria": {
+   "Duluth": [
+    {
+     "yield": 28.96667,
+     "variety": "Manchuria",
+     "year": 1931,
+     "site": "Duluth"
+    }
+   ]
+  },
+  "Glabron": {
+   "University Farm": [
+    {
+     "yield": 43.06666,
+     "variety": "Glabron",
+     "year": 1931,
+     "site": "University Farm"
+    }
+   ],
+   "Waseca": [
+    {
+     "yield": 55.2,
+     "variety": "Glabron",
+     "year": 1931,
+     "site": "Waseca"
+    }
+   ]
+  }
+ }
+}
+
+rollup(year):
+{
+ "1931": 2224.6666799999985,
+ "1932": 1905.7999600000003
+}
+
+rollup(year/variety):
+{
+ "1931": {
+  "Manchuria": 205.16667999999999,
+  "Glabron": 223.96666000000002,
+  "Svansota": 204.06667,
+  "Velvet": 206.93332,
+  "Trebi": 254.79996,
+  "No. 457": 241.50001,
+  "No. 462": 234.33336999999997,
+  "Peatland": 219.5,
+  "No. 475": 190.89999999999998,
+  "Wisconsin No. 38": 243.50000999999997
+ },
+ "1932": {
+  "Manchuria": 172.39999999999998,
+  "Glabron": 176.13333000000003,
+  "Svansota": 160.46666,
+  "Velvet": 189.79998999999998,
+  "Trebi": 217.99996,
+  "No. 457": 188.66667999999999,
+  "No. 462": 190.20000000000002,
+  "Peatland": 190.66667,
+  "No. 475": 190.23333,
+  "Wisconsin No. 38": 229.23334000000003
+ }
+}
+
+sortKeys(variety):
+[
+ {
+  "key": "Glabron",
+  "values": [
+   {
+    "yield": 43.06666,
+    "variety": "Glabron",
+    "year": 1931,
+    "site": "University Farm"
+   },
+   {
+    "yield": 55.2,
+    "variety": "Glabron",
+    "year": 1931,
+    "site": "Waseca"
+   }
+  ]
+ },
+ {
+  "key": "Manchuria",
+  "values": [
+   {
+    "yield": 28.96667,
+    "variety": "Manchuria",
+    "year": 1931,
+    "site": "Duluth"
+   }
+  ]
+ }
+]
+
+sortValues(year):
+{
+ "1931": [
+  {
+   "yield": 55.2,
+   "variety": "Glabron",
+   "year": 1931,
+   "site": "Waseca"
+  },
+  {
+   "yield": 43.06666,
+   "variety": "Glabron",
+   "year": 1931,
+   "site": "University Farm"
+  },
+  {
+   "yield": 38.13333,
+   "variety": "Glabron",
+   "year": 1931,
+   "site": "Crookston"
+  },
+  {
+   "yield": 29.66667,
+   "variety": "Glabron",
+   "year": 1931,
+   "site": "Duluth"
+  },
+  {
+   "yield": 29.13333,
+   "variety": "Glabron",
+   "year": 1931,
+   "site": "Grand Rapids"
+  },
+  {
+   "yield": 28.76667,
+   "variety": "Glabron",
+   "year": 1931,
+   "site": "Morris"
+  }
+ ]
+}
+
Index: /Dev/trunk/d3/test/core/test-permute.js
===================================================================
--- /Dev/trunk/d3/test/core/test-permute.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-permute.js	(revision 76)
@@ -0,0 +1,38 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var array = [0,1,2];
+
+console.log("permute reverses:");
+console.log("    2,1,0:", d3.permute(array, [2,1,0]) + "");
+console.log("");
+
+console.log("permute does not modify input array:");
+console.log("    0,1,2:", array + "");
+console.log("");
+
+console.log("permute does nothing:");
+console.log("    0,1,2:", d3.permute(array, [0,1,2]) + "");
+console.log("");
+
+console.log("permute duplicates:");
+console.log("    0,0,0:", d3.permute(array, [0,0,0]) + "");
+console.log("");
+
+console.log("permute returns fewer elements:");
+console.log("      2,1:", d3.permute(array, [2,1]) + "");
+console.log("        1:", d3.permute(array, [1]) + "");
+console.log("        0:", d3.permute(array, [0]) + "");
+console.log("         :", d3.permute(array, []) + "");
+console.log("");
+
+console.log("permute returns undefined elements:");
+console.log("       10:", d3.permute(array, [10]) + "");
+console.log("       -1:", d3.permute(array, [-1]) + "");
+console.log("     0,-1:", d3.permute(array, [0,-1]) + "");
+console.log("");
+
+console.log("permute returns more elements:");
+console.log("  0,0,1,2:", d3.permute(array, [0,0,1,2]) + "");
+console.log("  0,1,1,1:", d3.permute(array, [0,1,1,1]) + "");
+console.log("");
Index: /Dev/trunk/d3/test/core/test-permute.out
===================================================================
--- /Dev/trunk/d3/test/core/test-permute.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-permute.out	(revision 76)
@@ -0,0 +1,27 @@
+permute reverses:
+    2,1,0: 2,1,0
+
+permute does not modify input array:
+    0,1,2: 0,1,2
+
+permute does nothing:
+    0,1,2: 0,1,2
+
+permute duplicates:
+    0,0,0: 0,0,0
+
+permute returns fewer elements:
+      2,1: 2,1
+        1: 1
+        0: 0
+         : 
+
+permute returns undefined elements:
+       10: 
+       -1: 
+     0,-1: 0,
+
+permute returns more elements:
+  0,0,1,2: 0,0,1,2
+  0,1,1,1: 0,1,1,1
+
Index: /Dev/trunk/d3/test/core/test-remove.js
===================================================================
--- /Dev/trunk/d3/test/core/test-remove.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-remove.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3");
+
+d3.select("body").append("svg:svg");
+d3.select("body").append("div");
+
+console.log("initialize:");
+console.log("  ", document.body.outerHTML);
+console.log("");
+
+d3.select("svg").remove();
+
+console.log("remove svg:");
+console.log("  ", document.body.outerHTML);
+console.log("");
+
+d3.select("body").selectAll("div").remove();
+
+console.log("removeAll div:");
+console.log("  ", document.body.outerHTML);
+console.log("");
Index: /Dev/trunk/d3/test/core/test-remove.out
===================================================================
--- /Dev/trunk/d3/test/core/test-remove.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-remove.out	(revision 76)
@@ -0,0 +1,9 @@
+initialize:
+   <body><svg/><div/></body>
+
+remove svg:
+   <body><div/></body>
+
+removeAll div:
+   <body/>
+
Index: /Dev/trunk/d3/test/core/test-rgb.js
===================================================================
--- /Dev/trunk/d3/test/core/test-rgb.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-rgb.js	(revision 76)
@@ -0,0 +1,51 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+console.log("constructor:");
+console.log("  " + d3.rgb(102, 102, 0));
+console.log("  " + d3.rgb(102.4, 102.4, 0.4));
+console.log("  " + d3.rgb(102.6, 102.6, 0.6));
+console.log("  " + JSON.stringify(d3.rgb(102, 102, 0)));
+console.log("");
+
+console.log("parse rgb:");
+console.log("  " + d3.rgb("#660"));
+console.log("  " + d3.rgb("#666600"));
+console.log("  " + d3.rgb("rgb(102, 102, 0)"));
+console.log("  " + JSON.stringify(d3.rgb("#660")));
+console.log("");
+
+console.log("parse hsl:");
+console.log("  " + d3.rgb("hsl(60, 100%, 20%)"));
+console.log("  " + d3.rgb(d3.hsl(60, 1, .2)));
+console.log("  " + JSON.stringify(d3.rgb("hsl(60, 100%, 20%)")));
+console.log("");
+
+console.log("parse names:");
+console.log("  " + d3.rgb("aliceblue"));
+console.log("  " + d3.rgb("moccasin"));
+console.log("  " + d3.rgb("yellow"));
+console.log("");
+
+console.log("convert to hsl:");
+console.log("  " + d3.rgb("#660").hsl());
+console.log("  " + d3.rgb("#666600").hsl());
+console.log("  " + d3.rgb(102, 102, 0).hsl());
+console.log("  " + JSON.stringify(d3.rgb("#660").hsl()));
+console.log("");
+
+console.log("brighter:");
+console.log("  " + d3.rgb(102, 102, 0).brighter());
+console.log("  " + d3.rgb("#660").brighter(1));
+console.log("  " + d3.rgb("hsl(60, 100%, 20%)").brighter(.5));
+console.log("  " + d3.rgb(d3.hsl(60, 1, .2)).brighter(2));
+console.log("  " + JSON.stringify(d3.rgb("#660").brighter()));
+console.log("");
+
+console.log("darker:");
+console.log("  " + d3.rgb(102, 102, 0).darker());
+console.log("  " + d3.rgb("#660").darker(1));
+console.log("  " + d3.rgb("hsl(60, 100%, 20%)").darker(.5));
+console.log("  " + d3.rgb(d3.hsl(60, 1, .2)).darker(2));
+console.log("  " + JSON.stringify(d3.rgb("#660").darker()));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-rgb.out
===================================================================
--- /Dev/trunk/d3/test/core/test-rgb.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-rgb.out	(revision 76)
@@ -0,0 +1,42 @@
+constructor:
+  #666600
+  #666600
+  #666600
+  {"r":102,"g":102,"b":0}
+
+parse rgb:
+  #666600
+  #666600
+  #666600
+  {"r":102,"g":102,"b":0}
+
+parse hsl:
+  #666600
+  #666600
+  {"r":102,"g":102,"b":0}
+
+parse names:
+  #f0f8ff
+  #ffe4b5
+  #ffff00
+
+convert to hsl:
+  hsl(60,100%,20%)
+  hsl(60,100%,20%)
+  hsl(60,100%,20%)
+  {"h":60,"s":1,"l":0.2}
+
+brighter:
+  #919100
+  #919100
+  #797900
+  #d0d000
+  {"r":145,"g":145,"b":0}
+
+darker:
+  #474700
+  #474700
+  #555500
+  #313100
+  {"r":71,"g":71,"b":0}
+
Index: /Dev/trunk/d3/test/core/test-round.js
===================================================================
--- /Dev/trunk/d3/test/core/test-round.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-round.js	(revision 76)
@@ -0,0 +1,75 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+console.log("degenerate:");
+console.log("          0 ->", d3.round(0));
+console.log("        NaN ->", d3.round(NaN));
+console.log("   Infinity ->", d3.round(Infinity));
+console.log("  -Infinity ->", d3.round(-Infinity));
+console.log("");
+
+console.log("default:");
+console.log("      10.51 ->", d3.round(10.51));
+console.log("      10.50 ->", d3.round(10.50));
+console.log("      10.49 ->", d3.round(10.49));
+console.log("       0.51 ->", d3.round(0.51));
+console.log("       0.50 ->", d3.round(0.50));
+console.log("       0.49 ->", d3.round(0.49));
+console.log("      -0.51 ->", d3.round(-0.51));
+console.log("      -0.50 ->", d3.round(-0.50));
+console.log("      -0.49 ->", d3.round(-0.49));
+console.log("     -10.51 ->", d3.round(-10.51));
+console.log("     -10.50 ->", d3.round(-10.50));
+console.log("     -10.49 ->", d3.round(-10.49));
+console.log("");
+
+console.log("precision 1:");
+console.log("      10.51 ->", d3.round(10.51, 1));
+console.log("      10.50 ->", d3.round(10.50, 1));
+console.log("      10.49 ->", d3.round(10.49, 1));
+console.log("       0.51 ->", d3.round(0.51, 1));
+console.log("       0.50 ->", d3.round(0.50, 1));
+console.log("       0.49 ->", d3.round(0.49, 1));
+console.log("      -0.51 ->", d3.round(-0.51, 1));
+console.log("      -0.50 ->", d3.round(-0.50, 1));
+console.log("      -0.49 ->", d3.round(-0.49, 1));
+console.log("     -10.51 ->", d3.round(-10.51, 1));
+console.log("     -10.50 ->", d3.round(-10.50, 1));
+console.log("     -10.49 ->", d3.round(-10.49, 1));
+console.log("");
+
+console.log("precision 2:");
+console.log("      10.51 ->", d3.round(10.51, 2));
+console.log("      10.50 ->", d3.round(10.50, 2));
+console.log("      10.49 ->", d3.round(10.49, 2));
+console.log("       0.51 ->", d3.round(0.51, 2));
+console.log("       0.50 ->", d3.round(0.50, 2));
+console.log("       0.49 ->", d3.round(0.49, 2));
+console.log("      -0.51 ->", d3.round(-0.51, 2));
+console.log("      -0.50 ->", d3.round(-0.50, 2));
+console.log("      -0.49 ->", d3.round(-0.49, 2));
+console.log("     -10.51 ->", d3.round(-10.51, 2));
+console.log("     -10.50 ->", d3.round(-10.50, 2));
+console.log("     -10.49 ->", d3.round(-10.49, 2));
+console.log("");
+
+console.log("precision -1:");
+console.log("     123.45 ->", d3.round(123.45, -1));
+console.log("     345.67 ->", d3.round(345.67, -1));
+console.log("    -123.45 ->", d3.round(-123.45, -1));
+console.log("    -345.67 ->", d3.round(-345.67, -1));
+console.log("");
+
+console.log("precision -2:");
+console.log("     123.45 ->", d3.round(123.45, -2));
+console.log("     456.78 ->", d3.round(456.78, -2));
+console.log("    -123.45 ->", d3.round(-123.45, -2));
+console.log("    -456.78 ->", d3.round(-456.78, -2));
+console.log("");
+
+console.log("precision -3:");
+console.log("     123.45 ->", d3.round(123.45, -3));
+console.log("     567.89 ->", d3.round(567.89, -3));
+console.log("    -123.45 ->", d3.round(-123.45, -3));
+console.log("    -567.89 ->", d3.round(-567.89, -3));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-round.out
===================================================================
--- /Dev/trunk/d3/test/core/test-round.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-round.out	(revision 76)
@@ -0,0 +1,66 @@
+degenerate:
+          0 -> 0
+        NaN -> NaN
+   Infinity -> Infinity
+  -Infinity -> -Infinity
+
+default:
+      10.51 -> 11
+      10.50 -> 11
+      10.49 -> 10
+       0.51 -> 1
+       0.50 -> 1
+       0.49 -> 0
+      -0.51 -> -1
+      -0.50 -> 0
+      -0.49 -> 0
+     -10.51 -> -11
+     -10.50 -> -10
+     -10.49 -> -10
+
+precision 1:
+      10.51 -> 10.5
+      10.50 -> 10.5
+      10.49 -> 10.5
+       0.51 -> 0.5
+       0.50 -> 0.5
+       0.49 -> 0.5
+      -0.51 -> -0.5
+      -0.50 -> -0.5
+      -0.49 -> -0.5
+     -10.51 -> -10.5
+     -10.50 -> -10.5
+     -10.49 -> -10.5
+
+precision 2:
+      10.51 -> 10.51
+      10.50 -> 10.5
+      10.49 -> 10.49
+       0.51 -> 0.51
+       0.50 -> 0.5
+       0.49 -> 0.49
+      -0.51 -> -0.51
+      -0.50 -> -0.5
+      -0.49 -> -0.49
+     -10.51 -> -10.51
+     -10.50 -> -10.5
+     -10.49 -> -10.49
+
+precision -1:
+     123.45 -> 120
+     345.67 -> 350
+    -123.45 -> -120
+    -345.67 -> -350
+
+precision -2:
+     123.45 -> 100
+     456.78 -> 500
+    -123.45 -> -100
+    -456.78 -> -500
+
+precision -3:
+     123.45 -> 0
+     567.89 -> 1000
+    -123.45 -> 0
+    -567.89 -> -1000
+
Index: /Dev/trunk/d3/test/core/test-sum.js
===================================================================
--- /Dev/trunk/d3/test/core/test-sum.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-sum.js	(revision 76)
@@ -0,0 +1,31 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+console.log("sum:");
+console.log("                                 [] -> " + d3.sum([]));
+console.log("                                [1] -> " + d3.sum([1]));
+console.log("                    [5, 1, 2, 3, 4] -> " + d3.sum([5, 1, 2, 3, 4]));
+console.log("                    [\"a\", \"b\", \"c\"] -> " + d3.sum(["c", "a", "b"]));
+console.log("                        [\"20\", \"3\"] -> " + d3.sum(["20", "3"]));
+console.log("                        [\"3\", \"20\"] -> " + d3.sum(["3", "20"]));
+console.log("                            [20, 3] -> " + d3.sum([20, 3]));
+console.log("                            [3, 20] -> " + d3.sum([3, 20]));
+console.log("");
+
+console.log("sum ignores null, undefined, and NaN:");
+console.log("               [NaN, 1, 2, 3, 4, 5] -> " + d3.sum([NaN, 1, 2, 3, 4, 5]));
+console.log("               [1, 2, 3, 4, 5, NaN] -> " + d3.sum([1, 2, 3, 4, 5, NaN]));
+console.log("   [10, null, 3, undefined, 5, NaN] -> " + d3.sum([10, null, 3, undefined, 5, NaN]));
+console.log("");
+
+console.log("sum treats heterogenous types as numbers:");
+console.log("                          [20, \"3\"] -> " + d3.sum([20, "3"]));
+console.log("                          [\"20\", 3] -> " + d3.sum(["20", 3]));
+console.log("                          [3, \"20\"] -> " + d3.sum([3, "20"]));
+console.log("                          [\"3\", 20] -> " + d3.sum(["3", 20]));
+console.log("");
+
+console.log("sum applies accessor function:");
+console.log("  [1, 2, 3, 4, 5], [2, 4, 6, 8, 10] -> " + d3.sum([[1, 2, 3, 4, 5], [2, 4, 6, 8, 10]], function(d) { return d3.sum(d); }));
+console.log("                    [1, 2, 3, 4, 5] -> " + d3.sum([1, 2, 3, 4, 5], function(d, i) { return i; }));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-sum.out
===================================================================
--- /Dev/trunk/d3/test/core/test-sum.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-sum.out	(revision 76)
@@ -0,0 +1,25 @@
+sum:
+                                 [] -> 0
+                                [1] -> 1
+                    [5, 1, 2, 3, 4] -> 15
+                    ["a", "b", "c"] -> 0
+                        ["20", "3"] -> 23
+                        ["3", "20"] -> 23
+                            [20, 3] -> 23
+                            [3, 20] -> 23
+
+sum ignores null, undefined, and NaN:
+               [NaN, 1, 2, 3, 4, 5] -> 15
+               [1, 2, 3, 4, 5, NaN] -> 15
+   [10, null, 3, undefined, 5, NaN] -> 18
+
+sum treats heterogenous types as numbers:
+                          [20, "3"] -> 23
+                          ["20", 3] -> 23
+                          [3, "20"] -> 23
+                          ["3", 20] -> 23
+
+sum applies accessor function:
+  [1, 2, 3, 4, 5], [2, 4, 6, 8, 10] -> 45
+                    [1, 2, 3, 4, 5] -> 10
+
Index: /Dev/trunk/d3/test/core/test-transition.js
===================================================================
--- /Dev/trunk/d3/test/core/test-transition.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-transition.js	(revision 76)
@@ -0,0 +1,18 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3");
+
+var body = d3.select("body")
+    .style("background-color", "white");
+
+console.log("transition start:");
+console.log("  ", body.style("background-color"));
+console.log("");
+
+body.transition()
+    .style("background-color", "red")
+    .each("end", function() {
+      console.log("transition end:");
+      console.log("  ", body.style("background-color"));
+      console.log("");
+    });
Index: /Dev/trunk/d3/test/core/test-transition.out
===================================================================
--- /Dev/trunk/d3/test/core/test-transition.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-transition.out	(revision 76)
@@ -0,0 +1,6 @@
+transition start:
+   white
+
+transition end:
+   rgb(255,0,0)
+
Index: /Dev/trunk/d3/test/core/test-zip.js
===================================================================
--- /Dev/trunk/d3/test/core/test-zip.js	(revision 76)
+++ /Dev/trunk/d3/test/core/test-zip.js	(revision 76)
@@ -0,0 +1,24 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var s = JSON.stringify;
+
+console.log("zip [1, 2] [3, 4]:");
+console.log("  " + s(d3.zip([1, 2], [3, 4])));
+console.log("");
+
+console.log("zip [1, 2] [3, 4] [5, 6, 7]:");
+console.log("  " + s(d3.zip([1, 2], [3, 4], [5, 6, 7])));
+console.log("");
+
+console.log("zip [1, 2, 3, 4, 5] [2, 4, 6, 8, 10]:");
+console.log("  " + s(d3.zip([1, 2, 3, 4, 5], [2, 4, 6, 8, 10])));
+console.log("");
+
+console.log("zip [1, 2, 3, 4, 5]:");
+console.log("  " + s(d3.zip([1, 2, 3, 4, 5])));
+console.log("");
+
+console.log("zip (no arguments):");
+console.log("  " + s(d3.zip()));
+console.log("");
Index: /Dev/trunk/d3/test/core/test-zip.out
===================================================================
--- /Dev/trunk/d3/test/core/test-zip.out	(revision 76)
+++ /Dev/trunk/d3/test/core/test-zip.out	(revision 76)
@@ -0,0 +1,15 @@
+zip [1, 2] [3, 4]:
+  [[1,3],[2,4]]
+
+zip [1, 2] [3, 4] [5, 6, 7]:
+  [[1,3,5],[2,4,6]]
+
+zip [1, 2, 3, 4, 5] [2, 4, 6, 8, 10]:
+  [[1,2],[2,4],[3,6],[4,8],[5,10]]
+
+zip [1, 2, 3, 4, 5]:
+  [[1],[2],[3],[4],[5]]
+
+zip (no arguments):
+  []
+
Index: /Dev/trunk/d3/test/csv/test-parse.js
===================================================================
--- /Dev/trunk/d3/test/csv/test-parse.js	(revision 76)
+++ /Dev/trunk/d3/test/csv/test-parse.js	(revision 76)
@@ -0,0 +1,18 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.csv");
+
+var newlines = {
+  UNIX: "\n",
+  DOS: "\r\n",
+  Mac: "\r"
+};
+
+for (os in newlines) {
+  console.log("parse " + os + " newlines:");
+  var rows = d3.csv.parse(["a,b,c", "1,2,3", "4,5,\"6\"", "7,8,9"].join(newlines[os]));
+  console.log("  " + rows.map(function(row) {
+    return row.a + ":" + row.b + ":" + row.c;
+  }).join("|"));
+  console.log("");
+}
Index: /Dev/trunk/d3/test/csv/test-parse.out
===================================================================
--- /Dev/trunk/d3/test/csv/test-parse.out	(revision 76)
+++ /Dev/trunk/d3/test/csv/test-parse.out	(revision 76)
@@ -0,0 +1,9 @@
+parse UNIX newlines:
+  1:2:3|4:5:6|7:8:9
+
+parse DOS newlines:
+  1:2:3|4:5:6|7:8:9
+
+parse Mac newlines:
+  1:2:3|4:5:6|7:8:9
+
Index: /Dev/trunk/d3/test/layout/test-histogram.js
===================================================================
--- /Dev/trunk/d3/test/layout/test-histogram.js	(revision 76)
+++ /Dev/trunk/d3/test/layout/test-histogram.js	(revision 76)
@@ -0,0 +1,29 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.layout");
+
+var format = d3.format(".2f");
+
+var histogram = d3.layout.histogram().frequency(true);
+console.log("frequency(true):");
+console.log("  0,0,0,1,2,2 -> " + log(histogram([0,0,0,1,2,2])));
+console.log("");
+
+var histogram = d3.layout.histogram().frequency(false);
+console.log("frequency(false):");
+console.log("  0,0,0,1,2,2 -> " + log(histogram([0,0,0,1,2,2])));
+console.log("");
+
+var histogram = d3.layout.histogram().bins(2);
+console.log("bins(4):");
+console.log("  0,0,0,1,2,2 -> " + log(histogram([0,0,0,1,2,2])));
+console.log("");
+
+var histogram = d3.layout.histogram().bins([0,1,2,3]);
+console.log("bins(0,1,2,3):");
+console.log("  0,0,0,1,2,2 -> " + log(histogram([0,0,0,1,2,2])));
+console.log("");
+
+function log(bins) {
+  return bins.map(function(bin) { return format(bin.x) + "-" + format(bin.x + bin.dx) + ":" + format(bin.y); }).join(", ");
+}
Index: /Dev/trunk/d3/test/layout/test-histogram.out
===================================================================
--- /Dev/trunk/d3/test/layout/test-histogram.out	(revision 76)
+++ /Dev/trunk/d3/test/layout/test-histogram.out	(revision 76)
@@ -0,0 +1,12 @@
+frequency(true):
+  0,0,0,1,2,2 -> 0.00-0.50:3.00, 0.50-1.00:0.00, 1.00-1.50:1.00, 1.50-2.00:2.00
+
+frequency(false):
+  0,0,0,1,2,2 -> 0.00-0.50:0.50, 0.50-1.00:0.00, 1.00-1.50:0.17, 1.50-2.00:0.33
+
+bins(4):
+  0,0,0,1,2,2 -> 0.00-1.00:3.00, 1.00-2.00:3.00
+
+bins(0,1,2,3):
+  0,0,0,1,2,2 -> 0.00-1.00:3.00, 1.00-2.00:1.00, 2.00-3.00:2.00
+
Index: /Dev/trunk/d3/test/layout/test-treemap.js
===================================================================
--- /Dev/trunk/d3/test/layout/test-treemap.js	(revision 76)
+++ /Dev/trunk/d3/test/layout/test-treemap.js	(revision 76)
@@ -0,0 +1,71 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.layout");
+
+var treemap = d3.layout.treemap();
+
+console.log("zero, negative and NaN values:");
+console.log("  {value: 0}   ", treemap.nodes({value: 0})[0].area);
+console.log("  {value: -1}  ", treemap.nodes({value: -1})[0].area);
+console.log("  {value: NaN} ", treemap.nodes({value: NaN})[0].area);
+console.log("");
+
+treemap.size([0, 0]);
+console.log("size([0, 0]):");
+console.log("  {value: 0}   ", treemap.nodes({value: 0})[0].area);
+console.log("  {value: -1}  ", treemap.nodes({value: -1})[0].area);
+console.log("  {value: NaN} ", treemap.nodes({value: NaN})[0].area);
+console.log("  {value: 1}   ", treemap.nodes({value: 1})[0].area);
+console.log("");
+
+treemap.size([-1, -1]);
+console.log("size([-1, -1]):");
+console.log("  {value: 0}   ", treemap.nodes({value: 0})[0].area);
+console.log("  {value: -1}  ", treemap.nodes({value: -1})[0].area);
+console.log("  {value: NaN} ", treemap.nodes({value: NaN})[0].area);
+console.log("  {value: 1}   ", treemap.nodes({value: 1})[0].area);
+console.log("");
+
+treemap.size([-1, 1]);
+console.log("size([-1, 1]):");
+console.log("  {value: 0}   ", treemap.nodes({value: 0})[0].area);
+console.log("  {value: -1}  ", treemap.nodes({value: -1})[0].area);
+console.log("  {value: NaN} ", treemap.nodes({value: NaN})[0].area);
+console.log("  {value: 1}   ", treemap.nodes({value: 1})[0].area);
+console.log("");
+
+treemap.size([NaN, NaN]);
+console.log("size([NaN, NaN]):");
+console.log("  {value: 0}   ", treemap.nodes({value: 0})[0].area);
+console.log("  {value: -1}  ", treemap.nodes({value: -1})[0].area);
+console.log("  {value: NaN} ", treemap.nodes({value: NaN})[0].area);
+console.log("  {value: 1}   ", treemap.nodes({value: 1})[0].area);
+console.log("");
+
+treemap.size([10, 10]);
+var tree = {children: [{value: 1}]};
+
+console.log("padding:");
+console.log("  default                  ", log(treemap.nodes(tree)[1]));
+console.log("  1                        ", log(treemap.padding(1).nodes(tree)[1]));
+console.log("  10                       ", log(treemap.padding(10).nodes(tree)[1]));
+console.log("  [1, 1, 1, 1]             ", log(treemap.padding([1, 1, 1, 1]).nodes(tree)[1]));
+console.log("  [10, 1, 10, 1]           ", log(treemap.padding([10, 1, 10, 1]).nodes(tree)[1]));
+console.log("  [1, 10, 1, 10]           ", log(treemap.padding([1, 10, 1, 10]).nodes(tree)[1]));
+console.log("  function(x) 1            ", log(treemap.padding(function(x) { return 1; }).nodes(tree)[1]));
+console.log("  function(x) 10           ", log(treemap.padding(function(x) { return 10; }).nodes(tree)[1]));
+console.log("  function(x) [1, 1, 1, 1] ", log(treemap.padding(function(x) { return [1, 1, 1, 1]; }).nodes(tree)[1]));
+console.log("  function(x) [1, 10, 1, 1]", log(treemap.padding(function(x) { return [1, 10, 1, 1]; }).nodes(tree)[1]));
+console.log("  function(x) null         ", log(treemap.padding(function(x) { return null; }).nodes(tree)[1]));
+console.log("  null                     ", log(treemap.padding(null).nodes(tree)[1]));
+console.log("");
+
+treemap.size([1000, 1000]);
+var tree = {children: [{value: 2}, {value: 260}, {value: 180}, {value: 2}, {value: 1}, {value: 0}]};
+console.log("zero-sized node:");
+treemap.nodes(tree).forEach(function(node) { console.log(new Array(node.depth + 2).join("  ") + log(node)); });
+console.log("");
+
+function log(node) {
+  return node.x + "," + node.y + "," + node.dx + "," + node.dy;
+}
Index: /Dev/trunk/d3/test/layout/test-treemap.out
===================================================================
--- /Dev/trunk/d3/test/layout/test-treemap.out	(revision 76)
+++ /Dev/trunk/d3/test/layout/test-treemap.out	(revision 76)
@@ -0,0 +1,52 @@
+zero, negative and NaN values:
+  {value: 0}    0
+  {value: -1}   0
+  {value: NaN}  0
+
+size([0, 0]):
+  {value: 0}    0
+  {value: -1}   0
+  {value: NaN}  0
+  {value: 1}    0
+
+size([-1, -1]):
+  {value: 0}    0
+  {value: -1}   0
+  {value: NaN}  0
+  {value: 1}    1
+
+size([-1, 1]):
+  {value: 0}    0
+  {value: -1}   0
+  {value: NaN}  0
+  {value: 1}    0
+
+size([NaN, NaN]):
+  {value: 0}    0
+  {value: -1}   0
+  {value: NaN}  0
+  {value: 1}    0
+
+padding:
+  default                   0,0,10,10
+  1                         1,1,8,8
+  10                        5,5,0,0
+  [1, 1, 1, 1]              1,1,8,8
+  [10, 1, 10, 1]            1,5,8,0
+  [1, 10, 1, 10]            5,1,0,8
+  function(x) 1             1,1,8,8
+  function(x) 10            5,5,0,0
+  function(x) [1, 1, 1, 1]  1,1,8,8
+  function(x) [1, 10, 1, 1] 0.5,1,0,8
+  function(x) null          0,0,10,10
+  null                      0,0,10,10
+
+zero-sized node:
+  0,0,1000,1000
+    16,0,11,416
+    0,416,1000,584
+    27,0,973,416
+    5,0,11,416
+    0,0,5,416
+    0,0,0,416
+
Index: /Dev/trunk/d3/test/scale/test-linear.js
===================================================================
--- /Dev/trunk/d3/test/scale/test-linear.js	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-linear.js	(revision 76)
@@ -0,0 +1,116 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var f = d3.format(" .3f");
+
+var x = d3.scale.linear();
+console.log("domain([0, 1]).range([0, 1]):");
+console.log("         -0.5  -> ", f(x(-0.5)));
+console.log("          0.0  -> ", f(x(0.0)));
+console.log("          0.5  -> ", f(x(0.5)));
+console.log("          1.0  -> ", f(x(1.0)));
+console.log("          1.5  -> ", f(x(1.5)));
+console.log("");
+
+var x = d3.scale.linear().domain([1, 2]);
+console.log("domain([1, 2]).range([0, 1]):");
+console.log("          0.5  -> ", f(x(0.5)));
+console.log("          1.0  -> ", f(x(1.0)));
+console.log("          1.5  -> ", f(x(1.5)));
+console.log("          2.0  -> ", f(x(2.0)));
+console.log("          2.5  -> ", f(x(2.5)));
+console.log("");
+
+var x = d3.scale.linear().domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]);
+console.log("domain([01/01/1990, 01/01/1991]).range([0, 1]):");
+console.log("   10/20/1989  -> ", f(x(new Date(1989, 09, 20))));
+console.log("   01/01/1990  -> ", f(x(new Date(1990, 00, 01))));
+console.log("   03/15/1990  -> ", f(x(new Date(1990, 02, 15))));
+console.log("   05/27/1990  -> ", f(x(new Date(1990, 04, 27))));
+console.log("   01/01/1991  -> ", f(x(new Date(1991, 00, 01))));
+console.log("   03/15/1991  -> ", f(x(new Date(1991, 02, 15))));
+console.log("");
+
+var x = d3.scale.linear().range(["red", "blue"]);
+console.log("domain([0, 1]).range([\"red\", \"blue\"]):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.scale.linear().range(["red", "blue"]).interpolate(d3.interpolateHsl);
+console.log("domain([0, 1]).range([\"red\", \"blue\"]).interpolate(hsl):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.scale.linear();
+console.log("domain coercion:");
+console.log("       String  -> ", x.domain(["1", "2"]).domain());
+console.log("         Date  -> ", x.domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]).domain());
+console.log("       Number  -> ", x.domain([new Number(41), new Number(42)]).domain());
+console.log("");
+
+var x = d3.scale.linear();
+console.log("domain coercion, invert:");
+console.log("       String  -> ", x.domain(["0", "2"]).invert(.5));
+console.log("         Date  -> ", x.domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]).invert(.5));
+console.log("       Number  -> ", x.domain([new Number(0), new Number(42)]).invert(.5));
+console.log("");
+
+var x = d3.scale.linear();
+console.log("range coercion, invert:");
+console.log("       String  -> ", x.range(["0", "2"]).invert("1"));
+console.log("         Date  -> ", x.range([new Date(1990, 0, 1), new Date(1991, 0, 1)]).invert(new Date(1990, 6, 2, 13)));
+console.log("       Number  -> ", x.range([new Number(0), new Number(42)]).invert(new Number(21)));
+console.log("          ???  -> ", x.range(["#000", "#fff"]).invert("#999")); // can't be coerced
+console.log("");
+
+var x = d3.scale.linear();
+console.log("ticks:");
+console.log("            1  -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
+console.log("            2  -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
+console.log("            5  -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
+console.log("           10  -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
+console.log("");
+
+var x = d3.scale.linear().domain([1, 0]);
+console.log("descending ticks:");
+console.log("            1  -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
+console.log("            2  -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
+console.log("            5  -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
+console.log("           10  -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
+console.log("");
+
+var x = d3.scale.linear().clamp(true);
+console.log("domain clamping:")
+console.log("   inspection  -> ", x.clamp());
+console.log("        under  -> ", x(-1));
+console.log("         over  -> ", x(2));
+console.log("");
+
+var x = d3.scale.linear().domain([1, 0]).clamp(true);
+console.log("domain clamping reversed:")
+console.log("        under  -> ", x(-1));
+console.log("         over  -> ", x(2));
+console.log("");
+
+var x = d3.scale.linear().clamp(false);
+console.log("domain unclamping:")
+console.log("        under  -> ", x(-1));
+console.log("         over  -> ", x(11));
+console.log("");
+
+var x = d3.scale.linear();
+console.log("nice():");
+[[1.1, 10.9], [10.9, 1.1], [.7, 11.001], [123.1, 6.7], [0, .49]].forEach(function(d) {
+  var s = " [" + d.map(f) + " ]";
+  while (s.length < 21) s += " ";
+  console.log(" ", s + " -> ", x.domain(d).nice().domain().map(f).join(","));
+});
+console.log("");
Index: /Dev/trunk/d3/test/scale/test-linear.out
===================================================================
--- /Dev/trunk/d3/test/scale/test-linear.out	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-linear.out	(revision 76)
@@ -0,0 +1,84 @@
+domain([0, 1]).range([0, 1]):
+         -0.5  ->  â0.500
+          0.0  ->   0.000
+          0.5  ->   0.500
+          1.0  ->   1.000
+          1.5  ->   1.500
+
+domain([1, 2]).range([0, 1]):
+          0.5  ->  â0.500
+          1.0  ->   0.000
+          1.5  ->   0.500
+          2.0  ->   1.000
+          2.5  ->   1.500
+
+domain([01/01/1990, 01/01/1991]).range([0, 1]):
+   10/20/1989  ->  â0.200
+   01/01/1990  ->   0.000
+   03/15/1990  ->   0.200
+   05/27/1990  ->   0.400
+   01/01/1991  ->   1.000
+   03/15/1991  ->   1.200
+
+domain([0, 1]).range(["red", "blue"]):
+         -0.5  ->  rgb(383,0,-127)
+          0.0  ->  rgb(255,0,0)
+          0.5  ->  rgb(128,0,128)
+          1.0  ->  rgb(0,0,255)
+          1.5  ->  rgb(-127,0,383)
+
+domain([0, 1]).range(["red", "blue"]).interpolate(hsl):
+         -0.5  ->  #0000ff
+          0.0  ->  #ff0000
+          0.5  ->  #00ff00
+          1.0  ->  #0000ff
+          1.5  ->  #ff0000
+
+domain coercion:
+       String  ->  [ 1, 2 ]
+         Date  ->  [ 631180800000, 662716800000 ]
+       Number  ->  [ 41, 42 ]
+
+domain coercion, invert:
+       String  ->  1
+         Date  ->  646948800000
+       Number  ->  21
+
+range coercion, invert:
+       String  ->  0.5
+         Date  ->  0.5
+       Number  ->  0.5
+          ???  ->  NaN
+
+ticks:
+            1  ->  0, 1
+            2  ->  0.0, 0.5, 1.0
+            5  ->  0.0, 0.2, 0.4, 0.6, 0.8, 1.0
+           10  ->  0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
+
+descending ticks:
+            1  ->  0, 1
+            2  ->  0.0, 0.5, 1.0
+            5  ->  0.0, 0.2, 0.4, 0.6, 0.8, 1.0
+           10  ->  0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
+
+domain clamping:
+   inspection  ->  true
+        under  ->  0
+         over  ->  1
+
+domain clamping reversed:
+        under  ->  1
+         over  ->  0
+
+domain unclamping:
+        under  ->  -1
+         over  ->  11
+
+nice():
+   [ 1.100, 10.900 ]    ->   1.000, 11.000
+   [ 10.900, 1.100 ]    ->   11.000, 1.000
+   [ 0.700, 11.001 ]    ->   0.000, 12.000
+   [ 123.100, 6.700 ]   ->   130.000, 0.000
+   [ 0.000, 0.490 ]     ->   0.000, 0.500
+
Index: /Dev/trunk/d3/test/scale/test-log.js
===================================================================
--- /Dev/trunk/d3/test/scale/test-log.js	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-log.js	(revision 76)
@@ -0,0 +1,108 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var f = d3.format(" .3f");
+
+var x = d3.scale.log();
+console.log("domain([1, 10]).range([0, 1]):");
+console.log("           -5  -> ", f(x(-5)));
+console.log("            0  -> ", f(x(0)));
+console.log("         0.01  -> ", f(x(0.01)));
+console.log("          0.1  -> ", f(x(0.1)));
+console.log("            1  -> ", f(x(1)));
+console.log("            5  -> ", f(x(5)));
+console.log("           10  -> ", f(x(10)));
+console.log("          100  -> ", f(x(100)));
+console.log("");
+
+var x = d3.scale.log().domain([10, 1]);
+console.log("domain([10, 1]).range([0, 1]):");
+console.log("           -5  -> ", f(x(-5)));
+console.log("            0  -> ", f(x(0)));
+console.log("         0.01  -> ", f(x(0.01)));
+console.log("          0.1  -> ", f(x(0.1)));
+console.log("            1  -> ", f(x(1)));
+console.log("            5  -> ", f(x(5)));
+console.log("           10  -> ", f(x(10)));
+console.log("          100  -> ", f(x(100)));
+console.log("");
+
+var x = d3.scale.log().invert;
+console.log("domain([1, 10]).range([0, 1]).invert:");
+console.log("            0  -> ", f(x(0)));
+console.log("         0.01  -> ", f(x(0.01)));
+console.log("          0.1  -> ", f(x(0.1)));
+console.log("          0.5  -> ", f(x(0.5)));
+console.log("            1  -> ", f(x(1)));
+console.log("");
+
+var x = d3.scale.log().domain([1, 2]);
+console.log("domain([1, 2]).range([0, 1]):");
+console.log("          0.5  -> ", f(x(0.5)));
+console.log("          1.0  -> ", f(x(1.0)));
+console.log("          1.5  -> ", f(x(1.5)));
+console.log("          2.0  -> ", f(x(2.0)));
+console.log("          2.5  -> ", f(x(2.5)));
+console.log("");
+
+var x = d3.scale.log().domain([1, 2]).invert;
+console.log("domain([1, 2]).range([0, 1]).invert:");
+console.log("            0  -> ", f(x(0)));
+console.log("         0.01  -> ", f(x(0.01)));
+console.log("          0.1  -> ", f(x(0.1)));
+console.log("          0.5  -> ", f(x(0.5)));
+console.log("            1  -> ", f(x(1)));
+console.log("");
+
+var x = d3.scale.log().domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]);
+console.log("domain([01/01/1990, 01/01/1991]).range([0, 1]):");
+console.log("   10/20/1989  -> ", f(x(new Date(1989, 09, 20))));
+console.log("   01/01/1990  -> ", f(x(new Date(1990, 00, 01))));
+console.log("   03/15/1990  -> ", f(x(new Date(1990, 02, 15))));
+console.log("   05/27/1990  -> ", f(x(new Date(1990, 04, 27))));
+console.log("   01/01/1991  -> ", f(x(new Date(1991, 00, 01))));
+console.log("   03/15/1991  -> ", f(x(new Date(1991, 02, 15))));
+console.log("");
+
+var x = d3.scale.log().domain([.1, 10]).range(["red", "blue"]);
+console.log("domain([.1, 10]).range([\"red\", \"blue\"]):");
+console.log("          0.1  -> ", x(0.1));
+console.log("            1  -> ", x(1));
+console.log("            5  -> ", x(5));
+console.log("           10  -> ", x(10));
+console.log("");
+
+var x = d3.scale.log().domain([.1, 10]).range(["red", "blue"]).interpolate(d3.interpolateHsl);
+console.log("domain([.1, 10]).range([\"red\", \"blue\"]).interpolate(hsl):");
+console.log("          0.1  -> ", x(0.1));
+console.log("            1  -> ", x(1));
+console.log("            5  -> ", x(5));
+console.log("           10  -> ", x(10));
+console.log("");
+
+var x = d3.scale.log();
+console.log("nice():");
+[
+  [1.1, 10.9], [10.9, 1.1], [.7, 11.001], [123.1, 6.7], [0, .49],
+  [.12, 1, 2.5, 3, 10.9]
+].forEach(function(d) {
+  var s = " [" + d.map(f) + " ]";
+  while (s.length < 21) s += " ";
+  console.log(" ", s + " -> ", x.domain(d).nice().domain().map(f).join(","));
+});
+console.log("");
+
+var x = d3.scale.log(), f = x.tickFormat();
+console.log("ticks:");
+console.log("     [.1, 10]  -> ", x.ticks().map(f).join(", "));
+console.log("    [.1, 100]  -> ", x.domain([.1, 100]).ticks().map(f).join(", "));
+console.log("     [1, 100]  -> ", x.domain([1, 100]).ticks().map(f).join(", "));
+console.log("   [-100, -1]  -> ", x.domain([-100, -1]).ticks().map(f).join(", "));
+console.log("     [100, 1]  -> ", x.domain([100, 1]).ticks().map(f).join(", "));
+console.log("");
+
+var x = d3.scale.log().domain([1, 2]).clamp(true);
+console.log("domain clamping:");
+console.log("         over  -> ", f(x(4)));
+console.log("        under  -> ", f(x(0)));
+console.log("");
Index: /Dev/trunk/d3/test/scale/test-log.out
===================================================================
--- /Dev/trunk/d3/test/scale/test-log.out	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-log.out	(revision 76)
@@ -0,0 +1,80 @@
+domain([1, 10]).range([0, 1]):
+           -5  ->   NaN
+            0  ->  âInfinity
+         0.01  ->  â2.000
+          0.1  ->  â1.000
+            1  ->   0.000
+            5  ->   0.699
+           10  ->   1.000
+          100  ->   2.000
+
+domain([10, 1]).range([0, 1]):
+           -5  ->   NaN
+            0  ->   Infinity
+         0.01  ->   3.000
+          0.1  ->   2.000
+            1  ->   1.000
+            5  ->   0.301
+           10  ->   0.000
+          100  ->  â1.000
+
+domain([1, 10]).range([0, 1]).invert:
+            0  ->   1.000
+         0.01  ->   1.023
+          0.1  ->   1.259
+          0.5  ->   3.162
+            1  ->   10.000
+
+domain([1, 2]).range([0, 1]):
+          0.5  ->  â1.000
+          1.0  ->   0.000
+          1.5  ->   0.585
+          2.0  ->   1.000
+          2.5  ->   1.322
+
+domain([1, 2]).range([0, 1]).invert:
+            0  ->   1.000
+         0.01  ->   1.007
+          0.1  ->   1.072
+          0.5  ->   1.414
+            1  ->   2.000
+
+domain([01/01/1990, 01/01/1991]).range([0, 1]):
+   10/20/1989  ->  â0.206
+   01/01/1990  ->   0.000
+   03/15/1990  ->   0.204
+   05/27/1990  ->   0.406
+   01/01/1991  ->   1.000
+   03/15/1991  ->   1.194
+
+domain([.1, 10]).range(["red", "blue"]):
+          0.1  ->  rgb(255,0,0)
+            1  ->  rgb(128,0,128)
+            5  ->  rgb(38,0,217)
+           10  ->  rgb(0,0,255)
+
+domain([.1, 10]).range(["red", "blue"]).interpolate(hsl):
+          0.1  ->  #ff0000
+            1  ->  #00ff00
+            5  ->  #009aff
+           10  ->  #0000ff
+
+nice():
+   [ 1.100, 10.900 ]    ->   1.000, 100.000
+   [ 10.900, 1.100 ]    ->   100.000, 1.000
+   [ 0.700, 11.001 ]    ->   0.100, 100.000
+   [ 123.100, 6.700 ]   ->   1000.000, 1.000
+   [ 0.000, 0.490 ]     ->   0.000, 1.000
+   [ 0.120, 1.000, 2.500, 3.000, 10.900 ] ->   0.100, 1.000, 2.500, 3.000, 100.000
+
+ticks:
+     [.1, 10]  ->  1, 2, 3, 4, 5, 6, 7, 8, 9, 1e+1
+    [.1, 100]  ->  0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1e+1, 2e+1, 3e+1, 4e+1, 5e+1, 6e+1, 7e+1, 8e+1, 9e+1, 1e+2
+     [1, 100]  ->  1, 2, 3, 4, 5, 6, 7, 8, 9, 1e+1, 2e+1, 3e+1, 4e+1, 5e+1, 6e+1, 7e+1, 8e+1, 9e+1, 1e+2
+   [-100, -1]  ->  -1e+2, -9e+1, -8e+1, -7e+1, -6e+1, -5e+1, -4e+1, -3e+1, -2e+1, -1e+1, -9, -8, -7, -6, -5, -4, -3, -2, -1
+     [100, 1]  ->  1, 2, 3, 4, 5, 6, 7, 8, 9, 1e+1, 2e+1, 3e+1, 4e+1, 5e+1, 6e+1, 7e+1, 8e+1, 9e+1, 1e+2
+
+domain clamping:
+         over  ->  1
+        under  ->  0
+
Index: /Dev/trunk/d3/test/scale/test-ordinal.js
===================================================================
--- /Dev/trunk/d3/test/scale/test-ordinal.js	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-ordinal.js	(revision 76)
@@ -0,0 +1,79 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var x = d3.scale.ordinal().range(["a", "b", "c"]);
+console.log("range([a, b, c]):");
+console.log("  0 -> " + x(0));
+console.log("  1 -> " + x(1));
+console.log("  2 -> " + x(2));
+console.log("  3 -> " + x(3));
+console.log("  4 -> " + x(4));
+console.log("  5 -> " + x(5));
+console.log("  6 -> " + x(6));
+console.log("  0 -> " + x(0));
+console.log("  1 -> " + x(1));
+console.log("  2 -> " + x(2));
+console.log("  3 -> " + x(3));
+console.log("");
+
+x.domain([]);
+console.log("domain([]).range([a, b, c]):");
+console.log("  1 -> " + x(1));
+console.log("  2 -> " + x(2));
+console.log("  3 -> " + x(3));
+console.log("  0 -> " + x(0));
+console.log("  1 -> " + x(1));
+console.log("  2 -> " + x(2));
+console.log("");
+
+var x = d3.scale.ordinal().domain(["a", "b", "c"]).rangePoints([0, 120]);
+console.log("domain([a, b, c]).rangePoints([0, 120]):");
+console.log("  a -> " + x("a"));
+console.log("  b -> " + x("b"));
+console.log("  c -> " + x("c"));
+console.log("  d -> " + x("d"));
+console.log("");
+
+var x = d3.scale.ordinal().rangePoints([0, 120]).domain(["a", "b", "c"]);
+console.log("rangePoints([0, 120]).domain([a, b, c]):");
+console.log("  a -> " + x("a"));
+console.log("  b -> " + x("b"));
+console.log("  c -> " + x("c"));
+console.log("  d -> " + x("d"));
+console.log("");
+
+var x = d3.scale.ordinal().domain(["a", "b", "c"]).rangeBands([0, 120]);
+console.log("domain([a, b, c]).rangeBands([0, 120]):");
+console.log("  rangeBand: " + x.rangeBand());
+console.log("  a -> " + x("a"));
+console.log("  b -> " + x("b"));
+console.log("  c -> " + x("c"));
+console.log("  d -> " + x("d"));
+console.log("");
+
+var x = d3.scale.ordinal().rangeBands([0, 120]).domain(["a", "b", "c"]);
+console.log("rangeBands([0, 120]).domain([a, b, c]):");
+console.log("  rangeBand: " + x.rangeBand());
+console.log("  a -> " + x("a"));
+console.log("  b -> " + x("b"));
+console.log("  c -> " + x("c"));
+console.log("  d -> " + x("d"));
+console.log("");
+
+var x = d3.scale.ordinal().domain(["a", "b", "c"]).rangeRoundBands([0, 119]);
+console.log("domain([a, b, c]).rangeRoundBands([0, 119]):");
+console.log("  rangeBand: " + x.rangeBand());
+console.log("  a -> " + x("a"));
+console.log("  b -> " + x("b"));
+console.log("  c -> " + x("c"));
+console.log("  d -> " + x("d"));
+console.log("");
+
+var x = d3.scale.ordinal().rangeRoundBands([0, 119]).domain(["a", "b", "c"]);
+console.log("rangeRoundBands([0, 119]).domain([a, b, c]):");
+console.log("  rangeBand: " + x.rangeBand());
+console.log("  a -> " + x("a"));
+console.log("  b -> " + x("b"));
+console.log("  c -> " + x("c"));
+console.log("  d -> " + x("d"));
+console.log("");
Index: /Dev/trunk/d3/test/scale/test-ordinal.out
===================================================================
--- /Dev/trunk/d3/test/scale/test-ordinal.out	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-ordinal.out	(revision 76)
@@ -0,0 +1,61 @@
+range([a, b, c]):
+  0 -> a
+  1 -> b
+  2 -> c
+  3 -> a
+  4 -> b
+  5 -> c
+  6 -> a
+  0 -> a
+  1 -> b
+  2 -> c
+  3 -> a
+
+domain([]).range([a, b, c]):
+  1 -> a
+  2 -> b
+  3 -> c
+  0 -> a
+  1 -> a
+  2 -> b
+
+domain([a, b, c]).rangePoints([0, 120]):
+  a -> 0
+  b -> 60
+  c -> 120
+  d -> 0
+
+rangePoints([0, 120]).domain([a, b, c]):
+  a -> 0
+  b -> 60
+  c -> 120
+  d -> 0
+
+domain([a, b, c]).rangeBands([0, 120]):
+  rangeBand: 40
+  a -> 0
+  b -> 40
+  c -> 80
+  d -> 0
+
+rangeBands([0, 120]).domain([a, b, c]):
+  rangeBand: 40
+  a -> 0
+  b -> 40
+  c -> 80
+  d -> 0
+
+domain([a, b, c]).rangeRoundBands([0, 119]):
+  rangeBand: 39
+  a -> 1
+  b -> 40
+  c -> 79
+  d -> 118
+
+rangeRoundBands([0, 119]).domain([a, b, c]):
+  rangeBand: 39
+  a -> 1
+  b -> 40
+  c -> 79
+  d -> 118
+
Index: /Dev/trunk/d3/test/scale/test-polylinear.js
===================================================================
--- /Dev/trunk/d3/test/scale/test-polylinear.js	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-polylinear.js	(revision 76)
@@ -0,0 +1,37 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var f = d3.format(" .3f");
+
+var x = d3.scale.linear().domain([-1, 0, 1]).range(["red", "white", "green"]);
+console.log("domain(-1, 0, 1).range(red, white, green):");
+console.log("         -1.0 -> " + x(-1));
+console.log("         -0.8 -> " + x(-.8));
+console.log("         -0.6 -> " + x(-.6));
+console.log("         -0.4 -> " + x(-.4));
+console.log("         -0.2 -> " + x(-.2));
+console.log("          0.0 -> " + x(0));
+console.log("          0.2 -> " + x(.2));
+console.log("          0.4 -> " + x(.4));
+console.log("          0.6 -> " + x(.6));
+console.log("          0.8 -> " + x(.8));
+console.log("          1.0 -> " + x(1));
+console.log("");
+
+var x = d3.scale.linear().domain([-1, 0, 1]).range([-100, 0, 10]);
+console.log("domain(-1, 0, 1).range(-100, 0, 10):");
+console.log("         -1.5 -> " + f(x(-1.5)));
+console.log("         -1.0 -> " + f(x(-1)));
+console.log("         -0.5 -> " + f(x(-.5)));
+console.log("          0.0 -> " + f(x(0)));
+console.log("          0.5 -> " + f(x(.5)));
+console.log("          1.0 -> " + f(x(1)));
+console.log("          1.5 -> " + f(x(1.5)));
+console.log("");
+
+var x = d3.scale.linear();
+[[1.1, 1, 2, 3, 10.9], [123.1, 1, 2, 3, -.9]].forEach(function(d) {
+  console.log("domain([" + d.map(f) + " ]).nice():");
+  console.log("  ", x.domain(d).nice().domain());
+  console.log("");
+});
Index: /Dev/trunk/d3/test/scale/test-polylinear.out
===================================================================
--- /Dev/trunk/d3/test/scale/test-polylinear.out	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-polylinear.out	(revision 76)
@@ -0,0 +1,28 @@
+domain(-1, 0, 1).range(red, white, green):
+         -1.0 -> rgb(255,0,0)
+         -0.8 -> rgb(255,51,51)
+         -0.6 -> rgb(255,102,102)
+         -0.4 -> rgb(255,153,153)
+         -0.2 -> rgb(255,204,204)
+          0.0 -> rgb(255,255,255)
+          0.2 -> rgb(204,230,204)
+          0.4 -> rgb(153,204,153)
+          0.6 -> rgb(102,179,102)
+          0.8 -> rgb(51,153,51)
+          1.0 -> rgb(0,128,0)
+
+domain(-1, 0, 1).range(-100, 0, 10):
+         -1.5 -> â150.000
+         -1.0 -> â100.000
+         -0.5 -> â50.000
+          0.0 ->  0.000
+          0.5 ->  5.000
+          1.0 ->  10.000
+          1.5 ->  15.000
+
+domain([ 1.100, 1.000, 2.000, 3.000, 10.900 ]).nice():
+   [ 1, 1, 2, 3, 11 ]
+
+domain([ 123.100, 1.000, 2.000, 3.000,â0.900 ]).nice():
+   [ 130, 1, 2, 3, -10 ]
+
Index: /Dev/trunk/d3/test/scale/test-pow.js
===================================================================
--- /Dev/trunk/d3/test/scale/test-pow.js	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-pow.js	(revision 76)
@@ -0,0 +1,85 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var f = d3.format(" .3f");
+
+var x = d3.scale.pow().exponent(2);
+console.log("domain([0, 1]).range([0, 1]):");
+console.log("         -0.5  -> ", f(x(-0.5)));
+console.log("          0.0  -> ", f(x(0.0)));
+console.log("          0.5  -> ", f(x(0.5)));
+console.log("          1.0  -> ", f(x(1.0)));
+console.log("          1.5  -> ", f(x(1.5)));
+console.log("");
+
+var x = d3.scale.pow().exponent(2).domain([1, 2]);
+console.log("domain([1, 2]).range([0, 1]):");
+console.log("          0.5  -> ", f(x(0.5)));
+console.log("          1.0  -> ", f(x(1.0)));
+console.log("          1.5  -> ", f(x(1.5)));
+console.log("          2.0  -> ", f(x(2.0)));
+console.log("          2.5  -> ", f(x(2.5)));
+console.log("");
+
+var x = d3.scale.pow().exponent(2).domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]);
+console.log("domain([01/01/1990, 01/01/1991]).range([0, 1]):");
+console.log("   10/20/1989  -> ", f(x(new Date(1989, 09, 20))));
+console.log("   01/01/1990  -> ", f(x(new Date(1990, 00, 01))));
+console.log("   03/15/1990  -> ", f(x(new Date(1990, 02, 15))));
+console.log("   05/27/1990  -> ", f(x(new Date(1990, 04, 27))));
+console.log("   01/01/1991  -> ", f(x(new Date(1991, 00, 01))));
+console.log("   03/15/1991  -> ", f(x(new Date(1991, 02, 15))));
+console.log("");
+
+var x = d3.scale.pow().exponent(2).range(["red", "blue"]);
+console.log("domain([0, 1]).range([\"red\", \"blue\"]):");
+console.log("         -0.5  -> ", x(-0.5));
+console.log("          0.0  -> ", x(0.0));
+console.log("          0.5  -> ", x(0.5));
+console.log("          1.0  -> ", x(1.0));
+console.log("          1.5  -> ", x(1.5));
+console.log("");
+
+var x = d3.scale.pow().exponent(2).range(["red", "blue"]).interpolate(d3.interpolateHsl);
+console.log("domain([0, 1]).range([\"red\", \"blue\"]).interpolate(hsl):");
+console.log("        -0.50  -> ", x(-0.50));
+console.log("         0.00  -> ", x(0.00));
+console.log("         0.50  -> ", x(0.50));
+console.log("        â0.50  -> ", x(Math.SQRT1_2));
+console.log("         1.00  -> ", x(1.00));
+console.log("         2.00  -> ", x(2.00));
+console.log("");
+
+var x = d3.scale.pow().exponent(2);
+console.log("ticks:");
+console.log("            1  -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
+console.log("            2  -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
+console.log("            5  -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
+console.log("           10  -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
+console.log("");
+
+var x = d3.scale.pow().exponent(2).domain([1, 0]);
+console.log("descending ticks:");
+console.log("            1  -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
+console.log("            2  -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
+console.log("            5  -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
+console.log("           10  -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
+console.log("");
+
+var x = d3.scale.pow().exponent(2).domain([1, 2]).range([0, 1]).clamp(true);
+console.log("domain clamping:")
+console.log("        under  -> ", x(-1));
+console.log("         over  -> ", x(2));
+console.log("");
+
+var x = d3.scale.pow().exponent(2);
+console.log("nice():");
+[
+  [1.1, 10.9], [10.9, 1.1], [.7, 11.001], [123.1, 6.7], [0, .49],
+  [.1, 1, 2.5, 3, 10.9]
+].forEach(function(d) {
+  var s = " [" + d.map(f) + " ]";
+  while (s.length < 21) s += " ";
+  console.log(" ", s + " -> ", x.domain(d).nice().domain().map(f).join(","));
+});
+console.log("");
Index: /Dev/trunk/d3/test/scale/test-pow.out
===================================================================
--- /Dev/trunk/d3/test/scale/test-pow.out	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-pow.out	(revision 76)
@@ -0,0 +1,61 @@
+domain([0, 1]).range([0, 1]):
+         -0.5  ->  â0.250
+          0.0  ->   0.000
+          0.5  ->   0.250
+          1.0  ->   1.000
+          1.5  ->   2.250
+
+domain([1, 2]).range([0, 1]):
+          0.5  ->  â0.250
+          1.0  ->   0.000
+          1.5  ->   0.417
+          2.0  ->   1.000
+          2.5  ->   1.750
+
+domain([01/01/1990, 01/01/1991]).range([0, 1]):
+   10/20/1989  ->  â0.194
+   01/01/1990  ->   0.000
+   03/15/1990  ->   0.196
+   05/27/1990  ->   0.394
+   01/01/1991  ->   1.000
+   03/15/1991  ->   1.206
+
+domain([0, 1]).range(["red", "blue"]):
+         -0.5  ->  rgb(319,0,-64)
+          0.0  ->  rgb(255,0,0)
+          0.5  ->  rgb(191,0,64)
+          1.0  ->  rgb(0,0,255)
+          1.5  ->  rgb(-319,0,574)
+
+domain([0, 1]).range(["red", "blue"]).interpolate(hsl):
+        -0.50  ->  #ff00ff
+         0.00  ->  #ff0000
+         0.50  ->  #ffff00
+        â0.50  ->  #00ff00
+         1.00  ->  #0000ff
+         2.00  ->  #0000ff
+
+ticks:
+            1  ->  0, 1
+            2  ->  0.0, 0.5, 1.0
+            5  ->  0.0, 0.2, 0.4, 0.6, 0.8, 1.0
+           10  ->  0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
+
+descending ticks:
+            1  ->  0, 1
+            2  ->  0.0, 0.5, 1.0
+            5  ->  0.0, 0.2, 0.4, 0.6, 0.8, 1.0
+           10  ->  0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
+
+domain clamping:
+        under  ->  0
+         over  ->  1
+
+nice():
+   [ 1.100, 10.900 ]    ->   1.000, 11.000
+   [ 10.900, 1.100 ]    ->   11.000, 1.000
+   [ 0.700, 11.001 ]    ->   0.000, 12.000
+   [ 123.100, 6.700 ]   ->   130.000, 0.000
+   [ 0.000, 0.490 ]     ->   0.000, 0.500
+   [ 0.100, 1.000, 2.500, 3.000, 10.900 ] ->   0.000, 1.000, 2.500, 3.000, 11.000
+
Index: /Dev/trunk/d3/test/scale/test-quantile.js
===================================================================
--- /Dev/trunk/d3/test/scale/test-quantile.js	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-quantile.js	(revision 76)
@@ -0,0 +1,142 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var x = d3.scale.quantile()
+    .domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20])
+    .range([0, 1, 2, 3]);
+
+console.log("domain(3, 6, 7, 8, 8, 10, 13, 15, 16, 20).range(0, 1, 2, 3):");
+console.log("  quantiles -> " + x.quantiles());
+console.log("          3 -> " + x(3));
+console.log("          6 -> " + x(6));
+console.log("        6.9 -> " + x(6.9));
+console.log("          7 -> " + x(7));
+console.log("        7.1 -> " + x(7.1));
+console.log("          8 -> " + x(8));
+console.log("        8.9 -> " + x(8.9));
+console.log("          9 -> " + x(9));
+console.log("        9.1 -> " + x(9.1));
+console.log("         10 -> " + x(10));
+console.log("         13 -> " + x(13));
+console.log("       14.9 -> " + x(14.9));
+console.log("         15 -> " + x(15));
+console.log("       15.1 -> " + x(15.1));
+console.log("         16 -> " + x(16));
+console.log("         20 -> " + x(20));
+console.log("");
+
+var x = d3.scale.quantile()
+    .domain([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20])
+    .range([0, 1, 2, 3]);
+
+console.log("domain(3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20).range(0, 1, 2, 3):");
+console.log("  quantiles -> " + x.quantiles());
+console.log("          3 -> " + x(3));
+console.log("          6 -> " + x(6));
+console.log("        6.9 -> " + x(6.9));
+console.log("          7 -> " + x(7));
+console.log("        7.1 -> " + x(7.1));
+console.log("          8 -> " + x(8));
+console.log("        8.9 -> " + x(8.9));
+console.log("          9 -> " + x(9));
+console.log("        9.1 -> " + x(9.1));
+console.log("         10 -> " + x(10));
+console.log("         13 -> " + x(13));
+console.log("       14.9 -> " + x(14.9));
+console.log("         15 -> " + x(15));
+console.log("       15.1 -> " + x(15.1));
+console.log("         16 -> " + x(16));
+console.log("         20 -> " + x(20));
+console.log("");
+
+var x = d3.scale.quantile()
+    .domain([0, 1])
+    .range([0, 1]);
+
+console.log("domain(0, 1).range(0, 1):");
+console.log("  quantiles -> " + x.quantiles());
+console.log("        -.5 -> " + x(-.5));
+console.log("          0 -> " + x(0));
+console.log("        .49 -> " + x(.49));
+console.log("        .51 -> " + x(.51));
+console.log("          1 -> " + x(1));
+console.log("        1.5 -> " + x(1.5));
+console.log("");
+
+var x = d3.scale.quantile()
+    .domain([1, 2, 3, 4])
+    .range(["a", "b"]);
+
+console.log("domain(1, 2, 3, 4).range(a, b):");
+console.log("  quantiles -> " + x.quantiles());
+console.log("          0 -> " + x(0));
+console.log("          1 -> " + x(1));
+console.log("          2 -> " + x(2));
+console.log("       2.49 -> " + x(2.49));
+console.log("       2.51 -> " + x(2.51));
+console.log("          3 -> " + x(3));
+console.log("          4 -> " + x(4));
+console.log("          5 -> " + x(5));
+console.log("");
+
+var x = d3.scale.quantile()
+    .domain([1, 2, 3, 4])
+    .range(["a", "b", "c"]);
+
+console.log("domain(1, 2, 3, 4).range(a, b, c):");
+console.log("  quantiles -> " + x.quantiles());
+console.log("          0 -> " + x(0));
+console.log("          1 -> " + x(1));
+console.log("        1.9 -> " + x(1.9));
+console.log("          2 -> " + x(2));
+console.log("        2.1 -> " + x(2.1));
+console.log("        2.9 -> " + x(2.9));
+console.log("          3 -> " + x(3));
+console.log("        3.1 -> " + x(3.1));
+console.log("          4 -> " + x(4));
+console.log("          5 -> " + x(5));
+console.log("");
+
+var x = d3.scale.quantile()
+    .domain([1, 1, 2, 2, 3, 3, 4, 4])
+    .range(["a", "b", "c", "d"]);
+
+console.log("domain(1, 1, 2, 2, 3, 3, 4, 4).range(a, b, c, d):");
+console.log("  quantiles -> " + x.quantiles());
+console.log("          0 -> " + x(0));
+console.log("          1 -> " + x(1));
+console.log("       1.49 -> " + x(1.49));
+console.log("       1.51 -> " + x(1.51));
+console.log("          2 -> " + x(2));
+console.log("       2.49 -> " + x(2.49));
+console.log("       2.51 -> " + x(2.51));
+console.log("          3 -> " + x(3));
+console.log("       3.49 -> " + x(3.49));
+console.log("       3.51 -> " + x(3.51));
+console.log("          4 -> " + x(4));
+console.log("          5 -> " + x(5));
+console.log("");
+
+var x = d3.scale.quantile()
+    .domain([1, 2, 3, 4, 5, 6, 7, 8])
+    .range(["a", "b", "c", "d"]);
+
+console.log("domain(1, 2, 3, 4, 5, 6, 7, 8).range(a, b, c, d):");
+console.log("  quantiles -> " + x.quantiles());
+console.log("          0 -> " + x(0));
+console.log("          1 -> " + x(1));
+console.log("          2 -> " + x(2));
+console.log("       2.49 -> " + x(2.49));
+console.log("       2.51 -> " + x(2.51));
+console.log("          3 -> " + x(3));
+console.log("          4 -> " + x(4));
+console.log("       4.49 -> " + x(4.49));
+console.log("       4.51 -> " + x(4.51));
+console.log("          5 -> " + x(5));
+console.log("          6 -> " + x(6));
+console.log("       6.49 -> " + x(6.49));
+console.log("       6.51 -> " + x(6.51));
+console.log("          7 -> " + x(7));
+console.log("          8 -> " + x(8));
+console.log("          9 -> " + x(9));
+console.log("");
Index: /Dev/trunk/d3/test/scale/test-quantile.out
===================================================================
--- /Dev/trunk/d3/test/scale/test-quantile.out	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-quantile.out	(revision 76)
@@ -0,0 +1,105 @@
+domain(3, 6, 7, 8, 8, 10, 13, 15, 16, 20).range(0, 1, 2, 3):
+  quantiles -> 7.25,9,14.5
+          3 -> 0
+          6 -> 0
+        6.9 -> 0
+          7 -> 0
+        7.1 -> 0
+          8 -> 1
+        8.9 -> 1
+          9 -> 2
+        9.1 -> 2
+         10 -> 2
+         13 -> 2
+       14.9 -> 3
+         15 -> 3
+       15.1 -> 3
+         16 -> 3
+         20 -> 3
+
+domain(3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20).range(0, 1, 2, 3):
+  quantiles -> 7.5,9,14
+          3 -> 0
+          6 -> 0
+        6.9 -> 0
+          7 -> 0
+        7.1 -> 0
+          8 -> 1
+        8.9 -> 1
+          9 -> 2
+        9.1 -> 2
+         10 -> 2
+         13 -> 2
+       14.9 -> 3
+         15 -> 3
+       15.1 -> 3
+         16 -> 3
+         20 -> 3
+
+domain(0, 1).range(0, 1):
+  quantiles -> 0.5
+        -.5 -> 0
+          0 -> 0
+        .49 -> 0
+        .51 -> 1
+          1 -> 1
+        1.5 -> 1
+
+domain(1, 2, 3, 4).range(a, b):
+  quantiles -> 2.5
+          0 -> a
+          1 -> a
+          2 -> a
+       2.49 -> a
+       2.51 -> b
+          3 -> b
+          4 -> b
+          5 -> b
+
+domain(1, 2, 3, 4).range(a, b, c):
+  quantiles -> 2,3
+          0 -> a
+          1 -> a
+        1.9 -> a
+          2 -> b
+        2.1 -> b
+        2.9 -> b
+          3 -> c
+        3.1 -> c
+          4 -> c
+          5 -> c
+
+domain(1, 1, 2, 2, 3, 3, 4, 4).range(a, b, c, d):
+  quantiles -> 1.75,2.5,3.25
+          0 -> a
+          1 -> a
+       1.49 -> a
+       1.51 -> a
+          2 -> b
+       2.49 -> b
+       2.51 -> c
+          3 -> c
+       3.49 -> d
+       3.51 -> d
+          4 -> d
+          5 -> d
+
+domain(1, 2, 3, 4, 5, 6, 7, 8).range(a, b, c, d):
+  quantiles -> 2.75,4.5,6.25
+          0 -> a
+          1 -> a
+          2 -> a
+       2.49 -> a
+       2.51 -> a
+          3 -> b
+          4 -> b
+       4.49 -> b
+       4.51 -> c
+          5 -> c
+          6 -> c
+       6.49 -> d
+       6.51 -> d
+          7 -> d
+          8 -> d
+          9 -> d
+
Index: /Dev/trunk/d3/test/scale/test-sqrt.js
===================================================================
--- /Dev/trunk/d3/test/scale/test-sqrt.js	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-sqrt.js	(revision 76)
@@ -0,0 +1,51 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3");
+
+var f = d3.format(" .3f");
+
+var x = d3.scale.sqrt();
+console.log("domain([0, 1]).range([0, 1]):");
+console.log("        -0.50  -> ", f(x(-0.50)));
+console.log("         0.00  -> ", f(x(0.00)));
+console.log("         0.25  -> ", f(x(0.25)));
+console.log("         0.50  -> ", f(x(0.50)));
+console.log("         1.00  -> ", f(x(1.00)));
+console.log("         4.00  -> ", f(x(4.00)));
+console.log("");
+
+var x = d3.scale.sqrt().domain([0, -1]);
+console.log("domain([0, -1]).range([0, 1]):");
+console.log("         0.50  -> ", f(x(0.50)));
+console.log("         0.00  -> ", f(x(0.00)));
+console.log("        -0.25  -> ", f(x(-0.25)));
+console.log("        -0.50  -> ", f(x(-0.50)));
+console.log("        -1.00  -> ", f(x(-1.00)));
+console.log("        -4.00  -> ", f(x(-4.00)));
+console.log("");
+
+var x = d3.scale.sqrt().domain([1, 2]);
+console.log("domain([1, 2]).range([0, 1]):");
+console.log("          0.5  -> ", f(x(0.5)));
+console.log("          1.0  -> ", f(x(1.0)));
+console.log("          1.5  -> ", f(x(1.5)));
+console.log("          2.0  -> ", f(x(2.0)));
+console.log("          2.5  -> ", f(x(2.5)));
+console.log("");
+
+var x = d3.scale.sqrt().range(["red", "blue"]);
+console.log("domain([0, 1]).range([\"red\", \"blue\"]):");
+console.log("         0.00  -> ", x(0.00));
+console.log("         0.25  -> ", x(0.25));
+console.log("         1.00  -> ", x(1.00));
+console.log("         4.00  -> ", x(4.00));
+console.log("");
+
+var x = d3.scale.sqrt().domain([1, 0]).range(["red", "blue"]).interpolate(d3.interpolateHsl);
+console.log("domain([1, 0]).range([\"red\", \"blue\"]).interpolate(hsl):");
+console.log("         0.00  -> ", x(0.00));
+console.log("         0.25  -> ", x(0.25));
+console.log("         0.50  -> ", x(0.50));
+console.log("         1.00  -> ", x(1.00));
+console.log("         4.00  -> ", x(4.00));
+console.log("");
Index: /Dev/trunk/d3/test/scale/test-sqrt.out
===================================================================
--- /Dev/trunk/d3/test/scale/test-sqrt.out	(revision 76)
+++ /Dev/trunk/d3/test/scale/test-sqrt.out	(revision 76)
@@ -0,0 +1,36 @@
+domain([0, 1]).range([0, 1]):
+        -0.50  ->  â0.707
+         0.00  ->   0.000
+         0.25  ->   0.500
+         0.50  ->   0.707
+         1.00  ->   1.000
+         4.00  ->   2.000
+
+domain([0, -1]).range([0, 1]):
+         0.50  ->  â0.707
+         0.00  ->   0.000
+        -0.25  ->   0.500
+        -0.50  ->   0.707
+        -1.00  ->   1.000
+        -4.00  ->   2.000
+
+domain([1, 2]).range([0, 1]):
+          0.5  ->  â0.707
+          1.0  ->   0.000
+          1.5  ->   0.543
+          2.0  ->   1.000
+          2.5  ->   1.403
+
+domain([0, 1]).range(["red", "blue"]):
+         0.00  ->  rgb(255,0,0)
+         0.25  ->  rgb(128,0,128)
+         1.00  ->  rgb(0,0,255)
+         4.00  ->  rgb(-255,0,510)
+
+domain([1, 0]).range(["red", "blue"]).interpolate(hsl):
+         0.00  ->  #0000ff
+         0.25  ->  #00ff00
+         0.50  ->  #d3ff00
+         1.00  ->  #ff0000
+         4.00  ->  #00ff00
+
Index: /Dev/trunk/d3/test/svg/test-arc.js
===================================================================
--- /Dev/trunk/d3/test/svg/test-arc.js	(revision 76)
+++ /Dev/trunk/d3/test/svg/test-arc.js	(revision 76)
@@ -0,0 +1,12 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var arc = d3.svg.arc();
+console.log("default:");
+console.log("  [0, 1] [0, Ï]:", arc({innerRadius: 0, outerRadius: 1, startAngle: 0, endAngle: Math.PI}));
+console.log("");
+
+var arc = d3.svg.arc().innerRadius(0).outerRadius(1).startAngle(0).endAngle(Math.PI);
+console.log("[0, 1] [0, Ï]:");
+console.log("  undefined:", arc());
+console.log("");
Index: /Dev/trunk/d3/test/svg/test-arc.out
===================================================================
--- /Dev/trunk/d3/test/svg/test-arc.out	(revision 76)
+++ /Dev/trunk/d3/test/svg/test-arc.out	(revision 76)
@@ -0,0 +1,6 @@
+default:
+  [0, 1] [0, Ï]: M6.123233995736766e-17,-1A1,1 0 1,1 6.123031769111886e-17,1L0,0Z
+
+[0, 1] [0, Ï]:
+  undefined: M6.123233995736766e-17,-1A1,1 0 1,1 6.123031769111886e-17,1L0,0Z
+
Index: /Dev/trunk/d3/test/svg/test-area.js
===================================================================
--- /Dev/trunk/d3/test/svg/test-area.js	(revision 76)
+++ /Dev/trunk/d3/test/svg/test-area.js	(revision 76)
@@ -0,0 +1,123 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var area = d3.svg.area();
+
+console.log("default:");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var i = 0,
+    area = d3.svg.area()
+    .x(function() { return i++; });
+
+console.log("x(function() { return i++; }):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var i = 0,
+    area = d3.svg.area()
+    .y(function() { return i++; });
+
+console.log("y(function() { return i++; }):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [0, 2]]:", area([[0, 0], [1, 1], [0, 2]]));
+console.log("");
+
+var area = d3.svg.area()
+    .y0(-1);
+
+console.log("y0(-1):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var area = d3.svg.area()
+    .x(function(d) { return d.x; })
+    .y1(function(d) { return d.y; });
+
+console.log("x(d.x).y1(d.y):");
+console.log("                      [{x:0,y:0}]:", area([{x:0,y:0}]));
+console.log("            [{x:0,y:0},{x:1,y:1}]:", area([{x:0,y:0},{x:1,y:1}]));
+console.log("  [{x:0,y:0},{x:1,y:1},{x:2,y:0}]:", area([{x:0,y:0},{x:1,y:1},{x:2,y:0}]));
+console.log("");
+
+var area = d3.svg.area()
+    .x(function(d) { return d.x; })
+    .y0(function(d) { return -d.y; })
+    .y1(function(d) { return d.y; });
+
+console.log("x(d.x).y0(-d.y).y1(d.y):");
+console.log("                      [{x:0,y:0}]:", area([{x:0,y:0}]));
+console.log("            [{x:0,y:0},{x:1,y:1}]:", area([{x:0,y:0},{x:1,y:1}]));
+console.log("  [{x:0,y:0},{x:1,y:1},{x:2,y:0}]:", area([{x:0,y:0},{x:1,y:1},{x:2,y:0}]));
+console.log("");
+
+var area = d3.svg.area()
+    .interpolate("step-before");
+
+console.log("interpolate(step-before):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var area = d3.svg.area()
+    .interpolate("step-after");
+
+console.log("interpolate(step-after):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var area = d3.svg.area()
+    .interpolate("basis");
+
+console.log("interpolate(basis):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
+console.log("        [[0, 0], [6, 6], [12, 0]]:", area([[0, 0], [6, 6], [12, 0]]));
+console.log("");
+
+var area = d3.svg.area()
+    .interpolate("basis-closed");
+
+console.log("interpolate(basis-closed):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [6, 6]]:", area([[0, 0], [6, 6]]));
+console.log("        [[0, 0], [6, 6], [12, 0]]:", area([[0, 0], [6, 6], [12, 0]]));
+console.log("");
+
+var area = d3.svg.area()
+    .interpolate("cardinal");
+
+console.log("interpolate(cardinal):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [5, 5]]:", area([[0, 0], [5, 5]]));
+console.log("        [[0, 0], [5, 5], [10, 0]]:", area([[0, 0], [5, 5], [10, 0]]));
+console.log("");
+
+var area = d3.svg.area()
+    .interpolate("cardinal-closed");
+
+console.log("interpolate(cardinal-closed):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [5, 5]]:", area([[0, 0], [5, 5]]));
+console.log("        [[0, 0], [5, 5], [10, 0]]:", area([[0, 0], [5, 5], [10, 0]]));
+console.log("");
+
+var area = d3.svg.area()
+    .interpolate("monotone");
+
+console.log("interpolate(monotone):");
+console.log("                         [[0, 0]]:", area([[0, 0]]));
+console.log("                 [[0, 0], [5, 5]]:", area([[0, 0], [5, 5]]));
+console.log("        [[0, 0], [5, 5], [10, 0]]:", area([[0, 0], [5, 5], [10, 0]]));
+console.log("");
Index: /Dev/trunk/d3/test/svg/test-area.out
===================================================================
--- /Dev/trunk/d3/test/svg/test-area.out	(revision 76)
+++ /Dev/trunk/d3/test/svg/test-area.out	(revision 76)
@@ -0,0 +1,65 @@
+default:
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [1, 1]]: M0,0L1,1L1,0L0,0Z
+         [[0, 0], [1, 1], [2, 0]]: M0,0L1,1L2,0L2,0L1,0L0,0Z
+
+x(function() { return i++; }):
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [1, 1]]: M1,0L2,1L2,0L1,0Z
+         [[0, 0], [1, 1], [2, 0]]: M3,0L4,1L5,0L5,0L4,0L3,0Z
+
+y(function() { return i++; }):
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [1, 1]]: M0,1L1,2L1,2L0,1Z
+         [[0, 0], [1, 1], [0, 2]]: M0,3L1,4L0,5L0,5L1,4L0,3Z
+
+y0(-1):
+                         [[0, 0]]: M0,0L0,-1Z
+                 [[0, 0], [1, 1]]: M0,0L1,1L1,-1L0,-1Z
+         [[0, 0], [1, 1], [2, 0]]: M0,0L1,1L2,0L2,-1L1,-1L0,-1Z
+
+x(d.x).y1(d.y):
+                      [{x:0,y:0}]: M0,0L0,0Z
+            [{x:0,y:0},{x:1,y:1}]: M0,0L1,1L1,0L0,0Z
+  [{x:0,y:0},{x:1,y:1},{x:2,y:0}]: M0,0L1,1L2,0L2,0L1,0L0,0Z
+
+x(d.x).y0(-d.y).y1(d.y):
+                      [{x:0,y:0}]: M0,0L0,0Z
+            [{x:0,y:0},{x:1,y:1}]: M0,0L1,1L1,-1L0,0Z
+  [{x:0,y:0},{x:1,y:1},{x:2,y:0}]: M0,0L1,1L2,0L2,0L1,-1L0,0Z
+
+interpolate(step-before):
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [1, 1]]: M0,0V1H1L1,0V0H0Z
+         [[0, 0], [1, 1], [2, 0]]: M0,0V1H1V0H2L2,0V0H1V0H0Z
+
+interpolate(step-after):
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [1, 1]]: M0,0H1V1L1,0H0V0Z
+         [[0, 0], [1, 1], [2, 0]]: M0,0H1V1H2V0L2,0H1V0H0V0Z
+
+interpolate(basis):
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [1, 1]]: M0,0L1,1L1,0L0,0Z
+        [[0, 0], [6, 6], [12, 0]]: M0,0C0,0,0,0,1,1C2,2,4,4,6,4C8,4,10,2,11,1C12,0,12,0,12,0L12,0C12,0,12,0,11,0C10,0,8,0,6,0C4,0,2,0,1,0C0,0,0,0,0,0Z
+
+interpolate(basis-closed):
+                         [[0, 0]]: M0,0C0,0,0,0,0,0L0,0C0,0,0,0,0,0Z
+                 [[0, 0], [6, 6]]: M2,2C2,2,4,4,4,4C4,4,2,2,2,2L4,0C4,0,2,0,2,0C2,0,4,0,4,0Z
+        [[0, 0], [6, 6], [12, 0]]: M9,1C8,0,4,0,3,1C2,2,4,4,6,4C8,4,10,2,9,1L3,0C4,0,8,0,9,0C10,0,8,0,6,0C4,0,2,0,3,0Z
+
+interpolate(cardinal):
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [5, 5]]: M0,0L5,5L5,0L0,0Z
+        [[0, 0], [5, 5], [10, 0]]: M0,0Q4,5,5,5Q6,5,10,0L10,0Q6,0,5,0Q4,0,0,0Z
+
+interpolate(cardinal-closed):
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [5, 5]]: M0,0L5,5L5,0L0,0Z
+        [[0, 0], [5, 5], [10, 0]]: M0,0C-0.7500000000000001,0.7500000000000001,3.5,5,5,5S10.75,0.7500000000000001,10,0S0.7500000000000001,-0.7500000000000001,0,0L10,0C10.75,0,6.5,0,5,0S-0.7500000000000001,0,0,0S9.25,0,10,0Z
+
+interpolate(monotone):
+                         [[0, 0]]: M0,0L0,0Z
+                 [[0, 0], [5, 5]]: M0,0L5,5L5,0L0,0Z
+        [[0, 0], [5, 5], [10, 0]]: M0,0C0.4166666666666667,0.4166666666666667,3.333333333333333,5,5,5S9.583333333333334,0.4166666666666667,10,0L10,0C9.166666666666666,0,6.666666666666667,0,5,0S0.8333333333333334,0,0,0Z
+
Index: /Dev/trunk/d3/test/svg/test-line.js
===================================================================
--- /Dev/trunk/d3/test/svg/test-line.js	(revision 76)
+++ /Dev/trunk/d3/test/svg/test-line.js	(revision 76)
@@ -0,0 +1,93 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../lib/sizzle/sizzle");
+require("./../../d3");
+
+var line = d3.svg.line();
+
+console.log("default:");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", line([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var line = d3.svg.line()
+    .y(-1);
+
+console.log("y(-1):");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", line([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var line = d3.svg.line()
+    .x(function(d) { return d.x; })
+    .y(function(d) { return d.y; });
+
+console.log("x(d.x).y(d.y):");
+console.log("                      [{x:0,y:0}]:", line([{x:0,y:0}]));
+console.log("            [{x:0,y:0},{x:1,y:1}]:", line([{x:0,y:0},{x:1,y:1}]));
+console.log("  [{x:0,y:0},{x:1,y:1},{x:2,y:0}]:", line([{x:0,y:0},{x:1,y:1},{x:2,y:0}]));
+console.log("");
+
+var line = d3.svg.line()
+    .interpolate("step-before");
+
+console.log("interpolate(step-before):");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", line([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var line = d3.svg.line()
+    .interpolate("step-after");
+
+console.log("interpolate(step-after):");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
+console.log("         [[0, 0], [1, 1], [2, 0]]:", line([[0, 0], [1, 1], [2, 0]]));
+console.log("");
+
+var line = d3.svg.line()
+    .interpolate("basis");
+
+console.log("interpolate(basis):");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
+console.log("        [[0, 0], [6, 6], [12, 0]]:", line([[0, 0], [6, 6], [12, 0]]));
+console.log("");
+
+var line = d3.svg.line()
+    .interpolate("basis-closed");
+
+console.log("interpolate(basis-closed):");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [6, 6]]:", line([[0, 0], [6, 6]]));
+console.log("        [[0, 0], [6, 6], [12, 0]]:", line([[0, 0], [6, 6], [12, 0]]));
+console.log("");
+
+var line = d3.svg.line()
+    .interpolate("cardinal");
+
+console.log("interpolate(cardinal):");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [5, 5]]:", line([[0, 0], [5, 5]]));
+console.log("        [[0, 0], [5, 5], [10, 0]]:", line([[0, 0], [5, 5], [10, 0]]));
+console.log("");
+
+var line = d3.svg.line()
+    .interpolate("cardinal-closed");
+
+console.log("interpolate(cardinal-closed):");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [5, 5]]:", line([[0, 0], [5, 5]]));
+console.log("        [[0, 0], [5, 5], [10, 0]]:", line([[0, 0], [5, 5], [10, 0]]));
+console.log("");
+
+var line = d3.svg.line()
+    .interpolate("monotone");
+
+console.log("interpolate(monotone):");
+console.log("                         [[0, 0]]:", line([[0, 0]]));
+console.log("                 [[0, 0], [5, 5]]:", line([[0, 0], [5, 5]]));
+console.log("        [[0, 0], [5, 5], [10, 0]]:", line([[0, 0], [5, 5], [10, 0]]));
+console.log("");
Index: /Dev/trunk/d3/test/svg/test-line.out
===================================================================
--- /Dev/trunk/d3/test/svg/test-line.out	(revision 76)
+++ /Dev/trunk/d3/test/svg/test-line.out	(revision 76)
@@ -0,0 +1,50 @@
+default:
+                         [[0, 0]]: M0,0
+                 [[0, 0], [1, 1]]: M0,0L1,1
+         [[0, 0], [1, 1], [2, 0]]: M0,0L1,1L2,0
+
+y(-1):
+                         [[0, 0]]: M0,-1
+                 [[0, 0], [1, 1]]: M0,-1L1,-1
+         [[0, 0], [1, 1], [2, 0]]: M0,-1L1,-1L2,-1
+
+x(d.x).y(d.y):
+                      [{x:0,y:0}]: M0,0
+            [{x:0,y:0},{x:1,y:1}]: M0,0L1,1
+  [{x:0,y:0},{x:1,y:1},{x:2,y:0}]: M0,0L1,1L2,0
+
+interpolate(step-before):
+                         [[0, 0]]: M0,0
+                 [[0, 0], [1, 1]]: M0,0V1H1
+         [[0, 0], [1, 1], [2, 0]]: M0,0V1H1V0H2
+
+interpolate(step-after):
+                         [[0, 0]]: M0,0
+                 [[0, 0], [1, 1]]: M0,0H1V1
+         [[0, 0], [1, 1], [2, 0]]: M0,0H1V1H2V0
+
+interpolate(basis):
+                         [[0, 0]]: M0,0
+                 [[0, 0], [1, 1]]: M0,0L1,1
+        [[0, 0], [6, 6], [12, 0]]: M0,0C0,0,0,0,1,1C2,2,4,4,6,4C8,4,10,2,11,1C12,0,12,0,12,0
+
+interpolate(basis-closed):
+                         [[0, 0]]: M0,0C0,0,0,0,0,0
+                 [[0, 0], [6, 6]]: M2,2C2,2,4,4,4,4C4,4,2,2,2,2
+        [[0, 0], [6, 6], [12, 0]]: M9,1C8,0,4,0,3,1C2,2,4,4,6,4C8,4,10,2,9,1
+
+interpolate(cardinal):
+                         [[0, 0]]: M0,0
+                 [[0, 0], [5, 5]]: M0,0L5,5
+        [[0, 0], [5, 5], [10, 0]]: M0,0Q4,5,5,5Q6,5,10,0
+
+interpolate(cardinal-closed):
+                         [[0, 0]]: M0,0
+                 [[0, 0], [5, 5]]: M0,0L5,5
+        [[0, 0], [5, 5], [10, 0]]: M0,0C-0.7500000000000001,0.7500000000000001,3.5,5,5,5S10.75,0.7500000000000001,10,0S0.7500000000000001,-0.7500000000000001,0,0
+
+interpolate(monotone):
+                         [[0, 0]]: M0,0
+                 [[0, 0], [5, 5]]: M0,0L5,5
+        [[0, 0], [5, 5], [10, 0]]: M0,0C0.4166666666666667,0.4166666666666667,3.333333333333333,5,5,5S9.583333333333334,0.4166666666666667,10,0
+
Index: /Dev/trunk/d3/test/svg/test-symbol.js
===================================================================
--- /Dev/trunk/d3/test/svg/test-symbol.js	(revision 76)
+++ /Dev/trunk/d3/test/svg/test-symbol.js	(revision 76)
@@ -0,0 +1,63 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+
+var symbol = d3.svg.symbol();
+console.log("default:");
+console.log("  undefined:", symbol());
+console.log("");
+
+var symbol = d3.svg.symbol().size(Number);
+console.log("size(Number):");
+console.log("   0:", symbol(0));
+console.log("   Ï:", symbol(Math.PI));
+console.log("  4Ï:", symbol(4 * Math.PI));
+console.log("");
+
+var symbol = d3.svg.symbol().size(function(d) { return d.z; });
+console.log("size(d.z):");
+console.log("   0:", symbol({z: 0}));
+console.log("   Ï:", symbol({z: Math.PI}));
+console.log("  4Ï:", symbol({z: 4 * Math.PI}));
+console.log("");
+
+var symbol = d3.svg.symbol().type("cross").size(Number);
+console.log("type(cross).size(Number):");
+console.log("   0:", symbol(0));
+console.log("  20:", symbol(20));
+console.log("");
+
+var symbol = d3.svg.symbol().type("diamond").size(Number);
+console.log("type(diamond).size(Number):");
+console.log("   0:", symbol(0));
+console.log("  10:", symbol(10));
+console.log("");
+
+var symbol = d3.svg.symbol().type("square").size(Number);
+console.log("type(square).size(Number):");
+console.log("   0:", symbol(0));
+console.log("   4:", symbol(4));
+console.log("  16:", symbol(16));
+console.log("");
+
+var symbol = d3.svg.symbol().type("triangle-down").size(Number);
+console.log("type(triangle-down).size(Number):");
+console.log("   0:", symbol(0));
+console.log("  10:", symbol(10));
+console.log("");
+
+var symbol = d3.svg.symbol().type("triangle-up").size(Number);
+console.log("type(triangle-up).size(Number):");
+console.log("   0:", symbol(0));
+console.log("  10:", symbol(10));
+console.log("");
+
+var symbol = d3.svg.symbol().type(String);
+console.log("type(String):");
+console.log("      undefined:", symbol());
+console.log("         circle:", symbol("circle"));
+console.log("          cross:", symbol("cross"));
+console.log("        diamond:", symbol("diamond"));
+console.log("         square:", symbol("square"));
+console.log("  triangle-down:", symbol("triangle-down"));
+console.log("    triangle-up:", symbol("triangle-up"));
+console.log("");
Index: /Dev/trunk/d3/test/svg/test-symbol.out
===================================================================
--- /Dev/trunk/d3/test/svg/test-symbol.out	(revision 76)
+++ /Dev/trunk/d3/test/svg/test-symbol.out	(revision 76)
@@ -0,0 +1,43 @@
+default:
+  undefined: M0,4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,-4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,4.51351666838205Z
+
+size(Number):
+   0: M0,0A0,0 0 1,1 0,0A0,0 0 1,1 0,0Z
+   Ï: M0,1A1,1 0 1,1 0,-1A1,1 0 1,1 0,1Z
+  4Ï: M0,2A2,2 0 1,1 0,-2A2,2 0 1,1 0,2Z
+
+size(d.z):
+   0: M0,0A0,0 0 1,1 0,0A0,0 0 1,1 0,0Z
+   Ï: M0,1A1,1 0 1,1 0,-1A1,1 0 1,1 0,1Z
+  4Ï: M0,2A2,2 0 1,1 0,-2A2,2 0 1,1 0,2Z
+
+type(cross).size(Number):
+   0: M0,0H0V0H0V0H0V0H0V0H0V0H0Z
+  20: M-3,-1H-1V-3H1V-1H3V1H1V3H-1V1H-3Z
+
+type(diamond).size(Number):
+   0: M0,0L0,0 0,0 0,0Z
+  10: M0,-2.9428309563827124L1.6990442448471224,0 0,2.9428309563827124 -1.6990442448471224,0Z
+
+type(square).size(Number):
+   0: M0,0L0,0 0,0 0,0Z
+   4: M-1,-1L1,-1 1,1 -1,1Z
+  16: M-2,-2L2,-2 2,2 -2,2Z
+
+type(triangle-down).size(Number):
+   0: M0,0L0,0 0,0Z
+  10: M0,2.0808957251439084L2.4028114141347543,-2.0808957251439084 -2.4028114141347543,-2.0808957251439084Z
+
+type(triangle-up).size(Number):
+   0: M0,0L0,0 0,0Z
+  10: M0,-2.0808957251439084L2.4028114141347543,2.0808957251439084 -2.4028114141347543,2.0808957251439084Z
+
+type(String):
+      undefined: M0,4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,-4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,4.51351666838205Z
+         circle: M0,4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,-4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,4.51351666838205Z
+          cross: M-5.366563145999495,-1.7888543819998317H-1.7888543819998317V-5.366563145999495H1.7888543819998317V-1.7888543819998317H5.366563145999495V1.7888543819998317H1.7888543819998317V5.366563145999495H-1.7888543819998317V1.7888543819998317H-5.366563145999495Z
+        diamond: M0,-7.444838872816797L4.298279727294167,0 0,7.444838872816797 -4.298279727294167,0Z
+         square: M-4,-4L4,-4 4,4 -4,4Z
+  triangle-down: M0,5.26429605180997L6.078685485212741,-5.26429605180997 -6.078685485212741,-5.26429605180997Z
+    triangle-up: M0,-5.26429605180997L6.078685485212741,5.26429605180997 -6.078685485212741,5.26429605180997Z
+
Index: /Dev/trunk/d3/test/time/test-day.js
===================================================================
--- /Dev/trunk/d3/test/time/test-day.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-day.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("day:");
+console.log("  2011-01-01T07:59:59Z -> " + format(d3.time.day(parse("2011-01-01T07:59:59Z"))));
+console.log("  2011-01-01T08:00:00Z -> " + format(d3.time.day(parse("2011-01-01T08:00:00Z"))));
+console.log("  2011-01-01T08:00:01Z -> " + format(d3.time.day(parse("2011-01-01T08:00:01Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.day(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.day(parse("2011-11-06T09:00:00Z"))));
+console.log("");
+
+console.log("day.utc:");
+console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.day.utc(parse("2010-12-31T23:59:59Z"))));
+console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.day.utc(parse("2011-01-01T00:00:00Z"))));
+console.log("  2011-01-01T23:00:00Z -> " + format(d3.time.day.utc(parse("2011-01-01T23:00:00Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.day.utc(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.day.utc(parse("2011-11-06T09:00:00Z"))));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-day.out
===================================================================
--- /Dev/trunk/d3/test/time/test-day.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-day.out	(revision 76)
@@ -0,0 +1,14 @@
+day:
+  2011-01-01T07:59:59Z -> Fri Dec 31 2010 00:00:00 GMT-0800 (PST)
+  2011-01-01T08:00:00Z -> Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  2011-01-01T08:00:01Z -> Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Sun Mar 13 2011 00:00:00 GMT-0800 (PST)
+  2011-11-06T09:00:00Z -> Sun Nov 06 2011 00:00:00 GMT-0700 (PDT)
+
+day.utc:
+  2010-12-31T23:59:59Z -> Thu Dec 30 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T23:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Sat Mar 12 2011 16:00:00 GMT-0800 (PST)
+  2011-11-06T09:00:00Z -> Sat Nov 05 2011 17:00:00 GMT-0700 (PDT)
+
Index: /Dev/trunk/d3/test/time/test-days.js
===================================================================
--- /Dev/trunk/d3/test/time/test-days.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-days.js	(revision 76)
@@ -0,0 +1,34 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("days(2010-12-31T06:00:00Z, 2011-01-02T10:00:00Z):");
+d3.time.days(parse("2010-12-31T06:00:00Z"), parse("2011-01-02T10:00:00Z")).forEach(log);
+console.log("");
+
+console.log("days(2011-03-12T07:00:00Z, 2011-03-14T11:00:00Z):");
+d3.time.days(parse("2011-03-12T07:00:00Z"), parse("2011-03-14T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("days(2011-11-05T07:00:00Z, 2011-11-07T11:00:00Z):");
+d3.time.days(parse("2011-11-05T07:00:00Z"), parse("2011-11-07T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("days(2011-11-05T07:00:00Z, 2011-11-17T11:00:00Z, 5):");
+d3.time.days(parse("2011-11-05T07:00:00Z"), parse("2011-11-17T11:00:00Z"), 5).forEach(log);
+console.log("");
+
+console.log("days.utc(2010-12-30T22:00:00Z, 2011-01-02T02:00:00Z):");
+d3.time.days.utc(parse("2010-12-30T22:00:00Z"), parse("2011-01-02T02:00:00Z")).forEach(log);
+console.log("");
+
+console.log("days.utc(2010-12-30T22:00:00Z, 2011-01-12T02:00:00Z, 5):");
+d3.time.days.utc(parse("2010-12-30T22:00:00Z"), parse("2011-01-12T02:00:00Z"), 5).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + format(date));
+}
Index: /Dev/trunk/d3/test/time/test-days.out
===================================================================
--- /Dev/trunk/d3/test/time/test-days.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-days.out	(revision 76)
@@ -0,0 +1,31 @@
+days(2010-12-31T06:00:00Z, 2011-01-02T10:00:00Z):
+  Fri Dec 31 2010 00:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  Sun Jan 02 2011 00:00:00 GMT-0800 (PST)
+
+days(2011-03-12T07:00:00Z, 2011-03-14T11:00:00Z):
+  Sat Mar 12 2011 00:00:00 GMT-0800 (PST)
+  Sun Mar 13 2011 00:00:00 GMT-0800 (PST)
+  Mon Mar 14 2011 00:00:00 GMT-0700 (PDT)
+
+days(2011-11-05T07:00:00Z, 2011-11-07T11:00:00Z):
+  Sat Nov 05 2011 00:00:00 GMT-0700 (PDT)
+  Sun Nov 06 2011 00:00:00 GMT-0700 (PDT)
+  Mon Nov 07 2011 00:00:00 GMT-0800 (PST)
+
+days(2011-11-05T07:00:00Z, 2011-11-17T11:00:00Z, 5):
+  Sun Nov 06 2011 00:00:00 GMT-0700 (PDT)
+  Fri Nov 11 2011 00:00:00 GMT-0800 (PST)
+  Wed Nov 16 2011 00:00:00 GMT-0800 (PST)
+
+days.utc(2010-12-30T22:00:00Z, 2011-01-02T02:00:00Z):
+  Thu Dec 30 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 16:00:00 GMT-0800 (PST)
+
+days.utc(2010-12-30T22:00:00Z, 2011-01-12T02:00:00Z, 5):
+  Thu Dec 30 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Wed Jan 05 2011 16:00:00 GMT-0800 (PST)
+  Mon Jan 10 2011 16:00:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-format-iso.js
===================================================================
--- /Dev/trunk/d3/test/time/test-format-iso.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-format-iso.js	(revision 76)
@@ -0,0 +1,8 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+console.log("format:");
+console.log("  01/01/1990 00:00:00 ->", d3.time.format.iso(new Date(Date.UTC(1990, 0, 1))));
+console.log("  12/31/2011 23:59:59 ->", d3.time.format.iso(new Date(Date.UTC(2011, 11, 31, 23, 59, 59))));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-format-iso.out
===================================================================
--- /Dev/trunk/d3/test/time/test-format-iso.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-format-iso.out	(revision 76)
@@ -0,0 +1,4 @@
+format:
+  01/01/1990 00:00:00 -> 1990-01-01T00:00:00Z
+  12/31/2011 23:59:59 -> 2011-12-31T23:59:59Z
+
Index: /Dev/trunk/d3/test/time/test-format-utc.js
===================================================================
--- /Dev/trunk/d3/test/time/test-format-utc.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-format-utc.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+var formats = [
+  "a",  "A",  "b",  "B",  "c",  "d",  "e",  "H", "I",  "j",  "m",  "M",
+  "p",  "S",  "U",  "w",  "W",  "x",  "X",  "y", "Y",  "Z",  "%"
+];
+
+var now = new Date(Date.UTC(1990, 0, 1));
+console.log("format 01/01/1990 00:00:00:");
+formats.forEach(function(f) {
+   console.log("  " + f + ":", d3.time.format.utc("%" + f)(now));
+});
+console.log("");
+
+var now = new Date(Date.UTC(2011, 11, 31, 23, 59, 59));
+console.log("format 12/31/2011 23:59:59:");
+formats.forEach(function(f) {
+   console.log("  " + f + ":", d3.time.format.utc("%" + f)(now));
+});
+console.log("");
Index: /Dev/trunk/d3/test/time/test-format-utc.out
===================================================================
--- /Dev/trunk/d3/test/time/test-format-utc.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-format-utc.out	(revision 76)
@@ -0,0 +1,50 @@
+format 01/01/1990 00:00:00:
+  a: Mon
+  A: Monday
+  b: Jan
+  B: January
+  c: Mon Jan  1 00:00:00 1990
+  d: 01
+  e:  1
+  H: 00
+  I: 12
+  j: 001
+  m: 01
+  M: 00
+  p: AM
+  S: 00
+  U: 00
+  w: 1
+  W: 00
+  x: 01/01/90
+  X: 00:00:00
+  y: 90
+  Y: 1990
+  Z: +0000
+  %: %
+
+format 12/31/2011 23:59:59:
+  a: Sat
+  A: Saturday
+  b: Dec
+  B: December
+  c: Sat Dec 31 23:59:59 2011
+  d: 31
+  e: 31
+  H: 23
+  I: 11
+  j: 365
+  m: 12
+  M: 59
+  p: PM
+  S: 59
+  U: 52
+  w: 6
+  W: 52
+  x: 12/31/11
+  X: 23:59:59
+  y: 11
+  Y: 2011
+  Z: +0000
+  %: %
+
Index: /Dev/trunk/d3/test/time/test-format.js
===================================================================
--- /Dev/trunk/d3/test/time/test-format.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-format.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+var formats = [
+  "a",  "A",  "b",  "B",  "c",  "d",  "e",  "H", "I",  "j",  "m",  "M",
+  "p",  "S",  "U",  "w",  "W",  "x",  "X",  "y", "Y",  "Z",  "%"
+];
+
+var now = new Date(1990, 0, 1);
+console.log("format 01/01/1990 00:00:00:");
+formats.forEach(function(f) {
+   console.log("  " + f + ":", d3.time.format("%" + f)(now));
+});
+console.log("");
+
+var now = new Date(2011, 11, 31, 23, 59, 59);
+console.log("format 12/31/2011 23:59:59:");
+formats.forEach(function(f) {
+   console.log("  " + f + ":", d3.time.format("%" + f)(now));
+});
+console.log("");
Index: /Dev/trunk/d3/test/time/test-format.out
===================================================================
--- /Dev/trunk/d3/test/time/test-format.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-format.out	(revision 76)
@@ -0,0 +1,50 @@
+format 01/01/1990 00:00:00:
+  a: Mon
+  A: Monday
+  b: Jan
+  B: January
+  c: Mon Jan  1 00:00:00 1990
+  d: 01
+  e:  1
+  H: 00
+  I: 12
+  j: 001
+  m: 01
+  M: 00
+  p: AM
+  S: 00
+  U: 00
+  w: 1
+  W: 00
+  x: 01/01/90
+  X: 00:00:00
+  y: 90
+  Y: 1990
+  Z: -0800
+  %: %
+
+format 12/31/2011 23:59:59:
+  a: Sat
+  A: Saturday
+  b: Dec
+  B: December
+  c: Sat Dec 31 23:59:59 2011
+  d: 31
+  e: 31
+  H: 23
+  I: 11
+  j: 365
+  m: 12
+  M: 59
+  p: PM
+  S: 59
+  U: 52
+  w: 6
+  W: 52
+  x: 12/31/11
+  X: 23:59:59
+  y: 11
+  Y: 2011
+  Z: -0800
+  %: %
+
Index: /Dev/trunk/d3/test/time/test-hour.js
===================================================================
--- /Dev/trunk/d3/test/time/test-hour.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-hour.js	(revision 76)
@@ -0,0 +1,65 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("hour:");
+console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.hour(parse("2010-12-31T23:59:59Z"))));
+console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.hour(parse("2011-01-01T00:00:00Z"))));
+console.log("  2011-01-01T00:59:00Z -> " + format(d3.time.hour(parse("2011-01-01T00:59:00Z"))));
+console.log("  2011-01-01T01:00:00Z -> " + format(d3.time.hour(parse("2011-01-01T01:00:00Z"))));
+console.log("  2011-03-13T08:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T08:00:00Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-03-13T10:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T10:00:00Z"))));
+console.log("  2011-11-06T08:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T08:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T09:00:00Z"))));
+console.log("  2011-11-06T10:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T10:00:00Z"))));
+console.log("");
+
+var tz = process.env.TZ;
+try {
+  process.env.TZ = "Asia/Kathmandu"; new Date().toString();
+  console.log("hour.npt:");
+  console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.hour(parse("2010-12-31T23:59:59Z"))));
+  console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.hour(parse("2011-01-01T00:00:00Z"))));
+  console.log("  2011-01-01T00:59:00Z -> " + format(d3.time.hour(parse("2011-01-01T00:59:00Z"))));
+  console.log("  2011-01-01T01:00:00Z -> " + format(d3.time.hour(parse("2011-01-01T01:00:00Z"))));
+  console.log("  2011-03-13T08:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T08:00:00Z"))));
+  console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T09:00:00Z"))));
+  console.log("  2011-03-13T10:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T10:00:00Z"))));
+  console.log("  2011-11-06T08:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T08:00:00Z"))));
+  console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T09:00:00Z"))));
+  console.log("  2011-11-06T10:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T10:00:00Z"))));
+  console.log("");
+
+  process.env.TZ = "Asia/Calcutta"; new Date().toString();
+  console.log("hour.ist:");
+  console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.hour(parse("2010-12-31T23:59:59Z"))));
+  console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.hour(parse("2011-01-01T00:00:00Z"))));
+  console.log("  2011-01-01T00:59:00Z -> " + format(d3.time.hour(parse("2011-01-01T00:59:00Z"))));
+  console.log("  2011-01-01T01:00:00Z -> " + format(d3.time.hour(parse("2011-01-01T01:00:00Z"))));
+  console.log("  2011-03-13T08:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T08:00:00Z"))));
+  console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T09:00:00Z"))));
+  console.log("  2011-03-13T10:00:00Z -> " + format(d3.time.hour(parse("2011-03-13T10:00:00Z"))));
+  console.log("  2011-11-06T08:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T08:00:00Z"))));
+  console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T09:00:00Z"))));
+  console.log("  2011-11-06T10:00:00Z -> " + format(d3.time.hour(parse("2011-11-06T10:00:00Z"))));
+  console.log("");
+} finally {
+  process.env.TZ = tz;
+}
+
+console.log("hour.utc:");
+console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.hour.utc(parse("2010-12-31T23:59:59Z"))));
+console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.hour.utc(parse("2011-01-01T00:00:00Z"))));
+console.log("  2011-01-01T00:59:00Z -> " + format(d3.time.hour.utc(parse("2011-01-01T00:59:00Z"))));
+console.log("  2011-01-01T01:00:00Z -> " + format(d3.time.hour.utc(parse("2011-01-01T01:00:00Z"))));
+console.log("  2011-03-13T08:00:00Z -> " + format(d3.time.hour.utc(parse("2011-03-13T08:00:00Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.hour.utc(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-03-13T10:00:00Z -> " + format(d3.time.hour.utc(parse("2011-03-13T10:00:00Z"))));
+console.log("  2011-11-06T08:00:00Z -> " + format(d3.time.hour.utc(parse("2011-11-06T08:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.hour.utc(parse("2011-11-06T09:00:00Z"))));
+console.log("  2011-11-06T10:00:00Z -> " + format(d3.time.hour.utc(parse("2011-11-06T10:00:00Z"))));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-hour.out
===================================================================
--- /Dev/trunk/d3/test/time/test-hour.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-hour.out	(revision 76)
@@ -0,0 +1,48 @@
+hour:
+  2010-12-31T23:59:59Z -> Fri Dec 31 2010 15:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:59:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T01:00:00Z -> Fri Dec 31 2010 17:00:00 GMT-0800 (PST)
+  2011-03-13T08:00:00Z -> Sun Mar 13 2011 00:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Sun Mar 13 2011 01:00:00 GMT-0800 (PST)
+  2011-03-13T10:00:00Z -> Sun Mar 13 2011 03:00:00 GMT-0700 (PDT)
+  2011-11-06T08:00:00Z -> Sun Nov 06 2011 01:00:00 GMT-0700 (PDT)
+  2011-11-06T09:00:00Z -> Sun Nov 06 2011 01:00:00 GMT-0800 (PST)
+  2011-11-06T10:00:00Z -> Sun Nov 06 2011 02:00:00 GMT-0800 (PST)
+
+hour.npt:
+  2010-12-31T23:59:59Z -> Sat Jan 01 2011 05:00:00 GMT+0545 (NPT)
+  2011-01-01T00:00:00Z -> Sat Jan 01 2011 05:00:00 GMT+0545 (NPT)
+  2011-01-01T00:59:00Z -> Sat Jan 01 2011 06:00:00 GMT+0545 (NPT)
+  2011-01-01T01:00:00Z -> Sat Jan 01 2011 06:00:00 GMT+0545 (NPT)
+  2011-03-13T08:00:00Z -> Sun Mar 13 2011 13:00:00 GMT+0545 (NPT)
+  2011-03-13T09:00:00Z -> Sun Mar 13 2011 14:00:00 GMT+0545 (NPT)
+  2011-03-13T10:00:00Z -> Sun Mar 13 2011 15:00:00 GMT+0545 (NPT)
+  2011-11-06T08:00:00Z -> Sun Nov 06 2011 13:00:00 GMT+0545 (NPT)
+  2011-11-06T09:00:00Z -> Sun Nov 06 2011 14:00:00 GMT+0545 (NPT)
+  2011-11-06T10:00:00Z -> Sun Nov 06 2011 15:00:00 GMT+0545 (NPT)
+
+hour.ist:
+  2010-12-31T23:59:59Z -> Sat Jan 01 2011 05:00:00 GMT+0530 (IST)
+  2011-01-01T00:00:00Z -> Sat Jan 01 2011 05:00:00 GMT+0530 (IST)
+  2011-01-01T00:59:00Z -> Sat Jan 01 2011 06:00:00 GMT+0530 (IST)
+  2011-01-01T01:00:00Z -> Sat Jan 01 2011 06:00:00 GMT+0530 (IST)
+  2011-03-13T08:00:00Z -> Sun Mar 13 2011 13:00:00 GMT+0530 (IST)
+  2011-03-13T09:00:00Z -> Sun Mar 13 2011 14:00:00 GMT+0530 (IST)
+  2011-03-13T10:00:00Z -> Sun Mar 13 2011 15:00:00 GMT+0530 (IST)
+  2011-11-06T08:00:00Z -> Sun Nov 06 2011 13:00:00 GMT+0530 (IST)
+  2011-11-06T09:00:00Z -> Sun Nov 06 2011 14:00:00 GMT+0530 (IST)
+  2011-11-06T10:00:00Z -> Sun Nov 06 2011 15:00:00 GMT+0530 (IST)
+
+hour.utc:
+  2010-12-31T23:59:59Z -> Fri Dec 31 2010 15:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:59:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T01:00:00Z -> Fri Dec 31 2010 17:00:00 GMT-0800 (PST)
+  2011-03-13T08:00:00Z -> Sun Mar 13 2011 00:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Sun Mar 13 2011 01:00:00 GMT-0800 (PST)
+  2011-03-13T10:00:00Z -> Sun Mar 13 2011 03:00:00 GMT-0700 (PDT)
+  2011-11-06T08:00:00Z -> Sun Nov 06 2011 01:00:00 GMT-0700 (PDT)
+  2011-11-06T09:00:00Z -> Sun Nov 06 2011 01:00:00 GMT-0800 (PST)
+  2011-11-06T10:00:00Z -> Sun Nov 06 2011 02:00:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-hours.js
===================================================================
--- /Dev/trunk/d3/test/time/test-hours.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-hours.js	(revision 76)
@@ -0,0 +1,34 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("hours(2011-01-01T06:00:00Z, 2011-01-01T10:00:00Z):");
+d3.time.hours(parse("2011-01-01T06:00:00Z"), parse("2011-01-01T10:00:00Z")).forEach(log);
+console.log("");
+
+console.log("hours(2011-03-13T07:00:00Z, 2011-03-13T11:00:00Z):");
+d3.time.hours(parse("2011-03-13T07:00:00Z"), parse("2011-03-13T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("hours(2011-11-06T07:00:00Z, 2011-11-06T11:00:00Z):");
+d3.time.hours(parse("2011-11-06T07:00:00Z"), parse("2011-11-06T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("hours(2011-11-06T07:00:00Z, 2011-11-07T11:00:00Z, 3):");
+d3.time.hours(parse("2011-11-06T07:00:00Z"), parse("2011-11-07T11:00:00Z"), 3).forEach(log);
+console.log("");
+
+console.log("hours.utc(2010-12-31T22:00:00Z, 2011-01-01T02:00:00Z):");
+d3.time.hours.utc(parse("2010-12-31T22:00:00Z"), parse("2011-01-01T02:00:00Z")).forEach(log);
+console.log("");
+
+console.log("hours.utc(2010-12-31T22:00:00Z, 2011-01-02T02:00:00Z, 3):");
+d3.time.hours.utc(parse("2010-12-31T22:00:00Z"), parse("2011-01-02T02:00:00Z"), 3).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + format(date));
+}
Index: /Dev/trunk/d3/test/time/test-hours.out
===================================================================
--- /Dev/trunk/d3/test/time/test-hours.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-hours.out	(revision 76)
@@ -0,0 +1,46 @@
+hours(2011-01-01T06:00:00Z, 2011-01-01T10:00:00Z):
+  Fri Dec 31 2010 22:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 23:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 01:00:00 GMT-0800 (PST)
+
+hours(2011-03-13T07:00:00Z, 2011-03-13T11:00:00Z):
+  Sat Mar 12 2011 23:00:00 GMT-0800 (PST)
+  Sun Mar 13 2011 00:00:00 GMT-0800 (PST)
+  Sun Mar 13 2011 01:00:00 GMT-0800 (PST)
+  Sun Mar 13 2011 03:00:00 GMT-0700 (PDT)
+
+hours(2011-11-06T07:00:00Z, 2011-11-06T11:00:00Z):
+  Sun Nov 06 2011 00:00:00 GMT-0700 (PDT)
+  Sun Nov 06 2011 01:00:00 GMT-0700 (PDT)
+  Sun Nov 06 2011 01:00:00 GMT-0800 (PST)
+  Sun Nov 06 2011 02:00:00 GMT-0800 (PST)
+
+hours(2011-11-06T07:00:00Z, 2011-11-07T11:00:00Z, 3):
+  Sun Nov 06 2011 00:00:00 GMT-0700 (PDT)
+  Sun Nov 06 2011 03:00:00 GMT-0800 (PST)
+  Sun Nov 06 2011 06:00:00 GMT-0800 (PST)
+  Sun Nov 06 2011 09:00:00 GMT-0800 (PST)
+  Sun Nov 06 2011 12:00:00 GMT-0800 (PST)
+  Sun Nov 06 2011 15:00:00 GMT-0800 (PST)
+  Sun Nov 06 2011 18:00:00 GMT-0800 (PST)
+  Sun Nov 06 2011 21:00:00 GMT-0800 (PST)
+  Mon Nov 07 2011 00:00:00 GMT-0800 (PST)
+
+hours.utc(2010-12-31T22:00:00Z, 2011-01-01T02:00:00Z):
+  Fri Dec 31 2010 14:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 15:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 17:00:00 GMT-0800 (PST)
+
+hours.utc(2010-12-31T22:00:00Z, 2011-01-02T02:00:00Z, 3):
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 19:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 22:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 01:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 04:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 07:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 10:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 13:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 16:00:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-minute.js
===================================================================
--- /Dev/trunk/d3/test/time/test-minute.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-minute.js	(revision 76)
@@ -0,0 +1,20 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("minute:");
+console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.minute(parse("2010-12-31T23:59:59Z"))));
+console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.minute(parse("2011-01-01T00:00:00Z"))));
+console.log("  2011-01-01T00:00:59Z -> " + format(d3.time.minute(parse("2011-01-01T00:00:59Z"))));
+console.log("  2011-01-01T00:01:00Z -> " + format(d3.time.minute(parse("2011-01-01T00:01:00Z"))));
+console.log("");
+
+console.log("minute.utc:");
+console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.minute.utc(parse("2010-12-31T23:59:59Z"))));
+console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.minute.utc(parse("2011-01-01T00:00:00Z"))));
+console.log("  2011-01-01T00:00:59Z -> " + format(d3.time.minute.utc(parse("2011-01-01T00:00:59Z"))));
+console.log("  2011-01-01T00:01:00Z -> " + format(d3.time.minute.utc(parse("2011-01-01T00:01:00Z"))));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-minute.out
===================================================================
--- /Dev/trunk/d3/test/time/test-minute.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-minute.out	(revision 76)
@@ -0,0 +1,12 @@
+minute:
+  2010-12-31T23:59:59Z -> Fri Dec 31 2010 15:59:00 GMT-0800 (PST)
+  2011-01-01T00:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:59Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:01:00Z -> Fri Dec 31 2010 16:01:00 GMT-0800 (PST)
+
+minute.utc:
+  2010-12-31T23:59:59Z -> Fri Dec 31 2010 15:59:00 GMT-0800 (PST)
+  2011-01-01T00:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:59Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:01:00Z -> Fri Dec 31 2010 16:01:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-minutes.js
===================================================================
--- /Dev/trunk/d3/test/time/test-minutes.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-minutes.js	(revision 76)
@@ -0,0 +1,30 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("minutes(2011-01-01T07:58:00Z, 2011-01-01T08:02:00Z):");
+d3.time.minutes(parse("2011-01-01T07:58:00Z"), parse("2011-01-01T08:02:00Z")).forEach(log);
+console.log("");
+
+console.log("minutes(2011-03-13T09:58:00Z, 2011-03-13T10:02:00Z):");
+d3.time.minutes(parse("2011-03-13T09:58:00Z"), parse("2011-03-13T10:02:00Z")).forEach(log);
+console.log("");
+
+console.log("minutes(2011-03-13T09:58:00Z, 2011-03-13T11:02:00Z, 15):");
+d3.time.minutes(parse("2011-03-13T09:58:00Z"), parse("2011-03-13T11:02:00Z"), 15).forEach(log);
+console.log("");
+
+console.log("minutes.utc(2010-12-31T23:58:00Z, 2011-01-01T00:02:00Z):");
+d3.time.minutes.utc(parse("2010-12-31T23:58:00Z"), parse("2011-01-01T00:02:00Z")).forEach(log);
+console.log("");
+
+console.log("minutes.utc(2010-12-31T23:58:00Z, 2011-01-01T01:02:00Z, 15):");
+d3.time.minutes.utc(parse("2010-12-31T23:58:00Z"), parse("2011-01-01T01:02:00Z"), 15).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + format(date));
+}
Index: /Dev/trunk/d3/test/time/test-minutes.out
===================================================================
--- /Dev/trunk/d3/test/time/test-minutes.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-minutes.out	(revision 76)
@@ -0,0 +1,32 @@
+minutes(2011-01-01T07:58:00Z, 2011-01-01T08:02:00Z):
+  Fri Dec 31 2010 23:58:00 GMT-0800 (PST)
+  Fri Dec 31 2010 23:59:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:01:00 GMT-0800 (PST)
+
+minutes(2011-03-13T09:58:00Z, 2011-03-13T10:02:00Z):
+  Sun Mar 13 2011 01:58:00 GMT-0800 (PST)
+  Sun Mar 13 2011 01:59:00 GMT-0800 (PST)
+  Sun Mar 13 2011 03:00:00 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:01:00 GMT-0700 (PDT)
+
+minutes(2011-03-13T09:58:00Z, 2011-03-13T11:02:00Z, 15):
+  Sun Mar 13 2011 03:00:00 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:15:00 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:30:00 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:45:00 GMT-0700 (PDT)
+  Sun Mar 13 2011 04:00:00 GMT-0700 (PDT)
+
+minutes.utc(2010-12-31T23:58:00Z, 2011-01-01T00:02:00Z):
+  Fri Dec 31 2010 15:58:00 GMT-0800 (PST)
+  Fri Dec 31 2010 15:59:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:01:00 GMT-0800 (PST)
+
+minutes.utc(2010-12-31T23:58:00Z, 2011-01-01T01:02:00Z, 15):
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:15:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:30:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:45:00 GMT-0800 (PST)
+  Fri Dec 31 2010 17:00:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-month.js
===================================================================
--- /Dev/trunk/d3/test/time/test-month.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-month.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("month:");
+console.log("  2011-01-01T07:59:59Z -> " + format(d3.time.month(parse("2011-01-01T07:59:59Z"))));
+console.log("  2011-01-01T08:00:00Z -> " + format(d3.time.month(parse("2011-01-01T08:00:00Z"))));
+console.log("  2011-01-01T08:00:01Z -> " + format(d3.time.month(parse("2011-01-01T08:00:01Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.month(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.month(parse("2011-11-06T09:00:00Z"))));
+console.log("");
+
+console.log("month.utc:");
+console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.month.utc(parse("2010-12-31T23:59:59Z"))));
+console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.month.utc(parse("2011-01-01T00:00:00Z"))));
+console.log("  2011-01-01T23:00:00Z -> " + format(d3.time.month.utc(parse("2011-01-01T23:00:00Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.month.utc(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.month.utc(parse("2011-11-06T09:00:00Z"))));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-month.out
===================================================================
--- /Dev/trunk/d3/test/time/test-month.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-month.out	(revision 76)
@@ -0,0 +1,14 @@
+month:
+  2011-01-01T07:59:59Z -> Wed Dec 01 2010 00:00:00 GMT-0800 (PST)
+  2011-01-01T08:00:00Z -> Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  2011-01-01T08:00:01Z -> Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Tue Mar 01 2011 00:00:00 GMT-0800 (PST)
+  2011-11-06T09:00:00Z -> Tue Nov 01 2011 00:00:00 GMT-0700 (PDT)
+
+month.utc:
+  2010-12-31T23:59:59Z -> Tue Nov 30 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T23:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Mon Feb 28 2011 16:00:00 GMT-0800 (PST)
+  2011-11-06T09:00:00Z -> Mon Oct 31 2011 17:00:00 GMT-0700 (PDT)
+
Index: /Dev/trunk/d3/test/time/test-months.js
===================================================================
--- /Dev/trunk/d3/test/time/test-months.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-months.js	(revision 76)
@@ -0,0 +1,34 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("months(2010-11-21T06:00:00Z, 2011-02-12T10:00:00Z):");
+d3.time.months(parse("2010-11-21T06:00:00Z"), parse("2011-02-12T10:00:00Z")).forEach(log);
+console.log("");
+
+console.log("months(2011-01-02T07:00:00Z, 2011-04-24T11:00:00Z):");
+d3.time.months(parse("2011-01-02T07:00:00Z"), parse("2011-04-24T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("months(2011-09-25T07:00:00Z, 2011-12-17T11:00:00Z):");
+d3.time.months(parse("2011-09-25T07:00:00Z"), parse("2011-12-17T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("months(2011-09-25T07:00:00Z, 2012-12-17T11:00:00Z, 3):");
+d3.time.months(parse("2011-09-25T07:00:00Z"), parse("2012-12-17T11:00:00Z"), 3).forEach(log);
+console.log("");
+
+console.log("months.utc(2010-11-20T22:00:00Z, 2011-02-12T02:00:00Z):");
+d3.time.months.utc(parse("2010-11-20T22:00:00Z"), parse("2011-02-12T02:00:00Z")).forEach(log);
+console.log("");
+
+console.log("months.utc(2010-11-20T22:00:00Z, 2012-02-12T02:00:00Z, 3):");
+d3.time.months.utc(parse("2010-11-20T22:00:00Z"), parse("2012-02-12T02:00:00Z"), 3).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + format(date));
+}
Index: /Dev/trunk/d3/test/time/test-months.out
===================================================================
--- /Dev/trunk/d3/test/time/test-months.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-months.out	(revision 76)
@@ -0,0 +1,34 @@
+months(2010-11-21T06:00:00Z, 2011-02-12T10:00:00Z):
+  Wed Dec 01 2010 00:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  Tue Feb 01 2011 00:00:00 GMT-0800 (PST)
+
+months(2011-01-02T07:00:00Z, 2011-04-24T11:00:00Z):
+  Tue Feb 01 2011 00:00:00 GMT-0800 (PST)
+  Tue Mar 01 2011 00:00:00 GMT-0800 (PST)
+  Fri Apr 01 2011 00:00:00 GMT-0700 (PDT)
+
+months(2011-09-25T07:00:00Z, 2011-12-17T11:00:00Z):
+  Sat Oct 01 2011 00:00:00 GMT-0700 (PDT)
+  Tue Nov 01 2011 00:00:00 GMT-0700 (PDT)
+  Thu Dec 01 2011 00:00:00 GMT-0800 (PST)
+
+months(2011-09-25T07:00:00Z, 2012-12-17T11:00:00Z, 3):
+  Sat Oct 01 2011 00:00:00 GMT-0700 (PDT)
+  Sun Jan 01 2012 00:00:00 GMT-0800 (PST)
+  Sun Apr 01 2012 00:00:00 GMT-0700 (PDT)
+  Sun Jul 01 2012 00:00:00 GMT-0700 (PDT)
+  Mon Oct 01 2012 00:00:00 GMT-0700 (PDT)
+
+months.utc(2010-11-20T22:00:00Z, 2011-02-12T02:00:00Z):
+  Tue Nov 30 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Mon Jan 31 2011 16:00:00 GMT-0800 (PST)
+
+months.utc(2010-11-20T22:00:00Z, 2012-02-12T02:00:00Z, 3):
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Thu Mar 31 2011 17:00:00 GMT-0700 (PDT)
+  Thu Jun 30 2011 17:00:00 GMT-0700 (PDT)
+  Fri Sep 30 2011 17:00:00 GMT-0700 (PDT)
+  Sat Dec 31 2011 16:00:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-parse-iso.js
===================================================================
--- /Dev/trunk/d3/test/time/test-parse-iso.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-parse-iso.js	(revision 76)
@@ -0,0 +1,10 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+var f = d3.time.format.utc("%c");
+
+console.log("parse:");
+console.log("  1990-01-01T00:00:00Z ->", f(d3.time.format.iso.parse("1990-01-01T00:00:00Z")));
+console.log("  2011-12-31T23:59:59Z ->", f(d3.time.format.iso.parse("2011-12-31T23:59:59Z")));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-parse-iso.out
===================================================================
--- /Dev/trunk/d3/test/time/test-parse-iso.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-parse-iso.out	(revision 76)
@@ -0,0 +1,4 @@
+parse:
+  1990-01-01T00:00:00Z -> Mon Jan  1 00:00:00 1990
+  2011-12-31T23:59:59Z -> Sat Dec 31 23:59:59 2011
+
Index: /Dev/trunk/d3/test/time/test-parse-utc.js
===================================================================
--- /Dev/trunk/d3/test/time/test-parse-utc.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-parse-utc.js	(revision 76)
@@ -0,0 +1,80 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+var F = d3.time.format.utc,
+    f = d3.time.format("%c");
+
+console.log("parse a m/d/Y:");
+console.log("            Sun 01/01/1990:", f(F("%a %m/%d/%Y").parse("Sun 01/01/1990")));
+console.log("            Wed 01/01/1990:", f(F("%a %m/%d/%Y").parse("Wed 01/01/1990")));
+console.log("            XXX 01/01/1990:", F("%a %m/%d/%Y").parse("XXX 01/01/1990"));
+console.log("");
+
+console.log("parse A m/d/Y:");
+console.log("         Sunday 01/01/1990:", f(F("%A %m/%d/%Y").parse("Sunday 01/01/1990")));
+console.log("      Wednesday 01/01/1990:", f(F("%A %m/%d/%Y").parse("Wednesday 01/01/1990")));
+console.log("       Caturday 01/01/1990:", F("%A %m/%d/%Y").parse("Caturday 01/01/1990"));
+console.log("");
+
+console.log("parse m/d/y:");
+console.log("                    1/1/90:", f(F("%m/%d/%y").parse("1/1/90")));
+console.log("                    1/1/10:", f(F("%m/%d/%y").parse("1/1/10")));
+console.log("");
+
+console.log("parse x:");
+console.log("                    1/1/90:", f(F("%x").parse("1/1/90")));
+console.log("                    1/1/10:", f(F("%x").parse("1/1/10")));
+console.log("");
+
+console.log("parse b d Y:");
+console.log("              jan 01, 1990:", f(F("%b %d, %Y").parse("jan 01, 1990")));
+console.log("              jan  1, 1990:", f(F("%b %d, %Y").parse("jan  1, 1990")));
+console.log("              1 Feb., 1990:", f(F("%d %b., %Y").parse("1 Feb., 1990")));
+console.log("             01 Feb., 1990:", f(F("%d %b., %Y").parse("01 Feb., 1990")));
+console.log("              1 Feb., 1990:", f(F("%d %b., %Y").parse(" 1 Feb., 1990")));
+console.log("              1 Feb., 1990:", f(F(" %d %b., %Y").parse(" 1 Feb., 1990")));
+console.log("                Moy 1 1990:", F("%b %d %Y").parse("Moy 1 1990"));
+console.log("");
+
+console.log("parse B d Y:");
+console.log("          January 01, 1990:", f(F("%B %d, %Y").parse("January 01, 1990")));
+console.log("          january  1, 1990:", f(F("%B %d, %Y").parse("january  1, 1990")));
+console.log("          1 February, 1990:", f(F("%d %B, %Y").parse("1 February, 1990")));
+console.log("         01 February, 1990:", f(F("%d %B, %Y").parse("01 February, 1990")));
+console.log("          1 February, 1990:", f(F("%d %B, %Y").parse(" 1 February, 1990")));
+console.log("          1 February, 1990:", f(F(" %d %B, %Y").parse(" 1 February, 1990")));
+console.log("               Juin 1 1990:", F("%B %d %Y").parse("Join 1 1990"));
+console.log("");
+
+console.log("parse c:");
+console.log("  Mon Jan  1 00:00:00 1990:", f(F("%c").parse("Mon Jan  1 00:00:00 1990")));
+console.log("  Sun Jan  1 00:00:00 1990:", f(F("%c").parse("Sun Jan  1 00:00:00 1990")));
+console.log("  Mon Jan 01 00:00:00 1990:", f(F("%c").parse("Mon Jan 01 00:00:00 1990")));
+console.log("   Mon Jan 1 00:00:00 1990:", f(F("%c").parse("Mon Jan 1 00:00:00 1990")));
+console.log("      Mon Jan 1 0:0:0 1990:", f(F("%c").parse("Mon Jan 1 0:0:0 1990")));
+console.log("");
+
+console.log("parse H M S:");
+console.log("                  00:00:00:", f(F("%H:%M:%S").parse("00:00:00")));
+console.log("                  11:59:59:", f(F("%H:%M:%S").parse("11:59:59")));
+console.log("                  12:00:00:", f(F("%H:%M:%S").parse("12:00:00")));
+console.log("                  12:00:01:", f(F("%H:%M:%S").parse("12:00:01")));
+console.log("                  23:59:59:", f(F("%H:%M:%S").parse("23:59:59")));
+console.log("");
+
+console.log("parse X:");
+console.log("                  00:00:00:", f(F("%X").parse("00:00:00")));
+console.log("                  11:59:59:", f(F("%X").parse("11:59:59")));
+console.log("                  12:00:00:", f(F("%X").parse("12:00:00")));
+console.log("                  12:00:01:", f(F("%X").parse("12:00:01")));
+console.log("                  23:59:59:", f(F("%X").parse("23:59:59")));
+console.log("");
+
+console.log("parse I M S p:");
+console.log("               12:00:00 am:", f(F("%I:%M:%S %p").parse("12:00:00 am")));
+console.log("               11:59:59 AM:", f(F("%I:%M:%S %p").parse("11:59:59 AM")));
+console.log("               12:00:00 pm:", f(F("%I:%M:%S %p").parse("12:00:00 pm")));
+console.log("               12:00:01 pm:", f(F("%I:%M:%S %p").parse("12:00:01 pm")));
+console.log("               11:59:59 PM:", f(F("%I:%M:%S %p").parse("11:59:59 PM")));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-parse-utc.out
===================================================================
--- /Dev/trunk/d3/test/time/test-parse-utc.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-parse-utc.out	(revision 76)
@@ -0,0 +1,64 @@
+parse a m/d/Y:
+            Sun 01/01/1990: Sun Dec 31 16:00:00 1989
+            Wed 01/01/1990: Sun Dec 31 16:00:00 1989
+            XXX 01/01/1990: null
+
+parse A m/d/Y:
+         Sunday 01/01/1990: Sun Dec 31 16:00:00 1989
+      Wednesday 01/01/1990: Sun Dec 31 16:00:00 1989
+       Caturday 01/01/1990: null
+
+parse m/d/y:
+                    1/1/90: Sat Dec 31 16:00:00 2089
+                    1/1/10: Thu Dec 31 16:00:00 2009
+
+parse x:
+                    1/1/90: Sat Dec 31 16:00:00 2089
+                    1/1/10: Thu Dec 31 16:00:00 2009
+
+parse b d Y:
+              jan 01, 1990: Sun Dec 31 16:00:00 1989
+              jan  1, 1990: Sun Dec 31 16:00:00 1989
+              1 Feb., 1990: Wed Jan 31 16:00:00 1990
+             01 Feb., 1990: Wed Jan 31 16:00:00 1990
+              1 Feb., 1990: Wed Jan 31 16:00:00 1990
+              1 Feb., 1990: Wed Jan 31 16:00:00 1990
+                Moy 1 1990: null
+
+parse B d Y:
+          January 01, 1990: Sun Dec 31 16:00:00 1989
+          january  1, 1990: Sun Dec 31 16:00:00 1989
+          1 February, 1990: Wed Jan 31 16:00:00 1990
+         01 February, 1990: Wed Jan 31 16:00:00 1990
+          1 February, 1990: Wed Jan 31 16:00:00 1990
+          1 February, 1990: Wed Jan 31 16:00:00 1990
+               Juin 1 1990: null
+
+parse c:
+  Mon Jan  1 00:00:00 1990: Sun Dec 31 16:00:00 1989
+  Sun Jan  1 00:00:00 1990: Sun Dec 31 16:00:00 1989
+  Mon Jan 01 00:00:00 1990: Sun Dec 31 16:00:00 1989
+   Mon Jan 1 00:00:00 1990: Sun Dec 31 16:00:00 1989
+      Mon Jan 1 0:0:0 1990: Sun Dec 31 16:00:00 1989
+
+parse H M S:
+                  00:00:00: Sun Dec 31 16:00:00 1899
+                  11:59:59: Mon Jan  1 03:59:59 1900
+                  12:00:00: Mon Jan  1 04:00:00 1900
+                  12:00:01: Mon Jan  1 04:00:01 1900
+                  23:59:59: Mon Jan  1 15:59:59 1900
+
+parse X:
+                  00:00:00: Sun Dec 31 16:00:00 1899
+                  11:59:59: Mon Jan  1 03:59:59 1900
+                  12:00:00: Mon Jan  1 04:00:00 1900
+                  12:00:01: Mon Jan  1 04:00:01 1900
+                  23:59:59: Mon Jan  1 15:59:59 1900
+
+parse I M S p:
+               12:00:00 am: Sun Dec 31 16:00:00 1899
+               11:59:59 AM: Mon Jan  1 03:59:59 1900
+               12:00:00 pm: Mon Jan  1 04:00:00 1900
+               12:00:01 pm: Mon Jan  1 04:00:01 1900
+               11:59:59 PM: Mon Jan  1 15:59:59 1900
+
Index: /Dev/trunk/d3/test/time/test-parse.js
===================================================================
--- /Dev/trunk/d3/test/time/test-parse.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-parse.js	(revision 76)
@@ -0,0 +1,79 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+var f = d3.time.format("%c");
+
+console.log("parse a m/d/Y:");
+console.log("            Sun 01/01/1990:", f(d3.time.format("%a %m/%d/%Y").parse("Sun 01/01/1990")));
+console.log("            Wed 01/01/1990:", f(d3.time.format("%a %m/%d/%Y").parse("Wed 01/01/1990")));
+console.log("            XXX 01/01/1990:", d3.time.format("%a %m/%d/%Y").parse("XXX 01/01/1990"));
+console.log("");
+
+console.log("parse A m/d/Y:");
+console.log("         Sunday 01/01/1990:", f(d3.time.format("%A %m/%d/%Y").parse("Sunday 01/01/1990")));
+console.log("      Wednesday 01/01/1990:", f(d3.time.format("%A %m/%d/%Y").parse("Wednesday 01/01/1990")));
+console.log("       Caturday 01/01/1990:", d3.time.format("%A %m/%d/%Y").parse("Caturday 01/01/1990"));
+console.log("");
+
+console.log("parse m/d/y:");
+console.log("                    1/1/90:", f(d3.time.format("%m/%d/%y").parse("1/1/90")));
+console.log("                    1/1/10:", f(d3.time.format("%m/%d/%y").parse("1/1/10")));
+console.log("");
+
+console.log("parse x:");
+console.log("                    1/1/90:", f(d3.time.format("%x").parse("1/1/90")));
+console.log("                    1/1/10:", f(d3.time.format("%x").parse("1/1/10")));
+console.log("");
+
+console.log("parse b d Y:");
+console.log("              jan 01, 1990:", f(d3.time.format("%b %d, %Y").parse("jan 01, 1990")));
+console.log("              jan  1, 1990:", f(d3.time.format("%b %d, %Y").parse("jan  1, 1990")));
+console.log("              1 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse("1 Feb., 1990")));
+console.log("             01 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse("01 Feb., 1990")));
+console.log("              1 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse(" 1 Feb., 1990")));
+console.log("              1 Feb., 1990:", f(d3.time.format(" %d %b., %Y").parse(" 1 Feb., 1990")));
+console.log("                Moy 1 1990:", d3.time.format("%b %d %Y").parse("Moy 1 1990"));
+console.log("");
+
+console.log("parse B d Y:");
+console.log("          January 01, 1990:", f(d3.time.format("%B %d, %Y").parse("January 01, 1990")));
+console.log("          january  1, 1990:", f(d3.time.format("%B %d, %Y").parse("january  1, 1990")));
+console.log("          1 February, 1990:", f(d3.time.format("%d %B, %Y").parse("1 February, 1990")));
+console.log("         01 February, 1990:", f(d3.time.format("%d %B, %Y").parse("01 February, 1990")));
+console.log("          1 February, 1990:", f(d3.time.format("%d %B, %Y").parse(" 1 February, 1990")));
+console.log("          1 February, 1990:", f(d3.time.format(" %d %B, %Y").parse(" 1 February, 1990")));
+console.log("               Juin 1 1990:", d3.time.format("%B %d %Y").parse("Join 1 1990"));
+console.log("");
+
+console.log("parse c:");
+console.log("  Mon Jan  1 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan  1 00:00:00 1990")));
+console.log("  Sun Jan  1 00:00:00 1990:", f(d3.time.format("%c").parse("Sun Jan  1 00:00:00 1990")));
+console.log("  Mon Jan 01 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan 01 00:00:00 1990")));
+console.log("   Mon Jan 1 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan 1 00:00:00 1990")));
+console.log("      Mon Jan 1 0:0:0 1990:", f(d3.time.format("%c").parse("Mon Jan 1 0:0:0 1990")));
+console.log("");
+
+console.log("parse H M S:");
+console.log("                  00:00:00:", f(d3.time.format("%H:%M:%S").parse("00:00:00")));
+console.log("                  11:59:59:", f(d3.time.format("%H:%M:%S").parse("11:59:59")));
+console.log("                  12:00:00:", f(d3.time.format("%H:%M:%S").parse("12:00:00")));
+console.log("                  12:00:01:", f(d3.time.format("%H:%M:%S").parse("12:00:01")));
+console.log("                  23:59:59:", f(d3.time.format("%H:%M:%S").parse("23:59:59")));
+console.log("");
+
+console.log("parse X:");
+console.log("                  00:00:00:", f(d3.time.format("%X").parse("00:00:00")));
+console.log("                  11:59:59:", f(d3.time.format("%X").parse("11:59:59")));
+console.log("                  12:00:00:", f(d3.time.format("%X").parse("12:00:00")));
+console.log("                  12:00:01:", f(d3.time.format("%X").parse("12:00:01")));
+console.log("                  23:59:59:", f(d3.time.format("%X").parse("23:59:59")));
+console.log("");
+
+console.log("parse I M S p:");
+console.log("               12:00:00 am:", f(d3.time.format("%I:%M:%S %p").parse("12:00:00 am")));
+console.log("               11:59:59 AM:", f(d3.time.format("%I:%M:%S %p").parse("11:59:59 AM")));
+console.log("               12:00:00 pm:", f(d3.time.format("%I:%M:%S %p").parse("12:00:00 pm")));
+console.log("               12:00:01 pm:", f(d3.time.format("%I:%M:%S %p").parse("12:00:01 pm")));
+console.log("               11:59:59 PM:", f(d3.time.format("%I:%M:%S %p").parse("11:59:59 PM")));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-parse.out
===================================================================
--- /Dev/trunk/d3/test/time/test-parse.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-parse.out	(revision 76)
@@ -0,0 +1,64 @@
+parse a m/d/Y:
+            Sun 01/01/1990: Mon Jan  1 00:00:00 1990
+            Wed 01/01/1990: Mon Jan  1 00:00:00 1990
+            XXX 01/01/1990: null
+
+parse A m/d/Y:
+         Sunday 01/01/1990: Mon Jan  1 00:00:00 1990
+      Wednesday 01/01/1990: Mon Jan  1 00:00:00 1990
+       Caturday 01/01/1990: null
+
+parse m/d/y:
+                    1/1/90: Sun Jan  1 00:00:00 2090
+                    1/1/10: Fri Jan  1 00:00:00 2010
+
+parse x:
+                    1/1/90: Sun Jan  1 00:00:00 2090
+                    1/1/10: Fri Jan  1 00:00:00 2010
+
+parse b d Y:
+              jan 01, 1990: Mon Jan  1 00:00:00 1990
+              jan  1, 1990: Mon Jan  1 00:00:00 1990
+              1 Feb., 1990: Thu Feb  1 00:00:00 1990
+             01 Feb., 1990: Thu Feb  1 00:00:00 1990
+              1 Feb., 1990: Thu Feb  1 00:00:00 1990
+              1 Feb., 1990: Thu Feb  1 00:00:00 1990
+                Moy 1 1990: null
+
+parse B d Y:
+          January 01, 1990: Mon Jan  1 00:00:00 1990
+          january  1, 1990: Mon Jan  1 00:00:00 1990
+          1 February, 1990: Thu Feb  1 00:00:00 1990
+         01 February, 1990: Thu Feb  1 00:00:00 1990
+          1 February, 1990: Thu Feb  1 00:00:00 1990
+          1 February, 1990: Thu Feb  1 00:00:00 1990
+               Juin 1 1990: null
+
+parse c:
+  Mon Jan  1 00:00:00 1990: Mon Jan  1 00:00:00 1990
+  Sun Jan  1 00:00:00 1990: Mon Jan  1 00:00:00 1990
+  Mon Jan 01 00:00:00 1990: Mon Jan  1 00:00:00 1990
+   Mon Jan 1 00:00:00 1990: Mon Jan  1 00:00:00 1990
+      Mon Jan 1 0:0:0 1990: Mon Jan  1 00:00:00 1990
+
+parse H M S:
+                  00:00:00: Mon Jan  1 00:00:00 1900
+                  11:59:59: Mon Jan  1 11:59:59 1900
+                  12:00:00: Mon Jan  1 12:00:00 1900
+                  12:00:01: Mon Jan  1 12:00:01 1900
+                  23:59:59: Mon Jan  1 23:59:59 1900
+
+parse X:
+                  00:00:00: Mon Jan  1 00:00:00 1900
+                  11:59:59: Mon Jan  1 11:59:59 1900
+                  12:00:00: Mon Jan  1 12:00:00 1900
+                  12:00:01: Mon Jan  1 12:00:01 1900
+                  23:59:59: Mon Jan  1 23:59:59 1900
+
+parse I M S p:
+               12:00:00 am: Mon Jan  1 00:00:00 1900
+               11:59:59 AM: Mon Jan  1 11:59:59 1900
+               12:00:00 pm: Mon Jan  1 12:00:00 1900
+               12:00:01 pm: Mon Jan  1 12:00:01 1900
+               11:59:59 PM: Mon Jan  1 23:59:59 1900
+
Index: /Dev/trunk/d3/test/time/test-scale-utc.js
===================================================================
--- /Dev/trunk/d3/test/time/test-scale-utc.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-scale-utc.js	(revision 76)
@@ -0,0 +1,178 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+var f = d3.time.scale.utc().tickFormat(),
+    u = d3.time.format.iso;
+
+console.log("1-second ticks (explicit):");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:00:10Z")]).ticks(d3.time.seconds.utc).forEach(log);
+console.log("");
+
+console.log("1-second ticks (implicit):");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:00:10Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("5-second ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:00:50Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("15-second ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:02:30Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("30-second ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:05:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-minute ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:10:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("5-minute ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T13:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("15-minute ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T15:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("30-minute ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-hour ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-01T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("3-hour ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-02T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("6-hour ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-04T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("12-hour ticks (implicit):");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-07T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("12-hour ticks (explicit):");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-07T18:00:00Z")]).ticks(d3.time.hours.utc, 12).forEach(log);
+console.log("");
+
+console.log("1-day ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-14T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("2-day ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-week ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-02-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-month ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-10-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("3-month ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2013-02-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-year ticks:");
+d3.time.scale.utc().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2020-02-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("seconds around minute:")
+d3.time.seconds.utc(utc(2011, 01, 02, 01, 02, 56), utc(2011, 01, 02, 01, 03, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around hour:")
+d3.time.seconds.utc(utc(2011, 01, 02, 02, 59, 56), utc(2011, 01, 02, 03, 00, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around day:")
+d3.time.seconds.utc(utc(2011, 01, 01, 23, 59, 56), utc(2011, 01, 02, 00, 00, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around week:")
+d3.time.seconds.utc(utc(2011, 01, 12, 23, 59, 56), utc(2011, 01, 13, 00, 00, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around month:")
+d3.time.seconds.utc(utc(2011, 01, 28, 23, 59, 56), utc(2011, 02, 01, 00, 00, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around year:")
+d3.time.seconds.utc(utc(2010, 11, 31, 23, 59, 56), utc(2011, 00, 01, 00, 00, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around hour:")
+d3.time.minutes.utc(utc(2011, 01, 02, 02, 56), utc(2011, 01, 02, 03, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around day:")
+d3.time.minutes.utc(utc(2011, 01, 01, 23, 56), utc(2011, 01, 02, 00, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around week:")
+d3.time.minutes.utc(utc(2011, 01, 12, 23, 56), utc(2011, 01, 13, 00, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around month:")
+d3.time.minutes.utc(utc(2011, 01, 28, 23, 56), utc(2011, 02, 01, 00, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around year:")
+d3.time.minutes.utc(utc(2010, 11, 31, 23, 56), utc(2011, 00, 01, 00, 05)).forEach(log);
+console.log("");
+
+console.log("hours around day:")
+d3.time.hours.utc(utc(2011, 01, 01, 20), utc(2011, 01, 02, 05)).forEach(log);
+console.log("");
+
+console.log("hours around week:")
+d3.time.hours.utc(utc(2011, 01, 12, 20), utc(2011, 01, 13, 05)).forEach(log);
+console.log("");
+
+console.log("hours around month:")
+d3.time.hours.utc(utc(2011, 01, 28, 20), utc(2011, 02, 01, 05)).forEach(log);
+console.log("");
+
+console.log("hours around year:")
+d3.time.hours.utc(utc(2010, 11, 31, 20), utc(2011, 00, 01, 05)).forEach(log);
+console.log("");
+
+console.log("days around week:")
+d3.time.days.utc(utc(2011, 01, 09), utc(2011, 01, 18)).forEach(log);
+console.log("");
+
+console.log("days around month:")
+d3.time.days.utc(utc(2011, 01, 25), utc(2011, 02, 06)).forEach(log);
+console.log("");
+
+console.log("days around year:")
+d3.time.days.utc(utc(2010, 11, 28), utc(2011, 00, 06)).forEach(log);
+console.log("");
+
+console.log("weeks around month:")
+d3.time.weeks.utc(utc(2011, 03, 01), utc(2011, 05, 01)).forEach(log);
+console.log("");
+
+console.log("weeks around year:")
+d3.time.weeks.utc(utc(2005, 11, 01), utc(2006, 01, 01)).forEach(log);
+console.log("");
+
+console.log("months around year:")
+d3.time.months.utc(utc(2005, 08, 01), utc(2006, 05, 01)).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + f(date));
+}
+
+function utc() {
+  return new Date(Date.UTC.apply(this, arguments));
+}
Index: /Dev/trunk/d3/test/time/test-scale-utc.out
===================================================================
--- /Dev/trunk/d3/test/time/test-scale-utc.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-scale-utc.out	(revision 76)
@@ -0,0 +1,492 @@
+1-second ticks (explicit):
+  12 PM
+  :01
+  :02
+  :03
+  :04
+  :05
+  :06
+  :07
+  :08
+  :09
+
+1-second ticks (implicit):
+  12 PM
+  :01
+  :02
+  :03
+  :04
+  :05
+  :06
+  :07
+  :08
+  :09
+
+5-second ticks:
+  12 PM
+  :05
+  :10
+  :15
+  :20
+  :25
+  :30
+  :35
+  :40
+  :45
+
+15-second ticks:
+  12 PM
+  :15
+  :30
+  :45
+  12:01
+  :15
+  :30
+  :45
+  12:02
+  :15
+
+30-second ticks:
+  12 PM
+  :30
+  12:01
+  :30
+  12:02
+  :30
+  12:03
+  :30
+  12:04
+  :30
+
+1-minute ticks:
+  12 PM
+  12:01
+  12:02
+  12:03
+  12:04
+  12:05
+  12:06
+  12:07
+  12:08
+  12:09
+
+5-minute ticks:
+  12 PM
+  12:05
+  12:10
+  12:15
+  12:20
+  12:25
+  12:30
+  12:35
+  12:40
+  12:45
+  12:50
+  12:55
+
+15-minute ticks:
+  12 PM
+  12:15
+  12:30
+  12:45
+  01 PM
+  01:15
+  01:30
+  01:45
+  02 PM
+  02:15
+  02:30
+  02:45
+
+30-minute ticks:
+  12 PM
+  12:30
+  01 PM
+  01:30
+  02 PM
+  02:30
+  03 PM
+  03:30
+  04 PM
+  04:30
+  05 PM
+  05:30
+
+1-hour ticks:
+  06 AM
+  07 AM
+  08 AM
+  09 AM
+  10 AM
+  11 AM
+  12 PM
+  01 PM
+  02 PM
+  03 PM
+  04 PM
+  05 PM
+
+3-hour ticks:
+  06 AM
+  09 AM
+  12 PM
+  03 PM
+  06 PM
+  09 PM
+  Jan 02
+  03 AM
+  06 AM
+  09 AM
+  12 PM
+  03 PM
+
+6-hour ticks:
+  06 AM
+  12 PM
+  06 PM
+  Jan 02
+  06 AM
+  12 PM
+  06 PM
+  Mon 03
+  06 AM
+  12 PM
+  06 PM
+  Tue 04
+  06 AM
+  12 PM
+
+12-hour ticks (implicit):
+  12 PM
+  Jan 02
+  12 PM
+  Mon 03
+  12 PM
+  Tue 04
+  12 PM
+  Wed 05
+  12 PM
+  Thu 06
+  12 PM
+  Fri 07
+  12 PM
+
+12-hour ticks (explicit):
+  12 PM
+  Jan 02
+  12 PM
+  Mon 03
+  12 PM
+  Tue 04
+  12 PM
+  Wed 05
+  12 PM
+  Thu 06
+  12 PM
+  Fri 07
+  12 PM
+
+1-day ticks:
+  Jan 02
+  Mon 03
+  Tue 04
+  Wed 05
+  Thu 06
+  Fri 07
+  Sat 08
+  Jan 09
+  Mon 10
+  Tue 11
+  Wed 12
+  Thu 13
+  Fri 14
+
+2-day ticks:
+  Mon 03
+  Wed 05
+  Fri 07
+  Jan 09
+  Tue 11
+  Thu 13
+  Sat 15
+  Mon 17
+  Wed 19
+  Fri 21
+  Jan 23
+  Tue 25
+  Thu 27
+
+1-week ticks:
+  Jan 02
+  Jan 09
+  Jan 16
+  Jan 23
+  Jan 30
+  Feb 06
+  Feb 13
+  Feb 20
+  Feb 27
+
+1-month ticks:
+  February
+  March
+  April
+  May
+  June
+  July
+  August
+  September
+  October
+
+3-month ticks:
+  April
+  July
+  October
+  2012
+  April
+  July
+  October
+  2013
+
+1-year ticks:
+  2012
+  2013
+  2014
+  2015
+  2016
+  2017
+  2018
+  2019
+  2020
+
+seconds around minute:
+  :56
+  :57
+  :58
+  :59
+  01:03
+  :01
+  :02
+  :03
+  :04
+
+seconds around hour:
+  :56
+  :57
+  :58
+  :59
+  03 AM
+  :01
+  :02
+  :03
+  :04
+
+seconds around day:
+  :56
+  :57
+  :58
+  :59
+  Wed 02
+  :01
+  :02
+  :03
+  :04
+
+seconds around week:
+  :56
+  :57
+  :58
+  :59
+  Feb 13
+  :01
+  :02
+  :03
+  :04
+
+seconds around month:
+  :56
+  :57
+  :58
+  :59
+  March
+  :01
+  :02
+  :03
+  :04
+
+seconds around year:
+  :56
+  :57
+  :58
+  :59
+  2011
+  :01
+  :02
+  :03
+  :04
+
+minutes around hour:
+  02:56
+  02:57
+  02:58
+  02:59
+  03 AM
+  03:01
+  03:02
+  03:03
+  03:04
+
+minutes around day:
+  11:56
+  11:57
+  11:58
+  11:59
+  Wed 02
+  12:01
+  12:02
+  12:03
+  12:04
+
+minutes around week:
+  11:56
+  11:57
+  11:58
+  11:59
+  Feb 13
+  12:01
+  12:02
+  12:03
+  12:04
+
+minutes around month:
+  11:56
+  11:57
+  11:58
+  11:59
+  March
+  12:01
+  12:02
+  12:03
+  12:04
+
+minutes around year:
+  11:56
+  11:57
+  11:58
+  11:59
+  2011
+  12:01
+  12:02
+  12:03
+  12:04
+
+hours around day:
+  08 PM
+  09 PM
+  10 PM
+  11 PM
+  Wed 02
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+
+hours around week:
+  08 PM
+  09 PM
+  10 PM
+  11 PM
+  Feb 13
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+
+hours around month:
+  08 PM
+  09 PM
+  10 PM
+  11 PM
+  March
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+
+hours around year:
+  08 PM
+  09 PM
+  10 PM
+  11 PM
+  2011
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+
+days around week:
+  Wed 09
+  Thu 10
+  Fri 11
+  Sat 12
+  Feb 13
+  Mon 14
+  Tue 15
+  Wed 16
+  Thu 17
+
+days around month:
+  Fri 25
+  Sat 26
+  Feb 27
+  Mon 28
+  March
+  Wed 02
+  Thu 03
+  Fri 04
+  Sat 05
+
+days around year:
+  Tue 28
+  Wed 29
+  Thu 30
+  Fri 31
+  2011
+  Jan 02
+  Mon 03
+  Tue 04
+  Wed 05
+
+weeks around month:
+  Apr 03
+  Apr 10
+  Apr 17
+  Apr 24
+  May
+  May 08
+  May 15
+  May 22
+  May 29
+
+weeks around year:
+  Dec 04
+  Dec 11
+  Dec 18
+  Dec 25
+  2006
+  Jan 08
+  Jan 15
+  Jan 22
+  Jan 29
+
+months around year:
+  September
+  October
+  November
+  December
+  2006
+  February
+  March
+  April
+  May
+
Index: /Dev/trunk/d3/test/time/test-scale.js
===================================================================
--- /Dev/trunk/d3/test/time/test-scale.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-scale.js	(revision 76)
@@ -0,0 +1,174 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+var f = d3.time.scale().tickFormat(),
+    u = d3.time.format.iso;
+
+console.log("1-second ticks (explicit):");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:00:10Z")]).ticks(d3.time.seconds).forEach(log);
+console.log("");
+
+console.log("1-second ticks (implicit):");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:00:10Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("5-second ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:00:50Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("15-second ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:02:30Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("30-second ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:05:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-minute ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T12:10:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("5-minute ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T13:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("15-minute ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T15:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("30-minute ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T12:00:00Z"), u.parse("2011-01-01T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-hour ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-01T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("3-hour ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-02T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("6-hour ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-04T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("12-hour ticks (implicit):");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-07T18:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("12-hour ticks (explicit):");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-07T18:00:00Z")]).ticks(d3.time.hours, 12).forEach(log);
+console.log("");
+
+console.log("1-day ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-14T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("2-day ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-01-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-week ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-02-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-month ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2011-10-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("3-month ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2013-02-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("1-year ticks:");
+d3.time.scale().domain([u.parse("2011-01-01T06:00:00Z"), u.parse("2020-02-28T06:00:00Z")]).ticks(10).forEach(log);
+console.log("");
+
+console.log("seconds around minute:")
+d3.time.seconds(new Date(2011, 01, 02, 01, 02, 56), new Date(2011, 01, 02, 01, 03, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around hour:")
+d3.time.seconds(new Date(2011, 01, 02, 02, 59, 56), new Date(2011, 01, 02, 03, 00, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around day:")
+d3.time.seconds(new Date(2011, 01, 01, 23, 59, 56), new Date(2011, 01, 02, 00, 00, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around week:")
+d3.time.seconds(new Date(2011, 01, 12, 23, 59, 56), new Date(2011, 01, 13, 00, 00, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around month:")
+d3.time.seconds(new Date(2011, 01, 28, 23, 59, 56), new Date(2011, 02, 01, 00, 00, 05)).forEach(log);
+console.log("");
+
+console.log("seconds around year:")
+d3.time.seconds(new Date(2010, 11, 31, 23, 59, 56), new Date(2011, 00, 01, 00, 00, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around hour:")
+d3.time.minutes(new Date(2011, 01, 02, 02, 56), new Date(2011, 01, 02, 03, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around day:")
+d3.time.minutes(new Date(2011, 01, 01, 23, 56), new Date(2011, 01, 02, 00, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around week:")
+d3.time.minutes(new Date(2011, 01, 12, 23, 56), new Date(2011, 01, 13, 00, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around month:")
+d3.time.minutes(new Date(2011, 01, 28, 23, 56), new Date(2011, 02, 01, 00, 05)).forEach(log);
+console.log("");
+
+console.log("minutes around year:")
+d3.time.minutes(new Date(2010, 11, 31, 23, 56), new Date(2011, 00, 01, 00, 05)).forEach(log);
+console.log("");
+
+console.log("hours around day:")
+d3.time.hours(new Date(2011, 01, 01, 20), new Date(2011, 01, 02, 05)).forEach(log);
+console.log("");
+
+console.log("hours around week:")
+d3.time.hours(new Date(2011, 01, 12, 20), new Date(2011, 01, 13, 05)).forEach(log);
+console.log("");
+
+console.log("hours around month:")
+d3.time.hours(new Date(2011, 01, 28, 20), new Date(2011, 02, 01, 05)).forEach(log);
+console.log("");
+
+console.log("hours around year:")
+d3.time.hours(new Date(2010, 11, 31, 20), new Date(2011, 00, 01, 05)).forEach(log);
+console.log("");
+
+console.log("days around week:")
+d3.time.days(new Date(2011, 01, 09), new Date(2011, 01, 18)).forEach(log);
+console.log("");
+
+console.log("days around month:")
+d3.time.days(new Date(2011, 01, 25), new Date(2011, 02, 06)).forEach(log);
+console.log("");
+
+console.log("days around year:")
+d3.time.days(new Date(2010, 11, 28), new Date(2011, 00, 06)).forEach(log);
+console.log("");
+
+console.log("weeks around month:")
+d3.time.weeks(new Date(2011, 03, 01), new Date(2011, 05, 01)).forEach(log);
+console.log("");
+
+console.log("weeks around year:")
+d3.time.weeks(new Date(2005, 11, 01), new Date(2006, 01, 01)).forEach(log);
+console.log("");
+
+console.log("months around year:")
+d3.time.months(new Date(2005, 08, 01), new Date(2006, 05, 01)).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + f(date));
+}
Index: /Dev/trunk/d3/test/time/test-scale.out
===================================================================
--- /Dev/trunk/d3/test/time/test-scale.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-scale.out	(revision 76)
@@ -0,0 +1,496 @@
+1-second ticks (explicit):
+  04 AM
+  :01
+  :02
+  :03
+  :04
+  :05
+  :06
+  :07
+  :08
+  :09
+
+1-second ticks (implicit):
+  04 AM
+  :01
+  :02
+  :03
+  :04
+  :05
+  :06
+  :07
+  :08
+  :09
+
+5-second ticks:
+  04 AM
+  :05
+  :10
+  :15
+  :20
+  :25
+  :30
+  :35
+  :40
+  :45
+
+15-second ticks:
+  04 AM
+  :15
+  :30
+  :45
+  04:01
+  :15
+  :30
+  :45
+  04:02
+  :15
+
+30-second ticks:
+  04 AM
+  :30
+  04:01
+  :30
+  04:02
+  :30
+  04:03
+  :30
+  04:04
+  :30
+
+1-minute ticks:
+  04 AM
+  04:01
+  04:02
+  04:03
+  04:04
+  04:05
+  04:06
+  04:07
+  04:08
+  04:09
+
+5-minute ticks:
+  04 AM
+  04:05
+  04:10
+  04:15
+  04:20
+  04:25
+  04:30
+  04:35
+  04:40
+  04:45
+  04:50
+  04:55
+
+15-minute ticks:
+  04 AM
+  04:15
+  04:30
+  04:45
+  05 AM
+  05:15
+  05:30
+  05:45
+  06 AM
+  06:15
+  06:30
+  06:45
+
+30-minute ticks:
+  04 AM
+  04:30
+  05 AM
+  05:30
+  06 AM
+  06:30
+  07 AM
+  07:30
+  08 AM
+  08:30
+  09 AM
+  09:30
+
+1-hour ticks:
+  10 PM
+  11 PM
+  2011
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+  05 AM
+  06 AM
+  07 AM
+  08 AM
+  09 AM
+
+3-hour ticks:
+  2011
+  03 AM
+  06 AM
+  09 AM
+  12 PM
+  03 PM
+  06 PM
+  09 PM
+  Jan 02
+  03 AM
+  06 AM
+  09 AM
+
+6-hour ticks:
+  2011
+  06 AM
+  12 PM
+  06 PM
+  Jan 02
+  06 AM
+  12 PM
+  06 PM
+  Mon 03
+  06 AM
+  12 PM
+  06 PM
+  Tue 04
+  06 AM
+
+12-hour ticks (implicit):
+  2011
+  12 PM
+  Jan 02
+  12 PM
+  Mon 03
+  12 PM
+  Tue 04
+  12 PM
+  Wed 05
+  12 PM
+  Thu 06
+  12 PM
+  Fri 07
+
+12-hour ticks (explicit):
+  2011
+  12 PM
+  Jan 02
+  12 PM
+  Mon 03
+  12 PM
+  Tue 04
+  12 PM
+  Wed 05
+  12 PM
+  Thu 06
+  12 PM
+  Fri 07
+
+1-day ticks:
+  2011
+  Jan 02
+  Mon 03
+  Tue 04
+  Wed 05
+  Thu 06
+  Fri 07
+  Sat 08
+  Jan 09
+  Mon 10
+  Tue 11
+  Wed 12
+  Thu 13
+
+2-day ticks:
+  2011
+  Mon 03
+  Wed 05
+  Fri 07
+  Jan 09
+  Tue 11
+  Thu 13
+  Sat 15
+  Mon 17
+  Wed 19
+  Fri 21
+  Jan 23
+  Tue 25
+  Thu 27
+
+1-week ticks:
+  Jan 02
+  Jan 09
+  Jan 16
+  Jan 23
+  Jan 30
+  Feb 06
+  Feb 13
+  Feb 20
+  Feb 27
+
+1-month ticks:
+  2011
+  February
+  March
+  April
+  May
+  June
+  July
+  August
+  September
+  October
+
+3-month ticks:
+  2011
+  April
+  July
+  October
+  2012
+  April
+  July
+  October
+  2013
+
+1-year ticks:
+  2011
+  2012
+  2013
+  2014
+  2015
+  2016
+  2017
+  2018
+  2019
+  2020
+
+seconds around minute:
+  :56
+  :57
+  :58
+  :59
+  01:03
+  :01
+  :02
+  :03
+  :04
+
+seconds around hour:
+  :56
+  :57
+  :58
+  :59
+  03 AM
+  :01
+  :02
+  :03
+  :04
+
+seconds around day:
+  :56
+  :57
+  :58
+  :59
+  Wed 02
+  :01
+  :02
+  :03
+  :04
+
+seconds around week:
+  :56
+  :57
+  :58
+  :59
+  Feb 13
+  :01
+  :02
+  :03
+  :04
+
+seconds around month:
+  :56
+  :57
+  :58
+  :59
+  March
+  :01
+  :02
+  :03
+  :04
+
+seconds around year:
+  :56
+  :57
+  :58
+  :59
+  2011
+  :01
+  :02
+  :03
+  :04
+
+minutes around hour:
+  02:56
+  02:57
+  02:58
+  02:59
+  03 AM
+  03:01
+  03:02
+  03:03
+  03:04
+
+minutes around day:
+  11:56
+  11:57
+  11:58
+  11:59
+  Wed 02
+  12:01
+  12:02
+  12:03
+  12:04
+
+minutes around week:
+  11:56
+  11:57
+  11:58
+  11:59
+  Feb 13
+  12:01
+  12:02
+  12:03
+  12:04
+
+minutes around month:
+  11:56
+  11:57
+  11:58
+  11:59
+  March
+  12:01
+  12:02
+  12:03
+  12:04
+
+minutes around year:
+  11:56
+  11:57
+  11:58
+  11:59
+  2011
+  12:01
+  12:02
+  12:03
+  12:04
+
+hours around day:
+  08 PM
+  09 PM
+  10 PM
+  11 PM
+  Wed 02
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+
+hours around week:
+  08 PM
+  09 PM
+  10 PM
+  11 PM
+  Feb 13
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+
+hours around month:
+  08 PM
+  09 PM
+  10 PM
+  11 PM
+  March
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+
+hours around year:
+  08 PM
+  09 PM
+  10 PM
+  11 PM
+  2011
+  01 AM
+  02 AM
+  03 AM
+  04 AM
+
+days around week:
+  Wed 09
+  Thu 10
+  Fri 11
+  Sat 12
+  Feb 13
+  Mon 14
+  Tue 15
+  Wed 16
+  Thu 17
+
+days around month:
+  Fri 25
+  Sat 26
+  Feb 27
+  Mon 28
+  March
+  Wed 02
+  Thu 03
+  Fri 04
+  Sat 05
+
+days around year:
+  Tue 28
+  Wed 29
+  Thu 30
+  Fri 31
+  2011
+  Jan 02
+  Mon 03
+  Tue 04
+  Wed 05
+
+weeks around month:
+  Apr 03
+  Apr 10
+  Apr 17
+  Apr 24
+  May
+  May 08
+  May 15
+  May 22
+  May 29
+
+weeks around year:
+  Dec 04
+  Dec 11
+  Dec 18
+  Dec 25
+  2006
+  Jan 08
+  Jan 15
+  Jan 22
+  Jan 29
+
+months around year:
+  September
+  October
+  November
+  December
+  2006
+  February
+  March
+  April
+  May
+
Index: /Dev/trunk/d3/test/time/test-second.js
===================================================================
--- /Dev/trunk/d3/test/time/test-second.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-second.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("second:");
+console.log("  2010-12-31T23:59:59.999Z -> " + format(d3.time.second(parse("2010-12-31T23:59:59.999Z"))));
+console.log("  2011-01-01T00:00:00.000Z -> " + format(d3.time.second(parse("2011-01-01T00:00:00.000Z"))));
+console.log("  2011-01-01T00:00:00.456Z -> " + format(d3.time.second(parse("2011-01-01T00:00:00.456Z"))));
+console.log("  2011-01-01T00:00:00.999Z -> " + format(d3.time.second(parse("2011-01-01T00:00:00.999Z"))));
+console.log("  2011-01-01T00:00:59.999Z -> " + format(d3.time.second(parse("2011-01-01T00:00:59.999Z"))));
+console.log("");
+
+console.log("second.utc:");
+console.log("  2010-12-31T23:59:59.999Z -> " + format(d3.time.second.utc(parse("2010-12-31T23:59:59.999Z"))));
+console.log("  2011-01-01T00:00:00.000Z -> " + format(d3.time.second.utc(parse("2011-01-01T00:00:00.000Z"))));
+console.log("  2011-01-01T00:00:00.456Z -> " + format(d3.time.second.utc(parse("2011-01-01T00:00:00.456Z"))));
+console.log("  2011-01-01T00:00:00.999Z -> " + format(d3.time.second.utc(parse("2011-01-01T00:00:00.999Z"))));
+console.log("  2011-01-01T00:00:59.999Z -> " + format(d3.time.second.utc(parse("2011-01-01T00:00:59.999Z"))));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-second.out
===================================================================
--- /Dev/trunk/d3/test/time/test-second.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-second.out	(revision 76)
@@ -0,0 +1,14 @@
+second:
+  2010-12-31T23:59:59.999Z -> Fri Dec 31 2010 15:59:59 GMT-0800 (PST)
+  2011-01-01T00:00:00.000Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00.456Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00.999Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:59.999Z -> Fri Dec 31 2010 16:00:59 GMT-0800 (PST)
+
+second.utc:
+  2010-12-31T23:59:59.999Z -> Fri Dec 31 2010 15:59:59 GMT-0800 (PST)
+  2011-01-01T00:00:00.000Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00.456Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00.999Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:59.999Z -> Fri Dec 31 2010 16:00:59 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-seconds.js
===================================================================
--- /Dev/trunk/d3/test/time/test-seconds.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-seconds.js	(revision 76)
@@ -0,0 +1,30 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("seconds(2011-01-01T07:59:58Z, 2011-01-01T08:00:02Z):");
+d3.time.seconds(parse("2011-01-01T07:59:58Z"), parse("2011-01-01T08:00:02Z")).forEach(log);
+console.log("");
+
+console.log("seconds(2011-03-13T09:59:58Z, 2011-03-13T10:00:02Z):");
+d3.time.seconds(parse("2011-03-13T09:59:58Z"), parse("2011-03-13T10:00:02Z")).forEach(log);
+console.log("");
+
+console.log("seconds(2011-03-13T09:59:58Z, 2011-03-13T10:02:02Z, 15):");
+d3.time.seconds(parse("2011-03-13T09:59:58Z"), parse("2011-03-13T10:02:02Z"), 15).forEach(log);
+console.log("");
+
+console.log("seconds.utc(2010-12-31T23:59:58Z, 2011-01-01T00:00:02Z):");
+d3.time.seconds.utc(parse("2010-12-31T23:59:58Z"), parse("2011-01-01T00:00:02Z")).forEach(log);
+console.log("");
+
+console.log("seconds.utc(2010-12-31T23:59:58Z, 2011-01-01T00:02:02Z, 15):");
+d3.time.seconds.utc(parse("2010-12-31T23:59:58Z"), parse("2011-01-01T00:02:02Z"), 15).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + format(date));
+}
Index: /Dev/trunk/d3/test/time/test-seconds.out
===================================================================
--- /Dev/trunk/d3/test/time/test-seconds.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-seconds.out	(revision 76)
@@ -0,0 +1,40 @@
+seconds(2011-01-01T07:59:58Z, 2011-01-01T08:00:02Z):
+  Fri Dec 31 2010 23:59:58 GMT-0800 (PST)
+  Fri Dec 31 2010 23:59:59 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:01 GMT-0800 (PST)
+
+seconds(2011-03-13T09:59:58Z, 2011-03-13T10:00:02Z):
+  Sun Mar 13 2011 01:59:58 GMT-0800 (PST)
+  Sun Mar 13 2011 01:59:59 GMT-0800 (PST)
+  Sun Mar 13 2011 03:00:00 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:00:01 GMT-0700 (PDT)
+
+seconds(2011-03-13T09:59:58Z, 2011-03-13T10:02:02Z, 15):
+  Sun Mar 13 2011 03:00:00 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:00:15 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:00:30 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:00:45 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:01:00 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:01:15 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:01:30 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:01:45 GMT-0700 (PDT)
+  Sun Mar 13 2011 03:02:00 GMT-0700 (PDT)
+
+seconds.utc(2010-12-31T23:59:58Z, 2011-01-01T00:00:02Z):
+  Fri Dec 31 2010 15:59:58 GMT-0800 (PST)
+  Fri Dec 31 2010 15:59:59 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:01 GMT-0800 (PST)
+
+seconds.utc(2010-12-31T23:59:58Z, 2011-01-01T00:02:02Z, 15):
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:15 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:30 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:45 GMT-0800 (PST)
+  Fri Dec 31 2010 16:01:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:01:15 GMT-0800 (PST)
+  Fri Dec 31 2010 16:01:30 GMT-0800 (PST)
+  Fri Dec 31 2010 16:01:45 GMT-0800 (PST)
+  Fri Dec 31 2010 16:02:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-week.js
===================================================================
--- /Dev/trunk/d3/test/time/test-week.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-week.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("week:");
+console.log("  2011-01-01T07:59:59Z -> " + format(d3.time.week(parse("2011-01-01T07:59:59Z"))));
+console.log("  2011-01-01T08:00:00Z -> " + format(d3.time.week(parse("2011-01-01T08:00:00Z"))));
+console.log("  2011-01-02T08:00:01Z -> " + format(d3.time.week(parse("2011-01-02T08:00:01Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.week(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.week(parse("2011-11-06T09:00:00Z"))));
+console.log("");
+
+console.log("week.utc:");
+console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.week.utc(parse("2010-12-31T23:59:59Z"))));
+console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.week.utc(parse("2011-01-01T00:00:00Z"))));
+console.log("  2011-01-02T23:00:00Z -> " + format(d3.time.week.utc(parse("2011-01-02T23:00:00Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.week.utc(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.week.utc(parse("2011-11-06T09:00:00Z"))));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-week.out
===================================================================
--- /Dev/trunk/d3/test/time/test-week.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-week.out	(revision 76)
@@ -0,0 +1,14 @@
+week:
+  2011-01-01T07:59:59Z -> Sun Dec 26 2010 00:00:00 GMT-0800 (PST)
+  2011-01-01T08:00:00Z -> Sun Dec 26 2010 00:00:00 GMT-0800 (PST)
+  2011-01-02T08:00:01Z -> Sun Jan 02 2011 00:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Sun Mar 13 2011 00:00:00 GMT-0800 (PST)
+  2011-11-06T09:00:00Z -> Sun Nov 06 2011 00:00:00 GMT-0700 (PDT)
+
+week.utc:
+  2010-12-31T23:59:59Z -> Sat Dec 25 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00Z -> Sat Dec 25 2010 16:00:00 GMT-0800 (PST)
+  2011-01-02T23:00:00Z -> Sat Jan 01 2011 16:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Sat Mar 12 2011 16:00:00 GMT-0800 (PST)
+  2011-11-06T09:00:00Z -> Sat Nov 05 2011 17:00:00 GMT-0700 (PDT)
+
Index: /Dev/trunk/d3/test/time/test-weeks.js
===================================================================
--- /Dev/trunk/d3/test/time/test-weeks.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-weeks.js	(revision 76)
@@ -0,0 +1,34 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("weeks(2010-12-21T06:00:00Z, 2011-01-12T10:00:00Z):");
+d3.time.weeks(parse("2010-12-21T06:00:00Z"), parse("2011-01-12T10:00:00Z")).forEach(log);
+console.log("");
+
+console.log("weeks(2011-03-02T07:00:00Z, 2011-03-24T11:00:00Z):");
+d3.time.weeks(parse("2011-03-02T07:00:00Z"), parse("2011-03-24T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("weeks(2011-10-25T07:00:00Z, 2011-11-17T11:00:00Z):");
+d3.time.weeks(parse("2011-10-25T07:00:00Z"), parse("2011-11-17T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("weeks(2011-10-25T07:00:00Z, 2012-11-17T11:00:00Z, 4):");
+d3.time.weeks(parse("2011-10-25T07:00:00Z"), parse("2012-11-17T11:00:00Z"), 4).forEach(log);
+console.log("");
+
+console.log("weeks.utc(2010-12-20T22:00:00Z, 2011-01-12T02:00:00Z):");
+d3.time.weeks.utc(parse("2010-12-20T22:00:00Z"), parse("2011-01-12T02:00:00Z")).forEach(log);
+console.log("");
+
+console.log("weeks.utc(2010-12-20T22:00:00Z, 2011-01-12T02:00:00Z, 4):");
+d3.time.weeks.utc(parse("2010-12-20T22:00:00Z"), parse("2012-01-12T02:00:00Z"), 4).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + format(date));
+}
Index: /Dev/trunk/d3/test/time/test-weeks.out
===================================================================
--- /Dev/trunk/d3/test/time/test-weeks.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-weeks.out	(revision 76)
@@ -0,0 +1,51 @@
+weeks(2010-12-21T06:00:00Z, 2011-01-12T10:00:00Z):
+  Sun Dec 26 2010 00:00:00 GMT-0800 (PST)
+  Sun Jan 02 2011 00:00:00 GMT-0800 (PST)
+  Sun Jan 09 2011 00:00:00 GMT-0800 (PST)
+
+weeks(2011-03-02T07:00:00Z, 2011-03-24T11:00:00Z):
+  Sun Mar 06 2011 00:00:00 GMT-0800 (PST)
+  Sun Mar 13 2011 00:00:00 GMT-0800 (PST)
+  Sun Mar 20 2011 00:00:00 GMT-0700 (PDT)
+
+weeks(2011-10-25T07:00:00Z, 2011-11-17T11:00:00Z):
+  Sun Oct 30 2011 00:00:00 GMT-0700 (PDT)
+  Sun Nov 06 2011 00:00:00 GMT-0700 (PDT)
+  Sun Nov 13 2011 00:00:00 GMT-0800 (PST)
+
+weeks(2011-10-25T07:00:00Z, 2012-11-17T11:00:00Z, 4):
+  Sun Nov 06 2011 00:00:00 GMT-0700 (PDT)
+  Sun Dec 04 2011 00:00:00 GMT-0800 (PST)
+  Sun Jan 01 2012 00:00:00 GMT-0800 (PST)
+  Sun Jan 29 2012 00:00:00 GMT-0800 (PST)
+  Sun Feb 26 2012 00:00:00 GMT-0800 (PST)
+  Sun Apr 01 2012 00:00:00 GMT-0700 (PDT)
+  Sun Apr 29 2012 00:00:00 GMT-0700 (PDT)
+  Sun May 27 2012 00:00:00 GMT-0700 (PDT)
+  Sun Jun 24 2012 00:00:00 GMT-0700 (PDT)
+  Sun Jul 22 2012 00:00:00 GMT-0700 (PDT)
+  Sun Aug 19 2012 00:00:00 GMT-0700 (PDT)
+  Sun Sep 16 2012 00:00:00 GMT-0700 (PDT)
+  Sun Oct 14 2012 00:00:00 GMT-0700 (PDT)
+
+weeks.utc(2010-12-20T22:00:00Z, 2011-01-12T02:00:00Z):
+  Sat Dec 25 2010 16:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 16:00:00 GMT-0800 (PST)
+  Sat Jan 08 2011 16:00:00 GMT-0800 (PST)
+
+weeks.utc(2010-12-20T22:00:00Z, 2011-01-12T02:00:00Z, 4):
+  Sat Jan 01 2011 16:00:00 GMT-0800 (PST)
+  Sat Jan 29 2011 16:00:00 GMT-0800 (PST)
+  Sat Feb 26 2011 16:00:00 GMT-0800 (PST)
+  Sat Mar 26 2011 17:00:00 GMT-0700 (PDT)
+  Sat Apr 23 2011 17:00:00 GMT-0700 (PDT)
+  Sat May 21 2011 17:00:00 GMT-0700 (PDT)
+  Sat Jun 18 2011 17:00:00 GMT-0700 (PDT)
+  Sat Jul 16 2011 17:00:00 GMT-0700 (PDT)
+  Sat Aug 13 2011 17:00:00 GMT-0700 (PDT)
+  Sat Sep 10 2011 17:00:00 GMT-0700 (PDT)
+  Sat Oct 08 2011 17:00:00 GMT-0700 (PDT)
+  Sat Nov 05 2011 17:00:00 GMT-0700 (PDT)
+  Sat Dec 03 2011 16:00:00 GMT-0800 (PST)
+  Sat Dec 31 2011 16:00:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-year.js
===================================================================
--- /Dev/trunk/d3/test/time/test-year.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-year.js	(revision 76)
@@ -0,0 +1,22 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("year:");
+console.log("  2011-01-01T07:59:59Z -> " + format(d3.time.year(parse("2011-01-01T07:59:59Z"))));
+console.log("  2011-01-01T08:00:00Z -> " + format(d3.time.year(parse("2011-01-01T08:00:00Z"))));
+console.log("  2011-01-01T08:00:01Z -> " + format(d3.time.year(parse("2011-01-01T08:00:01Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.year(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.year(parse("2011-11-06T09:00:00Z"))));
+console.log("");
+
+console.log("year.utc:");
+console.log("  2010-12-31T23:59:59Z -> " + format(d3.time.year.utc(parse("2010-12-31T23:59:59Z"))));
+console.log("  2011-01-01T00:00:00Z -> " + format(d3.time.year.utc(parse("2011-01-01T00:00:00Z"))));
+console.log("  2011-01-01T23:00:00Z -> " + format(d3.time.year.utc(parse("2011-01-01T23:00:00Z"))));
+console.log("  2011-03-13T09:00:00Z -> " + format(d3.time.year.utc(parse("2011-03-13T09:00:00Z"))));
+console.log("  2011-11-06T09:00:00Z -> " + format(d3.time.year.utc(parse("2011-11-06T09:00:00Z"))));
+console.log("");
Index: /Dev/trunk/d3/test/time/test-year.out
===================================================================
--- /Dev/trunk/d3/test/time/test-year.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-year.out	(revision 76)
@@ -0,0 +1,14 @@
+year:
+  2011-01-01T07:59:59Z -> Fri Jan 01 2010 00:00:00 GMT-0800 (PST)
+  2011-01-01T08:00:00Z -> Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  2011-01-01T08:00:01Z -> Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  2011-11-06T09:00:00Z -> Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+
+year.utc:
+  2010-12-31T23:59:59Z -> Thu Dec 31 2009 16:00:00 GMT-0800 (PST)
+  2011-01-01T00:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-01-01T23:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-03-13T09:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  2011-11-06T09:00:00Z -> Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+
Index: /Dev/trunk/d3/test/time/test-years.js
===================================================================
--- /Dev/trunk/d3/test/time/test-years.js	(revision 76)
+++ /Dev/trunk/d3/test/time/test-years.js	(revision 76)
@@ -0,0 +1,34 @@
+require("./../../lib/env-js/envjs/node");
+require("./../../d3");
+require("./../../d3.time");
+
+function parse(string) { return new Date(string); }
+function format(date) { return date.toString(); }
+
+console.log("years(2009-11-21T06:00:00Z, 2012-02-12T10:00:00Z):");
+d3.time.years(parse("2009-11-21T06:00:00Z"), parse("2012-02-12T10:00:00Z")).forEach(log);
+console.log("");
+
+console.log("years(2009-01-02T07:00:00Z, 2012-04-24T11:00:00Z):");
+d3.time.years(parse("2009-01-02T07:00:00Z"), parse("2012-04-24T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("years(2009-09-25T07:00:00Z, 2012-12-17T11:00:00Z):");
+d3.time.years(parse("2009-09-25T07:00:00Z"), parse("2012-12-17T11:00:00Z")).forEach(log);
+console.log("");
+
+console.log("years(2009-09-25T07:00:00Z, 2042-12-17T11:00:00Z, 5):");
+d3.time.years(parse("2009-09-25T07:00:00Z"), parse("2042-12-17T11:00:00Z"), 5).forEach(log);
+console.log("");
+
+console.log("years.utc(2009-11-20T22:00:00Z, 2012-02-12T02:00:00Z):");
+d3.time.years.utc(parse("2009-11-20T22:00:00Z"), parse("2012-02-12T02:00:00Z")).forEach(log);
+console.log("");
+
+console.log("years.utc(2009-11-20T22:00:00Z, 2012-02-42T02:00:00Z, 5):");
+d3.time.years.utc(parse("2009-11-20T22:00:00Z"), parse("2042-02-12T02:00:00Z"), 5).forEach(log);
+console.log("");
+
+function log(date) {
+  console.log("  " + format(date));
+}
Index: /Dev/trunk/d3/test/time/test-years.out
===================================================================
--- /Dev/trunk/d3/test/time/test-years.out	(revision 76)
+++ /Dev/trunk/d3/test/time/test-years.out	(revision 76)
@@ -0,0 +1,38 @@
+years(2009-11-21T06:00:00Z, 2012-02-12T10:00:00Z):
+  Fri Jan 01 2010 00:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  Sun Jan 01 2012 00:00:00 GMT-0800 (PST)
+
+years(2009-01-02T07:00:00Z, 2012-04-24T11:00:00Z):
+  Fri Jan 01 2010 00:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  Sun Jan 01 2012 00:00:00 GMT-0800 (PST)
+
+years(2009-09-25T07:00:00Z, 2012-12-17T11:00:00Z):
+  Fri Jan 01 2010 00:00:00 GMT-0800 (PST)
+  Sat Jan 01 2011 00:00:00 GMT-0800 (PST)
+  Sun Jan 01 2012 00:00:00 GMT-0800 (PST)
+
+years(2009-09-25T07:00:00Z, 2042-12-17T11:00:00Z, 5):
+  Fri Jan 01 2010 00:00:00 GMT-0800 (PST)
+  Thu Jan 01 2015 00:00:00 GMT-0800 (PST)
+  Wed Jan 01 2020 00:00:00 GMT-0800 (PST)
+  Wed Jan 01 2025 00:00:00 GMT-0800 (PST)
+  Tue Jan 01 2030 00:00:00 GMT-0800 (PST)
+  Mon Jan 01 2035 00:00:00 GMT-0800 (PST)
+  Sun Jan 01 2040 00:00:00 GMT-0800 (PST)
+
+years.utc(2009-11-20T22:00:00Z, 2012-02-12T02:00:00Z):
+  Thu Dec 31 2009 16:00:00 GMT-0800 (PST)
+  Fri Dec 31 2010 16:00:00 GMT-0800 (PST)
+  Sat Dec 31 2011 16:00:00 GMT-0800 (PST)
+
+years.utc(2009-11-20T22:00:00Z, 2012-02-42T02:00:00Z, 5):
+  Thu Dec 31 2009 16:00:00 GMT-0800 (PST)
+  Wed Dec 31 2014 16:00:00 GMT-0800 (PST)
+  Tue Dec 31 2019 16:00:00 GMT-0800 (PST)
+  Tue Dec 31 2024 16:00:00 GMT-0800 (PST)
+  Mon Dec 31 2029 16:00:00 GMT-0800 (PST)
+  Sun Dec 31 2034 16:00:00 GMT-0800 (PST)
+  Sat Dec 31 2039 16:00:00 GMT-0800 (PST)
+
Index: /Dev/trunk/data/surveys/survey_79c98f73ea0d624440430af1e04eaedf.rdf
===================================================================
--- /Dev/trunk/data/surveys/survey_79c98f73ea0d624440430af1e04eaedf.rdf	(revision 76)
+++ /Dev/trunk/data/surveys/survey_79c98f73ea0d624440430af1e04eaedf.rdf	(revision 76)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Generated by RdfSerializer.php from RDF RAP.
+# http://www.wiwiss.fu-berlin.de/suhl/bizer/rdfapi/index.html !-->
+
+<rdf:RDF
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:ns1="http://www.survey.tool/predicates/">
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/survey/79c98f73ea0d624440430af1e04eaedf">
+   <ns1:resource_type rdf:resource="http://www.survey.tool/resources/survey"/>
+   <ns1:uid>79c98f73ea0d624440430af1e04eaedf</ns1:uid>
+   <ns1:title>A survey</ns1:title>
+   <ns1:description>Yes...</ns1:description>
+   <ns1:creator rdf:resource="http://www.survey.tool/resources/user/Creator"/>
+</rdf:Description>
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/question/934b259ec25d99d245a0936c38593781">
+   <ns1:resource_type rdf:resource="http://www.survey.tool/resources/question"/>
+   <ns1:uid>934b259ec25d99d245a0936c38593781</ns1:uid>
+   <ns1:title>It's called awesome</ns1:title>
+   <ns1:description>So what's it called?</ns1:description>
+   <ns1:question_type>mc</ns1:question_type>
+</rdf:Description>
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/answer/cc0e95f621c9c174769ccc8e74ba4e61">
+   <ns1:resource_type rdf:resource="http://www.survey.tool/resources/answer"/>
+   <ns1:uid>cc0e95f621c9c174769ccc8e74ba4e61</ns1:uid>
+   <ns1:title>q1ans1</ns1:title>
+   <ns1:description>James</ns1:description>
+</rdf:Description>
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/question/934b259ec25d99d245a0936c38593781">
+   <ns1:has_answer rdf:resource="http://www.survey.tool/resources/answer/cc0e95f621c9c174769ccc8e74ba4e61"/>
+</rdf:Description>
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/answer/3727f4cb541a95f2286cb66c597cdb85">
+   <ns1:resource_type rdf:resource="http://www.survey.tool/resources/answer"/>
+   <ns1:uid>3727f4cb541a95f2286cb66c597cdb85</ns1:uid>
+   <ns1:title>q1ans2</ns1:title>
+   <ns1:description>Awesome</ns1:description>
+</rdf:Description>
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/question/934b259ec25d99d245a0936c38593781">
+   <ns1:has_answer rdf:resource="http://www.survey.tool/resources/answer/3727f4cb541a95f2286cb66c597cdb85"/>
+</rdf:Description>
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/answer/2b2b3605488bd83155e3994ad3ff4800">
+   <ns1:resource_type rdf:resource="http://www.survey.tool/resources/answer"/>
+   <ns1:uid>2b2b3605488bd83155e3994ad3ff4800</ns1:uid>
+   <ns1:title>q1ans3</ns1:title>
+   <ns1:description>Sha' naynay</ns1:description>
+</rdf:Description>
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/question/934b259ec25d99d245a0936c38593781">
+   <ns1:has_answer rdf:resource="http://www.survey.tool/resources/answer/2b2b3605488bd83155e3994ad3ff4800"/>
+</rdf:Description>
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/survey/79c98f73ea0d624440430af1e04eaedf">
+   <ns1:has_question rdf:resource="http://www.survey.tool/resources/question/934b259ec25d99d245a0936c38593781"/>
+</rdf:Description>
+
+</rdf:RDF>
Index: /Dev/trunk/data/users/users.rdf
===================================================================
--- /Dev/trunk/data/users/users.rdf	(revision 76)
+++ /Dev/trunk/data/users/users.rdf	(revision 76)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Generated by RdfSerializer.php from RDF RAP.
+# http://www.wiwiss.fu-berlin.de/suhl/bizer/rdfapi/index.html !-->
+
+<rdf:RDF
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:ns1="http://www.survey.tool/predicates/">
+
+<rdf:Description rdf:about="http://www.survey.tool/resources/user/b45804a8696456b33f3d19f80bf3c198">
+   <ns1:resource_type rdf:resource="http://www.survey.tool/resources/user"/>
+   <ns1:name>frans</ns1:name>
+   <ns1:uid>b45804a8696456b33f3d19f80bf3c198</ns1:uid>
+   <ns1:password>YrNByNHxZwPoreIjW3lpAgeMg+J6kYBdl53uBCsHRKo=</ns1:password>
+</rdf:Description>
+
+</rdf:RDF>
